Annotation of 3BSD/cmd/pti.c, revision 1.1.1.1

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

unix.superglobalmegacorp.com

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