1 /***************************************************************************
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
10 * Copyright (C) 2007 Dave Chapman
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
20 ****************************************************************************/
24 #include <sys/types.h>
35 static off_t
filesize(int fd
)
43 static void write_cfile(const unsigned char* buf
, off_t len
, FILE* fp
, const char *name
)
47 fprintf(fp
,"unsigned char %s[%ld] = {",name
,len
);
54 fprintf(fp
,"0x%02x",buf
[i
]);
55 } else if ((i
% 16) == 15) {
56 fprintf(fp
,"0x%02x,",buf
[i
]);
58 fprintf(fp
,"0x%02x, ",buf
[i
]);
64 int main (int argc
, char* argv
[])
69 char cfilename
[256], hfilename
[256];
72 fprintf(stderr
,"Usage: bin2c cname file1 [file2 [file3 ...]]\n");
78 snprintf(cfilename
,256,"%s.c",cname
);
79 cfile
= fopen(cfilename
,"w+");
81 fprintf(stderr
,"Couldn't open %s\n",cfilename
);
85 snprintf(hfilename
,256,"%s.h",cname
);
86 hfile
= fopen(hfilename
,"w+");
88 fprintf(stderr
,"Couldn't open %s\n",hfilename
);
93 fprintf(cfile
,"/* Generated by bin2c */\n\n");
94 fprintf(cfile
,"#include \"%s\"\n\n", basename(hfilename
));
95 fprintf(hfile
,"/* Generated by bin2c */\n\n");
97 for(i
=0; i
< argc
- 2; i
++) {
102 char *array
= argv
[2+i
];
104 int fd
= open(array
,O_RDONLY
|O_BINARY
);
106 fprintf(stderr
,"Can not open %s\n",argv
[2+i
]);
112 orig_len
= filesize(fd
);
114 len
= (orig_len
+ 3) & ~3;
117 if (read(fd
,buf
,orig_len
) < orig_len
) {
118 fprintf(stderr
,"Short read, aborting\n");
122 /* pad to 32bit with zeros */
124 memset(buf
+orig_len
, 0, len
-orig_len
);
126 /* remove file extension */
127 ext
= strchr (array
, '.');
130 write_cfile (buf
, len
, cfile
, array
);
131 fprintf(hfile
,"extern unsigned char %s[%ld];\n",array
,len
);