예제 #1
0
파일: db_edit.c 프로젝트: neutered/propgcc
static void DoSave(System *sys)
{
    VMFILE *fp;
    
    /* check for a program name on the command line */
    if (!SetProgramName(sys)) {
        VM_printf("expecting a file name\n");
        return;
    }
    
    /* save the program */
    if (!(fp = VM_fopen(programName, "w")))
        VM_printf("error saving '%s'\n", programName);
    else {
        VMVALUE lineNumber;
        VM_printf("Saving '%s'\n", programName);
        BufSeekN(0);
        while (BufGetLine(&lineNumber, sys->lineBuf)) {
            char buf[32];
            sprintf(buf, "%d ", lineNumber);
            VM_fputs(buf, fp);
            VM_fputs(sys->lineBuf, fp);
        }
        VM_fclose(fp);
    }
}
예제 #2
0
파일: db_edit.c 프로젝트: neutered/propgcc
static void DoList(System *sys)
{
    VMVALUE lineNumber;
    BufSeekN(0);
    while (BufGetLine(&lineNumber, sys->lineBuf))
        VM_printf("%d %s", lineNumber, sys->lineBuf);
}
예제 #3
0
파일: ebasic.c 프로젝트: dbetz/ebasic
static void DoRun(HandlerData *data)
{
    System *sys = data->sys;
    ImageHdr *image = data->image;
    GetLineHandler *getLine;
    void *getLineCookie;
    VMVALUE code;

    getLine = sys->getLine;
    getLineCookie = sys->getLineCookie;
    
    sys->getLine = EditGetLine;

    BufSeekN(0);

    sys->freeNext = sys->freeMark;
    
    InitImage(image);

    if ((code = Compile(sys, image, VMFALSE)) != 0) {
        sys->freeNext = sys->freeMark;
        Execute(sys, image, code);
    }

    sys->getLine = getLine;
    sys->getLineCookie = getLineCookie;
}
예제 #4
0
파일: db_edit.c 프로젝트: neutered/propgcc
static void DoRun(System *sys)
{
    ParseContext *c;
    sys->freeNext = sys->freeSpace;
    if (!(c = InitCompiler(sys, MAXOBJECTS)))
        VM_printf("insufficient memory\n");
    else {
        ImageHdr *image;
        BufSeekN(0);
        c->getLine = EditGetLine;
        if ((image = Compile(c)) != NULL) {
            Interpreter *i = (Interpreter *)sys->freeNext;
            size_t stackSize = (sys->freeTop - sys->freeNext - sizeof(Interpreter)) / sizeof(VMVALUE);
            if (stackSize <= 0)
                VM_printf("insufficient memory\n");
            else {
                InitInterpreter(i, stackSize);
                Execute(i, image);
            }
        }
    }
}