Um das erzeugen einer extra Date kommt man wohl nicht herum, sei es .h .c .o .s oder .a . Am portabelsten ist immer noch C-code zu erzeugen. Folgendes Skript (python >= 2.0) erzeugt aus mit
<b>bin2c.py test.data</b>
test_data.h und test_data.c mit dem const char* test_data, das auf die Daten zeigt.
Eine passende Regel ins Makefile und schon geht alles (fast) automatisch ;-)
Code:
#!/usr/bin/env python
import sys, re, traceback
def genH(s):
h = open("%s.h"%s, "w")
print >>h, """#ifndef %s_H\n#define %s_H\n\nextern const char* %s;\n\n#endif /* %s_H*/"""%(s.upper(), s.upper(), s, s.upper())
def genC(s, binary):
c = open("%s.c"%s, "w")
print >>c, '#include "%s.h"\n\nconst char* %s = '%(s, s),
while 1:
data = binary.read(18);
if len(data) == 0: break
print >>c, '\n "%s"'%"".join(map(lambda x:r"\x%02x"%(ord(x)), data)),
print >>c, ";"
for filename in sys.argv[1:]:
print "processing %s ..."%filename
try:
cname = re.sub(r"\W", "_", filename)
try:
binary = open(filename, "rb")
except:
print >>sys.stderr, "Error, could not open file: %s"%filename
continue
genH(cname);
genC(cname, binary);
except:
traceback.print_exc()
Lesezeichen