|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.