#include #include #include "tmpasm.h" #include "tmpasm_scconfig.h" #include "debug.h" #include "db.h" tmpasm_t *ctx; void re_fail(char *s, char c) { fprintf(stderr, "Regex error: %s [opcode %o]\n", s, c); abort(); } static void do_dump() { tmpasm_dump(ctx, stdout); } static void do_exec() { if (ctx->dead) fprintf(stderr, "Can not execute the script due to the above compilation error.\n"); else tmpasm_execute(ctx); } static void scc_init(void) { db_init(); db_mkdir("/local"); db_cd("/local"); } int main(int argc, char *argv[]) { scc_init(); ctx = tmpasm_init(&scc_cb); scc_tmpasm_parse(ctx, NULL, stdin, stdout); if (argc > 1) { char *cmd; cmd = argv[1]; while(*cmd == '-') cmd++; switch(*cmd) { case 'd': do_dump(); break; case 'e': do_exec(); break; } } else do_dump(); if (ctx->runtime_error != 0) { const char *fmt = tmpasm_runtime_error_fmt(ctx); fprintf(stderr, "Runtime error at %d:%d: ", ctx->runtime_error_line, ctx->runtime_error_col); fprintf(stderr, fmt, (ctx->runtime_error_data == NULL ? "" : ctx->runtime_error_data)); fprintf(stderr, "\n"); } tmpasm_uninit(ctx); db_uninit(); return 0; }