Bell 32V development
authorTom London <tbl@research.uucp>
Tue, 7 Nov 1978 04:38:37 +0000 (23:38 -0500)
committerTom London <tbl@research.uucp>
Tue, 7 Nov 1978 04:38:37 +0000 (23:38 -0500)
Work on file usr/src/cmd/pcat.c

Co-Authored-By: John Reiser <jfr@research.uucp>
Synthesized-from: 32v

usr/src/cmd/pcat.c [new file with mode: 0644]

diff --git a/usr/src/cmd/pcat.c b/usr/src/cmd/pcat.c
new file mode 100644 (file)
index 0000000..a6566c2
--- /dev/null
@@ -0,0 +1,924 @@
+#include <signal.h>
+#define X 0
+/*
+C version of tcatsim
+*/
+
+#define OBSZ 512
+#define MAXY 3071
+#define US 037
+#define GS 035
+#define ESC 033
+#define FF 014
+#define SO 016
+#define SI 017
+#define DBL 0200
+
+int pl = 11*144;
+int mpy = 1;
+int div = 1;
+char *ap;
+int ch;
+int nonumb;
+int psize = 10;
+int dfact = 1;
+int ibuf[259];
+char obuf[OBSZ];
+char *obufp = obuf;
+int esc;
+int escd;
+int verd;
+int esct;
+int osize = 02;
+int size = 02;
+int rx;
+int xx = 0;
+int yy = MAXY+62+48;
+int leadtot = -31;
+int ohy = -1;
+int ohx = -1;
+int oxb = -1;
+int oly = -1;
+int olx = -1;
+int tflag;
+int railmag;
+int lead;
+int skip;
+int pgskip;
+int ksize = ';';
+int mcase;
+int stab[] = {010,0,01,07,02,03,04,05,0211,06,0212,0213,0214,0215,0216,0217};
+int rtab[] = {6, 7, 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 28, 26, 18};
+int ktab[] = {';',';',';',';',';',';',':',':','9','9','9','9','8','8','8','9'};
+int od = 1;
+int first = 1;
+int alpha;
+int xxx;
+extern int *drawtab[], *moretab[];
+
+main(argc,argv)
+int argc;
+char **argv;
+{
+       register i, j;
+       extern ex();
+       extern char asctab[];
+       extern char spectab[];
+
+       openpl();
+       space(0,0,4095,3071);
+       while((--argc > 0) && ((++argv)[0][0]=='-')){
+               switch(argv[0][1]){
+                       case 'p':
+                               ap = &argv[0][2];
+                               dfact = 72;
+                               if(i = atoi())pl = i/3;
+                               continue;
+                       case 't':
+                               tflag++;
+                               continue;
+                       case 's':
+                               ap = &argv[0][2];
+                               dfact = 1;
+                               pgskip = atoi();
+                               continue;
+                       default:
+                               dfact = 1;
+                               ap = &argv[0][1];
+                               if(i = atoi())mpy = i;
+                               if(i = atoi())div = i;
+                               continue;
+               }
+       }
+       if(argc){
+               if(fopen(argv[0], ibuf) < 0){
+                       prstr("Cannot open: ");
+                       prstr(argv[0]);
+                       prstr("\n");
+                       exit(1);
+               }
+       }
+       signal(SIGINT, ex);
+       while((i = getc(ibuf)) >= 0){
+               if(!i)continue;
+               if(i & 0200){
+                       esc += (~i) & 0177;
+                       continue;
+               }
+               if(esc){
+                       if(escd)esc = -esc;
+                       esct += esc;
+                       xx += (esc*mpy + rx)/div;
+                       rx = (esc*mpy + rx)%div;
+                       sendpt();
+                       esc = 0;
+               }
+               switch(i){
+                       case 0100:      /*init*/
+                               escd = verd = mcase = railmag = xx = 0;
+                               yy = MAXY + 48;
+                                       if(first){
+                                               first = 0;
+                                               yy += 62;
+                                       }
+                               leadtot = -31;
+                               ohy = oxb = oly = ohx = olx = -1;
+                               init();
+                               continue;
+                       case 0101:      /*lower rail*/
+                               railmag &= ~01;
+                               continue;
+                       case 0102:      /*upper rail*/
+                               railmag |= 01;
+                               continue;
+                       case 0103:      /*upper mag*/
+                               railmag |= 02;
+                               continue;
+                       case 0104:      /*lower mag*/
+                               railmag &= ~02;
+                               continue;
+                       case 0105:      /*lower case*/
+                               mcase = 0;
+                               continue;
+                       case 0106:      /*upper case*/
+                               mcase = 0100;
+                               continue;
+                       case 0107:      /*escape forward*/
+                               escd = 0;
+                               continue;
+                       case 0110:      /*escape backward*/
+                               escd = 1;
+                               continue;
+                       case 0111:      /*stop*/
+                               continue;
+                       case 0112:      /*lead forward*/
+                               verd = 0;
+                               continue;
+                       case 0113:      /*undefined*/
+                               continue;
+                       case 0114:      /*lead backward*/
+                               verd = 1;
+                               continue;
+                       case 0115:      /*undefined*/
+                       case 0116:
+                       case 0117:
+                               continue;
+               }
+               if((i & 0340) == 0140){ /*leading*/
+                       lead = (~i) & 037;
+                       if(verd)lead = -lead;
+                       if((leadtot += lead) > pl){
+                               leadtot = lead;
+                               flusho();
+                               if(!tflag)kwait();
+                               yy = MAXY;
+                               if(pgskip)--pgskip;
+                               init();
+                               continue;
+                       }
+                       if(skip)continue;
+                       if((yy -= (lead<<1)) < 0){
+                               skip++;
+                               yy = 0;
+                       }else sendpt();
+                       continue;
+               }
+               if((i & 0360) == 0120){ /*size change*/
+                       i &= 017;
+                       for(j = 0; i != (stab[j] & 017); j++);
+                       osize = size;
+                       size = stab[j];
+                       psize = rtab[j];
+                       ksize = ktab[j];
+                       i = 0;
+                       if(!(osize & DBL) && (size & DBL))i = -55;
+                       else if((osize & DBL) && !(size & DBL))i = 55;
+                       if(escd)i = -i;
+                       esc += i;
+                       continue;
+               }
+               if(i & 0300)continue;
+               i = (i & 077) | mcase;
+               if(railmag != 03)j = asctab[i];
+               else j = spectab[i];
+               if(alpha)sendpt();
+               if (j== 0) { /* see if we can draw this character */
+                       trace( railmag == 03 ? drawtab[i] : moretab[i]);
+                       continue;
+               }else if(j){
+                       oput(j);
+                       alpha++;
+               }
+       }
+       ex();
+}
+
+# define SCL(x) (psize*x/10)
+# define PT(x,y) xx-10+SCL(x), yy-20+SCL(y)
+trace (p)
+       int *p;
+{
+if (p==0) return;
+while (*p)
+       {
+       switch (*p)
+               {
+               case 'l':
+/*
+                       line(xx-10+SCL(p[1]),yy-20+SCL(p[2]),xx-10+SCL(p[3]),yy-20+SCL(p[4]));
+ */ line(PT(p[1], p[2]), PT(p[3], p[4]));
+                       p+=5;
+                       break;
+               case 't':
+                       move (xx+p[2], yy+p[3]);
+                       label(p+1);
+                       p+=4;
+                       break;
+               case 'c':
+                       circle(PT(p[1],p[2]), SCL(p[3]));
+                       p+=4;
+                       break;
+               case 'a':
+                       arc (PT(p[1],p[2]), PT(p[3],p[4]), PT(p[5],p[6]));
+                       p+=7;
+                       break;
+               }
+       }
+}
+
+init(){
+       register i;
+
+       erase();
+       flusho();
+       skip = 0;
+       sendpt();
+}
+ex(){
+       yy = MAXY;
+       xx = 0;
+       sendpt();
+       closepl();
+       exit(0);
+}
+kwait(){
+       ;
+}
+oput(i)
+char i;
+{
+       if(pgskip)return;
+       label(&i);
+}
+flusho(){
+       ;
+}
+sendpt(){
+       move(xx,yy);
+       alpha = 0;
+       return;
+}
+prstr(s)
+char *s;
+{
+       register i;
+
+       for(i=0;*s;i++)s++;
+       write(2,s-i,i);
+}
+atoi()
+{
+       register i, j, acc;
+       int field, digits, *dd, *tscale();
+
+       field = digits = acc = 0;
+a1:
+       while(((j = (i = getch()) - '0') >= 0) && (j <= 9)){
+               field++;
+               digits++;
+               acc = 10*acc + j;
+       }
+       if(i == '.'){
+               field++;
+               digits = 0;
+               goto a1;
+       }
+       if(!(ch = i))ch = 'x';
+       dd = tscale(acc);
+       acc = dd[0];
+       if((field != digits) && (digits > 0)){
+               j = 1;
+               while(digits--)j *= 10;
+               acc = ldiv(dd[1],dd[0],j);
+       }
+       nonumb = !field;
+       ch = 0;
+       return(acc);
+}
+int *tscale(n)
+int n;
+{
+       register i, j;
+       static int aa[2];
+
+       switch(i = getch()){
+               case 'u':
+                       j = 1;
+                       break;
+               case 'p':       /*Points*/
+                       j = 6;
+                       break;
+               case 'i':       /*Inches*/
+                       j = 432;
+                       break;
+               case 'c':       /*Centimeters; should be 170.0787*/
+                       j = 170;
+                       break;
+               case 'P':       /*Picas*/
+                       j = 72;
+                       break;
+               default:
+                       j = dfact;
+                       ch = i;
+       }
+       aa[0] = n * j;
+       aa[1] = hmul(n,j);
+       return(aa);
+}
+getch(){
+       register i;
+
+       if(ch){
+               i = ch;
+               ch = 0;
+               return(i);
+       }
+       return(*ap++);
+}
+/* the way this program decides what to do is:
+  (1) If the character is on a standard font (0-2)
+   
+       (a) look in "asctab"; if an entry, print that character.
+          else
+       (b) look in "moretab"; if an entry, it points to a vector
+           description, which draw.
+  (2) If the character is on the special font (railmag=3)
+       (a) look in "spectab"; if an entry >0,
+           print that character.
+       (b) if a -1, that requests the apl font; not used.
+       (c) if zero, look in "drawtab"; if an entry, it pooints
+           to a vector description, which draw.
+   (3) Vector descriptions are calls to the "plot" type routines.
+       the possible routines are 'c' (circle), 'l' (line), 't' (label,
+       only one character used), and 'a' (arc).
+ */
+char asctab[128] = {
+  0,   /*blank*/
+'h',   /*h*/
+'t',   /*t*/
+'n',   /*n*/
+'m',   /*m*/
+'l',   /*l*/
+'i',   /*i*/
+'z',   /*z*/
+'s',   /*s*/
+'d',   /*d*/
+'b',   /*b*/
+'x',   /*x*/
+'f',   /*f*/
+'j',   /*j*/
+'u',   /*u*/
+'k',   /*k*/
+  0,   /*blank*/
+'p',   /*p*/
+'-',   /*_ 3/4 em dash*/
+';',   /*;*/
+  0,   /*blank*/
+'a',   /*a*/
+'_',   /*rule*/
+'c',   /*c*/
+'`',   /*` open*/
+'e',   /*e*/
+'\'',  /*' close*/
+'o',   /*o*/
+  0,   /*1/4*/
+'r',   /*r*/
+  0,   /*1/2*/
+'v',   /*v*/
+'-',   /*- hyphen*/
+'w',   /*w*/
+'q',   /*q*/
+'/',   /*/*/
+'.',   /*.*/
+'g',   /*g*/
+  0,   /*3/4*/
+',',   /*,*/
+'&',   /*&*/
+'y',   /*y*/
+  0,   /*blank*/
+'%',   /*%*/
+  0,   /*blank*/
+'Q',   /*Q*/
+'T',   /*T*/
+'O',   /*O*/
+'H',   /*H*/
+'N',   /*N*/
+'M',   /*M*/
+'L',   /*L*/
+'R',   /*R*/
+'G',   /*G*/
+'I',   /*I*/
+'P',   /*P*/
+'C',   /*C*/
+'V',   /*V*/
+'E',   /*E*/
+'Z',   /*Z*/
+'D',   /*D*/
+'B',   /*B*/
+'S',   /*S*/
+'Y',   /*Y*/
+  0,   /*blank*/
+'F',   /*F*/
+'X',   /*X*/
+'A',   /*A*/
+'W',   /*W*/
+'J',   /*J*/
+'U',   /*U*/
+'K',   /*K*/
+'0',   /*0*/
+'1',   /*1*/
+'2',   /*2*/
+'3',   /*3*/
+'4',   /*4*/
+'5',   /*5*/
+'6',   /*6*/
+'7',   /*7*/
+'8',   /*8*/
+'9',   /*9*/
+'*',   /***/
+'-',   /*minus*/
+   0,  /*fi*/
+  0,   /*fl*/
+  0,   /*ff*/
+  0,   /*cent mark*/
+  0,   /*ffl*/
+  0,   /* ffi */
+'(',   /*(*/
+')',   /*)*/
+'[',   /*[*/
+']',   /*]*/
+  0,   /*degree*/
+  0,   /*dagger*/
+'=',   /*=*/
+  0,   /*registered*/
+':',   /*:*/
+'+',   /*+*/
+  0,   /*blank*/
+'!',   /*!*/
+  0,   /*bullet*/
+'?',   /*?*/
+'\'',  /*foot mark*/
+'|',   /*|*/
+  0,   /*blank*/
+  0,   /*copyright*/
+  0,   /*square*/
+'$' }; /*$*/
+
+char spectab[128] = {
+  0,   /*blank*/
+  0,   /*psi*/
+  0,   /*theta*/
+  0,   /*nu*/
+  0,   /*mu*/
+  0,   /*lambda*/
+  0,   /*iota*/
+  0,   /*zeta*/
+  0,   /*sigma*/
+  0,   /*delta*/
+  0,   /*beta*/
+  0,   /*xi*/
+  0,   /*eta*/
+  0,   /*phi*/
+  'u', /*upsilon*/
+  0,   /*kappa*/
+  0,   /*blank*/
+  0,   /*pi*/
+  '@', /*at sign @*/
+  0,   /*down arrow*/
+  0,   /*blank*/
+  0,   /*alpha*/
+'|',   /*or*/
+  0,   /*chi*/
+'"',   /*"*/
+  0,   /*epsilon*/
+  '=', /*equals*/
+  'o', /*omicron*/
+  0,   /*left arrow*/
+  0,   /*rho*/
+  0,   /*up arrow*/
+  0,   /*tau*/
+'_',   /*underrule*/
+'\\',  /*\*/
+  0,   /*Psi*/
+  0,   /*bell system sign*/
+  0,   /*infinity*/
+  0,   /*gamma*/
+  0,   /*improper superset*/
+  0,   /*proportional to*/
+  0,   /*right hand*/
+  0,   /*omega*/
+  0,   /*blank*/
+  0,   /*gradient*/
+  0,   /*blank*/
+  0,   /*Phi*/
+  0,   /*Theta*/
+  0,   /*Omega*/
+  0,   /*cup (union)*/
+  0,   /*root en*/
+  0,   /*terminal sigma*/
+  0,   /*Lambda*/
+  '-', /*some horizontal line*/
+  0,   /*Gamma*/
+  0,   /*integral sign*/
+  0,   /*Pi*/
+  0,   /*subset of*/
+  0,   /*superset of*/
+  0,   /*approximates*/
+  0,   /*partial derivative*/
+  0,   /*Delta*/
+  0,   /*square root*/
+  0,   /*Sigma*/
+  0,   /*approx =*/
+  0,   /*blank*/
+'>',   /*>*/
+  0,   /*Xi*/
+'<',   /*<*/
+'/',   /*slash (longer)*/
+  0,   /*cap (intersection)*/
+  'Y', /*Upsilon*/
+  0,   /*not*/
+'|',   /*right ceiling (rt of ")*/
+'|',   /*left top (of big curly)*/
+'|',   /*bold vertical*/
+'|',   /*left center of big curly bracket*/
+'|',   /*left bottom*/
+'|',   /*right top*/
+'|',   /*right center of big curly bracket*/
+'|',   /*right bot*/
+'|',   /*right floor (rb of ")*/
+'|',   /*left floor (left bot of big sq bract)*/
+'|',   /*left ceiling (lt of ")*/
+'x',   /*multiply*/
+  0,   /*divide*/
+  0,   /*plus-minus*/
+  0,   /*<=*/
+  0,   /*>=*/
+  0,   /*identically equal*/
+  0,   /*not equal*/
+'{',   /*{*/
+'}',   /*}*/
+'\'',  /*' acute accent*/
+'`',   /*` grave accent*/
+'^',   /*^*/
+  '#', /*sharp*/
+  0,   /*left hand*/
+  0,   /*member of*/
+'~',   /*~*/
+  0,   /*empty set*/
+  0,   /*blank*/
+  0,   /*dbl dagger*/
+'|',   /*box rule*/
+  '*', /*telephone asterisk?*/
+  0,   /*improper subset*/
+  0,   /*circle*/
+  0,   /*blank*/
+  '+', /*eqn plus sign*/
+  0,   /*right arrow*/
+  0 }; /*section mark*/
+# define STOP 0
+int dnot[] = { 'l', 0, 15, 25, 15, 'l', 25, 15, 25, 5, STOP};
+int dlambda[] = {'l', 0, 40, 6, 40, 'l', 6, 40, 30, 0, 'l', 6, 0, 18, 20, STOP};
+int dSigma[] = {'l', 0, 0, 30, 0, 'l', 0, 40, 30, 40, 'l', 0, 0, 10, 20, 'l', 10, 20, 0, 40, STOP};
+int dsquare[] = {'l', 0, 0, 30, 0, 'l', 0, 0, 0, 30, 'l', 0, 30, 30, 30, 'l', 30, 0, 30, 30, STOP};
+int dDelta[] = {'l', 0,0, 30, 0, 'l', 0, 0, 15, 40, 'l', 15,40, 30, 0, STOP};
+int dintsign[] = { 'a', 25,30, 30,32, 20,32, 'l', 20, 32, 10, 8, 'a',5, 10, 0, 8, 10, 8, STOP};
+int dtheta[] = {'a', 25, 15, 10, 30, 10, 0, 'a', -5, 15, 10, 0, 10, 30, 'l', 5, 15, 12, 15, STOP};
+int dcopyr[] = {'c', 20, 20, 20, 't', 'c', 7,3, STOP};
+int dregist[] = {'c', 20, 20, 20, 't', 'R', 7,3, STOP};
+int dpi[] = { 'l', 0, 25, 30, 25, 'l', 5, 0, 8, 25, 'l', 17, 0, 20, 25, STOP};
+int dPi[] = { 'l', 0, 40, 30, 40, 'l', 5, 0, 5, 40, 'l', 25, 0, 25, 40, STOP};
+int dsqroot[] = { 'l', 0,10,5,10, 'l', 8, 10, 15, 0, 'l', 15, 0, 30, 40, STOP};
+int dgradient[] = { 'l', 0,40, 30, 40, 'l', 0, 40, 15, 0, 'l', 15, 0, 30, 40, STOP};
+int dbeta[] = {'t', 'B', 0, 5, 'l', 0, 20, 0, -10, STOP};
+int ddagger[] = {'l', 0, 30, 20, 30, 'l', 10, 0, 10, 40, STOP};
+int dpsi[] = { 'a', 15,25, 0, 27, 30, 23, 'l', 0, 0, 30, 40, STOP};
+int dmu[] = { 't',  'u', 0,5, 'l', 0,10, 0, -10, STOP};
+int dnu[] = { 'l',0,0,0,30, 'l', 0,0,20,30, STOP};
+int diota[] = { 'l', 0, 0, 4, 24, 'l', 6, 32, 6, 36, 'l', 0, 0, 5, 0, STOP};
+int dsigma[] = { 'c', 15,15,15, 'l', 15, 30, 35, 30, STOP};
+int ddelta[] = { 'c', 10, 10, 10, 'a', 16, 28, 18, 37, 14, 19, STOP};
+int depsilon[] = { 'a', 15, 15, 15, 30, 15, 0, 'l', 0, 15, 15, 15, STOP};
+int dchi[] = { 'l', 0, 30, 4, 30, 'l', 4, 30, 16, 0, 'l', 16, 0, 20, 0, 'l', 0, 0, 20, 30, STOP};
+int dtau[] = { 'l', 0, 30, 30, 30, 'l', 10, 0, 15, 30 , 'l', 10, 0, 15, 0, STOP};
+int dlesseq[] = { 'l', 0, 20, 30, 30, 'l', 0, 20, 30, 10, 'l', 0, 15, 30, 5, STOP};
+int dgreateq[] = { 'l', 0, 30, 30, 20, 'l', 0, 10, 30, 20, 'l', 0, 5, 30, 15, STOP};
+int dinfinity[] = { 'c', 10, 10, 10, 'c', 30 , 10, 10, STOP};
+int dalpha[] = { 'c', 15, 15, 15, 'a', 52, 15, 35, 30, 35, 0, STOP};
+int dphi[] = { 'c', 10, 15, 10, 'l', 5, 0, 15, 30, STOP};
+int dgamma[] = { 'l', 10, -10, 30, 30, 'a', 10, 15, 20, 10, 0, 20, STOP};
+int dkappa[] = { 'l', 0, 0, 6, 25, 'l', 3, 12, 20, 25, 'l', 6, 15, 20, 0, STOP};
+int drho[] = {'c', 15, 15, 10, 'l', 0, -5, 5, 20, STOP};
+int dGamma[] = {'l', 0, 0, 0, 35, 'l', 0, 35, 25, 35, 'l', 25, 35, 25, 25, STOP};
+int ddownar[]= {'l', 10, 0, 10, 30, 'l', 0, 10, 10, 0, 'l', 10, 0, 20, 10, STOP};
+int dupar[] = { 'l', 10, 0, 10, 30, 'l', 0, 20, 10, 30, 'l', 10, 30, 20, 20,STOP};
+int dleftar[] = { 'l', 0, 15, 25, 15, 'l', 10, 5, 0, 15, 'l', 10, 25, 0, 15, STOP};
+int drightar[] = { 'l', 0, 15, 25, 15, 'l', 15, 5, 25, 15, 'l', 15, 25, 25, 15, STOP};
+int ddivide[]= { 'l', 0, 15, 25, 15, 'l', 12, 20, 14, 20, 'l', 12, 10, 14, 10, STOP};
+int dcap[] = { 'a', 15, 10, 30, 10, 0, 10, 'l', 0, 0, 0, 10, 'l', 30, 0, 30, 10, STOP};
+int dcup[] = {'a', 15, 15, 0, 15, 30, 15, 'l', 0, 15, 0, 25, 'l', 30, 15, 30, 25, STOP};
+int dsubset[] = {'l', 0, 0, 10, 0, 'l', 0, 30, 10, 30, 'a', 10, 15, 10, 0, 10, 30,STOP};
+int dsupset[] = {'a', 15, 15, 15, 30, 15, 0, 'l', 15, 30, 25, 30, 'l', 15, 0, 25, 0, STOP};
+int dimpsubset[] = {'l', 0, 10, 10, 10,  'l', 0, 40, 10, 40, 'a', 10, 25, 10, 10, 10, 40, 'l', 0, 0, 30, 0, STOP};
+int dimpsupset[] = {'a', 15, 25, 15, 40, 15, 10, 'l', 15, 40, 25, 40, 'l', 15, 10, 25, 10, 'l', 0, 0, 30, 0, STOP};
+int dxi[] = {'l', 0, 30, 25, 30, 'a', 5, 25, 5, 30, 5, 20, 'l', 5, 20, 25, 20, 'a', 5, 15, 5, 20, 5, 10, 'l', 5, 10, 20, 10, 'a', 20, 5, 20, 0, 20, 10, STOP};
+int deta[] = {'a', 5,20,10,20,0,20, 'l', 10, 25, 10, 10, 'a', 15, 20, 20, 20, 10, 20, 'l', 20, 20, 20, 0, STOP};
+int dzeta[] = {'l', 0, 30, 25, 30, 'a', 20, 20, 20, 30, 20, 10, 'a', 20, 5, 20, 0, 20, 10, STOP};
+int dPsi[] = {'l', 0, 0, 30, 0, 'l', 0, 35, 30, 35, 'l', 15, 0, 15, 35, 'a', 15, 25, 0, 25, 30, 25, STOP};
+int dPhi[] = { 'l', 0, 0, 30, 0, 'l', 0, 40, 30, 40, 'l', 15, 0, 15, 40, 'c', 15, 20, 10, STOP};
+int domega[] = { 'a', 8, 18, 8, 26, 16, 18, 'a', 24, 18, 16, 18, 24, 26, STOP};
+int dtsigma[] = {'a', 10, 20, 17, 27, 10, 10, 'a', 10, 5, 10, 0, 10, 10, STOP};
+int dpartial[] = { 'c', 10, 10, 10, 'a', 0, 20, 10, 0, 0, 40, STOP};
+int dprop[] = {'c', 10,10,10, 'a', 30, 10, 30, 20, 30, 0, STOP};
+int dTheta[]= { 'c', 15, 15, 15, 'l', 5,15,25,15, 'l', 5, 13, 5, 17, 'l', 25, 13, 25, 17, STOP};
+int dXi[] = { 'l', 0, 40 , 30, 40, 'l' , 0, 0, 30, 0, 'l', 7, 20, 23, 20, STOP};
+int dLambda[] = { 'l', 0, 0, 15, 40, 'l', 15, 40, 30, 0, STOP};
+int drighth[]= { 'l', 0,0,20,0, 'l', 0, 10, 20, 10, 'l',0,20,20,20, 'l',0,30,35,30, 'l',0,40,35,40,
+       'a',20,5,20,0,20,10, 'a', 20,15,20,10,20,20, 'a',20,25,20,20,20,30, 'a',35,35,35,30,35,30,STOP};
+int dlefth[] = {'l', 20, 0, 40,0, 'l',20,10,40,10, 'l',20,20,40,20, 'l',5,30,40,30, 'l',5,40,40,40, 
+       'a', 20, 5, 20,10,20,0, 'a', 20,15,20,20,20,10, 'a', 20, 25, 20,30,20,20, 'a', 5,35,5,40,5,30, STOP};
+int dcircle[] = {'c',15,15,15,STOP};
+int dapprox[] = {'a', 7, 0, 14, 15, 0, 15, 'a', 21, 30, 14,15,28,15, STOP};
+int dappreq[] = {'a', 7, 0, 14, 15, 0, 15, 'a', 21, 30, 14,15,28,15, 'l', 0, 0, 28, 0, STOP};
+int dOmega[] = {'a', 15,25,30,25,0,25, 'l',10,0,0,25, 'l',20,0,30,25, 'l',0,0,10,0, 'l',20,0,30,0, STOP};
+int dplmn[] = {'l', 0, 0, 30, 0, 'l', 0, 25, 30, 25, 'l', 15,10, 15, 40, STOP};
+int dmultiply[] = {'l',0,0,30,30, 'l', 0,30,30,0, STOP};
+int dident[]= {'l', 0,0,30,0, 'l',0,10,30,10, 'l',0,20,30,20, STOP};
+int dnoteq[] = {'l',0,10,30,10, 'l',0,25,30,25, 'l', 0,0,30,40, STOP};
+int ddbldag[] = {'l',10,0,10,30, 'l',0,5,20,5, 'l',0,25,20,25, STOP};
+int dbullet[] = { 'c',10,10,10, 'c',10,10,8, 'c', 10,10,6, 'c', 10, 10, 4, 'c', 10, 10, 2, STOP};
+int drooten[] = {'l', 0,30,25,30, STOP};
+int dempty[] = { 'c', 15, 15, 15, 'l', 0, 0, 30, 30, STOP};
+int dsection [] = {'a', 7,7, 7, 0, 7, 14, 'c', 7,21, 7, 'a', 7, 35, 7, 42, 7, 28, STOP};
+int dff[] = { 't', 'f', 0, 0, 't', 'f', 15, 0, STOP};
+int dfi[] = { 't', 'f', 0, 0, 't', 'i', 15, 0, STOP};
+int dfl[] = { 't', 'f', 0, 0, 't', 'l', 15, 0, STOP};
+int dffi[] = { 't', 'f', 0, 0, 't', 'f', 15, 0, 't', 'i', 30, 0, STOP};
+int dffl[] = { 't', 'f', 0, 0, 't', 'f', 15, 0, 't', 'l', 30, 0, STOP};
+int dcent[] = {'a', 15, 20, 25, 17, 25, 13, 'l', 15, 0, 15, 35, STOP};
+int ddegree[] = {'t', 'o', 0, 20, STOP};
+int dhalf[] = {'t', '1', 0, 20, 'l', 0, 0, 30, 40, 't', '2', 15, 0, STOP};
+int dquarter[] = {'t', '1', 0, 20, 'l', 0, 0, 30, 40, 't', '4', 15, 0, STOP};
+int dthreequarter[] = {'t', '3', 0, 20, 'l', 0, 0, 30, 40, 't', '4', 15, 0, STOP};
+int dbell[] = {'l', 0, 10, 40, 10, 'a', 0, 15, 0, 10, 5, 15, 'a', 40, 15, 35, 15, 40, 10,
+'a', 20, 15, 35, 15, 15, 15, 'l', 20, 35, 20, 40, 'l', 20, 0, 20, 10, 'c', 20, 20, 22, STOP};
+int *drawtab[128] = {
+  0,   /*blank*/
+  dpsi,        /*psi*/
+  dtheta,      /*theta*/
+  dnu, /*nu*/
+  dmu, /*mu*/
+  dlambda,     /*lambda*/
+  diota,       /*iota*/
+  dzeta,       /*zeta*/
+  dsigma,      /*sigma*/
+  ddelta,      /*delta*/
+  dbeta,       /*beta*/
+  dxi, /*xi*/
+  deta,        /*eta*/
+  dphi,        /*phi*/
+  0,   /*upsilon ASCII*/
+  dkappa,      /*kappa*/
+  0,   /*blank*/
+  dpi, /*pi*/
+  0,   /* at sign (ASCII) */
+  ddownar,     /*down arrow*/
+  0,   /*blank*/
+  dalpha,      /*alpha*/
+  0,   /*or (ASCII)*/
+  dchi,        /*chi*/
+  0,   /*" (ASCII)*/
+  depsilon,    /*epsilon*/
+  0,   /*= (ASCII)*/
+  0,   /*omicron (ASCII)*/
+  dleftar,     /*left arrow*/
+  drho,        /*rho*/
+  dupar,       /*up arrow*/
+  dtau,        /*tau*/
+  0,   /*underrule (ASCII)*/
+  0,   /*\ (ASCII)*/
+  dPsi,        /*Psi*/
+  dbell,       /*bell system sign*/
+  dinfinity,   /*infinity*/
+  dgamma,      /*gamma*/
+  dimpsupset,  /*improper superset*/
+  dprop,       /*proportional to*/
+  drighth,     /*right hand*/
+  domega,      /*omega*/
+  0,   /*blank*/
+  dgradient,   /*gradient*/
+  0,   /*blank*/
+  dPhi,        /*Phi*/
+  dTheta,      /*Theta*/
+  dOmega,      /*Omega */
+  dcup,        /*cup (union)*/
+  drooten,     /*root en*/
+  dtsigma,     /*terminal sigma*/
+  dLambda,     /*Lambda*/
+  0,           /* some kind of horizontal line (ASCII) */
+  dGamma,      /*Gamma*/
+  dintsign,    /*integral sign*/
+  dPi, /*Pi*/
+  dsubset,     /*subset of*/
+  dsupset,     /*superset of*/
+  dapprox,     /*approximates*/
+  dpartial,    /*partial derivative*/
+  dDelta,      /*Delta*/
+  dsqroot,     /*square root*/
+  dSigma,      /*Sigma*/
+  dappreq,     /* approx equal */
+  0,   /*blank*/
+  0,   /*> (ASCII)*/
+  dXi, /*Xi*/
+  0,   /*< (ASCII)*/
+  0,   /*slash (longer)*/
+  dcap,        /*cap (intersection)*/
+  0,   /*Upsilon (ASCII Y)*/
+  dnot,        /*not*/
+  0,   /*right ceiling (rt of ")*/
+  0,   /*left top (of big curly)*/
+  0,   /*bold vertical*/
+  0,   /*left center of big curly bracket*/
+  0,   /*left bottom*/
+  0,   /*right top*/
+  0,   /*right center of big curly bracket*/
+  0,   /*right bot*/
+  0,   /*right floor (rb of ")*/
+  0,   /*left floor (left bot of big sq bract)*/
+  0,   /*left ceiling (lt of ")*/
+  dmultiply,   /*multiply*/
+  ddivide,     /*divide*/
+  dplmn,       /*plus-minus*/
+  dlesseq,     /*<=*/
+  dgreateq,    /*>=*/
+  dident,      /*identically equal*/
+  dnoteq,      /*not equal*/
+  0,   /*{ (ASCII)*/
+  0,   /*} (ASCII)*/
+  0,   /*' acute accent (ASCII)*/
+  0,   /*` grave accent (ASCII)*/
+  0,   /*^ (ASCII)*/
+  0,   /* sharp (ASCII)*/
+  dlefth,      /*left hand*/
+  depsilon,    /*member of*/
+  0,   /* ~ ASCII*/
+  dempty,      /*empty set*/
+  0,   /*blank*/
+  ddbldag,     /*dbl dagger*/
+  0,   /*box rule ASCII*/
+  0,   /*asterisk (ASCII)*/
+  dimpsubset,  /*improper subset*/
+  dcircle,     /*circle*/
+  0,   /*blank*/
+  0,   /*plus (ASCII)*/
+  drightar,    /*right arrow*/
+  dsection };  /*section mark*/
+int *moretab[128] = {
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       dquarter, /* one quarter 1/4 */
+       0,
+       dhalf, /* one half 1/2 */
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       dthreequarter, /* 3 /4 */
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       dfi,    /* fi */
+       dfl,    /* fl */
+       dff,    /* ff */
+       dcent,  /* cent mark */
+       dffl,   /* ffl */
+       dffi,   /* ffi */
+       0,
+       0,
+       0,
+       0,
+       0,
+       ddagger, /* dagger */
+       0,
+       dregist, /* registered */
+       0,
+       0,
+       0,
+       0,
+       dbullet, /* bullet */
+       0,
+       0,
+       0,
+       0,
+       dcopyr, /* copyright */
+       dsquare, /* square */
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0
+       };