mirror of
https://github.com/gryf/fs-uae-wrapper.git
synced 2025-12-18 12:00:28 +01:00
121 lines
3.5 KiB
Python
121 lines
3.5 KiB
Python
"""
|
|
Wrapper for FS-UAE to perform some actions before and or after running the
|
|
emulator, if appropriate option is enabled.
|
|
"""
|
|
import importlib
|
|
import logging
|
|
import os
|
|
import sys
|
|
|
|
from fs_uae_wrapper import WRAPPER_KEY, utils
|
|
|
|
|
|
def setup_logger(options):
|
|
"""Setup logger format and level"""
|
|
|
|
level = logging.WARNING
|
|
|
|
if options['wrapper_quiet']:
|
|
level = logging.ERROR
|
|
if options['wrapper_quiet'] > 1:
|
|
level = logging.CRITICAL
|
|
|
|
if options['wrapper_verbose']:
|
|
level = logging.INFO
|
|
if options['wrapper_verbose'] > 1:
|
|
level = logging.DEBUG
|
|
|
|
logging.basicConfig(level=level,
|
|
format="%(asctime)s %(levelname)s\t%(filename)s:"
|
|
"%(lineno)d:\t\t%(message)s")
|
|
|
|
|
|
def parse_args():
|
|
"""
|
|
Look out for config file and for config options which would be blindly
|
|
passed to fs-uae.
|
|
"""
|
|
fs_conf = None
|
|
options = utils.CmdOption()
|
|
options['wrapper_verbose'] = 0
|
|
options['wrapper_quiet'] = 0
|
|
|
|
for parameter in sys.argv[1:]:
|
|
if parameter in ['-v', '-q']:
|
|
if parameter == '-v':
|
|
options['wrapper_verbose'] += 1
|
|
if parameter == '-q':
|
|
options['wrapper_quiet'] += 1
|
|
continue
|
|
try:
|
|
options.add(parameter)
|
|
except AttributeError:
|
|
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, options
|
|
|
|
|
|
def usage():
|
|
"""Print help"""
|
|
sys.stdout.write("Usage: %s [conf-file] [-v] [-q] [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, fsuae_options = parse_args()
|
|
setup_logger(fsuae_options)
|
|
del fsuae_options['wrapper_verbose']
|
|
del fsuae_options['wrapper_quiet']
|
|
|
|
if 'help' in fsuae_options:
|
|
usage()
|
|
sys.exit(0)
|
|
|
|
if not config_file:
|
|
logging.error('Error: Configuration file not found. See --help'
|
|
' for usage')
|
|
sys.exit(1)
|
|
|
|
configuration = utils.get_config_options(config_file)
|
|
|
|
if configuration is None:
|
|
logging.error('Error: Configuration file have syntax issues')
|
|
sys.exit(2)
|
|
|
|
wrapper_module = fsuae_options.get(WRAPPER_KEY)
|
|
if not wrapper_module:
|
|
wrapper_module = configuration.get(WRAPPER_KEY)
|
|
|
|
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:
|
|
logging.error("Error: provided wrapper module: `%s' doesn't "
|
|
"exists.", wrapper_module)
|
|
sys.exit(3)
|
|
|
|
runner = wrapper.Wrapper(config_file, fsuae_options, configuration)
|
|
|
|
try:
|
|
exit_code = runner.run()
|
|
finally:
|
|
runner.clean()
|
|
|
|
if not exit_code:
|
|
sys.exit(4)
|