aboutsummaryrefslogtreecommitdiff
path: root/engines/director/lingo/lingo-bytecode.cpp
diff options
context:
space:
mode:
authorScott Percival2019-10-31 23:33:15 +0800
committerEugene Sandulenko2019-11-17 22:31:54 +0100
commit82af1428405de8da6236dca7e352a7bf299174bb (patch)
tree1728916333aa022721937e0b13e354b449119169 /engines/director/lingo/lingo-bytecode.cpp
parent02a43f98af197b5c4cd6bd1fdab793540a2a1666 (diff)
downloadscummvm-rg350-82af1428405de8da6236dca7e352a7bf299174bb.tar.gz
scummvm-rg350-82af1428405de8da6236dca7e352a7bf299174bb.tar.bz2
scummvm-rg350-82af1428405de8da6236dca7e352a7bf299174bb.zip
DIRECTOR: Fix code formatting.
Diffstat (limited to 'engines/director/lingo/lingo-bytecode.cpp')
-rw-r--r--engines/director/lingo/lingo-bytecode.cpp442
1 files changed, 221 insertions, 221 deletions
diff --git a/engines/director/lingo/lingo-bytecode.cpp b/engines/director/lingo/lingo-bytecode.cpp
index 87045e2738..3b800f8fd9 100644
--- a/engines/director/lingo/lingo-bytecode.cpp
+++ b/engines/director/lingo/lingo-bytecode.cpp
@@ -25,46 +25,46 @@
namespace Director {
static struct LingoV4Bytecode {
- const uint8 opcode;
- const inst func;
- const char *proto;
+ const uint8 opcode;
+ const inst func;
+ const char *proto;
} lingoV4[] = {
- { 0x03, Lingo::c_voidpush, "" },
- { 0x04, Lingo::c_mul, "" },
- { 0x05, Lingo::c_add, "" },
- { 0x06, Lingo::c_sub, "" },
- { 0x07, Lingo::c_div, "" },
- { 0x08, Lingo::c_mod, "" },
- { 0x09, Lingo::c_negate, "" },
- { 0x0a, Lingo::c_ampersand, "" },
- { 0x0b, Lingo::c_concat, "" },
- { 0x0c, Lingo::c_lt, "" },
- { 0x0d, Lingo::c_le, "" },
- { 0x0e, Lingo::c_neq, "" },
- { 0x0f, Lingo::c_eq, "" },
- { 0x10, Lingo::c_gt, "" },
- { 0x11, Lingo::c_ge, "" },
- { 0x12, Lingo::c_and, "" },
- { 0x13, Lingo::c_or, "" },
- { 0x14, Lingo::c_not, "" },
- { 0x15, Lingo::c_contains, "" },
- { 0x16, Lingo::c_starts, "" },
- { 0x17, Lingo::c_of, "" },
- { 0x18, Lingo::c_hilite, "" },
- { 0x19, Lingo::c_intersects, "" },
- { 0x1a, Lingo::c_within, "" },
- { 0x1b, Lingo::c_field, "" },
- { 0x1c, Lingo::c_tell, "" },
- { 0x1d, Lingo::c_telldone, "" },
-
- { 0x41, Lingo::c_intpush, "b" },
- { 0, 0, 0 }
+ { 0x03, Lingo::c_voidpush, "" },
+ { 0x04, Lingo::c_mul, "" },
+ { 0x05, Lingo::c_add, "" },
+ { 0x06, Lingo::c_sub, "" },
+ { 0x07, Lingo::c_div, "" },
+ { 0x08, Lingo::c_mod, "" },
+ { 0x09, Lingo::c_negate, "" },
+ { 0x0a, Lingo::c_ampersand, "" },
+ { 0x0b, Lingo::c_concat, "" },
+ { 0x0c, Lingo::c_lt, "" },
+ { 0x0d, Lingo::c_le, "" },
+ { 0x0e, Lingo::c_neq, "" },
+ { 0x0f, Lingo::c_eq, "" },
+ { 0x10, Lingo::c_gt, "" },
+ { 0x11, Lingo::c_ge, "" },
+ { 0x12, Lingo::c_and, "" },
+ { 0x13, Lingo::c_or, "" },
+ { 0x14, Lingo::c_not, "" },
+ { 0x15, Lingo::c_contains, "" },
+ { 0x16, Lingo::c_starts, "" },
+ { 0x17, Lingo::c_of, "" },
+ { 0x18, Lingo::c_hilite, "" },
+ { 0x19, Lingo::c_intersects, "" },
+ { 0x1a, Lingo::c_within, "" },
+ { 0x1b, Lingo::c_field, "" },
+ { 0x1c, Lingo::c_tell, "" },
+ { 0x1d, Lingo::c_telldone, "" },
+
+ { 0x41, Lingo::c_intpush, "b" },
+ { 0, 0, 0 }
};
void Lingo::initBytecode() {
- for (LingoV4Bytecode *op = lingoV4; op->opcode; op++) {
- _lingoV4[op->opcode] = new Opcode( op->func, op->proto );
- }
+ for (LingoV4Bytecode *op = lingoV4; op->opcode; op++) {
+ _lingoV4[op->opcode] = new Opcode( op->func, op->proto );
+ }
}
@@ -73,208 +73,208 @@ void Lingo::addCodeV4(Common::SeekableSubReadStreamEndian &stream, ScriptType ty
if (_scriptContexts[type].contains(id)) {
for (size_t j = 0; j < _scriptContexts[type][id]->functions.size(); j++) {
- delete _scriptContexts[type][id]->functions[j];
- }
- delete _scriptContexts[type][id];
+ delete _scriptContexts[type][id]->functions[j];
+ }
+ delete _scriptContexts[type][id];
}
- _currentScriptContext = new ScriptContext;
- _currentScriptType = type;
- _currentEntityId = id;
- _scriptContexts[type][id] = _currentScriptContext;
+ _currentScriptContext = new ScriptContext;
+ _currentScriptType = type;
+ _currentEntityId = id;
+ _scriptContexts[type][id] = _currentScriptContext;
- // read the Lscr header!
- // unk1
- for (uint32 i = 0; i < 0x10; i++) {
- stream.readByte();
- }
- uint16 code_store_offset = stream.readUint16();
- // unk2
- for (uint32 i = 0; i < 0x2e; i++) {
- stream.readByte();
- }
- uint16 functions_offset = stream.readUint16();
- // unk3
- for (uint32 i = 0; i < 0x6; i++) {
- stream.readByte();
- }
- uint16 functions_count = stream.readUint16();
- stream.readUint16();
- stream.readUint16();
- uint16 consts_count = stream.readUint16();
- stream.readUint16();
- uint16 consts_offset = stream.readUint16();
- stream.readUint16();
- stream.readUint16();
- stream.readUint16();
- uint16 consts_base = stream.readUint16();
+ // read the Lscr header!
+ // unk1
+ for (uint32 i = 0; i < 0x10; i++) {
+ stream.readByte();
+ }
+ uint16 code_store_offset = stream.readUint16();
+ // unk2
+ for (uint32 i = 0; i < 0x2e; i++) {
+ stream.readByte();
+ }
+ uint16 functions_offset = stream.readUint16();
+ // unk3
+ for (uint32 i = 0; i < 0x6; i++) {
+ stream.readByte();
+ }
+ uint16 functions_count = stream.readUint16();
+ stream.readUint16();
+ stream.readUint16();
+ uint16 consts_count = stream.readUint16();
+ stream.readUint16();
+ uint16 consts_offset = stream.readUint16();
+ stream.readUint16();
+ stream.readUint16();
+ stream.readUint16();
+ uint16 consts_base = stream.readUint16();
- // preload all the constants!
- // these are stored as a reference table of 6 byte entries, followed by a storage area.
+ // preload all the constants!
+ // these are stored as a reference table of 6 byte entries, followed by a storage area.
- // copy the storage area first.
- uint32 consts_store_offset = consts_offset+6*consts_count;
- uint32 consts_store_size = stream.size()-consts_store_offset;
- stream.seek(consts_store_offset);
- byte *const_store = (byte *)malloc(consts_store_size);
- stream.read(const_store, consts_store_size);
+ // copy the storage area first.
+ uint32 consts_store_offset = consts_offset+6*consts_count;
+ uint32 consts_store_size = stream.size()-consts_store_offset;
+ stream.seek(consts_store_offset);
+ byte *const_store = (byte *)malloc(consts_store_size);
+ stream.read(const_store, consts_store_size);
- Common::Array<Datum> const_data;
+ Common::Array<Datum> const_data;
- // read each entry in the reference table.
- stream.seek(consts_offset);
- for (uint16 i=0; i<consts_count; i++) {
- Datum constant;
- uint16 const_type = stream.readUint16();
- uint32 value = stream.readUint32();
- switch (const_type) {
- case 1: { // String type
- constant.type = STRING;
- constant.u.s = new Common::String();
- uint32 pointer = value;
- while (pointer < consts_store_size) {
- if (const_store[pointer] == '\r') {
- constant.u.s += '\n';
- } else if (const_store[pointer] == '\0') {
- break;
- } else {
- constant.u.s += const_store[pointer];
- }
- pointer += 1;
- }
- if (pointer >= consts_store_size) {
- warning("Constant string has no null terminator");
- break;
- }
- }
- break;
- case 4: // Integer type
- constant.type = INT;
- constant.u.i = (int)value;
- break;
- case 9: { // Float type
- constant.type = FLOAT;
- if (value < consts_store_offset) {
- warning("Constant float start offset is out of bounds");
- break;
- } else if (value+4 > consts_store_size) {
- warning("Constant float end offset is out of bounds");
- break;
- }
- constant.u.f = *(float *)(const_store+value);
- }
- break;
- default:
- warning("Unknown constant type %d", type);
- break;
- }
+ // read each entry in the reference table.
+ stream.seek(consts_offset);
+ for (uint16 i=0; i<consts_count; i++) {
+ Datum constant;
+ uint16 const_type = stream.readUint16();
+ uint32 value = stream.readUint32();
+ switch (const_type) {
+ case 1: { // String type
+ constant.type = STRING;
+ constant.u.s = new Common::String();
+ uint32 pointer = value;
+ while (pointer < consts_store_size) {
+ if (const_store[pointer] == '\r') {
+ constant.u.s += '\n';
+ } else if (const_store[pointer] == '\0') {
+ break;
+ } else {
+ constant.u.s += const_store[pointer];
+ }
+ pointer += 1;
+ }
+ if (pointer >= consts_store_size) {
+ warning("Constant string has no null terminator");
+ break;
+ }
+ }
+ break;
+ case 4: // Integer type
+ constant.type = INT;
+ constant.u.i = (int)value;
+ break;
+ case 9: { // Float type
+ constant.type = FLOAT;
+ if (value < consts_store_offset) {
+ warning("Constant float start offset is out of bounds");
+ break;
+ } else if (value+4 > consts_store_size) {
+ warning("Constant float end offset is out of bounds");
+ break;
+ }
+ constant.u.f = *(float *)(const_store+value);
+ }
+ break;
+ default:
+ warning("Unknown constant type %d", type);
+ break;
+ }
- const_data.push_back(constant);
- }
- free(const_store);
+ const_data.push_back(constant);
+ }
+ free(const_store);
- // parse each function!
- // these are stored as a code storage area, followed by a reference table of 42 byte entries.
+ // parse each function!
+ // these are stored as a code storage area, followed by a reference table of 42 byte entries.
- // copy the storage area first.
- uint32 code_store_size = functions_offset - code_store_offset;
- stream.seek(code_store_offset);
- byte *code_store = (byte *)malloc(code_store_size);
- stream.read(code_store, code_store_size);
+ // copy the storage area first.
+ uint32 code_store_size = functions_offset - code_store_offset;
+ stream.seek(code_store_offset);
+ byte *code_store = (byte *)malloc(code_store_size);
+ stream.read(code_store, code_store_size);
- // read each entry in the function table.
- stream.seek(functions_offset);
- for (uint16 i=0; i<functions_count; i++) {
- _currentScriptFunction = i;
- _currentScriptContext->functions.push_back(new ScriptData);
- _currentScript = _currentScriptContext->functions[_currentScriptFunction];
+ // read each entry in the function table.
+ stream.seek(functions_offset);
+ for (uint16 i=0; i<functions_count; i++) {
+ _currentScriptFunction = i;
+ _currentScriptContext->functions.push_back(new ScriptData);
+ _currentScript = _currentScriptContext->functions[_currentScriptFunction];
- uint16 name_index = stream.readUint16();
- stream.readUint16();
- uint32 length = stream.readUint32();
- uint32 start_offset = stream.readUint32();
- uint16 arg_count = stream.readUint16();
- uint32 arg_offset = stream.readUint32();
- uint16 var_count = stream.readUint16();
- uint32 var_names_offset = stream.readUint32();
- stream.readUint16();
- stream.readUint16();
- stream.readUint16();
- stream.readUint16();
- stream.readUint16();
- stream.readUint16();
- stream.readUint16();
- stream.readUint16();
- stream.readUint16();
+ uint16 name_index = stream.readUint16();
+ stream.readUint16();
+ uint32 length = stream.readUint32();
+ uint32 start_offset = stream.readUint32();
+ uint16 arg_count = stream.readUint16();
+ uint32 arg_offset = stream.readUint32();
+ uint16 var_count = stream.readUint16();
+ uint32 var_names_offset = stream.readUint32();
+ stream.readUint16();
+ stream.readUint16();
+ stream.readUint16();
+ stream.readUint16();
+ stream.readUint16();
+ stream.readUint16();
+ stream.readUint16();
+ stream.readUint16();
+ stream.readUint16();
- if (start_offset < code_store_offset) {
- warning("Function %d start offset is out of bounds!", i);
- continue;
- } else if (start_offset + length >= code_store_offset + code_store_size) {
- warning("Function %d end offset is out of bounds", i);
- continue;
- }
+ if (start_offset < code_store_offset) {
+ warning("Function %d start offset is out of bounds!", i);
+ continue;
+ } else if (start_offset + length >= code_store_offset + code_store_size) {
+ warning("Function %d end offset is out of bounds", i);
+ continue;
+ }
- uint16 pointer = start_offset-code_store_offset;
- Common::Array<uint32> offset_list;
- while (pointer < start_offset+length-code_store_offset) {
- uint8 opcode = code_store[pointer];
+ uint16 pointer = start_offset-code_store_offset;
+ Common::Array<uint32> offset_list;
+ while (pointer < start_offset+length-code_store_offset) {
+ uint8 opcode = code_store[pointer];
- pointer += 1;
- if (_lingoV4.contains(opcode)) {
- offset_list.push_back(_currentScript->size());
- g_lingo->code1(_lingoV4[opcode]->func);
- size_t argc = strlen(_lingoV4[opcode]->proto);
- for (uint c=0; c<argc; c++) {
- switch (_lingoV4[opcode]->proto[c]) {
- case 'b':
- offset_list.push_back(_currentScript->size());
- g_lingo->codeInt((int8)code_store[pointer]);
- pointer += 1;
- break;
- case 'w':
- offset_list.push_back(_currentScript->size());
- offset_list.push_back(_currentScript->size());
- g_lingo->codeInt((int16)READ_UINT16(&code_store[pointer]));
- pointer += 2;
- break;
- default:
- break;
- }
- }
+ pointer += 1;
+ if (_lingoV4.contains(opcode)) {
+ offset_list.push_back(_currentScript->size());
+ g_lingo->code1(_lingoV4[opcode]->func);
+ size_t argc = strlen(_lingoV4[opcode]->proto);
+ for (uint c=0; c<argc; c++) {
+ switch (_lingoV4[opcode]->proto[c]) {
+ case 'b':
+ offset_list.push_back(_currentScript->size());
+ g_lingo->codeInt((int8)code_store[pointer]);
+ pointer += 1;
+ break;
+ case 'w':
+ offset_list.push_back(_currentScript->size());
+ offset_list.push_back(_currentScript->size());
+ g_lingo->codeInt((int16)READ_UINT16(&code_store[pointer]));
+ pointer += 2;
+ break;
+ default:
+ break;
+ }
+ }
- } else {
- // exit condition
- if (opcode == 0x01) {
- offset_list.push_back(_currentScript->size());
- g_lingo->code1(STOP);
- // unimplemented instruction
- } else if (opcode < 0x40) { // 1 byte instruction
- offset_list.push_back(_currentScript->size());
- g_lingo->code1(Lingo::c_unk);
- g_lingo->codeInt(opcode);
- } else if (opcode < 0x80) { // 2 byte instruction
- offset_list.push_back(_currentScript->size());
- g_lingo->code1(Lingo::c_unk1);
- g_lingo->codeInt(opcode);
- offset_list.push_back(_currentScript->size());
- g_lingo->codeInt((uint)code_store[pointer]);
- pointer += 1;
- } else { // 3 byte instruction
- offset_list.push_back(_currentScript->size());
- g_lingo->code1(Lingo::c_unk2);
- g_lingo->codeInt(opcode);
- offset_list.push_back(_currentScript->size());
- g_lingo->codeInt((uint)code_store[pointer]);
- offset_list.push_back(_currentScript->size());
- g_lingo->codeInt((uint)code_store[pointer+1]);
- pointer += 2;
- }
- }
- }
+ } else {
+ // exit condition
+ if (opcode == 0x01) {
+ offset_list.push_back(_currentScript->size());
+ g_lingo->code1(STOP);
+ // unimplemented instruction
+ } else if (opcode < 0x40) { // 1 byte instruction
+ offset_list.push_back(_currentScript->size());
+ g_lingo->code1(Lingo::c_unk);
+ g_lingo->codeInt(opcode);
+ } else if (opcode < 0x80) { // 2 byte instruction
+ offset_list.push_back(_currentScript->size());
+ g_lingo->code1(Lingo::c_unk1);
+ g_lingo->codeInt(opcode);
+ offset_list.push_back(_currentScript->size());
+ g_lingo->codeInt((uint)code_store[pointer]);
+ pointer += 1;
+ } else { // 3 byte instruction
+ offset_list.push_back(_currentScript->size());
+ g_lingo->code1(Lingo::c_unk2);
+ g_lingo->codeInt(opcode);
+ offset_list.push_back(_currentScript->size());
+ g_lingo->codeInt((uint)code_store[pointer]);
+ offset_list.push_back(_currentScript->size());
+ g_lingo->codeInt((uint)code_store[pointer+1]);
+ pointer += 2;
+ }
+ }
+ }
- }
- free(code_store);
+ }
+ free(code_store);
}
}