mirror of
https://github.com/gryf/fs-uae-wrapper.git
synced 2025-12-19 04:20:23 +01:00
124 lines
3.6 KiB
Python
124 lines
3.6 KiB
Python
#!/usr/bin/env python
|
|
"""
|
|
Wrapper for FS-UAE to perform some actions before and or after running the
|
|
emulator, if appropriate option is enabled.
|
|
"""
|
|
import importlib
|
|
import os
|
|
import sys
|
|
|
|
|
|
WRAPPER_KEY = 'wrapper'
|
|
|
|
|
|
def get_wrapper_from_conf(conf):
|
|
"""
|
|
Process config file only for 'wrapper' option. Specific wrapper modules
|
|
can reread the file, looking for specific for wrapper module options.
|
|
"""
|
|
with open(conf) as fobj:
|
|
for line in fobj.readlines():
|
|
if WRAPPER_KEY in line and '=' in line:
|
|
key, val = parse_option(line)
|
|
if key == WRAPPER_KEY:
|
|
break
|
|
else:
|
|
val = None
|
|
|
|
return val
|
|
|
|
|
|
def parse_option(string):
|
|
"""
|
|
Return parsed option as an key/value tuple, where key is an stripped
|
|
from dash option name and the value is an value stripped of whitespace.
|
|
"""
|
|
key = val = None
|
|
|
|
if '=' in string:
|
|
key, val = string.split('=', 1)
|
|
if key.startswith('--'):
|
|
key = key[2:].strip()
|
|
else:
|
|
key = key.strip()
|
|
val = val.strip()
|
|
elif string.startswith('--'):
|
|
key = string[2:].strip()
|
|
# parameters are always as strings - parse them when need it later
|
|
val = '1'
|
|
|
|
return key, val
|
|
|
|
|
|
def parse_args():
|
|
"""
|
|
Look out for config file and for config options which would be blindly
|
|
passed to fs-uae.
|
|
"""
|
|
fs_conf = None
|
|
fs_uae_options = []
|
|
wrapper_options = {}
|
|
for parameter in sys.argv[1:]:
|
|
key, val = parse_option(parameter)
|
|
if key is not None and val is not None:
|
|
if key == WRAPPER_KEY:
|
|
wrapper_options[key] = val
|
|
else:
|
|
fs_uae_options.append(parameter)
|
|
else:
|
|
if os.path.exists(parameter):
|
|
fs_conf = parameter
|
|
|
|
if fs_conf is None and os.path.exists('Config.fs-uae'):
|
|
fs_conf = 'Config.fs-uae'
|
|
|
|
return fs_conf, fs_uae_options, wrapper_options
|
|
|
|
|
|
def usage():
|
|
"""Print help"""
|
|
sys.stdout.write("Usage: %s [conf-file] [fs-uae-option...]\n\n"
|
|
% sys.argv[0])
|
|
sys.stdout.write("Config file is not required, if `Config.fs-uae' "
|
|
"exists in the current\ndirectory, although it might "
|
|
"depend on selected wrapper type. As for the\nfs-uae "
|
|
"options, please see `http://fs-uae.net/options'. All "
|
|
"options passed\nvia commandline should start with `--' "
|
|
"and if they require argument, there\nshould not be a "
|
|
"space around `='.\n\n")
|
|
|
|
|
|
def run():
|
|
"""run wrapper module"""
|
|
config_file, fs_uae_options, wrapper_options = parse_args()
|
|
|
|
if '--help' in fs_uae_options:
|
|
usage()
|
|
sys.exit(0)
|
|
|
|
if not config_file:
|
|
sys.stderr.write('Error: Configuration file not found\nSee --help'
|
|
' for usage\n')
|
|
sys.exit(1)
|
|
|
|
wrapper_module = wrapper_options.get(WRAPPER_KEY)
|
|
if not wrapper_module:
|
|
wrapper_module = get_wrapper_from_conf(config_file)
|
|
|
|
if not wrapper_module:
|
|
wrapper = importlib.import_module('fs_uae_wrapper.plain')
|
|
else:
|
|
try:
|
|
wrapper = importlib.import_module('fs_uae_wrapper.' +
|
|
wrapper_module)
|
|
except ImportError:
|
|
sys.stderr.write("Error: provided wrapper module: `%s' doesn't"
|
|
"exists.\n" % wrapper_module)
|
|
sys.exit(2)
|
|
|
|
wrapper.run(config_file, fs_uae_options, wrapper_options)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
run()
|