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