mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-03-21 18:01:15 +00:00
some qfcc.c cleanup
This commit is contained in:
parent
1ba994fd13
commit
328b591aa0
3 changed files with 153 additions and 160 deletions
tools/qfcc
|
@ -201,18 +201,6 @@ extern int numfunctions;
|
|||
extern float pr_globals[MAX_REGS];
|
||||
extern int numpr_globals;
|
||||
|
||||
extern char precache_sounds[MAX_SOUNDS][MAX_DATA_PATH];
|
||||
extern int precache_sounds_block[MAX_SOUNDS];
|
||||
extern int numsounds;
|
||||
|
||||
extern char precache_models[MAX_MODELS][MAX_DATA_PATH];
|
||||
extern int precache_models_block[MAX_SOUNDS];
|
||||
extern int nummodels;
|
||||
|
||||
extern char precache_files[MAX_FILES][MAX_DATA_PATH];
|
||||
extern int precache_files_block[MAX_SOUNDS];
|
||||
extern int numfiles;
|
||||
|
||||
extern int num_auxfunctions;
|
||||
extern pr_auxfunction_t *auxfunctions;
|
||||
|
||||
|
@ -263,5 +251,7 @@ extern options_t options;
|
|||
void PrecacheSound (def_t *e, int ch);
|
||||
void PrecacheModel (def_t *e, int ch);
|
||||
void PrecacheFile (def_t *e, int ch);
|
||||
void WriteFiles (const char *sourcedir);
|
||||
int WriteProgdefs (char *filename);
|
||||
|
||||
#endif//__qfcc_h
|
||||
|
|
|
@ -29,11 +29,25 @@ static const char rcsid[] =
|
|||
# include <strings.h>
|
||||
#endif
|
||||
|
||||
#include <QF/va.h>
|
||||
#include <QF/crc.h>
|
||||
#include <QF/dstring.h>
|
||||
|
||||
#include "cmdlib.h"
|
||||
#include "qfcc.h"
|
||||
#include "expr.h"
|
||||
|
||||
static char precache_sounds[MAX_SOUNDS][MAX_DATA_PATH];
|
||||
static int precache_sounds_block[MAX_SOUNDS];
|
||||
static int numsounds;
|
||||
|
||||
static char precache_models[MAX_MODELS][MAX_DATA_PATH];
|
||||
static int precache_models_block[MAX_SOUNDS];
|
||||
static int nummodels;
|
||||
|
||||
static char precache_files[MAX_FILES][MAX_DATA_PATH];
|
||||
static int precache_files_block[MAX_SOUNDS];
|
||||
static int numfiles;
|
||||
|
||||
void
|
||||
PrecacheSound (def_t *e, int ch)
|
||||
{
|
||||
|
@ -126,3 +140,136 @@ PrecacheFile (def_t *e, int ch)
|
|||
|
||||
numfiles++;
|
||||
}
|
||||
|
||||
/*
|
||||
WriteFiles
|
||||
|
||||
Generates files.dat, which contains all of the data files actually used by
|
||||
the game, to be processed by qfiles
|
||||
*/
|
||||
void
|
||||
WriteFiles (const char *sourcedir)
|
||||
{
|
||||
FILE *f;
|
||||
int i;
|
||||
dstring_t *filename = dstring_newstr ();
|
||||
|
||||
dsprintf (filename, "%s%cfiles.dat", sourcedir, PATH_SEPARATOR);
|
||||
f = fopen (filename->str, "w");
|
||||
if (!f)
|
||||
Error ("Couldn't open %s", filename->str);
|
||||
|
||||
fprintf (f, "%i\n", numsounds);
|
||||
for (i = 0; i < numsounds; i++)
|
||||
fprintf (f, "%i %s\n", precache_sounds_block[i], precache_sounds[i]);
|
||||
|
||||
fprintf (f, "%i\n", nummodels);
|
||||
for (i = 0; i < nummodels; i++)
|
||||
fprintf (f, "%i %s\n", precache_models_block[i], precache_models[i]);
|
||||
|
||||
fprintf (f, "%i\n", numfiles);
|
||||
for (i = 0; i < numfiles; i++)
|
||||
fprintf (f, "%i %s\n", precache_files_block[i], precache_files[i]);
|
||||
|
||||
fclose (f);
|
||||
dstring_delete (filename);
|
||||
}
|
||||
|
||||
/*
|
||||
PR_WriteProgdefs
|
||||
|
||||
Writes the global and entity structures out.
|
||||
Returns a crc of the header, to be stored in the progs file for comparison
|
||||
at load time.
|
||||
*/
|
||||
int
|
||||
WriteProgdefs (char *filename)
|
||||
{
|
||||
def_t *d;
|
||||
FILE *f;
|
||||
unsigned short crc;
|
||||
int c;
|
||||
|
||||
if (options.verbosity >= 1)
|
||||
printf ("writing %s\n", filename);
|
||||
f = fopen (filename, "w");
|
||||
|
||||
// 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",
|
||||
RESERVED_OFS);
|
||||
|
||||
for (d = pr.def_head.def_next; d; d = d->def_next) {
|
||||
if (!strcmp (d->name, "end_sys_globals"))
|
||||
break;
|
||||
|
||||
switch (d->type->type) {
|
||||
case ev_float:
|
||||
fprintf (f, "\tfloat\t%s;\n", d->name);
|
||||
break;
|
||||
case ev_vector:
|
||||
fprintf (f, "\tvec3_t\t%s;\n", d->name);
|
||||
d = d->def_next->def_next->def_next; // skip the elements
|
||||
break;
|
||||
case ev_string:
|
||||
fprintf (f, "\tstring_t\t%s;\n", d->name);
|
||||
break;
|
||||
case ev_func:
|
||||
fprintf (f, "\tfunc_t\t%s;\n", d->name);
|
||||
break;
|
||||
case ev_entity:
|
||||
fprintf (f, "\tint\t%s;\n", d->name);
|
||||
break;
|
||||
default:
|
||||
fprintf (f, "\tint\t%s;\n", d->name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
fprintf (f, "} globalvars_t;\n\n");
|
||||
|
||||
// print all fields
|
||||
fprintf (f, "typedef struct\n{\n");
|
||||
for (d = pr.def_head.def_next; d; d = d->def_next) {
|
||||
if (!strcmp (d->name, "end_sys_fields"))
|
||||
break;
|
||||
|
||||
if (d->type->type != ev_field)
|
||||
continue;
|
||||
|
||||
switch (d->type->aux_type->type) {
|
||||
case ev_float:
|
||||
fprintf (f, "\tfloat\t%s;\n", d->name);
|
||||
break;
|
||||
case ev_vector:
|
||||
fprintf (f, "\tvec3_t\t%s;\n", d->name);
|
||||
d = d->def_next->def_next->def_next; // skip the elements
|
||||
break;
|
||||
case ev_string:
|
||||
fprintf (f, "\tstring_t\t%s;\n", d->name);
|
||||
break;
|
||||
case ev_func:
|
||||
fprintf (f, "\tfunc_t\t%s;\n", d->name);
|
||||
break;
|
||||
case ev_entity:
|
||||
fprintf (f, "\tint\t%s;\n", d->name);
|
||||
break;
|
||||
default:
|
||||
fprintf (f, "\tint\t%s;\n", d->name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
fprintf (f, "} entvars_t;\n\n");
|
||||
|
||||
fclose (f);
|
||||
|
||||
// do a crc of the file
|
||||
CRC_Init (&crc);
|
||||
f = fopen (filename, "r+");
|
||||
while ((c = fgetc (f)) != EOF)
|
||||
CRC_ProcessByte (&crc, (byte) c);
|
||||
|
||||
fprintf (f, "#define PROGHEADER_CRC %i\n", crc);
|
||||
fclose (f);
|
||||
|
||||
return crc;
|
||||
}
|
||||
|
|
|
@ -149,51 +149,6 @@ const char *big_function = 0;
|
|||
ddef_t fields[MAX_FIELDS];
|
||||
int numfielddefs;
|
||||
|
||||
char precache_sounds[MAX_SOUNDS][MAX_DATA_PATH];
|
||||
int precache_sounds_block[MAX_SOUNDS];
|
||||
int numsounds;
|
||||
|
||||
char precache_models[MAX_MODELS][MAX_DATA_PATH];
|
||||
int precache_models_block[MAX_SOUNDS];
|
||||
int nummodels;
|
||||
|
||||
char precache_files[MAX_FILES][MAX_DATA_PATH];
|
||||
int precache_files_block[MAX_SOUNDS];
|
||||
int numfiles;
|
||||
|
||||
/*
|
||||
WriteFiles
|
||||
|
||||
Generates files.dat, which contains all of the data files actually used by
|
||||
the game, to be processed by qfiles
|
||||
*/
|
||||
void
|
||||
WriteFiles (void)
|
||||
{
|
||||
FILE *f;
|
||||
int i;
|
||||
dstring_t *filename = dstring_newstr ();
|
||||
|
||||
dsprintf (filename, "%s%cfiles.dat", sourcedir, PATH_SEPARATOR);
|
||||
f = fopen (filename->str, "w");
|
||||
if (!f)
|
||||
Error ("Couldn't open %s", filename->str);
|
||||
|
||||
fprintf (f, "%i\n", numsounds);
|
||||
for (i = 0; i < numsounds; i++)
|
||||
fprintf (f, "%i %s\n", precache_sounds_block[i], precache_sounds[i]);
|
||||
|
||||
fprintf (f, "%i\n", nummodels);
|
||||
for (i = 0; i < nummodels; i++)
|
||||
fprintf (f, "%i %s\n", precache_models_block[i], precache_models[i]);
|
||||
|
||||
fprintf (f, "%i\n", numfiles);
|
||||
for (i = 0; i < numfiles; i++)
|
||||
fprintf (f, "%i %s\n", precache_files_block[i], precache_files[i]);
|
||||
|
||||
fclose (f);
|
||||
dstring_delete (filename);
|
||||
}
|
||||
|
||||
/*
|
||||
CopyString
|
||||
|
@ -596,105 +551,6 @@ qboolean PR_FinishCompilation (void)
|
|||
|
||||
//=============================================================================
|
||||
|
||||
/*
|
||||
PR_WriteProgdefs
|
||||
|
||||
Writes the global and entity structures out.
|
||||
Returns a crc of the header, to be stored in the progs file for comparison
|
||||
at load time.
|
||||
*/
|
||||
int
|
||||
PR_WriteProgdefs (char *filename)
|
||||
{
|
||||
def_t *d;
|
||||
FILE *f;
|
||||
unsigned short crc;
|
||||
int c;
|
||||
|
||||
if (options.verbosity >= 1)
|
||||
printf ("writing %s\n", filename);
|
||||
f = fopen (filename, "w");
|
||||
|
||||
// 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",
|
||||
RESERVED_OFS);
|
||||
|
||||
for (d = pr.def_head.def_next; d; d = d->def_next) {
|
||||
if (!strcmp (d->name, "end_sys_globals"))
|
||||
break;
|
||||
|
||||
switch (d->type->type) {
|
||||
case ev_float:
|
||||
fprintf (f, "\tfloat\t%s;\n", d->name);
|
||||
break;
|
||||
case ev_vector:
|
||||
fprintf (f, "\tvec3_t\t%s;\n", d->name);
|
||||
d = d->def_next->def_next->def_next; // skip the elements
|
||||
break;
|
||||
case ev_string:
|
||||
fprintf (f, "\tstring_t\t%s;\n", d->name);
|
||||
break;
|
||||
case ev_func:
|
||||
fprintf (f, "\tfunc_t\t%s;\n", d->name);
|
||||
break;
|
||||
case ev_entity:
|
||||
fprintf (f, "\tint\t%s;\n", d->name);
|
||||
break;
|
||||
default:
|
||||
fprintf (f, "\tint\t%s;\n", d->name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
fprintf (f, "} globalvars_t;\n\n");
|
||||
|
||||
// print all fields
|
||||
fprintf (f, "typedef struct\n{\n");
|
||||
for (d = pr.def_head.def_next; d; d = d->def_next) {
|
||||
if (!strcmp (d->name, "end_sys_fields"))
|
||||
break;
|
||||
|
||||
if (d->type->type != ev_field)
|
||||
continue;
|
||||
|
||||
switch (d->type->aux_type->type) {
|
||||
case ev_float:
|
||||
fprintf (f, "\tfloat\t%s;\n", d->name);
|
||||
break;
|
||||
case ev_vector:
|
||||
fprintf (f, "\tvec3_t\t%s;\n", d->name);
|
||||
d = d->def_next->def_next->def_next; // skip the elements
|
||||
break;
|
||||
case ev_string:
|
||||
fprintf (f, "\tstring_t\t%s;\n", d->name);
|
||||
break;
|
||||
case ev_func:
|
||||
fprintf (f, "\tfunc_t\t%s;\n", d->name);
|
||||
break;
|
||||
case ev_entity:
|
||||
fprintf (f, "\tint\t%s;\n", d->name);
|
||||
break;
|
||||
default:
|
||||
fprintf (f, "\tint\t%s;\n", d->name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
fprintf (f, "} entvars_t;\n\n");
|
||||
|
||||
fclose (f);
|
||||
|
||||
// do a crc of the file
|
||||
CRC_Init (&crc);
|
||||
f = fopen (filename, "r+");
|
||||
while ((c = fgetc (f)) != EOF)
|
||||
CRC_ProcessByte (&crc, (byte) c);
|
||||
|
||||
fprintf (f, "#define PROGHEADER_CRC %i\n", crc);
|
||||
fclose (f);
|
||||
|
||||
return crc;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
PR_PrintFunction (def_t *def)
|
||||
|
@ -1098,7 +954,7 @@ preprocess_file (const char *filename)
|
|||
int status;
|
||||
pid_t rc;
|
||||
|
||||
// printf ("pid = %d\n", pid);
|
||||
// printf ("pid = %d\n", pid);
|
||||
if ((rc = waitpid (0, &status, 0 | WUNTRACED)) != pid) {
|
||||
if (rc == -1) {
|
||||
perror ("wait");
|
||||
|
@ -1260,14 +1116,14 @@ main (int argc, char **argv)
|
|||
|
||||
// write progdefs.h
|
||||
if (options.code.progsversion == PROG_ID_VERSION)
|
||||
crc = PR_WriteProgdefs ("progdefs.h");
|
||||
crc = WriteProgdefs ("progdefs.h");
|
||||
|
||||
// write data file
|
||||
WriteData (crc);
|
||||
|
||||
// write files.dat
|
||||
if (options.files_dat)
|
||||
WriteFiles ();
|
||||
WriteFiles (sourcedir);
|
||||
|
||||
stop = Sys_DoubleTime ();
|
||||
if (options.verbosity >= 0)
|
||||
|
|
Loading…
Reference in a new issue