|
|
1.1 ! root 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*/
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.