aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Horn2009-09-17 00:46:01 +0000
committerMax Horn2009-09-17 00:46:01 +0000
commit280bee663ef57c20b9ae8dad7b202b6a48bf7122 (patch)
tree5014d8722e2c88331626e89a809953aecb77f4e4
parent10f898c90eef6c63995d21c2150f022ae012ea4d (diff)
downloadscummvm-rg350-280bee663ef57c20b9ae8dad7b202b6a48bf7122.tar.gz
scummvm-rg350-280bee663ef57c20b9ae8dad7b202b6a48bf7122.tar.bz2
scummvm-rg350-280bee663ef57c20b9ae8dad7b202b6a48bf7122.zip
SCI: Change SegmentId from int to uint16; consistently use segment 0 to indicate an invalid segment
svn-id: r44131
-rw-r--r--engines/sci/engine/kstring.cpp2
-rw-r--r--engines/sci/engine/memobj.h2
-rw-r--r--engines/sci/engine/seg_manager.cpp14
-rw-r--r--engines/sci/engine/seg_manager.h4
-rw-r--r--engines/sci/engine/vm.cpp6
-rw-r--r--engines/sci/engine/vm_types.h4
6 files changed, 14 insertions, 18 deletions
diff --git a/engines/sci/engine/kstring.cpp b/engines/sci/engine/kstring.cpp
index cbe5dfca7a..d6161ca954 100644
--- a/engines/sci/engine/kstring.cpp
+++ b/engines/sci/engine/kstring.cpp
@@ -148,7 +148,7 @@ reg_t kSetSynonyms(EngineState *s, int, int argc, reg_t *argv) {
script = GET_SEL32V(objpos, number);
seg = s->segMan->getScriptSegment(script);
- if (seg >= 0)
+ if (seg > 0)
_numSynonyms = s->segMan->getScript(seg)->getSynonymsNr();
if (_numSynonyms) {
diff --git a/engines/sci/engine/memobj.h b/engines/sci/engine/memobj.h
index 7889f529f8..e792ac80ae 100644
--- a/engines/sci/engine/memobj.h
+++ b/engines/sci/engine/memobj.h
@@ -269,7 +269,7 @@ public:
Common::Array<Object> _objects;
int _localsOffset;
- int _localsSegment; /**< The local variable segment */
+ SegmentId _localsSegment; /**< The local variable segment */
LocalVariables *_localsBlock;
Common::Array<CodeBlock> _codeBlocks;
diff --git a/engines/sci/engine/seg_manager.cpp b/engines/sci/engine/seg_manager.cpp
index 402a690e62..c503d7bcd0 100644
--- a/engines/sci/engine/seg_manager.cpp
+++ b/engines/sci/engine/seg_manager.cpp
@@ -116,7 +116,7 @@ SegmentObj *SegManager::allocSegment(SegmentType type, SegmentId *segid) {
Script *SegManager::allocateScript(int script_nr, SegmentId *seg_id) {
// Check if the script already has an allocated segment. If it
// does have one, return it.
- *seg_id = _scriptSegMap.getVal(script_nr, -1);
+ *seg_id = _scriptSegMap.getVal(script_nr, 0);
if (*seg_id > 0) {
return (Script *)_heap[*seg_id];
}
@@ -223,7 +223,7 @@ SegmentId SegManager::findSegmentByType(int type) {
for (uint i = 0; i < _heap.size(); i++)
if (_heap[i] && _heap[i]->getType() == type)
return i;
- return -1;
+ return 0;
}
SegmentObj *SegManager::getSegmentObj(SegmentId seg) {
@@ -414,9 +414,9 @@ void Script::heapRelocate(reg_t block) {
}
}
-// return the seg if script_id is valid and in the map, else -1
+// return the seg if script_id is valid and in the map, else 0
SegmentId SegManager::getScriptSegment(int script_id) const {
- return _scriptSegMap.getVal(script_id, -1);
+ return _scriptSegMap.getVal(script_id, 0);
}
SegmentId SegManager::getScriptSegment(int script_nr, ScriptLoadType load) {
@@ -430,10 +430,8 @@ SegmentId SegManager::getScriptSegment(int script_nr, ScriptLoadType load) {
if (segment > 0) {
if ((load & SCRIPT_GET_LOCK) == SCRIPT_GET_LOCK)
getScript(segment)->incrementLockers();
-
- return segment;
- } else
- return -1;
+ }
+ return segment;
}
reg_t SegManager::getClassAddress(int classnr, ScriptLoadType lock, reg_t caller) {
diff --git a/engines/sci/engine/seg_manager.h b/engines/sci/engine/seg_manager.h
index 4b1f0aaf99..e3d6099f1e 100644
--- a/engines/sci/engine/seg_manager.h
+++ b/engines/sci/engine/seg_manager.h
@@ -93,7 +93,7 @@ public:
/**
* Determines the segment occupied by a certain script, if any.
* @param script_nr Number of the script to look up
- * @return The script's segment ID, or -1 on failure
+ * @return The script's segment ID, or 0 on failure
*/
SegmentId getScriptSegment(int script_nr) const;
@@ -102,7 +102,7 @@ public:
* load it, or load & lock it.
* @param[in] script_nr Number of the script to look up
* @param[in] load flag determining whether to load/lock the script
- * @return The script's segment ID, or -1 on failure
+ * @return The script's segment ID, or 0 on failure
*/
SegmentId getScriptSegment(int script_nr, ScriptLoadType load);
diff --git a/engines/sci/engine/vm.cpp b/engines/sci/engine/vm.cpp
index 7d45f2153b..c0381519cc 100644
--- a/engines/sci/engine/vm.cpp
+++ b/engines/sci/engine/vm.cpp
@@ -1509,9 +1509,6 @@ reg_t script_lookup_export(SegManager *segMan, int script_nr, int export_index)
#define INST_LOOKUP_CLASS(id) ((id == 0xffff)? NULL_REG : segMan->getClassAddress(id, SCRIPT_GET_LOCK, reg))
int script_instantiate_common(ResourceManager *resMan, SegManager *segMan, int script_nr, Resource **script, Resource **heap, int *was_new) {
- int seg_id;
- reg_t reg;
-
*was_new = 1;
*script = resMan->findResource(ResourceId(kResourceTypeScript, script_nr), 0);
@@ -1529,7 +1526,7 @@ int script_instantiate_common(ResourceManager *resMan, SegManager *segMan, int s
return 0;
}
- seg_id = segMan->getScriptSegment(script_nr);
+ SegmentId seg_id = segMan->getScriptSegment(script_nr);
Script *scr = segMan->getScriptIfLoaded(seg_id);
if (scr) {
if (!scr->isMarkedAsDeleted()) {
@@ -1548,6 +1545,7 @@ int script_instantiate_common(ResourceManager *resMan, SegManager *segMan, int s
scr->init(script_nr, resMan);
+ reg_t reg;
reg.segment = seg_id;
reg.offset = 0;
diff --git a/engines/sci/engine/vm_types.h b/engines/sci/engine/vm_types.h
index cf7ba2573c..6152501f46 100644
--- a/engines/sci/engine/vm_types.h
+++ b/engines/sci/engine/vm_types.h
@@ -31,10 +31,10 @@
namespace Sci {
// Segment ID type
-typedef int SegmentId;
+typedef uint16 SegmentId;
struct reg_t {
- uint16 segment;
+ SegmentId segment;
uint16 offset;
bool isNull() const {