summaryrefslogtreecommitdiff
path: root/tools/lz/nullcomp.c
diff options
context:
space:
mode:
authorentrpntr <entrpntr@gmail.com>2020-05-23 19:42:46 -0400
committerentrpntr <entrpntr@gmail.com>2020-06-14 15:06:29 -0400
commit4517c08edaa6783fac0fb15dd98b476e066134f8 (patch)
treebef59ec6959a2822bf1a0eec67f8f07779a2dd25 /tools/lz/nullcomp.c
parentdd97bedd52f97122c0d4a06eb30c0b571ddda343 (diff)
Initial commit of lz compression tools.
Diffstat (limited to 'tools/lz/nullcomp.c')
-rw-r--r--tools/lz/nullcomp.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/tools/lz/nullcomp.c b/tools/lz/nullcomp.c
new file mode 100644
index 00000000..d4535bd3
--- /dev/null
+++ b/tools/lz/nullcomp.c
@@ -0,0 +1,20 @@
+#include "proto.h"
+
+/*
+ Null compressor: stores data uncompressed, using literal (0) commands only.
+ Methods defined: 2
+ Flags values: 0 = split a trailing 33-to-64-byte block at the end into two short blocks; 1 = don't
+*/
+
+struct command * store_uncompressed (__attribute__((unused)) const unsigned char * data, __attribute__((unused)) const unsigned char * bitflipped, unsigned short * size, unsigned flags) {
+ unsigned short position, block, remainder = *size;
+ struct command * result = NULL;
+ *size = 0;
+ for (position = 0; remainder; position += block, remainder -= block) {
+ block = (remainder > MAX_COMMAND_COUNT) ? MAX_COMMAND_COUNT : remainder;
+ if (!(flags & 1) && (block <= (2 * SHORT_COMMAND_COUNT)) && (block > SHORT_COMMAND_COUNT)) block = SHORT_COMMAND_COUNT;
+ result = realloc(result, sizeof(struct command) * (1 + *size));
+ result[(*size) ++] = (struct command) {.command = 0, .count = block, .value = position};
+ }
+ return result;
+}