From: <man...@us...> - 2011-04-30 19:58:54
|
Revision: 12146 http://openmsx.svn.sourceforge.net/openmsx/?rev=12146&view=rev Author: manuelbi Date: 2011-04-30 19:58:47 +0000 (Sat, 30 Apr 2011) Log Message: ----------- Also add a command line option to load a savestate. This also includes the possibility to drop an OMS file on openMSX to start from the dropped savestate. The implementation is based on the savestate.tcl code... perhaps this can be improved. Modified Paths: -------------- openmsx/trunk/build/msvc/openmsx.vcxproj openmsx/trunk/build/msvc/openmsx.vcxproj.filters openmsx/trunk/src/CommandLineParser.cc openmsx/trunk/src/CommandLineParser.hh openmsx/trunk/src/node.mk Added Paths: ----------- openmsx/trunk/src/SaveStateCLI.cc openmsx/trunk/src/SaveStateCLI.hh Modified: openmsx/trunk/build/msvc/openmsx.vcxproj =================================================================== --- openmsx/trunk/build/msvc/openmsx.vcxproj 2011-04-30 18:53:40 UTC (rev 12145) +++ openmsx/trunk/build/msvc/openmsx.vcxproj 2011-04-30 19:58:47 UTC (rev 12146) @@ -759,6 +759,7 @@ <ClCompile Include="$(OpenMSXSrcDir)\ReplayCLI.cc" /> <ClCompile Include="$(OpenMSXSrcDir)\ReverseManager.cc" /> <ClCompile Include="$(OpenMSXSrcDir)\RP5C01.cc" /> + <ClCompile Include="$(OpenMSXSrcDir)\SaveStateCLI.cc" /> <ClCompile Include="$(OpenMSXSrcDir)\Schedulable.cc" /> <ClCompile Include="$(OpenMSXSrcDir)\Scheduler.cc" /> <ClCompile Include="$(OpenMSXSrcDir)\serialize.cc" /> @@ -1632,6 +1633,7 @@ <None Include="$(OpenMSXSrcDir)\ReplayCLI.hh" /> <None Include="$(OpenMSXSrcDir)\ReverseManager.hh" /> <None Include="$(OpenMSXSrcDir)\RP5C01.hh" /> + <None Include="$(OpenMSXSrcDir)\SaveState.hh" /> <None Include="$(OpenMSXSrcDir)\Schedulable.hh" /> <None Include="$(OpenMSXSrcDir)\Scheduler.hh" /> <None Include="$(OpenMSXSrcDir)\serialize.hh" /> Modified: openmsx/trunk/build/msvc/openmsx.vcxproj.filters =================================================================== --- openmsx/trunk/build/msvc/openmsx.vcxproj.filters 2011-04-30 18:53:40 UTC (rev 12145) +++ openmsx/trunk/build/msvc/openmsx.vcxproj.filters 2011-04-30 19:58:47 UTC (rev 12146) @@ -1357,6 +1357,7 @@ <ClCompile Include="$(OpenMSXSrcDir)\ReplayCLI.cc" /> <ClCompile Include="$(OpenMSXSrcDir)\ReverseManager.cc" /> <ClCompile Include="$(OpenMSXSrcDir)\RP5C01.cc" /> + <ClCompile Include="$(OpenMSXSrcDir)\SaveStateCLI.cc" /> <ClCompile Include="$(OpenMSXSrcDir)\Schedulable.cc" /> <ClCompile Include="$(OpenMSXSrcDir)\Scheduler.cc" /> <ClCompile Include="$(OpenMSXSrcDir)\serialize.cc" /> @@ -2868,6 +2869,7 @@ <None Include="$(OpenMSXSrcDir)\ReplayCLI.hh" /> <None Include="$(OpenMSXSrcDir)\ReverseManager.hh" /> <None Include="$(OpenMSXSrcDir)\RP5C01.hh" /> + <None Include="$(OpenMSXSrcDir)\SaveStateCLI.hh" /> <None Include="$(OpenMSXSrcDir)\Schedulable.hh" /> <None Include="$(OpenMSXSrcDir)\Scheduler.hh" /> <None Include="$(OpenMSXSrcDir)\serialize.hh" /> Modified: openmsx/trunk/src/CommandLineParser.cc =================================================================== --- openmsx/trunk/src/CommandLineParser.cc 2011-04-30 18:53:40 UTC (rev 12145) +++ openmsx/trunk/src/CommandLineParser.cc 2011-04-30 19:58:47 UTC (rev 12146) @@ -14,6 +14,7 @@ #include "CliExtension.hh" #include "CliConnection.hh" #include "ReplayCLI.hh" +#include "SaveStateCLI.hh" #include "CassettePlayerCLI.hh" #include "DiskImageCLI.hh" #include "HDImageCLI.hh" @@ -174,6 +175,7 @@ , msxRomCLI(new MSXRomCLI(*this)) , cliExtension(new CliExtension(*this)) , replayCLI(new ReplayCLI(*this)) + , saveStateCLI(new SaveStateCLI(*this)) , cassettePlayerCLI(new CassettePlayerCLI(*this)) #if COMPONENT_LASERDISC , laserdiscPlayerCLI(new LaserdiscPlayerCLI(*this)) @@ -253,6 +255,7 @@ fileExtMap["cas"] = "cassetteimage"; fileExtMap["ogv"] = "laserdiscimage"; fileExtMap["omr"] = "openMSX replay"; + fileExtMap["oms"] = "openMSX savestate"; fileExtMap["tcl"] = "Tcl script"; for (map<string, string>::const_iterator j = fileExtMap.begin(); j != fileExtMap.end(); ++j) { Modified: openmsx/trunk/src/CommandLineParser.hh =================================================================== --- openmsx/trunk/src/CommandLineParser.hh 2011-04-30 18:53:40 UTC (rev 12145) +++ openmsx/trunk/src/CommandLineParser.hh 2011-04-30 19:58:47 UTC (rev 12146) @@ -32,6 +32,7 @@ class MSXRomCLI; class CliExtension; class ReplayCLI; +class SaveStateCLI; class CassettePlayerCLI; class LaserdiscPlayerCLI; class DiskImageCLI; @@ -104,6 +105,7 @@ const std::auto_ptr<MSXRomCLI> msxRomCLI; const std::auto_ptr<CliExtension> cliExtension; const std::auto_ptr<ReplayCLI> replayCLI; + const std::auto_ptr<SaveStateCLI> saveStateCLI; const std::auto_ptr<CassettePlayerCLI> cassettePlayerCLI; #if COMPONENT_LASERDISC const std::auto_ptr<LaserdiscPlayerCLI> laserdiscPlayerCLI; Added: openmsx/trunk/src/SaveStateCLI.cc =================================================================== --- openmsx/trunk/src/SaveStateCLI.cc (rev 0) +++ openmsx/trunk/src/SaveStateCLI.cc 2011-04-30 19:58:47 UTC (rev 12146) @@ -0,0 +1,65 @@ +// $Id$ + +#include "SaveStateCLI.hh" +#include "CommandLineParser.hh" +#include "GlobalCommandController.hh" +#include "MSXException.hh" +#include "TclObject.hh" + +using std::deque; +using std::string; + +namespace openmsx { + +SaveStateCLI::SaveStateCLI(CommandLineParser& commandLineParser) + : commandController(commandLineParser.getGlobalCommandController()) +{ + commandLineParser.registerOption("-savestate", *this); + commandLineParser.registerFileClass("openMSX savestate", *this); +} + +bool SaveStateCLI::parseOption(const string& option, deque<string>& cmdLine) +{ + parseFileType(getArgument(option, cmdLine), cmdLine); + return true; +} + +const string& SaveStateCLI::optionHelp() const +{ + static const string text( + "Load savestate and start emulation from there"); + return text; +} + +void SaveStateCLI::parseFileType(const string& filename, + deque<string>& /*cmdLine*/) +{ + // TODO: this is basically a C++ version of a part of savestate.tcl. + // Can that be improved? + TclObject command(commandController.getInterpreter()); + command.addListElement("restore_machine"); + command.addListElement(filename); + string newId = command.executeCommand(); + command = TclObject(commandController.getInterpreter()); + command.addListElement("machine"); + string currentId = command.executeCommand(); + if (currentId != "") { + command = TclObject(commandController.getInterpreter()); + command.addListElement("delete_machine"); + command.addListElement(currentId); + command.executeCommand(); + } + command = TclObject(commandController.getInterpreter()); + command.addListElement("activate_machine"); + command.addListElement(newId); + command.executeCommand(); +} + +const string& SaveStateCLI::fileTypeHelp() const +{ + static const string text( + "openMSX savestate"); + return text; +} + +} // namespace openmsx Property changes on: openmsx/trunk/src/SaveStateCLI.cc ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Added: openmsx/trunk/src/SaveStateCLI.hh =================================================================== --- openmsx/trunk/src/SaveStateCLI.hh (rev 0) +++ openmsx/trunk/src/SaveStateCLI.hh 2011-04-30 19:58:47 UTC (rev 12146) @@ -0,0 +1,30 @@ +// $Id$ + +#ifndef SAVESTATECLI_HH +#define SAVESTATECLI_HH + +#include "CLIOption.hh" + +namespace openmsx { + +class CommandLineParser; +class GlobalCommandController; + +class SaveStateCLI : public CLIOption, public CLIFileType +{ +public: + explicit SaveStateCLI(CommandLineParser& commandLineParser); + virtual bool parseOption(const std::string& option, + std::deque<std::string>& cmdLine); + virtual const std::string& optionHelp() const; + virtual void parseFileType(const std::string& filename, + std::deque<std::string>& cmdLine); + virtual const std::string& fileTypeHelp() const; + +private: + GlobalCommandController& commandController; +}; + +} // namespace openmsx + +#endif Property changes on: openmsx/trunk/src/SaveStateCLI.hh ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Modified: openmsx/trunk/src/node.mk =================================================================== --- openmsx/trunk/src/node.mk 2011-04-30 18:53:40 UTC (rev 12145) +++ openmsx/trunk/src/node.mk 2011-04-30 19:58:47 UTC (rev 12146) @@ -16,6 +16,7 @@ MSXPPI I8255 \ DeviceFactory \ Reactor Scheduler Schedulable \ + SaveStateCLI \ MSXE6Timer \ MSXResetStatusRegister \ MSXTurboRPause \ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |