int MDFNSS_Save(const char *fname, const char *suffix, const MDFN_Surface *surface, const MDFN_Rect *DisplayRect, const MDFN_Rect *LineWidths) { StateMem st; memset(&st, 0, sizeof(StateMem)); if(!MDFNGameInfo->StateAction) { MDFN_DispMessage("Module \"%s\" doesn't support save states.", MDFNGameInfo->shortname); return(0); } if(!MDFNSS_SaveSM(&st, 1, 0, surface, DisplayRect, LineWidths)) { if(st.data) free(st.data); if(!fname && !suffix) MDFN_DispMessage("State %d save error.", CurrentState); return(0); } if(!MDFN_DumpToFile(fname ? fname : MDFN_MakeFName(MDFNMKF_STATE,CurrentState,suffix).c_str(), 6, st.data, st.len)) { SaveStateStatus[CurrentState] = 0; free(st.data); if(!fname && !suffix) MDFN_DispMessage("State %d save error.",CurrentState); return(0); } std::string bleh = MDFN_MakeFName(MDFNMKF_STATE,CurrentState,suffix); SaveStateMovie(bleh); free(st.data); SaveStateStatus[CurrentState] = 1; RecentlySavedState = CurrentState; if(!fname && !suffix) MDFN_DispMessage("State %d saved.",CurrentState); return(1); }
int MDFNSS_Save(const char *fname, const char *suffix, uint32 *fb, MDFN_Rect *LineWidths) { StateMem st; memset(&st, 0, sizeof(StateMem)); if(!MDFNSS_SaveSM(&st, 1, 0, fb, LineWidths)) { if(st.data) free(st.data); if(!fname && !suffix) MDFN_DispMessage(_("State %d save error."), CurrentState); return(0); } if(!MDFN_DumpToFile(fname ? fname : MDFN_MakeFName(MDFNMKF_STATE,CurrentState,suffix).c_str(), 6, st.data, st.len)) { SaveStateStatus[CurrentState] = 0; free(st.data); if(!fname && !suffix) MDFN_DispMessage(_("State %d save error."),CurrentState); return(0); } SaveStateMovie((const char*)MDFN_MakeFName(MDFNMKF_STATE,CurrentState,suffix).c_str()); free(st.data); SaveStateStatus[CurrentState] = 1; RecentlySavedState = CurrentState; if(!fname && !suffix) MDFN_DispMessage(_("State %d saved."),CurrentState); return(1); }