Blame


1 bc7cb1a1 2003-11-23 devnull #include <u.h>
2 bc7cb1a1 2003-11-23 devnull #include <libc.h>
3 bc7cb1a1 2003-11-23 devnull #include <bio.h>
4 bc7cb1a1 2003-11-23 devnull
5 bc7cb1a1 2003-11-23 devnull #define MAXBASE 36
6 bc7cb1a1 2003-11-23 devnull
7 bc7cb1a1 2003-11-23 devnull void usage(void);
8 bc7cb1a1 2003-11-23 devnull void put(int);
9 bc7cb1a1 2003-11-23 devnull void putn(int, int);
10 bc7cb1a1 2003-11-23 devnull void puttext(char *);
11 bc7cb1a1 2003-11-23 devnull void putnum(char *);
12 bc7cb1a1 2003-11-23 devnull int btoi(char *);
13 bc7cb1a1 2003-11-23 devnull int value(int, int);
14 bc7cb1a1 2003-11-23 devnull int isnum(char *);
15 bc7cb1a1 2003-11-23 devnull
16 bc7cb1a1 2003-11-23 devnull char *str[256]={
17 bc7cb1a1 2003-11-23 devnull "nul", "soh", "stx", "etx", "eot", "enq", "ack", "bel",
18 bc7cb1a1 2003-11-23 devnull "bs ", "ht ", "nl ", "vt ", "np ", "cr ", "so ", "si ",
19 bc7cb1a1 2003-11-23 devnull "dle", "dc1", "dc2", "dc3", "dc4", "nak", "syn", "etb",
20 bc7cb1a1 2003-11-23 devnull "can", "em ", "sub", "esc", "fs ", "gs ", "rs ", "us ",
21 bc7cb1a1 2003-11-23 devnull "sp ", " ! ", " \" ", " # ", " $ ", " % ", " & ", " ' ",
22 bc7cb1a1 2003-11-23 devnull " ( ", " ) ", " * ", " + ", " , ", " - ", " . ", " / ",
23 bc7cb1a1 2003-11-23 devnull " 0 ", " 1 ", " 2 ", " 3 ", " 4 ", " 5 ", " 6 ", " 7 ",
24 bc7cb1a1 2003-11-23 devnull " 8 ", " 9 ", " : ", " ; ", " < ", " = ", " > ", " ? ",
25 bc7cb1a1 2003-11-23 devnull " @ ", " A ", " B ", " C ", " D ", " E ", " F ", " G ",
26 bc7cb1a1 2003-11-23 devnull " H ", " I ", " J ", " K ", " L ", " M ", " N ", " O ",
27 bc7cb1a1 2003-11-23 devnull " P ", " Q ", " R ", " S ", " T ", " U ", " V ", " W ",
28 bc7cb1a1 2003-11-23 devnull " X ", " Y ", " Z ", " [ ", " \\ ", " ] ", " ^ ", " _ ",
29 bc7cb1a1 2003-11-23 devnull " ` ", " a ", " b ", " c ", " d ", " e ", " f ", " g ",
30 bc7cb1a1 2003-11-23 devnull " h ", " i ", " j ", " k ", " l ", " m ", " n ", " o ",
31 bc7cb1a1 2003-11-23 devnull " p ", " q ", " r ", " s ", " t ", " u ", " v ", " w ",
32 bc7cb1a1 2003-11-23 devnull " x ", " y ", " z ", " { ", " | ", " } ", " ~ ", "del",
33 bc7cb1a1 2003-11-23 devnull "x80", "x81", "x82", "x83", "x84", "x85", "x86", "x87",
34 bc7cb1a1 2003-11-23 devnull "x88", "x89", "x8a", "x8b", "x8c", "x8d", "x8e", "x8f",
35 bc7cb1a1 2003-11-23 devnull "x90", "x91", "x92", "x93", "x94", "x95", "x96", "x97",
36 bc7cb1a1 2003-11-23 devnull "x98", "x99", "x9a", "x9b", "x9c", "x9d", "x9e", "x9f",
37 bc7cb1a1 2003-11-23 devnull "xa0", " ¡ ", " ¢ ", " £ ", " ¤ ", " ¥ ", " ¦ ", " § ",
38 bc7cb1a1 2003-11-23 devnull " ¨ ", " © ", " ª ", " « ", " ¬ ", " ­ ", " ® ", " ¯ ",
39 bc7cb1a1 2003-11-23 devnull " ° ", " ± ", " ² ", " ³ ", " ´ ", " µ ", " ¶ ", " · ",
40 bc7cb1a1 2003-11-23 devnull " ¸ ", " ¹ ", " º ", " » ", " ¼ ", " ½ ", " ¾ ", " ¿ ",
41 bc7cb1a1 2003-11-23 devnull " À ", " Á ", " Â ", " Ã ", " Ä ", " Å ", " Æ ", " Ç ",
42 bc7cb1a1 2003-11-23 devnull " È ", " É ", " Ê ", " Ë ", " Ì ", " Í ", " Î ", " Ï ",
43 bc7cb1a1 2003-11-23 devnull " Ð ", " Ñ ", " Ò ", " Ó ", " Ô ", " Õ ", " Ö ", " × ",
44 bc7cb1a1 2003-11-23 devnull " Ø ", " Ù ", " Ú ", " Û ", " Ü ", " Ý ", " Þ ", " ß ",
45 bc7cb1a1 2003-11-23 devnull " à ", " á ", " â ", " ã ", " ä ", " å ", " æ ", " ç ",
46 bc7cb1a1 2003-11-23 devnull " è ", " é ", " ê ", " ë ", " ì ", " í ", " î ", " ï ",
47 bc7cb1a1 2003-11-23 devnull " ð ", " ñ ", " ò ", " ó ", " ô ", " õ ", " ö ", " ÷ ",
48 bc7cb1a1 2003-11-23 devnull " ø ", " ù ", " ú ", " û ", " ü ", " ý ", " þ ", " ÿ "
49 bc7cb1a1 2003-11-23 devnull };
50 bc7cb1a1 2003-11-23 devnull
51 bc7cb1a1 2003-11-23 devnull char Ncol[]={
52 bc7cb1a1 2003-11-23 devnull 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,
53 bc7cb1a1 2003-11-23 devnull };
54 bc7cb1a1 2003-11-23 devnull
55 bc7cb1a1 2003-11-23 devnull int nchars=128;
56 bc7cb1a1 2003-11-23 devnull int base=16;
57 bc7cb1a1 2003-11-23 devnull int ncol;
58 bc7cb1a1 2003-11-23 devnull int text=1;
59 bc7cb1a1 2003-11-23 devnull int strip=0;
60 bc7cb1a1 2003-11-23 devnull Biobuf bin;
61 bc7cb1a1 2003-11-23 devnull
62 bc7cb1a1 2003-11-23 devnull void
63 bc7cb1a1 2003-11-23 devnull main(int argc, char **argv)
64 bc7cb1a1 2003-11-23 devnull {
65 bc7cb1a1 2003-11-23 devnull int i;
66 bc7cb1a1 2003-11-23 devnull
67 bc7cb1a1 2003-11-23 devnull Binit(&bin, 1, OWRITE);
68 bc7cb1a1 2003-11-23 devnull ARGBEGIN{
69 bc7cb1a1 2003-11-23 devnull case '8':
70 bc7cb1a1 2003-11-23 devnull nchars=256; break;
71 bc7cb1a1 2003-11-23 devnull case 'x':
72 bc7cb1a1 2003-11-23 devnull base=16; break;
73 bc7cb1a1 2003-11-23 devnull case 'o':
74 bc7cb1a1 2003-11-23 devnull base=8; break;
75 bc7cb1a1 2003-11-23 devnull case 'd':
76 bc7cb1a1 2003-11-23 devnull base=10; break;
77 bc7cb1a1 2003-11-23 devnull case 'b':
78 bc7cb1a1 2003-11-23 devnull base=strtoul(EARGF(usage()), 0, 0);
79 bc7cb1a1 2003-11-23 devnull if(base<2||base>MAXBASE)
80 bc7cb1a1 2003-11-23 devnull usage();
81 bc7cb1a1 2003-11-23 devnull break;
82 bc7cb1a1 2003-11-23 devnull case 'n':
83 bc7cb1a1 2003-11-23 devnull text=0; break;
84 bc7cb1a1 2003-11-23 devnull case 't':
85 bc7cb1a1 2003-11-23 devnull strip=1;
86 bc7cb1a1 2003-11-23 devnull /* fall through */
87 bc7cb1a1 2003-11-23 devnull case 'c':
88 bc7cb1a1 2003-11-23 devnull text=2; break;
89 bc7cb1a1 2003-11-23 devnull default:
90 bc7cb1a1 2003-11-23 devnull usage();
91 bc7cb1a1 2003-11-23 devnull }ARGEND
92 bc7cb1a1 2003-11-23 devnull
93 bc7cb1a1 2003-11-23 devnull ncol=Ncol[base];
94 bc7cb1a1 2003-11-23 devnull if(argc==0){
95 bc7cb1a1 2003-11-23 devnull for(i=0;i<nchars;i++){
96 bc7cb1a1 2003-11-23 devnull put(i);
97 bc7cb1a1 2003-11-23 devnull if((i&7)==7)
98 bc7cb1a1 2003-11-23 devnull Bprint(&bin, "|\n");
99 bc7cb1a1 2003-11-23 devnull }
100 bc7cb1a1 2003-11-23 devnull }else{
101 bc7cb1a1 2003-11-23 devnull if(text==1)
102 bc7cb1a1 2003-11-23 devnull text=isnum(argv[0]);
103 bc7cb1a1 2003-11-23 devnull while(argc--)
104 bc7cb1a1 2003-11-23 devnull if(text)
105 bc7cb1a1 2003-11-23 devnull puttext(*argv++);
106 bc7cb1a1 2003-11-23 devnull else
107 bc7cb1a1 2003-11-23 devnull putnum(*argv++);
108 bc7cb1a1 2003-11-23 devnull }
109 bc7cb1a1 2003-11-23 devnull Bputc(&bin, '\n');
110 bc7cb1a1 2003-11-23 devnull exits(0);
111 bc7cb1a1 2003-11-23 devnull }
112 bc7cb1a1 2003-11-23 devnull void
113 bc7cb1a1 2003-11-23 devnull usage(void)
114 bc7cb1a1 2003-11-23 devnull {
115 bc7cb1a1 2003-11-23 devnull fprint(2, "usage: %s [-8] [-xod | -b8] [-ncst] [--] [text]\n", argv0);
116 bc7cb1a1 2003-11-23 devnull exits("usage");
117 bc7cb1a1 2003-11-23 devnull }
118 bc7cb1a1 2003-11-23 devnull void
119 bc7cb1a1 2003-11-23 devnull put(int i)
120 bc7cb1a1 2003-11-23 devnull {
121 bc7cb1a1 2003-11-23 devnull Bputc(&bin, '|');
122 bc7cb1a1 2003-11-23 devnull putn(i, ncol);
123 bc7cb1a1 2003-11-23 devnull Bprint(&bin, " %s", str[i]);
124 bc7cb1a1 2003-11-23 devnull }
125 bc7cb1a1 2003-11-23 devnull char dig[]="0123456789abcdefghijklmnopqrstuvwxyz";
126 bc7cb1a1 2003-11-23 devnull void
127 bc7cb1a1 2003-11-23 devnull putn(int n, int ndig)
128 bc7cb1a1 2003-11-23 devnull {
129 bc7cb1a1 2003-11-23 devnull if(ndig==0)
130 bc7cb1a1 2003-11-23 devnull return;
131 bc7cb1a1 2003-11-23 devnull putn(n/base, ndig-1);
132 bc7cb1a1 2003-11-23 devnull Bputc(&bin, dig[n%base]);
133 bc7cb1a1 2003-11-23 devnull }
134 bc7cb1a1 2003-11-23 devnull void
135 bc7cb1a1 2003-11-23 devnull puttext(char *s)
136 bc7cb1a1 2003-11-23 devnull {
137 bc7cb1a1 2003-11-23 devnull int n;
138 bc7cb1a1 2003-11-23 devnull n=btoi(s)&0377;
139 bc7cb1a1 2003-11-23 devnull if(strip)
140 bc7cb1a1 2003-11-23 devnull Bputc(&bin, n);
141 bc7cb1a1 2003-11-23 devnull else
142 bc7cb1a1 2003-11-23 devnull Bprint(&bin, "%s\n", str[n]);
143 bc7cb1a1 2003-11-23 devnull }
144 bc7cb1a1 2003-11-23 devnull void
145 bc7cb1a1 2003-11-23 devnull putnum(char *s)
146 bc7cb1a1 2003-11-23 devnull {
147 bc7cb1a1 2003-11-23 devnull while(*s){
148 bc7cb1a1 2003-11-23 devnull putn(*s++&0377, ncol);
149 bc7cb1a1 2003-11-23 devnull Bputc(&bin, '\n');
150 bc7cb1a1 2003-11-23 devnull }
151 bc7cb1a1 2003-11-23 devnull }
152 bc7cb1a1 2003-11-23 devnull int
153 bc7cb1a1 2003-11-23 devnull btoi(char *s)
154 bc7cb1a1 2003-11-23 devnull {
155 bc7cb1a1 2003-11-23 devnull int n;
156 bc7cb1a1 2003-11-23 devnull n=0;
157 bc7cb1a1 2003-11-23 devnull while(*s)
158 bc7cb1a1 2003-11-23 devnull n=n*base+value(*s++, 0);
159 bc7cb1a1 2003-11-23 devnull return(n);
160 bc7cb1a1 2003-11-23 devnull }
161 bc7cb1a1 2003-11-23 devnull int
162 bc7cb1a1 2003-11-23 devnull value(int c, int f)
163 bc7cb1a1 2003-11-23 devnull {
164 bc7cb1a1 2003-11-23 devnull char *s;
165 bc7cb1a1 2003-11-23 devnull for(s=dig; s<dig+base; s++)
166 bc7cb1a1 2003-11-23 devnull if(*s==c)
167 bc7cb1a1 2003-11-23 devnull return(s-dig);
168 bc7cb1a1 2003-11-23 devnull if(f)
169 bc7cb1a1 2003-11-23 devnull return(-1);
170 bc7cb1a1 2003-11-23 devnull fprint(2, "%s: bad input char %c\n", argv0, c);
171 bc7cb1a1 2003-11-23 devnull exits("bad");
172 bc7cb1a1 2003-11-23 devnull return 0; /* to keep ken happy */
173 bc7cb1a1 2003-11-23 devnull }
174 bc7cb1a1 2003-11-23 devnull int
175 bc7cb1a1 2003-11-23 devnull isnum(char *s)
176 bc7cb1a1 2003-11-23 devnull {
177 bc7cb1a1 2003-11-23 devnull while(*s)
178 bc7cb1a1 2003-11-23 devnull if(value(*s++, 1)==-1)
179 bc7cb1a1 2003-11-23 devnull return(0);
180 bc7cb1a1 2003-11-23 devnull return(1);
181 bc7cb1a1 2003-11-23 devnull }