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

📄 tsetup.c

📁 地球模拟器
💻 C
📖 第 1 页 / 共 3 页
字号:
/* 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 + -