#include <stdio.h>
#include <string.h>
#include <curses.h>
#define P *p
#define E (s?s-1?s-2?
#define T (s=fgetc(g))
#define _ m[n&
#define L R(
#define b ):L
#define G ):(
#define r =t&
#define F _++k+O]
#define W t--?t--?
#define Y _ k--+O]=
#define M W W W W W W W
#define J *E&D:&V:&I:&C)
#define q C|Z|I|D|B|V|S|32
#define H E Z:C:V:S)&&(d+=P&l?P-O:P)
#define U(z,w)(t=w,d+=z,_ t]+_ t+1]*O)
int d,C,Z,I,D,B,V,S,i=49152
,t,s,o,h,z,O=256,n=65535,l=128,f=255,e,w; unsigned char*p,m[65536],a,x,y,k,*u,
*j=" ./  p/ 7 ] . 6 6 p     t7      r(0)1*+2,4WgcovGn^f_NVO>F?T\\swldiHZYI9QJ"
"RCKSL[b<D8AP:;a@`BXq3j=- HZYI9QJRCKSL[b<D8AP:;a@`BX   57  ;  ;      ;   ;   "
"     ;                                                                      "
"                                )<   <% ><%  <% '<   <% +<   <% 7$  ($A @$A "
"($A &$   $A *$   $A C2   2; =2; 62; '2   2; +2   2; D#   #B ?#B 6#B &#   #B "
"*#   #B  F  HFG 1 L HFG 'F  HFG NFM  F  :89 :89 J8I :89 &8  :89 +8K :89 .,  "
".,/ 5,0 .,/ ',   ,/ +,   ,/ -E  -E3 4E  -E3 &E   E3 *E   E3 2133024425660788"
; R(x){ Z=x?0:2; S=x&l; } K(x){ R(x-P); C=x<P?0:1; } A(){ R(t=F); C r 1; Z r 2
; I r 4; D r 8; B r 16; V r 64; } X( ){ Y d/O; Y d; } N( ){ X( ); Y q; I=4; d=

                      U(0,n-1); } main(int c,char*v[])
                     { FILE*g ; _ z]=time(0); g=fopen(
                     c>1?v[1]:"", j+32); t=i; if(g) { ;
                    for(;                          T+1;
                    _ t++                          ]=s);
                   w r /* ### COMMODORE BASIC ###  */n ;
                   d=w?i:                          U(C, n
                  -3); /* READY.                   */z=c>
                  2?atoi(                          v[2])+1
                  :4; c=z                          ? n * z
                 / 4 : n;                          nodelay(
                 initscr(                          ), 1 ) ;
                 curs_set(I); cbreak(); noecho( ) ; for (; ;
                ) { o++ % ( c *4) ?h :( h= getch () ,h-ERR?(_
                      162]=h|l):0); if(!w){ s=(_ 59408]
           |=z?l:0)&15; _ 59410]=~(h-ERR?(s^8?0:j[h|l]&1)|(j[h]/8
          -5-s?0:1<<j[h]%8):0); } o%c|I||N(); p=m +O+O+ _ l-9]; t
          =d%65493; i=_ d++]; if(w+t<4){ if(P&&(u=strchr(++p,34)))
          { *u=0; _ l-9]=u-m+1; if(g=fopen(p,t?j+61:j+32)){ i=1025
         -t; if(!t){ T; for(T; T+1; _ i++]=s); for(p=m+42; p<m+47 ;
        ){ P++=i%O; P++=i/O; } } for(; t; fputc(_ i],g))t=_++i]?3:t
        -1; fclose(g); } } i=96; } t=j[i/2&14|i&1|O+O]&15; e=W W W W
       U(2,d)+(i-190?x:y):U(2,d)+y:f&_ d++]+(i-150&&i-182?x:y):U(1,_ d
      ])+y:U(2,d):_ d++]:d++:U(1,  _  d  ]  +  x  &  f  ):&a  -  m; p=e
     +m; s=i>>6; t=j[i+O]-35; M M  M  W  0  :  L  a  =  y G  k  =  x G L
    a=x)G L x  =  k  )  G L y=a)G   L  x  =  a  )  G  P  =y G P  =  x G P
   =a G t=a-P-1+C,C r O?0:1,V=((a^  P   )  &  (  a  ^  t )&l)/2   ,  L a r
  f)G d=F,d+=F*O+1 G A(),d=F,d|=F*O G t=P,L P=P/2|C*l),C r 1 G t=P,L P=P*2|
 C),C=t/l):A(b a=F G Y q G Y a G L a|=P)G C=P&1,L P/=2)G L y=P)b x=P b a=P G
 s=U(1,--d),X(),d=s G d=i&32?U(0,e):e b++y b++x b++P b a^=P b--y b--x b--P):
      K(y):K(x):K(a G J=0 G J=E 8:8:4:1)G d--,B=16,N() G L a&P),V=P&64
      ,S=P&l):!H:H:(C=P/l,L P*=2)b a&=P G t=a+P+C,C r O?1:0,V=(~(a^P)&

(a^t)&l)/2,L a r f)); t=e^O*O/2; if(t<1000){ s=P%l; i=A_REVERSE; P>s?attron(i)
:attroff(i); mvaddch(t/40,t%40,s+w<32?s+64:s>95+w?s-32:s); } } } perror(*v); }

