X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=frontend%2Fmain.c;h=643d6fe162e10e0c1d90885ba0c240e9e1495798;hp=b05893c963ac3771e75a507f0c869c6b8a571bd5;hb=bbd837c6d8a14e76c19028c84ef62a3b8cf0c1f0;hpb=3c70c47bb2fa50066c4c3b23813253e03b8751fe diff --git a/frontend/main.c b/frontend/main.c index b05893c9..643d6fe1 100644 --- a/frontend/main.c +++ b/frontend/main.c @@ -18,6 +18,7 @@ #include "menu.h" #include "../gui/Linux.h" #include "../libpcsxcore/misc.h" +#include "../plugins/cdrcimg/cdrcimg.h" #include "common/plat.h" #include "common/input.h" @@ -53,17 +54,26 @@ static void CheckSubDir() { create_profile_dir(PLUGINS_CFG_DIR); create_profile_dir(CHEATS_DIR); create_profile_dir(PATCHES_DIR); + create_profile_dir(PCSX_DOT_DIR "cfg"); } -static void CreateMemcard(char *filename, char *conf_mcd) { - struct stat buf; - - make_path(conf_mcd, MAXPATHLEN, MEMCARD_DIR, filename); - - /* Only create a memory card if an existing one does not exist */ - if (stat(conf_mcd, &buf) == -1) { - SysPrintf(_("Creating memory card: %s\n"), conf_mcd); - CreateMcd(conf_mcd); +void set_cd_image(const char *fname) +{ + const char *ext; + int len; + + len = strlen(fname); + ext = fname; + if (len > 2) + ext = fname + len - 2; + + if (strcasecmp(ext, ".z") == 0) { + SetIsoFile(NULL); + cdrcimg_set_fname(fname); + strcpy(Config.Cdr, "builtin_cdrcimg"); + } else { + SetIsoFile(fname); + strcpy(Config.Cdr, "builtin_cdr"); } } @@ -71,7 +81,7 @@ int main(int argc, char *argv[]) { char file[MAXPATHLEN] = ""; char path[MAXPATHLEN]; - int runcd = 0; + const char *cdfile = NULL; int loadst = 0; void *tmp; int i; @@ -118,8 +128,7 @@ int main(int argc, char *argv[]) isofilename[0] = 0; } - SetIsoFile(isofilename); - runcd = 1; + cdfile = isofilename; } else if (!strcmp(argv[i], "-h") || !strcmp(argv[i], "-help") || @@ -154,8 +163,9 @@ int main(int argc, char *argv[]) strcpy(Config.Net, "Disabled"); CheckSubDir(); -// ScanAllPlugins(); + MAKE_PATH(Config.Mcd1, MEMCARD_DIR, "card1.mcd"); + MAKE_PATH(Config.Mcd2, MEMCARD_DIR, "card2.mcd"); strcpy(Config.Bios, "HLE"); strcpy(Config.BiosDir, "./"); @@ -165,21 +175,7 @@ int main(int argc, char *argv[]) strcpy(Config.Cdr, "builtin_cdr"); strcpy(Config.Pad1, "builtin_pad"); strcpy(Config.Pad2, "builtin_pad"); - - // try to load config - // if the config file doesn't exist - if (LoadConfig() == -1) { - // Uh oh, no config file found, use some defaults - Config.PsxAuto = 1; - - // create & load default memcards if they don't exist - CreateMemcard("card1.mcd", Config.Mcd1); - CreateMemcard("card2.mcd", Config.Mcd2); - - LoadMcds(Config.Mcd1, Config.Mcd2); - - SaveConfig(); - } + Config.PsxAuto = 1; snprintf(Config.PatchesDir, sizeof(Config.PatchesDir), "." PATCHES_DIR); /* @@ -189,6 +185,10 @@ int main(int argc, char *argv[]) chdir(plugin_default_dir); g_free(plugin_default_dir); */ + + if (cdfile) + set_cd_image(cdfile); + if (SysInit() == -1) return 1; @@ -208,14 +208,14 @@ int main(int argc, char *argv[]) return 1; } - SysReset(); CheckCdrom(); + SysReset(); if (file[0] != '\0') { if (Load(file) != -1) ready_to_go = 1; } else { - if (runcd) { + if (cdfile) { if (LoadCdrom() == -1) { ClosePlugins(); printf(_("Could not load CD-ROM!\n")); @@ -273,6 +273,9 @@ void StartGui() { void SysReset() { EmuReset(); + + // hmh core forgets this + CDR_stop(); } void SysClose() { @@ -293,7 +296,9 @@ void UpdateMenuSlots() { } void OnFile_Exit() { - printf("OnFile_Exit\n"); + printf("OnFile_Exit\n"); + plat_finish(); + SysClose(); exit(0); } @@ -406,18 +411,22 @@ char *getenv(const char *name) /* we hook statically linked plugins here */ static const char *builtin_plugins[] = { - "builtin_gpu", "builtin_spu", "builtin_cdr", "builtin_pad" + "builtin_gpu", "builtin_spu", "builtin_cdr", "builtin_pad", + "builtin_cdrcimg", }; static const int builtin_plugin_ids[] = { PLUGIN_GPU, PLUGIN_SPU, PLUGIN_CDR, PLUGIN_PAD, + PLUGIN_CDRCIMG, }; void *SysLoadLibrary(const char *lib) { const char *tmp = strrchr(lib, '/'); + void *ret; int i; - printf("dlopen %s\n", lib); + printf("plugin: %s\n", lib); + if (tmp != NULL) { tmp++; for (i = 0; i < ARRAY_SIZE(builtin_plugins); i++) @@ -425,7 +434,17 @@ void *SysLoadLibrary(const char *lib) { return (void *)(long)(PLUGIN_DL_BASE + builtin_plugin_ids[i]); } - return dlopen(lib, RTLD_NOW); +#if defined(__x86_64__) || defined(__i386__) + // convenience hack + char name[MAXPATHLEN]; + snprintf(name, sizeof(name), "%s.x86", lib); + lib = name; +#endif + + ret = dlopen(lib, RTLD_NOW); + if (ret == NULL) + fprintf(stderr, "dlopen: %s\n", dlerror()); + return ret; } void *SysLoadSym(void *lib, const char *sym) {