some frontend adjustments
authornotaz <notasas@gmail.com>
Tue, 18 Jan 2011 16:04:58 +0000 (18:04 +0200)
committernotaz <notasas@gmail.com>
Sun, 23 Jan 2011 22:38:35 +0000 (00:38 +0200)
frontend/common/menu.c
frontend/main.h
frontend/menu.c
frontend/plugin_lib.c
frontend/xkb.c

index 22a66ea..aa76e43 100644 (file)
@@ -872,9 +872,12 @@ rescan:
                        {\r
                                int newlen;\r
                                char *p, *newdir;\r
-                               if (!(inp & PBTN_MOK)) continue;\r
+                               if (!(inp & PBTN_MOK))\r
+                                       continue;\r
                                newlen = strlen(curr_path) + strlen(namelist[sel+1]->d_name) + 2;\r
                                newdir = malloc(newlen);\r
+                               if (newdir == NULL)\r
+                                       break;\r
                                if (strcmp(namelist[sel+1]->d_name, "..") == 0) {\r
                                        char *start = curr_path;\r
                                        p = start + strlen(start) - 1;\r
@@ -920,6 +923,13 @@ rescan:
                free(namelist);\r
        }\r
 \r
+       // restore curr_path\r
+       if (fname != NULL) {\r
+               n = strlen(curr_path);\r
+               if (curr_path + n + 1 == fname)\r
+                       curr_path[n] = '/';\r
+       }\r
+\r
        return ret;\r
 }\r
 \r
index 139c2e7..0ebb0fc 100644 (file)
 #define PLUGINS_DIR "/.pcsx/plugins/"
 #define PLUGINS_CFG_DIR "/.pcsx/plugins/cfg/"
 #define PCSX_DOT_DIR "/.pcsx/"
-#define BIOS_DIR "/.pcsx/bios/"
 #define STATES_DIR "/.pcsx/sstates/"
 #define CHEATS_DIR "/.pcsx/cheats/"
 #define PATCHES_DIR "/.pcsx/patches/"
+#define BIOS_DIR "/bios/"
 
 extern char cfgfile_basename[MAXPATHLEN];
 
index f2a24fd..1de9587 100644 (file)
@@ -207,9 +207,9 @@ static const struct {
        CE_INTVAL(iUseTimer),
 };
 
-static void make_cfg_fname(char *buf, size_t size, int is_game)
+static char *get_cd_label(void)
 {
-       char trimlabel[33];
+       static char trimlabel[33];
        int j;
 
        strncpy(trimlabel, CdromLabel, 32);
@@ -218,8 +218,13 @@ static void make_cfg_fname(char *buf, size_t size, int is_game)
                if (trimlabel[j] == ' ')
                        trimlabel[j] = 0;
 
+       return trimlabel;
+}
+
+static void make_cfg_fname(char *buf, size_t size, int is_game)
+{
        if (is_game)
-               snprintf(buf, size, "." PCSX_DOT_DIR "cfg/%.32s-%.9s.cfg", trimlabel, CdromId);
+               snprintf(buf, size, "." PCSX_DOT_DIR "cfg/%.32s-%.9s.cfg", get_cd_label(), CdromId);
        else
                snprintf(buf, size, "." PCSX_DOT_DIR "%s", cfgfile_basename);
 }
@@ -528,7 +533,7 @@ static void pnd_menu_init(void)
        struct dirent *ent;
        int i, count = 0;
        char **mfilters;
-       char buff[64], *p;
+       char buff[64];
        DIR *dir;
 
        cpu_clock_st = cpu_clock = get_cpu_clock();
@@ -547,9 +552,11 @@ static void pnd_menu_init(void)
                                perror("readdir");
                        break;
                }
-               p = strstr(ent->d_name, "_up");
-               if (p != NULL && (p[3] == 0 || !strcmp(p + 3, "_h")))
-                       count++;
+
+               if (ent->d_type != DT_REG && ent->d_type != DT_LNK)
+                       continue;
+
+               count++;
        }
 
        if (count == 0)
