filename | src/main.c |
changeset | 1109:700c5ab26a63 |
prev | 1108:305ef2082079 |
next | 1111:742c073f353f |
author | nkeynes |
date | Thu Jun 10 22:13:16 2010 +1000 (13 years ago) |
permissions | -rw-r--r-- |
last change | Integrate executable wrapping into the user interface - command-line now loads wrapped by default, -e <bin> to run binary - add support for .bin executables - Add useful (internal) error codes |
file | annotate | diff | log | raw |
1.1 --- a/src/main.c Fri Jun 04 09:13:40 2010 +10001.2 +++ b/src/main.c Thu Jun 10 22:13:16 2010 +10001.3 @@ -42,13 +42,14 @@1.4 #include "hotkeys.h"1.5 #include "plugin.h"1.7 -char *option_list = "a:A:bc:dfg:G:hHl:m:npt:T:uvV:w:x?";1.8 +char *option_list = "a:A:bc:e:dfg:G:hHl:m:npt:T:uvV:x?";1.9 struct option longopts[] = {1.10 { "aica", required_argument, NULL, 'a' },1.11 { "audio", required_argument, NULL, 'A' },1.12 { "biosless", no_argument, NULL, 'b' },1.13 { "config", required_argument, NULL, 'c' },1.14 { "debugger", no_argument, NULL, 'd' },1.15 + { "execute", required_argument, NULL, 'e' },1.16 { "fullscreen", no_argument, NULL, 'f' },1.17 { "gdb-sh4", required_argument, NULL, 'g' },1.18 { "gdb-arm", required_argument, NULL, 'G' },1.19 @@ -61,7 +62,6 @@1.20 { "unsafe", no_argument, NULL, 'u' },1.21 { "video", no_argument, NULL, 'V' },1.22 { "version", no_argument, NULL, 'v' },1.23 - { "wrap", required_argument, NULL, 'w' },1.24 { NULL, 0, 0, 0 } };1.25 char *aica_program = NULL;1.26 char *display_driver_name = NULL;1.27 @@ -86,13 +86,14 @@1.28 static void print_usage()1.29 {1.30 print_version();1.31 - printf( "Usage: lxdream %s [options] [disc-file] [program-file]\n\n", lxdream_full_version );1.32 + printf( "Usage: lxdream %s [options] [disc-file] [save-state]\n\n", lxdream_full_version );1.34 printf( "Options:\n" );1.35 printf( " -a, --aica=PROGFILE %s\n", _("Run the AICA SPU only, with the supplied program") );1.36 printf( " -A, --audio=DRIVER %s\n", _("Use the specified audio driver (? to list)") );1.37 printf( " -b, --biosless %s\n", _("Run without the BIOS boot rom even if available") );1.38 printf( " -c, --config=CONFFILE %s\n", _("Load configuration from CONFFILE") );1.39 + printf( " -e, --execute=PROGRAM %s\n", _("Load and execute the given SH4 program") );1.40 printf( " -d, --debugger %s\n", _("Start in debugger mode") );1.41 printf( " -f, --fullscreen %s\n", _("Start in fullscreen mode") );1.42 printf( " -g, --gdb-sh4=PORT %s\n", _("Start GDB remote server on PORT for SH4") );1.43 @@ -108,7 +109,6 @@1.44 printf( " -u, --unsafe %s\n", _("Allow unsafe dcload syscalls") );1.45 printf( " -v, --version %s\n", _("Print the lxdream version string") );1.46 printf( " -V, --video=DRIVER %s\n", _("Use the specified video driver (? to list)") );1.47 - printf( " -w, --wrap=FILENAME %s\n", _("Wrap the specified binary file in a disc image") );1.48 printf( " -x %s\n", _("Disable the SH4 translator") );1.49 }1.51 @@ -124,9 +124,9 @@1.52 {1.53 int opt;1.54 double t;1.55 - gboolean display_ok;1.56 + gboolean display_ok, have_disc = FALSE, have_save = FALSE, have_exec = FALSE;1.57 uint32_t time_secs, time_nanos;1.58 - const char *wrap_name = NULL;1.59 + const char *exec_name = NULL;1.61 install_crash_handler();1.62 bind_gettext_domain();1.63 @@ -148,6 +148,9 @@1.64 case 'd': /* Launch w/ debugger */1.65 show_debugger = TRUE;1.66 break;1.67 + case 'e':1.68 + exec_name = optarg;1.69 + break;1.70 case 'f':1.71 show_fullscreen = TRUE;1.72 break;1.73 @@ -203,9 +206,6 @@1.74 case 'V': /* Video driver */1.75 display_driver_name = optarg;1.76 break;1.77 - case 'w': /* Wrap image file */1.78 - wrap_name = optarg;1.79 - break;1.80 case 'x': /* Disable translator */1.81 use_xlat = FALSE;1.82 break;1.83 @@ -268,37 +268,52 @@1.84 maple_reattach_all();1.85 INFO( "%s! ready...", APP_NAME );1.87 - if( wrap_name != NULL ) {1.88 + for( ; optind < argc; optind++ ) {1.89 ERROR err;1.90 - cdrom_disc_t disc = cdrom_wrap_magic( CDROM_DISC_XA, wrap_name, &err );1.91 - if( disc == NULL )1.92 - ERROR(err.msg);1.93 - else {1.94 - gdrom_mount_disc(disc);1.95 - if( !no_start ) {1.96 - start_immediately = TRUE;1.97 + lxdream_file_type_t type = file_identify(argv[optind], -1, &err);1.98 + if( type == FILE_SAVE_STATE ) {1.99 + if( have_save ) {1.100 + ERROR( "Multiple save states given on command-line, ignoring %s", argv[optind] );1.101 + } else {1.102 + have_save = dreamcast_load_state(argv[optind]);1.103 + if( !have_save )1.104 + no_start = TRUE;1.105 + }1.106 + } else {1.107 + if( have_disc ) {1.108 + ERROR( "Multiple GD-ROM discs given on command-line, ignoring %s", argv[optind] );1.109 + } else {1.110 + have_disc = gdrom_mount_image(argv[optind], &err);1.111 + if( !have_disc )1.112 + no_start = TRUE;1.113 }1.114 }1.115 }1.117 - for( ; optind < argc; optind++ ) {1.118 - gboolean ok = gdrom_mount_image(argv[optind]);1.119 - if( !ok ) {1.120 - ok = file_load_magic( argv[optind] );1.121 - }1.122 - if( !ok ) {1.123 - ERROR( "Unrecognized file '%s'", argv[optind] );1.124 - }1.125 - if( !no_start ) {1.126 - start_immediately = ok;1.127 + if( exec_name != NULL ) {1.128 + ERROR err;1.129 + if( have_save ) {1.130 + ERROR( "Both a save state and an executable were specified, ignoring %s", exec_name );1.131 + } else {1.132 + have_exec = file_load_exec( exec_name, &err );1.133 + if( !have_exec )1.134 + no_start = TRUE;1.135 }1.136 }1.138 + if( !no_start && (have_exec || have_disc || have_save) ) {1.139 + start_immediately = TRUE;1.140 + }1.141 +1.142 if( gdrom_get_current_disc() == NULL ) {1.143 + ERROR err;1.144 gchar *disc_file = lxdream_get_global_config_path_value( CONFIG_GDROM );1.145 if( disc_file != NULL ) {1.146 - gdrom_mount_image( disc_file );1.147 + gboolean ok = gdrom_mount_image( disc_file, &err );1.148 g_free(disc_file);1.149 + if( !ok ) {1.150 + WARN( err.msg );1.151 + }1.152 }1.153 }
.