improve cd change handling
authornotaz <notasas@gmail.com>
Mon, 3 Aug 2009 22:43:39 +0000 (22:43 +0000)
committernotaz <notasas@gmail.com>
Mon, 3 Aug 2009 22:43:39 +0000 (22:43 +0000)
git-svn-id: file:///home/notaz/opt/svn/PicoDrive/platform@731 be3aeb3a-fb24-0410-a615-afba39da0efa

common/emu.c
common/emu.h
common/menu.c

index cee9f2d..7de2aa9 100644 (file)
@@ -80,9 +80,9 @@ static int try_rfn_cut(char *fname)
        return 0;\r
 }\r
 \r
-static void get_ext(char *file, char *ext)\r
+static void get_ext(const char *file, char *ext)\r
 {\r
-       char *p;\r
+       const char *p;\r
 \r
        p = file + strlen(file) - 4;\r
        if (p < file) p = file;\r
@@ -177,12 +177,13 @@ static unsigned char id_header[0x100];
 \r
 /* checks if fname points to valid MegaCD image\r
  * if so, checks for suitable BIOS */\r
-int emu_cd_check(int *pregion, char *fname_in)\r
+static int emu_cd_check(int *pregion, const char *fname_in)\r
 {\r
+       const char *fname = fname_in;\r
        unsigned char buf[32];\r
        pm_file *cd_f;\r
        int region = 4; // 1: Japan, 4: US, 8: Europe\r
-       char ext[5], *fname = fname_in;\r
+       char ext[5];\r
        cue_track_type type = CT_UNKNOWN;\r
        cue_data_t *cue_data = NULL;\r
 \r
@@ -531,6 +532,24 @@ fail:
        return 0;\r
 }\r
 \r
+int emu_swap_cd(const char *fname)\r
+{\r
+       cd_img_type cd_type;\r
+       int ret = -1;\r
+\r
+       cd_type = emu_cd_check(NULL, fname);\r
+       if (cd_type != CIT_NOT_CD)\r
+               ret = Insert_CD(fname, cd_type);\r
+       if (ret != 0) {\r
+               me_update_msg("Load failed, invalid CD image?");\r
+               return 0;\r
+       }\r
+\r
+       strncpy(rom_fname_loaded, fname, sizeof(rom_fname_loaded)-1);\r
+       rom_fname_loaded[sizeof(rom_fname_loaded)-1] = 0;\r
+       return 1;\r
+}\r
+\r
 static void romfname_ext(char *dst, const char *prefix, const char *ext)\r
 {\r
        char *p;\r
index ecd9ba1..192d268 100644 (file)
@@ -102,6 +102,7 @@ void  emu_finish(void);
 void  emu_loop(void);
 
 int   emu_reload_rom(char *rom_fname);
+int   emu_swap_cd(const char *fname);
 int   emu_save_load_game(int load, int sram);
 void  emu_reset_game(void);
 
@@ -122,7 +123,6 @@ void  emu_make_path(char *buff, const char *end, int size);
 void  emu_update_input(void);
 void  emu_get_game_name(char *str150);
 void  emu_set_fastforward(int set_on);
-int   emu_cd_check(int *pregion, char *fname_in);
 void  emu_status_msg(const char *format, ...);
 
 #ifdef __cplusplus
index 5fc2a57..44fb5c8 100644 (file)
@@ -1968,24 +1968,14 @@ void menu_loop(void)
 \r
 static int mh_tray_load_cd(menu_id id, int keys)\r
 {\r
-       cd_img_type cd_type;\r
        char *ret_name;\r
-       int ret = -1;\r
 \r
        ret_name = romsel_run();\r
        if (ret_name == NULL)\r
                return 0;\r
 \r
-       cd_type = emu_cd_check(NULL, ret_name);\r
-       if (cd_type != CIT_NOT_CD)\r
-               ret = Insert_CD(ret_name, cd_type);\r
-       if (ret != 0) {\r
-               me_update_msg("Load failed, invalid CD image?");\r
-               return 0;\r
-       }\r
-\r
        engineState = PGS_RestartRun;\r
-       return 1;\r
+       return emu_swap_cd(ret_name);\r
 }\r
 \r
 static int mh_tray_nothing(menu_id id, int keys)\r
@@ -2001,6 +1991,7 @@ static menu_entry e_menu_tray[] =
        mee_label  (""),\r
        mee_handler("Load CD image",  mh_tray_load_cd),\r
        mee_handler("Insert nothing", mh_tray_nothing),\r
+       mee_end,\r
 };\r
 \r
 int menu_loop_tray(void)\r