[comp.sources.misc] v07i078: Whales and Plankton, part 05/13

allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc) (07/19/89)

Posting-number: Volume 7, Issue 78
Submitted-by: loy@gtx.UUCP (Bob Loy)
Archive-name: whpl/part05

# whpl05of13.shar
#---cut here---cut here---cut here---cut here---cut here---
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files.
# This archive created: Sat Jan 14 04:04:27 MST 1989
export PATH; PATH=/bin:$PATH
echo shar: extracting "'whio.c3'" '(27590 characters)'
if test -f 'whio.c3'
then
	echo shar: will not over-write existing file "'whio.c3'"
else
sed 's/^X//' << \SHAR_EOF > 'whio.c3'
X 
Xvoid
Xlastuff(interm)
X  short   interm;
X{
X  register  int     h, j, k;
X  energarr *enerlist;
X  int     diffic = 0;
X  int     prcntl = 0;
X  double  lgn;
X  double  scaledif;
X  double  root;
X  int     rnk;
X  int     thelast = 0;
X  int     nxtulast;
X  int     sumrat;
X 
X  enerlist = (energarr *) calloc((numwh), (sizeof(energarr)));
X  if (enerlist == NULL)
X    {
X      if (debug >= 2)
X          fprintf(stderr, "\nlastuff(): enerlist calloc problems.\n");
X      exit(8);
X    }
X  for (j = 0; j < numwh; j++)
X    {
X      enerlist[j].ener = whale[j].energy;
X      enerlist[j].whal = j;
X      diffic += whale[j].ancesave;
X    }
X  diffic = diffic / numwh;
X  qsort((char*)enerlist, (numwh), sizeof(energarr), qlohi);
X  for (j = 0; j < numwh; j++)
X    {
X          /* If interim file dump, only process dead whales */
X      whale[j].enrec[whale[j].endex] = whale[j].energy;
X      if (!creonlyflg)
X          whale[j].endex++;
X      if (whale[j].endex >= 16 && whale[j].endex < 20)
X          if (debug >= 2)
X              fprintf(stderr,"lastuff(): wh[%d].enrec array 80%% FULL\n", j);
X      if (whale[j].endex >= 20)
X        {
X          if (debug >= 2)
X              fprintf(stderr,"lastuff(): wh[%d].enrec array is FULL\n", j);
X          if (debug >= 6)
X              fprintf(stdout,"lastuff(): wh[%d].enrec array is FULL\n", j);
X          if (endexwarn)
X              if (debug >= 1)
X                {
X                  fprintf(stderr,
X                      "  wh[%d].enrec[19] may have been\n", j);
X                  fprintf(stderr,
X                      "       *** OVERWRITTEN ***\n");
X                  fprintf(stdout,
X                      "  wh[%d].enrec[19] may have been\n", j);
X                  fprintf(stdout,
X                      "       *** OVERWRITTEN ***\n");
X                }
X        }
X      sumrat = 0;
X      k = 0;
X      while (k <= 20)
X        {
X          if (whale[j].comp[k].diff == 0)
X              break;
X          k++; 
X        }
X      if (k >= 15 && k < 19)
X          if (debug >= 2)
X              fprintf(stderr,
X                      "lastuff(): wh[%d].comp[%d] array 80%% FULL\n", j, k);
X      if (k == 19)
X        {
X          if (debug >= 2)
X              fprintf(stderr,
X                      "lastuff(): wh[%d].comp[%d] : ARRAY IS FULL\n", j, k);
X          if (debug >= 6)
X              fprintf(stdout,
X                      "lastuff(): wh[%d].comp[%d] : ARRAY IS FULL\n", j, k);
X        }
X      if (k >= 20)
X        {
X          if (debug >= 2)
X            {
X              fprintf(stderr,"lastuff(): wh[%d].comp[19] array is FULL\n", j);
X              fprintf(stderr, " *** OVERWRITTEN ***\n");
X            }
X          if (debug >= 6)
X            {
X              fprintf(stdout,"lastuff(): wh[%d].comp[19] array is FULL\n", j);
X              fprintf(stdout, " *** OVERWRITTEN ***\n");
X            }
X          k--;
X        }
X      whale[j].comp[k].diff = (short) diffic;
X      if (creonlyflg)
X          whale[j].comp[k].totl = 0;
X      else
X          whale[j].comp[k].totl = numwh;
X          /* Dead whales get rank of 125 */
X      if (whale[j].energy < 10000)
X          whale[j].comp[k].rank = 125;
X      else
X        {
X          for (h = 0; h <= numwh; h++)
X            {
X              if (enerlist[h].whal == j)
X                  break;
X            }
X          if (h == numwh)
X              if (debug >= 2)
X                  fprintf(stderr, "lastuff():  whale[%d] not on enerlist\n", j);
X          prcntl = (short) (1000 * (h + 1) / numwh);
X          if (creonlyflg)
X              whale[j].comp[k].rank = 0;
X          else
X            {
X              whale[j].comp[k].rank = prcntl;
X                  /* Live whales get rank of at least 250 */
X              if (prcntl < 250)
X                  whale[j].comp[k].rank = 250;
X            }
X        }
X      for (h = 0; h <= k; h++)
X        {
X          nxtulast = thelast;
X          rnk = whale[j].comp[h].rank;
X          scaledif = (double) whale[j].comp[h].diff;
X          scaledif /= 1000.0;
X          lgn = log(scaledif + 1.0);
X              /*  Atlernate attempt:
X                  root = sqrt( (double) whale[j].comp[h].diff);
X                  sumrat += rnk * (int) root;  */
X          thelast = rnk * (int) (lgn * 1000.0);
X          sumrat += thelast;
X        }
X      if (h == 1)
X          nxtulast = thelast;
X      whale[j].lastrat = thelast;
X      sumrat += nxtulast;
X      sumrat += thelast;
X      sumrat += thelast;
X      sumrat /= k + 4;
X      whale[j].rating = sumrat;
X      if (whale[j].allchldn > 3)
X          whale[j].offratio = 1000 * whale[j].allchldn / whale[j].age;
X      else
X          whale[j].offratio = -1;
X    }
X  if (debug >= 9)
X    {
X      fprintf(stdout, "\n");
X      fprintf(stdout, " STATFILE:\n");
X      fprintf(stdout,
X              "   energy, ansave, orat, age, die,                    whale\n");
X      for (j = numwh - 1; j >= 0; j--)
X        {
X          fprintf(stdout, "  %7d %7d %5d  %3d  %3d   ",
X                  enerlist[j].ener,
X                  whale[enerlist[j].whal].ancesave,
X                  whale[enerlist[j].whal].offratio,
X                  whale[enerlist[j].whal].age,
X                  whale[enerlist[j].whal].die);
X          whaleout(enerlist[j].whal, stdout, 1);
X        }
X    }
X  if (!creonlyflg)
X      statout(enerlist, interm);
X  free((char*) enerlist);
X}
X
X/*---------------------------------------------------------------------------*
X@
X@@  void  whaleinit() - Create and load the whale structures, either freshly
X@@              created, or filled from input file.
X@   input :  Global command line flags:  infileflg, eofflg, liveflg, readflg,
X@               addflg, creonlyflg
X@   caller:  main(), look()
X@   calls :  whaleload(); fopen(), fclose(), malloc(), realloc(),
X@               may call exit()
X@   proc  :  Depends heavily on command line flags.  See examples at top of
X@               file whio.c.
X@
X@*---------------------------------------------------------------------------*/
X
Xvoid
Xwhaleinit()
X{
X  int     j;
X  short   numinfile = 0;
X  short   badfile = 0;
X  short   foundin = 0;
X  char   *test = whinstr;
X  long    tell;
X  char    live[2];
X
X  created = numwh;   /* Assume all whales will be new for time being */
X      /* If only creating new whales, set numwh & supress most file flags */
X  if (creonlyflg)
X    {
X      numwh = creonlyflg;
X      created = numwh;
X      infileflg = FALSE;
X      eofflg = FALSE;
X      readflg = 0;
X    }
X      /* Read input whale file */
X  if (infileflg)
X    {
X      created = 0;   /* If a file read, created is only increased by addflg */
X      if ((whin = fopen(whinfile, "r")) != NULL)
X        {
X          if (eofflg)  /* Read whole file if eofflg set */
X              readflg = MAXSHORT;
X          while ((test = fgets(whinstr, 97, whin)) != NULL)
X            {
X              if (whinstr[2] == 'I' && whinstr[3] == 'N')
X                {
X                  if (readflg)  /* Read number of whales set by cmnd line -n */
X                    {
X                      if (debug >= 5 && !eofflg)
X                          fprintf(stdout,
X                                  "\nWhales to read: %d, to fill: %d\n",
X                                  readflg, readflg + addflg);
X                      if (numwh != readflg)
X                        {
X                          numwh = readflg;
X                          if (debug >= 5 && !eofflg)
X                              fprintf(stdout, "  numwh being reset to: %d.\n",
X                                      numwh);
X                        }
X                      if (eofflg)  /* But read whole file if eofflg set */
X                          numwh = 1;
X                      foundin++;
X                      break;
X                    }
X                  else   /* Otherwise read number of whales from file header */
X                    {
X                      fgets(whinstr, 97, whin);
X                      if (!(whinstr[4] == 'N' && whinstr[5] == 'u'))
X                          break;
X                      if (liveflg)  /* Read number of live whales */
X                        {
X                          fgets(whinstr, 97, whin);
X                          if (!(whinstr[4] == 'L' && whinstr[5] == 'i'))
X                              break;
X                        }
X                      sscanf(whinstr, "%*s%hd", &numinfile);
X                      if (debug >= 5)
X                          fprintf(stdout,
X                                  "\nWhales to read: %d, to fill: %d\n",
X                                  numinfile, numinfile + addflg);
X                      if (numwh != numinfile)
X                        {
X                          numwh = numinfile;
X                          if (debug >= 5)
X                              fprintf(stdout,
X                                      "  numwh being reset to: %d.\n",
X                                      numwh);
X                        }
X                      foundin++;
X                      break;
X                    }
X                }
X            }
X          if (test == NULL)
X              rewind(whin);
X        }
X      else
X        {
X          if (debug >= 2)
X              fprintf(stderr, "\n  WARNING: did not open input file  %s\n\n",
X                  whinfile);
X          badfile++;
X        }
X    }
X  else
X      foundin++;
X  if (!foundin)
X    {
X      if (debug >= 2)
X        {
X          fprintf(stderr, "\n  Warning: not a Standard Whale File.\n");
X          fprintf(stderr, "    Will try to read whales from file anyway.\n\n");
X        }
X      eofflg = TRUE;
X      readflg = MAXSHORT;
X      numwh = 1;
X    }
X      /* Check for too many whales */
X  if (numwh > MAXWH)
X    {
X      if (debug >= 2)
X          fprintf(stderr, "\n  numwh (%d) begins at > MAXWH (%d)\n",
X                  numwh, MAXWH);
X    }
X      /* Make room for whales */
X  whale = (whale_type *) malloc(numwh * whale_size);
X  if (whale == NULL)
X    {
X      if (debug >= 2)
X          fprintf(stderr, "\nWhale malloc problems.\n");
X      exit(9);
X    }
X      /* Read in whales from file if proper flags set */
X  j = 0;
X  if (infileflg && !badfile)
X    {
X      while (fgets(whinstr, 97, whin) != NULL)
X        {
X          if (whinstr[0] == '#')   /* Found a whale */
X            {
X              tell = ftell(whin);
X              fgets(whinstr, 97, whin);
X              if (!(whinstr[0] == 'w' && whinstr[1] == 'h'))
X                {
X                  if (debug >= 2)
X                      fprintf(stderr,
X                              "\n  Warning: not a standard Whale File\n\n");
X                  exit(20);
X                }
X              if (readflg)         /* Read until readflg is matched */
X                  if (readflg <= j)
X                      break;
X              if (liveflg)         /* Read only live whales */
X                {
X                  fgets(whinstr, 97, whin);
X                  sscanf(whinstr, "%s%*s%*d%*d%*d", live);
X                  if (live[0] != 'L')
X                      continue;
X                }
X              if (numwh <= j)
X                {
X                  numwh = j + 1;
X                      /* Make room for more whales */
X                  whale = (whale_type *) realloc((char *) whale,
X                          (numwh * whale_size));
X                  if (whale == NULL)
X                    {
X                      if (debug >= 2)
X                          fprintf(stderr, "\nWhale realloc problems.\n");
X                      exit(9);
X                    }
X                }
X              fseek(whin, tell, 0);
X              whaleload(j, 1);   /* Initialize whale from whale file recs */
X              j++;
X            }
X        }
X      fclose(whin);
X      if (j > MAXWH)
X        {
X          if (debug >= 2)
X              fprintf(stderr, "\n  Number read from file (%d) > MAXWH (%d)\n",
X                      j, MAXWH);
X        }
X      if (j < numwh)
X        {
X          if (debug >= 5)
X            {
X              fprintf(stderr, "\nWhales read from file (%d) not equal\n", j);
X              fprintf(stderr, "      to numwh (%d)\n", numwh);
X              fprintf(stderr, "  numwh being reset to: %3d.\n", j);
X            }
X          numwh = j;
X          whale = (whale_type *) realloc((char *) whale, (numwh * whale_size));
X          if (whale == NULL)
X            {
X              if (debug >= 2)
X                  fprintf(stderr, "\nWhale realloc problems.\n");
X              exit(9);
X            }
X        }
X    }
X  if (eofflg)
X    {
X      if (debug >= 5)
X          fprintf(stdout, "\nWhales read from file: %d\n", j);
X    }
X  if (addflg < 0 || addflg > 0)
X    {
X      if (debug >= 5)
X          fprintf(stdout, "\nWhales to add: %d\n", addflg);
X      if ((addflg + (short)numwh) <= 0)
X        {
X          if (debug >= 2)
X            {
X              fprintf(stderr, "addflg subtracts too many whales!\n");
X              fprintf(stderr, "  numwh would equal: %d.\n\n", numwh + addflg);
X              fprintf(stderr, "Program exiting.\n\n");
X            }
X          exit(2);
X        }
X      numwh += addflg;
X      if (numwh > MAXWH)
X        {
X          if (debug >= 2)
X              fprintf(stderr,
X                      "\n  Number added makes numwh (%d) > MAXWH (%d)\n",
X                      numwh, MAXWH);
X        }
X      if (debug >= 5)
X          fprintf(stdout, "  numwh being reset to: %d.\n", numwh);
X          /* Make room for more whales */
X      whale = (whale_type *) realloc((char *) whale, (numwh * whale_size));
X      if (whale == NULL)
X        {
X          if (debug >= 2)
X              fprintf(stderr, "\nWhale realloc problems.\n");
X          exit(9);
X        }
X    }
X  created += addflg;   /* addflg whales are always newly created ones */
X  if (created < 0)
X      created = 0;
X  if (debug >= 5)
X      fprintf(stdout,
X              "\nNumber of whales to be newly created: %d\n\n", created);
X  if (numwh > MAXWH)
X    {
X      if (debug >= 2)
X        {
X          fprintf(stderr,
X                  "\nMaximum number of whales (%d) exceeded.\n", MAXWH);
X          fprintf(stderr, "  Program will proceed, but NO mating will\n");
X          fprintf(stderr, "  take place until some whales die off.\n\n");
X        }
X    }
X  initwh = truwh = numwh;   /* Initialize globals */
X  for ( ; j < numwh; j++)
X      whaleload(j, 0);   /* Create brand new whales */
X      /* If only creating brand new whales, write out file and exit here */
X  if (creonlyflg && !trakflg)
X    {
X      if (debug >= 5)
X          fprintf(stdout, "New whalefile has been created.\n");
X      finish(0);
X    }
X}
X
X/*---------------------------------------------------------------------------*
X@
X@@  void  look() - Displays "whale tracks" in eight or sixteen different areas
X@@              on a Sun 3/50 or equivalent (1152 * 900 display).
X@   input :  Globals trakflg,  viewflg, geneflg, infileflg, kldispflg
X@   output:  Movements of numwh whales, eight windows at a time
X@   caller:  main()
X@   calls :  whaleinit(), printscreen(), movewhale(), countplank(), randout()
X@   proc  :  Use viewflg to pick which half of screen to display on, then
X@               display the whales (either random or fixed) one at a time.
X@
X@*---------------------------------------------------------------------------*/
X
Xvoid
Xlook()
X{
X  whale_type   *whalelist;
X  int     j, k;
X  int     plank;
X  Uint    orgwh;
X  char    genes[6];
X  short   tempgene[16];
X  Uchar   xfr;
X  short   cycle = 0;
X  int     stop = 8;
X
X  startx = 0;
X  starty = 0;
X      /* If want full screen paint, double number of boxes */
X  if (viewflg > 2)
X      stop = 16;
X      /* If the only important command line opt was -t, then make each whale's
X                 breed random.  Otherwise... */
X      /* ...did command line have -g opt, or... */
X  if (geneflg)
X    {
X      numwh = 8;
X      if (viewflg > 2)
X          numwh = 16;
X    }
X      /* ...did command line not have -i opt? */
X  if (!infileflg)
X    {
X      creonlyflg = 8;
X      if (viewflg > 2)
X          creonlyflg = 16;
X    }
X      /* Initialize all the whales... */
X  whaleinit();
X      /* ...but set up to only use them one at a time... */
X  orgwh = numwh;
X  numwh = 1;
X  whalelist = whale;
X  whale = (whale_type *) malloc(numwh * whale_size);
X  if (whale == NULL)
X    {
X      if (debug >= 2)
X          fprintf(stderr, "\nWhale malloc problems.\n");
X      exit(9);
X    }
X      /* ...and now use them */
X  do{
X      for (j = 0; j < stop; j++)  /* For each of the eight 'windows' */
X        {
X          if (j + cycle >= orgwh)
X              break;
X          whale = &whalelist[j + cycle];
X          if (!geneflg && !infileflg)  /* If no geneset or file invoked */
X            {
X              for (k = 0; k < 2; k++)  /* Fill gene types... */
X                {
X                  switch((int)randout() & 0x1F)
X                    {
X                      case  0:
X                      case  1:
X                      case  2:
X                      case  3:
X                      case  4:
X                      case  5:
X                          genes[k] = 'a';
X                          break;
X                      case  6:
X                      case  7:
X                      case  8:
X                      case  9:
X                      case 10:
X                      case 11:
X                      case 12:
X                          genes[k] = 'c';
X                          break;
X                      case 13:
X                      case 14:
X                      case 15:
X                      case 16:
X                      case 17:
X                      case 18:
X                      case 19:
X                          genes[k] = 'i';
X                          break;
X                      case 20:
X                      case 21:
X                      case 22:
X                      case 23:
X                      case 24:
X                      case 25:
X                          genes[k] = 'm';
X                          break;
X                      case 26:
X                      case 27:
X                      case 28:
X                      case 29:
X                      case 30:
X                      case 31:
X                          genes[k] = 'o';
X                          break;
X                      default:
X                          exit(30);
X                          break;
X                    }
X                }
X              whale[0].hunttype = genes[0];
X              whale[0].feedtype = genes[1];
X              for (k = 2; k < 4; k++)  /* ...and fill genes per chromosomes */
X                {
X                  switch((int)randout() & 0x1F)
X                    {
X                      case  0:
X                      case  1:
X                      case  2:
X                      case  3:
X                      case  4:
X                          genes[k] = '0';
X                          break;
X                      case  5:
X                      case  6:
X                      case  7:
X                      case  8:
X                      case  9:
X                          genes[k] = '1';
X                          break;
X                      case 10:
X                      case 11:
X                      case 12:
X                      case 13:
X                      case 14:
X                      case 15:
X                          genes[k] = '2';
X                          break;
X                      case 16:
X                      case 17:
X                      case 18:
X                      case 19:
X                      case 20:
X                          genes[k] = '4';
X                          break;
X                      case 21:
X                      case 22:
X                      case 23:
X                      case 24:
X                      case 25:
X                      case 26:
X                          genes[k] = '8';
X                          break;
X                      case 27:
X                      case 28:
X                      case 29:
X                      case 30:
X                      case 31:
X                          genes[k] = '@';
X                          break;
X                      default:
X                          exit(30);
X                          break;
X                    }
X                }
X              whale[0].hgperchr = genes[2];
X              whale[0].fgperchr = genes[3];
X            }
X              /* Paint on left half, or full screen... */
X          if (viewflg == 1 || viewflg == 3)
X            {
X              switch(j)
X                {
X                  case  0:
X                      startx = 0;
X                      starty = 0;
X                      break;
X                  case  1:
X                      startx = 0;
X                      starty = 225;
X                      break;
X                  case  2:
X                      startx = 0;
X                      starty = 450;
X                      break;
X                  case  3:
X                      startx = 0;
X                      starty = 675;
X                      break;
X                  case  4:
X                      startx = 288;
X                      starty = 0;
X                      break;
X                  case  5:
X                      startx = 288;
X                      starty = 225;
X                      break;
X                  case  6:
X                      startx = 288;
X                      starty = 450;
X                      break;
X                  case  7:
X                      startx = 288;
X                      starty = 675;
X                      break;
X                  case  8:
X                      startx = 576;
X                      starty = 0;
X                      break;
X                  case  9:
X                      startx = 576;
X                      starty = 225;
X                      break;
X                  case 10:
X                      startx = 576;
X                      starty = 450;
X                      break;
X                  case 11:
X                      startx = 576;
X                      starty = 675;
X                      break;
X                  case 12:
X                      startx = 864;
X                      starty = 0;
X                      break;
X                  case 13:
X                      startx = 864;
X                      starty = 225;
X                      break;
X                  case 14:
X                      startx = 864;
X                      starty = 450;
X                      break;
X                  case 15:
X                      startx = 864;
X                      starty = 675;
X                      break;
X                  default:
X                      break;
X                }
X            }
X          else if (viewflg == 2)  /* ...or the right half */
X            {
X              switch(j)
X                {
X                  case  0:
X                      startx = 576;
X                      starty = 0;
X                      break;
X                  case  1:
X                      startx = 576;
X                      starty = 225;
X                      break;
X                  case  2:
X                      startx = 576;
X                      starty = 450;
X                      break;
X                  case  3:
X                      startx = 576;
X                      starty = 675;
X                      break;
X                  case  4:
X                      startx = 864;
X                      starty = 0;
X                      break;
X                  case  5:
X                      startx = 864;
X                      starty = 225;
X                      break;
X                  case  6:
X                      startx = 864;
X                      starty = 450;
X                      break;
X                  case  7:
X                      startx = 864;
X                      starty = 675;
X                      break;
X                  default:
X                      break;
X                }
X            }
X              /* Copy the genesets (and breeds)... */
X          if (trakflg == 3)
X            {
X              for (k = 0; k < 16; k++)
X                  whale[0].feedgene[k] = whale[0].huntgene[k];
X              whale[0].fgperchr = whale[0].hgperchr;
X              whale[0].feedtype = whale[0].hunttype;
X            }
X          if (trakflg == 4)
X            {
X              for (k = 0; k < 16; k++)
X                  whale[0].huntgene[k] = whale[0].feedgene[k];
X              whale[0].hgperchr = whale[0].fgperchr;
X              whale[0].hunttype = whale[0].feedtype;
X            }
X              /* ...or else switch them */
X          if (trakflg == 2)
X            {
X              for (k = 0; k < 16; k++)
X                {
X                  tempgene[k] = whale[0].huntgene[k];
X                  whale[0].huntgene[k] = whale[0].feedgene[k];
X                  whale[0].feedgene[k] = tempgene[k];
X                }
X              xfr = whale[0].hgperchr;
X              whale[0].hgperchr = whale[0].fgperchr;
X              whale[0].fgperchr = xfr;
X              xfr = whale[0].hunttype;
X              whale[0].hunttype = whale[0].feedtype;
X              whale[0].feedtype = xfr;
X            }
X          for (k = 0; k < area; k++)  /* Fill Wa-Tor completely w/ plankton */
X              locarr[k] = '.';
X          if (!kldispflg)
X              printscreen();
X          if (debug >= 4)
X            {
X              fprintf(stdout, " Box %2d :    whale[j + cycle].hunttype = %c\n",
X                      j, whale[0].hunttype);
X              fprintf(stdout, "             whale[j + cycle].hgperchr = %c\n",
X                      whale[0].hgperchr);
X              fprintf(stdout, "             whale[j + cycle].feedtype = %c\n", 
X                      whale[0].feedtype);
X              fprintf(stdout, "             whale[j + cycle].fgperchr = %c\n", 
X                      whale[0].fgperchr);
X              if(trakflg == 2)
X                {
X                  for (k = 0; k < 16; k++)
X                      fprintf(stdout, " %2hd", whale[0].huntgene[k]);
X                  fprintf(stdout, "  <-- feed genes as hunt genes\n");
X                  for (k = 0; k < 16; k++)
X                      fprintf(stdout, " %2hd", whale[0].feedgene[k]);
X                  fprintf(stdout, "  <-- hunt genes as feed genes\n");
X                }
X              else if (trakflg == 3)
X                {
X                  for (k = 0; k < 16; k++)
X                      fprintf(stdout, " %2hd", whale[0].huntgene[k]);
X                  fprintf(stdout, "  <-- hunt gene set\n");
X                  for (k = 0; k < 16; k++)
X                      fprintf(stdout, " %2hd", whale[0].feedgene[k]);
X                  fprintf(stdout, "  <-- hunt gene set\n");
X                }
X              else if (trakflg == 4)
X                {
X                  for (k = 0; k < 16; k++)
X                      fprintf(stdout, " %2hd", whale[0].huntgene[k]);
X                  fprintf(stdout, "  <-- feed gene set\n");
X                  for (k = 0; k < 16; k++)
X                      fprintf(stdout, " %2hd", whale[0].feedgene[k]);
X                  fprintf(stdout, "  <-- feed gene set\n");
X                }
X              else
X                {
X                  for (k = 0; k < 16; k++)
X                      fprintf(stdout, " %2hd", whale[0].huntgene[k]);
X                  fprintf(stdout, "  <-- hunt gene set\n");
X                  for (k = 0; k < 16; k++)
X                      fprintf(stdout, " %2hd", whale[0].feedgene[k]);
X                  fprintf(stdout, "  <-- feed gene set\n");
X                }
X            }
X          movewhale();  /* Move the one whale */
X          if (!kldispflg)
X              printscreen();
X          plank = countplank();
X          plank = area - plank;
X          if (debug >= 4)
X            {
X              fprintf(stdout, "      Plankton consumed: %5d out of %5d\n",
X                      plank, area);
X              fprintf(stdout, "\n");
X            }
X        }
X      cycle += stop;
X    } while (cycle < orgwh);
X}
SHAR_EOF
if test 27590 -ne "`wc -c < 'whio.c3'`"
then
	echo shar: error transmitting "'whio.c3'" '(should have been 27590 characters)'
fi
fi # end of overwriting check
#	End of shell archive
exit 0
---

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                |
             Bob Loy            |     Life is the detour you take on the
    ...!sun!sunburn!gtx!loy     |     way to where you're really going.
                                |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~