]> git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - exec.c
More cleanup
[xonotic/gmqcc.git] / exec.c
diff --git a/exec.c b/exec.c
index 33037dcda74bf299487c358679ba82ce7984f4be..8f68d5c3c0629421d207a1da59f512c048446497 100644 (file)
--- a/exec.c
+++ b/exec.c
  */
 #ifndef QCVM_LOOP
 #include <errno.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdarg.h>
 #include <stdlib.h>
+#include <string.h>
 
 #include "gmqcc.h"
+#include "platform.h"
 
-opts_cmd_t   opts; /* command line options */
 static void loaderror(const char *fmt, ...)
 {
     int     err = errno;
@@ -38,7 +36,7 @@ static void loaderror(const char *fmt, ...)
     va_start(ap, fmt);
     vprintf(fmt, ap);
     va_end(ap);
-    printf(": %s\n", util_strerror(err));
+    printf(": %s\n", platform_strerror(err));
 }
 
 static void qcvmerror(qc_program_t *prog, const char *fmt, ...)
@@ -92,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,                                      \
@@ -662,7 +660,7 @@ static int qc_ftos(qc_program_t *prog) {
     qcany_t str;
     CheckArgs(1);
     num = GetArg(0);
-    util_snprintf(buffer, sizeof(buffer), "%g", num->_float);
+    platform_snprintf(buffer, sizeof(buffer), "%g", num->_float);
     str.string = prog_tempstring(prog, buffer);
     Return(str);
     return 0;
@@ -684,7 +682,7 @@ static int qc_vtos(qc_program_t *prog) {
     qcany_t str;
     CheckArgs(1);
     num = GetArg(0);
-    util_snprintf(buffer, sizeof(buffer), "'%g %g %g'", num->vector[0], num->vector[1], num->vector[2]);
+    platform_snprintf(buffer, sizeof(buffer), "'%g %g %g'", num->vector[0], num->vector[1], num->vector[2]);
     str.string = prog_tempstring(prog, buffer);
     Return(str);
     return 0;
@@ -696,7 +694,7 @@ static int qc_etos(qc_program_t *prog) {
     qcany_t str;
     CheckArgs(1);
     num = GetArg(0);
-    util_snprintf(buffer, sizeof(buffer), "%i", num->_int);
+    platform_snprintf(buffer, sizeof(buffer), "%i", num->_int);
     str.string = prog_tempstring(prog, buffer);
     Return(str);
     return 0;
@@ -834,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;
 
@@ -879,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)platform_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);
@@ -904,32 +894,6 @@ static void prog_main_setparams(qc_program_t *prog) {
     }
 }
 
-static 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) {
@@ -1106,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);
@@ -1146,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],
@@ -1171,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;
@@ -1287,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;