1: static char sccsid[] = "@(#)chktroff.c	4.1	(Berkeley)	9/12/82";
   2: 
   3: /* sccs id variable */
   4: static char *chktroff_sid = "@(#)chktroff.c	1.2";
   5: 
   6: /*
   7: 	chktroff [-l] [-num] [file]
   8: 
   9: 		-l	says list the code
  10: 		-num	num is octal offset into file
  11: 		file	if specified, read from file, otherwise stdin
  12: */
  13: # include  "local.h"
  14: # ifdef ONYX
  15: # define NOFP
  16: # endif
  17: 
  18: # define FEET 15.0
  19: #define DBL 0200
  20: #define BUFSIZ  1024
  21: /*
  22: C version of pti
  23: */
  24: 
  25: char *ap;
  26: char ibuf[BUFSIZ];
  27: char *ibufp = ibuf;
  28: char *eibufp = ibuf;
  29: int fid;
  30: int esc;
  31: int escd;
  32: int verd;
  33: int esct;
  34: int osize = 02;
  35: int size = 02;
  36: int leadtot;
  37: int railmag;
  38: int lead;
  39: int mcase;
  40: int stab[] = {010,0,01,07,02,03,04,05,0211,06,0212,0213,0214,0215,0216,0217};
  41: int rtab[] = {6, 7, 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 28, 36, 18};
  42: char *asctab[128];
  43: char *spectab[128];
  44: long offset;
  45: int lflg = 1;
  46: int xxx;
  47: long bytetot = 0L;
  48: int init = 0, stop = 0;
  49: 
  50: main(argc,argv)
  51: int argc;
  52: char **argv;
  53: {
  54:     register i, j;
  55:     register char *k;
  56:     extern ex();
  57:     double f;
  58: 
  59:     while((--argc > 0) && ((++argv)[0][0]=='-')){
  60:         switch(argv[0][1]){
  61:             case 'l':
  62:                 lflg = 0;
  63:                 continue;
  64:             default:
  65:                 ap = &argv[0][1];
  66:                 while(((j = *ap++ - '0') >= 0)
  67:                     && (j <= 9))offset = 8*offset +j;
  68:                 continue;
  69:         }
  70:     }
  71:     if(argc){
  72:         if((fid=open(argv[0], 0)) < 0){
  73:             perror(argv[0]);
  74:             exit(1);
  75:         }
  76:     }
  77:     if((i = getc()) != 0100){
  78:         printf("Not typesetter format file. Sorry.\n");
  79:         exit(1);
  80:         }
  81:     escd = verd = mcase = railmag = 0;
  82:     if(!lflg)printf("Initialize\n");
  83:     init++;
  84: /*
  85: 	lseek(fid,offset,0);
  86: */
  87:     while((i = getc()) >= 0){
  88:         if(i & 0200){
  89:             if(!lflg)printf("%o ",i);
  90:             esc += (~i) & 0177;
  91:             continue;
  92:         }
  93:         if(esc){
  94:             if(escd){
  95:                 if(!lflg)printf("< %d\n",esc);
  96:                 esc = -esc;
  97:             }else{
  98:                 if(!lflg)printf("> %d\n",esc);
  99:             }
 100:             esct += esc;
 101:             esc = 0;
 102:         }
 103:         if(!lflg)printf("%o ",i);
 104:         if(!i){if(!lflg)printf("\n"); continue;}
 105:         switch(i){
 106:             case 0100:  /*init*/
 107:                 escd = verd = mcase = railmag = 0;
 108:                 if(!lflg)printf("Initialize\n");
 109:                 init++;
 110:                 continue;
 111:             case 0101:  /*lower rail*/
 112:                 railmag &= ~01;
 113:                 if(!lflg)printf("Lower rail\n");
 114:                 continue;
 115:             case 0102:  /*upper rail*/
 116:                 railmag |= 01;
 117:                 if(!lflg)printf("Upper rail\n");
 118:                 continue;
 119:             case 0103:  /*upper mag*/
 120:                 railmag |= 02;
 121:                 if(!lflg)printf("Upper mag\n");
 122:                 continue;
 123:             case 0104:  /*lower mag*/
 124:                 railmag &= ~02;
 125:                 if(!lflg)printf("Lower mag\n");
 126:                 continue;
 127:             case 0105:  /*lower case*/
 128:                 mcase = 0;
 129:                 if(!lflg)printf("Lower case\n");
 130:                 continue;
 131:             case 0106:  /*upper case*/
 132:                 mcase = 0100;
 133:                 if(!lflg)printf("Upper case\n");
 134:                 continue;
 135:             case 0107:  /*escape forward*/
 136:                 escd = 0;
 137:                 if(!lflg)printf("> mode, %d\n",esct);
 138:                 continue;
 139:             case 0110:  /*escape backward*/
 140:                 escd = 1;
 141:                 if(!lflg)printf("< mode, %d\n",esct);
 142:                 continue;
 143:             case 0111:  /*stop*/
 144:                 if(!lflg)printf("STOP\n");
 145:                 stop++;
 146:                 continue;
 147:             case 0112:  /*lead forward*/
 148:                 verd = 0;
 149:                 if(!lflg)printf("Lead forward, %d\n",leadtot);
 150:                 continue;
 151:             case 0114:  /*lead backward*/
 152:                 verd = 1;
 153:                 if(!lflg)printf("Lead backward, %d\n",leadtot);
 154:                 continue;
 155:             case 0115:  /*undefined*/
 156:             case 0116:
 157:             case 0117:
 158:             case 0113:
 159:                 if(!lflg)printf("Undefined code\n");
 160:                 continue;
 161:         }
 162:         if((i & 0340) == 0140){ /*leading*/
 163:             lead = (~i) & 037;
 164:             if(!lflg)printf("Lead %d\n",lead);
 165:             if(verd)lead = -lead;
 166:             leadtot += lead;
 167: #ifndef NOFP
 168:             f = ((float)leadtot / (float)(144 * 12));
 169:             if(f > FEET){
 170:                 printf("Only %3.0f feet maximum per request. Sorry.\n",FEET);
 171:                 exit(1);
 172:                 }
 173: #endif
 174:             continue;
 175:         }
 176:         if((i & 0360) == 0120){ /*size change*/
 177:             i &= 017;
 178:             for(j = 0; i != (stab[j] & 017); j++);
 179:             osize = size;
 180:             size = stab[j];
 181:             if(!lflg){
 182:                 printf("Size %d",rtab[j]);
 183:                 if(!(osize & DBL) && (size & DBL))printf(", double\n");
 184:                 else if((osize & DBL) && !(size & DBL))printf(", single\n");
 185:                 else printf("\n");
 186:             }
 187:             continue;
 188:         }
 189:         if(i & 0300)continue;
 190:         i = (i & 077) | mcase;
 191:         if(railmag != 03)k = asctab[i];
 192:         else k = spectab[i];
 193:         if(!lflg)printf("%s\n",k);
 194:         continue;
 195:     }
 196:     ex();
 197: }
 198: ex(){
 199:     double f1;
 200: #ifndef NOFP
 201:     f1 = ((leadtot * 3)/432.0)/12.0;
 202:     printf("Total bytes %ld, lead %d, feet %4.2f\n",bytetot,leadtot,f1);
 203: #endif
 204:     if(stop != 1 || init != 2){
 205:         printf("Error - wrong # init %d, # stop %d\n",init,stop);
 206:         exit(1);
 207:         }
 208:     exit(0);
 209: }
 210: getc(){
 211:     register i;
 212: 
 213:     if(ibufp >= eibufp){
 214:         if((i=read(fid,ibuf,BUFSIZ)) <= 0)ex();
 215:         eibufp = ibuf + i;
 216:         ibufp = ibuf;
 217:         bytetot += i;
 218:     }
 219:     return(*ibufp++ & 0377);
 220: }
 221: char *asctab[128] = {
 222:   0,    /*blank*/
 223: "h",    /*h*/
 224: "t",    /*t*/
 225: "n",    /*n*/
 226: "m",    /*m*/
 227: "l",    /*l*/
 228: "i",    /*i*/
 229: "z",    /*z*/
 230: "s",    /*s*/
 231: "d",    /*d*/
 232: "b",    /*b*/
 233: "x",    /*x*/
 234: "f",    /*f*/
 235: "j",    /*j*/
 236: "u",    /*u*/
 237: "k",    /*k*/
 238:   0,    /*blank*/
 239: "p",    /*p*/
 240: "-",    /*_ 3/4 em dash*/
 241: ";",    /*;*/
 242:   0,    /*blank*/
 243: "a",    /*a*/
 244: "_",    /*rule*/
 245: "c",    /*c*/
 246: "`",    /*` open*/
 247: "e",    /*e*/
 248: "'",    /*' close*/
 249: "o",    /*o*/
 250:   0,    /*1/4*/
 251: "r",    /*r*/
 252:   0,    /*1/2*/
 253: "v",    /*v*/
 254: "-",    /*- hyphen*/
 255: "w",    /*w*/
 256: "q",    /*q*/
 257: "/",    /*/*/
 258: ".",    /*.*/
 259: "g",    /*g*/
 260:   0,    /*3/4*/
 261: ",",    /*,*/
 262: "&",    /*&*/
 263: "y",    /*y*/
 264:   0,    /*blank*/
 265: "%",    /*%*/
 266:   0,    /*blank*/
 267: "Q",    /*Q*/
 268: "T",    /*T*/
 269: "O",    /*O*/
 270: "H",    /*H*/
 271: "N",    /*N*/
 272: "M",    /*M*/
 273: "L",    /*L*/
 274: "R",    /*R*/
 275: "G",    /*G*/
 276: "I",    /*I*/
 277: "P",    /*P*/
 278: "C",    /*C*/
 279: "V",    /*V*/
 280: "E",    /*E*/
 281: "Z",    /*Z*/
 282: "D",    /*D*/
 283: "B",    /*B*/
 284: "S",    /*S*/
 285: "Y",    /*Y*/
 286:   0,    /*blank*/
 287: "F",    /*F*/
 288: "X",    /*X*/
 289: "A",    /*A*/
 290: "W",    /*W*/
 291: "J",    /*J*/
 292: "U",    /*U*/
 293: "K",    /*K*/
 294: "0",    /*0*/
 295: "1",    /*1*/
 296: "2",    /*2*/
 297: "3",    /*3*/
 298: "4",    /*4*/
 299: "5",    /*5*/
 300: "6",    /*6*/
 301: "7",    /*7*/
 302: "8",    /*8*/
 303: "9",    /*9*/
 304: "*",    /***/
 305: "-",    /*minus*/
 306:    0,   /*fi*/
 307:   0,    /*fl*/
 308:   0,    /*ff*/
 309:   0,    /*cent mark*/
 310:   0,    /*ffl*/
 311:   0,    /* ffi */
 312: "(",    /*(*/
 313: ")",    /*)*/
 314: "[",    /*[*/
 315: "]",    /*]*/
 316:   0,    /*degree*/
 317:   0,    /*dagger*/
 318: "=",    /*=*/
 319:   0,    /*registered*/
 320: ":",    /*:*/
 321: "+",    /*+*/
 322:   0,    /*blank*/
 323: "!",    /*!*/
 324:   0,    /*bullet*/
 325: "?",    /*?*/
 326: "'",    /*foot mark*/
 327: "|",    /*|*/
 328:   0,    /*blank*/
 329:   0,    /*copyright*/
 330:   0,    /*square*/
 331: "$" };  /*$*/
 332: 
 333: char *spectab[128] = {
 334:   0,    /*blank*/
 335:   0,    /*psi*/
 336:   0,    /*theta*/
 337:   0,    /*nu*/
 338:   0,    /*mu*/
 339:   0,    /*lambda*/
 340:   0,    /*iota*/
 341:   0,    /*zeta*/
 342:   0,    /*sigma*/
 343:   0,    /*delta*/
 344:   0,    /*beta*/
 345:   0,    /*xi*/
 346:   0,    /*eta*/
 347:   0,    /*phi*/
 348:   "u",  /*upsilon*/
 349:   0,    /*kappa*/
 350:   0,    /*blank*/
 351:   0,    /*pi*/
 352:   "@",  /*at sign @*/
 353:   0,    /*down arrow*/
 354:   0,    /*blank*/
 355:   0,    /*alpha*/
 356: "|",    /*or*/
 357:   0,    /*chi*/
 358: "\"",   /*"*/
 359:   0,    /*epsilon*/
 360:   "=",  /*equals*/
 361:   "o",  /*omicron*/
 362:   0,    /*left arrow*/
 363:   0,    /*rho*/
 364:   0,    /*up arrow*/
 365:   0,    /*tau*/
 366: "_",    /*underrule*/
 367: "\\",   /*\*/
 368:   0,    /*Psi*/
 369:   0,    /*bell system sign*/
 370:   0,    /*infinity*/
 371:   0,    /*gamma*/
 372:   0,    /*improper superset*/
 373:   0,    /*proportional to*/
 374:   0,    /*right hand*/
 375:   0,    /*omega*/
 376:   0,    /*blank*/
 377:   0,    /*gradient*/
 378:   0,    /*blank*/
 379:   0,    /*Phi*/
 380:   0,    /*Theta*/
 381:   0,    /*Omega*/
 382:   0,    /*cup (union)*/
 383:   0,    /*root en*/
 384:   0,    /*terminal sigma*/
 385:   0,    /*Lambda*/
 386:   "-",  /*some horizontal line*/
 387:   0,    /*Gamma*/
 388:   0,    /*integral sign*/
 389:   0,    /*Pi*/
 390:   0,    /*subset of*/
 391:   0,    /*superset of*/
 392:   0,    /*approximates*/
 393:   0,    /*partial derivative*/
 394:   0,    /*Delta*/
 395:   0,    /*square root*/
 396:   0,    /*Sigma*/
 397:   0,    /*approx =*/
 398:   0,    /*blank*/
 399: ">",    /*>*/
 400:   0,    /*Xi*/
 401: "<",    /*<*/
 402: "/",    /*slash (longer)*/
 403:   0,    /*cap (intersection)*/
 404:   "Y",  /*Upsilon*/
 405:   0,    /*not*/
 406: "|",    /*right ceiling (rt of ")*/
 407: "|",    /*left top (of big curly)*/
 408: "|",    /*bold vertical*/
 409: "|",    /*left center of big curly bracket*/
 410: "|",    /*left bottom*/
 411: "|",    /*right top*/
 412: "|",    /*right center of big curly bracket*/
 413: "|",    /*right bot*/
 414: "|",    /*right floor (rb of ")*/
 415: "|",    /*left floor (left bot of big sq bract)*/
 416: "|",    /*left ceiling (lt of ")*/
 417: "x",    /*multiply*/
 418:   0,    /*divide*/
 419:   0,    /*plus-minus*/
 420:   0,    /*<=*/
 421:   0,    /*>=*/
 422:   0,    /*identically equal*/
 423:   0,    /*not equal*/
 424: "{",    /*{*/
 425: "}",    /*}*/
 426: "'",    /*' acute accent*/
 427: "`",    /*` grave accent*/
 428: "^",    /*^*/
 429:   "#",  /*sharp*/
 430:   0,    /*left hand*/
 431:   0,    /*member of*/
 432: "~",    /*~*/
 433:   0,    /*empty set*/
 434:   0,    /*blank*/
 435:   0,    /*dbl dagger*/
 436: "|",    /*box rule*/
 437:   "*",  /*telephone asterisk?*/
 438:   0,    /*improper subset*/
 439:   0,    /*circle*/
 440:   0,    /*blank*/
 441:   "+",  /*eqn plus sign*/
 442:   0,    /*right arrow*/
 443:   0 };  /*section mark*/

