📄 tturbo.c
字号:
/* ======================================================================*//* tturbo.c 9-9-92 support for Turbo C frontend for Tierra Simulator V4.0: Copyright (c) 1992 Dan Pirone & Virtual Life written by Daniel pirone v 1.0*//* ======================================================================*/#include <conio.h>#include <graphics.h>/* ======================================================================*/int DispText = 11, DispBack = 2, InfoText = 5, InfoBack = 3;void FEExit(ENO)I32s ENO;{ sleep(1); textmode(C80);/* textattr(15); */ textbackground(0); textcolor(15); clrscr(); exit(ENO);}/* ======================================================================*/#define FECeol() clreol()/* ======================================================================*/int FEGetc(){return getch();}void FEMemCheck(msg)I8s *msg;{ FEPrintf(1, 11, 0, "%s\n", msg); FEPrintf(1, 12, 0, "%ld,%ld\n", InstExe.m, InstExe.i); if (strncmp(msg,"Out of Memory", 13)); { FEPrintf(1, 13, 0, "Hit any key to continue...\n"); FEGetc(); }}/* ======================================================================*//* called immediately after the soup_in file is read *//* an opportunity to interactively set soup_in vars */void FEStartup(){ FILE *inf; I8s tt, first[12], second[12]; I16s gmode, color;#if __TURBOC__ >= 0x200 /* deal with older compilers */FE_DV_Mode = DETECT;detectgraph(&FE_DV_Mode,&gmode );#endif if(inf = fopen("tcolors.cfg","r")) { fgets(Buff, 84, inf); do { if (*Buff != '#' && strlen(Buff) > 3) { sscanf(Buff, "%11s%11s%d", first, second, &color); if (!strcmp(first,"information")) { if (!strcmp(second,"text:")) InfoText = color; else if (!strcmp(second,"background:")) InfoBack = color; } else if (!strcmp(first,"display")) { if (!strcmp(second,"text:")) DispText = color; else if (!strcmp(second,"background:")) DispBack = color; } } } while (fgets(Buff, 84, inf) != NULL); fclose(inf); }fe_width = 57;IMode = PLN_STATS;PLN_X = 1;PLN_Y = 3;MSG_X = 1;MSG_Y = PLN_Y;ERR_X = 1;HLP_X = 1;textmode(C80); /* textattr(43); */ textbackground(DispBack); textcolor(DispText);clrscr();/* Title screen */gotoxy(35,5);cprintf("TIERRA");gotoxy(34,7);cprintf("July 92");gotoxy(29,9);cprintf("Artificial Life System");gotoxy(37,11);cprintf("By");gotoxy(31,13);cprintf("Dr. Thomas S. Ray");gotoxy(20,15);cprintf("Daniel Pirone, Tom Uffner & Marc Cygnus");sleep(3);FE_DosVideoToggle(0);FEPrintf(HLP_X,HLP_Y,1," Tierra initializing, please wait ... ");}/* ======================================================================*/void FEPrintf(I32s scr_x, I32s scr_y, I32s scr_a,...){ va_list ap; I8s *msg_str, buf[80]; I8s CF = 0; va_start(ap,scr_a); if((scr_x < 1) || (scr_x > 80) || (scr_y < 1) || (scr_y > HLP_Y)) {sound(100); return ; } if (scr_a) { textbackground(InfoBack); textcolor(InfoText); /* textattr(53); */ } if (*(msg_str = va_arg(ap, I8s *)) != 0) { vsprintf(buf,msg_str,ap); if (buf[strlen(buf)-1] == '\n') {buf[strlen(buf)-1]='\0';CF=1;} gotoxy(scr_x,scr_y); cprintf(buf); if (CF) clreol(); } va_end(ap); if (scr_a) { textbackground(DispBack); textcolor(DispText); /* textattr(43); */ }}/* ======================================================================*/void FEStats(){ if (GeneBnker) { FEPrintf(1,1,1, "InstExec = %ld,%6.6ld Cells = %4ld Genotypes = %4ld Sizes =%4ld ", InstExe.m,InstExe.i,NumCells, NumGenotypes, NumSizes); FEPrintf(1,2,1, "Extracted = %-20.20s ", ExtrG); } else /* (GeneBnker) */ { FEPrintf(1,1,1, "InstExec = %ld,%6.6ld Cells = %4ld ", InstExe.m,InstExe.i,NumCells); }}/* ======================================================================*//*-----------------------------------------------------------------------*/void FEMenu(){ I8s answer; I32s tsz; I8s data[85];#ifdef ALCOMM AL_run_flag = 1;#endif 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 = getch(); if (answer == 'c') { break; } if (answer == 'v') { IMode = 69; FE_DosVideoToggle(0); 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); gotoxy(HLP_X,HLP_Y-2); if ((gets(data)) == NULL) break;/* DAN get a string */ if (!GetAVar(data)) FEError(-1600,NOEXIT,NOWRITE, "Tierra FEMenu() Not a valid soup_in variable: %s", data); IMode = PLN_STATS; ToggleLog(0L); } if (answer == 'i') {#ifdef ERROR FEPrintf(1,2,1, "Coreleft = %lu TotMemUse = %6ld FreeMemCurrent = %6ld" ,(unsigned long) coreleft(), TotMemUse, FreeMemCurrent);#else FEPrintf(1,2,1, "Coreleft = %lu FreeBlocks = %6ld FreeMemCurrent = %6ld" ,(unsigned long) coreleft(), FreeBlocks, FreeMemCurrent);#endif FEPrintf(HLP_X,HLP_Y,1,"INFO | p-plan s-size_histo g-gen_histo m-mem_histo z-size_query |->" ); answer = getch(); if (answer == 'z') { IMode = 69; FE_DosVideoToggle(FE_DV_Mode); FEClrmsg(MSG_Y); sprintf(mes[0], "Enter a size class ( eg: 80 ) to examine -> "); FEMessage(1,mes); gotoxy(HLP_X,HLP_Y-2); if ((gets(data)) == NULL) break; sscanf(data,"%d", &tsz); FEClrmsg(MSG_Y); if (Hist != NULL) { thfree(Hist); Hist = NULL; } query_size((I16u)tsz); FEPrintf(HLP_X,HLP_Y,1,"INFO | z-size_query Press any key to continue ... |->" ); getch(); IMode = PLN_STATS; FE_DosVideoToggle(0); } if (answer == 'p') { IMode = 69; FE_DosVideoToggle(0); FEClrmsg(MSG_Y); sprintf(mes[0], "Now in Plan Display mode, updated every million time steps \n"); FEMessage(1,mes); IMode = PLN_STATS; if (Hist != NULL) { thfree(Hist); Hist = NULL; } } if (answer == 's') { if(GeneBnker) { IMode = SIZ_HIST; FE_DosVideoToggle(FE_DV_Mode); query_species(fe_lines); } } if (answer == 'm') { if(GeneBnker) { IMode = SIZM_HIST; FE_DosVideoToggle(FE_DV_Mode); query_species(fe_lines); } } if (answer == 'g') { if(GeneBnker) { IMode = GEN_HIST; FE_DosVideoToggle(FE_DV_Mode); query_species(fe_lines); } } answer = ' '; } if (answer == 's') { FEError(-1601,NOEXIT,WRITE," "); } if (answer == 'q') { FEError(-1602,EXIT,WRITE," "); } if (answer == 'm') { IMode = 69; FE_DosVideoToggle(0); FEClrmsg(MSG_Y); FEPrintf(1,2,1,"VER=%1.2f INST=%d PLOIDY=%d %s %s %s\n", VER,INST,PLOIDY,#ifdef ERROR"ERROR",#else"",#endif#ifdef MEM_PROF"MEM_PROF",#else"",#endif#ifdef MICRO"MICRO"#else""#endif ); FEPrintf(HLP_X,HLP_Y,1,"MISC | H-Histo Logging S-DOS Shell I-Inject Gene %s |->\n",#ifdef MICRO "M-Micro Toggle"#else ""#endif ); gotoxy(HLP_X+79,HLP_Y); answer = getch(); 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 */ if (answer == 'S') { FEPrintf(HLP_X,HLP_Y,1, "TIERRA: shell (%s), type exit to return ... ",SHELL); system(SHELL); FE_DosVideoToggle(0); } 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 abort to cancel\n"); FEMessage(3,mes); FEPrintf(HLP_X,HLP_Y-2,0," "); fgets(data,84,stdin); if ((data[0] >= '0') && (data[0] <= '9') ) { InjectFromBank(data, -1, 0); } else { FEError(-13667,NOEXIT,NOWRITE,"User abort of Injection!"); } } answer = ' '; IMode = PLN_STATS; } /* end of misc */ if (answer == 'Q') FEExit(-1); } /* end while loop */FEPrintf(HLP_X,HLP_Y,1," Press Any Key for menu ... ");}/*-----------------------------------------------------------------------*//* ======================================================================*/void FEClrmsg(n)I32s n;{I8s t;if(n <0) return;for(t= n; t < fe_lines; t++) { gotoxy(MSG_X,t); clreol(); }}/* ======================================================================*/void FE_DosVideoToggle(mode)I16s mode;{int tt;#if __TURBOC__ >= 0x200 /* deal with older compilers */if (mode == EGA) { textmode(C4350); /* use C4350 for ega/vga */ fe_lines = 42; ERR_Y = 42; HLP_Y = 43; }elseif (mode == VGA) { textmode(C4350); fe_lines = 49; ERR_Y = 49; HLP_Y = 50; }else#endif /* __TURBOC__ >= 0x200 */ { textmode(C80); fe_lines = 24; ERR_Y = 24; HLP_Y = 25; }/* textattr(43); */ textbackground(DispBack); textcolor(DispText);clrscr();/* textattr(53); */ textbackground(InfoBack); textcolor(InfoText);for(tt = 1; tt < 81; tt++) { gotoxy(tt,1); cprintf(" "); gotoxy(tt,2); cprintf(" "); gotoxy(tt,ERR_Y); cprintf(" "); gotoxy(tt,HLP_Y); cprintf(" "); }/* textattr(43); */ textbackground(DispBack); textcolor(DispText);FEStats();}/* ======================================================================*//* ======================================================================*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -