Annotation of 41BSD/cmd/berknet/chktroff.c, revision 1.1.1.1

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