xref: /inferno-os/utils/data2s/data2s.c (revision 6e425a9de8c003b5a733621a6b6730ec3cc902b8)
174a4d8c2SCharles.Forsyth #include <lib9.h>
274a4d8c2SCharles.Forsyth #include <bio.h>
374a4d8c2SCharles.Forsyth 
474a4d8c2SCharles.Forsyth void
main(int argc,char * argv[])574a4d8c2SCharles.Forsyth main(int argc, char *argv[])
674a4d8c2SCharles.Forsyth {
774a4d8c2SCharles.Forsyth 	Biobuf bin, bout;
874a4d8c2SCharles.Forsyth 	long len;
974a4d8c2SCharles.Forsyth 	int n;
1074a4d8c2SCharles.Forsyth 	uchar block[8], *c;
1174a4d8c2SCharles.Forsyth 
1274a4d8c2SCharles.Forsyth 	if(argc != 2){
1374a4d8c2SCharles.Forsyth 		fprint(2, "usage: data2s name\n");
1474a4d8c2SCharles.Forsyth 		exits("usage");
1574a4d8c2SCharles.Forsyth 	}
1674a4d8c2SCharles.Forsyth 	setbinmode();
1774a4d8c2SCharles.Forsyth 	Binit(&bin, 0, OREAD);
1874a4d8c2SCharles.Forsyth 	Binit(&bout, 1, OWRITE);
1974a4d8c2SCharles.Forsyth 	for(len=0; (n=Bread(&bin, block, sizeof(block))) > 0; len += n){
2074a4d8c2SCharles.Forsyth 		Bprint(&bout, "DATA %scode+%ld(SB)/%d, $\"", argv[1], len, n);
2174a4d8c2SCharles.Forsyth 		for(c=block; c < block+n; c++)
2274a4d8c2SCharles.Forsyth 			if(*c)
2374a4d8c2SCharles.Forsyth 				Bprint(&bout, "\\%uo", *c);
2474a4d8c2SCharles.Forsyth 			else
2574a4d8c2SCharles.Forsyth 				Bprint(&bout, "\\z");
2674a4d8c2SCharles.Forsyth 		Bprint(&bout, "\"\n");
2774a4d8c2SCharles.Forsyth 	}
28*6e425a9dSCharles.Forsyth 	if(len == 0)
29*6e425a9dSCharles.Forsyth 		Bprint(&bout, "GLOBL %scode+0(SB), $1\n", argv[1]);
30*6e425a9dSCharles.Forsyth 	else
3174a4d8c2SCharles.Forsyth 		Bprint(&bout, "GLOBL %scode+0(SB), $%ld\n", argv[1], len);
3274a4d8c2SCharles.Forsyth 	Bprint(&bout, "GLOBL %slen+0(SB), $4\n", argv[1]);
3374a4d8c2SCharles.Forsyth 	Bprint(&bout, "DATA %slen+0(SB)/4, $%ld\n", argv[1], len);
3474a4d8c2SCharles.Forsyth 	exits(0);
3574a4d8c2SCharles.Forsyth }
36