X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=exec.c;h=57b47318fab3211a8d269db944933ad26eeb95ee;hb=d8b3faa8711d172ee66f8c6e30f154dc7de4646d;hp=da79a05e941f3439392f57b2e4bc391d3412c85f;hpb=3ece4a964f7fd04424ff7c619fc43c1056fa98c1;p=xonotic%2Fgmqcc.git diff --git a/exec.c b/exec.c index da79a05..57b4731 100644 --- a/exec.c +++ b/exec.c @@ -23,10 +23,9 @@ */ #ifndef QCVM_LOOP #include -#include -#include -#include #include +#include +#include #include "gmqcc.h" @@ -54,9 +53,9 @@ static void qcvmerror(qc_program_t *prog, const char *fmt, ...) qc_program_t* prog_load(const char *filename, bool skipversion) { - qc_program_t *prog; prog_header_t header; - FILE *file = fs_file_open(filename, "rb"); + qc_program_t *prog; + fs_file_t *file = fs_file_open(filename, "rb"); if (!file) return NULL; @@ -91,11 +90,11 @@ qc_program_t* prog_load(const char *filename, bool skipversion) } #define read_data(hdrvar, progvar, reserved) \ - if (fs_file_seek(file, header.hdrvar.offset, SEEK_SET) != 0) { \ + if (fs_file_seek(file, header.hdrvar.offset, SEEK_SET) != 0) { \ loaderror("seek failed"); \ goto error; \ } \ - if (fs_file_read ( \ + if (fs_file_read ( \ vec_add(prog->progvar, header.hdrvar.length + reserved), \ sizeof(*prog->progvar), \ header.hdrvar.length, \ @@ -206,7 +205,7 @@ qcany_t* prog_getedict(qc_program_t *prog, qcint_t e) { return (qcany_t*)(prog->entitydata + (prog->entityfields * e)); } -qcint_t prog_spawn_entity(qc_program_t *prog) { +static qcint_t prog_spawn_entity(qc_program_t *prog) { char *data; qcint_t e; for (e = 0; e < (qcint_t)vec_size(prog->entitypool); ++e) { @@ -223,7 +222,7 @@ qcint_t prog_spawn_entity(qc_program_t *prog) { return e; } -void prog_free_entity(qc_program_t *prog, qcint_t e) { +static void prog_free_entity(qc_program_t *prog, qcint_t e) { if (!e) { prog->vmerror++; fprintf(stderr, "Trying to free world entity\n"); @@ -352,7 +351,7 @@ static void trace_print_global(qc_program_t *prog, unsigned int glob, int vtype) done: if (len < (int)sizeof(spaces)-1) { spaces[sizeof(spaces)-1-len] = 0; - fs_file_puts(stdout, spaces); + fs_file_puts((fs_file_t*)stdout, spaces); spaces[sizeof(spaces)-1-len] = ' '; } } @@ -833,7 +832,6 @@ static prog_builtin_t qc_builtins[] = { &qc_sqrt, /* 13 */ &qc_floor /* 14 */ }; -static size_t qc_builtins_count = sizeof(qc_builtins) / sizeof(qc_builtins[0]); static const char *arg0 = NULL; @@ -878,17 +876,10 @@ static void prog_main_setparams(qc_program_t *prog) { arg->vector[2] = 0; switch (main_params[i].vtype) { case TYPE_VECTOR: -#ifdef _MSC_VER - (void)sscanf_s(main_params[i].value, " %f %f %f ", - &arg->vector[0], - &arg->vector[1], - &arg->vector[2]); -#else - (void)sscanf(main_params[i].value, " %f %f %f ", - &arg->vector[0], - &arg->vector[1], - &arg->vector[2]); -#endif + (void)util_sscanf(main_params[i].value, " %f %f %f ", + &arg->vector[0], + &arg->vector[1], + &arg->vector[2]); break; case TYPE_FLOAT: arg->_float = atof(main_params[i].value); @@ -903,32 +894,6 @@ static void prog_main_setparams(qc_program_t *prog) { } } -void escapestring(char* dest, const char* src) { - char c; - while ((c = *(src++))) { - switch(c) { - case '\t': - *(dest++) = '\\', *(dest++) = 't'; - break; - case '\n': - *(dest++) = '\\', *(dest++) = 'n'; - break; - case '\r': - *(dest++) = '\\', *(dest++) = 'r'; - break; - case '\\': - *(dest++) = '\\', *(dest++) = '\\'; - break; - case '\"': - *(dest++) = '\\', *(dest++) = '\"'; - break; - default: - *(dest++) = c; - } - } - *dest = '\0'; -} - void prog_disasm_function(qc_program_t *prog, size_t id); int main(int argc, char **argv) { @@ -1105,7 +1070,7 @@ int main(int argc, char **argv) { } prog->builtins = qc_builtins; - prog->builtins_count = qc_builtins_count; + prog->builtins_count = GMQCC_ARRAY_COUNT(qc_builtins); if (opts_info) { printf("Program's system-checksum = 0x%04x\n", (unsigned int)prog->crc16); @@ -1145,9 +1110,7 @@ int main(int argc, char **argv) { return 0; } if (opts_printdefs) { - char *escape = NULL; const char *getstring = NULL; - for (i = 0; i < vec_size(prog->defs); ++i) { printf("Global: %8s %-16s at %u%s", type_name[prog->defs[i].type & DEF_TYPEMASK], @@ -1170,11 +1133,9 @@ int main(int argc, char **argv) { break; case TYPE_STRING: getstring = prog_getstring(prog, ((qcany_t*)(prog->globals + prog->defs[i].offset))->string); - escape = (char*)mem_a(strlen(getstring) * 2 + 1); /* will be enough */ - escapestring(escape, getstring); - printf(" [init: `%s`]", escape); - - mem_d(escape); /* free */ + printf(" [init: `"); + print_escaped_string(getstring, strlen(getstring)); + printf("`]\n"); break; default: break; @@ -1286,7 +1247,7 @@ void prog_disasm_function(qc_program_t *prog, size_t id) { # define FLOAT_IS_TRUE_FOR_INT(x) ( (x) & 0x7FFFFFFF ) #endif -while (1) { +while (prog->vmerror == 0) { prog_section_function_t *newf; qcany_t *ed; qcany_t *ptr;