@@ -563,11 +570,21 @@ static void pnd_menu_init(void)
        for (i = 0; (ent = readdir(dir)); ) {
                size_t len;
 
-               p = strstr(ent->d_name, "_up");
-               if (p == NULL || (p[3] != 0 && strcmp(p + 3, "_h")))
+               if (ent->d_type != DT_REG && ent->d_type != DT_LNK)
+                       continue;
+
+               len = strlen(ent->d_name);
+
+               // skip pre-HF5 extra files
+               if (len >= 3 && strcmp(ent->d_name + len - 3, "_v3") == 0)
+                       continue;
+               if (len >= 3 && strcmp(ent->d_name + len - 3, "_v5") == 0)
                        continue;
 
-               len = p - ent->d_name;
+               // have to cut "_up_h" for pre-HF5
+               if (len > 5 && strcmp(ent->d_name + len - 5, "_up_h") == 0)
+                       len -= 5;
+
                if (len > sizeof(buff) - 1)
                        continue;
 
@@ -815,7 +832,7 @@ static int menu_loop_plugin_gpu(int id, int keys)
 static const char *men_spu_reverb[] = { "Off", "Fake", "On", NULL };
 static const char *men_spu_interp[] = { "None", "Simple", "Gaussian", "Cubic", NULL };
 static const char h_spu_irq_wait[]  = "Wait for CPU; only useful for some games, may cause glitches";
-static const char h_spu_thread[]    = "Run sound emulation in separate thread";
+static const char h_spu_thread[]    = "Run sound emulation in main thread (recommended)";
 
 static menu_entry e_menu_plugin_spu[] =
 {
@@ -823,7 +840,7 @@ static menu_entry e_menu_plugin_spu[] =
        mee_enum      ("Interpolation",             0, iUseInterpolation, men_spu_interp),
        mee_onoff     ("Adjust XA pitch",           0, iXAPitch, 1),
        mee_onoff_h   ("SPU IRQ Wait",              0, iSPUIRQWait, 1, h_spu_irq_wait),
-       mee_onoff_h   ("Use sound thread",          0, iUseTimer, 1, h_spu_thread),
+       mee_onoff_h   ("Sound in main thread",      0, iUseTimer, 2, h_spu_thread),
        mee_end,
 };
 
@@ -871,7 +888,7 @@ static int menu_loop_plugin_options(int id, int keys)
 // ------------ adv options menu ------------
 
 static const char h_cfg_cpul[]   = "Shows CPU usage in %%";
-static const char h_cfg_fl[]     = "Keeps the game from running too fast";
+static const char h_cfg_fl[]     = "Frame Limiter keeps the game from running too fast";
 static const char h_cfg_xa[]     = "Disables XA sound, which can sometimes improve performance";
 static const char h_cfg_cdda[]   = "Disable CD Audio for a performance boost\n"
                                   "(proper .cue/.bin dump is needed otherwise)";
@@ -980,6 +997,20 @@ static void debug_menu_loop(void)
 
 void OnFile_Exit();
 
+static void draw_frame_main(void)
+{
+       if (CdromId[0] != 0) {
+               char buff[64];
+               snprintf(buff, sizeof(buff), "%.32s/%.9s", get_cd_label(), CdromId);
+               smalltext_out16(4, 1, buff, 0x105f);
+       }
+}
+
+static void draw_frame_credits(void)
+{
+       smalltext_out16(4, 1, "build: "__DATE__ " " __TIME__ " " REV, 0xe7fc);
+}
+
 const char *plat_get_credits(void)
 {
        return  "PCSX-ReARMed\n\n"
@@ -1132,7 +1163,7 @@ static int main_menu_handler(int id, int keys)
                        return 1;
                break;
        case MA_MAIN_CREDITS:
-               draw_menu_credits(draw_frame_debug);
+               draw_menu_credits(draw_frame_credits);
                in_menu_wait(PBTN_MOK|PBTN_MBACK, 70);
                break;
        case MA_MAIN_EXIT:
@@ -1182,7 +1213,7 @@ void menu_loop(void)
        in_set_config_int(0, IN_CFG_BLOCKING, 1);
 
        do {
-               me_loop(e_menu_main, &sel, NULL);
+               me_loop(e_menu_main, &sel, draw_frame_main);
        } while (!ready_to_go);
 
        /* wait until menu, ok, back is released */
@@ -1353,6 +1384,9 @@ static void menu_leave_emu(void)
                        menu_darken_bg(d, s, w, 0);
        }
 
+       if (ready_to_go)
+               cpu_clock = get_cpu_clock();
+
        plat_video_menu_enter(ready_to_go);
 }
 
index 688bb12..b4f26f6 100644 (file)
@@ -124,8 +124,8 @@ static void update_input(void)
        keystate = actions[IN_BINDTYPE_PLAYER12];
 
 #ifdef X11
-       extern void x11_update_keys(void);
-       x11_update_keys();
+       extern int x11_update_keys(void);
+       keystate |= x11_update_keys();
 #endif
 }
 
index 874531c..7d00786 100644 (file)
@@ -68,22 +68,23 @@ static void DestroyKeyboard(void) {
                XkbSetDetectableAutoRepeat(disp, 0, NULL);
 }
 
-void x11_update_keys(void) {
+int x11_update_keys(void) {
        uint8_t                                 i;
        XEvent                                  evt;
        XClientMessageEvent             *xce;
        uint16_t                                Key;
+       static int keystate_x11;
        int psxkey, leave = 0;
        Display *disp = (Display *)gpuDisp;
 
-       if (initialized < 2000) {
+       if (!disp)
+               return 0;
+
+       if (!initialized) {
                initialized++;
                InitKeyboard();
        }
 
-       if (!disp)
-               return;
-
        while (XPending(disp)) {
                XNextEvent(disp, &evt);
                switch (evt.type) {
@@ -101,9 +102,9 @@ void x11_update_keys(void) {
 
                                if (psxkey >= 0) {
                                        if (evt.type == KeyPress)
-                                               keystate |= 1 << psxkey;
+                                               keystate_x11 |= 1 << psxkey;
                                        else
-                                               keystate &= ~(1 << psxkey);
+                                               keystate_x11 &= ~(1 << psxkey);
                                }
                                if (evt.type == KeyPress && Key == XK_Escape)
                                        leave = 1;
@@ -121,4 +122,6 @@ void x11_update_keys(void) {
                DestroyKeyboard();
                exit(1);
        }
+
+       return keystate_x11;
 }