home *** CD-ROM | disk | FTP | other *** search
/ Collection of Education / collectionofeducationcarat1997.iso / COMPUSCI / NERVES.ZIP / NO87 / NSMENU.C < prev    next >
C/C++ Source or Header  |  1991-01-12  |  18KB  |  826 lines

  1. #include "defn.h"
  2. #include "nsdata.c"
  3. #include "proto.h"
  4. #include "lsin.c"
  5. #include "lcos.c"
  6.  
  7. void nsmenu(void)
  8.  { /* main menu */
  9.   int i,j,k,m,done,msg;
  10.   enum asc_val asc;
  11.   char str[41];
  12.   char *p;
  13.   FILE *file;
  14.   struct neuron *np;
  15.   struct con *cp;
  16.   struct Iint *ip;
  17.   float f;
  18.  
  19.   msg = FALSE;
  20. display: /* display menu */
  21.   clrscr();
  22.   if (msg)
  23.    {
  24.     gotoxy(1,1);
  25.     cputs("Recording path not found, Press P to change");
  26.     msg = FALSE;
  27.    }
  28.   gotoxy(5,8);
  29.   textattr(WHITE);
  30.   cputs("R");
  31.   textattr(LIGHTGRAY);
  32.   cputs("ead files");
  33.   gotoxy(5,10);
  34.   textattr(WHITE);
  35.   cputs("W");
  36.   textattr(LIGHTGRAY);
  37.   cputs("rite files");
  38.   gotoxy(5,12);
  39.   textattr(WHITE);
  40.   cputs("N");
  41.   textattr(LIGHTGRAY);
  42.   cputs("euron data modification");
  43.   gotoxy(5,14);
  44.   textattr(WHITE);
  45.   cputs("E");
  46.   textattr(LIGHTGRAY);
  47.   cputs("nvironment specification");
  48.   gotoxy(5,16);
  49.   textattr(WHITE);
  50.   cputs("I");
  51.   textattr(LIGHTGRAY);
  52.   cputs("nitialize conditions");
  53.   gotoxy(5,18);
  54.   textattr(WHITE);
  55.   cputs("G");
  56.   textattr(LIGHTGRAY);
  57.   cputs("raph specification");
  58.   gotoxy(5,20);
  59.   textattr(WHITE);
  60.   cputs("P");
  61.   textattr(LIGHTGRAY);
  62.   cputs("ath specification for recording");
  63.   gotoxy(5,22);
  64.   textattr(WHITE);
  65.   cputs("S");
  66.   textattr(LIGHTGRAY);
  67.   cputs("imulate");
  68.   gotoxy(5,24);
  69.   textattr(WHITE);
  70.   cputs("Q");
  71.   textattr(LIGHTGRAY);
  72.   cputs("uit");
  73.   gotoxy(37,8);
  74.   if (neurfname[0])
  75.    cprintf("Neuron file: %s",neurfname);
  76.   gotoxy(37,9);
  77.   if (envfname[0])
  78.    cprintf("Environment file: %s",envfname);
  79.   gotoxy(37,10);
  80.   if (recpath[0])
  81.    cprintf("Recording path: %s",recpath);
  82.   erasecursor();
  83.  
  84.   /* get choice */
  85.   done = FALSE;
  86.   while (!done)
  87.    {
  88.     i = toupper(bioskey(0) & 0xff);
  89.     switch (i)
  90.      {
  91.       case 'R': /* read files */
  92. start: /* get the neuron filespec & read in */
  93.        gotoxy(1,1);
  94.        cputs("Enter neuron file spec:                                       ");
  95.        gotoxy(25,1);
  96.        j = 0;
  97.        while (!j)
  98.     j = bioskey(1);
  99.        asc = j & 0xff;
  100.        if (asc == ESC)
  101.     {
  102.      bioskey(0);
  103.      goto display;
  104.     }
  105.        else
  106.     if (asc == CR)
  107.      {
  108.       bioskey(0);
  109.       goto envfile;
  110.      }
  111.        str[0] = 25;
  112.        p = cgets(str);
  113.        file = fopen(p,"rb");
  114.        if (file == NULL)
  115.     goto start;
  116.        else
  117.     { /* read in file */
  118.      fread(&nn,2,1,file);
  119.      for (np=ns, j=0; j<nn; np++, j++)
  120.       {
  121.        fread(np,sizeof(struct neuron)-22,1,file);
  122.        np->iGmem = np->Gmem * 1e8 + .5;
  123.        np->iCmem = np->Cmem * 1e11 + .5;
  124.        np->iVt = np->Vt * 1e6 + fsgn(np->Vt)*.5;
  125.        np->iFmin = np->Fmin * 10000 + .5;
  126.        np->iGain = np->Gain * 1e-2 + .5;
  127.        np->ipI[0] = np->pI[0] * 1e13 + fsgn(np->pI[0])*.5;
  128.        np->ipI[1] = np->pI[1] * 1e13 + fsgn(np->pI[1])*.5;
  129.        np->imconst = np->mconst * 1e1 + fsgn(np->mconst)*.5;
  130.       }
  131.      fread(&ni,2,1,file);
  132.      for (ip=Iinta, j=0; j<ni; ip++, j++)
  133.       {
  134.        fread(ip,40,1,file);
  135.        ip->iIL = ip->IL * 1e11 + fsgn(ip->IL)*.5;
  136.        if (ip->type == 0)
  137.         ip->ipL[0] = ip->pL[0] * 1e6 + fsgn(ip->pL[0])*.5;
  138.        else
  139.         ip->ipL[0] = ip->pL[0] * 1e3 + .5;
  140.        ip->ipL[1] = ip->pL[1] * 1e3 + .5;
  141.        ip->ipL[2] = ip->pL[2] * 1e2 + .5;
  142.        ip->iIH = ip->IH * 1e11 + fsgn(ip->IH)*.5;
  143.        ip->ipH[0] = ip->pH[0] * 1e3 + .5;
  144.        ip->ipH[1] = ip->pH[1] * 1e3 + .5;
  145.       }
  146.      fread(&nc,2,1,file);
  147.      for (cp=cona, j=0; j<nc; cp++, j++)
  148.       {
  149.        fread(cp,sizeof(struct con)-4,1,file);
  150.        cp->iIsr = cp->Isr * 1e10 + fsgn(cp->Isr)*.5;
  151.        cp->iIcr = cp->Icr * 1e10 + fsgn(cp->Icr)*.5;
  152.       }
  153.      fclose(file);
  154.      /* change pointers */
  155.      for (j=0, np=ns; j<nn; j++, np++)
  156.       {
  157.        if (np->Iint != NULL)
  158.         np->Iint = Iinta + ((int)np->Iint - 1)/40;
  159.        if (np->con != NULL)
  160.         np->con = cona + ((int)np->con - 1)/32;
  161.       }
  162.      for (j=0, cp=cona; j<nc; j++, cp++)
  163.       {
  164.        if (cp->next != NULL)
  165.         cp->next = cona + ((int)cp->next - 1)/32;
  166.       }
  167.      strcpy(neurfname,p);
  168.      gotoxy(37,8);
  169.      cprintf("Neuron file: %s                                ",neurfname);
  170.     }
  171. envfile:
  172.        gotoxy(1,1);
  173.        cputs("Enter environment file spec:                                       ");
  174.        gotoxy(30,1);
  175.        j = 0;
  176.        while (!j)
  177.     j = bioskey(1);
  178.        asc = j & 0xff;
  179.        if (asc == ESC || asc == CR)
  180.     {
  181.      bioskey(0);
  182.      goto display;
  183.     }
  184.        str[0] = 25;
  185.        p = cgets(str);
  186.        file = fopen(p,"rb");
  187.        if (file == NULL)
  188.     goto envfile;
  189.        else
  190.     { /* read in file */
  191.      fread(&f,sizeof(float),1,file);
  192.      bug.x = f*1000. + .5;
  193.      fread(&f,sizeof(float),1,file);
  194.      bug.y = f*1000. + .5;
  195.      fread(&f,sizeof(float),1,file);
  196.      bug.ang = f*100000. + .5;
  197.      fread(&nfood,2,1,file);
  198.      fread(foodx,2,NFOOD,file);
  199.      fread(foody,2,NFOOD,file);
  200.      for (k=0; k<NFOOD; k++)
  201.       {
  202.        fread(&j,2,1,file);
  203.        foodsize[k] = (long)j * 10000L;
  204.       }
  205.      fread(&nblock,2,1,file);
  206.      fread(blockx,2,NBLOCK,file);
  207.      fread(blocky,2,NBLOCK,file);
  208.      fread(gr,sizeof(struct graph),5,file);
  209.      fclose(file);
  210.      strcpy(envfname,p);
  211.     }
  212.        goto display;
  213.       case 'W': /* write files */
  214.        gotoxy(1,1);
  215.        cputs("Write neuron file? ");
  216.        if (toupper(bioskey(0) & 0xff) != 'Y')
  217.     goto wenvfile;
  218.        /* write neuron file */
  219.        /* count neurons */
  220.        for (i=0, j=0, np=ns; i<nn; i++, np++)
  221.     if (np->name[0])
  222.      j++;
  223.        gotoxy(1,1);
  224.        if (neurfname[0])
  225.     {
  226.      cprintf("Save neurons to %s? ",neurfname);
  227.      i = toupper(bioskey(0) & 0xff);
  228.     }
  229.        if (!neurfname[0] || i != 'Y')
  230.     {
  231.      gotoxy(1,1);
  232.      cputs("Enter file spec:                                      ");
  233.      gotoxy(18,1);
  234.      str[0] = 38;
  235.      p = cgets(str);
  236.      strcpy(neurfname,p);
  237.     }
  238.        file = fopen(neurfname,"wb");
  239.        fwrite(&j,2,1,file);
  240.        for (i=0, np=ns; i<nn; i++, np++)
  241.     if (np->name[0])
  242.      {
  243.       fwrite(np,27,1,file);
  244.       if (np->Iint)
  245.        j = (int)np->Iint - (int)Iinta + 1;
  246.       else
  247.        j = 0;
  248.       fwrite(&j,2,1,file);
  249.       fwrite(&(np->Isens),18,1,file);
  250.       if (np->con)
  251.        j = (int)np->con - (int)cona + 1;
  252.       else
  253.        j = 0;
  254.       fwrite(&j,2,1,file);
  255.      }
  256.        fwrite(&ni,2,1,file);
  257.        for (i=0; i<ni; i++)
  258.     fwrite(Iinta+i,19,1,file);
  259.        fwrite(&nc,2,1,file);
  260.        for (i=0, cp=cona; i<nc; i++, cp++)
  261.     {
  262.      fwrite(cp,sizeof(struct con)-6,1,file);
  263.      if (cp->next)
  264.       j = (int)cp->next - (int)cona + 1;
  265.      else
  266.       j = 0;
  267.      fwrite(&j,2,1,file);
  268.     }
  269.        fclose(file);
  270. wenvfile: /* write environment file */
  271.        gotoxy(1,1);
  272.        cputs("Write environment file?                                    ");
  273.        gotoxy(1,25);
  274.        if (toupper(bioskey(0) & 0xff) != 'Y')
  275.     goto display;
  276.        gotoxy(1,1);
  277.        if (envfname[0])
  278.     {
  279.      cprintf("Save environment to %s? ",envfname);
  280.      j = toupper(bioskey(0) & 0xff);
  281.     }
  282.        if (!envfname[0] || j != 'Y')
  283.     {
  284.      gotoxy(1,1);
  285.      cputs("Enter file spec:                                      ");
  286.      gotoxy(18,1);
  287.      str[0] = 38;
  288.      p = cgets(str);
  289.      strcpy(envfname,p);
  290.     }
  291.        file = fopen(envfname,"wb");
  292.        f = (double)bug.x/1000.;
  293.        fwrite(&f,sizeof(float),1,file);
  294.        f = (double)bug.y/1000.;
  295.        fwrite(&f,sizeof(float),1,file);
  296.        f = (float)bug.ang/100000.;
  297.        fwrite(&f,sizeof(float),1,file);
  298.        fwrite(&nfood,2,1,file);
  299.        fwrite(foodx,2,NFOOD,file);
  300.        fwrite(foody,2,NFOOD,file);
  301.        for (k=0; k<NFOOD; k++)
  302.     {
  303.      j = foodsize[k]/10000L;
  304.      fwrite(&j,2,1,file);
  305.     }
  306.        fwrite(&nblock,2,1,file);
  307.        fwrite(blockx,2,NBLOCK,file);
  308.        fwrite(blocky,2,NBLOCK,file);
  309.        fwrite(gr,sizeof(struct graph),5,file);
  310.        fclose(file);
  311.        goto display;
  312.       case 'N': /* neuron data modification */
  313.        datamod();
  314.        goto display;
  315.       case 'E': /* environment set up */
  316. pent:  gotoxy(1,1);
  317.        cprintf("Enter number of food patches (0 - %d): %d   ",NFOOD,nfood);
  318.        gotoxy(39,1);
  319.        j = 0;
  320.        while (!j)
  321.     j = bioskey(1);
  322.        asc = j & 0xff;
  323.        if (asc == CR)
  324.     {
  325.      bioskey(0);
  326.      goto pdat;
  327.     }
  328.        else
  329.     if (asc == ESC)
  330.      {
  331.       bioskey(0);
  332.       goto display;
  333.      }
  334.        gotoxy(39,1);
  335.