memset(prog, 0, sizeof(*prog));
prog->entityfields = header.entfield;
+ prog->crc16 = header.crc16;
prog->filename = util_strdup(filename);
if (!prog->filename) {
*/
#if defined(QCVM_EXECUTOR)
+const char *type_name[TYPE_COUNT] = {
+ "void",
+ "string",
+ "float",
+ "vector",
+ "entity",
+ "field",
+ "function",
+ "pointer",
+#if 0
+ "integer",
+#endif
+ "variant"
+};
+
bool opts_debug = false;
bool opts_memchk = false;
return 0;
}
+static int qc_vtos(qc_program *prog)
+{
+ char buffer[512];
+ qcany *num;
+ qcany str;
+ CheckArgs(1);
+ num = GetArg(0);
+ 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;
+}
+
static int qc_spawn(qc_program *prog)
{
qcany ent;
&qc_print,
&qc_ftos,
&qc_spawn,
- &qc_kill
+ &qc_kill,
+ &qc_vtos,
};
static size_t qc_builtins_count = sizeof(qc_builtins) / sizeof(qc_builtins[0]);
qcint fnmain = -1;
qc_program *prog;
size_t xflags = VMXF_DEFAULT;
+ bool opts_printfields = false;
+ bool opts_printdefs = false;
+ bool opts_info = false;
arg0 = argv[0];
++argv;
xflags |= VMXF_PROFILE;
}
+ else if (!strcmp(argv[1], "-info")) {
+ --argc;
+ ++argv;
+ opts_info = true;
+ }
+ else if (!strcmp(argv[1], "-printdefs")) {
+ --argc;
+ ++argv;
+ opts_printdefs = true;
+ }
+ else if (!strcmp(argv[1], "-printfields")) {
+ --argc;
+ ++argv;
+ opts_printfields = true;
+ }
else
usage();
}
prog->builtins_count = qc_builtins_count;
prog->builtins_alloc = 0;
+ printf("Program's system-checksum = 0x%04x\n", (int)prog->crc16);
+
for (i = 1; i < prog->functions_count; ++i) {
const char *name = prog_getstring(prog, prog->functions[i].name);
/* printf("Found function: %s\n", name); */
fnmain = (qcint)i;
}
printf("Entity field space: %i\n", (int)prog->entityfields);
- if (fnmain > 0)
- {
- prog_exec(prog, &prog->functions[fnmain], xflags, VM_JUMPS_DEFAULT);
+ if (opts_info) {
+ prog_delete(prog);
+ return 0;
+ }
+ if (opts_printdefs) {
+ for (i = 0; i < prog->defs_count; ++i) {
+ printf("Global: %8s %-16s at %u\n",
+ type_name[prog->defs[i].type],
+ prog_getstring(prog, prog->defs[i].name),
+ (unsigned int)prog->defs[i].offset);
+ }
+ }
+ else if (opts_printfields) {
+ for (i = 0; i < prog->fields_count; ++i) {
+ printf("Field: %8s %-16s at %u\n",
+ type_name[prog->fields[i].type],
+ prog_getstring(prog, prog->fields[i].name),
+ (unsigned int)prog->fields[i].offset);
+ }
}
else
- printf("No main function found\n");
+ {
+ if (fnmain > 0)
+ {
+ prog_exec(prog, &prog->functions[fnmain], xflags, VM_JUMPS_DEFAULT);
+ }
+ else
+ printf("No main function found\n");
+ }
prog_delete(prog);
return 0;