Example #1
0
    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);
    }
Example #2
0
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;
}
Example #3
0
 ~JumpControlTbl() {
     for (int i = tbl.size() - 1; i >= 0; --i) {
         delete tbl[i];
     }
     tbl.finalize();
 }