summaryrefslogtreecommitdiff
path: root/src/pack.c
diff options
context:
space:
mode:
authorjohannes <johannes.herman@gmail.com>2024-02-06 12:29:41 +0100
committerjohannes <johannes.herman@gmail.com>2024-02-06 12:29:41 +0100
commit0ab2c0afc6fd192f4008962ef400b92434e2dc2d (patch)
tree31ff61e1945850048ac6b82f23cb428d62e0cb70 /src/pack.c
parent1bdee2153953e23bf71f7a5e83145bb4d67db567 (diff)
added read snap and read tick
Diffstat (limited to 'src/pack.c')
-rw-r--r--src/pack.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/pack.c b/src/pack.c
new file mode 100644
index 0000000..f7be2c8
--- /dev/null
+++ b/src/pack.c
@@ -0,0 +1,35 @@
+#include <stdio.h>
+
+int readint(unsigned char **cp)
+{
+ int result = 0;
+ int len = 1;
+
+ unsigned char src = **cp;
+
+ (*cp)++;
+ int sign = (src >> 6) & 1;
+
+ result |= (src & 0b00111111);
+ for (int i = 0; i < 4; i++)
+ {
+ // printf("(%d, ", src);
+ if ((src & 0b10000000) == 0)
+ break;
+
+ src = **cp;
+ (*cp)++;
+ len++;
+
+ if (i == 3 && (src & 0b11110000) != 0)
+ printf("[ WARNING ] Non zero int padding!\n");
+
+ result |= (src & 0b01111111) << (6 + 7 * i);
+ }
+ if (len > 1 && src == 0b00000000)
+ printf("[ WARNING ] Overlong int encoding!\n");
+
+ result ^= -sign;
+
+ return result;
+}