Ejemplo n.º 1
0
void EiC_startEiC(int argc, char **argv)
{
    extern int EiC_load_history(char *fname,int prompt);

#if defined(WIN32) || defined(_DJGPP)
    signal(SIGABRT, EiC_bus_err);
#else
    signal(SIGBUS, EiC_bus_err);
#endif
    signal(SIGILL, EiC_ill_oper);
    signal(SIGSEGV, EiC_stor_access);
    signal(SIGFPE, EiC_float_err);
    signal(SIGINT, EiC_term_int);
#if defined(WIN32) || defined(_DJGPP)
    signal(SIGTERM, EiC_exit_call);
#else
    signal(SIGUSR1, EiC_exit_call);
#endif


    EiC_getSwitchCommands(&argc,&argv);

#ifndef NO_ARGV

    if(argc-- >0) {
        if(!EiC_run(argc+1,argv+1))
            EiC_error("Error: Failed to run %s\n",argv[1]);
        exit(0);
    }
#endif

    if(!silent) {
        fputs(Version,stdout);
    }

#ifndef NO_HISTORY
    if(StartUpH)
        EiC_setinfile("starteic.h");

    if(HistoryFile) {
        char * name = "EiChist.lst";
        if(reStart) {
            puts("Re Initiating EiC -- please wait.");
            if(EiC_load_history(name,prompt)) {
                runEiC();  /* ensure that startup files have
			  been loaded and compiled */
                EiChist = fopen(name,"w");
                EiC_save_history(EiChist,0);
                fclose(EiChist);
                EiChist=NULL;
                EiC_Include_file(name,1);
                runEiC();
                EiChist = fopen(name,"a");
            } else {
                EiC_error("Error: unable to load history file\n");
                HistoryFile = 0;
                EiChist = NULL;
            }
            puts("Done.");
        } else {
            EiChist = fopen(name,"w");
            if(!EiChist) {
                EiC_messageDisplay("Failed to create EiChist.lst\n"
                                   "Start No history file mode switch\n");
                HistoryFile = 0;
            }
        }
        if(HistoryFile)
            setvbuf(EiChist,NULL,_IOLBF,0);
    }
#endif

#ifdef PPCLIB
    setvbuf(stdout,NULL,_IONBF,0);
    setvbuf(stderr,NULL,_IONBF,0);
#endif
    /* Hawk start change */
    /*  while(1)         */
    /* runEiC();         */
    /* Hawk change       */
}
Ejemplo n.º 2
0
void runEiC()
{
    void EiC_remTempories(void);
    void EiC_peephole(code_t *c);
    int EiC_getHistLineNo(), hfrom = 0;

	inRunEiC = 1;

	InitFileControl();

    switch(setjmp(env)) {
	case 0:
	    jmpOn = 1;

	    EiCp_initiateReset();

#ifndef NO_HISTORY
	    hfrom = EiC_getHistLineNo();
#endif
	    inbuf = EiC_nextproline();

	    EiC_initlex(inbuf);
	    EiC_initparser();
	    EiC_parse(EiC_ENV);
	    EiC_peephole(&getenvcode(EiC_ENV));
	
	    if(EiC_listcodeON)
		do_displays();
	    if (EiC_ENV->CODE.nextinst && EiC_interpON && !EiC_ParseError)
		EiC_interpret(EiC_ENV);
	    break;
	
	default:
	    EiC_messageDisplay("EiC reports an unRecognised jmp condition");
	case Err_:
	    EiC_ParseError = 1;
	    break;
	case Exit_:
	    EiC_messageDisplay("Exit called: force clean up!\n");
	    EiC_ParseError = 1;
	    break;

	    
    }

    if (EiC_errs) 
	EiC_clear_err_msgs();
    
    if(FREE_G_STRING)
	EiC_xfreemark(eicgstring);
    free_env_code();
    EiC_remTempories();
    
    if(EiC_ParseError) {

	if(EiC_ENV->lsp != 0) {
	    //EiC_messageDisplay("EiC Reset Local Stack Pointer\n");
	    EiC_ENV->lsp = 0;
	}
	
	/*
	if(EiC_ENV->ARgar.n)
		xmark(EiC_ENV->ARgar.val,eicstay);
	*/
	
	EiCp_Reset(1);
	firstInst.inst = NULL; //maks: the code is not valid anymore

	EiC_ParseError = 0;
    } else { 

#ifndef NO_HISTORY
	if(EiChist)
	    EiC_save_history(EiChist,hfrom);
#endif
    }

    if(EiC_memdumpON) {
	EiC_marksyms(NON_LEAK);
	if(EiC_verboseON)
	    printf("--- XMEM DUMP\n");
	xdumpnonmark("xdump", NON_LEAK); //maks
    }

	inRunEiC = 0;
}
Ejemplo n.º 3
0
void runEiC()
{
    void EiC_remTempories(void);
    void EiC_peephole(code_t *c);
    int EiC_getHistLineNo(), hfrom = 0;

    /* Hawk start change */
    EiC_ParseError = 0;
    /* Hawk change */

    /* Hawk start change */
#ifdef WIN32
    __try {
#endif
        /* Hawk change */
        switch(setjmp(env)) {
        case 0:
            jmpOn = 1;

            EiCp_initiateReset();

#ifndef NO_HISTORY
            hfrom = EiC_getHistLineNo();
#endif
            inbuf = EiC_nextproline();

            EiC_initlex(inbuf);
            EiC_initparser();
            EiC_parse(EiC_ENV);
            EiC_peephole(&getenvcode(EiC_ENV));

            if(EiC_listcodeON)
                do_displays();
            if (EiC_ENV->CODE.nextinst && EiC_interpON && !EiC_ParseError)
                EiC_interpret(EiC_ENV);
            break;

        default:
            EiC_messageDisplay("EiC reports an unRecognised jmp condition in starteic.c");
        case Err_:
            EiC_ParseError = 1;
            break;
        case Exit_:
            EiC_messageDisplay("Exit called: force clean up!\n");
            EiC_ParseError = 1;
            break;


        }
        /* Hawk start change */
#ifdef WIN32
    } __finally {
#endif
        /* Hawk change */

        if (EiC_errs)
            EiC_clear_err_msgs();

        if(FREE_G_STRING)
            EiC_xfreemark(eicgstring);
        free_env_code();
        EiC_remTempories();

        if(EiC_ParseError) {

            if(EiC_ENV->lsp != 0) {
                EiC_messageDisplay("EiC::Reset Local Stack Pointer\n");
                EiC_ENV->lsp = 0;
            }
            /*
            if(EiC_ENV->ARgar.n)
            xmark(EiC_ENV->ARgar.val,eicstay);
            */

            EiCp_Reset(1);

            /* Hawk start change */
            EiC_ParseError = 0;
            /* Hawk change */
        } else {

#ifndef NO_HISTORY
            if(EiChist)
                EiC_save_history(EiChist,hfrom);
#endif
        }

        if(EiC_memdumpON) {
            EiC_marksyms(NON_LEAK);
            if(EiC_verboseON)
                printf("--- XMEM DUMP\n");
            xdumpnonmark("eicxdump", NON_LEAK);
        }
#ifdef WIN32
    }
#endif
}