📄 starteic.c
字号:
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); } }}#define FORMAT1 "\n#ifdef _STDLIBH\nexit(main());\n"\ "#else\nmain();\n#endif\n"#define FORMAT2 "\n"\ "#ifdef _STDLIBH\n"\ "exit(main(_Argc,_Argv));\n"\ "#else\n"\ "main(_Argc,_Argv);\n"\ "#endif\n"/*#define FORMAT3 "\n"\ "#ifdef _STDLIBH\n"\ "exit(main(_Argc,_Argv,_Envp));\n"\ "#else\n"\ "main(_Argc,_Argv,_Envp);\n"\ "#endif\n"*/int doEntry(){ func_t *F; symentry_t *sym; sym = EiC_lookup(stand_tab,"main"); if(!sym) { if(!ScriptMode) EiC_messageDisplay("Error: Missing `main'\n"); return 0; } if(sym) { if(EiC_gettype(sym->type) != t_func) { EiC_messageDisplay("Error: `main' NOT DECLARED as a function\n"); return 0; } /* check return type of main */ if(EiC_gettype(nextType(sym->type)) != t_int) { EiC_messageDisplay("Error: function `main' MUST return an `int' type\n"); return 0; } /* get number of arguments */ F = EiC_getInf(sym->type); if(getFNp(F) <= 1) /* allow for void argument */ EiC_prolineString(FORMAT1); else if(getFNp(F) <= 2) EiC_prolineString(FORMAT2); else EiC_messageDisplay("Error: too many arguments being " "passed to `main'\n"); /*EiC_prolineString(FORMAT3);*/ } return 1;}char * doargs(int argc, char **argv){ int i,sz; char buf[51]; char *p; sprintf(buf,"int _Argc = %d;char *_Argv[] = {",argc); /* get size of string needed */ sz = strlen(buf); for(i=0;i<argc;++i) sz += strlen(argv[i]) + 3; /* 3 comma + quotes */ /* needs to be NULL terminated */ sz += strlen("(void*)0};") + 2; /* 2 for NULL */ p = xmalloc(sz); *p ='\0'; strcat(p,buf); for(i=0;i<argc;++i) { strcat(p,"\""); strcat(p,argv[i]); strcat(p,"\","); } strcat(p,"(void*)0};"); return p;}void EiC_parseString(char * fmt,...){ code_t code; char *str; int h = EiC_interActive; int gs = FREE_G_STRING; int len; /* unsigned sp;*/ va_list args; va_start(args,fmt); FREE_G_STRING = 0; len = 2 * strlen(fmt); str = malloc(len > 256 ? len : 256); vsprintf(str,fmt,args); EiC_interActive = 0; /* turn off interactive mode */ EiC_prolineString(str); code = EiC_ENV->CODE; EiC_ENV->CODE.nextinst = EiC_ENV->CODE.binst = 0; EiC_ENV->CODE.inst = NULL; EiC_ENV->CODE.prev = &code; /* sp = EiC_ENV->sp;*/ runEiC(); /* rem: runEiC will call free_env_code */ EiC_ENV->CODE = code; EiC_interActive = h; free(str); va_end(args); FREE_G_STRING = gs;} void EiC_callBack(void *c){ code_t code; int gs = FREE_G_STRING; FREE_G_STRING = 0; if(!c) return; code = EiC_ENV->CODE; EiC_ENV->CODE = *(code_t*)c; EiC_ENV->CODE.prev = &code; /* link */ EiC_interpret(EiC_ENV); EiC_ENV->CODE.prev = NULL; /* unlink */ EiC_ENV->CODE = code; FREE_G_STRING = gs;} void EiC_switches(char *switches){ if(switches) { char *p,*c = malloc(strlen(switches)+2); strcpy(c,switches); p = strtok(c," \t\n"); while(p) { if(*p == '-') do_sw_commands(p+1); p = strtok(NULL," \t\n"); } free(c); }}int EiC_run(int argc, char **argv){ char * n2 = doargs(argc,argv); int h = EiC_interActive; code_t code; EiC_interActive = 0; /* turn off interactive mode */ code = EiC_ENV->CODE; EiC_ENV->CODE.nextinst = EiC_ENV->CODE.binst = 0; EiC_ENV->CODE.inst = NULL; EiC_ENV->CODE.prev = &code; /*sp = EiC_ENV->sp;*/ EiC_prolineString(n2); runEiC(); if(!EiC_Include_file(argv[0],1)) return 0; else runEiC(); if(doEntry()) runEiC(); /* rem: runEiC will call free_env_code */ EiC_ENV->CODE.prev = NULL; EiC_ENV->CODE = code; /*EiC_ENV->sp = sp;*/ xfree(n2); EiC_interActive = h; return 1;} void EiC_getSwitchCommands(int *Argc, char ***Argv){#ifndef NO_ARGV int argc = *Argc; char **argv = *Argv; static int gotSwitches = 0; if(gotSwitches) return; gotSwitches = 1; if(argc-- > 0) while(argv[1]) { if(argv[1][0] == '-') { if(!do_sw_commands(&argv[1][1])) { EiC_error("Unknown switch command [%s]\n", argv[1]); usage(); } } else break; argv++; argc--; } if(argc-- >0) { if(!EiC_run(argc+1,argv+1)) EiC_error("Failed to run %s\n",argv[1]); exit(0); } *Argc = argc; *Argv = argv;#endif} 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 */}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -