/*                             */
/* The Hodgepodge Machine V1.0 */
/* By William T Newton 4/25/89 */
/*                             */
/* Last Mod 2-12-92 */
int  key,ns,k1,k2,g,esc,func;
int  grmode,gen1,gen2,gen3;
char gencnt[6],inpstr[20];
char f1[6],f2[6];
main() $(
/* set Sparta RUNLOC */
 if(peek(dpeek(10)+28)==128||
    peek(0x0700)==0x53)
  dpoke(dpeek(10)+61,0x3635);
 title();
 grmode=7; graphics(grmode);
 ns=50; k1=1; k2=1; g=12;
 poke(0x900A,0);
 poke(0x900B,0);
 poke(0x900C,0);
 while(1) $(
  menu();
  if(func==1) hpstart();
  if(func==2) hpcont();
 $)
$)
/* main menu */
menu() $(
 esc=0;
 while(esc==0) $(
  poke(764,255);
  graphics(grmode+32);
  poke(752,1);
  printf("\f*** The Hodgepodge Machine ***\n");
  printf("N)NS=%-3d 1)K1=%-3d 2)K2=%-3d G)G=%-3d\n",ns,k1,k2,g);
  gen1=peek(0x900A);
  gen2=peek(0x900B);
  gen3=peek(0x900C);
  itof(gen1,gencnt);
  itof(gen2,f1);
  atof(f2,"256");
  fmul(f1,f2,f1);
  fadd(f1,gencnt,gencnt);
  itof(gen3,f1);
  atof(f2,"65536");
  fmul(f1,f2,f1);
  fadd(f1,gencnt,gencnt);
  printf("S)Start  C)Cont   Cycle #%f\b\b\b\n",gencnt);
  func=0;
  while(func==0) $(
   key=toupper(getkey());
   if(key=='N') func=3;
   if(key=='1') func=4;
   if(key=='2') func=5;
   if(key=='G') func=6;
   if(key=='S') func=1;
   if(key=='C') func=2;
  $)
  if(func==1 || func==2) $(
   graphics(grmode+48);
   poke(0x9006,ns);
   poke(0x9007,k1);
   poke(0x9008,k2);
   poke(0x9009,g);
   esc=1;
  $) else $(
   poke(752,0);
   if(func==3) printf("NS :");
   if(func==4) printf("K1 :");
   if(func==5) printf("K2 :");
   if(func==6) printf("G  :");
   gets(inpstr);
   if(strlen(inpstr)>0) $(
    if(func==3) ns=val(inpstr);
    if(func==4) k1=val(inpstr);
    if(func==5) k2=val(inpstr);
    if(func==6) g=val(inpstr);
   $)
  $)
 $)
$)
/* ML routines */
hpstart() asm 0x9000;
hpcont()  asm 0x9003;
/* Title Screen */
title() $(
 graphics(0);
 poke(709,12); poke(710,0);
 poke(711,0);  poke(752,1);
 printf("\n*** THE HODGEPODGE MACHINE ***\n\n");
 printf("Also known as the Gerhardt/Schuster\n");
 printf("Cellular Automaton described in the\n");
 printf("August 1988 Scientific American.\n\n");
 printf("This automaton was designed to model\n");
 printf("the Belousov-Zhabotinsky chemical\n");
 printf("reaction (really).\n\n");
 printf("Menu functions...\n");
 printf("[S] - Start with random pattern\n");
 printf("[C] - Continue current pattern\n");
 printf("[N] - Change # of cell states\n");
 printf("[1] - Change constant one (infect)\n");
 printf("[2] - Change constant two (ill)\n");
 printf("[G] - Change rate of infect\n\n");
 printf("During graphics press [ESC] for menu.\n");
 getkey();
$)