(Blackberry Playbook) Fix Blackberry Playbook build - strcasestr is
[pcsx_rearmed.git] / frontend / libretro.c
index 1e9929d..ec034c2 100644 (file)
@@ -243,9 +243,8 @@ void retro_set_environment(retro_environment_t cb)
       { "region", "Region; Auto|NTSC|PAL" },
 #ifdef __ARM_NEON__
       { "neon_interlace_enable", "Enable interlacing mode(s); disabled|enabled" },
-#if 0
       { "neon_enhancement_enable", "Enhanced resolution (slow); disabled|enabled" },
-#endif
+      { "neon_enhancement_no_main", "Enhanced resolution speed hack; disabled|enabled" },
 #endif
       { NULL, NULL },
    };
@@ -592,6 +591,33 @@ static void extract_directory(char *buf, const char *path, size_t size)
    }
 }
 
+#ifdef __QNX__
+/* Blackberry QNX doesn't have strcasestr */
+
+/*
+ * Find the first occurrence of find in s, ignore case.
+ */
+char *
+strcasestr(const char *s, const char*find)
+{
+       char c, sc;
+       size_t len;
+
+       if ((c = *find++) != 0) {
+               c = tolower((unsigned char)c);
+               len = strlen(find);
+               do {
+                       do {
+                               if ((sc = *s++) == 0)
+                                       return (NULL);
+                       } while ((char)tolower((unsigned char)sc) != c);
+               } while (strncasecmp(s, find, len) != 0);
+               s--;
+       }
+       return ((char *)s);
+}
+#endif
+
 bool retro_load_game(const struct retro_game_info *info)
 {
        size_t i;
@@ -652,6 +678,7 @@ bool retro_load_game(const struct retro_game_info *info)
        }
 
        plugin_call_rearmed_cbs();
+       dfinput_activate();
 
        Config.PsxAuto = 1;
        if (CheckCdrom() == -1) {
@@ -769,7 +796,6 @@ static void update_variables(bool in_flight)
          pl_rearmed_cbs.gpu_neon.allow_interlace = 1;
    }
 
-#if 0
    var.value = NULL;
    var.key = "neon_enhancement_enable";
 
@@ -780,7 +806,17 @@ static void update_variables(bool in_flight)
       else if (strcmp(var.value, "enabled") == 0)
          pl_rearmed_cbs.gpu_neon.enhancement_enable = 1;
    }
-#endif
+
+   var.value = NULL;
+   var.key = "neon_enhancement_no_main";
+
+   if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value)
+   {
+      if (strcmp(var.value, "disabled") == 0)
+         pl_rearmed_cbs.gpu_neon.enhancement_no_main = 0;
+      else if (strcmp(var.value, "enabled") == 0)
+         pl_rearmed_cbs.gpu_neon.enhancement_no_main = 1;
+   }
 #endif
 
        if (in_flight) {
@@ -791,9 +827,9 @@ static void update_variables(bool in_flight)
                        GPU_close();
                        GPU_open(&gpuDisp, "PCSX", NULL);
                }
-       }
 
-       dfinput_activate();
+               dfinput_activate();
+       }
 }
 
 void retro_run(void)