frontend: support analog controller using nubs; some refactoring
[pcsx_rearmed.git] / frontend / main.c
index cb37bd7..3344819 100644 (file)
@@ -20,6 +20,7 @@
 #include "pcnt.h"
 #include "menu.h"
 #include "../libpcsxcore/misc.h"
+#include "../libpcsxcore/new_dynarec/new_dynarec.h"
 #include "../plugins/cdrcimg/cdrcimg.h"
 #include "common/plat.h"
 #include "common/input.h"
@@ -64,14 +65,12 @@ void set_cd_image(const char *fname)
 {
        const char *ext = NULL;
        
-       if (fname != NULL) {
-               int len = strlen(fname);
-               ext = fname;
-               if (len > 2)
-                       ext = fname + len - 2;
-       }
+       if (fname != NULL)
+               ext = strrchr(fname, '.');
 
-       if (ext && strcasecmp(ext, ".z") == 0) {
+       if (ext && (
+           strcasecmp(ext, ".z") == 0 || strcasecmp(ext, ".bz") == 0 ||
+           strcasecmp(ext, ".znx") == 0 || strcasecmp(ext, ".pbp") == 0)) {
                SetIsoFile(NULL);
                cdrcimg_set_fname(fname);
                strcpy(Config.Cdr, "builtin_cdrcimg");
@@ -81,14 +80,27 @@ void set_cd_image(const char *fname)
        }
 }
 
+static void set_default_paths(void)
+{
+       MAKE_PATH(Config.Mcd1, MEMCARD_DIR, "card1.mcd");
+       MAKE_PATH(Config.Mcd2, MEMCARD_DIR, "card2.mcd");
+       strcpy(Config.BiosDir, "bios");
+
+       strcpy(Config.PluginsDir, "plugins");
+       strcpy(Config.Gpu, "builtin_gpu");
+       strcpy(Config.Spu, "builtin_spu");
+       strcpy(Config.Cdr, "builtin_cdr");
+       strcpy(Config.Pad1, "builtin_pad");
+       strcpy(Config.Pad2, "builtin_pad");
+       strcpy(Config.Net, "Disabled");
+       Config.PsxAuto = 1;
+
+       snprintf(Config.PatchesDir, sizeof(Config.PatchesDir), "." PATCHES_DIR);
+}
+
 int main(int argc, char *argv[])
 {
-       char file[MAXPATHLEN] = "";
-       char path[MAXPATHLEN];
-       const char *cdfile = NULL;
-       int loadst = 0;
        void *tmp;
-       int i;
 
        tmp = dlopen("/lib/libdl.so.2", RTLD_LAZY);
        if (tmp == NULL)
@@ -108,6 +120,22 @@ int main(int argc, char *argv[])
        emuLog = stdout;
        SetIsoFile(NULL);
 
+       memset(&Config, 0, sizeof(Config));
+
+       CheckSubDir();
+       set_default_paths();
+       strcpy(Config.Bios, "HLE");
+
+#ifdef MAEMO
+       extern int maemo_main(int argc, char **argv);
+       return maemo_main(argc, argv);
+#else
+       char file[MAXPATHLEN] = "";
+       char path[MAXPATHLEN];
+       const char *cdfile = NULL;
+       int loadst = 0;
+       int i;
+
        // read command line options
        for (i = 1; i < argc; i++) {
                     if (!strcmp(argv[i], "-psxout")) Config.PsxOut = 1;
@@ -163,33 +191,6 @@ int main(int argc, char *argv[])
                }
        }
 
-       memset(&Config, 0, sizeof(PcsxConfig));
-       strcpy(Config.Net, "Disabled");
-
-       CheckSubDir();
-
-       MAKE_PATH(Config.Mcd1, MEMCARD_DIR, "card1.mcd");
-       MAKE_PATH(Config.Mcd2, MEMCARD_DIR, "card2.mcd");
-       strcpy(Config.Bios, "HLE");
-       strcpy(Config.BiosDir, "bios");
-
-       strcpy(Config.PluginsDir, "plugins");
-       strcpy(Config.Gpu, "builtin_gpu");
-       strcpy(Config.Spu, "builtin_spu");
-       strcpy(Config.Cdr, "builtin_cdr");
-       strcpy(Config.Pad1, "builtin_pad");
-       strcpy(Config.Pad2, "builtin_pad");
-       Config.PsxAuto = 1;
-
-       snprintf(Config.PatchesDir, sizeof(Config.PatchesDir), "." PATCHES_DIR);
-/*
-       // switch to plugin dotdir
-       // this lets plugins work without modification!
-       gchar *plugin_default_dir = g_build_filename(getenv("HOME"), PLUGINS_DIR, NULL);
-       chdir(plugin_default_dir);
-       g_free(plugin_default_dir);
-*/
-
        if (cdfile)
                set_cd_image(cdfile);
 
@@ -203,6 +204,11 @@ int main(int argc, char *argv[])
        menu_init();
 
        if (LoadPlugins() == -1) {
+               // FIXME: this recovery doesn't work, just delete bad config and bail out
+               // SysMessage("could not load plugins, retrying with defaults\n");
+               set_default_paths();
+               snprintf(path, sizeof(path), "." PCSX_DOT_DIR "%s", cfgfile_basename);
+               remove(path);
                SysMessage("Failed loading plugins!");
                return 1;
        }
@@ -248,11 +254,13 @@ int main(int argc, char *argv[])
 
        while (1)
        {
+               stop = 0;
                psxCpu->Execute();
                menu_loop();
        }
 
        return 0;
+#endif
 }
 
 int SysInit() {
@@ -311,7 +319,9 @@ void SysUpdate() {
 
 void OnFile_Exit() {
        printf("OnFile_Exit\n");
+#ifndef MAEMO
        menu_finish();
+#endif
        plat_finish();
        SysClose();
        exit(0);