]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/aux/data2s.c
fix filetype detecton by suffix so that multiple dots dont confuse it. (thanks kvik)
[plan9front.git] / sys / src / cmd / aux / data2s.c
1 #include <u.h>
2 #include <libc.h>
3 #include <bio.h>
4
5 void
6 main(int argc, char *argv[])
7 {
8         Biobuf bin, bout;
9         long len, slen;
10         int c, x;
11
12         if(argc != 2){
13                 fprint(2, "usage: data2s name\n");
14                 exits("usage");
15         }
16         Binit(&bin, 0, OREAD);
17         Binit(&bout, 1, OWRITE);
18         Bprint(&bout, "#define D(o,s) DATA %scode+o(SB)/8, $s\n", argv[1]);
19         for(len=0; (c=Bgetc(&bin))!=Beof; len++){
20                 if((len&7) == 0)
21                         Bprint(&bout, "D(%ld,\"", len);
22                 if(c>=0x20 && c<=0x7E){
23                         if(c == '\\' || c == '"')
24                                 Bprint(&bout, "\\");
25                         Bprint(&bout, "%c", c);
26                 }else{
27                         if((x=Bgetc(&bin))!=Beof)
28                                 Bungetc(&bin);
29                         if(x>='0' && x<='7')
30                                 Bprint(&bout, "\\%.3uo", c);
31                         else
32                                 Bprint(&bout, "\\%uo", c);
33                 }
34                 if((len&7) == 7)
35                         Bprint(&bout, "\")\n");
36         }
37         slen = len;
38         if(len & 7){
39                 while(len & 7){
40                         Bprint(&bout, "\\z");
41                         len++;
42                 }
43                 Bprint(&bout, "\")\n");
44         }
45         Bprint(&bout, "#undef D\n");
46         Bprint(&bout, "GLOBL %scode+0(SB), $%ld\n", argv[1], len);
47         Bprint(&bout, "GLOBL %slen+0(SB), $4\n", argv[1]);
48         Bprint(&bout, "DATA %slen+0(SB)/4, $%ld\n", argv[1], slen);
49         exits(0);
50 }