home *** CD-ROM | disk | FTP | other *** search
- #define PLOT 006 /* ack */
- #define BEL 007 /* exit plot mode */
- #define ESC 033 /* escape */
- #define HFWD '9'
- #define HREV '8'
- #define FREV '7'
- #define SO 016 /* shift out - enter greek */
- #define SI 017 /* shift in */
- #define UP 013
- #define DN 012
- #define RT ' '
- #define LF '\b'
-
- int restore();
- int svmode, mode[3];
-
- main(argc,argv) int argc; char **argv; {
- int c, textmode;
- extern int fin,fout;
- fin = dup(0);
- fout = dup(1);
- if ((signal(2, 1) & 01) == 0)
- signal(2, &restore);
- gtty(1, mode);
- svmode = mode[2];
- mode[2] =& 0777757; /* turn off cr-lf */
- mode[2] =| 03; /* turn off delays, tabs */
- stty(1, mode);
- textmode = 1;
- while( (c=getchar()) != '\0' ){
- if( c==SO ){
- special();
- continue;
- }
- if (c== PLOT) textmode = 1-textmode;
- if (c==BEL) textmode = 1;
- if( c=='\n' && textmode )
- putchar(015); /* CR */
- if( c!=ESC ){
- putchar(c);
- continue;
- }
- putchar(PLOT);
- c = getchar();
- if( c == HREV )
- nplot(4,UP);
- else if( c == HFWD )
- nplot(4,DN);
- else if( c == FREV )
- nplot(8,UP);
- putchar(PLOT);
- }
- flush();
- restore();
- }
-
- restore(){
- mode[2] = svmode;
- stty(1, mode);
- exit();
- }
-
- int tab[]{
- 'A', /* alpha */
- 'B', /* beta */
- 'D', /* delta */
- 'W', /* DELTA */
- 'S', /* epsilon */
- 'N', /* eta */
- '\\', /* gamma */
- 'G', /* GAMMA */
- 'o', /* infinity - not in M37 */
- '^', /* integral */
- 'L', /* lambda */
- 'E', /* LAMBDA */
- 'M', /* mu */
- '[', /* nabla (del) */
- '_', /* not */
- '@', /* nu */
- 'C', /* omega */
- 'Z', /* OMEGA */
- ']', /* partial */
- 'U', /* phi */
- 'F', /* PHI */
- 'V', /* psi */
- 'H', /* PSI */
- 'J', /* pi */
- 'P', /* PI */
- 'K', /* rho */
- 'Y', /* sigma */
- 'R', /* SIGMA */
- 'I', /* tau */
- 'T', /* theta */
- 'O', /* THETA */
- 'X', /* xi */
- 'Q', /* zeta */
- 0
- };
- int trans[]{
- alpha,
- beta,
- delta,
- DELTA,
- epsilon,
- eta,
- gamma,
- GAMMA,
- infinity,
- integral,
- lambda,
- LAMBDA,
- mu,
- nabla,
- not,
- nu,
- omega,
- OMEGA,
- partial,
- phi,
- PHI,
- psi,
- PSI,
- pi,
- PI,
- rho,
- sigma,
- SIGMA,
- tau,
- theta,
- THETA,
- xi,
- zeta,
- 0
- };
-
- int alpha[] {LF,'c',RT,RT,'(',LF,0};
- int beta[] {'B',LF,LF,DN,DN,'|',RT,RT,UP,UP,0};
- int delta[] {'o',UP,UP,'<',DN,DN,0};
- int DELTA[] {LF,LF,'/',-3,DN,'-',-4,RT,'-',-3,UP,'\\',LF,LF,0};
- int epsilon[] {'<','-',0};
- int eta[] {'n',RT,RT,DN,DN,'|',LF,LF,UP,UP,0};
- int gamma[] {')',RT,'/',LF,0};
- int GAMMA[] {LF,LF,'|',RT,RT,-3,UP,'-',-3,DN,RT,RT,'`',LF,LF,0};
- int infinity[] {LF,LF,'c',-4,RT,'o',LF,LF,0};
- int integral[] {'|','\'',RT,RT,'`',-3,LF,-6,DN,'\'',LF,'`',RT,RT,-6,UP,0};
- int lambda[] {'\\',-4,DN,LF,'\'',DN,LF,'\'',-5,UP,RT,RT,0};
- int LAMBDA[] {LF,LF,'/',-4,RT,'\\',LF,LF,0};
- int mu[] {'u',LF,LF,',',RT,RT,0};
- int nabla[] {LF,LF,'\\',-3,UP,'-',-4,RT,'-',-3,DN,'/',LF,LF,0};
- int not[] {'-',-2,RT,UP,',',DN,-2,LF,0};
- int nu[] {LF,'(',-3,RT,'/',LF,LF,0};
- int omega[] {LF,'u',-3,RT,'u',LF,LF,0};
- int OMEGA[] {'O',DN,DN,LF,'-',RT,RT,'-',LF,UP,UP,0};
- int partial[] {'o',RT,DN,'`',LF,UP,'`',LF,UP,'`',RT,DN,0};
- int phi[] {'o','/',0};
- int PHI[] {'o','[',']',0};
- int psi[] {'/','-',DN,DN,RT,RT,'\'',-4,LF,'\'',RT,RT,UP,UP,0};
- int PSI[] {'[',']','-',DN,DN,RT,RT,'\'',-4,LF,'`',RT,RT,UP,UP,0};
- int pi[] {UP,'-',-3,DN,'"',DN,'"',-3,UP,0};
- int PI[] {LF,LF,'[',']',-4,RT,'[',']',LF,LF,-3,UP,'-',-3,DN,0};
- int rho[] {'o',LF,LF,DN,DN,'|',UP,UP,RT,RT,0};
- int sigma[] {'o',DN,RT,RT,'~',UP,LF,LF,0};
- int SIGMA[] {'>',-2,DN,'-',-5,UP,'-',-3,DN,0};
- int tau[] {'t',DN,RT,RT,'~',LF,LF,LF,'~',RT,UP,0};
- int theta[] {'O','-',0};
- int THETA[] {'O','=',0};
- int xi[] {'c',RT,DN,',',LF,-3,UP,'c',LF,DN,'`',RT,DN,0};
- int zeta[] {'c',RT,DN,',',LF,-3,UP,'<',DN,DN,0};
-
- special(){
- int c,i,j,t;
- loop:
- if( (c=getchar()) == SI )
- return;
- for( i=0; tab[i]!=0; i++)
- if( c==tab[i] ){
- plot(trans[i]);
- goto loop;
- }
- putchar(c);
- goto loop;
- }
-
- plot(s) int *s; {
- int i,c;
- putchar(PLOT);
- for( i=0; (c=s[i])!=0; i++ )
- if( c<0 )
- nplot(-c,s[++i]);
- else
- putchar(c);
- putchar(PLOT);
- putchar(' ');
- }
-
- nplot(n,c) int n,c; {
- while(n--)
- putchar(c);
- }
-