Annotation of researchv10no/cmd/ascii.c, revision 1.1.1.1

1.1       root        1: #include <stdio.h>
                      2: char *str[128]={
                      3:        "nul",  "soh",  "stx",  "etx",  "eot",  "enq",  "ack",  "bel",
                      4:        "bs ",  "ht ",  "nl ",  "vt ",  "np ",  "cr ",  "so ",  "si ",
                      5:        "dle",  "dc1",  "dc2",  "dc3",  "dc4",  "nak",  "syn",  "etb",
                      6:        "can",  "em ",  "sub",  "esc",  "fs ",  "gs ",  "rs ",  "us ",
                      7:        "sp ",  " ! ",  " \" ", " # ",  " $ ",  " % ",  " & ",  " ' ",
                      8:        " ( ",  " ) ",  " * ",  " + ",  " , ",  " - ",  " . ",  " / ",
                      9:        " 0 ",  " 1 ",  " 2 ",  " 3 ",  " 4 ",  " 5 ",  " 6 ",  " 7 ",
                     10:        " 8 ",  " 9 ",  " : ",  " ; ",  " < ",  " = ",  " > ",  " ? ",
                     11:        " @ ",  " A ",  " B ",  " C ",  " D ",  " E ",  " F ",  " G ",
                     12:        " H ",  " I ",  " J ",  " K ",  " L ",  " M ",  " N ",  " O ",
                     13:        " P ",  " Q ",  " R ",  " S ",  " T ",  " U ",  " V ",  " W ",
                     14:        " X ",  " Y ",  " Z ",  " [ ",  " \\ ", " ] ",  " ^ ",  " _ ",
                     15:        " ` ",  " a ",  " b ",  " c ",  " d ",  " e ",  " f ",  " g ",
                     16:        " h ",  " i ",  " j ",  " k ",  " l ",  " m ",  " n ",  " o ",
                     17:        " p ",  " q ",  " r ",  " s ",  " t ",  " u ",  " v ",  " w ",
                     18:        " x ",  " y ",  " z ",  " { ",  " | ",  " } ",  " ~ ",  "del",
                     19: };
                     20: #define        MAXBASE 36
                     21: char Ncol[]={
                     22:     0,0,7,5,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
                     23: };
                     24: int    base=8;
                     25: int    ncol;
                     26: int    text=1;
                     27: int    strip=0;
                     28: extern int     optind;
                     29: extern int     opterr;
                     30: extern char    *optarg;
                     31: extern int     optopt;
                     32: main(argc, argv)
                     33:        char *argv[];
                     34: {
                     35:        register i;
                     36:        opterr = 0;
                     37:        for(;;)
                     38:                switch(getopt(argc, argv, "xodntceb:")){
                     39:                case 'x':
                     40:                        base=16;
                     41:                        break;
                     42:                case 'o':
                     43:                        base=8;
                     44:                        break;
                     45:                case 'd':
                     46:                        base=10;
                     47:                        break;
                     48:                case 'b':
                     49:                        base=atoi(optarg);
                     50:                        if(base<2||base>MAXBASE)
                     51:                                usage();
                     52:                        break;
                     53:                case 'n':
                     54:                        text=0;
                     55:                        break;
                     56:                case 't':
                     57:                        strip=1;
                     58:                case 'c':
                     59:                        text=2;
                     60:                        break;
                     61:                case 'e':
                     62:                case EOF:
                     63:                        argc-=optind;
                     64:                        argv+=optind;
                     65:                        goto Done;
                     66:                default:
                     67:                        usage();
                     68:                }
                     69:  Done:
                     70:        ncol=Ncol[base];
                     71:        if(argc==0){
                     72:                for(i=0;i<128;i++){
                     73:                        put(i);
                     74:                        if((i&7)==7)
                     75:                                puts("|\n");
                     76:                }
                     77:        } else {
                     78:                if(text==1)
                     79:                        text=isnum(argv[0]);
                     80:                while(argc--)
                     81:                        if(text)
                     82:                                puttext(*argv++);
                     83:                        else
                     84:                                putnum(*argv++);
                     85:        }
                     86:        if(strip)
                     87:                putchar('\n');
                     88: }
                     89: usage(){
                     90:        fprintf(stderr, "usage: ascii [-xod | -b8] [-nct] [-e] [text]\n");
                     91:        exit(1);
                     92: }
                     93: put(i){
                     94:        putchar('|');
                     95:        putn(i, ncol);
                     96:        putchar(' ');
                     97:        puts(str[i]);
                     98: }
                     99: char dig[]="0123456789abcdefghijklmnopqrstuvwxyz";
                    100: putn(n, ndig)
                    101:        register n;
                    102: {
                    103:        if(ndig==0)
                    104:                return;
                    105:        putn(n/base, ndig-1);
                    106:        putchar(dig[n%base]);
                    107: }
                    108: puts(s)
                    109:        register char *s;
                    110: {
                    111:        fputs(s, stdout);       /* no newline!! */
                    112: }
                    113: puttext(s)
                    114:        register char *s;
                    115: {
                    116:        register n;
                    117:        n=btoi(s)&0177;
                    118:        if(strip)
                    119:                putchar(n);
                    120:        else{
                    121:                puts(str[n]);
                    122:                putchar('\n');
                    123:        }
                    124: }
                    125: putnum(s)
                    126:        register char *s;
                    127: {
                    128:        while(*s){
                    129:                putn(*s++&0177, ncol);
                    130:                putchar('\n');
                    131:        }
                    132: }
                    133: btoi(s)
                    134:        register char *s;
                    135: {
                    136:        register n;
                    137:        n=0;
                    138:        while(*s)
                    139:                n=n*base+value(*s++, 0);
                    140:        return(n);
                    141: }
                    142: value(c, f)
                    143:        register c;
                    144: {
                    145:        register char *s;
                    146:        for(s=dig; s<dig+base; s++)
                    147:                if(*s==c)
                    148:                        return(s-dig);
                    149:        if(f)
                    150:                return(-1);
                    151:        fputs("ascii: bad input char ", stderr);
                    152:        putc(c, stderr);
                    153:        putc('\n', stderr);
                    154:        exit(1);
                    155: }
                    156: isnum(s)
                    157:        register char *s;
                    158: {
                    159:        while(*s)
                    160:                if(value(*s++, 1)==-1)
                    161:                        return(0);
                    162:        return(1);
                    163: }

unix.superglobalmegacorp.com

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