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