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 */ }
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; }
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 }