X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=code.c;h=e828ccc81b5da0c3d6964fa820162600f71922d1;hb=df075312981296de9d7d659ad8b20ded82d97cc3;hp=0cb373b96bc07a9eea6c232209bc4e4e0d9dad41;hpb=c81eb57480ccb652bf990abc7cd2cd8671187e32;p=xonotic%2Fgmqcc.git diff --git a/code.c b/code.c index 0cb373b..e828ccc 100644 --- a/code.c +++ b/code.c @@ -63,11 +63,17 @@ VECTOR_MAKE(prog_section_function, code_functions ); VECTOR_MAKE(int, code_globals ); VECTOR_MAKE(char, code_chars ); +uint16_t code_crc; +uint32_t code_entfields; + void code_init() { prog_section_function empty_function = {0,0,0,0,0,0,0,{0}}; prog_section_statement empty_statement = {0,{0},{0},{0}}; + prog_section_def empty_def = {0, 0, 0}; int i = 0; + code_entfields = 0; + /* omit creation of null code */ if (OPTS_FLAG(OMIT_NULL_BYTES)) return; @@ -82,6 +88,8 @@ void code_init() { code_chars_add ('\0'); code_functions_add (empty_function); code_statements_add(empty_statement); + code_defs_add (empty_def); + code_fields_add (empty_def); } uint32_t code_genstring(const char *str) @@ -152,6 +160,13 @@ void code_test() { code_statements_add(s3); } +qcint code_alloc_field (size_t qcsize) +{ + qcint pos = (qcint)code_entfields; + code_entfields += qcsize; + return pos; +} + bool code_write(const char *filename) { prog_header code_header; FILE *fp = NULL; @@ -172,8 +187,11 @@ bool code_write(const char *filename) { code_header.strings.offset = code_header.globals.offset + (sizeof(int32_t) * code_globals_elements); code_header.strings.length = code_chars_elements; code_header.version = 6; - code_header.crc16 = 0; /* TODO: */ - code_header.entfield = 0; /* TODO: */ + if (opts_forcecrc) + code_header.crc16 = opts_forced_crc; + else + code_header.crc16 = code_crc; + code_header.entfield = code_entfields; if (OPTS_FLAG(DARKPLACES_STRING_TABLE_BUG)) { util_debug("GEN", "Patching stringtable for -fdarkplaces-stringtablebug\n"); @@ -192,7 +210,7 @@ bool code_write(const char *filename) { util_endianswap(code_functions_data, code_functions_elements, sizeof(prog_section_function)); util_endianswap(code_globals_data, code_globals_elements, sizeof(int32_t)); - fp = fopen(filename, "wb"); + fp = util_fopen(filename, "wb"); if (!fp) return false; @@ -247,7 +265,7 @@ bool code_write(const char *filename) { util_debug("GEN", " CODE:\n"); for (;;) { if (code_statements_data[j].opcode != AINSTR_END) - util_debug("GEN", " %s {0x%05x,0x%05x,0x%05x}\n", + util_debug("GEN", " %-12s {% 5i,% 5i,% 5i}\n", asm_instr[code_statements_data[j].opcode].m, code_statements_data[j].o1.s1, code_statements_data[j].o2.s1,