mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-02-17 01:11:45 +00:00
Use dstring for progdefs.h writing.
And finally get qfcc into the thing :P
This commit is contained in:
parent
04b9b3a11d
commit
15de69d868
1 changed files with 36 additions and 30 deletions
|
@ -41,6 +41,7 @@
|
|||
|
||||
#include <QF/crc.h>
|
||||
#include <QF/dstring.h>
|
||||
#include <QF/quakeio.h>
|
||||
|
||||
#include "def.h"
|
||||
#include "defspace.h"
|
||||
|
@ -194,20 +195,21 @@ WriteProgdefs (dprograms_t *progs, const char *filename)
|
|||
{
|
||||
ddef_t *def;
|
||||
ddef_t *fdef;
|
||||
FILE *f;
|
||||
dstring_t *dstr;
|
||||
QFile *f;
|
||||
unsigned short crc;
|
||||
int c;
|
||||
unsigned i, j;
|
||||
const char *strings;
|
||||
const char *name;
|
||||
|
||||
if (options.verbosity >= 1)
|
||||
printf ("writing %s\n", filename);
|
||||
f = fopen (filename, "wb");
|
||||
printf ("Calculating CRC\n");
|
||||
|
||||
dstr = dstring_newstr();
|
||||
|
||||
// print global vars until the first field is defined
|
||||
fprintf (f, "\n/* file generated by qcc, do not modify */"
|
||||
"\n\ntypedef struct\n{\tint\tpad[%i];\n",
|
||||
dasprintf (dstr, "\n/* file generated by qcc, do not modify */"
|
||||
"\n\ntypedef struct\n{\tint\tpad[%i];\n",
|
||||
RESERVED_OFS);
|
||||
|
||||
strings = (char *) progs + progs->ofs_strings;
|
||||
|
@ -223,32 +225,32 @@ WriteProgdefs (dprograms_t *progs, const char *filename)
|
|||
|
||||
switch (def->type & ~DEF_SAVEGLOBAL) {
|
||||
case ev_float:
|
||||
fprintf (f, "\tfloat\t%s;\n", name);
|
||||
dasprintf (dstr, "\tfloat\t%s;\n", name);
|
||||
break;
|
||||
case ev_vector:
|
||||
fprintf (f, "\tvec3_t\t%s;\n", name);
|
||||
dasprintf (dstr, "\tvec3_t\t%s;\n", name);
|
||||
break;
|
||||
case ev_quat:
|
||||
fprintf (f, "\tquat_t\t%s;\n", name);
|
||||
dasprintf (dstr, "\tquat_t\t%s;\n", name);
|
||||
break;
|
||||
case ev_string:
|
||||
fprintf (f, "\tstring_t\t%s;\n", name);
|
||||
dasprintf (dstr, "\tstring_t\t%s;\n", name);
|
||||
break;
|
||||
case ev_func:
|
||||
fprintf (f, "\tfunc_t\t%s;\n", name);
|
||||
dasprintf (dstr, "\tfunc_t\t%s;\n", name);
|
||||
break;
|
||||
case ev_entity:
|
||||
fprintf (f, "\tint\t%s;\n", name);
|
||||
dasprintf (dstr, "\tint\t%s;\n", name);
|
||||
break;
|
||||
default:
|
||||
fprintf (f, "\tint\t%s;\n", name);
|
||||
dasprintf (dstr, "\tint\t%s;\n", name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
fprintf (f, "} globalvars_t;\n\n");
|
||||
dasprintf (dstr, "} globalvars_t;\n\n");
|
||||
|
||||
// print all fields
|
||||
fprintf (f, "typedef struct\n{\n");
|
||||
dasprintf (dstr, "typedef struct\n{\n");
|
||||
for (i = 0, j = 0; i < progs->numglobaldefs; i++) {
|
||||
def = (ddef_t *) ((char *) progs + progs->ofs_globaldefs) + i;
|
||||
name = strings + def->s_name;
|
||||
|
@ -266,37 +268,41 @@ WriteProgdefs (dprograms_t *progs, const char *filename)
|
|||
|
||||
switch (fdef->type) {
|
||||
case ev_float:
|
||||
fprintf (f, "\tfloat\t%s;\n", name);
|
||||
dasprintf (dstr, "\tfloat\t%s;\n", name);
|
||||
break;
|
||||
case ev_vector:
|
||||
fprintf (f, "\tvec3_t\t%s;\n", name);
|
||||
dasprintf (dstr, "\tvec3_t\t%s;\n", name);
|
||||
break;
|
||||
case ev_string:
|
||||
fprintf (f, "\tstring_t\t%s;\n", name);
|
||||
dasprintf (dstr, "\tstring_t\t%s;\n", name);
|
||||
break;
|
||||
case ev_func:
|
||||
fprintf (f, "\tfunc_t\t%s;\n", name);
|
||||
dasprintf (dstr, "\tfunc_t\t%s;\n", name);
|
||||
break;
|
||||
case ev_entity:
|
||||
fprintf (f, "\tint\t%s;\n", name);
|
||||
dasprintf (dstr, "\tint\t%s;\n", name);
|
||||
break;
|
||||
default:
|
||||
fprintf (f, "\tint\t%s;\n", name);
|
||||
dasprintf (dstr, "\tint\t%s;\n", name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
fprintf (f, "} entvars_t;\n\n");
|
||||
dasprintf (dstr, "} entvars_t;\n\n");
|
||||
|
||||
fclose (f);
|
||||
// do a crc of the structs
|
||||
crc = CRC_Block ((byte *) dstr->str, dstr->size - 1);
|
||||
|
||||
// do a crc of the file
|
||||
CRC_Init (&crc);
|
||||
f = fopen (filename, "r+b");
|
||||
while ((c = fgetc (f)) != EOF)
|
||||
CRC_ProcessByte (&crc, (byte) c);
|
||||
dasprintf (dstr, "#define PROGHEADER_CRC %u\n", crc);
|
||||
dstring_insertstr (dstr, 0, "/* Actually, generated by qfcc, be one must "
|
||||
"maintain formalities */");
|
||||
|
||||
fprintf (f, "#define PROGHEADER_CRC %u\n", crc);
|
||||
fclose (f);
|
||||
if (filename) {
|
||||
if (options.verbosity >= 1)
|
||||
printf ("writing %s\n", filename);
|
||||
f = Qopen (filename, "wt");
|
||||
Qwrite (f, dstr->str, dstr->size - 1);
|
||||
Qclose (f);
|
||||
}
|
||||
|
||||
return crc;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue