/* SCSUB.C   03-13-92 */
/* see also PLOTSUB.C */
int  esc,key,hres,vres,t3,xoff,yoff;
int  xinc,yinc,e,oldcnt,cnt,x,y,func;
int  mincnt,maxcnt,i,mode,px,py,pc;
char za[6],zb[6],f0[6],temp[6];
char ttime[6],*ti1,*ti2;
char t1[6],t2[6],tcnt[6];

esttime(lores,juliaflg,limit,ca,cb,gapx,gapy,acor,bcor)

int  lores,juliaflg,limit;
char ca[6],cb[6],gapx[6],gapy[6];
char acor[6],bcor[6];

$(
 printf("↰ 1  Estimate plot time");
 printf("\n 2  ");
 if(lores) printf("40 by 48");
 else printf("80 by 48");
 printf(" preview plot");
 printf("\n\nAny Key to Plot");
 mode=0;key=getkey();
 if(key=='1')mode=1;
 if(key=='2')mode=2;
 if(mode) $(
  poke(82,8);
  itof(0,f0);vres=192;hres=320;
  if(lores) hres=160;
  itof(0,t1);itof(0,t2);
  mincnt=limit;maxcnt=0;
  cnt=0;itof(0,tcnt);
  yoff=73;xoff=121;if(lores)xoff=61;
  if(mode==1) $(
   yinc=24;y=12;
   xinc=40;if(lores)xinc=20;
  $) else $(
   yinc=4;y=4;xinc=4;
  $)
  poke(752,1);printf("↰↓");
  py=0;esc=1;
  for(;y<vres&&esc;y+=yinc) $(
   itof(y,temp);fmul(temp,gapy,zb);
   fadd(zb,bcor,zb);
   if(mode==1) $(
    x=20;if(lores) x=10;
   $) else x=4;
   px=0;for(;x<hres&&esc;x+=xinc) $(
    ti1=dpeek(19);
    itof(x,temp);
    fmul(temp,gapx,za);
    fadd(za,acor,za);
    if(juliaflg)
     cnt=iterfix(ca,cb,limit,za,zb);
    else
     cnt=iterfix(za,zb,limit,f0,f0);
    pc=transfrm(cnt);
    i=0;for(;i<30;i++);
    ti2=dpeek(19);
    e=ti1>>8;ti1&=255;
    ti1=ti1<<8;ti1|=e;
    e=ti2>>8;ti2&=255;
    ti2=ti2<<8;ti2|=e;
    t3=ti2-ti1;t3&=1023;
    itof(t3,temp);
    if(cnt==limit)fadd(t2,temp,t2);
    else fadd(t1,temp,t1);
    itof(cnt,temp);
    fadd(tcnt,temp,tcnt);
    if(cnt<mincnt) mincnt=cnt;
    if(cnt>maxcnt) maxcnt=cnt;
    printf("X=%-4d Y=%-4d\n",x,y);
    printf("I=%-4d T=%-4d\n",cnt,t3);
    printf("↑↑");
    if(mode==2) $(
     if(lores==0) $(
      if(px==0)pc=transfrm(cnt);
      if(cnt==limit)pc=(px+py)&1;
     $)
     pplot(px+xoff,py+yoff,pc);
    $)
    poke(77,0);
    key=peek(764);poke(764,255);
    if(key==28)esc=0;else esc=1;
    px++;
   $) py++;
  $)
  poke(82,2);
  if(esc) $(
   move(t2,ttime,6);itof(2,temp);
   fdiv(ttime,temp,ttime);
   move(t1,temp,6);
   fadd(ttime,temp,ttime);
   if(mode==1) $(
    if(lores)atof(temp,"7.5");
    else atof(temp,"3.75");
   $) else atof(temp,"225");
   fdiv(ttime,temp,ttime);
   t3=ftoi(ttime); /* in minutes 
   ti1=t3/60;ti2=t3;ti2-=ti1*60;
   if(mode==1)itof(64,temp);
   else $(
    if(lores)itof(1920,temp);
    else itof(3840,temp);
   $)
   fdiv(tcnt,temp,tcnt);
   printf("\fIteration count range...\n");
   cnt=ftoi(tcnt);
   printf("Min:%-4d Max:%-4d Avg:%-4d\n",mincnt,maxcnt,cnt);
   printf("Estimated time %d:",ti1);
   if(ti2<10) printf("0");
   printf("%d (hrs:min)",ti2);
   printf("\nPlot Image (Y/N)");
   key=toupper(getchar());
   if(key=='Y')mode=0;
  $)
 $)
 poke(764,255);
 return(mode);
$)

ptitle() $(
 printf("=== FRACTAL MICROSCOPE ===\n");
 printf("Programmed by Terry Newton\n");
 i=0;while(i<2000) $(
  i++;if(peek(764)<255)i=2000;
 $)poke(764,255);
$)
quitdos() $(
 poke(82,2);
 printf("↰↓Press RETURN for DOS\n");
 i=getkey();if(i==155) $(
  dpoke(0x7FFE,43605);
  dpoke(0x6EFE,43605);
  poke(752,0);printf("↰");exit();
 $)
$)
pnewplot() $(
 printf("↰↓New Plot\n");
 printf("Are you sure? (Y/N)");
$)
pplotima() $(
 printf("↰↓While plotting  ESC  Fast");
 i=0;while(i<2000) $(
  i++;if(peek(764)<255)i=1000;
 $)poke(764,255);
$)
pnewjul() $(
 printf("↰↓Julia Plot\n");
 printf("Are you sure? (Y/N)");
$)
/* main menu screen */
pmenu(lores,juliaflg,drvnum)
int lores,juliaflg,drvnum;
$(
 poke(82,0);
 printf("↰FRACTAL MICROSCOPE  ");
 if(lores)printf("(LR ");
 else printf("(HR ");
 if(juliaflg==0)printf("Mandelbrot)");
 else printf("Julia)");
 printf("\n N  New    P  Plot   D  Data   V  View");
 printf("\n S  Save   L  Load   F  Files 1-8 D%d:",drvnum);
 printf("\n C  Color  X  Exit   M  Magnify");
 poke(764,255);
 while(peek(764)==255)poke(77,0);
 key=toupper(getkey());
 if(key=='N')func=1;
 if(key=='P')func=2;
 if(key=='S')func=3;
 if(key=='L')func=4;
 if(key=='M')func=5;
 if(key=='V')func=6;
 if(key=='C')func=7;
 if(key=='D')func=8;
 if(key=='X')func=9;
 if(key=='F')func=10;
 if(key>'0'&&key<'9') $(
  drvnum=key-48;func=drvnum+20;
 $)
 poke(82,2);return(func);
$)