int util_getline (char **, size_t *, FILE *);
void util_endianswap (void *, int, int);
+size_t util_strtocmd (const char *, char *, size_t);
+size_t util_strtononcmd (const char *, char *, size_t);
+
uint32_t util_crc32(const char *, int, register const short);
#ifdef NOTRACK
while (N##_add(*++elements) != -1 && len--); \
return N##_elements; \
} \
- typedef char VECTOR_FILL(extra_semicolon_,__COUNTER__)
+ typedef char VECTOR_FILL(extra_semicolon_##N,__COUNTER__)
#define VECTOR_PROT(T,N) \
extern T* N##_data ; \
extern long N##_elements ; \
VECTOR_PROT(int, code_globals );
VECTOR_PROT(char, code_chars );
+typedef float qcfloat;
+typedef int32_t qcint;
+
/*
* code_write -- writes out the compiled file
* code_init -- prepares the code file
void code_init ();
uint32_t code_genstring (const char *string);
uint32_t code_cachedstring(const char *string);
+qcint code_alloc_field (size_t qcsize);
/*===================================================================*/
/*========================= assembler.c =============================*/
void asm_close(FILE *);
void asm_parse(FILE *);
/*===================================================================*/
-/*============================= main.c ==============================*/
-/*===================================================================*/
-enum {
- COMPILER_QCC, /* circa QuakeC */
- COMPILER_FTEQCC, /* fteqcc QuakeC */
- COMPILER_QCCX, /* qccx QuakeC */
- COMPILER_GMQCC /* this QuakeC */
-};
-extern bool opts_debug;
-extern bool opts_memchk;
-extern bool opts_darkplaces_stringtablebug;
-extern bool opts_omit_nullcode;
-extern int opts_compiler;
-/*===================================================================*/
/*============================= ast.c ===============================*/
/*===================================================================*/
#define MEM_VECTOR_PROTO(Towner, Tmem, mem) \
* Since we may want to support that as well, let's redefine
* float and int here.
*/
-typedef float qcfloat;
-typedef int32_t qcint;
-
typedef union {
qcint _int;
qcint string;
typedef struct {
const char *name;
longbit bit;
-} opt_flag_def;
+} opts_flag_def;
/*===================================================================*/
/* list of -f flags, like -fdarkplaces-string-table-bug */
enum {
- OVERLAP_LOCALS,
- DP_STRING_TABLE_BUG,
- OMIT_NULLBYTES,
-
- NUM_F_FLAGS
+# define GMQCC_DEFINE_FLAG(X) X,
+# include "flags.def"
+# undef GMQCC_DEFINE_FLAG
+ COUNT_FLAGS
};
-static const opt_flag_def opt_flag_list[] = {
- { "overlap-locals", LONGBIT(OVERLAP_LOCALS) },
- { "darkplaces-string-table-bug", LONGBIT(DP_STRING_TABLE_BUG) },
- { "omit-nullbytes", LONGBIT(OMIT_NULLBYTES) }
+static const opts_flag_def opts_flag_list[] = {
+# define GMQCC_DEFINE_FLAG(X) { #X, LONGBIT(X) },
+# include "flags.def"
+# undef GMQCC_DEFINE_FLAG
+ { NULL, LONGBIT(0) }
};
-static const size_t opt_flag_list_count = sizeof(opt_flag_list) / sizeof(opt_flag_list[0]);
enum {
- WARN_UNUSED_VARIABLE,
-
- NUM_W_FLAGS
+# define GMQCC_DEFINE_FLAG(X) WARN_##X,
+# include "warns.def"
+# undef GMQCC_DEFINE_FLAG
+ COUNT_WARNINGS
};
-static const opt_flag_def opt_warn_list[] = {
- /* only contains single flags, no groups like 'all' */
- { "unused-variable", LONGBIT(WARN_UNUSED_VARIABLE) }
+static const opts_flag_def opts_warn_list[] = {
+# define GMQCC_DEFINE_FLAG(X) { #X, LONGBIT(WARN_##X) },
+# include "warns.def"
+# undef GMQCC_DEFINE_FLAG
+ { NULL, LONGBIT(0) }
};
-static const size_t opt_warn_list_count = sizeof(opt_warn_list) / sizeof(opt_warn_list[0]);
/* other options: */
-extern uint32_t opt_O; /* -Ox */
-extern const char *opt_output; /* -o file */
-extern int opt_standard;
-
enum {
- STD_DEF,
- STD_QCC,
- STD_FTE
+ COMPILER_QCC, /* circa QuakeC */
+ COMPILER_FTEQCC, /* fteqcc QuakeC */
+ COMPILER_QCCX, /* qccx QuakeC */
+ COMPILER_GMQCC /* this QuakeC */
};
+extern uint32_t opts_O; /* -Ox */
+extern const char *opts_output; /* -o file */
+extern int opts_standard;
+extern bool opts_debug;
+extern bool opts_memchk;
/*===================================================================*/
-#define OPT_FLAG(i) (!! (opt_flags[(i)/32] & (1<< ((i)%32))))
-extern uint32_t opt_flags[1 + (NUM_F_FLAGS / 32)];
-#define OPT_WARN(i) (!! (opt_warn[(i)/32] & (1<< ((i)%32))))
-extern uint32_t opt_warn[1 + (NUM_W_FLAGS / 32)];
+#define OPTS_FLAG(i) (!! (opts_flags[(i)/32] & (1<< ((i)%32))))
+extern uint32_t opts_flags[1 + (COUNT_FLAGS / 32)];
+#define OPTS_WARN(i) (!! (opts_warn[(i)/32] & (1<< ((i)%32))))
+extern uint32_t opts_warn[1 + (COUNT_WARNINGS / 32)];
#endif