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

📄 tcurses.c

📁 地球模拟器
💻 C
字号:
/* ======================================================================*//* tcurses.c 9-9-92 support for unix curses frontend for    Tierra simulation,   Tierra Simulator V4.0: Copyright (c) 1991, 1992 Tom Ray & Virtual Life   written by Daniel pirone   v 1.0*//* ======================================================================*/void FEExit(ENO)I32s ENO;{sleep(1);endwin();exit(ENO);}/* ======================================================================*/void FECeol(){clrtoeol();}/* ======================================================================*/I16s FEGetc(){return getch();}/* ======================================================================*/void FEStartup(){/* called immediately after the soup_in file is read *//* an opportunity to interactively set soup_in vars */I8s tt;initscr();if ((LINES < 20) || (COLS < 80))   {   fprintf(stderr,"\nTIERRA: not enough space on screen ... \n");   FEExit(-666);   }clear();/* set up keyboard */nonl(); cbreak(); noecho(); /* scrollok(); */fe_width = COLS - 23;fe_lines = LINES -2 ;IMode = PLN_STATS;PLN_X = 0;PLN_Y = 2;MSG_X = 0;MSG_Y = PLN_Y;ERR_X = 0;ERR_Y = LINES -2;HLP_X = 0;HLP_Y = LINES -1;/* Title screen */printw("\n\n\t\t\t\t      TIERRA\n");printw("\n\n\t\t\t\t     July  92\n");printw("\n\t\t\t     Artificial Life System\n\t\t\t\t\tBy\n");printw("\t\t\t\tDr. Thomas S. Ray\n\t\t\t\t\t&\n");printw("\t\t    Daniel Pirone, Tom Uffner & Marc Cygnus\n\n");refresh();sleep(0); clear();/* nice stats banner stuff */standout();for(tt = 0; tt < COLS-1; tt++)   {   mvaddch(0,tt,' ');   mvaddch(1,tt,' ');   mvaddch(ERR_Y,tt,' ');   mvaddch(LINES-1,tt,' ');   }standend();/* FEPrintf(HLP_X+15,HLP_Y,1,"Press Interupt Key for menu ..."); */FEPrintf(HLP_X+15,HLP_Y,1,"Tierra initializing, please wait ...");refresh();}/* ======================================================================*/#ifdef __GNUC__void FEPrintf(I32s scr_x, I32s scr_y, I32s scr_a, ... )#elsevoid FEPrintf(scr_x, scr_y, scr_a, va_alist )I32s scr_x, scr_y, scr_a;va_dcl#endif /*__GNUC__ */{    va_list ap;    I8s *msg_str,        buf[80];    if((scr_x < 0) || (scr_x > COLS) || (scr_y < 0) || (scr_y > LINES))       {fprintf(stderr,"\0x07"); return ; }    if (scr_a) standout();#ifdef __GNUC__    va_start(ap,acr_a);#else    va_start(ap);#endif /*__GNUC__*/    if ((msg_str = va_arg(ap, I8s *)) != NULL)       {       vsprintf(buf,msg_str,ap);       mvprintw(scr_y,scr_x,buf);       }    va_end(ap);    if (scr_a) standend();    refresh();}/* ======================================================================*/void FEStats(){ if (GeneBnker)  { FEPrintf(0,0,1,    "InstExec  = %ld,%6.6ld  Cells = %4ld  Genotypes = %4ld  Sizes =%4ld ",        InstExe.m,InstExe.i,NumCells, NumGenotypes, NumSizes);    FEPrintf(0,1,1,       "Extracted = %-20.20s                                                ",      ExtrG);  }  else /* (GeneBnker) */  { FEPrintf(0,0,1, "InstExec  = %ld,%6.6ld  Cells = %4ld ",        InstExe.m,InstExe.i,NumCells);  }}/* ======================================================================*//*-----------------------------------------------------------------------*/void T_sig_int(sig,code,scp,addr)    I32s  sig,code;    /* struct sigcontext *scp; */    I32s *scp; /* DO NOT USE !!!!! */    I8s  *addr;{TC_Menu =1;}/*-----------------------------------------------------------------------*/void FEMenu (){   I8s  answer;   I32s tsz;   I8s  data[85];   signal(2,T_sig_int);   touchwin(stdscr);   refresh();   while(1)      {      FEPrintf(HLP_X,HLP_Y,1,"TIERRA |  i-info  v-var  s-save  q-save&quit  Q-quit  m-misc c-continue |->"      );      answer = mvgetch(HLP_Y,HLP_X+31);      if (answer == 'c')           {          FEPrintf(ERR_X,ERR_Y,1,"\t\t\t\t\t\t\t\t\t\t");          break;          }      if (answer == 'v')         {  	 IMode = 69;         FEPrintf(MSG_X,MSG_Y,0,                  "To alter any global variable from soup_in, type\n");         FEPrintf(MSG_X,MSG_Y+1,0,                  "the variable name (using proper case), a space,\n");         FEPrintf(MSG_X,MSG_Y+2,0,                  "an equal sign, a space, and the new value.\n");         FEPrintf(MSG_X,MSG_Y+3,0,                  "Use no space at start of line.  Some examples:\n");         FEPrintf(MSG_X,MSG_Y+4,0, "alive = 0\n");         FEPrintf(MSG_X,MSG_Y+5,0, "DistProp = .6\n");         FEPrintf(MSG_X,MSG_Y+6,0,"GenebankPath = newpath/\n");         FEClrmsg(MSG_Y+7);         echo(); nl();nocbreak();         FEPrintf(HLP_X,HLP_Y-1,0," ");         clrtoeol();         fgets(data,84,stdin);         /* getstr(data); */         cbreak();noecho(); nonl();         if (!GetAVar(data))             FEError(-900,NOEXIT,NOWRITE,                 "Tierra T_sig_int() Not a valid soup_in variable: %s", data);         IMode = PLN_STATS;         ToggleLog(0L);         }         if (answer == 'i')         {         FEPrintf(0,1,1,#ifdef ALCOMM"Port = %5ld FreeBlocks = %6ld  FreeMemCurrent = %6ld seed = %ld   ",          VPORT,FreeBlocks, FreeMemCurrent,seed);#else"FreeBlocks = %6ld  FreeMemCurrent = %6ld seed = %ld   ",          FreeBlocks, FreeMemCurrent,seed);#endif         FEPrintf(HLP_X,HLP_Y,1,"INFO   |  p-plan  s-size_histo g-gen_histo m-mem_histo z-size_query     |->"	 );         answer = mvgetch(HLP_Y,HLP_X+31);         if (answer == 'z')            {            IMode = 69;            FEClrmsg(MSG_Y);            sprintf(mes[0],            "Enter a size class ( eg: 80 ) to examine -> ");            FEMessage(1,mes);            FEPrintf(HLP_X,HLP_Y-2,0," ");            echo(); nl();nocbreak();            fgets(data,84,stdin);            /* getstr(data); */            cbreak();noecho(); nonl();            sscanf(data,"%d", &tsz);            if (Hist != NULL)            {   thfree(Hist);                Hist=NULL;            }            query_size((I16u)tsz);            IMode = PLN_STATS;            }         if (answer == 'p')            {              IMode = 69;            sprintf(mes[0],            "Now in Plan Display mode, updated every million time steps \n");            FEMessage(1,mes);            if (Hist != NULL)            {   thfree(Hist);                Hist=NULL;            }            IMode = PLN_STATS;            }         if (answer == 's')            {              if(GeneBnker)                {               IMode = SIZ_HIST;               query_species(fe_lines);               }            }         if (answer == 'm')            {              if(GeneBnker)                {               IMode = SIZM_HIST;               query_species(fe_lines);               }            }         if (answer == 'g')            {              if(GeneBnker)                {               IMode = GEN_HIST;               query_species(fe_lines);               }            }         answer = ' ';       }       if (answer == 's')         {           FEError(-901,NOEXIT,WRITE," ");         }      if (answer == 'q')         {           FEError(-902,EXIT,WRITE," ");         }      if (answer == 'Q') FEExit(-1);      if (answer == 'm')           {	  IMode = 69;          FEClrmsg(MSG_Y);          FEPrintf(0,1,1,"VER=%1.2f INST=%d PLOIDY=%d  %s %s %s %s\n",                   VER,INST,PLOIDY,#ifdef ERROR"ERROR",#else"",#endif#ifdef MEM_PROF"MEM_PROF",#else"",#endif#ifdef MICRO"MICRO",#else"",#endif#ifdef ALCOMM"ALCOMM"#else""#endif	  );          FEPrintf(HLP_X,HLP_Y,1,"MISC |  H-Histo Logging  I-Inject Gene %s  %s  |->\n",#ifdef MICRO          "M-Micro Toggle",#else          "",#endif#ifdef ALCOMM          "P-ALmonD Pause"#else          ""#endif         );      answer = mvgetch(HLP_Y,HLP_X+31);         if (answer == 'H')            {              HistPrint = (Log && !HistPrint)? 1 : 0;            sprintf(mes[0],             "%s \n",(Log)? (HistPrint)? "Logging Histograms \n":                                          "NOT Logging Histograms \n" :                           "Log NOT on ! \n");            FEMessage(1,mes);            }#ifdef MICRO         if (answer == 'M')              {             if(MC_step == -1L) MC_step = 0L;             else if(MC_step == 0L) MC_step = 1L;             else {MC_step =-1L; if(tfp_log != NULL) Log = 1L;}	     sprintf(mes[0]," MICRO STEP Mode = %s\n",	     (MC_step == -1)?"off": (MC_step == 1)?"keypress":"delay");	     FEMessage(1,mes);             }#endif /* MICRO */#ifdef ALCOMM         if (answer == 'P')              {             AL_run_flag = (AL_run_flag)?0:1; 	     sprintf(mes[0]," ALmond Pause = %s\n",		     (AL_run_flag)?"off": "on");	     FEMessage(1,mes);             }#endif /* ALCOMM */         if (answer == 'I')              {	     sprintf(mes[0],"INJECT GENE TO RUNNING SIMULATION\n"); 	     sprintf(mes[1],"Enter gene name ( eg 0080aaa) or \n"); 	     sprintf(mes[2],"Enter ESC to cancel\n");	     FEMessage(3,mes);             echo(); nl();nocbreak();             FEPrintf(HLP_X,HLP_Y-1,0," ");	     clrtoeol();             fgets(data,84,stdin);             /* getstr(data); */             cbreak();noecho(); nonl();	     if (data[0] != 0x1b) InjectFromBank(data, -1, 0);	     sprintf(mes[0]," Attempted Injection of %30s done\n", data);	     FEMessage(1,mes);	     FEStats();             }          answer = ' ';	  IMode = PLN_STATS;          }	/* end of misc */      }         /* end while loop */standend();FEPrintf(HLP_X,HLP_Y,1,"\t\t\tPress Interupt Key for menu ...\t\t\t");refresh();TC_Menu =0;}	/* end of FEMenu *//*-----------------------------------------------------------------------*//* ======================================================================*/void FEClrmsg(n)I32s n;{I8s t;if(n <0) return;mvprintw(n,0," ");clrtobot();FEPrintf(HLP_X,HLP_Y,1,"                          Press Interupt Key for menu ...                    ");/*for(t= n; ( t < fe_lines); t++)    {    FEPrintf(MSG_X,t,0," ");    FECeol();    }*/}/* ======================================================================*//* ======================================================================*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -