1 /* ScummVM - Graphic Adventure Engine
2  *
3  * ScummVM is the legal property of its developers, whose names
4  * are too numerous to list here. Please refer to the COPYRIGHT
5  * file distributed with this source distribution.
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11 
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16 
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20  *
21  */
22 
23 #include "illusions/illusions.h"
24 #include "illusions/scriptopcodes.h"
25 #include "illusions/threads/scriptthread.h"
26 
27 namespace Illusions {
28 
29 // OpCall
30 
skip(uint size)31 void OpCall::skip(uint size) {
32 	_code += size;
33 }
34 
readByte()35 byte OpCall::readByte() {
36 	return *_code++;
37 }
38 
readSint16()39 int16 OpCall::readSint16() {
40 	int16 value = READ_LE_UINT16(_code);
41 	_code += 2;
42 	return value;
43 }
44 
readUint32()45 uint32 OpCall::readUint32() {
46 	uint32 value = READ_LE_UINT32(_code);
47 	_code += 4;
48 	return value;
49 }
50 
51 // ScriptOpcodes
52 
ScriptOpcodes(IllusionsEngine * vm)53 ScriptOpcodes::ScriptOpcodes(IllusionsEngine *vm)
54 	: _vm(vm) {
55 	initOpcodes();
56 }
57 
~ScriptOpcodes()58 ScriptOpcodes::~ScriptOpcodes() {
59 	freeOpcodes();
60 }
61 
execOpcode(ScriptThread * scriptThread,OpCall & opCall)62 void ScriptOpcodes::execOpcode(ScriptThread *scriptThread, OpCall &opCall) {
63 	if (!_opcodes[opCall._op])
64 		error("ScriptOpcodes::execOpcode() Unimplemented opcode %d", opCall._op);
65 	debug(2, "execOpcode([%08X] %d) %s", opCall._callerThreadId, opCall._op, _opcodeNames[opCall._op].c_str());
66 	(*_opcodes[opCall._op])(scriptThread, opCall);
67 }
68 
69 } // End of namespace Illusions
70