diff --git a/src/driver.h b/src/driver.h index 84a63503..2aadfe43 100644 --- a/src/driver.h +++ b/src/driver.h @@ -240,17 +240,20 @@ int FCEUI_SetCheat(uint32 which, const char *name, int32 a, int32 v, int compare void FCEUI_CheatSearchShowExcluded(void); void FCEUI_CheatSearchSetCurrentAsOriginal(void); -#define FCEUIOD_STATE 0 -#define FCEUIOD_SNAPS 1 -#define FCEUIOD_NV 2 -#define FCEUIOD_CHEATS 3 -#define FCEUIOD_MISC 4 -#define FCEUIOD_MEMW 5 -#define FCEUIOD_BBOT 6 -#define FCEUIOD_MACRO 7 -#define FCEUIOD_FDSROM 8 +#define FCEUIOD_ROMS 0 +#define FCEUIOD_NV 1 +#define FCEUIOD_STATES 2 +#define FCEUIOD_FDSROM 3 +#define FCEUIOD_SNAPS 4 +#define FCEUIOD_CHEATS 5 +#define FCEUIOD_MOVIES 6 +#define FCEUIOD_MEMW 7 +#define FCEUIOD_BBOT 8 +#define FCEUIOD_MACRO 9 +#define FCEUIOD_INPUT 10 +#define FCEUIOD_LUA 11 -#define FCEUIOD__COUNT 9 +#define FCEUIOD__COUNT 12 void FCEUI_SetDirOverride(int which, char *n); diff --git a/src/drivers/win/config.cpp b/src/drivers/win/config.cpp index 3ae53fcb..1a60d47e 100644 --- a/src/drivers/win/config.cpp +++ b/src/drivers/win/config.cpp @@ -108,16 +108,19 @@ static CFGSTRUCT fceuconfig[] = { ACS(gfsdir), - NACS("odcheats",directory_names[0]), - NACS("odmisc",directory_names[1]), - NACS("odnonvol",directory_names[2]), - NACS("odstates",directory_names[3]), + NACS("odroms",directory_names[0]), + NACS("odnonvol",directory_names[1]), + NACS("odstates",directory_names[2]), + NACS("odfdsrom",directory_names[3]), NACS("odsnaps",directory_names[4]), - NACS("odmemwatch",directory_names[5]), - NACS("odbasicbot",directory_names[6]), - NACS("odmacro",directory_names[7]), - NACS("odfdsrom",directory_names[8]), - NACS("odbase",directory_names[9]), + NACS("odcheats",directory_names[5]), + NACS("odmovies",directory_names[6]), + NACS("odmemwatch",directory_names[7]), + NACS("odbasicbot",directory_names[8]), + NACS("odmacro",directory_names[9]), + NACS("odinput",directory_names[10]), + NACS("odlua",directory_names[11]), + NACS("odbase",directory_names[12]), AC(winspecial), AC(winsizemulx), diff --git a/src/drivers/win/directories.cpp b/src/drivers/win/directories.cpp index d9c651d6..d8275292 100644 --- a/src/drivers/win/directories.cpp +++ b/src/drivers/win/directories.cpp @@ -28,7 +28,7 @@ void CloseDirectoriesDialog(HWND hwndDlg) for(unsigned int curr_dir = 0; curr_dir < NUMBER_OF_DIRECTORIES; curr_dir++) { LONG len; - len = SendDlgItemMessage(hwndDlg, EDIT_CHEATS + curr_dir, WM_GETTEXTLENGTH, 0, 0); + len = SendDlgItemMessage(hwndDlg, EDIT_ROMS + curr_dir, WM_GETTEXTLENGTH, 0, 0); if(len <= 0) { @@ -48,7 +48,7 @@ void CloseDirectoriesDialog(HWND hwndDlg) continue; } - if(!GetDlgItemText(hwndDlg, EDIT_CHEATS + curr_dir, directory_names[curr_dir], len)) + if(!GetDlgItemText(hwndDlg, EDIT_ROMS + curr_dir, directory_names[curr_dir], len)) { free(directory_names[curr_dir]); directory_names[curr_dir] = 0; @@ -102,7 +102,7 @@ static BOOL CALLBACK DirConCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM // Initialize the directories textboxes for(unsigned int curr_dir = 0; curr_dir < NUMBER_OF_DIRECTORIES; curr_dir++) { - SetDlgItemText(hwndDlg, EDIT_CHEATS + curr_dir, directory_names[curr_dir]); + SetDlgItemText(hwndDlg, EDIT_ROMS + curr_dir, directory_names[curr_dir]); } // Check the screenshot naming checkbox if necessary @@ -123,25 +123,32 @@ static BOOL CALLBACK DirConCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM case WM_COMMAND: if( !(wParam >> 16) ) { - if( (wParam & 0xFFFF) >= BUTTON_CHEATS && (wParam & 0xFFFF) <= BUTTON_CHEATS + NUMBER_OF_DIRECTORIES) + if( (wParam & 0xFFFF) >= BUTTON_ROMS && (wParam & 0xFFFF) <= BUTTON_ROMS + NUMBER_OF_DIRECTORIES) { // If a directory selection button was pressed, ask the // user for a directory. - static char *helpert[6] = { - "Cheats", - "Miscellaneous", - "Nonvolatile Game Data", + static char *helpert[13] = { + "Roms", + "Battery Saves", "Save States", - "Screen Snapshots", + "FDS Bios Rom", + "Screenshots", + "Cheats", + "Movies", + "Memory Watch", + "Basic Bot", + "Macro files", + "Input Presets", + "Lua Scripts", "Base Directory" }; char name[MAX_PATH]; - if(BrowseForFolder(hwndDlg, helpert[ ( (wParam & 0xFFFF) - BUTTON_CHEATS)], name)) + if(BrowseForFolder(hwndDlg, helpert[ ( (wParam & 0xFFFF) - BUTTON_ROMS)], name)) { - SetDlgItemText(hwndDlg, EDIT_CHEATS + ((wParam & 0xFFFF) - BUTTON_CHEATS), name); + SetDlgItemText(hwndDlg, EDIT_ROMS + ((wParam & 0xFFFF) - BUTTON_ROMS), name); } } else switch(wParam & 0xFFFF) diff --git a/src/drivers/win/input.cpp b/src/drivers/win/input.cpp index ac9239ce..8f671486 100644 --- a/src/drivers/win/input.cpp +++ b/src/drivers/win/input.cpp @@ -1533,7 +1533,7 @@ static void PresetExport(int preset) ofn.lpstrFile=nameo; ofn.nMaxFile=256; ofn.Flags=OFN_EXPLORER|OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT; - ofn.lpstrInitialDir=InputPresetDir; + ofn.lpstrInitialDir=FCEU_GetPath(FCEUMKF_INPUT); if(GetSaveFileName(&ofn)) { int i; @@ -1590,7 +1590,7 @@ static void PresetImport(int preset) ofn.lpstrFile=nameo; ofn.nMaxFile=256; ofn.Flags=OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY; - ofn.lpstrInitialDir=InputPresetDir; + ofn.lpstrInitialDir=FCEU_GetPath(FCEUMKF_INPUT); if(GetOpenFileName(&ofn)) { diff --git a/src/drivers/win/main.cpp b/src/drivers/win/main.cpp index a1f53b78..35b08843 100644 --- a/src/drivers/win/main.cpp +++ b/src/drivers/win/main.cpp @@ -106,8 +106,8 @@ double winsizemulx = 1, winsizemuly = 1; // Contains the names of the overridden standard directories -// in the order cheats, misc, nonvol, states, snaps, memwatch, basicbot, macro, fds,..., base -char *directory_names[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +// in the order roms, nonvol, states, fdsrom, snaps, cheats, movies, memwatch, basicbot, macro, input presets, lua scripts, base +char *directory_names[13] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /** * Handle of the main window. @@ -160,16 +160,19 @@ void SetDirs() { int x; - static int jlist[10]= { - FCEUIOD_CHEATS, - FCEUIOD_MISC, + static int jlist[13]= { + FCEUIOD_ROMS, FCEUIOD_NV, - FCEUIOD_STATE, + FCEUIOD_STATES, + FCEUIOD_FDSROM, FCEUIOD_SNAPS, + FCEUIOD_CHEATS, + FCEUIOD_MOVIES, FCEUIOD_MEMW, FCEUIOD_BBOT, FCEUIOD_MACRO, - FCEUIOD_FDSROM, + FCEUIOD_INPUT, + FCEUIOD_LUA, FCEUIOD__COUNT}; FCEUI_SetSnapName(eoptions & EO_SNAPNAME); @@ -179,9 +182,9 @@ void SetDirs() FCEUI_SetDirOverride(jlist[x], directory_names[x]); } - if(directory_names[10]) + if(directory_names[12]) { - FCEUI_SetBaseDirectory(directory_names[10]); + FCEUI_SetBaseDirectory(directory_names[12]); } else { diff --git a/src/drivers/win/main.h b/src/drivers/win/main.h index 7b0c86ee..d90c0769 100644 --- a/src/drivers/win/main.h +++ b/src/drivers/win/main.h @@ -39,12 +39,25 @@ static int status_icon = 1; static int vmod = 0; static char *gfsdir=0; -extern char* directory_names[10]; +extern char* directory_names[13]; /** * Contains the names of the default directories. **/ -static const char *default_directory_names[9] = {"cheats", "movie", "sav", "fcs", "snaps", "memwatch", "basicbot", "macro", ""}; +static const char *default_directory_names[12] = { + "", // roms + "sav", // nonvol + "fcs", // states + "", // fdsrom + "snaps", // snaps + "cheats", // cheats + "movies", // movies + "tools", // memwatch + "tools", // basicbot + "tools", // macro + "tools", // input presets + "tools" // lua scripts +}; #define NUMBER_OF_DIRECTORIES sizeof(directory_names) / sizeof(*directory_names) #define NUMBER_OF_DEFAULT_DIRECTORIES sizeof(default_directory_names) / sizeof(*default_directory_names) diff --git a/src/drivers/win/res.rc b/src/drivers/win/res.rc index 4d8ea887..78d7b57b 100644 Binary files a/src/drivers/win/res.rc and b/src/drivers/win/res.rc differ diff --git a/src/drivers/win/resource.h b/src/drivers/win/resource.h index 41efb78c..461205dd 100644 --- a/src/drivers/win/resource.h +++ b/src/drivers/win/resource.h @@ -9,7 +9,7 @@ #define GUI_BOT_VALUES 2 #define BTN_CANCEL 2 #define MENU_OPEN_FILE 100 -#define EDIT_CHEATS 100 +#define EDIT_ROMS 100 #define MENU_CLOSE_FILE 101 #define IDI_ICON1 101 #define CB_DISABLE_SPEED_THROTTLING 101 @@ -42,7 +42,7 @@ #define MENU_STOP_AVI 152 #define MENU_EXIT 153 #define MENU_RESET 200 -#define BUTTON_CHEATS 200 +#define BUTTON_ROMS 200 #define TXT_PAD1 200 #define BTN_RESTORE_DEFAULTS 200 #define BTN_CLEAR 200 diff --git a/src/drivers/win/window.cpp b/src/drivers/win/window.cpp index 6d27a7de..142316da 100644 --- a/src/drivers/win/window.cpp +++ b/src/drivers/win/window.cpp @@ -520,7 +520,7 @@ void LoadNewGamey(HWND hParent, const char *initialdir) ofn.lpstrFile=nameo; ofn.nMaxFile=256; ofn.Flags=OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY; //OFN_EXPLORER|OFN_ENABLETEMPLATE|OFN_ENABLEHOOK; - ofn.lpstrInitialDir = initialdir ? initialdir : gfsdir; + ofn.lpstrInitialDir = initialdir ? initialdir : FCEU_GetPath(FCEUMKF_ROMS); // Show the Open File dialog if(GetOpenFileName(&ofn)) diff --git a/src/file.cpp b/src/file.cpp index 5d5e6e53..5afb1181 100644 --- a/src/file.cpp +++ b/src/file.cpp @@ -407,7 +407,7 @@ uint64 FCEU_fwrite(void *ptr, size_t size, size_t nmemb, FCEUFILE *fp) return gzwrite(fp->fp,ptr,size*nmemb); } else if(fp->type>=2) - { + { return 0; } else @@ -443,141 +443,141 @@ int FCEU_fseek(FCEUFILE *fp, long offset, int whence) uint64 FCEU_ftell(FCEUFILE *fp) { - if(fp->type==1) - { - return gztell(fp->fp); - } - else if(fp->type>=2) - { - return (((MEMWRAP *)(fp->fp))->location); - } - else - return ftell((FILE *)fp->fp); + if(fp->type==1) + { + return gztell(fp->fp); + } + else if(fp->type>=2) + { + return (((MEMWRAP *)(fp->fp))->location); + } + else + return ftell((FILE *)fp->fp); } void FCEU_rewind(FCEUFILE *fp) { - if(fp->type==1) - { - gzrewind(fp->fp); - } - else if(fp->type>=2) - { - ((MEMWRAP *)(fp->fp))->location=0; - } - else - /* Rewind */ - fseek((FILE*)fp->fp,0,SEEK_SET); //mbg merge 7/17/06 - added cast to FILE* + if(fp->type==1) + { + gzrewind(fp->fp); + } + else if(fp->type>=2) + { + ((MEMWRAP *)(fp->fp))->location=0; + } + else + /* Rewind */ + fseek((FILE*)fp->fp,0,SEEK_SET); //mbg merge 7/17/06 - added cast to FILE* } int FCEU_read16le(uint16 *val, FCEUFILE *fp) { - uint8 t[4]; //mbg merge 7/17/06 - changed size from 2 to 4 to avoid dangerous problem with uint32* poking + uint8 t[4]; //mbg merge 7/17/06 - changed size from 2 to 4 to avoid dangerous problem with uint32* poking - if(fp->type>=1) - { - if(fp->type>=2) - { - MEMWRAP *wz; - wz=(MEMWRAP *)fp->fp; - if(wz->location+2>wz->size) - {return 0;} - *(uint32 *)t=*(uint32 *)(wz->data+wz->location); - wz->location+=2; - } - else if(fp->type==1) - if(gzread(fp->fp,&t,2)!=2) return(0); - return(1); - } - else - { - if(fread(t,1,2,(FILE *)fp->fp)!=2) return(0); - } - *val=t[0]|(t[1]<<8); - return(1); + if(fp->type>=1) + { + if(fp->type>=2) + { + MEMWRAP *wz; + wz=(MEMWRAP *)fp->fp; + if(wz->location+2>wz->size) + {return 0;} + *(uint32 *)t=*(uint32 *)(wz->data+wz->location); + wz->location+=2; + } + else if(fp->type==1) + if(gzread(fp->fp,&t,2)!=2) return(0); + return(1); + } + else + { + if(fread(t,1,2,(FILE *)fp->fp)!=2) return(0); + } + *val=t[0]|(t[1]<<8); + return(1); } int FCEU_read32le(uint32 *Bufo, FCEUFILE *fp) { - if(fp->type>=1) - { - uint8 t[4]; - #ifndef LSB_FIRST - uint8 x[4]; - #endif - if(fp->type>=2) - { - MEMWRAP *wz; - wz=(MEMWRAP *)fp->fp; - if(wz->location+4>wz->size) - {return 0;} - *(uint32 *)t=*(uint32 *)(wz->data+wz->location); - wz->location+=4; - } - else if(fp->type==1) - gzread(fp->fp,&t,4); - #ifndef LSB_FIRST - x[0]=t[3]; - x[1]=t[2]; - x[2]=t[1]; - x[3]=t[0]; - *(uint32*)Bufo=*(uint32*)x; - #else - *(uint32*)Bufo=*(uint32*)t; - #endif - return 1; - } - else - { - return read32le(Bufo,(FILE *)fp->fp); - } + if(fp->type>=1) + { + uint8 t[4]; + #ifndef LSB_FIRST + uint8 x[4]; + #endif + if(fp->type>=2) + { + MEMWRAP *wz; + wz=(MEMWRAP *)fp->fp; + if(wz->location+4>wz->size) + {return 0;} + *(uint32 *)t=*(uint32 *)(wz->data+wz->location); + wz->location+=4; + } + else if(fp->type==1) + gzread(fp->fp,&t,4); + #ifndef LSB_FIRST + x[0]=t[3]; + x[1]=t[2]; + x[2]=t[1]; + x[3]=t[0]; + *(uint32*)Bufo=*(uint32*)x; + #else + *(uint32*)Bufo=*(uint32*)t; + #endif + return 1; + } + else + { + return read32le(Bufo,(FILE *)fp->fp); + } } int FCEU_fgetc(FCEUFILE *fp) { - if(fp->type==1) - return gzgetc(fp->fp); - else if(fp->type>=2) - { - MEMWRAP *wz; - wz=(MEMWRAP *)fp->fp; - if(wz->locationsize) - return wz->data[wz->location++]; - return EOF; - } - else - return fgetc((FILE *)fp->fp); + if(fp->type==1) + return gzgetc(fp->fp); + else if(fp->type>=2) + { + MEMWRAP *wz; + wz=(MEMWRAP *)fp->fp; + if(wz->locationsize) + return wz->data[wz->location++]; + return EOF; + } + else + return fgetc((FILE *)fp->fp); } uint64 FCEU_fgetsize(FCEUFILE *fp) { - if(fp->type==1) - { - int x,t; - t=gztell(fp->fp); - gzrewind(fp->fp); - for(x=0; gzgetc(fp->fp) != EOF; x++); - gzseek(fp->fp,t,SEEK_SET); - return(x); - } - else if(fp->type>=2) - return ((MEMWRAP*)(fp->fp))->size; - else - { - long t,r; - t=ftell((FILE *)fp->fp); - fseek((FILE *)fp->fp,0,SEEK_END); - r=ftell((FILE *)fp->fp); - fseek((FILE *)fp->fp,t,SEEK_SET); - return r; - } + if(fp->type==1) + { + int x,t; + t=gztell(fp->fp); + gzrewind(fp->fp); + for(x=0; gzgetc(fp->fp) != EOF; x++); + gzseek(fp->fp,t,SEEK_SET); + return(x); + } + else if(fp->type>=2) + return ((MEMWRAP*)(fp->fp))->size; + else + { + long t,r; + t=ftell((FILE *)fp->fp); + fseek((FILE *)fp->fp,0,SEEK_END); + r=ftell((FILE *)fp->fp); + fseek((FILE *)fp->fp,t,SEEK_SET); + return r; + } } int FCEU_fisarchive(FCEUFILE *fp) { - if(fp->type==2) - return 1; - return 0; + if(fp->type==2) + return 1; + return 0; } @@ -599,7 +599,7 @@ void FCEUI_SetBaseDirectory(const char *dir) BaseDirectory[2047] = 0; } -static char *odirs[FCEUIOD__COUNT]={0,0,0,0,0}; // odirs, odors. ^_^ +static char *odirs[FCEUIOD__COUNT]={0,0,0,0,0,0,0,0,0,0,0,0}; // odirs, odors. ^_^ void FCEUI_SetDirOverride(int which, char *n) { @@ -611,260 +611,279 @@ void FCEUI_SetDirOverride(int which, char *n) if(GameInfo) /* Rebuild cache of present states/movies. */ { - if(which==FCEUIOD_STATE) + if(which==FCEUIOD_STATES) { FCEUSS_CheckStates(); } } } - #ifndef HAVE_ASPRINTF - static int asprintf(char **strp, const char *fmt, ...) - { - va_list ap; - int ret; + #ifndef HAVE_ASPRINTF + static int asprintf(char **strp, const char *fmt, ...) + { + va_list ap; + int ret; - va_start(ap,fmt); - if(!(*strp=(char*)malloc(2048))) //mbg merge 7/17/06 cast to char* - return(0); - ret=vsnprintf(*strp,2048,fmt,ap); - va_end(ap); - return(ret); - } - #endif + va_start(ap,fmt); + if(!(*strp=(char*)malloc(2048))) //mbg merge 7/17/06 cast to char* + return(0); + ret=vsnprintf(*strp,2048,fmt,ap); + va_end(ap); + return(ret); + } + #endif char* FCEU_GetPath(int type) { - char *ret=0; - switch(type) - { - case FCEUMKF_STATE:if(odirs[FCEUIOD_STATE]) - ret=strdup(odirs[FCEUIOD_STATE]); - else - asprintf(&ret,"%s"PSS"fcs",BaseDirectory); - break; - case FCEUMKF_MOVIE:if(odirs[FCEUIOD_MISC]) - ret=strdup(odirs[FCEUIOD_MISC]); - else - asprintf(&ret,"%s"PSS"movie",BaseDirectory); - break; - case FCEUMKF_MEMW:if(odirs[FCEUIOD_MEMW]) - ret=strdup(odirs[FCEUIOD_MEMW]); - else - asprintf(&ret,"%s"PSS"memwatch",BaseDirectory); - break; - case FCEUMKF_BBOT:if(odirs[FCEUIOD_BBOT]) - ret=strdup(odirs[FCEUIOD_BBOT]); - else - asprintf(&ret,"%s"PSS"basicbot",BaseDirectory); - break; - } - return(ret); + char *ret=0; + switch(type) + { + case FCEUMKF_STATE: + if(odirs[FCEUIOD_STATES]) + ret=strdup(odirs[FCEUIOD_STATES]); + else + asprintf(&ret,"%s"PSS"fcs",BaseDirectory); + break; + case FCEUMKF_MOVIE: + if(odirs[FCEUIOD_MOVIES]) + ret=strdup(odirs[FCEUIOD_MOVIES]); + else + asprintf(&ret,"%s"PSS"movies",BaseDirectory); + break; + case FCEUMKF_MEMW: + if(odirs[FCEUIOD_MEMW]) + ret=strdup(odirs[FCEUIOD_MEMW]); + else + asprintf(&ret,"%s"PSS"tools",BaseDirectory); + break; + case FCEUMKF_BBOT: + if(odirs[FCEUIOD_BBOT]) + ret=strdup(odirs[FCEUIOD_BBOT]); + else + asprintf(&ret,"%s"PSS"tools",BaseDirectory); + break; + case FCEUMKF_ROMS: + if(odirs[FCEUIOD_ROMS]) + ret=strdup(odirs[FCEUIOD_ROMS]); + else + asprintf(&ret,"%s",BaseDirectory); + break; + case FCEUMKF_INPUT: + if(odirs[FCEUIOD_INPUT]) + ret=strdup(odirs[FCEUIOD_INPUT]); + else + asprintf(&ret,"%s"PSS"tools",BaseDirectory); + break; + case FCEUMKF_LUA: + if(odirs[FCEUIOD_LUA]) + ret=strdup(odirs[FCEUIOD_LUA]); + else + asprintf(&ret,"%s"PSS"tools",BaseDirectory); + break; + } + return(ret); } char *FCEU_MakePath(int type, const char* filebase) { - char *ret=0; + char *ret=0; - switch(type) - { - case FCEUMKF_MOVIE:if(odirs[FCEUIOD_MISC]) - asprintf(&ret,"%s"PSS"%s",odirs[FCEUIOD_MISC],filebase); - else - asprintf(&ret,"%s"PSS"movie"PSS"%s",BaseDirectory,filebase); - break; - case FCEUMKF_STATE:if(odirs[FCEUIOD_STATE]) - asprintf(&ret,"%s"PSS"%s",odirs[FCEUIOD_STATE],filebase); - else - asprintf(&ret,"%s"PSS"fcs"PSS"%s",BaseDirectory,filebase); - break; - } - return(ret); + switch(type) + { + case FCEUMKF_MOVIE: + if(odirs[FCEUIOD_MOVIES]) + asprintf(&ret,"%s"PSS"%s",odirs[FCEUIOD_MOVIES],filebase); + else + asprintf(&ret,"%s"PSS"movies"PSS"%s",BaseDirectory,filebase); + break; + case FCEUMKF_STATE: + if(odirs[FCEUIOD_STATES]) + asprintf(&ret,"%s"PSS"%s",odirs[FCEUIOD_STATES],filebase); + else + asprintf(&ret,"%s"PSS"fcs"PSS"%s",BaseDirectory,filebase); + break; + } + return(ret); } char *FCEU_MakeFName(int type, int id1, char *cd1) { - char *ret=0; - struct stat tmpstat; + char *ret=0; + struct stat tmpstat; - switch(type) - { - case FCEUMKF_NPTEMP: asprintf(&ret,"%s"PSS"m590plqd94fo.tmp",BaseDirectory);break; - case FCEUMKF_MOVIE:if(id1>=0) - { - if(odirs[FCEUIOD_MISC]) - asprintf(&ret,"%s"PSS"%s.%d.fcm",odirs[FCEUIOD_MISC],FileBase,id1); - else - asprintf(&ret,"%s"PSS"movie"PSS"%s.%d.fcm",BaseDirectory,FileBase,id1); - if(stat(ret,&tmpstat)==-1) - { - if(odirs[FCEUIOD_MISC]) - asprintf(&ret,"%s"PSS"%s.%d.fcm",odirs[FCEUIOD_MISC],FileBase,id1); - else - asprintf(&ret,"%s"PSS"movie"PSS"%s.%d.fcm",BaseDirectory,FileBase,id1); - } - } - else - { - if(odirs[FCEUIOD_MISC]) - asprintf(&ret,"%s"PSS"%s.fcm",odirs[FCEUIOD_MISC],FileBase); - else - asprintf(&ret,"%s"PSS"movie"PSS"%s.fcm",BaseDirectory,FileBase); - } - break; - case FCEUMKF_STATE: - if(odirs[FCEUIOD_STATE]) - { - asprintf(&ret,"%s"PSS"%s.fc%d",odirs[FCEUIOD_STATE],FileBase,id1); - } - else - { - asprintf(&ret,"%s"PSS"fcs"PSS"%s.fc%d",BaseDirectory,FileBase,id1); - } - if(stat(ret,&tmpstat)==-1) - { - if(odirs[FCEUIOD_STATE]) + switch(type) + { + case FCEUMKF_NPTEMP: asprintf(&ret,"%s"PSS"m590plqd94fo.tmp",BaseDirectory);break; + case FCEUMKF_MOVIE: + if(id1>=0) { - asprintf(&ret,"%s"PSS"%s.fc%d",odirs[FCEUIOD_STATE],FileBase,id1); + if(odirs[FCEUIOD_MOVIES]) + asprintf(&ret,"%s"PSS"%s.%d.fcm",odirs[FCEUIOD_MOVIES],FileBase,id1); + else + asprintf(&ret,"%s"PSS"movies"PSS"%s.%d.fcm",BaseDirectory,FileBase,id1); + if(stat(ret,&tmpstat)==-1) + { + if(odirs[FCEUIOD_MOVIES]) + asprintf(&ret,"%s"PSS"%s.%d.fcm",odirs[FCEUIOD_MOVIES],FileBase,id1); + else + asprintf(&ret,"%s"PSS"movies"PSS"%s.%d.fcm",BaseDirectory,FileBase,id1); + } } - else + else + { + if(odirs[FCEUIOD_MOVIES]) + asprintf(&ret,"%s"PSS"%s.fcm",odirs[FCEUIOD_MOVIES],FileBase); + else + asprintf(&ret,"%s"PSS"movies"PSS"%s.fcm",BaseDirectory,FileBase); + } + break; + case FCEUMKF_STATE: + if(odirs[FCEUIOD_STATES]) + { + asprintf(&ret,"%s"PSS"%s.fc%d",odirs[FCEUIOD_STATES],FileBase,id1); + } + else { asprintf(&ret,"%s"PSS"fcs"PSS"%s.fc%d",BaseDirectory,FileBase,id1); } - } - break; - case FCEUMKF_SNAP: - if(FSettings.SnapName) - { - if(odirs[FCEUIOD_SNAPS]) - asprintf(&ret,"%s"PSS"%s-%d.%s",odirs[FCEUIOD_SNAPS],FileBase,id1,cd1); - else - asprintf(&ret,"%s"PSS"snaps"PSS"%s-%d.%s",BaseDirectory,FileBase,id1,cd1); - } - else - { - if(odirs[FCEUIOD_SNAPS]) - asprintf(&ret,"%s"PSS"%d.%s",odirs[FCEUIOD_SNAPS],id1,cd1); - else - asprintf(&ret,"%s"PSS"snaps"PSS"%d.%s",BaseDirectory,id1,cd1); - } - break; - case FCEUMKF_FDS:if(odirs[FCEUIOD_NV]) - asprintf(&ret,"%s"PSS"%s.fds",odirs[FCEUIOD_NV],FileBase); - else - asprintf(&ret,"%s"PSS"sav"PSS"%s.fds",BaseDirectory,FileBase); - break; - case FCEUMKF_SAV:if(odirs[FCEUIOD_NV]) - asprintf(&ret,"%s"PSS"%s.%s",odirs[FCEUIOD_NV],FileBase,cd1); - else - asprintf(&ret,"%s"PSS"sav"PSS"%s.%s",BaseDirectory,FileBase,cd1); - if(stat(ret,&tmpstat)==-1) - { - if(odirs[FCEUIOD_NV]) - asprintf(&ret,"%s"PSS"%s.%s",odirs[FCEUIOD_NV],FileBase,cd1); - else - asprintf(&ret,"%s"PSS"sav"PSS"%s.%s",BaseDirectory,FileBase,cd1); - } - break; - case FCEUMKF_REWINDSTATE: - if(odirs[FCEUIOD_STATE]) - { - asprintf(&ret,"%s"PSS"rewind%d.fcs",odirs[FCEUIOD_STATE],id1); - } - else - { - asprintf(&ret,"%s"PSS"fcs"PSS"rewind%d.fcs",BaseDirectory,id1); - } - if(stat(ret,&tmpstat)==-1) - { - if(odirs[FCEUIOD_STATE]) + if(stat(ret,&tmpstat)==-1) { - asprintf(&ret,"%s"PSS"rewind%d.fcs",odirs[FCEUIOD_STATE],id1); + if(odirs[FCEUIOD_STATES]) + { + asprintf(&ret,"%s"PSS"%s.fc%d",odirs[FCEUIOD_STATES],FileBase,id1); + } + else + { + asprintf(&ret,"%s"PSS"fcs"PSS"%s.fc%d",BaseDirectory,FileBase,id1); + } + } + break; + case FCEUMKF_SNAP: + if(FSettings.SnapName) + { + if(odirs[FCEUIOD_SNAPS]) + asprintf(&ret,"%s"PSS"%s-%d.%s",odirs[FCEUIOD_SNAPS],FileBase,id1,cd1); + else + asprintf(&ret,"%s"PSS"snaps"PSS"%s-%d.%s",BaseDirectory,FileBase,id1,cd1); + } + else + { + if(odirs[FCEUIOD_SNAPS]) + asprintf(&ret,"%s"PSS"%d.%s",odirs[FCEUIOD_SNAPS],id1,cd1); + else + asprintf(&ret,"%s"PSS"snaps"PSS"%d.%s",BaseDirectory,id1,cd1); + } + break; + case FCEUMKF_FDS: + if(odirs[FCEUIOD_NV]) + asprintf(&ret,"%s"PSS"%s.fds",odirs[FCEUIOD_NV],FileBase); + else + asprintf(&ret,"%s"PSS"sav"PSS"%s.fds",BaseDirectory,FileBase); + break; + case FCEUMKF_SAV: + if(odirs[FCEUIOD_NV]) + asprintf(&ret,"%s"PSS"%s.%s",odirs[FCEUIOD_NV],FileBase,cd1); + else + asprintf(&ret,"%s"PSS"sav"PSS"%s.%s",BaseDirectory,FileBase,cd1); + if(stat(ret,&tmpstat)==-1) + { + if(odirs[FCEUIOD_NV]) + asprintf(&ret,"%s"PSS"%s.%s",odirs[FCEUIOD_NV],FileBase,cd1); + else + asprintf(&ret,"%s"PSS"sav"PSS"%s.%s",BaseDirectory,FileBase,cd1); + } + break; + case FCEUMKF_REWINDSTATE: + if(odirs[FCEUIOD_STATES]) + { + asprintf(&ret,"%s"PSS"rewind%d.fcs",odirs[FCEUIOD_STATES],id1); } else { asprintf(&ret,"%s"PSS"fcs"PSS"rewind%d.fcs",BaseDirectory,id1); } - } - break; - case FCEUMKF_CHEAT: - if(odirs[FCEUIOD_CHEATS]) - asprintf(&ret,"%s"PSS"%s.cht",odirs[FCEUIOD_CHEATS],FileBase); - else - asprintf(&ret,"%s"PSS"cheats"PSS"%s.cht",BaseDirectory,FileBase); - break; - case FCEUMKF_IPS: asprintf(&ret,"%s"PSS"%s%s.ips",FileBaseDirectory,FileBase,FileExt); - break; - case FCEUMKF_GGROM:asprintf(&ret,"%s"PSS"gg.rom",BaseDirectory);break; - case FCEUMKF_FDSROM: - if(odirs[FCEUIOD_FDSROM]) - asprintf(&ret,"%s"PSS"disksys.rom",odirs[FCEUIOD_FDSROM],FileBase); - else - asprintf(&ret,"%s"PSS"disksys.rom",BaseDirectory,FileBase); - break; - case FCEUMKF_PALETTE: - if(odirs[FCEUIOD_MISC]) - asprintf(&ret,"%s"PSS"%s.pal",odirs[FCEUIOD_MISC],FileBase); - else - asprintf(&ret,"%s"PSS"%s.pal",BaseDirectory,FileBase); - break; - case FCEUMKF_MOVIEGLOB: - if(odirs[FCEUIOD_MISC]) -// asprintf(&ret,"%s"PSS"%s*.fcm",odirs[FCEUIOD_MISC],FileBase); - asprintf(&ret,"%s"PSS"*.???",odirs[FCEUIOD_MISC]); - else -// asprintf(&ret,"%s"PSS"fcs"PSS"%s*.fcm",BaseDirectory,FileBase); - asprintf(&ret,"%s"PSS"movie"PSS"*.???",BaseDirectory); - break; - case FCEUMKF_MOVIEGLOB2: - asprintf(&ret,"%s"PSS"*.???",BaseDirectory); - break; - case FCEUMKF_STATEGLOB: - if(odirs[FCEUIOD_STATE]) - asprintf(&ret,"%s"PSS"%s*.fc?",odirs[FCEUIOD_STATE],FileBase); - else - asprintf(&ret,"%s"PSS"fcs"PSS"%s*.fc?",BaseDirectory,FileBase); - break; - } - return(ret); + if(stat(ret,&tmpstat)==-1) + { + if(odirs[FCEUIOD_STATES]) + { + asprintf(&ret,"%s"PSS"rewind%d.fcs",odirs[FCEUIOD_STATES],id1); + } + else + { + asprintf(&ret,"%s"PSS"fcs"PSS"rewind%d.fcs",BaseDirectory,id1); + } + } + break; + case FCEUMKF_CHEAT: + if(odirs[FCEUIOD_CHEATS]) + asprintf(&ret,"%s"PSS"%s.cht",odirs[FCEUIOD_CHEATS],FileBase); + else + asprintf(&ret,"%s"PSS"cheats"PSS"%s.cht",BaseDirectory,FileBase); + break; + case FCEUMKF_IPS:asprintf(&ret,"%s"PSS"%s%s.ips",FileBaseDirectory,FileBase,FileExt);break; + case FCEUMKF_GGROM:asprintf(&ret,"%s"PSS"gg.rom",BaseDirectory);break; + case FCEUMKF_FDSROM: + if(odirs[FCEUIOD_FDSROM]) + asprintf(&ret,"%s"PSS"disksys.rom",odirs[FCEUIOD_FDSROM],FileBase); + else + asprintf(&ret,"%s"PSS"disksys.rom",BaseDirectory,FileBase); + break; + case FCEUMKF_PALETTE:asprintf(&ret,"%s"PSS"%s.pal",BaseDirectory,FileBase);break; + case FCEUMKF_MOVIEGLOB: + if(odirs[FCEUIOD_MOVIES]) +// asprintf(&ret,"%s"PSS"%s*.fcm",odirs[FCEUIOD_MOVIES],FileBase); + asprintf(&ret,"%s"PSS"*.???",odirs[FCEUIOD_MOVIES]); + else +// asprintf(&ret,"%s"PSS"fcs"PSS"%s*.fcm",BaseDirectory,FileBase); + asprintf(&ret,"%s"PSS"movies"PSS"*.???",BaseDirectory); + break; + case FCEUMKF_MOVIEGLOB2:asprintf(&ret,"%s"PSS"*.???",BaseDirectory);break; + case FCEUMKF_STATEGLOB: + if(odirs[FCEUIOD_STATES]) + asprintf(&ret,"%s"PSS"%s*.fc?",odirs[FCEUIOD_STATES],FileBase); + else + asprintf(&ret,"%s"PSS"fcs"PSS"%s*.fc?",BaseDirectory,FileBase); + break; + } + return(ret); } void GetFileBase(const char *f) { - const char *tp1,*tp3; + const char *tp1,*tp3; - #if PSS_STYLE==4 - tp1=((char *)strrchr(f,':')); - #elif PSS_STYLE==1 - tp1=((char *)strrchr(f,'/')); - #else - tp1=((char *)strrchr(f,'\\')); - #if PSS_STYLE!=3 - tp3=((char *)strrchr(f,'/')); - if(tp1tp1)) - { - memcpy(FileBase,tp1,tp3-tp1); - FileBase[tp3-tp1]=0; - strcpy(FileExt,tp3); - } - else - { - strcpy(FileBase,tp1); - FileExt[0]=0; - } + if(((tp3=strrchr(f,'.'))!=NULL) && (tp3>tp1)) + { + memcpy(FileBase,tp1,tp3-tp1); + FileBase[tp3-tp1]=0; + strcpy(FileExt,tp3); + } + else + { + strcpy(FileBase,tp1); + FileExt[0]=0; + } } diff --git a/src/file.h b/src/file.h index 207cb57d..0b45f1ab 100644 --- a/src/file.h +++ b/src/file.h @@ -26,22 +26,25 @@ char* FCEU_GetPath(int type); char *FCEU_MakePath(int type, const char* filebase); char *FCEU_MakeFName(int type, int id1, char *cd1); -#define FCEUMKF_STATE 1 -#define FCEUMKF_SNAP 2 -#define FCEUMKF_SAV 3 -#define FCEUMKF_CHEAT 4 -#define FCEUMKF_FDSROM 5 -#define FCEUMKF_PALETTE 6 -#define FCEUMKF_GGROM 7 -#define FCEUMKF_IPS 8 -#define FCEUMKF_FDS 9 -#define FCEUMKF_MOVIE 10 -#define FCEUMKF_NPTEMP 11 -#define FCEUMKF_MOVIEGLOB 12 -#define FCEUMKF_STATEGLOB 13 -#define FCEUMKF_MOVIEGLOB2 14 -#define FCEUMKF_REWINDSTATE 15 -#define FCEUMKF_MEMW 16 -#define FCEUMKF_BBOT 17 +#define FCEUMKF_STATE 1 +#define FCEUMKF_SNAP 2 +#define FCEUMKF_SAV 3 +#define FCEUMKF_CHEAT 4 +#define FCEUMKF_FDSROM 5 +#define FCEUMKF_PALETTE 6 +#define FCEUMKF_GGROM 7 +#define FCEUMKF_IPS 8 +#define FCEUMKF_FDS 9 +#define FCEUMKF_MOVIE 10 +#define FCEUMKF_NPTEMP 11 +#define FCEUMKF_MOVIEGLOB 12 +#define FCEUMKF_STATEGLOB 13 +#define FCEUMKF_MOVIEGLOB2 14 +#define FCEUMKF_REWINDSTATE 15 +#define FCEUMKF_MEMW 16 +#define FCEUMKF_BBOT 17 +#define FCEUMKF_ROMS 18 +#define FCEUMKF_INPUT 19 +#define FCEUMKF_LUA 20 #endif