commit a70c70c07cf79e6cf34800d510860403077984ad Author: Josh Holtrop Date: Wed May 18 15:32:48 2011 -0400 initial cfs_gen.py script diff --git a/cfs_gen.py b/cfs_gen.py new file mode 100755 index 0000000..24fadb5 --- /dev/null +++ b/cfs_gen.py @@ -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 \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))