diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/demo.c | 63 | ||||
| -rw-r--r-- | src/main.c | 4 |
2 files changed, 64 insertions, 3 deletions
@@ -169,6 +169,32 @@ int readdemosnap(FILE *fp, demosnap *snap, int size) return 1; } +int readdemomessage(FILE *fp, demomessage *message, int size) +{ + unsigned char data[size]; + if (fread(data, 1, size, fp) != size) + return -1; + + message->data = (char *)malloc(size); + memcpy(message->data, data, size); + message->datasize = size; + + return 1; +} + +int readdemodelta(FILE *fp, demodelta *delta, int size) +{ + unsigned char data[size]; + if (fread(data, 1, size, fp) != size) + return -1; + + delta->data = (char *)malloc(size); + memcpy(delta->data, data, size); + delta->datasize = size; + + return 1; +} + int readdemochunk(FILE *fp, demochunk *chunk, unsigned char ver) { char chunkhead; @@ -233,12 +259,18 @@ int readdemochunk(FILE *fp, demochunk *chunk, unsigned char ver) else if (type == 2) { printf("MESSAGE={"); - fseek(fp, size, SEEK_CUR); + demomessage *message = (demomessage *)malloc(sizeof(demomessage)); + readdemomessage(fp, message, size); + chunk->type = DEMOMESSAGE; + chunk->data.message = message; } else if (type == 3) { printf("SNAPSHOT_DELTA={"); - fseek(fp, size, SEEK_CUR); + demodelta *delta = (demodelta *)malloc(sizeof(demodelta)); + readdemodelta(fp, delta, size); + chunk->type = DEMODELTA; + chunk->data.delta = delta; } else { @@ -250,6 +282,28 @@ int readdemochunk(FILE *fp, demochunk *chunk, unsigned char ver) return 1; } +int readdemochunks(FILE *fp, demodata *dd, unsigned char ver) +{ + int chunkcap = 1024; + dd->numchunks = 0; + dd->chunks = (demochunk *)malloc(chunkcap * sizeof(demochunk)); + + while (readdemochunk(fp, &dd->chunks[dd->numchunks], ver)) + { + dd->numchunks++; + if (dd->numchunks >= chunkcap) + { + chunkcap *= 2; + dd->chunks = (demochunk *)realloc(dd->chunks, chunkcap * sizeof(demochunk)); + } + } + + printf("numchunks: %d\n", dd->numchunks); + dd->chunks = (demochunk *)realloc(dd->chunks, dd->numchunks * sizeof(demochunk)); + + return 1; +} + int writedemoheader(FILE *fp, demoheader *dh) { unsigned char intbuff[4]; @@ -304,3 +358,8 @@ int writedemomap(FILE *fp, demomap *dm, int mapsize, unsigned char ver) return 1; } + +int writedemotick(FILE *fp, demosnap *snap) +{ + return 1; +} @@ -1,6 +1,5 @@ #include "../inc/demo.h" #include "../inc/huffman.h" -#include "../inc/pack.h" #include <stdio.h> #include <stdlib.h> @@ -120,6 +119,7 @@ int main() demoheader dh; demotimeline dt; demomap dm; + demodata dd; readdemoheader(fp, &dh); readdemotimeline(fp, &dt); @@ -129,6 +129,8 @@ int main() writedemotimeline(op, &dt); writedemomap(op, &dm, dh.mapsize, dh.version); + readdemochunks(fp, &dd, dh.version); + fclose(fp); fclose(op); |
