2022-01-22 19:39:38 -05:00
|
|
|
#!/usr/bin/env python
|
|
|
|
#
|
2022-01-27 07:55:46 -05:00
|
|
|
# This is a slightly generalized version of png2c.py and is based on it.
|
2022-01-22 19:39:38 -05:00
|
|
|
|
|
|
|
import sys
|
|
|
|
import os
|
|
|
|
import os.path
|
|
|
|
import re
|
|
|
|
import array
|
|
|
|
|
|
|
|
if len(sys.argv) < 2:
|
|
|
|
print("""Usage: bin2c binary_file...
|
|
|
|
|
|
|
|
Output input files data as C arrays to standard output.""")
|
|
|
|
sys.exit(1)
|
|
|
|
|
|
|
|
r = re.compile("^([a-zA-Z._][a-zA-Z._0-9]*)[.]([a-zA-Z_0-9]+)$")
|
|
|
|
for path in sys.argv[1:]:
|
|
|
|
filename = os.path.basename(path).replace('-','_')
|
|
|
|
m = r.match(filename)
|
|
|
|
|
|
|
|
# Allow only filenames that make sense as C variable names
|
|
|
|
if not(m):
|
|
|
|
print("Skipped file (unsuitable filename): " + filename)
|
|
|
|
continue
|
|
|
|
|
|
|
|
# Read file as character array
|
|
|
|
bytes = array.array('B', open(path, "rb").read())
|
|
|
|
count = len(bytes)
|
|
|
|
|
|
|
|
# Create the C header
|
|
|
|
text = "/* %s - %d bytes */\n" \
|
|
|
|
"static const unsigned char %s_%s_data[] = {\n" % (
|
|
|
|
filename, count, m.group(1), m.group(2))
|
|
|
|
|
|
|
|
i = 0
|
|
|
|
for byte in bytes:
|
|
|
|
if i % 16 == 0:
|
|
|
|
text += "\n "
|
|
|
|
i += 1
|
|
|
|
text += " 0x%02x" % byte
|
|
|
|
if i != count:
|
|
|
|
text += ","
|
|
|
|
|
|
|
|
text += "\n};"
|
|
|
|
|
|
|
|
print(text)
|