X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=gmqcc.h;h=4eebd20b14b40d094966dfd38f5d7c03477fea83;hb=3072ce7ebaa1b0ecac17fcae3da77457666f27c2;hp=90d1e05b98e0830763d74d9ed116d4d39efd947a;hpb=f8b3081c44fa51860bb56f7d13b3b730717e9e3b;p=xonotic%2Fgmqcc.git diff --git a/gmqcc.h b/gmqcc.h index 90d1e05..4eebd20 100644 --- a/gmqcc.h +++ b/gmqcc.h @@ -960,4 +960,70 @@ prog_section_def* prog_getdef (qc_program *prog, qcint off); qcany* prog_getedict (qc_program *prog, qcint e); qcint prog_tempstring(qc_program *prog, const char *_str); +/*===================================================================*/ +/*======================= main.c commandline ========================*/ +/*===================================================================*/ + +#if 0 +/* Helpers to allow for a whole lot of flags. Otherwise we'd limit + * to 32 or 64 -f options... + */ +typedef struct { + size_t idx; /* index into an array of 32 bit words */ + uint8_t bit; /* index _into_ the 32 bit word, thus just uint8 */ +} longbit; +#define LONGBIT(bit) { ((bit)/32), ((bit)%32) } +#else +typedef uint32_t longbit; +#define LONGBIT(bit) (bit) +#endif + +/* Used to store the list of flags with names */ +typedef struct { + const char *name; + longbit bit; +} opt_flag_def; + +/*===================================================================*/ +/* list of -f flags, like -fdarkplaces-string-table-bug */ +enum { + DP_STRING_TABLE_BUG, + OMIT_NULLBYTES, + + NUM_F_FLAGS +}; +static const opt_flag_def opt_flag_list[] = { + { "darkplaces-string-table-bug", LONGBIT(DP_STRING_TABLE_BUG) }, + { "omit-nullbytes", LONGBIT(OMIT_NULLBYTES) } +}; +static const size_t opt_flag_list_count = sizeof(opt_flag_list) / sizeof(opt_flag_list[0]); + +enum { + WARN_UNUSED_VARIABLE, + + NUM_W_FLAGS +}; +static const opt_flag_def opt_warn_list[] = { + /* only contains single flags, no groups like 'all' */ + { "unused-variable", LONGBIT(WARN_UNUSED_VARIABLE) } +}; +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 +}; + +/*===================================================================*/ +#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)]; + #endif