summaryrefslogtreecommitdiff
path: root/src/demo.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/demo.c')
-rw-r--r--src/demo.c63
1 files changed, 61 insertions, 2 deletions
diff --git a/src/demo.c b/src/demo.c
index c7fe6fe..491350f 100644
--- a/src/demo.c
+++ b/src/demo.c
@@ -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;
+}