?? tsetup.c
字號:
/* tsetup.c 9-9-92 Tierra Simulator setup routines *//* Tierra Simulator V4.0: Copyright (c) 1991, 1992 Tom Ray & Virtual Life */#ifndef lintstatic char sccsid[] = "@(#)tsetup.c 1.5 7/21/92";#endif#include "license.h"#include "tierra.h"#include "extern.h"#include <errno.h>#include <signal.h>#ifdef unix#include <unistd.h>#endif /* unix */#ifdef MEM_CHK#include <memcheck.h>#endifI8s GetAVar(data) I8s data[85];{ switch (*data) { case 'a': if (!strncmp(data, "alive", 5)) return sscanf(data, "alive = %ld", &alive), 1; case 'd': if (!strncmp(data, "debug", 5)) return sscanf(data, "debug = %ld", &debug), 1; case 'h': if (!strncmp(data, "hangup", 6)) return sscanf(data, "hangup = %ld", &hangup), 1; case 'n': if (!strncmp(data, "new_soup", 8)) return sscanf(data, "new_soup = %ld", &new_soup), 1; case 's': if (!strncmp(data, "seed", 4)) return sscanf(data, "seed = %ld", &seed), 1; case 'B': if (!strncmp(data, "BrkupSiz", 8)) return sscanf(data, "BrkupSiz = %ld", &BrkupSiz), 1; case 'C': if (!strncmp(data, "CumGeneBnk", 10)) return sscanf(data, "CumGeneBnk = %ld", &CumGeneBnk), 1; case 'D': if (!strncmp(data, "DiskOut", 7)) return sscanf(data, "DiskOut = %ld", &DiskOut), 1; if (!strncmp(data, "DistFreq", 8)) return sscanf(data, "DistFreq = %f", &DistFreq), 1; if (!strncmp(data, "DistProp", 8)) return sscanf(data, "DistProp = %f", &DistProp), 1; if (!strncmp(data, "DivSameSiz", 10)) return sscanf(data, "DivSameSiz = %ld", &DivSameSiz), 1; if (!strncmp(data, "DivSameGen", 10)) return sscanf(data, "DivSameGen = %ld", &DivSameGen), 1; if (!strncmp(data, "DropDead", 8)) return sscanf(data, "DropDead = %ld", &DropDead), 1; case 'G': if (!strncmp(data, "GeneBnker", 9)) return sscanf(data, "GeneBnker = %ld", &GeneBnker), 1; if (!strncmp(data, "GenebankPath", 12)) return sscanf(data, "GenebankPath = %s", GenebankPath), 1; if (!strncmp(data, "GenPerBkgMut", 12)) return sscanf(data, "GenPerBkgMut = %f", &GenPerBkgMut), 1; if (!strncmp(data, "GenPerFlaw", 10)) return sscanf(data, "GenPerFlaw = %f", &GenPerFlaw), 1; if (!strncmp(data, "GenPerMovMut", 12)) return sscanf(data, "GenPerMovMut = %f", &GenPerMovMut), 1; case 'L': if (!strncmp(data, "Log", 3)) return sscanf(data, "Log = %ld", &Log), 1; case 'I': if (!strncmp(data, "IMapFile", 8)) return sscanf(data, "IMapFile = %s", IMapFile), 1; case 'M': if (!strncmp(data, "MalMode", 7)) return sscanf(data, "MalMode = %ld", &MalMode), 1; if (!strncmp(data, "MalReapTol", 10)) return sscanf(data, "MalReapTol = %ld", &MalReapTol), 1; if (!strncmp(data, "MalTol", 6)) return sscanf(data, "MalTol = %ld", &MalTol), 1; if (!strncmp(data, "MateProb", 8)) return sscanf(data, "MateProb = %f", &MateProb), 1; if (!strncmp(data, "MateSearchL", 11)) return sscanf(data, "MateSearchL = %ld", &MateSearchL), 1; if (!strncmp(data, "MateSizeEp", 10)) return sscanf(data, "MateSizeEp = %ld", &MateSizeEp), 1; if (!strncmp(data, "MateXoverProp", 13)) return sscanf(data, "MateXoverProp = %f", &MateXoverProp), 1; if (!strncmp(data, "MaxFreeBlocks", 13)) return sscanf(data, "MaxFreeBlocks = %ld", &MaxFreeBlocks), 1; if (!strncmp(data, "MemModeFree", 11)) return sscanf(data, "MemModeFree = %ld", &MemModeFree), 1; if (!strncmp(data, "MemModeProt", 11)) return sscanf(data, "MemModeProt = %ld", &MemModeProt), 1; if (!strncmp(data, "MaxMalMult", 10)) return sscanf(data, "MaxMalMult = %f", &MaxMalMult), 1; if (!strncmp(data, "MinCellSize", 11)) return sscanf(data, "MinCellSize = %ld", &MinCellSize), 1; if (!strncmp(data, "MinTemplSize ", 12)) return sscanf(data, "MinTemplSize = %ld", &MinTemplSize), 1; if (!strncmp(data, "MovPropThrDiv", 13)) return sscanf(data, "MovPropThrDiv = %f", &MovPropThrDiv), 1; case 'N': if (!strncmp(data, "NumCells", 8)) return sscanf(data, "NumCells = %ld", &NumCells), 1; case 'O': if (!strncmp(data, "OutPath", 7)) return sscanf(data, "OutPath = %s", OutPath), 1; case 'P': if (!strncmp(data, "PhotonPow", 9)) return sscanf(data, "PhotonPow = %lf", &PhotonPow), 1; if (!strncmp(data, "PhotonWidth", 11)) return sscanf(data, "PhotonWidth = %ld", &PhotonWidth), 1; if (!strncmp(data, "PhotonWord", 10)) return sscanf(data, "PhotonWord = %s", PhotonWord), 1; if (!strncmp(data, "PutLimit", 8)) return sscanf(data, "PutLimit = %f", &PutLimit), 1; case 'R': if (!strncmp(data, "RamBankSiz", 10)) return sscanf(data, "RamBankSiz = %ld", &RamBankSiz), 1; if (!strncmp(data, "ReapRndProp", 11)) return sscanf(data, "ReapRndProp = %g", &ReapRndProp), 1; case 'S': if (!strncmp(data, "SaveFreq", 8)) return sscanf(data, "SaveFreq = %ld", &SaveFreq), 1; if (!strncmp(data, "SavMinNum", 9)) return sscanf(data, "SavMinNum = %ld", &SavMinNum), 1; if (!strncmp(data, "SavThrMem", 9)) return sscanf(data, "SavThrMem = %f", &SavThrMem), 1; if (!strncmp(data, "SavThrPop", 9)) return sscanf(data, "SavThrPop = %f", &SavThrPop), 1; if (!strncmp(data, "SearchLimit", 11)) return sscanf(data, "SearchLimit = %f", &SearchLimit), 1; if (!strncmp(data, "SizDepSlice", 11)) return sscanf(data, "SizDepSlice = %ld", &SizDepSlice), 1; if (!strncmp(data, "SlicePow", 8)) return sscanf(data, "SlicePow = %lf", &SlicePow), 1; if (!strncmp(data, "SliceSize", 9)) return sscanf(data, "SliceSize = %ld", &SliceSize), 1; if (!strncmp(data, "SliceStyle", 10)) return sscanf(data, "SliceStyle = %ld", &SliceStyle), 1; if (!strncmp(data, "SlicFixFrac", 11)) return sscanf(data, "SlicFixFrac = %f", &SlicFixFrac), 1; if (!strncmp(data, "SlicRanFrac", 11)) return sscanf(data, "SlicRanFrac = %f", &SlicRanFrac), 1; if (!strncmp(data, "SoupSize", 8)) return sscanf(data, "SoupSize = %ld", &SoupSize), 1; case 'W': if (!strncmp(data, "WatchExe", 8)) return sscanf(data, "WatchExe = %ld", &WatchExe), 1; if (!strncmp(data, "WatchMov", 8)) return sscanf(data, "WatchMov = %ld", &WatchMov), 1; if (!strncmp(data, "WatchTem", 8)) return sscanf(data, "WatchTem = %ld", &WatchTem), 1; default: return 0; }}void GetSoup(argc,argv)I32s argc;I8s *argv[];{ FILE *inf; I32s i; SList **tsl; sprintf(mes[0], "Using instruction set (INST) = %d", INST); FEMessage(1,mes);#ifdef __TURBOC__ timezone = (I32s) 5L *60L * 60L;#endif /* __TURBOC__ */ if (argc > 1) { sprintf(soup_fn,"%s", argv[1]); } else {#ifdef IBM3090 sprintf(soup_fn,"soup_in%d.io.d", INST);#else sprintf(soup_fn,"soup_in%d", INST);#endif } inf = fopen(soup_fn, "r"); if (inf == NULL) { FEError(-1300,EXIT,NOWRITE, "Tierra GetSoup() file %s not opened, exiting\n", soup_fn); } fgets(Buff, 84, inf); while (1) { if (*Buff != '#' && strlen(Buff) > 3 && !GetAVar(Buff)) FEError(-1301,NOEXIT,NOWRITE, "Tierra GetSoup() bad soup_in line: %s\n", Buff); fgets(Buff, 84, inf); if (*Buff >= '0' && *Buff <= '9' || !strncmp("space",Buff,5)) break; } ToggleLog(0L); if (!seed) { seed = (I32s) time(NULL); tsrand(seed); seed = tlrand(); for (i = tcrand(); i >=0; i--) seed = tlrand(); if (!new_soup) { tsrand(seed); tlrand(); } } if (new_soup) { tsrand(seed); tlrand(); sprintf(mes[0], "seed = %ld", seed); FEMessage(1,mes); GenInList = (I8s **) tcalloc((I32u) NumCells, sizeof(I8s *)); GenInBuf = (I8s *) tcalloc((I32u) NumCells * 30, sizeof(I8s)); for (i = 0; i < NumCells; i++) { GenInList[i] = GenInBuf + (i * 30); sscanf(Buff, "%[^\n]", GenInList[i]); fgets(Buff, 84, inf); } } /* FEStartup(); */ /* allocate arrays */ sprintf(mes[0], "sizeof(Instruction) = %ld", (I32s) sizeof(Instruction)); sprintf(mes[1], "sizeof(Cell) = %ld", (I32s) sizeof(Cell)); sprintf(mes[2], "sizeof(MemFr) = %ld", (I32s) sizeof(MemFr)); FEMessage(3,mes);#ifdef __TURBOC__ sprintf(mes[0], "coreleft = %lu", (I32u) coreleft()); FEMessage(1,mes);#endif if (new_soup) { soup = (HpInst) thcalloc((I32u) SoupSize, sizeof(Instruction)); sprintf(mes[0], " %ld bytes allocated for soup", SoupSize * sizeof(Instruction)); CelArSiz = CellsSize = (I32s) 16384 / (I32s) sizeof(Cell); NumCelAr = 1; if (NumCells > CellsSize - 2) { NumCelAr = (NumCells + 2) / CelArSiz; if((NumCells + 2) % CelArSiz) NumCelAr++; CellsSize = NumCelAr * CelArSiz; } cells = (Pcells Fp) tcalloc(NumCelAr, sizeof(Pcells)); for (i = 0; i < NumCelAr; i++) cells[i] = (Pcells) tcalloc(CelArSiz, sizeof(Cell)); sprintf(mes[1], " %ld bytes allocated for cells", CellsSize * sizeof(Cell)); TopDummy = &cells[0][0]; BottomDummy = &cells[0][1]; FreeMem = (MemFr Fp) tcalloc(MaxFreeBlocks, sizeof(MemFr)); sprintf(mes[2], " %ld bytes allocated for MemFr", MaxFreeBlocks * sizeof(MemFr)); FEMessage(3,mes);#ifdef __TURBOC__ sprintf(mes[0], "coreleft = %lu tsetup (soup, cells, FreeMem)", coreleft()); FEMessage(1,mes);#endif if (!soup || !cells || !FreeMem) FEError(-1302,EXIT,NOWRITE, "Tierra GetSoup() setup malloc error, exiting\n"); else { sprintf(mes[0], "tsetup: arrays allocated without error"); FEMessage(1,mes); } } TotFlaw = TotMovMut = TotMut = isolate = 0; extr.a = extr.i = 0; Disturb.m = Disturb.i = DistNext.m = DistNext.i = 0L; siz_sl = 1; if (DivSameGen) DivSameSiz = 1; if (GeneBnker) { tsl = (SList **) tcalloc(siz_sl, sizeof(SList *)); if (tsl == NULL) FEError(-1303,EXIT,NOWRITE,"Tierra GetSoup() tsl tcalloc error\n"); else sl = tsl; } else WatchExe = WatchMov = WatchTem = 0; if (new_soup) GetNewSoup(); else GetOldSoup(inf); sprintf(mes[0], "tsetup: soup gotten"); FEMessage(1,mes); if (SliceStyle == 1) { PhotonSize = (I32s) strlen(PhotonWord); PhotonTranslate(PhotonInst, PhotonWord); slicer = SlicerPhoton;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -