From ab6cb49b0b875b5c27510dc57fe3767bfd074dae Mon Sep 17 00:00:00 2001 From: johannes Date: Wed, 7 Feb 2024 15:43:27 +0100 Subject: added packed int writer --- inc/pack.h | 4 ++++ src/demo.c | 4 ++-- src/main.c | 29 +++++++++++++++++++++++++++++ src/pack.c | 33 +++++++++++++++++++++++++++++++++ 4 files changed, 68 insertions(+), 2 deletions(-) diff --git a/inc/pack.h b/inc/pack.h index 55ebf4e..49e581c 100644 --- a/inc/pack.h +++ b/inc/pack.h @@ -13,4 +13,8 @@ void tobigendian(const int in, unsigned char out[4]); /* the given pointer is incremented */ int readint(unsigned char **cp); +/* writes given int to teeworlds packed */ +/* the given pointer is incremented */ +void writeint(int in, char **cp); + #endif // PACK_H diff --git a/src/demo.c b/src/demo.c index bfb233e..8452b06 100644 --- a/src/demo.c +++ b/src/demo.c @@ -380,7 +380,7 @@ int writedemotick(FILE *fp, demotick *tick, unsigned char ver) header |= tick->keyframe << 6; if (ver >= 5) header |= tick->innline << 5; - + if (tick->innline) { header |= tick->delta; @@ -400,6 +400,6 @@ int writedemotick(FILE *fp, demotick *tick, unsigned char ver) int writedemosnap(FILE *fp, demosnap *snap, unsigned char ver) { - + return 1; } diff --git a/src/main.c b/src/main.c index e33594a..a21c4cf 100644 --- a/src/main.c +++ b/src/main.c @@ -1,5 +1,6 @@ #include "../inc/demo.h" #include "../inc/huffman.h" +#include "../inc/pack.h" #include #include @@ -109,6 +110,34 @@ int testdecompress(char *line) return 1; } +void dumbtestpacker() +{ + char buf[16] = {0}; + int in = 550; + int in2 = 8763289; + + printf("input: %d\n", in); + + for (int i = 0; i < 16; i++) + printf("%2X ", buf[i]); + printf("\n"); + char *cp = buf; + + writeint(in, &cp); + writeint(in2, &cp); + + for (int i = 0; i < 16; i++) + printf("%2X ", buf[i]); + printf("\n"); + + cp = buf; + int res = readint((unsigned char **)&cp); + int res2 = readint((unsigned char **)&cp); + + printf("res: %d\n", res); + printf("res2: %d\n", res2); +} + int main() { inithuff(NULL); 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)++; + } +} -- cgit v1.2.3