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

📄 starteic.c

📁 微软的基于HMM的人脸识别原代码, 非常经典的说
💻 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 + -