Annotation of 42BSD/ucb/pti.c, revision 1.1.1.1

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*/

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.