diff options
author | Max Horn | 2010-01-29 11:03:54 +0000 |
---|---|---|
committer | Max Horn | 2010-01-29 11:03:54 +0000 |
commit | 4ffec28103972992482dbb552d7f302ea09c1a31 (patch) | |
tree | ccefa339cd087c7298274d1234d7e048def51390 /engines/sci/engine/selector.h | |
parent | 52ef12547feee896c632b842f5aebbdcc9c84bd8 (diff) | |
download | scummvm-rg350-4ffec28103972992482dbb552d7f302ea09c1a31.tar.gz scummvm-rg350-4ffec28103972992482dbb552d7f302ea09c1a31.tar.bz2 scummvm-rg350-4ffec28103972992482dbb552d7f302ea09c1a31.zip |
SCI: Move selector stuff to new header; reorder k_argc & k_argp param of invoke_selector
svn-id: r47665
Diffstat (limited to 'engines/sci/engine/selector.h')
-rw-r--r-- | engines/sci/engine/selector.h | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/engines/sci/engine/selector.h b/engines/sci/engine/selector.h new file mode 100644 index 0000000000..be777c0e72 --- /dev/null +++ b/engines/sci/engine/selector.h @@ -0,0 +1,88 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef SCI_ENGINE_SELECTOR_H +#define SCI_ENGINE_SELECTOR_H + +#include "common/scummsys.h" + +#include "sci/engine/vm_types.h" // for reg_t +#include "sci/engine/vm.h" + +namespace Sci { + + +/******************** Selector functionality ********************/ + +enum SelectorInvocation { + kStopOnInvalidSelector = 0, + kContinueOnInvalidSelector = 1 +}; + +/** + * Retrieves a selector from an object. + * @param segMan the segment mananger + * @param _obj_ the address of the object which the selector should be read from + * @param _slc_ the selector to read + * @return the selector value as a reg_t + * This macro halts on error. 'selector' must be a selector name registered in vm.h's + * SelectorCache and mapped in script.cpp. + */ +#define GET_SEL32(segMan, _obj_, _slc_) read_selector(segMan, _obj_, ((SciEngine *)g_engine)->getKernel()->_selectorCache._slc_) +#define GET_SEL32V(segMan, _obj_, _slc_) (GET_SEL32(segMan, _obj_, _slc_).offset) + +/** + * Writes a selector value to an object. + * @param segMan the segment mananger + * @param _obj_ the address of the object which the selector should be written to + * @param _slc_ the selector to read + * @param _val_ the value to write + * This macro halts on error. 'selector' must be a selector name registered in vm.h's + * SelectorCache and mapped in script.cpp. + */ +#define PUT_SEL32(segMan, _obj_, _slc_, _val_) write_selector(segMan, _obj_, ((SciEngine *)g_engine)->getKernel()->_selectorCache._slc_, _val_) +#define PUT_SEL32V(segMan, _obj_, _slc_, _val_) PUT_SEL32(segMan, _obj_, _slc_, make_reg(0, _val_)) + + +/** + * Kludge for use with invoke_selector(). Used for compatibility with compilers + * that cannot handle vararg macros. + */ +#define INV_SEL(_object_, _selector_, _noinvalid_) \ + s, _object_, s->_kernel->_selectorCache._selector_, _noinvalid_, argc, argv + + +reg_t read_selector(SegManager *segMan, reg_t object, Selector selector_id); +void write_selector(SegManager *segMan, reg_t object, Selector selector_id, reg_t value); +int invoke_selector(EngineState *s, reg_t object, int selector_id, SelectorInvocation noinvalid, + int k_argc, StackPtr k_argp, int argc, ...); +int invoke_selector_argv(EngineState *s, reg_t object, int selector_id, SelectorInvocation noinvalid, + int k_argc, StackPtr k_argp, int argc, const reg_t *argv); + + + +} // End of namespace Sci + +#endif // SCI_ENGINE_KERNEL_H |