123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- import sys
- import os
- import string
- basename = ''
- output = ''
- def mkromfs_output(out):
- # print '%s' % out,
- output.write(out)
- def mkromfs_file(filename, arrayname):
- f = file(filename, "rb")
- arrayname = arrayname.replace('.', '_')
- mkromfs_output('const static unsigned char %s[] = {\n' % arrayname)
- count = 0
- while True:
- byte = f.read(1)
- if len(byte) != 1:
- break
- mkromfs_output('0x%02x,' % ord(byte))
-
- count = count + 1
- if count == 16:
- count = 0
- mkromfs_output('\n')
-
- if count == 0:
- mkromfs_output('};\n\n')
- else:
- mkromfs_output('\n};\n\n')
- f.close()
- def mkromfs_dir(dirname, is_root = False):
- list = os.listdir(dirname)
- path = os.path.abspath(dirname)
-
- # make for directory
- for item in list:
- fullpath = os.path.join(path, item)
- if os.path.isdir(fullpath):
- # if it is an empty directory, ignore it
- l = os.listdir(fullpath)
- if len(l):
- mkromfs_dir(fullpath)
-
- # make for files
- for item in list:
- fullpath = os.path.join(path, item)
- if os.path.isfile(fullpath):
- subpath = fullpath[len(basename):]
- array = subpath.split('\\')
- arrayname = string.join(array, '_')
- mkromfs_file(fullpath, arrayname)
- subpath = path[len(basename):]
- dir = subpath.split('\\')
- direntname = string.join(dir, '_')
- if is_root:
- mkromfs_output('const struct romfs_dirent _root_dirent[] = {\n')
- else:
- mkromfs_output(('const static struct romfs_dirent %s[] = {\n' % direntname))
-
- for item in list:
- fullpath = os.path.join(path, item)
- fn = fullpath[len(dirname):]
- if fn[0] == '\\':
- fn = fn[1:]
- fn = fn.replace('\\', '/')
- subpath = fullpath[len(basename):]
- items = subpath.split('\\')
- item_name = string.join(items, '_')
- item_name = item_name.replace('.', '_')
- subpath = subpath.replace('\\', '/')
- if subpath[0] == '/':
- subpath = subpath[1:]
- if not os.path.isfile(fullpath):
- l = os.listdir(fullpath)
- if len(l):
- mkromfs_output(('\t{ROMFS_DIRENT_DIR, "%s", %s, sizeof(%s)/sizeof(%s[0])},\n' % (fn, item_name, item_name, item_name)))
- else:
- mkromfs_output(('\t{ROMFS_DIRENT_DIR, "%s", RT_NULL, 0},\n' % fn))
- for item in list:
- fullpath = os.path.join(path, item)
- fn = fullpath[len(dirname):]
- if fn[0] == '\\':
- fn = fn[1:]
- fn = fn.replace('\\', '/')
-
- subpath = fullpath[len(basename):]
- items = subpath.split('\\')
- item_name = string.join(items, '_')
- item_name = item_name.replace('.', '_')
- subpath = subpath.replace('\\', '/')
- if subpath[0] == '/':
- subpath = subpath[1:]
-
- if os.path.isfile(fullpath):
- mkromfs_output(('\t{ROMFS_DIRENT_FILE, "%s", %s, sizeof(%s)},\n' % (fn, item_name, item_name)))
-
- mkromfs_output('};\n\n')
- if __name__ == "__main__":
- try:
- basename = os.path.abspath(sys.argv[1])
- filename = os.path.abspath(sys.argv[2])
- except IndexError:
- print "Usage: %s <dirname> <filename>" % sys.argv[0]
- raise SystemExit
- output = file(filename, 'wt')
- mkromfs_output("#include <dfs_romfs.h>\n\n")
- mkromfs_dir(basename, is_root = True)
-
- mkromfs_output("const struct romfs_dirent romfs_root = {ROMFS_DIRENT_DIR, \"/\", _root_dirent, sizeof(_root_dirent)/sizeof(_root_dirent[0])};\n\n")
|