6 // LordHavoc: wait for a key press so the window doesn't disappear immediately
8 #define ERROR fprintf(stderr, "press any key\n");getchar();return -1;
10 #define ERROR return -1;
16 int main(int argc, char **argv)
19 unsigned int insize, outsize, sizedifference, inbuildsize, outbuildsize, writtensize;
20 unsigned char *data, *in, *out, *buildstring, *endofbuildstring, outbuildstring[32];
21 int inbuildnumber, outbuildnumber, remainder;
24 fprintf(stderr, "usage: buildnum <filename.c or .h>\npurpose: increments build number in version string for darkplaces engine\n");
28 file = fopen(argv[1], "rb");
31 fprintf(stderr, "buildnum: unable to open file \"%s\" for reading\n", argv[1]);
35 fseek(file, 0, SEEK_END);
37 data = calloc(1, insize+20);
38 fseek(file, 0, SEEK_SET);
39 if (fread(data, 1, insize, file) < insize)
41 fprintf(stderr, "buildnum: unable to read file \"%s\"\n", argv[1]);
45 buildstring = strstr(data, "#define BUILDNUMBER ");
48 fprintf(stderr, "buildnum: unable to find \"#define BUILDNUMBER \"\n");
51 buildstring += strlen("#define BUILDNUMBER ");
52 endofbuildstring = buildstring;
53 while (*endofbuildstring && *endofbuildstring != '\r' && *endofbuildstring != '\n')
55 inbuildnumber = atoi(buildstring);
56 outbuildnumber = inbuildnumber + 1;
57 printf("incrementing build number %d to %d\n", inbuildnumber, outbuildnumber);
58 sprintf(outbuildstring, "%d", outbuildnumber);
59 inbuildsize = endofbuildstring - buildstring;
60 outbuildsize = strlen(outbuildstring);
61 sizedifference = outbuildsize-inbuildsize;
62 remainder = (data + insize) - buildstring;
63 outsize = insize + sizedifference;
64 memmove(buildstring + sizedifference, buildstring, remainder);
70 file = fopen(argv[1], "wb");
73 fprintf(stderr, "buildnum: unable to open file \"%s\" for writing\n", argv[1]);
77 writtensize = fwrite(data, 1, outsize, file);
79 if (writtensize < outsize)
81 fprintf(stderr, "buildnum: error writing file \"%s\", emergency code trying to save to buildnum.dmp\n", argv[1]);
82 file = fopen("buildnum.dmp", "wb");
85 fprintf(stderr, "buildnum: unable to open file for writing\n");
89 writtensize = fwrite(data, 1, outsize, file);
91 if (writtensize < outsize)
93 fprintf(stderr, "buildnum: error writing emergency dump file!\n");