summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjohannes <johannes.herman@gmail.com>2024-02-07 14:03:14 +0100
committerjohannes <johannes.herman@gmail.com>2024-02-07 14:03:14 +0100
commit98cd0c228f14b1c336a106bacf917b89318948cf (patch)
tree4eecc0297ba9c7a04d8810f368d118b91fcb380c /src
parentedff23604a6ae5b46980f7b2f9e9f4f36155189a (diff)
added simple read message and delta functions
Diffstat (limited to 'src')
-rw-r--r--src/demo.c63
-rw-r--r--src/main.c4
2 files changed, 64 insertions, 3 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;
+}
diff --git a/src/main.c b/src/main.c
index 48bf263..8a14140 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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);