void term_main(void) { hyu32 n = termFuncArr.size(); for (hyu32 i = 0; i < n; ++i) termFuncArr[i](); finalizeAll(); finalizeDebug(); loadPathArr.finalize(); updateFuncArr.finalize(); drawFuncArr.finalize(); termFuncArr.finalize(); for (hyu32 i = dllHandleArr.size(); i > 0; ) { AfxFreeLibrary(dllHandleArr[--i]); } dllHandleArr.finalize(); HMD_FREE(mainMem); HMD_FREE(debugMem); }
int main(int argc, const char* argv[]) { hyu32 memSize = DEFAULT_MEMSIZE; const char* param; const char* symbolFile = NULL; const char* incPath[32]; int numIncPath = 0; void* hayatMemory = NULL; numLoadPath = 0; HMD_LOADPATH = NULL; bPrintSource = false; for (int i = 1; i < argc; i++) { if (argv[i][0] == '-') { switch (argv[i][1]) { case 'I': // includeパス if (numIncPath >= 32) { usage(); HMD_PRINTF("too many include path (must <=32)\n"); return 1; } param = getParam(i, argc, argv, "-I"); if (param == NULL) { usage(); HMD_PRINTF("parameter for -I is not specified\n"); return 1; } incPath[numIncPath++] = param; break; case 'M': param = getParam(i, argc, argv, "-M"); if (param == NULL) { usage(); HMD_PRINTF("parameter for -M is not specified\n"); return 1; } else { memSize = 0; while('0' <= *param && *param <= '9') { memSize *= 10; memSize += (*param++ - '0'); } if (*param == 'k' || *param == 'K') { memSize *= 1024; } else if (*param == 'm' || *param == 'M') { memSize *= 1024 * 1024; } else if (*param != '\0') { printf("bad parameter for -M\n"); memSize = DEFAULT_MEMSIZE; } } break; case 'f': param = getParam(i, argc, argv, "-f"); if (param == NULL) { HMD_PRINTF("symbol file is not specified\n"); return 1; } symbolFile = param; break; case 's': bPrintSource = true; break; case 'h': usage(true); return 1; default: usage(true); HMD_PRINTF("unknown option %s\n", argv[i]); return 1; } } else { usage(true); HMD_PRINTF("unknown option %s\n", argv[i]); return 1; } } hayatMemory = HMD_ALLOC(memSize); MemPool::initGMemPool(hayatMemory, memSize); for (int i = 0; i < numIncPath; ++i) { addLoadPath(incPath[i], "out"); } addLoadPath(".", "out"); if (symbolFile != NULL) { if (! gSymbolTable.readFile(symbolFile)) { HMD_PRINTF("symbol file '%s' load failed\n", symbolFile); HMD_FREE(hayatMemory); return 1; } } else { hyu8* fileBuf; hyu32 len = hmd_loadFile_inPath("symbols.sym", &fileBuf); if (len != 0) gSymbolTable.readTable(fileBuf); else HMD_PRINTF("could not load symbols.sym\n"); } // main loop static const size_t BUF_SIZE = 1024; char buf[BUF_SIZE]; while (fgets(buf, BUF_SIZE, stdin) != NULL) { TArray<char>* s = replaceSymbol(buf); printResolvedLine(s->top()); s->finalize(); } // normal exit gSymbolTable.finalize(); HMD_FREE(hayatMemory); return 0; }
~JumpControlTbl() { for (int i = tbl.size() - 1; i >= 0; --i) { delete tbl[i]; } tbl.finalize(); }