initial cfs_gen.py script
This commit is contained in:
commit
a70c70c07c
84
cfs_gen.py
Executable file
84
cfs_gen.py
Executable file
@ -0,0 +1,84 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import sys
|
||||
import re
|
||||
|
||||
def cname(s):
|
||||
c = re.sub(r'\W', '_', s)
|
||||
if re.search(r'^\d', c):
|
||||
c = '_' + c
|
||||
return c
|
||||
|
||||
def main(argv):
|
||||
if len(argv) < 3:
|
||||
sys.stderr.write('Usage: cfs_gen.py out_file.c path1 [path2...]\n')
|
||||
return 2
|
||||
|
||||
out_fname = argv[1]
|
||||
paths = argv[2:]
|
||||
|
||||
store = {}
|
||||
header_fname = re.sub(r'\.cc?', '.h', out_fname)
|
||||
if header_fname == out_fname:
|
||||
sys.stderr.write('Unrecognized output file name extension\n')
|
||||
return 2
|
||||
c_file = open(out_fname, 'w')
|
||||
h_file = open(header_fname, 'w')
|
||||
c_file.write('#include <string.h>\n')
|
||||
for p in paths:
|
||||
c_name = cname(p)
|
||||
c_file.write('static const unsigned char %s[] = {' % c_name)
|
||||
src = open(p, 'r')
|
||||
s_len = 0
|
||||
while 1:
|
||||
if s_len % 12 == 0:
|
||||
c_file.write('\n ')
|
||||
ch = src.read(1)
|
||||
if len(ch) < 1:
|
||||
break
|
||||
s_len += 1
|
||||
c_file.write('0x%02x, ' % ord(ch))
|
||||
c_file.write('0x00\n')
|
||||
src.close()
|
||||
c_file.write('};\n')
|
||||
store[p] = (c_name, s_len)
|
||||
c_file.write('''static const struct {
|
||||
const char *fname;
|
||||
unsigned char *data;
|
||||
unsigned int len;
|
||||
} store[] = {\n''')
|
||||
for ent in store:
|
||||
c_file.write(' {"%s", %s, %d},\n' % \
|
||||
(ent, store[ent][0], store[ent][1]))
|
||||
c_file.write(' {NULL, NULL, 0}\n')
|
||||
c_file.write('};\n')
|
||||
|
||||
c_file.write('''
|
||||
unsigned char *getFile(const char *fname, unsigned int *length)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; store[i].fname != NULL; i++)
|
||||
{
|
||||
if (strcmp(fname, store[i].fname) == 0)
|
||||
{
|
||||
if (length != NULL)
|
||||
*length = store[i].len;
|
||||
return store[i].data;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
''')
|
||||
h_file.write('''#ifndef CFS_GEN_%s
|
||||
#define CFS_GEN_%s
|
||||
|
||||
unsigned char *getFile(const char *fname, unsigned int *length);
|
||||
|
||||
#endif
|
||||
''' % (cname(header_fname), cname(header_fname)))
|
||||
h_file.close()
|
||||
c_file.close()
|
||||
return 0
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main(sys.argv))
|
Loading…
x
Reference in New Issue
Block a user