summaryrefslogtreecommitdiff
path: root/src/demo.c
blob: 0be86112556efd978e5b52f2e395e3583b5bcdd9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include "../inc/demo.h"

#include <stdio.h>

int reverseint(const unsigned char in[4])
{
    return (in[0] << 24) | (in[1] << 16) | (in[2] << 8) | in[3];
}

int readdemoheader(FILE *fp, demoheader *dh)
{
    if (fscanf(fp,"TWDEMO%*c%c", &dh->version) != 1)
        return -1;
    if (fscanf(fp, "%64c", dh->netversion) != 1)
        return -2;
    if (fscanf(fp, "%64c", dh->mapname) != 1)
        return -3;
    if (fread(dh->mapsize, 1, 4, fp) != 4)
        return -4;
    if (fread(dh->mapcrc, 1, 4, fp) != 4)
        return -5;
    if (fscanf(fp, "%8c", dh->type) != 1)
        return -6;
    if (fread(dh->length, 1, 4, fp) != 4)
        return -7;
    if (fscanf(fp, "%20c", dh->timestamp) != 1)
        return -8;
    printf("version: %hhu\n", dh->version);
    printf("net_version: %s\n", dh->netversion);
    printf("mapname: %s\n", dh->mapname);
    printf("mapsize: %i\n", reverseint(dh->mapsize));
    printf("mapcrc: %i\n", reverseint(dh->mapcrc));
    printf("type: %s\n", dh->type);
    printf("length: %i\n", reverseint(dh->length));
    printf("timestamp: %s\n", dh->timestamp);
    return 1;
}

int readdemotimeline(FILE *fp, demotimeline *dt)
{
    if (fscanf(fp, "%260c", dt->data) != 1)
        return -1;
    return 1;
}