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