Defined functions

ex defined in line 198; used 3 times
getc defined in line 210; used 2 times
main defined in line 50; never used

Defined variables

ap defined in line 25; used 2 times
asctab defined in line 221; used 1 times
bytetot defined in line 47; used 2 times
chktroff_sid defined in line 4; never used
eibufp defined in line 28; used 2 times
esc defined in line 30; used 8 times
escd defined in line 31; used 5 times
esct defined in line 33; used 3 times
fid defined in line 29; used 2 times
ibuf defined in line 26; used 5 times
ibufp defined in line 27; used 3 times
init defined in line 48; used 4 times
lead defined in line 38; used 5 times
leadtot defined in line 36; used 6 times
lflg defined in line 45; used 23 times
mcase defined in line 39; used 5 times
offset defined in line 44; used 2 times
  • in line 67(2)
osize defined in line 34; used 3 times
railmag defined in line 37; used 7 times
rtab defined in line 41; used 1 times
sccsid defined in line 1; never used
size defined in line 35; used 4 times
spectab defined in line 333; used 1 times
stab defined in line 40; used 2 times
verd defined in line 32; used 5 times
xxx defined in line 46; never used

Defined macros

BUFSIZ defined in line 20; used 2 times
DBL defined in line 19; used 4 times
FEET defined in line 18; used 2 times
NOFP defined in line 15; used 2 times
Last modified: 1982-09-13
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1384
Valid CSS Valid XHTML 1.0 Strict