# Usage: python gen.py import json import os from collections import defaultdict script_dir = os.path.dirname(os.path.abspath(__file__)) usage_file = os.path.join(script_dir, 'usage.json') with open(usage_file, 'r') as file: data = json.load(file) with open(os.path.join(script_dir, '../USAGE.md'), 'w') as md_file: md_file.write(""" Usage ---- There are many environment variables to control Box64's behaviour. ## Configuration files In addition to environment variables, Box64 also looks for 2 places for rcfile: `/etc/box64.box64rc` and `~/.box64rc`, in the format of .ini files. Asterisks may be used to denote a substring in the application name, like `[*setup*]` that will be applied to every program containing "setup" in its name. Note that this is not a complete set of regex rules. Settings priority: `~/.box64rc` > `/etc/box64.box64rc` > environment variables. ---- """) categories = defaultdict(list) for entry in data: categories[entry["category"]].append(entry) for category, entries in categories.items(): md_file.write(f"## {category}\n\n") for entry in entries: md_file.write(f"### {entry['name']}\n\n{entry['description']}\n\n") for option in entry['options']: md_file.write(f" * {option['key']}: {option['description']} {"[Default]" if option['default'] else ""}\n") md_file.write("\n") with open(os.path.join(script_dir, '../box64.pod'), 'w') as pod_file: pod_file.write("""=head1 NAME box64 - Linux Userspace x86_64 Emulator with a twist =head1 SYNOPSIS B [B<--help>] [B<--version>] I =head1 DESCRIPTION B lets you run x86_64 Linux programs (such as games) on non-x86_64 Linux systems, like ARM (host system needs to be 64-bit little-endian). Since B uses the native versions of some "system" libraries, like libc, libm, SDL, and OpenGL, it's easy to integrate and use with most applications, and performance can be surprisingly high in many cases. B integrates with DynaRec (dynamic recompiler) for the ARM64 platform, providing a speed boost between 5 to 10 times faster than using only the interpreter. =head1 OPTIONS =over 8 =item B<-h,--help> Print box64 help and quit. =item B<-v,--version> Print box64 version and quit. =back =head1 BRIEF USAGE There are many environment variables to control B's behaviour. In addition to environment variables, B also looks for 2 places for rcfile: F and F<~/.box64rc>, in the format of .ini files. Settings priority: F<~/.box64rc> > F > environment variables. Example: [factorio] BOX64_DYNAREC_SAFEFLAGS=0 BOX64_DYNAREC_BIGBLOCK=2 BOX64_DYNAREC_FORWARD=1024 BOX64_DYNAREC_CALLRET=1 =head1 ENVIRONMENT VARIABLES =over 8 """) for entry in data: pod_file.write(f"\n=item B<{entry['name']}> =I<{ '|'.join(option['key'] for option in entry['options']) }>\n\n{entry['description']}\n\n") for option in entry['options']: pod_file.write(f" * {option['key']} : {option['description']} {"[Default]" if option['default'] else ""}\n") pod_file.write("\n") pod_file.write(""" =back =cut """)