X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=frontend%2Fmain.c;h=bbcd7e4168991ff5fcbe4d3e25e3c2fe22d775e0;hp=6ee0b2f0923039290dbaef75bfbf13dfe7cfb48a;hb=69af03a2c2fccc06cb836f42a10b490a48f29c15;hpb=e906c010e1bea71ed4df425be97ce45dc777818c diff --git a/frontend/main.c b/frontend/main.c index 6ee0b2f0..bbcd7e41 100644 --- a/frontend/main.c +++ b/frontend/main.c @@ -14,10 +14,16 @@ #include #include "plugin.h" +#include "pcnt.h" #include "../gui/Linux.h" #include "../libpcsxcore/misc.h" +#include "common/menu.h" +#include "common/plat.h" +#include "common/input.h" +int ready_to_go; int UseGui; +static char *(*real_getenv)(const char *name); static void make_path(char *buf, size_t size, const char *dir, const char *fname) { @@ -67,15 +73,26 @@ int main(int argc, char *argv[]) char path[MAXPATHLEN]; int runcd = 0; int loadst = 0; + void *tmp; int i; + tmp = dlopen("/lib/libdl.so.2", RTLD_LAZY); + if (tmp == NULL) + tmp = dlopen("/lib32/libdl.so.2", RTLD_LAZY); + if (tmp != NULL) + real_getenv = dlsym(tmp, "getenv"); + if (real_getenv == NULL) { + fprintf(stderr, "%s\n", dlerror()); + return 1; + } + dlclose(tmp); + // what is the name of the config file? // it may be redefined by -cfg on the command line strcpy(cfgfile_basename, "pcsx.cfg"); emuLog = stdout; SetIsoFile(NULL); - Config.PsxOut = 1; // read command line options for (i = 1; i < argc; i++) { @@ -172,44 +189,58 @@ int main(int argc, char *argv[]) chdir(plugin_default_dir); g_free(plugin_default_dir); */ - if (SysInit() == -1) return 1; - - // if !gui - { - // the following only occurs if the gui isn't started - if (LoadPlugins() == -1) { - SysMessage("Failed loading plugins!"); - return 1; - } + if (SysInit() == -1) + return 1; + + // frontend stuff + in_init(); + in_probe(); + plat_init(); + menu_init(); + + if (LoadPlugins() == -1) { + SysMessage("Failed loading plugins!"); + return 1; + } + pcnt_hook_plugins(); - if (OpenPlugins() == -1) { - return 1; - } + if (OpenPlugins() == -1) { + return 1; + } - SysReset(); - CheckCdrom(); + SysReset(); + CheckCdrom(); - if (file[0] != '\0') { - Load(file); - } else { - if (runcd) { - if (LoadCdrom() == -1) { - ClosePlugins(); - printf(_("Could not load CD-ROM!\n")); - return -1; - } + if (file[0] != '\0') { + if (Load(file) != -1) + ready_to_go = 1; + } else { + if (runcd) { + if (LoadCdrom() == -1) { + ClosePlugins(); + printf(_("Could not load CD-ROM!\n")); + return -1; } + ready_to_go = 1; } + } - // If a state has been specified, then load that - if (loadst) { - StatesC = loadst - 1; - char *state_filename = get_state_filename(StatesC); - LoadState(state_filename); - free(state_filename); - } + // If a state has been specified, then load that + if (loadst) { + StatesC = loadst - 1; + char *state_filename = get_state_filename(StatesC); + int ret = LoadState(state_filename); + printf("%s state %s\n", ret ? "failed to load" : "loaded", state_filename); + free(state_filename); + } + + if (!ready_to_go) + menu_loop(); + while (1) + { psxCpu->Execute(); + menu_loop(); } return 0; @@ -340,19 +371,6 @@ void SysPrintf(const char *fmt, ...) { vsprintf(msg, fmt, list); va_end(list); - if (Config.PsxOut) { - static char linestart = 1; - int l = strlen(msg); - - printf(linestart ? " * %s" : "%s", msg); - - if (l > 0 && msg[l - 1] == '\n') { - linestart = 1; - } else { - linestart = 0; - } - } - fprintf(emuLog, "%s", msg); } @@ -376,14 +394,11 @@ char *getenv(const char *name) { static char ret[8] = "."; - // HACK - if (name && strcmp(name, "DISPLAY") == 0) - return ":0"; - - if (name && strcmp(name, "HOME") != 0) - fprintf(stderr, "getenv called with %s\n", name); + if (name && strcmp(name, "HOME") == 0 && + ((int)name >> 28) == 0) // HACK: let libs find home + return ret; - return ret; + return real_getenv(name); } #endif