openMSX
|
Commands that directly influence the MSX state should send and events so that they can be recorded by the event recorder. More...
#include <RecordedCommand.hh>
Public Member Functions | |
virtual void | execute (std::span< const TclObject > tokens, TclObject &result, EmuTime::param time)=0 |
This is like the execute() method of the Command class, it only has an extra time parameter. | |
virtual bool | needRecord (std::span< const TclObject > tokens) const |
It's possible that in some cases the command doesn't need to be recorded after all (e.g. | |
Public Member Functions inherited from openmsx::Command | |
void | tabCompletion (std::vector< std::string > &tokens) const override |
Attempt tab completion for this command. | |
void | setAllowedInEmptyMachine (bool value) |
bool | isAllowedInEmptyMachine () const |
void | setToken (void *token_) |
void * | getToken () const |
template<typename... Args> | |
void | executeSubCommand (std::string_view subCmd, Args &&... args) |
Public Member Functions inherited from openmsx::CommandCompleter | |
CommandCompleter (const CommandCompleter &)=delete | |
CommandCompleter (CommandCompleter &&)=delete | |
CommandCompleter & | operator= (const CommandCompleter &)=delete |
CommandCompleter & | operator= (CommandCompleter &&)=delete |
CommandController & | getCommandController () const |
Interpreter & | getInterpreter () const final |
Public Member Functions inherited from openmsx::Completer | |
Completer (const Completer &)=delete | |
Completer (Completer &&)=delete | |
Completer & | operator= (const Completer &)=delete |
Completer & | operator= (Completer &&)=delete |
const std::string & | getName () const |
virtual std::string | help (std::span< const TclObject > tokens) const =0 |
Print help for this command. | |
void | checkNumArgs (std::span< const TclObject > tokens, unsigned exactly, const char *errMessage) const |
void | checkNumArgs (std::span< const TclObject > tokens, AtLeast atLeast, const char *errMessage) const |
void | checkNumArgs (std::span< const TclObject > tokens, Between between, const char *errMessage) const |
void | checkNumArgs (std::span< const TclObject > tokens, unsigned exactly, Prefix prefix, const char *errMessage) const |
void | checkNumArgs (std::span< const TclObject > tokens, AtLeast atLeast, Prefix prefix, const char *errMessage) const |
void | checkNumArgs (std::span< const TclObject > tokens, Between between, Prefix prefix, const char *errMessage) const |
template<typename ITER > | |
NEVER_INLINE std::vector< std::string_view > | filter (std::string_view str, ITER begin, ITER end, bool caseSensitive) |
Protected Member Functions | |
RecordedCommand (CommandController &commandController, StateChangeDistributor &stateChangeDistributor, Scheduler &scheduler, std::string_view name) | |
~RecordedCommand () | |
Protected Member Functions inherited from openmsx::Command | |
Command (CommandController &controller, std::string_view name) | |
~Command () | |
Protected Member Functions inherited from openmsx::CommandCompleter | |
CommandCompleter (CommandController &controller, std::string_view name) | |
~CommandCompleter () | |
GlobalCommandController & | getGlobalCommandController () const |
CliComm & | getCliComm () const |
Protected Member Functions inherited from openmsx::Completer | |
template<typename String > requires (!std::same_as<Completer, std::remove_cvref_t<String>>) | |
Completer (String &&name_) | |
~Completer ()=default | |
Additional Inherited Members | |
Static Public Member Functions inherited from openmsx::Completer | |
template<typename ITER > | |
static void | completeString (std::vector< std::string > &tokens, ITER begin, ITER end, bool caseSensitive=true) |
template<typename RANGE > | |
static void | completeString (std::vector< std::string > &tokens, RANGE &&possibleValues, bool caseSensitive=true) |
template<typename RANGE > | |
static void | completeFileName (std::vector< std::string > &tokens, const FileContext &context, const RANGE &extra) |
static void | completeFileName (std::vector< std::string > &tokens, const FileContext &context) |
static std::vector< std::string > | formatListInColumns (std::span< const std::string_view > input) |
static void | setOutput (InterpreterOutput *output_) |
Commands that directly influence the MSX state should send and events so that they can be recorded by the event recorder.
This class helps to implement that.
Note: when a recorded command is later replayed, it's important to check whether it's actually a recorded command and not some arbitrary other command that someone might have inserted in a replay file. IOW when you load a replay file from an untrusted source, it should never be able to cause any harm. Blindly executing any Tcl command would be bad.
Definition at line 45 of file RecordedCommand.hh.
|
protected |
Definition at line 18 of file RecordedCommand.cc.
References openmsx::StateChangeDistributor::registerListener().
|
protected |
Definition at line 30 of file RecordedCommand.cc.
References openmsx::StateChangeDistributor::unregisterListener().
|
pure virtual |
This is like the execute() method of the Command class, it only has an extra time parameter.
Implemented in openmsx::CassettePlayerCommand, openmsx::HDCommand, openmsx::CDXCommand, openmsx::LSXCommand, openmsx::ResetCmd, openmsx::RemoveExtCmd, and openmsx::ExtCmd.
|
virtual |
It's possible that in some cases the command doesn't need to be recorded after all (e.g.
a query subcommand). In that case you can override this method. Return false iff the command doesn't need to be recorded.
Reimplemented in openmsx::CassettePlayerCommand, and openmsx::HDCommand.
Definition at line 46 of file RecordedCommand.cc.