summaryrefslogtreecommitdiff
path: root/src/pack.c
diff options
context:
space:
mode:
authorjohannes <johannes.herman@gmail.com>2024-02-07 15:43:27 +0100
committerjohannes <johannes.herman@gmail.com>2024-02-07 15:43:27 +0100
commitab6cb49b0b875b5c27510dc57fe3767bfd074dae (patch)
tree716accb128e75c11da1e110421dcfcfec44adace /src/pack.c
parent116de038d3d024232d3640f499a8fb21f1c557fd (diff)
added packed int writer
Diffstat (limited to 'src/pack.c')
-rw-r--r--src/pack.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/pack.c b/src/pack.c
index b9a23be..918bda9 100644
--- a/src/pack.c
+++ b/src/pack.c
@@ -46,3 +46,36 @@ int readint(unsigned char **cp)
return result;
}
+
+void writeint(int in, char **cp)
+{
+ int sign = in < 0;
+ in = (in ^ -sign);
+ char next = (in & 0b00111111);
+ in >>= 6;
+
+ char head = 0;
+ if (in != 0)
+ head |= 0b10000000;
+ if (sign != 0)
+ head |= 0b01000000;
+
+ printf("writing: %2X\n", head | next);
+ **cp = head | next;
+ (*cp)++;
+
+ while (in != 0)
+ {
+ next = (in & 0b01111111);
+ in >>= 7;
+
+ if (in != 0)
+ head = 0b10000000;
+ else
+ head = 0;
+
+ printf("writing: %2X\n", head | next);
+ **cp = head | next;
+ (*cp)++;
+ }
+}