aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine/seg_manager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sci/engine/seg_manager.cpp')
-rw-r--r--engines/sci/engine/seg_manager.cpp60
1 files changed, 29 insertions, 31 deletions
diff --git a/engines/sci/engine/seg_manager.cpp b/engines/sci/engine/seg_manager.cpp
index 76f85f42fe..f488f38d67 100644
--- a/engines/sci/engine/seg_manager.cpp
+++ b/engines/sci/engine/seg_manager.cpp
@@ -189,7 +189,7 @@ bool SegManager::isHeapObject(reg_t pos) {
Object *obj = getObject(pos);
if (obj == NULL)
return false;
- if (obj->flags & OBJECT_FLAG_FREED)
+ if (obj->_flags & OBJECT_FLAG_FREED)
return false;
Script *scr = getScriptIfLoaded(pos.segment);
return !(scr && scr->_markedAsDeleted);
@@ -324,7 +324,7 @@ int Script::relocateLocal(SegmentId segment, int location) {
}
int Script::relocateObject(Object *obj, SegmentId segment, int location) {
- return relocateBlock(obj->_variables, obj->pos.offset, segment, location);
+ return relocateBlock(obj->_variables, obj->_pos.offset, segment, location);
}
void Script::scriptAddCodeBlock(reg_t location) {
@@ -368,7 +368,7 @@ void Script::scriptRelocate(reg_t block) {
else
printf("- No locals\n");
for (k = 0; k < _objects.size(); k++)
- printf("- obj#%d at %04x w/ %d vars\n", k, _objects[k].pos.offset, _objects[k]._variables.size());
+ printf("- obj#%d at %04x w/ %d vars\n", k, _objects[k]._pos.offset, _objects[k]._variables.size());
// SQ3 script 71 has broken relocation entries.
printf("Trying to continue anyway...\n");
}
@@ -405,7 +405,7 @@ void Script::heapRelocate(reg_t block) {
else
printf("- No locals\n");
for (k = 0; k < _objects.size(); k++)
- printf("- obj#%d at %04x w/ %d vars\n", k, _objects[k].pos.offset, _objects[k]._variables.size());
+ printf("- obj#%d at %04x w/ %d vars\n", k, _objects[k]._pos.offset, _objects[k]._variables.size());
error("Breakpoint in %s, line %d", __FILE__, __LINE__);
}
}
@@ -459,44 +459,44 @@ reg_t SegManager::getClassAddress(int classnr, ScriptLoadType lock, reg_t caller
Object *Script::scriptObjInit0(reg_t obj_pos) {
Object *obj;
- uint base = obj_pos.offset - SCRIPT_OBJECT_MAGIC_OFFSET;
- VERIFY(base < _bufSize, "Attempt to initialize object beyond end of script\n");
+ obj_pos.offset -= SCRIPT_OBJECT_MAGIC_OFFSET;
+ VERIFY(obj_pos.offset < _bufSize, "Attempt to initialize object beyond end of script\n");
- obj = allocateObject(base);
+ obj = allocateObject(obj_pos.offset);
- VERIFY(base + SCRIPT_FUNCTAREAPTR_OFFSET < _bufSize, "Function area pointer stored beyond end of script\n");
+ VERIFY(obj_pos.offset + SCRIPT_FUNCTAREAPTR_OFFSET < (int)_bufSize, "Function area pointer stored beyond end of script\n");
{
- byte *data = (byte *)(_buf + base);
- int funct_area = READ_LE_UINT16(data + SCRIPT_FUNCTAREAPTR_OFFSET);
+ byte *data = (byte *)(_buf + obj_pos.offset);
+ uint16 *funct_area = (uint16 *)(data + READ_LE_UINT16(data + SCRIPT_FUNCTAREAPTR_OFFSET));
int variables_nr;
int functions_nr;
int is_class;
- int i;
- obj->flags = 0;
- obj->pos = make_reg(obj_pos.segment, base);
+ obj->_flags = 0;
+ obj->_pos = obj_pos;
- VERIFY(base + funct_area < _bufSize, "Function area pointer references beyond end of script");
+ VERIFY((byte *)funct_area < _buf + _bufSize, "Function area pointer references beyond end of script");
variables_nr = READ_LE_UINT16(data + SCRIPT_SELECTORCTR_OFFSET);
- functions_nr = READ_LE_UINT16(data + funct_area - 2);
+ functions_nr = READ_LE_UINT16(funct_area - 1);
is_class = READ_LE_UINT16(data + SCRIPT_INFO_OFFSET) & SCRIPT_INFO_CLASS;
- VERIFY(base + funct_area + functions_nr * 2
+ obj->base_method = funct_area;
+ obj->base_vars = NULL;
+
+ VERIFY((byte *)funct_area + functions_nr * 2
// add again for classes, since those also store selectors
- + (is_class ? functions_nr * 2 : 0) < _bufSize, "Function area extends beyond end of script");
+ + (is_class ? functions_nr * 2 : 0) < _buf + _bufSize, "Function area extends beyond end of script");
obj->_variables.resize(variables_nr);
obj->methods_nr = functions_nr;
obj->base = _buf;
obj->base_obj = data;
- obj->base_method = (uint16 *)(data + funct_area);
- obj->base_vars = NULL;
- for (i = 0; i < variables_nr; i++)
+ for (int i = 0; i < variables_nr; i++)
obj->_variables[i] = make_reg(0, READ_LE_UINT16(data + (i * 2)));
}
@@ -505,27 +505,25 @@ Object *Script::scriptObjInit0(reg_t obj_pos) {
Object *Script::scriptObjInit11(reg_t obj_pos) {
Object *obj;
- uint base = obj_pos.offset;
- VERIFY(base < _bufSize, "Attempt to initialize object beyond end of script\n");
+ VERIFY(obj_pos.offset < _bufSize, "Attempt to initialize object beyond end of script\n");
- obj = allocateObject(base);
+ obj = allocateObject(obj_pos.offset);
- VERIFY(base + SCRIPT_FUNCTAREAPTR_OFFSET < _bufSize, "Function area pointer stored beyond end of script\n");
+ VERIFY(obj_pos.offset + SCRIPT_FUNCTAREAPTR_OFFSET < (int)_bufSize, "Function area pointer stored beyond end of script\n");
{
- byte *data = (byte *)(_buf + base);
+ byte *data = (byte *)(_buf + obj_pos.offset);
uint16 *funct_area = (uint16 *)(_buf + READ_LE_UINT16(data + 6));
uint16 *prop_area = (uint16 *)(_buf + READ_LE_UINT16(data + 4));
int variables_nr;
int functions_nr;
int is_class;
- int i;
- obj->flags = 0;
- obj->pos = obj_pos;
+ obj->_flags = 0;
+ obj->_pos = obj_pos;
- VERIFY((byte *) funct_area < _buf + _bufSize, "Function area pointer references beyond end of script");
+ VERIFY((byte *)funct_area < _buf + _bufSize, "Function area pointer references beyond end of script");
variables_nr = READ_LE_UINT16(data + 2);
functions_nr = READ_LE_UINT16(funct_area);
@@ -534,7 +532,7 @@ Object *Script::scriptObjInit11(reg_t obj_pos) {
obj->base_method = funct_area;
obj->base_vars = prop_area;
- VERIFY(((byte *) funct_area + functions_nr) < _buf + _bufSize, "Function area extends beyond end of script");
+ VERIFY(((byte *)funct_area + functions_nr) < _buf + _bufSize, "Function area extends beyond end of script");
obj->variable_names_nr = variables_nr;
obj->_variables.resize(variables_nr);
@@ -543,7 +541,7 @@ Object *Script::scriptObjInit11(reg_t obj_pos) {
obj->base = _buf;
obj->base_obj = data;
- for (i = 0; i < variables_nr; i++)
+ for (int i = 0; i < variables_nr; i++)
obj->_variables[i] = make_reg(0, READ_LE_UINT16(data + (i * 2)));
}