⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 starteic.c

📁 guide and some example with visualC++
💻 C
📖 第 1 页 / 共 2 页
字号:
        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 + -