BSD 3 development
authorEric Schmidt <schmidt@ucbvax.Berkeley.EDU>
Sun, 30 Dec 1979 19:56:26 +0000 (11:56 -0800)
committerEric Schmidt <schmidt@ucbvax.Berkeley.EDU>
Sun, 30 Dec 1979 19:56:26 +0000 (11:56 -0800)
Work on file usr/src/cmd/net/chktroff.c

Synthesized-from: 3bsd

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

diff --git a/usr/src/cmd/net/chktroff.c b/usr/src/cmd/net/chktroff.c
new file mode 100644 (file)
index 0000000..97e5596
--- /dev/null
@@ -0,0 +1,429 @@
+/*
+       chktroff [-l] [-num] [file]
+
+               -l      says list the code
+               -num    num is octal offset into file
+               file    if specified, read from file, otherwise stdin
+*/
+# define FEET 15.0
+#define DBL 0200
+#define        BUFSIZ  1024
+/*
+C version of pti
+*/
+
+char *ap;
+char ibuf[BUFSIZ];
+char *ibufp = ibuf;
+char *eibufp = ibuf;
+int fid;
+int esc;
+int escd;
+int verd;
+int esct;
+int osize = 02;
+int size = 02;
+int leadtot;
+int railmag;
+int lead;
+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, 36, 18};
+char *asctab[128];
+char *spectab[128];
+long offset;
+int lflg = 1;
+int xxx;
+long bytetot = 0L;
+int init = 0, stop = 0;
+
+main(argc,argv)
+int argc;
+char **argv;
+{
+       register i, j;
+       register char *k;
+       extern ex();
+       double f;
+
+       while((--argc > 0) && ((++argv)[0][0]=='-')){
+               switch(argv[0][1]){
+                       case 'l':
+                               lflg = 0;
+                               continue;
+                       default:
+                               ap = &argv[0][1];
+                               while(((j = *ap++ - '0') >= 0)
+                                       && (j <= 9))offset = 8*offset +j;
+                               continue;
+               }
+       }
+       if(argc){
+               if((fid=open(argv[0], 0)) < 0){
+                       perror(argv[0]);
+                       exit(1);
+               }
+       }
+       if((i = getc()) != 0100){
+               printf("Not typesetter format file. Sorry.\n");
+               exit(1);
+               }
+       escd = verd = mcase = railmag = 0;
+       if(!lflg)printf("Initialize\n");
+       init++;
+/*
+       lseek(fid,offset,0);
+*/
+       while((i = getc()) >= 0){
+               if(i & 0200){
+                       if(!lflg)printf("%o ",i);
+                       esc += (~i) & 0177;
+                       continue;
+               }
+               if(esc){
+                       if(escd){
+                               if(!lflg)printf("< %d\n",esc);
+                               esc = -esc;
+                       }else{
+                               if(!lflg)printf("> %d\n",esc);
+                       }
+                       esct += esc;
+                       esc = 0;
+               }
+               if(!lflg)printf("%o ",i);
+               if(!i){if(!lflg)printf("\n"); continue;}
+               switch(i){
+                       case 0100:      /*init*/
+                               escd = verd = mcase = railmag = 0;
+                               if(!lflg)printf("Initialize\n");
+                               init++;
+                               continue;
+                       case 0101:      /*lower rail*/
+                               railmag &= ~01;
+                               if(!lflg)printf("Lower rail\n");
+                               continue;
+                       case 0102:      /*upper rail*/
+                               railmag |= 01;
+                               if(!lflg)printf("Upper rail\n");
+                               continue;
+                       case 0103:      /*upper mag*/
+                               railmag |= 02;
+                               if(!lflg)printf("Upper mag\n");
+                               continue;
+                       case 0104:      /*lower mag*/
+                               railmag &= ~02;
+                               if(!lflg)printf("Lower mag\n");
+                               continue;
+                       case 0105:      /*lower case*/
+                               mcase = 0;
+                               if(!lflg)printf("Lower case\n");
+                               continue;
+                       case 0106:      /*upper case*/
+                               mcase = 0100;
+                               if(!lflg)printf("Upper case\n");
+                               continue;
+                       case 0107:      /*escape forward*/
+                               escd = 0;
+                               if(!lflg)printf("> mode, %d\n",esct);
+                               continue;
+                       case 0110:      /*escape backward*/
+                               escd = 1;
+                               if(!lflg)printf("< mode, %d\n",esct);
+                               continue;
+                       case 0111:      /*stop*/
+                               if(!lflg)printf("STOP\n");
+                               stop++;
+                               continue;
+                       case 0112:      /*lead forward*/
+                               verd = 0;
+                               if(!lflg)printf("Lead forward, %d\n",leadtot);
+                               continue;
+                       case 0114:      /*lead backward*/
+                               verd = 1;
+                               if(!lflg)printf("Lead backward, %d\n",leadtot);
+                               continue;
+                       case 0115:      /*undefined*/
+                       case 0116:
+                       case 0117:
+                       case 0113:
+                               if(!lflg)printf("Undefined code\n");
+                               continue;
+               }
+               if((i & 0340) == 0140){ /*leading*/
+                       lead = (~i) & 037;
+                       if(!lflg)printf("Lead %d\n",lead);
+                       if(verd)lead = -lead;
+                       leadtot += lead;
+                       f = ((float)leadtot / (float)(144 * 12));
+                       if(f > FEET){
+                               printf("Only %3.0f feet maximum per request. Sorry.\n",FEET);
+                               exit(1);
+                               }
+                       continue;
+               }
+               if((i & 0360) == 0120){ /*size change*/
+                       i &= 017;
+                       for(j = 0; i != (stab[j] & 017); j++);
+                       osize = size;
+                       size = stab[j];
+                       if(!lflg){
+                               printf("Size %d",rtab[j]);
+                               if(!(osize & DBL) && (size & DBL))printf(", double\n");
+                               else if((osize & DBL) && !(size & DBL))printf(", single\n");
+                               else printf("\n");
+                       }
+                       continue;
+               }
+               if(i & 0300)continue;
+               i = (i & 077) | mcase;
+               if(railmag != 03)k = asctab[i];
+               else k = spectab[i];
+               if(!lflg)printf("%s\n",k);
+               continue;
+       }
+       ex();
+}
+ex(){
+       double f1;
+       f1 = ((leadtot * 3)/432.0)/12.0;
+       printf("Total bytes %ld, lead %d, feet %4.2f\n",bytetot,leadtot,f1);
+       if(stop != 1 || init != 2){
+               printf("Error - wrong # init %d, # stop %d\n",init,stop);
+               exit(1);
+               }
+       exit(0);
+}
+getc(){
+       register i;
+
+       if(ibufp >= eibufp){
+               if((i=read(fid,ibuf,BUFSIZ)) <= 0)ex();
+               eibufp = ibuf + i;
+               ibufp = ibuf;
+               bytetot += i;
+       }
+       return(*ibufp++ & 0377);
+}
+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*/