*/
#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;
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, ...)
}
#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, \
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;
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;
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;
&qc_sqrt, /* 13 */
&qc_floor /* 14 */
};
-static size_t qc_builtins_count = sizeof(qc_builtins) / sizeof(qc_builtins[0]);
static const char *arg0 = NULL;
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);
}
}
-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) {
}
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);
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],
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;
# 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;