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
4 11a3ce57 2011-08-16 rsc #define BIG ((1UL<<31)-1)
5 11a3ce57 2011-08-16 rsc #define VBIG ((1ULL<<63)-1)
6 bc7cb1a1 2003-11-23 devnull #define LCASE (1<<0)
7 bc7cb1a1 2003-11-23 devnull #define UCASE (1<<1)
8 bc7cb1a1 2003-11-23 devnull #define SWAB (1<<2)
9 bc7cb1a1 2003-11-23 devnull #define NERR (1<<3)
10 bc7cb1a1 2003-11-23 devnull #define SYNC (1<<4)
11 11a3ce57 2011-08-16 rsc
12 bc7cb1a1 2003-11-23 devnull int cflag;
13 bc7cb1a1 2003-11-23 devnull int fflag;
14 11a3ce57 2011-08-16 rsc
15 bc7cb1a1 2003-11-23 devnull char *string;
16 bc7cb1a1 2003-11-23 devnull char *ifile;
17 bc7cb1a1 2003-11-23 devnull char *ofile;
18 bc7cb1a1 2003-11-23 devnull char *ibuf;
19 bc7cb1a1 2003-11-23 devnull char *obuf;
20 11a3ce57 2011-08-16 rsc
21 bc7cb1a1 2003-11-23 devnull vlong skip;
22 bc7cb1a1 2003-11-23 devnull vlong oseekn;
23 bc7cb1a1 2003-11-23 devnull vlong iseekn;
24 bc7cb1a1 2003-11-23 devnull vlong count;
25 11a3ce57 2011-08-16 rsc
26 bc7cb1a1 2003-11-23 devnull long files = 1;
27 bc7cb1a1 2003-11-23 devnull long ibs = 512;
28 bc7cb1a1 2003-11-23 devnull long obs = 512;
29 bc7cb1a1 2003-11-23 devnull long bs;
30 bc7cb1a1 2003-11-23 devnull long cbs;
31 bc7cb1a1 2003-11-23 devnull long ibc;
32 bc7cb1a1 2003-11-23 devnull long obc;
33 bc7cb1a1 2003-11-23 devnull long cbc;
34 bc7cb1a1 2003-11-23 devnull long nifr;
35 bc7cb1a1 2003-11-23 devnull long nipr;
36 bc7cb1a1 2003-11-23 devnull long nofr;
37 bc7cb1a1 2003-11-23 devnull long nopr;
38 bc7cb1a1 2003-11-23 devnull long ntrunc;
39 11a3ce57 2011-08-16 rsc
40 bc7cb1a1 2003-11-23 devnull int dotrunc = 1;
41 bc7cb1a1 2003-11-23 devnull int ibf;
42 bc7cb1a1 2003-11-23 devnull int obf;
43 11a3ce57 2011-08-16 rsc
44 bc7cb1a1 2003-11-23 devnull char *op;
45 bc7cb1a1 2003-11-23 devnull int nspace;
46 11a3ce57 2011-08-16 rsc
47 bc7cb1a1 2003-11-23 devnull uchar etoa[256];
48 bc7cb1a1 2003-11-23 devnull uchar atoe[256];
49 bc7cb1a1 2003-11-23 devnull uchar atoibm[256];
50 bc7cb1a1 2003-11-23 devnull
51 11a3ce57 2011-08-16 rsc int quiet;
52 11a3ce57 2011-08-16 rsc
53 bc7cb1a1 2003-11-23 devnull void flsh(void);
54 bc7cb1a1 2003-11-23 devnull int match(char *s);
55 11a3ce57 2011-08-16 rsc vlong number(vlong big);
56 bc7cb1a1 2003-11-23 devnull void cnull(int cc);
57 bc7cb1a1 2003-11-23 devnull void null(int c);
58 bc7cb1a1 2003-11-23 devnull void ascii(int cc);
59 bc7cb1a1 2003-11-23 devnull void unblock(int cc);
60 bc7cb1a1 2003-11-23 devnull void ebcdic(int cc);
61 bc7cb1a1 2003-11-23 devnull void ibm(int cc);
62 bc7cb1a1 2003-11-23 devnull void block(int cc);
63 11a3ce57 2011-08-16 rsc void term(char*);
64 bc7cb1a1 2003-11-23 devnull void stats(void);
65 bc7cb1a1 2003-11-23 devnull
66 bc7cb1a1 2003-11-23 devnull #define iskey(s) ((key[0] == '-') && (strcmp(key+1, s) == 0))
67 bc7cb1a1 2003-11-23 devnull
68 11a3ce57 2011-08-16 rsc int
69 bc7cb1a1 2003-11-23 devnull main(int argc, char *argv[])
70 bc7cb1a1 2003-11-23 devnull {
71 bc7cb1a1 2003-11-23 devnull void (*conv)(int);
72 bc7cb1a1 2003-11-23 devnull char *ip;
73 bc7cb1a1 2003-11-23 devnull char *key;
74 bc7cb1a1 2003-11-23 devnull int a, c;
75 bc7cb1a1 2003-11-23 devnull
76 bc7cb1a1 2003-11-23 devnull conv = null;
77 bc7cb1a1 2003-11-23 devnull for(c=1; c<argc; c++) {
78 bc7cb1a1 2003-11-23 devnull key = argv[c++];
79 bc7cb1a1 2003-11-23 devnull if(c >= argc){
80 bc7cb1a1 2003-11-23 devnull fprint(2, "dd: arg %s needs a value\n", key);
81 bc7cb1a1 2003-11-23 devnull exits("arg");
82 bc7cb1a1 2003-11-23 devnull }
83 bc7cb1a1 2003-11-23 devnull string = argv[c];
84 bc7cb1a1 2003-11-23 devnull if(iskey("ibs")) {
85 bc7cb1a1 2003-11-23 devnull ibs = number(BIG);
86 bc7cb1a1 2003-11-23 devnull continue;
87 bc7cb1a1 2003-11-23 devnull }
88 bc7cb1a1 2003-11-23 devnull if(iskey("obs")) {
89 bc7cb1a1 2003-11-23 devnull obs = number(BIG);
90 bc7cb1a1 2003-11-23 devnull continue;
91 bc7cb1a1 2003-11-23 devnull }
92 bc7cb1a1 2003-11-23 devnull if(iskey("cbs")) {
93 bc7cb1a1 2003-11-23 devnull cbs = number(BIG);
94 bc7cb1a1 2003-11-23 devnull continue;
95 bc7cb1a1 2003-11-23 devnull }
96 bc7cb1a1 2003-11-23 devnull if(iskey("bs")) {
97 bc7cb1a1 2003-11-23 devnull bs = number(BIG);
98 bc7cb1a1 2003-11-23 devnull continue;
99 bc7cb1a1 2003-11-23 devnull }
100 bc7cb1a1 2003-11-23 devnull if(iskey("if")) {
101 bc7cb1a1 2003-11-23 devnull ifile = string;
102 bc7cb1a1 2003-11-23 devnull continue;
103 bc7cb1a1 2003-11-23 devnull }
104 bc7cb1a1 2003-11-23 devnull if(iskey("of")) {
105 bc7cb1a1 2003-11-23 devnull ofile = string;
106 bc7cb1a1 2003-11-23 devnull continue;
107 bc7cb1a1 2003-11-23 devnull }
108 bc7cb1a1 2003-11-23 devnull if(iskey("trunc")) {
109 bc7cb1a1 2003-11-23 devnull dotrunc = number(BIG);
110 bc7cb1a1 2003-11-23 devnull continue;
111 bc7cb1a1 2003-11-23 devnull }
112 11a3ce57 2011-08-16 rsc if(iskey("quiet")) {
113 11a3ce57 2011-08-16 rsc quiet = number(BIG);
114 11a3ce57 2011-08-16 rsc continue;
115 11a3ce57 2011-08-16 rsc }
116 bc7cb1a1 2003-11-23 devnull if(iskey("skip")) {
117 11a3ce57 2011-08-16 rsc skip = number(VBIG);
118 bc7cb1a1 2003-11-23 devnull continue;
119 bc7cb1a1 2003-11-23 devnull }
120 bc7cb1a1 2003-11-23 devnull if(iskey("seek") || iskey("oseek")) {
121 11a3ce57 2011-08-16 rsc oseekn = number(VBIG);
122 bc7cb1a1 2003-11-23 devnull continue;
123 bc7cb1a1 2003-11-23 devnull }
124 bc7cb1a1 2003-11-23 devnull if(iskey("iseek")) {
125 11a3ce57 2011-08-16 rsc iseekn = number(VBIG);
126 bc7cb1a1 2003-11-23 devnull continue;
127 bc7cb1a1 2003-11-23 devnull }
128 bc7cb1a1 2003-11-23 devnull if(iskey("count")) {
129 11a3ce57 2011-08-16 rsc count = number(VBIG);
130 bc7cb1a1 2003-11-23 devnull continue;
131 bc7cb1a1 2003-11-23 devnull }
132 bc7cb1a1 2003-11-23 devnull if(iskey("files")) {
133 bc7cb1a1 2003-11-23 devnull files = number(BIG);
134 bc7cb1a1 2003-11-23 devnull continue;
135 bc7cb1a1 2003-11-23 devnull }
136 bc7cb1a1 2003-11-23 devnull if(iskey("conv")) {
137 bc7cb1a1 2003-11-23 devnull cloop:
138 bc7cb1a1 2003-11-23 devnull if(match(","))
139 bc7cb1a1 2003-11-23 devnull goto cloop;
140 bc7cb1a1 2003-11-23 devnull if(*string == '\0')
141 bc7cb1a1 2003-11-23 devnull continue;
142 bc7cb1a1 2003-11-23 devnull if(match("ebcdic")) {
143 bc7cb1a1 2003-11-23 devnull conv = ebcdic;
144 bc7cb1a1 2003-11-23 devnull goto cloop;
145 bc7cb1a1 2003-11-23 devnull }
146 bc7cb1a1 2003-11-23 devnull if(match("ibm")) {
147 bc7cb1a1 2003-11-23 devnull conv = ibm;
148 bc7cb1a1 2003-11-23 devnull goto cloop;
149 bc7cb1a1 2003-11-23 devnull }
150 bc7cb1a1 2003-11-23 devnull if(match("ascii")) {
151 bc7cb1a1 2003-11-23 devnull conv = ascii;
152 bc7cb1a1 2003-11-23 devnull goto cloop;
153 bc7cb1a1 2003-11-23 devnull }
154 bc7cb1a1 2003-11-23 devnull if(match("block")) {
155 bc7cb1a1 2003-11-23 devnull conv = block;
156 bc7cb1a1 2003-11-23 devnull goto cloop;
157 bc7cb1a1 2003-11-23 devnull }
158 bc7cb1a1 2003-11-23 devnull if(match("unblock")) {
159 bc7cb1a1 2003-11-23 devnull conv = unblock;
160 bc7cb1a1 2003-11-23 devnull goto cloop;
161 bc7cb1a1 2003-11-23 devnull }
162 bc7cb1a1 2003-11-23 devnull if(match("lcase")) {
163 bc7cb1a1 2003-11-23 devnull cflag |= LCASE;
164 bc7cb1a1 2003-11-23 devnull goto cloop;
165 bc7cb1a1 2003-11-23 devnull }
166 bc7cb1a1 2003-11-23 devnull if(match("ucase")) {
167 bc7cb1a1 2003-11-23 devnull cflag |= UCASE;
168 bc7cb1a1 2003-11-23 devnull goto cloop;
169 bc7cb1a1 2003-11-23 devnull }
170 bc7cb1a1 2003-11-23 devnull if(match("swab")) {
171 bc7cb1a1 2003-11-23 devnull cflag |= SWAB;
172 bc7cb1a1 2003-11-23 devnull goto cloop;
173 bc7cb1a1 2003-11-23 devnull }
174 bc7cb1a1 2003-11-23 devnull if(match("noerror")) {
175 bc7cb1a1 2003-11-23 devnull cflag |= NERR;
176 bc7cb1a1 2003-11-23 devnull goto cloop;
177 bc7cb1a1 2003-11-23 devnull }
178 bc7cb1a1 2003-11-23 devnull if(match("sync")) {
179 bc7cb1a1 2003-11-23 devnull cflag |= SYNC;
180 bc7cb1a1 2003-11-23 devnull goto cloop;
181 bc7cb1a1 2003-11-23 devnull }
182 11a3ce57 2011-08-16 rsc fprint(2, "dd: bad conv %s\n", argv[c]);
183 11a3ce57 2011-08-16 rsc exits("arg");
184 bc7cb1a1 2003-11-23 devnull }
185 bc7cb1a1 2003-11-23 devnull fprint(2, "dd: bad arg: %s\n", key);
186 bc7cb1a1 2003-11-23 devnull exits("arg");
187 bc7cb1a1 2003-11-23 devnull }
188 bc7cb1a1 2003-11-23 devnull if(conv == null && cflag&(LCASE|UCASE))
189 bc7cb1a1 2003-11-23 devnull conv = cnull;
190 bc7cb1a1 2003-11-23 devnull if(ifile)
191 bc7cb1a1 2003-11-23 devnull ibf = open(ifile, 0);
192 bc7cb1a1 2003-11-23 devnull else
193 bc7cb1a1 2003-11-23 devnull ibf = dup(0, -1);
194 bc7cb1a1 2003-11-23 devnull if(ibf < 0) {
195 bc7cb1a1 2003-11-23 devnull fprint(2, "dd: open %s: %r\n", ifile);
196 bc7cb1a1 2003-11-23 devnull exits("open");
197 bc7cb1a1 2003-11-23 devnull }
198 bc7cb1a1 2003-11-23 devnull if(ofile){
199 bc7cb1a1 2003-11-23 devnull if(dotrunc)
200 bc7cb1a1 2003-11-23 devnull obf = create(ofile, 1, 0664);
201 bc7cb1a1 2003-11-23 devnull else
202 bc7cb1a1 2003-11-23 devnull obf = open(ofile, 1);
203 bc7cb1a1 2003-11-23 devnull if(obf < 0) {
204 bc7cb1a1 2003-11-23 devnull fprint(2, "dd: create %s: %r\n", ofile);
205 bc7cb1a1 2003-11-23 devnull exits("create");
206 bc7cb1a1 2003-11-23 devnull }
207 bc7cb1a1 2003-11-23 devnull }else{
208 bc7cb1a1 2003-11-23 devnull obf = dup(1, -1);
209 bc7cb1a1 2003-11-23 devnull if(obf < 0) {
210 bc7cb1a1 2003-11-23 devnull fprint(2, "dd: can't dup file descriptor: %s: %r\n", ofile);
211 bc7cb1a1 2003-11-23 devnull exits("dup");
212 bc7cb1a1 2003-11-23 devnull }
213 bc7cb1a1 2003-11-23 devnull }
214 bc7cb1a1 2003-11-23 devnull if(bs)
215 bc7cb1a1 2003-11-23 devnull ibs = obs = bs;
216 bc7cb1a1 2003-11-23 devnull if(ibs == obs && conv == null)
217 bc7cb1a1 2003-11-23 devnull fflag++;
218 bc7cb1a1 2003-11-23 devnull if(ibs == 0 || obs == 0) {
219 bc7cb1a1 2003-11-23 devnull fprint(2, "dd: counts: cannot be zero\n");
220 bc7cb1a1 2003-11-23 devnull exits("counts");
221 bc7cb1a1 2003-11-23 devnull }
222 310ae033 2017-01-06 rsc ibuf = malloc(ibs);
223 bc7cb1a1 2003-11-23 devnull if(fflag)
224 bc7cb1a1 2003-11-23 devnull obuf = ibuf;
225 bc7cb1a1 2003-11-23 devnull else
226 310ae033 2017-01-06 rsc obuf = malloc(obs);
227 310ae033 2017-01-06 rsc if(ibuf == (char *)0 || obuf == (char *)0) {
228 bc7cb1a1 2003-11-23 devnull fprint(2, "dd: not enough memory: %r\n");
229 bc7cb1a1 2003-11-23 devnull exits("memory");
230 bc7cb1a1 2003-11-23 devnull }
231 bc7cb1a1 2003-11-23 devnull ibc = 0;
232 bc7cb1a1 2003-11-23 devnull obc = 0;
233 bc7cb1a1 2003-11-23 devnull cbc = 0;
234 bc7cb1a1 2003-11-23 devnull op = obuf;
235 bc7cb1a1 2003-11-23 devnull
236 bc7cb1a1 2003-11-23 devnull /*
237 bc7cb1a1 2003-11-23 devnull if(signal(SIGINT, SIG_IGN) != SIG_IGN)
238 bc7cb1a1 2003-11-23 devnull signal(SIGINT, term);
239 bc7cb1a1 2003-11-23 devnull */
240 bc7cb1a1 2003-11-23 devnull seek(obf, obs*oseekn, 1);
241 bc7cb1a1 2003-11-23 devnull seek(ibf, ibs*iseekn, 1);
242 bc7cb1a1 2003-11-23 devnull while(skip) {
243 bc7cb1a1 2003-11-23 devnull read(ibf, ibuf, ibs);
244 bc7cb1a1 2003-11-23 devnull skip--;
245 bc7cb1a1 2003-11-23 devnull }
246 bc7cb1a1 2003-11-23 devnull
247 bc7cb1a1 2003-11-23 devnull ip = 0;
248 bc7cb1a1 2003-11-23 devnull loop:
249 bc7cb1a1 2003-11-23 devnull if(ibc-- == 0) {
250 bc7cb1a1 2003-11-23 devnull ibc = 0;
251 bc7cb1a1 2003-11-23 devnull if(count==0 || nifr+nipr!=count) {
252 bc7cb1a1 2003-11-23 devnull if(cflag&(NERR|SYNC))
253 bc7cb1a1 2003-11-23 devnull for(ip=ibuf+ibs; ip>ibuf;)
254 bc7cb1a1 2003-11-23 devnull *--ip = 0;
255 bc7cb1a1 2003-11-23 devnull ibc = read(ibf, ibuf, ibs);
256 bc7cb1a1 2003-11-23 devnull }
257 bc7cb1a1 2003-11-23 devnull if(ibc == -1) {
258 bc7cb1a1 2003-11-23 devnull perror("read");
259 bc7cb1a1 2003-11-23 devnull if((cflag&NERR) == 0) {
260 bc7cb1a1 2003-11-23 devnull flsh();
261 11a3ce57 2011-08-16 rsc term("errors");
262 bc7cb1a1 2003-11-23 devnull }
263 bc7cb1a1 2003-11-23 devnull ibc = 0;
264 bc7cb1a1 2003-11-23 devnull for(c=0; c<ibs; c++)
265 bc7cb1a1 2003-11-23 devnull if(ibuf[c] != 0)
266 11a3ce57 2011-08-16 rsc ibc = c+1;
267 11a3ce57 2011-08-16 rsc seek(ibf, ibs, 1);
268 11a3ce57 2011-08-16 rsc stats();
269 11a3ce57 2011-08-16 rsc }else if(ibc == 0 && --files<=0) {
270 bc7cb1a1 2003-11-23 devnull flsh();
271 11a3ce57 2011-08-16 rsc term(nil);
272 bc7cb1a1 2003-11-23 devnull }
273 bc7cb1a1 2003-11-23 devnull if(ibc != ibs) {
274 bc7cb1a1 2003-11-23 devnull nipr++;
275 bc7cb1a1 2003-11-23 devnull if(cflag&SYNC)
276 bc7cb1a1 2003-11-23 devnull ibc = ibs;
277 bc7cb1a1 2003-11-23 devnull } else
278 bc7cb1a1 2003-11-23 devnull nifr++;
279 bc7cb1a1 2003-11-23 devnull ip = ibuf;
280 bc7cb1a1 2003-11-23 devnull c = (ibc>>1) & ~1;
281 bc7cb1a1 2003-11-23 devnull if(cflag&SWAB && c)
282 bc7cb1a1 2003-11-23 devnull do {
283 bc7cb1a1 2003-11-23 devnull a = *ip++;
284 bc7cb1a1 2003-11-23 devnull ip[-1] = *ip;
285 bc7cb1a1 2003-11-23 devnull *ip++ = a;
286 bc7cb1a1 2003-11-23 devnull } while(--c);
287 bc7cb1a1 2003-11-23 devnull ip = ibuf;
288 bc7cb1a1 2003-11-23 devnull if(fflag) {
289 bc7cb1a1 2003-11-23 devnull obc = ibc;
290 bc7cb1a1 2003-11-23 devnull flsh();
291 bc7cb1a1 2003-11-23 devnull ibc = 0;
292 bc7cb1a1 2003-11-23 devnull }
293 bc7cb1a1 2003-11-23 devnull goto loop;
294 bc7cb1a1 2003-11-23 devnull }
295 bc7cb1a1 2003-11-23 devnull c = 0;
296 bc7cb1a1 2003-11-23 devnull c |= *ip++;
297 bc7cb1a1 2003-11-23 devnull c &= 0377;
298 bc7cb1a1 2003-11-23 devnull (*conv)(c);
299 bc7cb1a1 2003-11-23 devnull goto loop;
300 a59b2ede 2011-09-19 rsc
301 a59b2ede 2011-09-19 rsc return 0; // shut up apple gcc
302 bc7cb1a1 2003-11-23 devnull }
303 bc7cb1a1 2003-11-23 devnull
304 bc7cb1a1 2003-11-23 devnull void
305 bc7cb1a1 2003-11-23 devnull flsh(void)
306 bc7cb1a1 2003-11-23 devnull {
307 bc7cb1a1 2003-11-23 devnull int c;
308 bc7cb1a1 2003-11-23 devnull
309 bc7cb1a1 2003-11-23 devnull if(obc) {
310 11a3ce57 2011-08-16 rsc /* don't perror dregs of previous errors on a short write */
311 11a3ce57 2011-08-16 rsc werrstr("");
312 bc7cb1a1 2003-11-23 devnull c = write(obf, obuf, obc);
313 bc7cb1a1 2003-11-23 devnull if(c != obc) {
314 bc7cb1a1 2003-11-23 devnull if(c > 0)
315 bc7cb1a1 2003-11-23 devnull ++nopr;
316 bc7cb1a1 2003-11-23 devnull perror("write");
317 11a3ce57 2011-08-16 rsc term("errors");
318 bc7cb1a1 2003-11-23 devnull }
319 bc7cb1a1 2003-11-23 devnull if(obc == obs)
320 bc7cb1a1 2003-11-23 devnull nofr++;
321 bc7cb1a1 2003-11-23 devnull else
322 bc7cb1a1 2003-11-23 devnull nopr++;
323 bc7cb1a1 2003-11-23 devnull obc = 0;
324 bc7cb1a1 2003-11-23 devnull }
325 bc7cb1a1 2003-11-23 devnull }
326 bc7cb1a1 2003-11-23 devnull
327 bc7cb1a1 2003-11-23 devnull int
328 bc7cb1a1 2003-11-23 devnull match(char *s)
329 bc7cb1a1 2003-11-23 devnull {
330 bc7cb1a1 2003-11-23 devnull char *cs;
331 bc7cb1a1 2003-11-23 devnull
332 bc7cb1a1 2003-11-23 devnull cs = string;
333 bc7cb1a1 2003-11-23 devnull while(*cs++ == *s)
334 bc7cb1a1 2003-11-23 devnull if(*s++ == '\0')
335 bc7cb1a1 2003-11-23 devnull goto true;
336 bc7cb1a1 2003-11-23 devnull if(*s != '\0')
337 bc7cb1a1 2003-11-23 devnull return 0;
338 bc7cb1a1 2003-11-23 devnull
339 bc7cb1a1 2003-11-23 devnull true:
340 bc7cb1a1 2003-11-23 devnull cs--;
341 bc7cb1a1 2003-11-23 devnull string = cs;
342 bc7cb1a1 2003-11-23 devnull return 1;
343 bc7cb1a1 2003-11-23 devnull }
344 bc7cb1a1 2003-11-23 devnull
345 bc7cb1a1 2003-11-23 devnull vlong
346 11a3ce57 2011-08-16 rsc number(vlong big)
347 bc7cb1a1 2003-11-23 devnull {
348 bc7cb1a1 2003-11-23 devnull char *cs;
349 11a3ce57 2011-08-16 rsc uvlong n;
350 bc7cb1a1 2003-11-23 devnull
351 bc7cb1a1 2003-11-23 devnull cs = string;
352 bc7cb1a1 2003-11-23 devnull n = 0;
353 bc7cb1a1 2003-11-23 devnull while(*cs >= '0' && *cs <= '9')
354 bc7cb1a1 2003-11-23 devnull n = n*10 + *cs++ - '0';
355 bc7cb1a1 2003-11-23 devnull for(;;)
356 bc7cb1a1 2003-11-23 devnull switch(*cs++) {
357 bc7cb1a1 2003-11-23 devnull
358 bc7cb1a1 2003-11-23 devnull case 'k':
359 bc7cb1a1 2003-11-23 devnull n *= 1024;
360 bc7cb1a1 2003-11-23 devnull continue;
361 bc7cb1a1 2003-11-23 devnull
362 bc7cb1a1 2003-11-23 devnull case 'b':
363 bc7cb1a1 2003-11-23 devnull n *= 512;
364 bc7cb1a1 2003-11-23 devnull continue;
365 bc7cb1a1 2003-11-23 devnull
366 bc7cb1a1 2003-11-23 devnull /* case '*':*/
367 bc7cb1a1 2003-11-23 devnull case 'x':
368 bc7cb1a1 2003-11-23 devnull string = cs;
369 11a3ce57 2011-08-16 rsc n *= number(VBIG);
370 bc7cb1a1 2003-11-23 devnull
371 bc7cb1a1 2003-11-23 devnull case '\0':
372 11a3ce57 2011-08-16 rsc if(n > big) {
373 11a3ce57 2011-08-16 rsc fprint(2, "dd: argument %llud out of range\n", n);
374 bc7cb1a1 2003-11-23 devnull exits("range");
375 bc7cb1a1 2003-11-23 devnull }
376 bc7cb1a1 2003-11-23 devnull return n;
377 bc7cb1a1 2003-11-23 devnull }
378 bc7cb1a1 2003-11-23 devnull /* never gets here */
379 bc7cb1a1 2003-11-23 devnull }
380 bc7cb1a1 2003-11-23 devnull
381 bc7cb1a1 2003-11-23 devnull void
382 bc7cb1a1 2003-11-23 devnull cnull(int cc)
383 bc7cb1a1 2003-11-23 devnull {
384 bc7cb1a1 2003-11-23 devnull int c;
385 bc7cb1a1 2003-11-23 devnull
386 bc7cb1a1 2003-11-23 devnull c = cc;
387 bc7cb1a1 2003-11-23 devnull if((cflag&UCASE) && c>='a' && c<='z')
388 bc7cb1a1 2003-11-23 devnull c += 'A'-'a';
389 bc7cb1a1 2003-11-23 devnull if((cflag&LCASE) && c>='A' && c<='Z')
390 bc7cb1a1 2003-11-23 devnull c += 'a'-'A';
391 bc7cb1a1 2003-11-23 devnull null(c);
392 bc7cb1a1 2003-11-23 devnull }
393 bc7cb1a1 2003-11-23 devnull
394 bc7cb1a1 2003-11-23 devnull void
395 bc7cb1a1 2003-11-23 devnull null(int c)
396 bc7cb1a1 2003-11-23 devnull {
397 bc7cb1a1 2003-11-23 devnull
398 bc7cb1a1 2003-11-23 devnull *op = c;
399 bc7cb1a1 2003-11-23 devnull op++;
400 bc7cb1a1 2003-11-23 devnull if(++obc >= obs) {
401 bc7cb1a1 2003-11-23 devnull flsh();
402 bc7cb1a1 2003-11-23 devnull op = obuf;
403 bc7cb1a1 2003-11-23 devnull }
404 bc7cb1a1 2003-11-23 devnull }
405 bc7cb1a1 2003-11-23 devnull
406 bc7cb1a1 2003-11-23 devnull void
407 bc7cb1a1 2003-11-23 devnull ascii(int cc)
408 bc7cb1a1 2003-11-23 devnull {
409 bc7cb1a1 2003-11-23 devnull int c;
410 bc7cb1a1 2003-11-23 devnull
411 bc7cb1a1 2003-11-23 devnull c = etoa[cc];
412 bc7cb1a1 2003-11-23 devnull if(cbs == 0) {
413 bc7cb1a1 2003-11-23 devnull cnull(c);
414 bc7cb1a1 2003-11-23 devnull return;
415 bc7cb1a1 2003-11-23 devnull }
416 bc7cb1a1 2003-11-23 devnull if(c == ' ') {
417 bc7cb1a1 2003-11-23 devnull nspace++;
418 bc7cb1a1 2003-11-23 devnull goto out;
419 bc7cb1a1 2003-11-23 devnull }
420 bc7cb1a1 2003-11-23 devnull while(nspace > 0) {
421 bc7cb1a1 2003-11-23 devnull null(' ');
422 bc7cb1a1 2003-11-23 devnull nspace--;
423 bc7cb1a1 2003-11-23 devnull }
424 bc7cb1a1 2003-11-23 devnull cnull(c);
425 bc7cb1a1 2003-11-23 devnull
426 bc7cb1a1 2003-11-23 devnull out:
427 bc7cb1a1 2003-11-23 devnull if(++cbc >= cbs) {
428 bc7cb1a1 2003-11-23 devnull null('\n');
429 bc7cb1a1 2003-11-23 devnull cbc = 0;
430 bc7cb1a1 2003-11-23 devnull nspace = 0;
431 bc7cb1a1 2003-11-23 devnull }
432 bc7cb1a1 2003-11-23 devnull }
433 bc7cb1a1 2003-11-23 devnull
434 bc7cb1a1 2003-11-23 devnull void
435 bc7cb1a1 2003-11-23 devnull unblock(int cc)
436 bc7cb1a1 2003-11-23 devnull {
437 bc7cb1a1 2003-11-23 devnull int c;
438 bc7cb1a1 2003-11-23 devnull
439 bc7cb1a1 2003-11-23 devnull c = cc & 0377;
440 bc7cb1a1 2003-11-23 devnull if(cbs == 0) {
441 bc7cb1a1 2003-11-23 devnull cnull(c);
442 bc7cb1a1 2003-11-23 devnull return;
443 bc7cb1a1 2003-11-23 devnull }
444 bc7cb1a1 2003-11-23 devnull if(c == ' ') {
445 bc7cb1a1 2003-11-23 devnull nspace++;
446 bc7cb1a1 2003-11-23 devnull goto out;
447 bc7cb1a1 2003-11-23 devnull }
448 bc7cb1a1 2003-11-23 devnull while(nspace > 0) {
449 bc7cb1a1 2003-11-23 devnull null(' ');
450 bc7cb1a1 2003-11-23 devnull nspace--;
451 bc7cb1a1 2003-11-23 devnull }
452 bc7cb1a1 2003-11-23 devnull cnull(c);
453 bc7cb1a1 2003-11-23 devnull
454 bc7cb1a1 2003-11-23 devnull out:
455 bc7cb1a1 2003-11-23 devnull if(++cbc >= cbs) {
456 bc7cb1a1 2003-11-23 devnull null('\n');
457 bc7cb1a1 2003-11-23 devnull cbc = 0;
458 bc7cb1a1 2003-11-23 devnull nspace = 0;
459 bc7cb1a1 2003-11-23 devnull }
460 bc7cb1a1 2003-11-23 devnull }
461 bc7cb1a1 2003-11-23 devnull
462 bc7cb1a1 2003-11-23 devnull void
463 bc7cb1a1 2003-11-23 devnull ebcdic(int cc)
464 bc7cb1a1 2003-11-23 devnull {
465 bc7cb1a1 2003-11-23 devnull int c;
466 bc7cb1a1 2003-11-23 devnull
467 bc7cb1a1 2003-11-23 devnull c = cc;
468 bc7cb1a1 2003-11-23 devnull if(cflag&UCASE && c>='a' && c<='z')
469 bc7cb1a1 2003-11-23 devnull c += 'A'-'a';
470 bc7cb1a1 2003-11-23 devnull if(cflag&LCASE && c>='A' && c<='Z')
471 bc7cb1a1 2003-11-23 devnull c += 'a'-'A';
472 bc7cb1a1 2003-11-23 devnull c = atoe[c];
473 bc7cb1a1 2003-11-23 devnull if(cbs == 0) {
474 bc7cb1a1 2003-11-23 devnull null(c);
475 bc7cb1a1 2003-11-23 devnull return;
476 bc7cb1a1 2003-11-23 devnull }
477 bc7cb1a1 2003-11-23 devnull if(cc == '\n') {
478 bc7cb1a1 2003-11-23 devnull while(cbc < cbs) {
479 bc7cb1a1 2003-11-23 devnull null(atoe[' ']);
480 bc7cb1a1 2003-11-23 devnull cbc++;
481 bc7cb1a1 2003-11-23 devnull }
482 bc7cb1a1 2003-11-23 devnull cbc = 0;
483 bc7cb1a1 2003-11-23 devnull return;
484 bc7cb1a1 2003-11-23 devnull }
485 bc7cb1a1 2003-11-23 devnull if(cbc == cbs)
486 bc7cb1a1 2003-11-23 devnull ntrunc++;
487 bc7cb1a1 2003-11-23 devnull cbc++;
488 bc7cb1a1 2003-11-23 devnull if(cbc <= cbs)
489 bc7cb1a1 2003-11-23 devnull null(c);
490 bc7cb1a1 2003-11-23 devnull }
491 bc7cb1a1 2003-11-23 devnull
492 bc7cb1a1 2003-11-23 devnull void
493 bc7cb1a1 2003-11-23 devnull ibm(int cc)
494 bc7cb1a1 2003-11-23 devnull {
495 bc7cb1a1 2003-11-23 devnull int c;
496 bc7cb1a1 2003-11-23 devnull
497 bc7cb1a1 2003-11-23 devnull c = cc;
498 bc7cb1a1 2003-11-23 devnull if(cflag&UCASE && c>='a' && c<='z')
499 bc7cb1a1 2003-11-23 devnull c += 'A'-'a';
500 bc7cb1a1 2003-11-23 devnull if(cflag&LCASE && c>='A' && c<='Z')
501 bc7cb1a1 2003-11-23 devnull c += 'a'-'A';
502 bc7cb1a1 2003-11-23 devnull c = atoibm[c] & 0377;
503 bc7cb1a1 2003-11-23 devnull if(cbs == 0) {
504 bc7cb1a1 2003-11-23 devnull null(c);
505 bc7cb1a1 2003-11-23 devnull return;
506 bc7cb1a1 2003-11-23 devnull }
507 bc7cb1a1 2003-11-23 devnull if(cc == '\n') {
508 bc7cb1a1 2003-11-23 devnull while(cbc < cbs) {
509 bc7cb1a1 2003-11-23 devnull null(atoibm[' ']);
510 bc7cb1a1 2003-11-23 devnull cbc++;
511 bc7cb1a1 2003-11-23 devnull }
512 bc7cb1a1 2003-11-23 devnull cbc = 0;
513 bc7cb1a1 2003-11-23 devnull return;
514 bc7cb1a1 2003-11-23 devnull }
515 bc7cb1a1 2003-11-23 devnull if(cbc == cbs)
516 bc7cb1a1 2003-11-23 devnull ntrunc++;
517 bc7cb1a1 2003-11-23 devnull cbc++;
518 bc7cb1a1 2003-11-23 devnull if(cbc <= cbs)
519 bc7cb1a1 2003-11-23 devnull null(c);
520 bc7cb1a1 2003-11-23 devnull }
521 bc7cb1a1 2003-11-23 devnull
522 bc7cb1a1 2003-11-23 devnull void
523 bc7cb1a1 2003-11-23 devnull block(int cc)
524 bc7cb1a1 2003-11-23 devnull {
525 bc7cb1a1 2003-11-23 devnull int c;
526 bc7cb1a1 2003-11-23 devnull
527 bc7cb1a1 2003-11-23 devnull c = cc;
528 bc7cb1a1 2003-11-23 devnull if(cflag&UCASE && c>='a' && c<='z')
529 bc7cb1a1 2003-11-23 devnull c += 'A'-'a';
530 bc7cb1a1 2003-11-23 devnull if(cflag&LCASE && c>='A' && c<='Z')
531 bc7cb1a1 2003-11-23 devnull c += 'a'-'A';
532 bc7cb1a1 2003-11-23 devnull c &= 0377;
533 bc7cb1a1 2003-11-23 devnull if(cbs == 0) {
534 bc7cb1a1 2003-11-23 devnull null(c);
535 bc7cb1a1 2003-11-23 devnull return;
536 bc7cb1a1 2003-11-23 devnull }
537 bc7cb1a1 2003-11-23 devnull if(cc == '\n') {
538 bc7cb1a1 2003-11-23 devnull while(cbc < cbs) {
539 bc7cb1a1 2003-11-23 devnull null(' ');
540 bc7cb1a1 2003-11-23 devnull cbc++;
541 bc7cb1a1 2003-11-23 devnull }
542 bc7cb1a1 2003-11-23 devnull cbc = 0;
543 bc7cb1a1 2003-11-23 devnull return;
544 bc7cb1a1 2003-11-23 devnull }
545 bc7cb1a1 2003-11-23 devnull if(cbc == cbs)
546 bc7cb1a1 2003-11-23 devnull ntrunc++;
547 bc7cb1a1 2003-11-23 devnull cbc++;
548 bc7cb1a1 2003-11-23 devnull if(cbc <= cbs)
549 bc7cb1a1 2003-11-23 devnull null(c);
550 bc7cb1a1 2003-11-23 devnull }
551 bc7cb1a1 2003-11-23 devnull
552 bc7cb1a1 2003-11-23 devnull void
553 11a3ce57 2011-08-16 rsc term(char *status)
554 bc7cb1a1 2003-11-23 devnull {
555 bc7cb1a1 2003-11-23 devnull stats();
556 11a3ce57 2011-08-16 rsc exits(status);
557 bc7cb1a1 2003-11-23 devnull }
558 bc7cb1a1 2003-11-23 devnull
559 bc7cb1a1 2003-11-23 devnull void
560 bc7cb1a1 2003-11-23 devnull stats(void)
561 bc7cb1a1 2003-11-23 devnull {
562 11a3ce57 2011-08-16 rsc if(quiet)
563 11a3ce57 2011-08-16 rsc return;
564 bc7cb1a1 2003-11-23 devnull fprint(2, "%lud+%lud records in\n", nifr, nipr);
565 bc7cb1a1 2003-11-23 devnull fprint(2, "%lud+%lud records out\n", nofr, nopr);
566 bc7cb1a1 2003-11-23 devnull if(ntrunc)
567 bc7cb1a1 2003-11-23 devnull fprint(2, "%lud truncated records\n", ntrunc);
568 bc7cb1a1 2003-11-23 devnull }
569 bc7cb1a1 2003-11-23 devnull
570 bc7cb1a1 2003-11-23 devnull uchar etoa[] =
571 bc7cb1a1 2003-11-23 devnull {
572 bc7cb1a1 2003-11-23 devnull 0000,0001,0002,0003,0234,0011,0206,0177,
573 bc7cb1a1 2003-11-23 devnull 0227,0215,0216,0013,0014,0015,0016,0017,
574 bc7cb1a1 2003-11-23 devnull 0020,0021,0022,0023,0235,0205,0010,0207,
575 bc7cb1a1 2003-11-23 devnull 0030,0031,0222,0217,0034,0035,0036,0037,
576 bc7cb1a1 2003-11-23 devnull 0200,0201,0202,0203,0204,0012,0027,0033,
577 bc7cb1a1 2003-11-23 devnull 0210,0211,0212,0213,0214,0005,0006,0007,
578 bc7cb1a1 2003-11-23 devnull 0220,0221,0026,0223,0224,0225,0226,0004,
579 bc7cb1a1 2003-11-23 devnull 0230,0231,0232,0233,0024,0025,0236,0032,
580 bc7cb1a1 2003-11-23 devnull 0040,0240,0241,0242,0243,0244,0245,0246,
581 bc7cb1a1 2003-11-23 devnull 0247,0250,0133,0056,0074,0050,0053,0041,
582 bc7cb1a1 2003-11-23 devnull 0046,0251,0252,0253,0254,0255,0256,0257,
583 bc7cb1a1 2003-11-23 devnull 0260,0261,0135,0044,0052,0051,0073,0136,
584 bc7cb1a1 2003-11-23 devnull 0055,0057,0262,0263,0264,0265,0266,0267,
585 bc7cb1a1 2003-11-23 devnull 0270,0271,0174,0054,0045,0137,0076,0077,
586 bc7cb1a1 2003-11-23 devnull 0272,0273,0274,0275,0276,0277,0300,0301,
587 bc7cb1a1 2003-11-23 devnull 0302,0140,0072,0043,0100,0047,0075,0042,
588 bc7cb1a1 2003-11-23 devnull 0303,0141,0142,0143,0144,0145,0146,0147,
589 bc7cb1a1 2003-11-23 devnull 0150,0151,0304,0305,0306,0307,0310,0311,
590 bc7cb1a1 2003-11-23 devnull 0312,0152,0153,0154,0155,0156,0157,0160,
591 bc7cb1a1 2003-11-23 devnull 0161,0162,0313,0314,0315,0316,0317,0320,
592 bc7cb1a1 2003-11-23 devnull 0321,0176,0163,0164,0165,0166,0167,0170,
593 bc7cb1a1 2003-11-23 devnull 0171,0172,0322,0323,0324,0325,0326,0327,
594 bc7cb1a1 2003-11-23 devnull 0330,0331,0332,0333,0334,0335,0336,0337,
595 bc7cb1a1 2003-11-23 devnull 0340,0341,0342,0343,0344,0345,0346,0347,
596 bc7cb1a1 2003-11-23 devnull 0173,0101,0102,0103,0104,0105,0106,0107,
597 bc7cb1a1 2003-11-23 devnull 0110,0111,0350,0351,0352,0353,0354,0355,
598 bc7cb1a1 2003-11-23 devnull 0175,0112,0113,0114,0115,0116,0117,0120,
599 bc7cb1a1 2003-11-23 devnull 0121,0122,0356,0357,0360,0361,0362,0363,
600 bc7cb1a1 2003-11-23 devnull 0134,0237,0123,0124,0125,0126,0127,0130,
601 bc7cb1a1 2003-11-23 devnull 0131,0132,0364,0365,0366,0367,0370,0371,
602 bc7cb1a1 2003-11-23 devnull 0060,0061,0062,0063,0064,0065,0066,0067,
603 bc7cb1a1 2003-11-23 devnull 0070,0071,0372,0373,0374,0375,0376,0377,
604 bc7cb1a1 2003-11-23 devnull };
605 bc7cb1a1 2003-11-23 devnull uchar atoe[] =
606 bc7cb1a1 2003-11-23 devnull {
607 bc7cb1a1 2003-11-23 devnull 0000,0001,0002,0003,0067,0055,0056,0057,
608 bc7cb1a1 2003-11-23 devnull 0026,0005,0045,0013,0014,0015,0016,0017,
609 bc7cb1a1 2003-11-23 devnull 0020,0021,0022,0023,0074,0075,0062,0046,
610 bc7cb1a1 2003-11-23 devnull 0030,0031,0077,0047,0034,0035,0036,0037,
611 bc7cb1a1 2003-11-23 devnull 0100,0117,0177,0173,0133,0154,0120,0175,
612 bc7cb1a1 2003-11-23 devnull 0115,0135,0134,0116,0153,0140,0113,0141,
613 bc7cb1a1 2003-11-23 devnull 0360,0361,0362,0363,0364,0365,0366,0367,
614 bc7cb1a1 2003-11-23 devnull 0370,0371,0172,0136,0114,0176,0156,0157,
615 bc7cb1a1 2003-11-23 devnull 0174,0301,0302,0303,0304,0305,0306,0307,
616 bc7cb1a1 2003-11-23 devnull 0310,0311,0321,0322,0323,0324,0325,0326,
617 bc7cb1a1 2003-11-23 devnull 0327,0330,0331,0342,0343,0344,0345,0346,
618 bc7cb1a1 2003-11-23 devnull 0347,0350,0351,0112,0340,0132,0137,0155,
619 bc7cb1a1 2003-11-23 devnull 0171,0201,0202,0203,0204,0205,0206,0207,
620 bc7cb1a1 2003-11-23 devnull 0210,0211,0221,0222,0223,0224,0225,0226,
621 bc7cb1a1 2003-11-23 devnull 0227,0230,0231,0242,0243,0244,0245,0246,
622 bc7cb1a1 2003-11-23 devnull 0247,0250,0251,0300,0152,0320,0241,0007,
623 bc7cb1a1 2003-11-23 devnull 0040,0041,0042,0043,0044,0025,0006,0027,
624 bc7cb1a1 2003-11-23 devnull 0050,0051,0052,0053,0054,0011,0012,0033,
625 bc7cb1a1 2003-11-23 devnull 0060,0061,0032,0063,0064,0065,0066,0010,
626 bc7cb1a1 2003-11-23 devnull 0070,0071,0072,0073,0004,0024,0076,0341,
627 bc7cb1a1 2003-11-23 devnull 0101,0102,0103,0104,0105,0106,0107,0110,
628 bc7cb1a1 2003-11-23 devnull 0111,0121,0122,0123,0124,0125,0126,0127,
629 bc7cb1a1 2003-11-23 devnull 0130,0131,0142,0143,0144,0145,0146,0147,
630 bc7cb1a1 2003-11-23 devnull 0150,0151,0160,0161,0162,0163,0164,0165,
631 bc7cb1a1 2003-11-23 devnull 0166,0167,0170,0200,0212,0213,0214,0215,
632 bc7cb1a1 2003-11-23 devnull 0216,0217,0220,0232,0233,0234,0235,0236,
633 bc7cb1a1 2003-11-23 devnull 0237,0240,0252,0253,0254,0255,0256,0257,
634 bc7cb1a1 2003-11-23 devnull 0260,0261,0262,0263,0264,0265,0266,0267,
635 bc7cb1a1 2003-11-23 devnull 0270,0271,0272,0273,0274,0275,0276,0277,
636 bc7cb1a1 2003-11-23 devnull 0312,0313,0314,0315,0316,0317,0332,0333,
637 bc7cb1a1 2003-11-23 devnull 0334,0335,0336,0337,0352,0353,0354,0355,
638 bc7cb1a1 2003-11-23 devnull 0356,0357,0372,0373,0374,0375,0376,0377,
639 bc7cb1a1 2003-11-23 devnull };
640 bc7cb1a1 2003-11-23 devnull uchar atoibm[] =
641 bc7cb1a1 2003-11-23 devnull {
642 bc7cb1a1 2003-11-23 devnull 0000,0001,0002,0003,0067,0055,0056,0057,
643 bc7cb1a1 2003-11-23 devnull 0026,0005,0045,0013,0014,0015,0016,0017,
644 bc7cb1a1 2003-11-23 devnull 0020,0021,0022,0023,0074,0075,0062,0046,
645 bc7cb1a1 2003-11-23 devnull 0030,0031,0077,0047,0034,0035,0036,0037,
646 bc7cb1a1 2003-11-23 devnull 0100,0132,0177,0173,0133,0154,0120,0175,
647 bc7cb1a1 2003-11-23 devnull 0115,0135,0134,0116,0153,0140,0113,0141,
648 bc7cb1a1 2003-11-23 devnull 0360,0361,0362,0363,0364,0365,0366,0367,
649 bc7cb1a1 2003-11-23 devnull 0370,0371,0172,0136,0114,0176,0156,0157,
650 bc7cb1a1 2003-11-23 devnull 0174,0301,0302,0303,0304,0305,0306,0307,
651 bc7cb1a1 2003-11-23 devnull 0310,0311,0321,0322,0323,0324,0325,0326,
652 bc7cb1a1 2003-11-23 devnull 0327,0330,0331,0342,0343,0344,0345,0346,
653 bc7cb1a1 2003-11-23 devnull 0347,0350,0351,0255,0340,0275,0137,0155,
654 bc7cb1a1 2003-11-23 devnull 0171,0201,0202,0203,0204,0205,0206,0207,
655 bc7cb1a1 2003-11-23 devnull 0210,0211,0221,0222,0223,0224,0225,0226,
656 bc7cb1a1 2003-11-23 devnull 0227,0230,0231,0242,0243,0244,0245,0246,
657 bc7cb1a1 2003-11-23 devnull 0247,0250,0251,0300,0117,0320,0241,0007,
658 bc7cb1a1 2003-11-23 devnull 0040,0041,0042,0043,0044,0025,0006,0027,
659 bc7cb1a1 2003-11-23 devnull 0050,0051,0052,0053,0054,0011,0012,0033,
660 bc7cb1a1 2003-11-23 devnull 0060,0061,0032,0063,0064,0065,0066,0010,
661 bc7cb1a1 2003-11-23 devnull 0070,0071,0072,0073,0004,0024,0076,0341,
662 bc7cb1a1 2003-11-23 devnull 0101,0102,0103,0104,0105,0106,0107,0110,
663 bc7cb1a1 2003-11-23 devnull 0111,0121,0122,0123,0124,0125,0126,0127,
664 bc7cb1a1 2003-11-23 devnull 0130,0131,0142,0143,0144,0145,0146,0147,
665 bc7cb1a1 2003-11-23 devnull 0150,0151,0160,0161,0162,0163,0164,0165,
666 bc7cb1a1 2003-11-23 devnull 0166,0167,0170,0200,0212,0213,0214,0215,
667 bc7cb1a1 2003-11-23 devnull 0216,0217,0220,0232,0233,0234,0235,0236,
668 bc7cb1a1 2003-11-23 devnull 0237,0240,0252,0253,0254,0255,0256,0257,
669 bc7cb1a1 2003-11-23 devnull 0260,0261,0262,0263,0264,0265,0266,0267,
670 bc7cb1a1 2003-11-23 devnull 0270,0271,0272,0273,0274,0275,0276,0277,
671 bc7cb1a1 2003-11-23 devnull 0312,0313,0314,0315,0316,0317,0332,0333,
672 bc7cb1a1 2003-11-23 devnull 0334,0335,0336,0337,0352,0353,0354,0355,
673 bc7cb1a1 2003-11-23 devnull 0356,0357,0372,0373,0374,0375,0376,0377,
674 bc7cb1a1 2003-11-23 devnull };