mirror of
https://github.com/mborgerson/xemu.git
synced 2025-12-01 16:10:01 +00:00
ui: Include required interface data files in executable
This commit is contained in:
committed by
mborgerson
parent
6fbd393ee4
commit
26e43bbcfd
61
scripts/pack-file.py
Executable file
61
scripts/pack-file.py
Executable file
@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import argparse
|
||||
import sys
|
||||
from io import StringIO
|
||||
from typing import Union, TextIO
|
||||
import os.path
|
||||
|
||||
def encode_bytes(data: Union[bytes, bytearray], outfile: TextIO):
|
||||
"""
|
||||
Encode data as a string of C-style escape sequences
|
||||
"""
|
||||
for i,v in enumerate(data):
|
||||
if i % 16 == 0:
|
||||
outfile.write('\t"')
|
||||
outfile.write('\\x%02x' % v)
|
||||
if i % 16 == 15:
|
||||
outfile.write('"\n')
|
||||
if i % 16 != 15:
|
||||
outfile.write('"')
|
||||
|
||||
def encode_bytes_str(data: Union[bytes, bytearray]):
|
||||
outfile = StringIO()
|
||||
encode_bytes(data, outfile)
|
||||
outfile.seek(0)
|
||||
return outfile.read()
|
||||
|
||||
def main():
|
||||
ap = argparse.ArgumentParser()
|
||||
ap.add_argument('path')
|
||||
ap.add_argument('cout')
|
||||
ap.add_argument('hout')
|
||||
args = ap.parse_args()
|
||||
data = bytearray(open(args.path, 'rb').read())
|
||||
fname, _ = os.path.splitext(os.path.basename(args.path))
|
||||
ident = ''.join([c if c.isalnum() else '_' for c in fname])
|
||||
|
||||
with open(args.hout, 'w') as f:
|
||||
f.write(
|
||||
f'''\
|
||||
#ifndef DATA_{ident.upper()}_H
|
||||
#define DATA_{ident.upper()}_H
|
||||
|
||||
extern const unsigned int {ident}_size;
|
||||
extern const unsigned char {ident}_data[];
|
||||
|
||||
#endif
|
||||
'''
|
||||
)
|
||||
|
||||
with open(args.cout, 'w') as f:
|
||||
f.write(
|
||||
f'''\
|
||||
const unsigned int {ident}_size = {len(data)};
|
||||
const unsigned char {ident}_data[] =
|
||||
{encode_bytes_str(data)};
|
||||
'''
|
||||
)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user