X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=frontend%2Fmain.c;h=372fdf1d7965fa94267fce3412cf71823ad0d810;hp=86aff3481f42f60e77e5aab7535ab7a3a898c4b3;hb=47bf65ab6163fb70eb2ad309c9487229832bcaed;hpb=fa9cfe0a7ff390f15bfdc6add7e57841173d1954;ds=sidebyside diff --git a/frontend/main.c b/frontend/main.c index 86aff348..372fdf1d 100644 --- a/frontend/main.c +++ b/frontend/main.c @@ -15,9 +15,14 @@ #include "plugin.h" #include "pcnt.h" +#include "menu.h" #include "../gui/Linux.h" #include "../libpcsxcore/misc.h" +#include "../plugins/cdrcimg/cdrcimg.h" +#include "common/plat.h" +#include "common/input.h" +int ready_to_go; int UseGui; static char *(*real_getenv)(const char *name); @@ -63,11 +68,31 @@ static void CreateMemcard(char *filename, char *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"); + } +} + 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; @@ -114,8 +139,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") || @@ -185,46 +209,64 @@ 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; - } - pcnt_hook_plugins(); + if (cdfile) + set_cd_image(cdfile); - if (OpenPlugins() == -1) { - return 1; - } + if (SysInit() == -1) + return 1; - SysReset(); - CheckCdrom(); + // frontend stuff + in_init(); + in_probe(); + plat_init(); + menu_init(); - if (file[0] != '\0') { - Load(file); - } else { - if (runcd) { - if (LoadCdrom() == -1) { - ClosePlugins(); - printf(_("Could not load CD-ROM!\n")); - return -1; - } + if (LoadPlugins() == -1) { + SysMessage("Failed loading plugins!"); + return 1; + } + pcnt_hook_plugins(); + + if (OpenPlugins() == -1) { + return 1; + } + + SysReset(); + CheckCdrom(); + + if (file[0] != '\0') { + if (Load(file) != -1) + ready_to_go = 1; + } else { + if (cdfile) { + 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); - int ret = LoadState(state_filename); - printf("%s state %s\n", ret ? "failed to load" : "loaded", 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_prepare_emu(); + else + menu_loop(); + + while (1) + { psxCpu->Execute(); + menu_loop(); } return 0; @@ -378,7 +420,8 @@ char *getenv(const char *name) { static char ret[8] = "."; - if (name && strcmp(name, "HOME") == 0) + if (name && strcmp(name, "HOME") == 0 && + ((int)name >> 28) == 0) // HACK: let libs find home return ret; return real_getenv(name); @@ -387,11 +430,13 @@ 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) {