Annotation of 3BSD/cmd/tc.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * Simulate typesetter on 4014
        !             3: */
        !             4: 
        !             5: #include <signal.h>
        !             6: #include <stdio.h>
        !             7: 
        !             8: #define        oput(c) if (pgskip==0) putchar(c); else;
        !             9: #define MAXY 3071
        !            10: #define US 037
        !            11: #define GS 035
        !            12: #define ESC 033
        !            13: #define FF 014
        !            14: #define DBL 0200
        !            15: 
        !            16: int pl = 11*144;
        !            17: int mpy = 1;
        !            18: int div = 1;
        !            19: char *ap;
        !            20: int ch;
        !            21: int nonumb;
        !            22: int psize = 10;
        !            23: int dfact = 1;
        !            24: int esc;
        !            25: int escd;
        !            26: int verd;
        !            27: int esct;
        !            28: int osize = 02;
        !            29: int size = 02;
        !            30: int rx;
        !            31: int xx;
        !            32: int yy = MAXY+62+48;
        !            33: int leadtot = -31;
        !            34: int ohy = -1;
        !            35: int ohx = -1;
        !            36: int oxb = -1;
        !            37: int oly = -1;
        !            38: int olx = -1;
        !            39: int tflag;
        !            40: int railmag;
        !            41: int lead;
        !            42: int skip;
        !            43: int pgskip;
        !            44: int ksize = ';';
        !            45: int mcase;
        !            46: int stab[] = {010,0,01,07,02,03,04,05,0211,06,0212,0213,0214,0215,0216,0217};
        !            47: int rtab[] = {6, 7, 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 28, 36, 18};
        !            48: int ktab[] = {';',';',';',';',';',';',':',':','9','9','9','9','8','8','8','9'};
        !            49: int first = 1;
        !            50: int alpha;
        !            51: extern char *asctab[128];
        !            52: extern char *spectab[128];
        !            53: int erase = 1;
        !            54: int    (*sigint)();
        !            55: int    (*sigquit)();
        !            56: 
        !            57: main(argc,argv)
        !            58: int argc;
        !            59: char **argv;
        !            60: {
        !            61:        register i, j;
        !            62:        register char *k;
        !            63:        extern ex();
        !            64: 
        !            65:        while((--argc > 0) && ((++argv)[0][0]=='-')){
        !            66:                switch(argv[0][1]){
        !            67:                        case 'p':
        !            68:                                ap = &argv[0][2];
        !            69:                                dfact = 72;
        !            70:                                if(i = atoi())pl = i/3;
        !            71:                                continue;
        !            72:                        case 't':
        !            73:                                tflag++;
        !            74:                                continue;
        !            75:                        case 's':
        !            76:                                ap = &argv[0][2];
        !            77:                                dfact = 1;
        !            78:                                pgskip = atoi();
        !            79:                                continue;
        !            80:                        default:
        !            81:                                dfact = 1;
        !            82:                                ap = &argv[0][1];
        !            83:                                if(i = atoi())mpy = i;
        !            84:                                if(i = atoi())div = i;
        !            85:                                continue;
        !            86:                }
        !            87:        }
        !            88:        if(argc){
        !            89:                if (freopen(argv[0], "r", stdin) == NULL) {
        !            90:                        fprintf(stderr, "tc: cannot open %s\n", argv[0]);
        !            91:                        exit(1);
        !            92:                }
        !            93:        }
        !            94:        sigint = signal(SIGINT, ex);
        !            95:        sigquit = signal(SIGQUIT, SIG_IGN);
        !            96:        while((i = getchar()) != EOF){
        !            97:                if(!i)continue;
        !            98:                if(i & 0200){
        !            99:                        esc += (~i) & 0177;
        !           100:                        continue;
        !           101:                }
        !           102:                if(esc){
        !           103:                        if(escd)esc = -esc;
        !           104:                        esct += esc;
        !           105:                        xx += (esc*mpy + rx)/div;
        !           106:                        rx = (esc*mpy + rx)%div;
        !           107:                        sendpt();
        !           108:                        esc = 0;
        !           109:                }
        !           110:                switch(i){
        !           111:                        case 0100:      /*init*/
        !           112:                                escd = verd = mcase = railmag = xx = 0;
        !           113:                                yy = MAXY + 48;
        !           114:                                leadtot = -31;
        !           115:                                ohy = oxb = oly = ohx = olx = -1;
        !           116:                                oput(US);
        !           117:                                fflush(stdout);
        !           118:                                if(!first && !tflag)kwait();
        !           119:                                if(first){
        !           120:                                        first = 0;
        !           121:                                        yy += 62;
        !           122:                                }
        !           123:                                init();
        !           124:                                continue;
        !           125:                        case 0101:      /*lower rail*/
        !           126:                                railmag &= ~01;
        !           127:                                continue;
        !           128:                        case 0102:      /*upper rail*/
        !           129:                                railmag |= 01;
        !           130:                                continue;
        !           131:                        case 0103:      /*upper mag*/
        !           132:                                railmag |= 02;
        !           133:                                continue;
        !           134:                        case 0104:      /*lower mag*/
        !           135:                                railmag &= ~02;
        !           136:                                continue;
        !           137:                        case 0105:      /*lower case*/
        !           138:                                mcase = 0;
        !           139:                                continue;
        !           140:                        case 0106:      /*upper case*/
        !           141:                                mcase = 0100;
        !           142:                                continue;
        !           143:                        case 0107:      /*escape forward*/
        !           144:                                escd = 0;
        !           145:                                continue;
        !           146:                        case 0110:      /*escape backward*/
        !           147:                                escd = 1;
        !           148:                                continue;
        !           149:                        case 0111:      /*stop*/
        !           150:                                continue;
        !           151:                        case 0112:      /*lead forward*/
        !           152:                                verd = 0;
        !           153:                                continue;
        !           154:                        case 0113:      /*undefined*/
        !           155:                                continue;
        !           156:                        case 0114:      /*lead backward*/
        !           157:                                verd = 1;
        !           158:                                continue;
        !           159:                        case 0115:      /*undefined*/
        !           160:                        case 0116:
        !           161:                        case 0117:
        !           162:                                continue;
        !           163:                }
        !           164:                if((i & 0340) == 0140){ /*leading*/
        !           165:                        lead = (~i) & 037;
        !           166:                        if(verd)lead = -lead;
        !           167:                        if((leadtot += lead) > pl){
        !           168:                                leadtot = lead;
        !           169:                                oput(US);
        !           170:                                fflush(stdout);
        !           171:                                if(!tflag)kwait();
        !           172:                                yy = MAXY;
        !           173:                                if(pgskip)--pgskip;
        !           174:                                init();
        !           175:                                continue;
        !           176:                        }
        !           177:                        if(skip)continue;
        !           178:                        if((yy -= (lead<<1)) < 0){
        !           179:                                skip++;
        !           180:                                yy = 0;
        !           181:                        }else sendpt();
        !           182:                        continue;
        !           183:                }
        !           184:                if((i & 0360) == 0120){ /*size change*/
        !           185:                        i &= 017;
        !           186:                        for(j = 0; i != (stab[j] & 017); j++);
        !           187:                        osize = size;
        !           188:                        size = stab[j];
        !           189:                        psize = rtab[j];
        !           190:                        ksize = ktab[j];
        !           191:                        oput(ESC);
        !           192:                        oput(ksize);
        !           193:                        i = 0;
        !           194:                        if(!(osize & DBL) && (size & DBL))i = -55;
        !           195:                        else if((osize & DBL) && !(size & DBL))i = 55;
        !           196:                        if(escd)i = -i;
        !           197:                        esc += i;
        !           198:                        continue;
        !           199:                }
        !           200:                if(i & 0300)continue;
        !           201:                i = (i & 077) | mcase;
        !           202:                if(railmag != 03)k = asctab[i];
        !           203:                else k = spectab[i];
        !           204:                if(alpha)sendpt();
        !           205:                if(*k!='\0'){
        !           206:                        oput(US);
        !           207:                        while(*k & 0377)oput(*k++);
        !           208:                        alpha++;
        !           209:                        continue;
        !           210:                }else{
        !           211:                        if(railmag != 03){
        !           212:                                switch(i){
        !           213:                                case 0124: lig("fi"); break;
        !           214:                                case 0125: lig("fl"); break;
        !           215:                                case 0126: lig("ff"); break;
        !           216:                                case 0130: lig("ffl"); break;
        !           217:                                case 0131: lig("ffi"); break;
        !           218:                                default: continue;
        !           219:                                }
        !           220:                        }
        !           221:                        continue;
        !           222:                }
        !           223:        }
        !           224:        ex();
        !           225: }
        !           226: lig(x)
        !           227: char *x;
        !           228: {
        !           229:        register i, j;
        !           230:        register char *k;
        !           231: 
        !           232:        j = 0;
        !           233:        k = x;
        !           234:        oput(US);
        !           235:        oput(*k++);
        !           236:        i = psize * 8 * mpy / (div * 6); /* 8/36 em */
        !           237:        while(*k){
        !           238:                xx += i;
        !           239:                j += i;
        !           240:                sendpt();
        !           241:                oput(US);
        !           242:                oput(*k++);
        !           243:        }
        !           244:        xx -= j;
        !           245:        sendpt();
        !           246: }
        !           247: init(){
        !           248: 
        !           249:        fflush(stdout);
        !           250:        if(erase){
        !           251:                oput(ESC);
        !           252:                oput(FF);
        !           253:        }else erase = 1;
        !           254:        oput(ESC);
        !           255:        oput(ksize);
        !           256:        /*delay about a second*/
        !           257: /* let the system do it...
        !           258:        for(i = 960; i > 0; i--)oput(GS);
        !           259: */
        !           260:        skip = 0;
        !           261:        sendpt();
        !           262: }
        !           263: ex(){
        !           264:        yy = MAXY;
        !           265:        xx = 0;
        !           266:        sendpt();
        !           267:        oput(ESC);
        !           268:        oput(';');
        !           269:        oput(US);
        !           270:        fflush(stdout);
        !           271:        exit(0);
        !           272: }
        !           273: kwait(){
        !           274:        char buf[128]; char *bptr; char c;
        !           275:        if(pgskip) return;
        !           276: next:
        !           277:        bptr=buf;
        !           278:        while((c=readch())&&(c!='\n')) *bptr++=c;
        !           279:        *bptr=0;
        !           280:        if(bptr!=buf){
        !           281:                bptr = buf;
        !           282:                if(*bptr == '!'){callunix(&buf[1]); fputs("!\n", stderr); goto next;}
        !           283:                else switch(*bptr++){
        !           284:                        case 'e':
        !           285:                                erase = 0;
        !           286:                                goto next;
        !           287:                        case 's':
        !           288:                                ap = &buf[1];
        !           289:                                dfact = 1;
        !           290:                                pgskip = atoi() + 1;
        !           291:                                goto next;
        !           292:                        default:
        !           293:                                fputs("?\n", stderr);
        !           294:                                goto next;
        !           295:                }
        !           296:        }
        !           297:        else if (c==0) ex();
        !           298:        else    return;
        !           299: }
        !           300: callunix(line)
        !           301: char line[];
        !           302: {
        !           303:        int rc, status, unixpid;
        !           304:        if( (unixpid=fork())==0 ) {
        !           305:                signal(SIGINT,sigint); signal(SIGQUIT,sigquit);
        !           306:                close(0); dup(2);
        !           307:                execl("/bin/sh", "-sh", "-c", line, 0);
        !           308:                exit(255);
        !           309:        }
        !           310:        else if(unixpid == -1)
        !           311:                return;
        !           312:        else{   signal(SIGINT, SIG_IGN); signal(SIGQUIT, SIG_IGN);
        !           313:                while( (rc = wait(&status)) != unixpid && rc != -1 ) ;
        !           314:                signal(SIGINT,ex); signal(SIGQUIT,sigquit);
        !           315:        }
        !           316: }
        !           317: readch(){
        !           318:        char c;
        !           319:        if (read(2,&c,1)<1) c=0;
        !           320:        return(c);
        !           321: }
        !           322: sendpt(){
        !           323:        int hy,xb,ly,hx,lx;
        !           324: 
        !           325:        oput(GS);
        !           326:        hy = ((yy>>7) & 037);
        !           327:        xb = ((xx & 03) + ((yy<<2) & 014) & 017);
        !           328:        ly = ((yy>>2) & 037);
        !           329:        hx = ((xx>>7) & 037);
        !           330:        lx = ((xx>>2) & 037);
        !           331:        if(hy != ohy)oput(hy | 040);
        !           332:        if(xb != oxb)oput(xb | 0140);
        !           333:        if((ly != oly) || (hx != ohx) || (xb != oxb))
        !           334:                oput(ly | 0140);
        !           335:        if(hx != ohx)oput(hx | 040);
        !           336:        oput(lx | 0100);
        !           337:        ohy = hy;
        !           338:        oxb = xb;
        !           339:        oly = ly;
        !           340:        ohx = hx;
        !           341:        olx = lx;
        !           342:        alpha = 0;
        !           343:        return;
        !           344: }
        !           345: atoi()
        !           346: {
        !           347:        register i, j, acc;
        !           348:        int field, digits;
        !           349:        long dd;
        !           350:        long tscale();
        !           351: 
        !           352:        field = digits = acc = 0;
        !           353: a1:
        !           354:        while(((j = (i = getch()) - '0') >= 0) && (j <= 9)){
        !           355:                field++;
        !           356:                digits++;
        !           357:                acc = 10*acc + j;
        !           358:        }
        !           359:        if(i == '.'){
        !           360:                field++;
        !           361:                digits = 0;
        !           362:                goto a1;
        !           363:        }
        !           364:        if(!(ch = i))ch = 'x';
        !           365:        dd = tscale(acc);
        !           366:        acc = dd;
        !           367:        if((field != digits) && (digits > 0)){
        !           368:                j = 1;
        !           369:                while(digits--)j *= 10;
        !           370:                acc = dd/j;
        !           371:        }
        !           372:        nonumb = !field;
        !           373:        ch = 0;
        !           374:        return(acc);
        !           375: }
        !           376: long tscale(n)
        !           377: int n;
        !           378: {
        !           379:        register i, j;
        !           380: 
        !           381:        switch(i = getch()){
        !           382:                case 'u':
        !           383:                        j = 1;
        !           384:                        break;
        !           385:                case 'p':       /*Points*/
        !           386:                        j = 6;
        !           387:                        break;
        !           388:                case 'i':       /*Inches*/
        !           389:                        j = 432;
        !           390:                        break;
        !           391:                case 'c':       /*Centimeters; should be 170.0787*/
        !           392:                        j = 170;
        !           393:                        break;
        !           394:                case 'P':       /*Picas*/
        !           395:                        j = 72;
        !           396:                        break;
        !           397:                default:
        !           398:                        j = dfact;
        !           399:                        ch = i;
        !           400:        }
        !           401:        return((long)n*j);
        !           402: }
        !           403: getch(){
        !           404:        register i;
        !           405: 
        !           406:        if(ch){
        !           407:                i = ch;
        !           408:                ch = 0;
        !           409:                return(i);
        !           410:        }
        !           411:        return(*ap++);
        !           412: }
        !           413: 
        !           414: char *asctab[128] = {
        !           415: "\0",  /*blank*/
        !           416: "h",   /*h*/
        !           417: "t",   /*t*/
        !           418: "n",   /*n*/
        !           419: "m",   /*m*/
        !           420: "l",   /*l*/
        !           421: "i",   /*i*/
        !           422: "z",   /*z*/
        !           423: "s",   /*s*/
        !           424: "d",   /*d*/
        !           425: "b",   /*b*/
        !           426: "x",   /*x*/
        !           427: "f",   /*f*/
        !           428: "j",   /*j*/
        !           429: "u",   /*u*/
        !           430: "k",   /*k*/
        !           431: "\0",  /*blank*/
        !           432: "p",   /*p*/
        !           433: "-",   /*_ 3/4 em dash*/
        !           434: ";",   /*;*/
        !           435: "\0",  /*blank*/
        !           436: "a",   /*a*/
        !           437: "_",   /*rule*/
        !           438: "c",   /*c*/
        !           439: "`",   /*` open*/
        !           440: "e",   /*e*/
        !           441: "\'",  /*' close*/
        !           442: "o",   /*o*/
        !           443: "\0",  /*1/4*/
        !           444: "r",   /*r*/
        !           445: "\0",  /*1/2*/
        !           446: "v",   /*v*/
        !           447: "-",   /*- hyphen*/
        !           448: "w",   /*w*/
        !           449: "q",   /*q*/
        !           450: "/",   /*/*/
        !           451: ".",   /*.*/
        !           452: "g",   /*g*/
        !           453: "\0",  /*3/4*/
        !           454: ",",   /*,*/
        !           455: "&",   /*&*/
        !           456: "y",   /*y*/
        !           457: "\0",  /*blank*/
        !           458: "%",   /*%*/
        !           459: "\0",  /*blank*/
        !           460: "Q",   /*Q*/
        !           461: "T",   /*T*/
        !           462: "O",   /*O*/
        !           463: "H",   /*H*/
        !           464: "N",   /*N*/
        !           465: "M",   /*M*/
        !           466: "L",   /*L*/
        !           467: "R",   /*R*/
        !           468: "G",   /*G*/
        !           469: "I",   /*I*/
        !           470: "P",   /*P*/
        !           471: "C",   /*C*/
        !           472: "V",   /*V*/
        !           473: "E",   /*E*/
        !           474: "Z",   /*Z*/
        !           475: "D",   /*D*/
        !           476: "B",   /*B*/
        !           477: "S",   /*S*/
        !           478: "Y",   /*Y*/
        !           479: "\0",  /*blank*/
        !           480: "F",   /*F*/
        !           481: "X",   /*X*/
        !           482: "A",   /*A*/
        !           483: "W",   /*W*/
        !           484: "J",   /*J*/
        !           485: "U",   /*U*/
        !           486: "K",   /*K*/
        !           487: "0",   /*0*/
        !           488: "1",   /*1*/
        !           489: "2",   /*2*/
        !           490: "3",   /*3*/
        !           491: "4",   /*4*/
        !           492: "5",   /*5*/
        !           493: "6",   /*6*/
        !           494: "7",   /*7*/
        !           495: "8",   /*8*/
        !           496: "9",   /*9*/
        !           497: "*",   /***/
        !           498: "-",   /*minus*/
        !           499: "",    /*fi*/
        !           500: "",    /*fl*/
        !           501: "",    /*ff*/
        !           502: "\033\016Z\bM\033\017",        /*cent sign*/
        !           503: "",    /*ffl*/
        !           504: "",    /*ffi*/
        !           505: "(",   /*(*/
        !           506: ")",   /*)*/
        !           507: "[",   /*[*/
        !           508: "]",   /*]*/
        !           509: "\033\016J\033\017",   /*degree*/
        !           510: "\033\016M\b_\033\017",        /*dagger*/
        !           511: "=",   /*=*/
        !           512: "\033\016O\b&\033\017",        /*registered*/
        !           513: ":",   /*:*/
        !           514: "+",   /*+*/
        !           515: "\0",  /*blank*/
        !           516: "!",   /*!*/
        !           517: "\033\016O\b~\033\017",        /*bullet*/
        !           518: "?",   /*?*/
        !           519: "\'",  /*foot mark*/
        !           520: "|",   /*|*/
        !           521: "\0",  /*blank*/
        !           522: "\033\016O\b#\033\017",        /*copyright*/
        !           523: "\033\016L\033\017",   /*square*/
        !           524: "$" }; /*$*/
        !           525: 
        !           526: char *spectab[128] = {
        !           527: "\0",  /*blank*/
        !           528: "\033\016(\bM\033\017",        /*psi*/
        !           529: "\033\016o\b_\033\017",        /*theta*/
        !           530: "v\b)",        /*nu*/
        !           531: "\033\016V\b,\033\017",        /*mu*/
        !           532: "\033\016)\b?\033\017",        /*lambda*/
        !           533: "\033\016I\033\017",   /*iota*/
        !           534: "S\b\033\016Z\033\017",        /*zeta*/
        !           535: "o\b\'",       /*sigma*/
        !           536: "o\b\033\0165\033\017",        /*delta*/
        !           537: "\033\016b\033\017",   /*beta*/
        !           538: "\033\016e\bc\033\017",        /*xi*/
        !           539: "j\b\033\016C\033\017",        /*eta*/
        !           540: "\033\016O\bM\033\017",        /*phi*/
        !           541: "\033\016(\033\017",   /*upsilon*/
        !           542: "\033\016k\033\017",   /*kappa*/
        !           543: "\0",  /*blank*/
        !           544: "T\b\033\016S\033\017",        /*pi*/
        !           545: "@",   /*at-sign*/
        !           546: "\033\016U\033\017",   /*down arrow*/
        !           547: "\0",  /*blank*/
        !           548: "\033\016A\033\017",   /*alpha*/
        !           549: "|",   /*or*/
        !           550: "l\b/",        /*chi*/
        !           551: "\"",  /*"*/
        !           552: "\033\016E\033\017",   /*epsilon*/
        !           553: "=",   /*=*/
        !           554: "\033\016O\033\017",   /*omicron*/
        !           555: "\033\016[\033\017",   /*left arrow*/
        !           556: "\033\016R\033\017",   /*rho*/
        !           557: "\033\016Y\033\017",   /*up arrow*/
        !           558: "\033\016N\033\017",   /*tau*/
        !           559: "_",   /*underrule*/
        !           560: "\\",  /*\*/
        !           561: "I\b\033\016(\033\017",        /*Psi*/
        !           562: "\033\016O\bJ\033\017",        /*bell system sign*/
        !           563: "\033\016W\bX\033\017",        /*infinity*/
        !           564: "`\b/",        /*gamma*/
        !           565: "\033\016X\bF\033\017",        /*improper superset*/
        !           566: "\033\016A\033\017",   /*proportional to*/
        !           567: "\033\016\\\b]\033\017",       /*right hand*/
        !           568: "\033\016W\033\017",   /*omega*/
        !           569: "\0",  /*blank*/
        !           570: "\033\016G\033\017",   /*gradient*/
        !           571: "\0",  /*blank*/
        !           572: "I\033\016\bO\033\017",        /*Phi*/
        !           573: "O\b=",        /*Theta*/
        !           574: "O\b_",        /*Omega*/
        !           575: "\033\016V\033\017",   /*cup (union)*/
        !           576: "\033\016@\033\017",   /*root en*/
        !           577: "s",   /*terminal sigma*/
        !           578: "\033\016)\bK\033\017",        /*Lambda*/
        !           579: "-",   /*minus*/
        !           580: "\033\016S\bK\033\017",        /*Gamma*/
        !           581: "\033\016i\033\017",   /*integral sign*/
        !           582: "\033\016t\b'\033\017",        /*Pi*/
        !           583: "\033\016Z\033\017",   /*subset of*/
        !           584: "\033\016X\033\017",   /*superset of*/
        !           585: "\033\016T\033\017",   /*approximates*/
        !           586: "o\b`",        /*partial derivative*/
        !           587: "\033\016H\033\017",   /*Delta*/
        !           588: "\033\016I\b'\033\017",        /*square root*/
        !           589: ">\b\033\016F\b@\033\017",     /*Sigma*/
        !           590: "\033\016T\bF\033\017",        /*approx =*/
        !           591: "\0",  /*blank*/
        !           592: ">",   /*>*/
        !           593: "\033\016_\bF\b@\033\017",     /*Xi*/
        !           594: "<",   /*<*/
        !           595: "/",   /*slash (longer)*/
        !           596: "\033\016C\033\017",   /*cap (intersection)*/
        !           597: "\033\016y\033\017",   /*Upsilon*/
        !           598: "\033\016|\033\017",   /*not*/
        !           599: "|",   /*right ceiling (rt of ")*/
        !           600: "|",   /*left top (of big curly)*/
        !           601: "|",   /*bold vertical*/
        !           602: "|",   /*left center of big curly bracket*/
        !           603: "|",   /*left bottom*/
        !           604: "|",   /*right top*/
        !           605: "|",   /*right center of big curly bracket*/
        !           606: "|",   /*right bot*/
        !           607: "|",   /*right floor (rb of ")*/
        !           608: "|",   /*left floor (left bot of big sq bract)*/
        !           609: "|",   /*left ceiling (lt of ")*/
        !           610: "\033\016=\033\017",   /*multiply*/
        !           611: "\033\016+\033\017",   /*divide*/
        !           612: "+\b_",        /*plus-minus*/
        !           613: "\033\016$\033\017",   /*<=*/
        !           614: "\033\016^\033\017",   /*>=*/
        !           615: "=\b_",        /*identically equal*/
        !           616: "\033\016*\033\017",   /*not equal*/
        !           617: "{",   /*{*/
        !           618: "}",   /*}*/
        !           619: "\'",  /*' acute accent*/
        !           620: "`",   /*` grave accent*/
        !           621: "^",   /*^*/
        !           622: "#",   /*sharp*/
        !           623: "\033\016|\b[\033\017",        /*left hand*/
        !           624: "\033\016c\b_\033\017",        /*member of*/
        !           625: "~",   /*~*/
        !           626: "\033\016O\b/\033\017",        /*empty set*/
        !           627: "\0",  /*blank*/
        !           628: "\033\016%\bM\033\017",        /*dbl dagger*/
        !           629: "|",   /*box rule*/
        !           630: "*",   /*asterisk*/
        !           631: "\033\016Z\bF\033\017",        /*improper subset*/
        !           632: "\033\016O\033\017",   /*circle*/
        !           633: "\0",  /*blank*/
        !           634: "+",   /*eqn plus*/
        !           635: "\033\016]\033\017",   /*right arrow*/
        !           636: "g\b\033\016C\033\017" };      /*section mark*/

unix.superglobalmegacorp.com

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