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 bc7cb1a1 2003-11-23 devnull ibuf = sbrk(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 bc7cb1a1 2003-11-23 devnull obuf = sbrk(obs);
227 bc7cb1a1 2003-11-23 devnull sbrk(64); /* For good measure */
228 bc7cb1a1 2003-11-23 devnull if(ibuf == (char *)-1 || obuf == (char *)-1) {
229 bc7cb1a1 2003-11-23 devnull fprint(2, "dd: not enough memory: %r\n");
230 bc7cb1a1 2003-11-23 devnull exits("memory");
231 bc7cb1a1 2003-11-23 devnull }
232 bc7cb1a1 2003-11-23 devnull ibc = 0;
233 bc7cb1a1 2003-11-23 devnull obc = 0;
234 bc7cb1a1 2003-11-23 devnull cbc = 0;
235 bc7cb1a1 2003-11-23 devnull op = obuf;
236 bc7cb1a1 2003-11-23 devnull
237 bc7cb1a1 2003-11-23 devnull /*
238 bc7cb1a1 2003-11-23 devnull if(signal(SIGINT, SIG_IGN) != SIG_IGN)
239 bc7cb1a1 2003-11-23 devnull signal(SIGINT, term);
240 bc7cb1a1 2003-11-23 devnull */
241 bc7cb1a1 2003-11-23 devnull seek(obf, obs*oseekn, 1);
242 bc7cb1a1 2003-11-23 devnull seek(ibf, ibs*iseekn, 1);
243 bc7cb1a1 2003-11-23 devnull while(skip) {
244 bc7cb1a1 2003-11-23 devnull read(ibf, ibuf, ibs);
245 bc7cb1a1 2003-11-23 devnull skip--;
246 bc7cb1a1 2003-11-23 devnull }
247 bc7cb1a1 2003-11-23 devnull
248 bc7cb1a1 2003-11-23 devnull ip = 0;
249 bc7cb1a1 2003-11-23 devnull loop:
250 bc7cb1a1 2003-11-23 devnull if(ibc-- == 0) {
251 bc7cb1a1 2003-11-23 devnull ibc = 0;
252 bc7cb1a1 2003-11-23 devnull if(count==0 || nifr+nipr!=count) {
253 bc7cb1a1 2003-11-23 devnull if(cflag&(NERR|SYNC))
254 bc7cb1a1 2003-11-23 devnull for(ip=ibuf+ibs; ip>ibuf;)
255 bc7cb1a1 2003-11-23 devnull *--ip = 0;
256 bc7cb1a1 2003-11-23 devnull ibc = read(ibf, ibuf, ibs);
257 bc7cb1a1 2003-11-23 devnull }
258 bc7cb1a1 2003-11-23 devnull if(ibc == -1) {
259 bc7cb1a1 2003-11-23 devnull perror("read");
260 bc7cb1a1 2003-11-23 devnull if((cflag&NERR) == 0) {
261 bc7cb1a1 2003-11-23 devnull flsh();
262 11a3ce57 2011-08-16 rsc term("errors");
263 bc7cb1a1 2003-11-23 devnull }
264 bc7cb1a1 2003-11-23 devnull ibc = 0;
265 bc7cb1a1 2003-11-23 devnull for(c=0; c<ibs; c++)
266 bc7cb1a1 2003-11-23 devnull if(ibuf[c] != 0)
267 11a3ce57 2011-08-16 rsc ibc = c+1;
268 11a3ce57 2011-08-16 rsc seek(ibf, ibs, 1);
269 11a3ce57 2011-08-16 rsc stats();
270 11a3ce57 2011-08-16 rsc }else if(ibc == 0 && --files<=0) {
271 bc7cb1a1 2003-11-23 devnull flsh();
272 11a3ce57 2011-08-16 rsc term(nil);
273 bc7cb1a1 2003-11-23 devnull }
274 bc7cb1a1 2003-11-23 devnull if(ibc != ibs) {
275 bc7cb1a1 2003-11-23 devnull nipr++;
276 bc7cb1a1 2003-11-23 devnull if(cflag&SYNC)
277 bc7cb1a1 2003-11-23 devnull ibc = ibs;
278 bc7cb1a1 2003-11-23 devnull } else
279 bc7cb1a1 2003-11-23 devnull nifr++;
280 bc7cb1a1 2003-11-23 devnull ip = ibuf;
281 bc7cb1a1 2003-11-23 devnull c = (ibc>>1) & ~1;
282 bc7cb1a1 2003-11-23 devnull if(cflag&SWAB && c)
283 bc7cb1a1 2003-11-23 devnull do {
284 bc7cb1a1 2003-11-23 devnull a = *ip++;
285 bc7cb1a1 2003-11-23 devnull ip[-1] = *ip;
286 bc7cb1a1 2003-11-23 devnull *ip++ = a;
287 bc7cb1a1 2003-11-23 devnull } while(--c);
288 bc7cb1a1 2003-11-23 devnull ip = ibuf;
289 bc7cb1a1 2003-11-23 devnull if(fflag) {
290 bc7cb1a1 2003-11-23 devnull obc = ibc;
291 bc7cb1a1 2003-11-23 devnull flsh();
292 bc7cb1a1 2003-11-23 devnull ibc = 0;
293 bc7cb1a1 2003-11-23 devnull }
294 bc7cb1a1 2003-11-23 devnull goto loop;
295 bc7cb1a1 2003-11-23 devnull }
296 bc7cb1a1 2003-11-23 devnull c = 0;
297 bc7cb1a1 2003-11-23 devnull c |= *ip++;
298 bc7cb1a1 2003-11-23 devnull c &= 0377;
299 bc7cb1a1 2003-11-23 devnull (*conv)(c);
300 bc7cb1a1 2003-11-23 devnull goto loop;
301 a59b2ede 2011-09-19 rsc
302 a59b2ede 2011-09-19 rsc return 0; // shut up apple gcc
303 bc7cb1a1 2003-11-23 devnull }
304 bc7cb1a1 2003-11-23 devnull
305 bc7cb1a1 2003-11-23 devnull void
306 bc7cb1a1 2003-11-23 devnull flsh(void)
307 bc7cb1a1 2003-11-23 devnull {
308 bc7cb1a1 2003-11-23 devnull int c;
309 bc7cb1a1 2003-11-23 devnull
310 bc7cb1a1 2003-11-23 devnull if(obc) {
311 11a3ce57 2011-08-16 rsc /* don't perror dregs of previous errors on a short write */
312 11a3ce57 2011-08-16 rsc werrstr("");
313 bc7cb1a1 2003-11-23 devnull c = write(obf, obuf, obc);
314 bc7cb1a1 2003-11-23 devnull if(c != obc) {
315 bc7cb1a1 2003-11-23 devnull if(c > 0)
316 bc7cb1a1 2003-11-23 devnull ++nopr;
317 bc7cb1a1 2003-11-23 devnull perror("write");
318 11a3ce57 2011-08-16 rsc term("errors");
319 bc7cb1a1 2003-11-23 devnull }
320 bc7cb1a1 2003-11-23 devnull if(obc == obs)
321 bc7cb1a1 2003-11-23 devnull nofr++;
322 bc7cb1a1 2003-11-23 devnull else
323 bc7cb1a1 2003-11-23 devnull nopr++;
324 bc7cb1a1 2003-11-23 devnull obc = 0;
325 bc7cb1a1 2003-11-23 devnull }
326 bc7cb1a1 2003-11-23 devnull }
327 bc7cb1a1 2003-11-23 devnull
328 bc7cb1a1 2003-11-23 devnull int
329 bc7cb1a1 2003-11-23 devnull match(char *s)
330 bc7cb1a1 2003-11-23 devnull {
331 bc7cb1a1 2003-11-23 devnull char *cs;
332 bc7cb1a1 2003-11-23 devnull
333 bc7cb1a1 2003-11-23 devnull cs = string;
334 bc7cb1a1 2003-11-23 devnull while(*cs++ == *s)
335 bc7cb1a1 2003-11-23 devnull if(*s++ == '\0')
336 bc7cb1a1 2003-11-23 devnull goto true;
337 bc7cb1a1 2003-11-23 devnull if(*s != '\0')
338 bc7cb1a1 2003-11-23 devnull return 0;
339 bc7cb1a1 2003-11-23 devnull
340 bc7cb1a1 2003-11-23 devnull true:
341 bc7cb1a1 2003-11-23 devnull cs--;
342 bc7cb1a1 2003-11-23 devnull string = cs;
343 bc7cb1a1 2003-11-23 devnull return 1;
344 bc7cb1a1 2003-11-23 devnull }
345 bc7cb1a1 2003-11-23 devnull
346 bc7cb1a1 2003-11-23 devnull vlong
347 11a3ce57 2011-08-16 rsc number(vlong big)
348 bc7cb1a1 2003-11-23 devnull {
349 bc7cb1a1 2003-11-23 devnull char *cs;
350 11a3ce57 2011-08-16 rsc uvlong n;
351 bc7cb1a1 2003-11-23 devnull
352 bc7cb1a1 2003-11-23 devnull cs = string;
353 bc7cb1a1 2003-11-23 devnull n = 0;
354 bc7cb1a1 2003-11-23 devnull while(*cs >= '0' && *cs <= '9')
355 bc7cb1a1 2003-11-23 devnull n = n*10 + *cs++ - '0';
356 bc7cb1a1 2003-11-23 devnull for(;;)
357 bc7cb1a1 2003-11-23 devnull switch(*cs++) {
358 bc7cb1a1 2003-11-23 devnull
359 bc7cb1a1 2003-11-23 devnull case 'k':
360 bc7cb1a1 2003-11-23 devnull n *= 1024;
361 bc7cb1a1 2003-11-23 devnull continue;
362 bc7cb1a1 2003-11-23 devnull
363 bc7cb1a1 2003-11-23 devnull case 'b':
364 bc7cb1a1 2003-11-23 devnull n *= 512;
365 bc7cb1a1 2003-11-23 devnull continue;
366 bc7cb1a1 2003-11-23 devnull
367 bc7cb1a1 2003-11-23 devnull /* case '*':*/
368 bc7cb1a1 2003-11-23 devnull case 'x':
369 bc7cb1a1 2003-11-23 devnull string = cs;
370 11a3ce57 2011-08-16 rsc n *= number(VBIG);
371 bc7cb1a1 2003-11-23 devnull
372 bc7cb1a1 2003-11-23 devnull case '\0':
373 11a3ce57 2011-08-16 rsc if(n > big) {
374 11a3ce57 2011-08-16 rsc fprint(2, "dd: argument %llud out of range\n", n);
375 bc7cb1a1 2003-11-23 devnull exits("range");
376 bc7cb1a1 2003-11-23 devnull }
377 bc7cb1a1 2003-11-23 devnull return n;
378 bc7cb1a1 2003-11-23 devnull }
379 bc7cb1a1 2003-11-23 devnull /* never gets here */
380 bc7cb1a1 2003-11-23 devnull }
381 bc7cb1a1 2003-11-23 devnull
382 bc7cb1a1 2003-11-23 devnull void
383 bc7cb1a1 2003-11-23 devnull cnull(int cc)
384 bc7cb1a1 2003-11-23 devnull {
385 bc7cb1a1 2003-11-23 devnull int c;
386 bc7cb1a1 2003-11-23 devnull
387 bc7cb1a1 2003-11-23 devnull c = cc;
388 bc7cb1a1 2003-11-23 devnull if((cflag&UCASE) && c>='a' && c<='z')
389 bc7cb1a1 2003-11-23 devnull c += 'A'-'a';
390 bc7cb1a1 2003-11-23 devnull if((cflag&LCASE) && c>='A' && c<='Z')
391 bc7cb1a1 2003-11-23 devnull c += 'a'-'A';
392 bc7cb1a1 2003-11-23 devnull null(c);
393 bc7cb1a1 2003-11-23 devnull }
394 bc7cb1a1 2003-11-23 devnull
395 bc7cb1a1 2003-11-23 devnull void
396 bc7cb1a1 2003-11-23 devnull null(int c)
397 bc7cb1a1 2003-11-23 devnull {
398 bc7cb1a1 2003-11-23 devnull
399 bc7cb1a1 2003-11-23 devnull *op = c;
400 bc7cb1a1 2003-11-23 devnull op++;
401 bc7cb1a1 2003-11-23 devnull if(++obc >= obs) {
402 bc7cb1a1 2003-11-23 devnull flsh();
403 bc7cb1a1 2003-11-23 devnull op = obuf;
404 bc7cb1a1 2003-11-23 devnull }
405 bc7cb1a1 2003-11-23 devnull }
406 bc7cb1a1 2003-11-23 devnull
407 bc7cb1a1 2003-11-23 devnull void
408 bc7cb1a1 2003-11-23 devnull ascii(int cc)
409 bc7cb1a1 2003-11-23 devnull {
410 bc7cb1a1 2003-11-23 devnull int c;
411 bc7cb1a1 2003-11-23 devnull
412 bc7cb1a1 2003-11-23 devnull c = etoa[cc];
413 bc7cb1a1 2003-11-23 devnull if(cbs == 0) {
414 bc7cb1a1 2003-11-23 devnull cnull(c);
415 bc7cb1a1 2003-11-23 devnull return;
416 bc7cb1a1 2003-11-23 devnull }
417 bc7cb1a1 2003-11-23 devnull if(c == ' ') {
418 bc7cb1a1 2003-11-23 devnull nspace++;
419 bc7cb1a1 2003-11-23 devnull goto out;
420 bc7cb1a1 2003-11-23 devnull }
421 bc7cb1a1 2003-11-23 devnull while(nspace > 0) {
422 bc7cb1a1 2003-11-23 devnull null(' ');
423 bc7cb1a1 2003-11-23 devnull nspace--;
424 bc7cb1a1 2003-11-23 devnull }
425 bc7cb1a1 2003-11-23 devnull cnull(c);
426 bc7cb1a1 2003-11-23 devnull
427 bc7cb1a1 2003-11-23 devnull out:
428 bc7cb1a1 2003-11-23 devnull if(++cbc >= cbs) {
429 bc7cb1a1 2003-11-23 devnull null('\n');
430 bc7cb1a1 2003-11-23 devnull cbc = 0;
431 bc7cb1a1 2003-11-23 devnull nspace = 0;
432 bc7cb1a1 2003-11-23 devnull }
433 bc7cb1a1 2003-11-23 devnull }
434 bc7cb1a1 2003-11-23 devnull
435 bc7cb1a1 2003-11-23 devnull void
436 bc7cb1a1 2003-11-23 devnull unblock(int cc)
437 bc7cb1a1 2003-11-23 devnull {
438 bc7cb1a1 2003-11-23 devnull int c;
439 bc7cb1a1 2003-11-23 devnull
440 bc7cb1a1 2003-11-23 devnull c = cc & 0377;
441 bc7cb1a1 2003-11-23 devnull if(cbs == 0) {
442 bc7cb1a1 2003-11-23 devnull cnull(c);
443 bc7cb1a1 2003-11-23 devnull return;
444 bc7cb1a1 2003-11-23 devnull }
445 bc7cb1a1 2003-11-23 devnull if(c == ' ') {
446 bc7cb1a1 2003-11-23 devnull nspace++;
447 bc7cb1a1 2003-11-23 devnull goto out;
448 bc7cb1a1 2003-11-23 devnull }
449 bc7cb1a1 2003-11-23 devnull while(nspace > 0) {
450 bc7cb1a1 2003-11-23 devnull null(' ');
451 bc7cb1a1 2003-11-23 devnull nspace--;
452 bc7cb1a1 2003-11-23 devnull }
453 bc7cb1a1 2003-11-23 devnull cnull(c);
454 bc7cb1a1 2003-11-23 devnull
455 bc7cb1a1 2003-11-23 devnull out:
456 bc7cb1a1 2003-11-23 devnull if(++cbc >= cbs) {
457 bc7cb1a1 2003-11-23 devnull null('\n');
458 bc7cb1a1 2003-11-23 devnull cbc = 0;
459 bc7cb1a1 2003-11-23 devnull nspace = 0;
460 bc7cb1a1 2003-11-23 devnull }
461 bc7cb1a1 2003-11-23 devnull }
462 bc7cb1a1 2003-11-23 devnull
463 bc7cb1a1 2003-11-23 devnull void
464 bc7cb1a1 2003-11-23 devnull ebcdic(int cc)
465 bc7cb1a1 2003-11-23 devnull {
466 bc7cb1a1 2003-11-23 devnull int c;
467 bc7cb1a1 2003-11-23 devnull
468 bc7cb1a1 2003-11-23 devnull c = cc;
469 bc7cb1a1 2003-11-23 devnull if(cflag&UCASE && c>='a' && c<='z')
470 bc7cb1a1 2003-11-23 devnull c += 'A'-'a';
471 bc7cb1a1 2003-11-23 devnull if(cflag&LCASE && c>='A' && c<='Z')
472 bc7cb1a1 2003-11-23 devnull c += 'a'-'A';
473 bc7cb1a1 2003-11-23 devnull c = atoe[c];
474 bc7cb1a1 2003-11-23 devnull if(cbs == 0) {
475 bc7cb1a1 2003-11-23 devnull null(c);
476 bc7cb1a1 2003-11-23 devnull return;
477 bc7cb1a1 2003-11-23 devnull }
478 bc7cb1a1 2003-11-23 devnull if(cc == '\n') {
479 bc7cb1a1 2003-11-23 devnull while(cbc < cbs) {
480 bc7cb1a1 2003-11-23 devnull null(atoe[' ']);
481 bc7cb1a1 2003-11-23 devnull cbc++;
482 bc7cb1a1 2003-11-23 devnull }
483 bc7cb1a1 2003-11-23 devnull cbc = 0;
484 bc7cb1a1 2003-11-23 devnull return;
485 bc7cb1a1 2003-11-23 devnull }
486 bc7cb1a1 2003-11-23 devnull if(cbc == cbs)
487 bc7cb1a1 2003-11-23 devnull ntrunc++;
488 bc7cb1a1 2003-11-23 devnull cbc++;
489 bc7cb1a1 2003-11-23 devnull if(cbc <= cbs)
490 bc7cb1a1 2003-11-23 devnull null(c);
491 bc7cb1a1 2003-11-23 devnull }
492 bc7cb1a1 2003-11-23 devnull
493 bc7cb1a1 2003-11-23 devnull void
494 bc7cb1a1 2003-11-23 devnull ibm(int cc)
495 bc7cb1a1 2003-11-23 devnull {
496 bc7cb1a1 2003-11-23 devnull int c;
497 bc7cb1a1 2003-11-23 devnull
498 bc7cb1a1 2003-11-23 devnull c = cc;
499 bc7cb1a1 2003-11-23 devnull if(cflag&UCASE && c>='a' && c<='z')
500 bc7cb1a1 2003-11-23 devnull c += 'A'-'a';
501 bc7cb1a1 2003-11-23 devnull if(cflag&LCASE && c>='A' && c<='Z')
502 bc7cb1a1 2003-11-23 devnull c += 'a'-'A';
503 bc7cb1a1 2003-11-23 devnull c = atoibm[c] & 0377;
504 bc7cb1a1 2003-11-23 devnull if(cbs == 0) {
505 bc7cb1a1 2003-11-23 devnull null(c);
506 bc7cb1a1 2003-11-23 devnull return;
507 bc7cb1a1 2003-11-23 devnull }
508 bc7cb1a1 2003-11-23 devnull if(cc == '\n') {
509 bc7cb1a1 2003-11-23 devnull while(cbc < cbs) {
510 bc7cb1a1 2003-11-23 devnull null(atoibm[' ']);
511 bc7cb1a1 2003-11-23 devnull cbc++;
512 bc7cb1a1 2003-11-23 devnull }
513 bc7cb1a1 2003-11-23 devnull cbc = 0;
514 bc7cb1a1 2003-11-23 devnull return;
515 bc7cb1a1 2003-11-23 devnull }
516 bc7cb1a1 2003-11-23 devnull if(cbc == cbs)
517 bc7cb1a1 2003-11-23 devnull ntrunc++;
518 bc7cb1a1 2003-11-23 devnull cbc++;
519 bc7cb1a1 2003-11-23 devnull if(cbc <= cbs)
520 bc7cb1a1 2003-11-23 devnull null(c);
521 bc7cb1a1 2003-11-23 devnull }
522 bc7cb1a1 2003-11-23 devnull
523 bc7cb1a1 2003-11-23 devnull void
524 bc7cb1a1 2003-11-23 devnull block(int cc)
525 bc7cb1a1 2003-11-23 devnull {
526 bc7cb1a1 2003-11-23 devnull int c;
527 bc7cb1a1 2003-11-23 devnull
528 bc7cb1a1 2003-11-23 devnull c = cc;
529 bc7cb1a1 2003-11-23 devnull if(cflag&UCASE && c>='a' && c<='z')
530 bc7cb1a1 2003-11-23 devnull c += 'A'-'a';
531 bc7cb1a1 2003-11-23 devnull if(cflag&LCASE && c>='A' && c<='Z')
532 bc7cb1a1 2003-11-23 devnull c += 'a'-'A';
533 bc7cb1a1 2003-11-23 devnull c &= 0377;
534 bc7cb1a1 2003-11-23 devnull if(cbs == 0) {
535 bc7cb1a1 2003-11-23 devnull null(c);
536 bc7cb1a1 2003-11-23 devnull return;
537 bc7cb1a1 2003-11-23 devnull }
538 bc7cb1a1 2003-11-23 devnull if(cc == '\n') {
539 bc7cb1a1 2003-11-23 devnull while(cbc < cbs) {
540 bc7cb1a1 2003-11-23 devnull null(' ');
541 bc7cb1a1 2003-11-23 devnull cbc++;
542 bc7cb1a1 2003-11-23 devnull }
543 bc7cb1a1 2003-11-23 devnull cbc = 0;
544 bc7cb1a1 2003-11-23 devnull return;
545 bc7cb1a1 2003-11-23 devnull }
546 bc7cb1a1 2003-11-23 devnull if(cbc == cbs)
547 bc7cb1a1 2003-11-23 devnull ntrunc++;
548 bc7cb1a1 2003-11-23 devnull cbc++;
549 bc7cb1a1 2003-11-23 devnull if(cbc <= cbs)
550 bc7cb1a1 2003-11-23 devnull null(c);
551 bc7cb1a1 2003-11-23 devnull }
552 bc7cb1a1 2003-11-23 devnull
553 bc7cb1a1 2003-11-23 devnull void
554 11a3ce57 2011-08-16 rsc term(char *status)
555 bc7cb1a1 2003-11-23 devnull {
556 bc7cb1a1 2003-11-23 devnull stats();
557 11a3ce57 2011-08-16 rsc exits(status);
558 bc7cb1a1 2003-11-23 devnull }
559 bc7cb1a1 2003-11-23 devnull
560 bc7cb1a1 2003-11-23 devnull void
561 bc7cb1a1 2003-11-23 devnull stats(void)
562 bc7cb1a1 2003-11-23 devnull {
563 11a3ce57 2011-08-16 rsc if(quiet)
564 11a3ce57 2011-08-16 rsc return;
565 bc7cb1a1 2003-11-23 devnull fprint(2, "%lud+%lud records in\n", nifr, nipr);
566 bc7cb1a1 2003-11-23 devnull fprint(2, "%lud+%lud records out\n", nofr, nopr);
567 bc7cb1a1 2003-11-23 devnull if(ntrunc)
568 bc7cb1a1 2003-11-23 devnull fprint(2, "%lud truncated records\n", ntrunc);
569 bc7cb1a1 2003-11-23 devnull }
570 bc7cb1a1 2003-11-23 devnull
571 bc7cb1a1 2003-11-23 devnull uchar etoa[] =
572 bc7cb1a1 2003-11-23 devnull {
573 bc7cb1a1 2003-11-23 devnull 0000,0001,0002,0003,0234,0011,0206,0177,
574 bc7cb1a1 2003-11-23 devnull 0227,0215,0216,0013,0014,0015,0016,0017,
575 bc7cb1a1 2003-11-23 devnull 0020,0021,0022,0023,0235,0205,0010,0207,
576 bc7cb1a1 2003-11-23 devnull 0030,0031,0222,0217,0034,0035,0036,0037,
577 bc7cb1a1 2003-11-23 devnull 0200,0201,0202,0203,0204,0012,0027,0033,
578 bc7cb1a1 2003-11-23 devnull 0210,0211,0212,0213,0214,0005,0006,0007,
579 bc7cb1a1 2003-11-23 devnull 0220,0221,0026,0223,0224,0225,0226,0004,
580 bc7cb1a1 2003-11-23 devnull 0230,0231,0232,0233,0024,0025,0236,0032,
581 bc7cb1a1 2003-11-23 devnull 0040,0240,0241,0242,0243,0244,0245,0246,
582 bc7cb1a1 2003-11-23 devnull 0247,0250,0133,0056,0074,0050,0053,0041,
583 bc7cb1a1 2003-11-23 devnull 0046,0251,0252,0253,0254,0255,0256,0257,
584 bc7cb1a1 2003-11-23 devnull 0260,0261,0135,0044,0052,0051,0073,0136,
585 bc7cb1a1 2003-11-23 devnull 0055,0057,0262,0263,0264,0265,0266,0267,
586 bc7cb1a1 2003-11-23 devnull 0270,0271,0174,0054,0045,0137,0076,0077,
587 bc7cb1a1 2003-11-23 devnull 0272,0273,0274,0275,0276,0277,0300,0301,
588 bc7cb1a1 2003-11-23 devnull 0302,0140,0072,0043,0100,0047,0075,0042,
589 bc7cb1a1 2003-11-23 devnull 0303,0141,0142,0143,0144,0145,0146,0147,
590 bc7cb1a1 2003-11-23 devnull 0150,0151,0304,0305,0306,0307,0310,0311,
591 bc7cb1a1 2003-11-23 devnull 0312,0152,0153,0154,0155,0156,0157,0160,
592 bc7cb1a1 2003-11-23 devnull 0161,0162,0313,0314,0315,0316,0317,0320,
593 bc7cb1a1 2003-11-23 devnull 0321,0176,0163,0164,0165,0166,0167,0170,
594 bc7cb1a1 2003-11-23 devnull 0171,0172,0322,0323,0324,0325,0326,0327,
595 bc7cb1a1 2003-11-23 devnull 0330,0331,0332,0333,0334,0335,0336,0337,
596 bc7cb1a1 2003-11-23 devnull 0340,0341,0342,0343,0344,0345,0346,0347,
597 bc7cb1a1 2003-11-23 devnull 0173,0101,0102,0103,0104,0105,0106,0107,
598 bc7cb1a1 2003-11-23 devnull 0110,0111,0350,0351,0352,0353,0354,0355,
599 bc7cb1a1 2003-11-23 devnull 0175,0112,0113,0114,0115,0116,0117,0120,
600 bc7cb1a1 2003-11-23 devnull 0121,0122,0356,0357,0360,0361,0362,0363,
601 bc7cb1a1 2003-11-23 devnull 0134,0237,0123,0124,0125,0126,0127,0130,
602 bc7cb1a1 2003-11-23 devnull 0131,0132,0364,0365,0366,0367,0370,0371,
603 bc7cb1a1 2003-11-23 devnull 0060,0061,0062,0063,0064,0065,0066,0067,
604 bc7cb1a1 2003-11-23 devnull 0070,0071,0372,0373,0374,0375,0376,0377,
605 bc7cb1a1 2003-11-23 devnull };
606 bc7cb1a1 2003-11-23 devnull uchar atoe[] =
607 bc7cb1a1 2003-11-23 devnull {
608 bc7cb1a1 2003-11-23 devnull 0000,0001,0002,0003,0067,0055,0056,0057,
609 bc7cb1a1 2003-11-23 devnull 0026,0005,0045,0013,0014,0015,0016,0017,
610 bc7cb1a1 2003-11-23 devnull 0020,0021,0022,0023,0074,0075,0062,0046,
611 bc7cb1a1 2003-11-23 devnull 0030,0031,0077,0047,0034,0035,0036,0037,
612 bc7cb1a1 2003-11-23 devnull 0100,0117,0177,0173,0133,0154,0120,0175,
613 bc7cb1a1 2003-11-23 devnull 0115,0135,0134,0116,0153,0140,0113,0141,
614 bc7cb1a1 2003-11-23 devnull 0360,0361,0362,0363,0364,0365,0366,0367,
615 bc7cb1a1 2003-11-23 devnull 0370,0371,0172,0136,0114,0176,0156,0157,
616 bc7cb1a1 2003-11-23 devnull 0174,0301,0302,0303,0304,0305,0306,0307,
617 bc7cb1a1 2003-11-23 devnull 0310,0311,0321,0322,0323,0324,0325,0326,
618 bc7cb1a1 2003-11-23 devnull 0327,0330,0331,0342,0343,0344,0345,0346,
619 bc7cb1a1 2003-11-23 devnull 0347,0350,0351,0112,0340,0132,0137,0155,
620 bc7cb1a1 2003-11-23 devnull 0171,0201,0202,0203,0204,0205,0206,0207,
621 bc7cb1a1 2003-11-23 devnull 0210,0211,0221,0222,0223,0224,0225,0226,
622 bc7cb1a1 2003-11-23 devnull 0227,0230,0231,0242,0243,0244,0245,0246,
623 bc7cb1a1 2003-11-23 devnull 0247,0250,0251,0300,0152,0320,0241,0007,
624 bc7cb1a1 2003-11-23 devnull 0040,0041,0042,0043,0044,0025,0006,0027,
625 bc7cb1a1 2003-11-23 devnull 0050,0051,0052,0053,0054,0011,0012,0033,
626 bc7cb1a1 2003-11-23 devnull 0060,0061,0032,0063,0064,0065,0066,0010,
627 bc7cb1a1 2003-11-23 devnull 0070,0071,0072,0073,0004,0024,0076,0341,
628 bc7cb1a1 2003-11-23 devnull 0101,0102,0103,0104,0105,0106,0107,0110,
629 bc7cb1a1 2003-11-23 devnull 0111,0121,0122,0123,0124,0125,0126,0127,
630 bc7cb1a1 2003-11-23 devnull 0130,0131,0142,0143,0144,0145,0146,0147,
631 bc7cb1a1 2003-11-23 devnull 0150,0151,0160,0161,0162,0163,0164,0165,
632 bc7cb1a1 2003-11-23 devnull 0166,0167,0170,0200,0212,0213,0214,0215,
633 bc7cb1a1 2003-11-23 devnull 0216,0217,0220,0232,0233,0234,0235,0236,
634 bc7cb1a1 2003-11-23 devnull 0237,0240,0252,0253,0254,0255,0256,0257,
635 bc7cb1a1 2003-11-23 devnull 0260,0261,0262,0263,0264,0265,0266,0267,
636 bc7cb1a1 2003-11-23 devnull 0270,0271,0272,0273,0274,0275,0276,0277,
637 bc7cb1a1 2003-11-23 devnull 0312,0313,0314,0315,0316,0317,0332,0333,
638 bc7cb1a1 2003-11-23 devnull 0334,0335,0336,0337,0352,0353,0354,0355,
639 bc7cb1a1 2003-11-23 devnull 0356,0357,0372,0373,0374,0375,0376,0377,
640 bc7cb1a1 2003-11-23 devnull };
641 bc7cb1a1 2003-11-23 devnull uchar atoibm[] =
642 bc7cb1a1 2003-11-23 devnull {
643 bc7cb1a1 2003-11-23 devnull 0000,0001,0002,0003,0067,0055,0056,0057,
644 bc7cb1a1 2003-11-23 devnull 0026,0005,0045,0013,0014,0015,0016,0017,
645 bc7cb1a1 2003-11-23 devnull 0020,0021,0022,0023,0074,0075,0062,0046,
646 bc7cb1a1 2003-11-23 devnull 0030,0031,0077,0047,0034,0035,0036,0037,
647 bc7cb1a1 2003-11-23 devnull 0100,0132,0177,0173,0133,0154,0120,0175,
648 bc7cb1a1 2003-11-23 devnull 0115,0135,0134,0116,0153,0140,0113,0141,
649 bc7cb1a1 2003-11-23 devnull 0360,0361,0362,0363,0364,0365,0366,0367,
650 bc7cb1a1 2003-11-23 devnull 0370,0371,0172,0136,0114,0176,0156,0157,
651 bc7cb1a1 2003-11-23 devnull 0174,0301,0302,0303,0304,0305,0306,0307,
652 bc7cb1a1 2003-11-23 devnull 0310,0311,0321,0322,0323,0324,0325,0326,
653 bc7cb1a1 2003-11-23 devnull 0327,0330,0331,0342,0343,0344,0345,0346,
654 bc7cb1a1 2003-11-23 devnull 0347,0350,0351,0255,0340,0275,0137,0155,
655 bc7cb1a1 2003-11-23 devnull 0171,0201,0202,0203,0204,0205,0206,0207,
656 bc7cb1a1 2003-11-23 devnull 0210,0211,0221,0222,0223,0224,0225,0226,
657 bc7cb1a1 2003-11-23 devnull 0227,0230,0231,0242,0243,0244,0245,0246,
658 bc7cb1a1 2003-11-23 devnull 0247,0250,0251,0300,0117,0320,0241,0007,
659 bc7cb1a1 2003-11-23 devnull 0040,0041,0042,0043,0044,0025,0006,0027,
660 bc7cb1a1 2003-11-23 devnull 0050,0051,0052,0053,0054,0011,0012,0033,
661 bc7cb1a1 2003-11-23 devnull 0060,0061,0032,0063,0064,0065,0066,0010,
662 bc7cb1a1 2003-11-23 devnull 0070,0071,0072,0073,0004,0024,0076,0341,
663 bc7cb1a1 2003-11-23 devnull 0101,0102,0103,0104,0105,0106,0107,0110,
664 bc7cb1a1 2003-11-23 devnull 0111,0121,0122,0123,0124,0125,0126,0127,
665 bc7cb1a1 2003-11-23 devnull 0130,0131,0142,0143,0144,0145,0146,0147,
666 bc7cb1a1 2003-11-23 devnull 0150,0151,0160,0161,0162,0163,0164,0165,
667 bc7cb1a1 2003-11-23 devnull 0166,0167,0170,0200,0212,0213,0214,0215,
668 bc7cb1a1 2003-11-23 devnull 0216,0217,0220,0232,0233,0234,0235,0236,
669 bc7cb1a1 2003-11-23 devnull 0237,0240,0252,0253,0254,0255,0256,0257,
670 bc7cb1a1 2003-11-23 devnull 0260,0261,0262,0263,0264,0265,0266,0267,
671 bc7cb1a1 2003-11-23 devnull 0270,0271,0272,0273,0274,0275,0276,0277,
672 bc7cb1a1 2003-11-23 devnull 0312,0313,0314,0315,0316,0317,0332,0333,
673 bc7cb1a1 2003-11-23 devnull 0334,0335,0336,0337,0352,0353,0354,0355,
674 bc7cb1a1 2003-11-23 devnull 0356,0357,0372,0373,0374,0375,0376,0377,
675 bc7cb1a1 2003-11-23 devnull };