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 unsigned char odata[16];
6 bc7cb1a1 2003-11-23 devnull unsigned char data[16];
7 bc7cb1a1 2003-11-23 devnull int ndata;
8 bc7cb1a1 2003-11-23 devnull unsigned long addr;
9 bc7cb1a1 2003-11-23 devnull int repeats;
10 bc7cb1a1 2003-11-23 devnull int swizzle;
11 bc7cb1a1 2003-11-23 devnull int flush;
12 bc7cb1a1 2003-11-23 devnull int abase=2;
13 bc7cb1a1 2003-11-23 devnull int xd(char *, int);
14 bc7cb1a1 2003-11-23 devnull void xprint(char *, long);
15 bc7cb1a1 2003-11-23 devnull void initarg(void), swizz(void);
16 bc7cb1a1 2003-11-23 devnull enum{
17 bc7cb1a1 2003-11-23 devnull Narg=10
18 bc7cb1a1 2003-11-23 devnull };
19 bc7cb1a1 2003-11-23 devnull typedef struct Arg Arg;
20 bc7cb1a1 2003-11-23 devnull typedef void fmtfn(char *);
21 bc7cb1a1 2003-11-23 devnull struct Arg
22 bc7cb1a1 2003-11-23 devnull {
23 bc7cb1a1 2003-11-23 devnull int ascii; /* 0==none, 1==ascii */
24 bc7cb1a1 2003-11-23 devnull int loglen; /* 0==1, 1==2, 2==4, 3==8 */
25 bc7cb1a1 2003-11-23 devnull int base; /* 0==8, 1==10, 2==16 */
26 bc7cb1a1 2003-11-23 devnull fmtfn *fn; /* function to call with data */
27 bc7cb1a1 2003-11-23 devnull char *afmt; /* format to use to print address */
28 bc7cb1a1 2003-11-23 devnull char *fmt; /* format to use to print data */
29 bc7cb1a1 2003-11-23 devnull }arg[Narg];
30 bc7cb1a1 2003-11-23 devnull int narg;
31 bc7cb1a1 2003-11-23 devnull
32 bc7cb1a1 2003-11-23 devnull fmtfn fmt0, fmt1, fmt2, fmt3, fmtc;
33 bc7cb1a1 2003-11-23 devnull fmtfn *fmt[4] = {
34 bc7cb1a1 2003-11-23 devnull fmt0,
35 bc7cb1a1 2003-11-23 devnull fmt1,
36 bc7cb1a1 2003-11-23 devnull fmt2,
37 bc7cb1a1 2003-11-23 devnull fmt3
38 bc7cb1a1 2003-11-23 devnull };
39 bc7cb1a1 2003-11-23 devnull
40 bc7cb1a1 2003-11-23 devnull char *dfmt[4][3] = {
41 bc7cb1a1 2003-11-23 devnull " %.3uo", " %.3ud", " %.2ux",
42 bc7cb1a1 2003-11-23 devnull " %.6uo", " %.5ud", " %.4ux",
43 bc7cb1a1 2003-11-23 devnull " %.11luo", " %.10lud", " %.8lux",
44 bc7cb1a1 2003-11-23 devnull " %.22lluo", " %.20llud", " %.16llux",
45 bc7cb1a1 2003-11-23 devnull };
46 bc7cb1a1 2003-11-23 devnull
47 bc7cb1a1 2003-11-23 devnull char *cfmt[3][3] = {
48 bc7cb1a1 2003-11-23 devnull " %c", " %c", " %c",
49 bc7cb1a1 2003-11-23 devnull " %.3s", " %.3s", " %.2s",
50 bc7cb1a1 2003-11-23 devnull " %.3uo", " %.3ud", " %.2ux",
51 bc7cb1a1 2003-11-23 devnull };
52 bc7cb1a1 2003-11-23 devnull
53 bc7cb1a1 2003-11-23 devnull char *afmt[2][3] = {
54 bc7cb1a1 2003-11-23 devnull "%.7luo ", "%.7lud ", "%.7lux ",
55 bc7cb1a1 2003-11-23 devnull "%7luo ", "%7lud ", "%7lux ",
56 bc7cb1a1 2003-11-23 devnull };
57 bc7cb1a1 2003-11-23 devnull
58 bc7cb1a1 2003-11-23 devnull Biobuf bin;
59 bc7cb1a1 2003-11-23 devnull Biobuf bout;
60 bc7cb1a1 2003-11-23 devnull
61 bc7cb1a1 2003-11-23 devnull void
62 bc7cb1a1 2003-11-23 devnull main(int argc, char *argv[])
63 bc7cb1a1 2003-11-23 devnull {
64 bc7cb1a1 2003-11-23 devnull int i, err;
65 bc7cb1a1 2003-11-23 devnull Arg *ap;
66 bc7cb1a1 2003-11-23 devnull
67 bc7cb1a1 2003-11-23 devnull Binit(&bout, 1, OWRITE);
68 bc7cb1a1 2003-11-23 devnull err = 0;
69 bc7cb1a1 2003-11-23 devnull ap = 0;
70 bc7cb1a1 2003-11-23 devnull while(argc>1 && argv[1][0]=='-' && argv[1][1]){
71 bc7cb1a1 2003-11-23 devnull --argc;
72 bc7cb1a1 2003-11-23 devnull argv++;
73 bc7cb1a1 2003-11-23 devnull argv[0]++;
74 bc7cb1a1 2003-11-23 devnull if(argv[0][0] == 'r'){
75 bc7cb1a1 2003-11-23 devnull repeats = 1;
76 bc7cb1a1 2003-11-23 devnull if(argv[0][1])
77 bc7cb1a1 2003-11-23 devnull goto Usage;
78 bc7cb1a1 2003-11-23 devnull continue;
79 bc7cb1a1 2003-11-23 devnull }
80 bc7cb1a1 2003-11-23 devnull if(argv[0][0] == 's'){
81 bc7cb1a1 2003-11-23 devnull swizzle = 1;
82 bc7cb1a1 2003-11-23 devnull if(argv[0][1])
83 bc7cb1a1 2003-11-23 devnull goto Usage;
84 bc7cb1a1 2003-11-23 devnull continue;
85 bc7cb1a1 2003-11-23 devnull }
86 bc7cb1a1 2003-11-23 devnull if(argv[0][0] == 'u'){
87 bc7cb1a1 2003-11-23 devnull flush = 1;
88 bc7cb1a1 2003-11-23 devnull if(argv[0][1])
89 bc7cb1a1 2003-11-23 devnull goto Usage;
90 bc7cb1a1 2003-11-23 devnull continue;
91 bc7cb1a1 2003-11-23 devnull }
92 bc7cb1a1 2003-11-23 devnull if(argv[0][0] == 'a'){
93 bc7cb1a1 2003-11-23 devnull argv[0]++;
94 bc7cb1a1 2003-11-23 devnull switch(argv[0][0]){
95 bc7cb1a1 2003-11-23 devnull case 'o':
96 bc7cb1a1 2003-11-23 devnull abase = 0;
97 bc7cb1a1 2003-11-23 devnull break;
98 bc7cb1a1 2003-11-23 devnull case 'd':
99 bc7cb1a1 2003-11-23 devnull abase = 1;
100 bc7cb1a1 2003-11-23 devnull break;
101 bc7cb1a1 2003-11-23 devnull case 'x':
102 bc7cb1a1 2003-11-23 devnull abase = 2;
103 bc7cb1a1 2003-11-23 devnull break;
104 bc7cb1a1 2003-11-23 devnull default:
105 bc7cb1a1 2003-11-23 devnull goto Usage;
106 bc7cb1a1 2003-11-23 devnull }
107 bc7cb1a1 2003-11-23 devnull if(argv[0][1])
108 bc7cb1a1 2003-11-23 devnull goto Usage;
109 bc7cb1a1 2003-11-23 devnull continue;
110 bc7cb1a1 2003-11-23 devnull }
111 bc7cb1a1 2003-11-23 devnull ap = &arg[narg];
112 bc7cb1a1 2003-11-23 devnull initarg();
113 bc7cb1a1 2003-11-23 devnull while(argv[0][0]){
114 bc7cb1a1 2003-11-23 devnull switch(argv[0][0]){
115 bc7cb1a1 2003-11-23 devnull case 'c':
116 bc7cb1a1 2003-11-23 devnull ap->ascii = 1;
117 bc7cb1a1 2003-11-23 devnull ap->loglen = 0;
118 bc7cb1a1 2003-11-23 devnull if(argv[0][1] || argv[0][-1]!='-')
119 bc7cb1a1 2003-11-23 devnull goto Usage;
120 bc7cb1a1 2003-11-23 devnull break;
121 bc7cb1a1 2003-11-23 devnull case 'o':
122 bc7cb1a1 2003-11-23 devnull ap->base = 0;
123 bc7cb1a1 2003-11-23 devnull break;
124 bc7cb1a1 2003-11-23 devnull case 'd':
125 bc7cb1a1 2003-11-23 devnull ap->base = 1;
126 bc7cb1a1 2003-11-23 devnull break;
127 bc7cb1a1 2003-11-23 devnull case 'x':
128 bc7cb1a1 2003-11-23 devnull ap->base = 2;
129 bc7cb1a1 2003-11-23 devnull break;
130 bc7cb1a1 2003-11-23 devnull case 'b':
131 bc7cb1a1 2003-11-23 devnull case '1':
132 bc7cb1a1 2003-11-23 devnull ap->loglen = 0;
133 bc7cb1a1 2003-11-23 devnull break;
134 bc7cb1a1 2003-11-23 devnull case 'w':
135 bc7cb1a1 2003-11-23 devnull case '2':
136 bc7cb1a1 2003-11-23 devnull ap->loglen = 1;
137 bc7cb1a1 2003-11-23 devnull break;
138 bc7cb1a1 2003-11-23 devnull case 'l':
139 bc7cb1a1 2003-11-23 devnull case '4':
140 bc7cb1a1 2003-11-23 devnull ap->loglen = 2;
141 bc7cb1a1 2003-11-23 devnull break;
142 bc7cb1a1 2003-11-23 devnull case 'v':
143 bc7cb1a1 2003-11-23 devnull case '8':
144 bc7cb1a1 2003-11-23 devnull ap->loglen = 3;
145 bc7cb1a1 2003-11-23 devnull break;
146 bc7cb1a1 2003-11-23 devnull default:
147 bc7cb1a1 2003-11-23 devnull Usage:
148 bc7cb1a1 2003-11-23 devnull fprint(2, "usage: xd [-u] [-r] [-s] [-a{odx}] [-c|{b1w2l4v8}{odx}] ... file ...\n");
149 bc7cb1a1 2003-11-23 devnull exits("usage");
150 bc7cb1a1 2003-11-23 devnull }
151 bc7cb1a1 2003-11-23 devnull argv[0]++;
152 bc7cb1a1 2003-11-23 devnull }
153 bc7cb1a1 2003-11-23 devnull if(ap->ascii)
154 bc7cb1a1 2003-11-23 devnull ap->fn = fmtc;
155 bc7cb1a1 2003-11-23 devnull else
156 bc7cb1a1 2003-11-23 devnull ap->fn = fmt[ap->loglen];
157 bc7cb1a1 2003-11-23 devnull ap->fmt = dfmt[ap->loglen][ap->base];
158 bc7cb1a1 2003-11-23 devnull ap->afmt = afmt[ap>arg][abase];
159 bc7cb1a1 2003-11-23 devnull }
160 bc7cb1a1 2003-11-23 devnull if(narg == 0)
161 bc7cb1a1 2003-11-23 devnull initarg();
162 bc7cb1a1 2003-11-23 devnull if(argc == 1)
163 bc7cb1a1 2003-11-23 devnull err = xd(0, 0);
164 bc7cb1a1 2003-11-23 devnull else if(argc == 2)
165 bc7cb1a1 2003-11-23 devnull err = xd(argv[1], 0);
166 bc7cb1a1 2003-11-23 devnull else for(i=1; i<argc; i++)
167 bc7cb1a1 2003-11-23 devnull err |= xd(argv[i], 1);
168 bc7cb1a1 2003-11-23 devnull exits(err? "error" : 0);
169 bc7cb1a1 2003-11-23 devnull }
170 bc7cb1a1 2003-11-23 devnull
171 bc7cb1a1 2003-11-23 devnull void
172 bc7cb1a1 2003-11-23 devnull initarg(void)
173 bc7cb1a1 2003-11-23 devnull {
174 bc7cb1a1 2003-11-23 devnull Arg *ap;
175 bc7cb1a1 2003-11-23 devnull
176 bc7cb1a1 2003-11-23 devnull ap = &arg[narg++];
177 bc7cb1a1 2003-11-23 devnull if(narg >= Narg){
178 bc7cb1a1 2003-11-23 devnull fprint(2, "xd: too many formats (max %d)\n", Narg);
179 bc7cb1a1 2003-11-23 devnull exits("usage");
180 bc7cb1a1 2003-11-23 devnull }
181 bc7cb1a1 2003-11-23 devnull ap->ascii = 0;
182 bc7cb1a1 2003-11-23 devnull ap->loglen = 2;
183 bc7cb1a1 2003-11-23 devnull ap->base = 2;
184 bc7cb1a1 2003-11-23 devnull ap->fn = fmt2;
185 bc7cb1a1 2003-11-23 devnull ap->fmt = dfmt[ap->loglen][ap->base];
186 bc7cb1a1 2003-11-23 devnull ap->afmt = afmt[narg>1][abase];
187 bc7cb1a1 2003-11-23 devnull }
188 bc7cb1a1 2003-11-23 devnull
189 bc7cb1a1 2003-11-23 devnull int
190 bc7cb1a1 2003-11-23 devnull xd(char *name, int title)
191 bc7cb1a1 2003-11-23 devnull {
192 bc7cb1a1 2003-11-23 devnull int fd;
193 bc7cb1a1 2003-11-23 devnull int i, star;
194 bc7cb1a1 2003-11-23 devnull Arg *ap;
195 bc7cb1a1 2003-11-23 devnull Biobuf *bp;
196 bc7cb1a1 2003-11-23 devnull
197 bc7cb1a1 2003-11-23 devnull fd = 0;
198 bc7cb1a1 2003-11-23 devnull if(name){
199 bc7cb1a1 2003-11-23 devnull bp = Bopen(name, OREAD);
200 bc7cb1a1 2003-11-23 devnull if(bp == 0){
201 bc7cb1a1 2003-11-23 devnull fprint(2, "xd: can't open %s\n", name);
202 bc7cb1a1 2003-11-23 devnull return 1;
203 bc7cb1a1 2003-11-23 devnull }
204 bc7cb1a1 2003-11-23 devnull }else{
205 bc7cb1a1 2003-11-23 devnull bp = &bin;
206 bc7cb1a1 2003-11-23 devnull Binit(bp, fd, OREAD);
207 bc7cb1a1 2003-11-23 devnull }
208 bc7cb1a1 2003-11-23 devnull if(title)
209 bc7cb1a1 2003-11-23 devnull xprint("%s\n", (long)name);
210 bc7cb1a1 2003-11-23 devnull addr = 0;
211 bc7cb1a1 2003-11-23 devnull star = 0;
212 bc7cb1a1 2003-11-23 devnull while((ndata=Bread(bp, data, 16)) >= 0){
213 bc7cb1a1 2003-11-23 devnull if(ndata < 16)
214 bc7cb1a1 2003-11-23 devnull for(i=ndata; i<16; i++)
215 bc7cb1a1 2003-11-23 devnull data[i] = 0;
216 bc7cb1a1 2003-11-23 devnull if(swizzle)
217 bc7cb1a1 2003-11-23 devnull swizz();
218 bc7cb1a1 2003-11-23 devnull if(ndata==16 && repeats){
219 bc7cb1a1 2003-11-23 devnull if(addr>0 && data[0]==odata[0]){
220 bc7cb1a1 2003-11-23 devnull for(i=1; i<16; i++)
221 bc7cb1a1 2003-11-23 devnull if(data[i] != odata[i])
222 bc7cb1a1 2003-11-23 devnull break;
223 bc7cb1a1 2003-11-23 devnull if(i == 16){
224 bc7cb1a1 2003-11-23 devnull addr += 16;
225 bc7cb1a1 2003-11-23 devnull if(star == 0){
226 bc7cb1a1 2003-11-23 devnull star++;
227 bc7cb1a1 2003-11-23 devnull xprint("*\n", 0);
228 bc7cb1a1 2003-11-23 devnull }
229 bc7cb1a1 2003-11-23 devnull continue;
230 bc7cb1a1 2003-11-23 devnull }
231 bc7cb1a1 2003-11-23 devnull }
232 bc7cb1a1 2003-11-23 devnull for(i=0; i<16; i++)
233 bc7cb1a1 2003-11-23 devnull odata[i] = data[i];
234 bc7cb1a1 2003-11-23 devnull star = 0;
235 bc7cb1a1 2003-11-23 devnull }
236 bc7cb1a1 2003-11-23 devnull for(ap=arg; ap<&arg[narg]; ap++){
237 bc7cb1a1 2003-11-23 devnull xprint(ap->afmt, addr);
238 bc7cb1a1 2003-11-23 devnull (*ap->fn)(ap->fmt);
239 bc7cb1a1 2003-11-23 devnull xprint("\n", 0);
240 bc7cb1a1 2003-11-23 devnull if(flush)
241 bc7cb1a1 2003-11-23 devnull Bflush(&bout);
242 bc7cb1a1 2003-11-23 devnull }
243 bc7cb1a1 2003-11-23 devnull addr += ndata;
244 bc7cb1a1 2003-11-23 devnull if(ndata<16){
245 bc7cb1a1 2003-11-23 devnull xprint(afmt[0][abase], addr);
246 bc7cb1a1 2003-11-23 devnull xprint("\n", 0);
247 bc7cb1a1 2003-11-23 devnull if(flush)
248 bc7cb1a1 2003-11-23 devnull Bflush(&bout);
249 bc7cb1a1 2003-11-23 devnull break;
250 bc7cb1a1 2003-11-23 devnull }
251 bc7cb1a1 2003-11-23 devnull }
252 bc7cb1a1 2003-11-23 devnull Bterm(bp);
253 bc7cb1a1 2003-11-23 devnull return 0;
254 bc7cb1a1 2003-11-23 devnull }
255 bc7cb1a1 2003-11-23 devnull
256 bc7cb1a1 2003-11-23 devnull void
257 bc7cb1a1 2003-11-23 devnull swizz(void)
258 bc7cb1a1 2003-11-23 devnull {
259 bc7cb1a1 2003-11-23 devnull uchar *p, *q;
260 bc7cb1a1 2003-11-23 devnull int i;
261 bc7cb1a1 2003-11-23 devnull uchar swdata[16];
262 bc7cb1a1 2003-11-23 devnull
263 bc7cb1a1 2003-11-23 devnull p = data;
264 bc7cb1a1 2003-11-23 devnull q = swdata;
265 bc7cb1a1 2003-11-23 devnull for(i=0; i<16; i++)
266 bc7cb1a1 2003-11-23 devnull *q++ = *p++;
267 bc7cb1a1 2003-11-23 devnull p = data;
268 bc7cb1a1 2003-11-23 devnull q = swdata;
269 bc7cb1a1 2003-11-23 devnull for(i=0; i<4; i++){
270 bc7cb1a1 2003-11-23 devnull p[0] = q[3];
271 bc7cb1a1 2003-11-23 devnull p[1] = q[2];
272 bc7cb1a1 2003-11-23 devnull p[2] = q[1];
273 bc7cb1a1 2003-11-23 devnull p[3] = q[0];
274 bc7cb1a1 2003-11-23 devnull p += 4;
275 bc7cb1a1 2003-11-23 devnull q += 4;
276 bc7cb1a1 2003-11-23 devnull }
277 bc7cb1a1 2003-11-23 devnull }
278 bc7cb1a1 2003-11-23 devnull
279 bc7cb1a1 2003-11-23 devnull void
280 bc7cb1a1 2003-11-23 devnull fmt0(char *f)
281 bc7cb1a1 2003-11-23 devnull {
282 bc7cb1a1 2003-11-23 devnull int i;
283 bc7cb1a1 2003-11-23 devnull for(i=0; i<ndata; i++)
284 bc7cb1a1 2003-11-23 devnull xprint(f, data[i]);
285 bc7cb1a1 2003-11-23 devnull }
286 bc7cb1a1 2003-11-23 devnull
287 bc7cb1a1 2003-11-23 devnull void
288 bc7cb1a1 2003-11-23 devnull fmt1(char *f)
289 bc7cb1a1 2003-11-23 devnull {
290 bc7cb1a1 2003-11-23 devnull int i;
291 bc7cb1a1 2003-11-23 devnull for(i=0; i<ndata; i+=sizeof(unsigned short))
292 bc7cb1a1 2003-11-23 devnull xprint(f, (data[i]<<8)|data[i+1]);
293 bc7cb1a1 2003-11-23 devnull }
294 bc7cb1a1 2003-11-23 devnull
295 bc7cb1a1 2003-11-23 devnull void
296 bc7cb1a1 2003-11-23 devnull fmt2(char *f)
297 bc7cb1a1 2003-11-23 devnull {
298 bc7cb1a1 2003-11-23 devnull int i;
299 bc7cb1a1 2003-11-23 devnull for(i=0; i<ndata; i+=sizeof(unsigned long))
300 bc7cb1a1 2003-11-23 devnull xprint(f, (data[i]<<24)|(data[i+1]<<16)|(data[i+2]<<8)|data[i+3]);
301 bc7cb1a1 2003-11-23 devnull }
302 bc7cb1a1 2003-11-23 devnull
303 bc7cb1a1 2003-11-23 devnull void
304 bc7cb1a1 2003-11-23 devnull fmt3(char *f)
305 bc7cb1a1 2003-11-23 devnull {
306 bc7cb1a1 2003-11-23 devnull int i;
307 bc7cb1a1 2003-11-23 devnull unsigned long long v;
308 bc7cb1a1 2003-11-23 devnull for(i=0; i<ndata; i+=sizeof(unsigned long long)){
309 bc7cb1a1 2003-11-23 devnull v = (data[i]<<24)|(data[i+1]<<16)|(data[i+2]<<8)|data[i+3];
310 bc7cb1a1 2003-11-23 devnull v <<= 32;
311 bc7cb1a1 2003-11-23 devnull v |= (data[i+4]<<24)|(data[i+1+4]<<16)|(data[i+2+4]<<8)|data[i+3+4];
312 bc7cb1a1 2003-11-23 devnull if(Bprint(&bout, f, v)<0){
313 bc7cb1a1 2003-11-23 devnull fprint(2, "xd: i/o error\n");
314 bc7cb1a1 2003-11-23 devnull exits("i/o error");
315 bc7cb1a1 2003-11-23 devnull }
316 bc7cb1a1 2003-11-23 devnull }
317 bc7cb1a1 2003-11-23 devnull }
318 bc7cb1a1 2003-11-23 devnull
319 bc7cb1a1 2003-11-23 devnull void
320 bc7cb1a1 2003-11-23 devnull fmtc(char *f)
321 bc7cb1a1 2003-11-23 devnull {
322 bc7cb1a1 2003-11-23 devnull int i;
323 bc7cb1a1 2003-11-23 devnull
324 bc7cb1a1 2003-11-23 devnull USED(f);
325 bc7cb1a1 2003-11-23 devnull for(i=0; i<ndata; i++)
326 bc7cb1a1 2003-11-23 devnull switch(data[i]){
327 bc7cb1a1 2003-11-23 devnull case '\t':
328 bc7cb1a1 2003-11-23 devnull xprint(cfmt[1][2], (long)"\\t");
329 bc7cb1a1 2003-11-23 devnull break;
330 bc7cb1a1 2003-11-23 devnull case '\r':
331 bc7cb1a1 2003-11-23 devnull xprint(cfmt[1][2], (long)"\\r");
332 bc7cb1a1 2003-11-23 devnull break;
333 bc7cb1a1 2003-11-23 devnull case '\n':
334 bc7cb1a1 2003-11-23 devnull xprint(cfmt[1][2], (long)"\\n");
335 bc7cb1a1 2003-11-23 devnull break;
336 bc7cb1a1 2003-11-23 devnull case '\b':
337 bc7cb1a1 2003-11-23 devnull xprint(cfmt[1][2], (long)"\\b");
338 bc7cb1a1 2003-11-23 devnull break;
339 bc7cb1a1 2003-11-23 devnull default:
340 bc7cb1a1 2003-11-23 devnull if(data[i]>=0x7F || ' '>data[i])
341 bc7cb1a1 2003-11-23 devnull xprint(cfmt[2][2], data[i]);
342 bc7cb1a1 2003-11-23 devnull else
343 bc7cb1a1 2003-11-23 devnull xprint(cfmt[0][2], data[i]);
344 bc7cb1a1 2003-11-23 devnull break;
345 bc7cb1a1 2003-11-23 devnull }
346 bc7cb1a1 2003-11-23 devnull }
347 bc7cb1a1 2003-11-23 devnull
348 bc7cb1a1 2003-11-23 devnull void
349 bc7cb1a1 2003-11-23 devnull xprint(char *fmt, long d)
350 bc7cb1a1 2003-11-23 devnull {
351 bc7cb1a1 2003-11-23 devnull if(Bprint(&bout, fmt, d)<0){
352 bc7cb1a1 2003-11-23 devnull fprint(2, "xd: i/o error\n");
353 bc7cb1a1 2003-11-23 devnull exits("i/o error");
354 bc7cb1a1 2003-11-23 devnull }
355 bc7cb1a1 2003-11-23 devnull }