xref: /inferno-os/appl/cmd/dd.b (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1implement dd;
2
3include "sys.m";
4	sys: Sys;
5	stderr: ref Sys->FD;
6
7include "draw.m";
8
9dd: module
10{
11	init: fn(nil: ref Draw->Context, argv: list of string);
12};
13
14BIG:	con 2147483647;
15LCASE,
16UCASE,
17SWAB,
18NERR	,
19SYNC	:	con (1<<iota);
20
21NULL,
22CNULL,
23EBCDIC,
24IBM,
25ASCII,
26BLOCK,
27UNBLOCK:	con iota;
28
29cflag:		int;
30ctype:	int;
31
32fflag:		int;
33arg:		string;
34ifile:		string;
35ofile:		string;
36ibuf:		array of byte;
37obuf:		array of byte;
38op:		int;
39skip:		int;
40oseekn:	int;
41iseekn:	int;
42count:	int;
43files:=	1;
44ibs:=		512;
45obs:=		512;
46bs:		int;
47cbs:		int;
48ibc:		int;
49obc:		int;
50cbc:		int;
51nifr:		int;
52nipr:		int;
53nofr:		int;
54nopr:		int;
55ntrunc:	int;
56ibf:		ref Sys->FD;
57obf:		ref Sys->FD;
58nspace:	int;
59
60iskey(key:string, s: string): int
61{
62	return key[0] == '-' && key[1:] ==  s;
63}
64
65exits(msg: string)
66{
67	if(msg == nil)
68		exit;
69
70	raise "fail:"+msg;
71}
72
73perror(msg: string)
74{
75	sys->fprint(stderr, "%s: %r\n", msg);
76}
77
78init(nil: ref Draw->Context, argv: list of string)
79{
80	sys = load Sys Sys->PATH;
81	if(sys == nil)
82		return;
83	stderr = sys->fildes(2);
84
85	ctype = NULL;
86	argv = tl argv;
87	while(argv != nil) {
88		key := hd argv;
89		argv = tl argv;
90		if(argv == nil){
91			sys->fprint(stderr, "dd: arg %s needs a value\n", key);
92			exits("arg");
93		}
94		arg = hd argv;
95		argv = tl argv;
96		if(iskey(key, "ibs")) {
97			ibs = number(BIG);
98			continue;
99		}
100		if(iskey(key, "obs")) {
101			obs = number(BIG);
102			continue;
103		}
104		if(iskey(key, "cbs")) {
105			cbs = number(BIG);
106			continue;
107		}
108		if(iskey(key, "bs")) {
109			bs = number(BIG);
110			continue;
111		}
112		if(iskey(key, "if")) {
113			ifile = arg[0:];
114			continue;
115		}
116		if(iskey(key, "of")) {
117			ofile = arg[0:];
118			continue;
119		}
120		if(iskey(key, "skip")) {
121			skip = number(BIG);
122			continue;
123		}
124		if(iskey(key, "seek") || iskey(key, "oseek")) {
125			oseekn = number(BIG);
126			continue;
127		}
128		if(iskey(key, "iseek")) {
129			iseekn = number(BIG);
130			continue;
131		}
132		if(iskey(key, "count")) {
133			count = number(BIG);
134			continue;
135		}
136		if(iskey(key, "files")) {
137			files = number(BIG);
138			continue;
139		}
140		if(iskey(key, "conv")) {
141			do {
142				if(arg == nil)
143					break;
144				if(match(","))
145					continue;
146				if(match("ebcdic")) {
147					ctype = EBCDIC;
148					continue;
149				}
150				if(match("ibm")) {
151					ctype = IBM;
152					continue;
153				}
154				if(match("ascii")) {
155					ctype = ASCII;
156					continue;
157				}
158				if(match("block")) {
159					ctype = BLOCK;
160					continue;
161				}
162				if(match("unblock")) {
163					ctype = UNBLOCK;
164					continue;
165				}
166				if(match("lcase")) {
167					cflag |= LCASE;
168					continue;
169				}
170				if(match("ucase")) {
171					cflag |= UCASE;
172					continue;
173				}
174				if(match("swab")) {
175					cflag |= SWAB;
176					continue;
177				}
178				if(match("noerror")) {
179					cflag |= NERR;
180					continue;
181				}
182				if(match("sync")) {
183					cflag |= SYNC;
184					continue;
185				}
186			} while(1);
187			continue;
188		}
189		sys->fprint(stderr, "dd: bad arg: %s\n", key);
190		exits("arg");
191	}
192	if(ctype == NULL && cflag&(LCASE|UCASE))
193		ctype = CNULL;
194	if(ifile != nil)
195		ibf = sys->open(ifile, Sys->OREAD);
196	else
197		ibf = sys->fildes(sys->dup(0, -1));
198
199	if(ibf == nil) {
200		sys->fprint(stderr, "dd: open %s: %r\n", ifile);
201		exits("open");
202	}
203
204	if(ofile != nil){
205		obf = sys->create(ofile, Sys->OWRITE, 8r664);
206		if(obf == nil) {
207			sys->fprint(stderr, "dd: create %s: %r\n", ofile);
208			exits("create");
209		}
210	}else{
211		obf = sys->fildes(sys->dup(1, -1));
212		if(obf == nil) {
213			sys->fprint(stderr, "dd: can't dup file descriptor: %r\n");
214			exits("dup");
215		}
216	}
217	if(bs)
218		ibs = obs = bs;
219	if(ibs == obs && ctype == NULL)
220		fflag++;
221	if(ibs == 0 || obs == 0) {
222		sys->fprint(stderr, "dd: counts: cannot be zero\n");
223		exits("counts");
224	}
225	ibuf = array[ibs] of byte;
226	obuf = array[obs] of byte;
227
228	if(fflag)
229		obuf = ibuf;
230
231	sys->seek(obf, big obs*big oseekn, Sys->SEEKRELA);
232	sys->seek(ibf, big ibs*big iseekn,  Sys->SEEKRELA);
233	while(skip) {
234		sys->read(ibf, ibuf, ibs);
235		skip--;
236	}
237
238	ibc = 0;
239	obc = 0;
240	cbc = 0;
241	op = 0;
242	ip := 0;
243	do {
244		if(ibc-- == 0) {
245			ibc = 0;
246			if(count==0 || nifr+nipr!=count) {
247				if(cflag&(NERR|SYNC))
248					for(ip=0; ip < len ibuf; ip++)
249						ibuf[ip] = byte 0;
250				ibc = sys->read(ibf, ibuf, ibs);
251			}
252			if(ibc == -1) {
253				perror("read");
254				if((cflag&NERR) == 0) {
255					flsh();
256					term();
257				}
258				ibc = 0;
259				for(c:=0; c<ibs; c++)
260					if(ibuf[c] != byte 0)
261						ibc = c;
262				stats();
263			}
264			if(ibc == 0 && --files<=0) {
265				flsh();
266				term();
267			}
268			if(ibc != ibs) {
269				nipr++;
270				if(cflag&SYNC)
271					ibc = ibs;
272			} else
273				nifr++;
274			ip = 0;
275			c := (ibc>>1) & ~1;
276			if(cflag&SWAB && c) do {
277				a := ibuf[ip++];
278				ibuf[ip-1] = ibuf[ip];
279				ibuf[ip++] = a;
280			} while(--c);
281			if(fflag) {
282				obc = ibc;
283				flsh();
284				ibc = 0;
285			}
286			continue;
287		}
288		c := 0;
289		c |= int ibuf[ip++];
290		c &= 8r377;
291		conv(c);
292	} while(1);
293}
294
295conv(c: int)
296{
297	case ctype {
298	NULL => null(c);
299	CNULL => cnull(c);
300	EBCDIC => ebcdic(c);
301	IBM => ibm(c);
302	ASCII => ascii(c);
303	BLOCK => block(c);
304	UNBLOCK => unblock(c);
305	}
306}
307
308flsh()
309{
310	if(obc) {
311		if(obc == obs)
312			nofr++;
313		else
314			nopr++;
315		c := sys->write(obf, obuf, obc);
316		if(c != obc) {
317			perror("write");
318			term();
319		}
320		obc = 0;
321	}
322}
323
324match(s: string): int
325{
326	if(len s > len arg)
327		return 0;
328	if(arg[:len s] == s) {
329		arg = arg[len s:];
330		return 1;
331	}
332	return 0;
333}
334
335
336number(bignum: int): int
337{
338	n := 0;
339	i := 0;
340	while(i < len arg && arg[i] >= '0' && arg[i] <= '9')
341		n = n*10 + arg[i++] - '0';
342	for(;i<len arg; i++) case(arg[i]) {
343		'k' =>
344			n *= 1024;
345		'b' =>
346			n *= 512;
347		'x' =>
348			arg = arg[i:];
349			n *= number(BIG);
350	}
351	if(n>=bignum || n<0) {
352		sys->fprint(stderr, "dd: argument out of range\n");
353		exits("range");
354	}
355	return n;
356}
357
358cnull(cc: int)
359{
360	c := cc;
361	if((cflag&UCASE) && c>='a' && c<='z')
362		c += 'A'-'a';
363	if((cflag&LCASE) && c>='A' && c<='Z')
364		c += 'a'-'A';
365	null(c);
366}
367
368null(c: int)
369{
370	obuf[op++] = byte c;
371	if(++obc >= obs) {
372		flsh();
373		op = 0;
374	}
375}
376
377ascii(cc: int)
378{
379	c := etoa[cc];
380	if(cbs == 0) {
381		cnull(int c);
382		return;
383	}
384	if(c == byte ' ')
385		nspace++;
386	else {
387		while(nspace > 0) {
388			null(' ');
389			nspace--;
390		}
391		cnull(int c);
392	}
393
394	if(++cbc >= cbs) {
395		null('\n');
396		cbc = 0;
397		nspace = 0;
398	}
399}
400
401unblock(cc: int)
402{
403	c := cc & 8r377;
404	if(cbs == 0) {
405		cnull(c);
406		return;
407	}
408	if(c == ' ')
409		nspace++;
410	else {
411		while(nspace > 0) {
412			null(' ');
413			nspace--;
414		}
415		cnull(c);
416	}
417
418	if(++cbc >= cbs) {
419		null('\n');
420		cbc = 0;
421		nspace = 0;
422	}
423}
424
425ebcdic(cc: int)
426{
427
428	c := cc;
429	if(cflag&UCASE && c>='a' && c<='z')
430		c += 'A'-'a';
431	if(cflag&LCASE && c>='A' && c<='Z')
432		c += 'a'-'A';
433	c = int atoe[c];
434	if(cbs == 0) {
435		null(c);
436		return;
437	}
438	if(cc == '\n') {
439		while(cbc < cbs) {
440			null(int atoe[' ']);
441			cbc++;
442		}
443		cbc = 0;
444		return;
445	}
446	if(cbc == cbs)
447		ntrunc++;
448	cbc++;
449	if(cbc <= cbs)
450		null(c);
451}
452
453ibm(cc: int)
454{
455	c := cc;
456	if(cflag&UCASE && c>='a' && c<='z')
457		c += 'A'-'a';
458	if(cflag&LCASE && c>='A' && c<='Z')
459		c += 'a'-'A';
460	c = int atoibm[c] & 8r377;
461	if(cbs == 0) {
462		null(c);
463		return;
464	}
465	if(cc == '\n') {
466		while(cbc < cbs) {
467			null(int atoibm[' ']);
468			cbc++;
469		}
470		cbc = 0;
471		return;
472	}
473	if(cbc == cbs)
474		ntrunc++;
475	cbc++;
476	if(cbc <= cbs)
477		null(c);
478}
479
480block(cc: int)
481{
482	c := cc;
483	if(cflag&UCASE && c>='a' && c<='z')
484		c += 'A'-'a';
485	if(cflag&LCASE && c>='A' && c<='Z')
486		c += 'a'-'A';
487	c &= 8r377;
488	if(cbs == 0) {
489		null(c);
490		return;
491	}
492	if(cc == '\n') {
493		while(cbc < cbs) {
494			null(' ');
495			cbc++;
496		}
497		cbc = 0;
498		return;
499	}
500	if(cbc == cbs)
501		ntrunc++;
502	cbc++;
503	if(cbc <= cbs)
504		null(c);
505}
506
507term()
508{
509	stats();
510	exits(nil);
511}
512
513stats()
514{
515	sys->fprint(stderr, "%ud+%ud records in\n", nifr, nipr);
516	sys->fprint(stderr, "%ud+%ud records out\n", nofr, nopr);
517	if(ntrunc)
518		sys->fprint(stderr, "%ud truncated records\n", ntrunc);
519}
520
521etoa := array[] of
522{
523	byte 8r000,byte 8r001,byte 8r002,byte 8r003,byte 8r234,byte 8r011,byte 8r206,byte 8r177,
524	byte 8r227,byte 8r215,byte 8r216,byte 8r013,byte 8r014,byte 8r015,byte 8r016,byte 8r017,
525	byte 8r020,byte 8r021,byte 8r022,byte 8r023,byte 8r235,byte 8r205,byte 8r010,byte 8r207,
526	byte 8r030,byte 8r031,byte 8r222,byte 8r217,byte 8r034,byte 8r035,byte 8r036,byte 8r037,
527	byte 8r200,byte 8r201,byte 8r202,byte 8r203,byte 8r204,byte 8r012,byte 8r027,byte 8r033,
528	byte 8r210,byte 8r211,byte 8r212,byte 8r213,byte 8r214,byte 8r005,byte 8r006,byte 8r007,
529	byte 8r220,byte 8r221,byte 8r026,byte 8r223,byte 8r224,byte 8r225,byte 8r226,byte 8r004,
530	byte 8r230,byte 8r231,byte 8r232,byte 8r233,byte 8r024,byte 8r025,byte 8r236,byte 8r032,
531	byte 8r040,byte 8r240,byte 8r241,byte 8r242,byte 8r243,byte 8r244,byte 8r245,byte 8r246,
532	byte 8r247,byte 8r250,byte 8r133,byte 8r056,byte 8r074,byte 8r050,byte 8r053,byte 8r041,
533	byte 8r046,byte 8r251,byte 8r252,byte 8r253,byte 8r254,byte 8r255,byte 8r256,byte 8r257,
534	byte 8r260,byte 8r261,byte 8r135,byte 8r044,byte 8r052,byte 8r051,byte 8r073,byte 8r136,
535	byte 8r055,byte 8r057,byte 8r262,byte 8r263,byte 8r264,byte 8r265,byte 8r266,byte 8r267,
536	byte 8r270,byte 8r271,byte 8r174,byte 8r054,byte 8r045,byte 8r137,byte 8r076,byte 8r077,
537	byte 8r272,byte 8r273,byte 8r274,byte 8r275,byte 8r276,byte 8r277,byte 8r300,byte 8r301,
538	byte 8r302,byte 8r140,byte 8r072,byte 8r043,byte 8r100,byte 8r047,byte 8r075,byte 8r042,
539	byte 8r303,byte 8r141,byte 8r142,byte 8r143,byte 8r144,byte 8r145,byte 8r146,byte 8r147,
540	byte 8r150,byte 8r151,byte 8r304,byte 8r305,byte 8r306,byte 8r307,byte 8r310,byte 8r311,
541	byte 8r312,byte 8r152,byte 8r153,byte 8r154,byte 8r155,byte 8r156,byte 8r157,byte 8r160,
542	byte 8r161,byte 8r162,byte 8r313,byte 8r314,byte 8r315,byte 8r316,byte 8r317,byte 8r320,
543	byte 8r321,byte 8r176,byte 8r163,byte 8r164,byte 8r165,byte 8r166,byte 8r167,byte 8r170,
544	byte 8r171,byte 8r172,byte 8r322,byte 8r323,byte 8r324,byte 8r325,byte 8r326,byte 8r327,
545	byte 8r330,byte 8r331,byte 8r332,byte 8r333,byte 8r334,byte 8r335,byte 8r336,byte 8r337,
546	byte 8r340,byte 8r341,byte 8r342,byte 8r343,byte 8r344,byte 8r345,byte 8r346,byte 8r347,
547	byte 8r173,byte 8r101,byte 8r102,byte 8r103,byte 8r104,byte 8r105,byte 8r106,byte 8r107,
548	byte 8r110,byte 8r111,byte 8r350,byte 8r351,byte 8r352,byte 8r353,byte 8r354,byte 8r355,
549	byte 8r175,byte 8r112,byte 8r113,byte 8r114,byte 8r115,byte 8r116,byte 8r117,byte 8r120,
550	byte 8r121,byte 8r122,byte 8r356,byte 8r357,byte 8r360,byte 8r361,byte 8r362,byte 8r363,
551	byte 8r134,byte 8r237,byte 8r123,byte 8r124,byte 8r125,byte 8r126,byte 8r127,byte 8r130,
552	byte 8r131,byte 8r132,byte 8r364,byte 8r365,byte 8r366,byte 8r367,byte 8r370,byte 8r371,
553	byte 8r060,byte 8r061,byte 8r062,byte 8r063,byte 8r064,byte 8r065,byte 8r066,byte 8r067,
554	byte 8r070,byte 8r071,byte 8r372,byte 8r373,byte 8r374,byte 8r375,byte 8r376,byte 8r377,
555};
556atoe := array[] of
557{
558	byte 8r000,byte 8r001,byte 8r002,byte 8r003,byte 8r067,byte 8r055,byte 8r056,byte 8r057,
559	byte 8r026,byte 8r005,byte 8r045,byte 8r013,byte 8r014,byte 8r015,byte 8r016,byte 8r017,
560	byte 8r020,byte 8r021,byte 8r022,byte 8r023,byte 8r074,byte 8r075,byte 8r062,byte 8r046,
561	byte 8r030,byte 8r031,byte 8r077,byte 8r047,byte 8r034,byte 8r035,byte 8r036,byte 8r037,
562	byte 8r100,byte 8r117,byte 8r177,byte 8r173,byte 8r133,byte 8r154,byte 8r120,byte 8r175,
563	byte 8r115,byte 8r135,byte 8r134,byte 8r116,byte 8r153,byte 8r140,byte 8r113,byte 8r141,
564	byte 8r360,byte 8r361,byte 8r362,byte 8r363,byte 8r364,byte 8r365,byte 8r366,byte 8r367,
565	byte 8r370,byte 8r371,byte 8r172,byte 8r136,byte 8r114,byte 8r176,byte 8r156,byte 8r157,
566	byte 8r174,byte 8r301,byte 8r302,byte 8r303,byte 8r304,byte 8r305,byte 8r306,byte 8r307,
567	byte 8r310,byte 8r311,byte 8r321,byte 8r322,byte 8r323,byte 8r324,byte 8r325,byte 8r326,
568	byte 8r327,byte 8r330,byte 8r331,byte 8r342,byte 8r343,byte 8r344,byte 8r345,byte 8r346,
569	byte 8r347,byte 8r350,byte 8r351,byte 8r112,byte 8r340,byte 8r132,byte 8r137,byte 8r155,
570	byte 8r171,byte 8r201,byte 8r202,byte 8r203,byte 8r204,byte 8r205,byte 8r206,byte 8r207,
571	byte 8r210,byte 8r211,byte 8r221,byte 8r222,byte 8r223,byte 8r224,byte 8r225,byte 8r226,
572	byte 8r227,byte 8r230,byte 8r231,byte 8r242,byte 8r243,byte 8r244,byte 8r245,byte 8r246,
573	byte 8r247,byte 8r250,byte 8r251,byte 8r300,byte 8r152,byte 8r320,byte 8r241,byte 8r007,
574	byte 8r040,byte 8r041,byte 8r042,byte 8r043,byte 8r044,byte 8r025,byte 8r006,byte 8r027,
575	byte 8r050,byte 8r051,byte 8r052,byte 8r053,byte 8r054,byte 8r011,byte 8r012,byte 8r033,
576	byte 8r060,byte 8r061,byte 8r032,byte 8r063,byte 8r064,byte 8r065,byte 8r066,byte 8r010,
577	byte 8r070,byte 8r071,byte 8r072,byte 8r073,byte 8r004,byte 8r024,byte 8r076,byte 8r341,
578	byte 8r101,byte 8r102,byte 8r103,byte 8r104,byte 8r105,byte 8r106,byte 8r107,byte 8r110,
579	byte 8r111,byte 8r121,byte 8r122,byte 8r123,byte 8r124,byte 8r125,byte 8r126,byte 8r127,
580	byte 8r130,byte 8r131,byte 8r142,byte 8r143,byte 8r144,byte 8r145,byte 8r146,byte 8r147,
581	byte 8r150,byte 8r151,byte 8r160,byte 8r161,byte 8r162,byte 8r163,byte 8r164,byte 8r165,
582	byte 8r166,byte 8r167,byte 8r170,byte 8r200,byte 8r212,byte 8r213,byte 8r214,byte 8r215,
583	byte 8r216,byte 8r217,byte 8r220,byte 8r232,byte 8r233,byte 8r234,byte 8r235,byte 8r236,
584	byte 8r237,byte 8r240,byte 8r252,byte 8r253,byte 8r254,byte 8r255,byte 8r256,byte 8r257,
585	byte 8r260,byte 8r261,byte 8r262,byte 8r263,byte 8r264,byte 8r265,byte 8r266,byte 8r267,
586	byte 8r270,byte 8r271,byte 8r272,byte 8r273,byte 8r274,byte 8r275,byte 8r276,byte 8r277,
587	byte 8r312,byte 8r313,byte 8r314,byte 8r315,byte 8r316,byte 8r317,byte 8r332,byte 8r333,
588	byte 8r334,byte 8r335,byte 8r336,byte 8r337,byte 8r352,byte 8r353,byte 8r354,byte 8r355,
589	byte 8r356,byte 8r357,byte 8r372,byte 8r373,byte 8r374,byte 8r375,byte 8r376,byte 8r377,
590};
591atoibm := array[] of
592{
593	byte 8r000,byte 8r001,byte 8r002,byte 8r003,byte 8r067,byte 8r055,byte 8r056,byte 8r057,
594	byte 8r026,byte 8r005,byte 8r045,byte 8r013,byte 8r014,byte 8r015,byte 8r016,byte 8r017,
595	byte 8r020,byte 8r021,byte 8r022,byte 8r023,byte 8r074,byte 8r075,byte 8r062,byte 8r046,
596	byte 8r030,byte 8r031,byte 8r077,byte 8r047,byte 8r034,byte 8r035,byte 8r036,byte 8r037,
597	byte 8r100,byte 8r132,byte 8r177,byte 8r173,byte 8r133,byte 8r154,byte 8r120,byte 8r175,
598	byte 8r115,byte 8r135,byte 8r134,byte 8r116,byte 8r153,byte 8r140,byte 8r113,byte 8r141,
599	byte 8r360,byte 8r361,byte 8r362,byte 8r363,byte 8r364,byte 8r365,byte 8r366,byte 8r367,
600	byte 8r370,byte 8r371,byte 8r172,byte 8r136,byte 8r114,byte 8r176,byte 8r156,byte 8r157,
601	byte 8r174,byte 8r301,byte 8r302,byte 8r303,byte 8r304,byte 8r305,byte 8r306,byte 8r307,
602	byte 8r310,byte 8r311,byte 8r321,byte 8r322,byte 8r323,byte 8r324,byte 8r325,byte 8r326,
603	byte 8r327,byte 8r330,byte 8r331,byte 8r342,byte 8r343,byte 8r344,byte 8r345,byte 8r346,
604	byte 8r347,byte 8r350,byte 8r351,byte 8r255,byte 8r340,byte 8r275,byte 8r137,byte 8r155,
605	byte 8r171,byte 8r201,byte 8r202,byte 8r203,byte 8r204,byte 8r205,byte 8r206,byte 8r207,
606	byte 8r210,byte 8r211,byte 8r221,byte 8r222,byte 8r223,byte 8r224,byte 8r225,byte 8r226,
607	byte 8r227,byte 8r230,byte 8r231,byte 8r242,byte 8r243,byte 8r244,byte 8r245,byte 8r246,
608	byte 8r247,byte 8r250,byte 8r251,byte 8r300,byte 8r117,byte 8r320,byte 8r241,byte 8r007,
609	byte 8r040,byte 8r041,byte 8r042,byte 8r043,byte 8r044,byte 8r025,byte 8r006,byte 8r027,
610	byte 8r050,byte 8r051,byte 8r052,byte 8r053,byte 8r054,byte 8r011,byte 8r012,byte 8r033,
611	byte 8r060,byte 8r061,byte 8r032,byte 8r063,byte 8r064,byte 8r065,byte 8r066,byte 8r010,
612	byte 8r070,byte 8r071,byte 8r072,byte 8r073,byte 8r004,byte 8r024,byte 8r076,byte 8r341,
613	byte 8r101,byte 8r102,byte 8r103,byte 8r104,byte 8r105,byte 8r106,byte 8r107,byte 8r110,
614	byte 8r111,byte 8r121,byte 8r122,byte 8r123,byte 8r124,byte 8r125,byte 8r126,byte 8r127,
615	byte 8r130,byte 8r131,byte 8r142,byte 8r143,byte 8r144,byte 8r145,byte 8r146,byte 8r147,
616	byte 8r150,byte 8r151,byte 8r160,byte 8r161,byte 8r162,byte 8r163,byte 8r164,byte 8r165,
617	byte 8r166,byte 8r167,byte 8r170,byte 8r200,byte 8r212,byte 8r213,byte 8r214,byte 8r215,
618	byte 8r216,byte 8r217,byte 8r220,byte 8r232,byte 8r233,byte 8r234,byte 8r235,byte 8r236,
619	byte 8r237,byte 8r240,byte 8r252,byte 8r253,byte 8r254,byte 8r255,byte 8r256,byte 8r257,
620	byte 8r260,byte 8r261,byte 8r262,byte 8r263,byte 8r264,byte 8r265,byte 8r266,byte 8r267,
621	byte 8r270,byte 8r271,byte 8r272,byte 8r273,byte 8r274,byte 8r275,byte 8r276,byte 8r277,
622	byte 8r312,byte 8r313,byte 8r314,byte 8r315,byte 8r316,byte 8r317,byte 8r332,byte 8r333,
623	byte 8r334,byte 8r335,byte 8r336,byte 8r337,byte 8r352,byte 8r353,byte 8r354,byte 8r355,
624	byte 8r356,byte 8r357,byte 8r372,byte 8r373,byte 8r374,byte 8r375,byte 8r376,byte 8r377,
625};
626