extracted OSS code to sndout_oss_*, BTN->PBTN, refactoring
[libpicofe.git] / pandora / main.c
index 55ece53..5fecb4a 100644 (file)
@@ -4,6 +4,7 @@
 // For commercial use, separate licencing terms must be obtained.\r
 \r
 #include <stdio.h>\r
+#include <stdlib.h>\r
 #include <string.h>\r
 #include <unistd.h>\r
 #include <strings.h>\r
@@ -20,6 +21,7 @@
 \r
 extern int select_exits;\r
 extern char *PicoConfigFile;\r
+static int load_state_slot = -1;\r
 int mmuhack_status = 0; // TODO rm\r
 char **g_argv;\r
 \r
@@ -37,6 +39,9 @@ void parse_cmd_line(int argc, char *argv[])
                        else if(strcasecmp(argv[x], "-selectexit") == 0) {\r
                                select_exits = 1;\r
                        }\r
+                       else if(strcasecmp(argv[x], "-loadstate") == 0) {\r
+                               if(x+1 < argc) { ++x; load_state_slot = atoi(argv[x]); }\r
+                       }\r
                        else {\r
                                unrecognized = 1;\r
                                break;\r
@@ -62,7 +67,8 @@ void parse_cmd_line(int argc, char *argv[])
                                "-state <param>    pass '-state param' to the menu program\n"\r
                                "-config <file>    use specified config file instead of default 'picoconfig.bin'\n"\r
                                "                  see currentConfig_t structure in emu.h for the file format\n"\r
-                               "-selectexit       pressing SELECT will exit the emu and start 'menu_path'\n");\r
+                               "-selectexit       pressing SELECT will exit the emu and start 'menu_path'\n"\r
+                               "-loadstate <num>  if ROM is specified, try loading slot <num>\n");\r
        }\r
 }\r
 \r
@@ -84,6 +90,17 @@ int main(int argc, char *argv[])
        if (argc > 1)\r
                parse_cmd_line(argc, argv);\r
 \r
+       if (engineState == PGS_ReloadRom)\r
+       {\r
+               if (emu_ReloadRom(romFileName)) {\r
+                       engineState = PGS_Running;\r
+                       if (load_state_slot >= 0) {\r
+                               state_slot = load_state_slot;\r
+                               emu_SaveLoadGame(1, 0);\r
+                       }\r
+               }\r
+       }\r
+\r
        for (;;)\r
        {\r
                switch (engineState)\r
@@ -93,7 +110,7 @@ int main(int argc, char *argv[])
                                break;\r
 \r
                        case PGS_ReloadRom:\r
-                               if (emu_ReloadRom())\r
+                               if (emu_ReloadRom(romFileName))\r
                                        engineState = PGS_Running;\r
                                else {\r
                                        printf("PGS_ReloadRom == 0\n");\r