[Scummvm-git-logs] scummvm master -> 5188993440ce71ea346d5e56c31c67bbba246a2a

scemino noreply at scummvm.org
Fri Apr 5 21:07:11 UTC 2024


This automated email contains information about 16 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
ddc7b27c1e TWP: Fix unreachable code detected in savegame. PVS-Studio V779
410b41d3f1 TWP: Fix consider inspecting the 'sqget' function. The return value is not always used. PVS-Studio V1071
19f7c579df TWP: Remove unused squirrel files
ca035348bf TWP: Fix out-of-bounds access in squirrel.
cd69641753 TWP: Fix uninitialized pointer field in squirrel.
ae007b1cc1 TWP: Fix uninitialized scalar field in squirrel.
77831edb7f TWP: Fix uninitialized pointer field in squirrel.
e6c90819fa TWP: Fix uninitialized pointer field in squirrel.
4e10c9c7e4 TWP: Fix uninitialized pointer field in squirrel.
dd9bc4b51c TWP: Fix uninitialized pointer field in squirrel.
a0cb61f022 TWP: Fix uninitialized pointer field in squirrel.
ad29f164d5 TWP: Fix structurally dead code field in squirrel.
f0046daa22 TWP: Fix structurally dead code field in squirrel.
4b9aad2271 TWP: Fix improper use of negative value in squirrel.
1054d03138 TWP: Fix structurally dead code field in squirrel.
5188993440 TWP: Fix invalid type in argument to printf format specifier in squirrel.


Commit: ddc7b27c1e9984de2d8ee845dac677bbe9381036
    https://github.com/scummvm/scummvm/commit/ddc7b27c1e9984de2d8ee845dac677bbe9381036
Author: scemino (scemino74 at gmail.com)
Date: 2024-04-05T20:12:33+02:00

Commit Message:
TWP: Fix unreachable code detected in savegame. PVS-Studio V779

Changed paths:
    engines/twp/savegame.cpp


diff --git a/engines/twp/savegame.cpp b/engines/twp/savegame.cpp
index 26eaf40c849..fb4a7284a84 100644
--- a/engines/twp/savegame.cpp
+++ b/engines/twp/savegame.cpp
@@ -408,8 +408,8 @@ bool SaveGameManager::loadGame(Common::SeekableReadStream &stream) {
 	const Common::JSONObject &json = jSavegame->asObject();
 	long long int version = json["version"]->asIntegerNumber();
 	if (version != 2) {
-		error("Cannot load savegame version %lld", version);
 		delete jSavegame;
+		error("Cannot load savegame version %lld", version);
 		return false;
 	}
 	uint32 gameTime = (uint32)json["gameTime"]->asNumber();


Commit: 410b41d3f1e0b2744eb2f31ceafde2dc030bc858
    https://github.com/scummvm/scummvm/commit/410b41d3f1e0b2744eb2f31ceafde2dc030bc858
Author: scemino (scemino74 at gmail.com)
Date: 2024-04-05T21:54:53+02:00

Commit Message:
TWP: Fix consider inspecting the 'sqget' function. The return value is not always used. PVS-Studio V1071

Changed paths:
    engines/twp/actorlib.cpp
    engines/twp/enginedialogtarget.cpp
    engines/twp/genlib.cpp
    engines/twp/motor.cpp
    engines/twp/object.cpp
    engines/twp/object.h
    engines/twp/objlib.cpp
    engines/twp/roomlib.cpp
    engines/twp/savegame.cpp
    engines/twp/savegame.h
    engines/twp/squtil.cpp
    engines/twp/squtil.h
    engines/twp/twp.cpp


diff --git a/engines/twp/actorlib.cpp b/engines/twp/actorlib.cpp
index ca80ea3387b..8aba70591bd 100644
--- a/engines/twp/actorlib.cpp
+++ b/engines/twp/actorlib.cpp
@@ -66,10 +66,14 @@ static SQInteger actorAnimationNames(HSQUIRRELVM v) {
 	Common::String stand;
 	Common::String walk;
 	Common::String reach;
-	sqgetf(table, "head", head);
-	sqgetf(table, "stand", stand);
-	sqgetf(table, "walk", walk);
-	sqgetf(table, "reach", reach);
+	if (sqrawexists(table, "head") && SQ_FAILED(sqgetf(table, "head", head)))
+		return sq_throwerror(v, "failed to get head");
+	if (sqrawexists(table, "stand") && SQ_FAILED(sqgetf(table, "stand", stand)))
+		return sq_throwerror(v, "failed to get stand");
+	if (sqrawexists(table, "walk") && SQ_FAILED(sqgetf(table, "walk", walk)))
+		return sq_throwerror(v, "failed to get walk");
+	if (sqrawexists(table, "reach") && SQ_FAILED(sqgetf(table, "reach", reach)))
+		return sq_throwerror(v, "failed to get reach");
 	actor->setAnimationNames(head, stand, walk, reach);
 	return 0;
 }
@@ -427,7 +431,8 @@ static SQInteger actorSlotSelectable(HSQUIRRELVM v) {
 			if (!actor)
 				return sq_throwerror(v, "failed to get actor");
 			Common::String key;
-			sqgetf(actor->_table, "_key", key);
+			if (SQ_FAILED(sqgetf(actor->_table, "_key", key)))
+				return sq_throwerror(v, "failed to get actor key");
 			debugC(kDebugActScript, "actorSlotSelectable(%s, %s)", key.c_str(), selectable ? "yes" : "no");
 			ActorSlot *slot = g_twp->_hud->actorSlot(actor);
 			if (!slot)
@@ -467,11 +472,16 @@ static SQInteger actorLockFacing(HSQUIRRELVM v) {
 		SQInteger right = static_cast<SQInteger>(Facing::FACE_RIGHT);
 		SQInteger reset = 0;
 		sq_getstackobj(v, 3, &obj);
-		sqgetf(v, obj, "back", back);
-		sqgetf(v, obj, "front", front);
-		sqgetf(v, obj, "left", left);
-		sqgetf(v, obj, "right", right);
-		sqgetf(v, obj, "reset", reset);
+		if (sqrawexists(obj, "back") && SQ_FAILED(sqgetf(v, obj, "back", back)))
+			return sq_throwerror(v, "failed to get verb back");
+		if (sqrawexists(obj, "front") && SQ_FAILED(sqgetf(v, obj, "front", front)))
+			return sq_throwerror(v, "failed to get verb front");
+		if (sqrawexists(obj, "left") && SQ_FAILED(sqgetf(v, obj, "left", left)))
+			return sq_throwerror(v, "failed to get verb left");
+		if (sqrawexists(obj, "right") && SQ_FAILED(sqgetf(v, obj, "right", right)))
+			return sq_throwerror(v, "failed to get verb right");
+		if (sqrawexists(obj, "reset") && SQ_FAILED(sqgetf(v, obj, "reset", reset)))
+			return sq_throwerror(v, "failed to get verb reset");
 		if (reset != 0)
 			actor->resetLockFacing();
 		else
@@ -800,7 +810,8 @@ static SQInteger createActor(HSQUIRRELVM v) {
 	g_twp->_resManager->_allObjects[id] = actor;
 
 	Common::String key;
-	sqgetf(actor->_table, "_key", key);
+	if (SQ_FAILED(sqgetf(actor->_table, "_key", key)))
+		return sq_throwerror(v, "failed to get actor key");
 	actor->_key = key;
 
 	debugC(kDebugActScript, "Create actor %s %d", key.c_str(), actor->getId());
@@ -1039,23 +1050,34 @@ static SQInteger verbUIColors(HSQUIRRELVM v) {
 		verbHighlightTint = 0,
 		inventoryFrame = 0,
 		inventoryBackground = 0;
-	sqgetf(table, "sentence", sentence);
-	sqgetf(table, "verbNormal", verbNormal);
-	sqgetf(table, "verbNormalTint", verbNormalTint);
-	sqgetf(table, "verbHighlight", verbHighlight);
-	sqgetf(table, "verbHighlightTint", verbHighlightTint);
-	sqgetf(table, "inventoryFrame", inventoryFrame);
-	sqgetf(table, "inventoryBackground", inventoryBackground);
+	if (sqrawexists(table, "sentence") && SQ_FAILED(sqgetf(table, "sentence", sentence)))
+		return sq_throwerror(v, "failed to get sentence");
+	if (sqrawexists(table, "verbNormal") && SQ_FAILED(sqgetf(table, "verbNormal", verbNormal)))
+		return sq_throwerror(v, "failed to get verbNormal");
+	if (sqrawexists(table, "verbNormalTint") && SQ_FAILED(sqgetf(table, "verbNormalTint", verbNormalTint)))
+		return sq_throwerror(v, "failed to get verbNormalTint");
+	if (sqrawexists(table, "verbHighlight") && SQ_FAILED(sqgetf(table, "verbHighlight", verbHighlight)))
+		return sq_throwerror(v, "failed to get verbHighlight");
+	if (sqrawexists(table, "verbHighlightTint") && SQ_FAILED(sqgetf(table, "verbHighlightTint", verbHighlightTint)))
+		return sq_throwerror(v, "failed to get verbHighlightTint");
+	if (sqrawexists(table, "inventoryFrame") && SQ_FAILED(sqgetf(table, "inventoryFrame", inventoryFrame)))
+		return sq_throwerror(v, "failed to get inventoryFrame");
+	if (sqrawexists(table, "inventoryBackground") && SQ_FAILED(sqgetf(table, "inventoryBackground", inventoryBackground)))
+		return sq_throwerror(v, "failed to get inventoryBackground");
 
 	// get optional colors
 	SQInteger retroNormal = verbNormal;
 	SQInteger retroHighlight = verbNormalTint;
 	SQInteger dialogNormal = verbNormal;
 	SQInteger dialogHighlight = verbHighlight;
-	sqgetf(table, "retroNormal", retroNormal);
-	sqgetf(table, "retroHighlight", retroHighlight);
-	sqgetf(table, "dialogNormal", dialogNormal);
-	sqgetf(table, "dialogHighlight", dialogHighlight);
+	if (sqrawexists(table, "retroNormal") && SQ_FAILED(sqgetf(table, "retroNormal", retroNormal)))
+		return sq_throwerror(v, "failed to get retroNormal");
+	if (sqrawexists(table, "retroHighlight") && SQ_FAILED(sqgetf(table, "retroHighlight", retroHighlight)))
+		return sq_throwerror(v, "failed to get retroHighlight");
+	if (sqrawexists(table, "dialogNormal") && SQ_FAILED(sqgetf(table, "dialogNormal", dialogNormal)))
+		return sq_throwerror(v, "failed to get dialogNormal");
+	if (sqrawexists(table, "dialogHighlight") && SQ_FAILED(sqgetf(table, "dialogHighlight", dialogHighlight)))
+		return sq_throwerror(v, "failed to get dialogHighlight");
 
 	g_twp->_hud->_actorSlots[actorSlot - 1].verbUiColors =
 		VerbUiColors(
diff --git a/engines/twp/enginedialogtarget.cpp b/engines/twp/enginedialogtarget.cpp
index 1258b9635d4..804594daaf7 100644
--- a/engines/twp/enginedialogtarget.cpp
+++ b/engines/twp/enginedialogtarget.cpp
@@ -58,7 +58,7 @@ private:
 static Common::SharedPtr<Object> actor(const Common::String &name) {
 	HSQOBJECT obj;
 	sq_resetobject(&obj);
-	sqgetf(name, obj);
+	(void)sqgetf(name, obj);
 	return sqobj(obj);
 }
 
diff --git a/engines/twp/genlib.cpp b/engines/twp/genlib.cpp
index df5215b20bb..7eda4049120 100644
--- a/engines/twp/genlib.cpp
+++ b/engines/twp/genlib.cpp
@@ -698,16 +698,18 @@ static SQInteger setVerb(HSQUIRRELVM v) {
 	Common::String fun;
 	Common::String key;
 	SQInteger flags = 0;
-	sqgetf(table, "verb", id);
-	sqgetf(table, "text", text);
-	if (sqrawexists(table, "image"))
-		sqgetf(table, "image", image);
-	if (sqrawexists(table, "func"))
-		sqgetf(table, "func", fun);
-	if (sqrawexists(table, "key"))
-		sqgetf(table, "key", key);
-	if (sqrawexists(table, "flags"))
-		sqgetf(table, "flags", flags);
+	if (SQ_FAILED(sqgetf(table, "verb", id)))
+		return sq_throwerror(v, "failed to get verb");
+	if (SQ_FAILED(sqgetf(table, "text", text)))
+		return sq_throwerror(v, "failed to get verb text");
+	if (sqrawexists(table, "image") && SQ_FAILED(sqgetf(table, "image", image)))
+		return sq_throwerror(v, "failed to get verb image");
+	if (sqrawexists(table, "func") && SQ_FAILED(sqgetf(table, "func", fun)))
+		return sq_throwerror(v, "failed to get verb func");
+	if (sqrawexists(table, "key") && SQ_FAILED(sqgetf(table, "key", key)))
+		return sq_throwerror(v, "failed to get verb key");
+	if (sqrawexists(table, "flags") && SQ_FAILED(sqgetf(table, "flags", flags)))
+		return sq_throwerror(v, "failed to get verb flags");
 	debugC(kDebugGenScript, "setVerb %lld, %lld, %lld, %s", actorSlot, verbSlot, id, text.c_str());
 	VerbId verbId;
 	verbId.id = id;
diff --git a/engines/twp/motor.cpp b/engines/twp/motor.cpp
index da856ee50db..74617d3ae2d 100644
--- a/engines/twp/motor.cpp
+++ b/engines/twp/motor.cpp
@@ -540,10 +540,12 @@ void Talking::setDuration(const Common::String &text) {
 
 Common::String Talking::talkieKey() {
 	Common::String result;
-	if (sqrawexists(_obj->_table, "_talkieKey"))
-		sqgetf(_obj->_table, "_talkieKey", result);
-	else
-		sqgetf(_obj->_table, "_key", result);
+	if (sqrawexists(_obj->_table, "_talkieKey") && SQ_FAILED(sqgetf(_obj->_table, "_talkieKey", result))) {
+		error("Failed to get talkie key");
+	}
+	if (sqrawexists(_obj->_table, "_key") && SQ_FAILED(sqgetf(_obj->_table, "_key", result))) {
+		error("Failed to get talkie key (2)");
+	}
 	return result;
 }
 
diff --git a/engines/twp/object.cpp b/engines/twp/object.cpp
index f6867ee33eb..52903530321 100644
--- a/engines/twp/object.cpp
+++ b/engines/twp/object.cpp
@@ -127,14 +127,14 @@ Common::SharedPtr<Object> Object::createActor() {
 
 int Object::getId() const {
 	SQInteger result = 0;
-	sqgetf(_table, "_id", result);
+	(void)sqgetf(_table, "_id", result);
 	return (int)result;
 }
 
 Common::String Object::getName() const {
 	if ((_table._type == OT_TABLE) && (sqrawexists(_table, "name"))) {
 		Common::String result;
-		sqgetf(_table, "name", result);
+		(void)sqgetf(_table, "name", result);
 		return result;
 	}
 	return _name;
@@ -253,7 +253,7 @@ void Object::trig(const Common::String &name) {
 		}
 	} else {
 		SQInteger id = 0;
-		sqgetf(sqrootTbl(g_twp->getVm()), name.substr(1), id);
+		(void)sqgetf(sqrootTbl(g_twp->getVm()), name.substr(1), id);
 		Common::SharedPtr<SoundDefinition> sound = sqsounddef(id);
 		if (!sound)
 			warning("Cannot trig sound '%s', sound not found (id=%lld, %s)", name.c_str(), id, _key.c_str());
@@ -288,9 +288,9 @@ float Object::popScale() const {
 
 int Object::defaultVerbId() {
 	SQInteger result = VERB_LOOKAT;
-	if (sqrawexists(_table, "defaultVerb"))
-		sqgetf(_table, "defaultVerb", result);
-	else if (g_twp->_resManager->isActor(getId())) {
+	if (sqrawexists(_table, "defaultVerb") && SQ_FAILED(sqgetf(_table, "defaultVerb", result))) {
+		error("Failed to get defaultVerb");
+	} else if (g_twp->_resManager->isActor(getId())) {
 		result = sqrawexists(_table, "verbTalkTo") ? VERB_TALKTO : VERB_WALKTO;
 	}
 	return result;
@@ -308,11 +308,13 @@ bool Object::isTouchable() {
 			return false;
 		} else if (sqrawexists(_table, "_touchable")) {
 			bool result;
-			sqgetf(_table, "_touchable", result);
+			if(SQ_FAILED(sqgetf(_table, "_touchable", result)))
+				error("Failed to get touchable");
 			return result;
 		} else if (sqrawexists(_table, "initTouchable")) {
 			bool result;
-			sqgetf(_table, "initTouchable", result);
+			if(SQ_FAILED(sqgetf(_table, "initTouchable", result)))
+				error("Failed to get touchable");
 			return result;
 		} else {
 			return true;
@@ -376,7 +378,7 @@ ObjectIcons Object::getIcons() const {
 	ObjectIcons result;
 	HSQOBJECT iconTable;
 	sq_resetobject(&iconTable);
-	sqgetf(_table, "icon", iconTable);
+	(void)sqgetf(_table, "icon", iconTable);
 	if (iconTable._type == OT_NULL) {
 		return result;
 	}
@@ -402,8 +404,8 @@ Common::String Object::getIcon() {
 
 int Object::getFlags() {
 	SQInteger result = 0;
-	if (sqrawexists(_table, "flags"))
-		sqgetf(_table, "flags", result);
+	if (sqrawexists(_table, "flags") && SQ_FAILED(sqgetf(_table, "flags", result)))
+		error("Failed to get flags");
 	return result;
 }
 
@@ -699,13 +701,6 @@ void Object::lockFacing(Facing left, Facing right, Facing front, Facing back) {
 	_facingMap.push_back({Facing::FACE_BACK, back});
 }
 
-int Object::flags() {
-	SQInteger result = 0;
-	if (sqrawexists(_table, "flags"))
-		sqgetf(_table, "flags", result);
-	return result;
-}
-
 UseFlag Object::useFlag() {
 	int flags = getFlags();
 	if (flags & USE_WITH)
diff --git a/engines/twp/object.h b/engines/twp/object.h
index e3f3d621f5e..b10633b1aa7 100644
--- a/engines/twp/object.h
+++ b/engines/twp/object.h
@@ -224,7 +224,6 @@ private:
 	Common::String suffix() const;
 	// Plays an animation specified by the state
 	bool playCore(const Common::String &state, bool loop = false, bool instant = false);
-	int flags();
 
 public:
 	HSQOBJECT _table;
diff --git a/engines/twp/objlib.cpp b/engines/twp/objlib.cpp
index 97ea25d1e82..7709b9243dc 100644
--- a/engines/twp/objlib.cpp
+++ b/engines/twp/objlib.cpp
@@ -922,7 +922,7 @@ static SQInteger pickupObject(HSQUIRRELVM v) {
 		HSQOBJECT o;
 		sq_getstackobj(v, 2, &o);
 		Common::String name;
-		sqgetf(o, "name", name);
+		(void)sqgetf(o, "name", name);
 		return sq_throwerror(v, Common::String::format("failed to get object %x, %s", o._type, g_twp->_textDb->getText(name).c_str()).c_str());
 	}
 	Common::SharedPtr<Object> actor;
diff --git a/engines/twp/roomlib.cpp b/engines/twp/roomlib.cpp
index 365b25cb16b..267f27ab6d4 100644
--- a/engines/twp/roomlib.cpp
+++ b/engines/twp/roomlib.cpp
@@ -233,9 +233,9 @@ static SQInteger defineRoom(HSQUIRRELVM v) {
 	if (SQ_FAILED(sq_getstackobj(v, 2, &table)))
 		return sq_throwerror(v, "failed to get room table");
 	Common::String name;
-	sqgetf(v, table, "name", name);
-	if (name.size() == 0)
-		sqgetf(v, table, "background", name);
+	if(SQ_FAILED(sqgetf(v, table, "background", name))) {
+		return sq_throwerror(v, "failed to get room name");
+	}
 	Common::SharedPtr<Room> room = g_twp->defineRoom(name, table);
 	debugC(kDebugRoomScript, "Define room: %s", name.c_str());
 	g_twp->_rooms.push_back(room);
diff --git a/engines/twp/savegame.cpp b/engines/twp/savegame.cpp
index fb4a7284a84..b542f11ddbc 100644
--- a/engines/twp/savegame.cpp
+++ b/engines/twp/savegame.cpp
@@ -138,33 +138,39 @@ static Common::SharedPtr<Object> object(const Common::String &key) {
 	return nullptr;
 }
 
-static void toSquirrel(const Common::JSONValue *json, HSQOBJECT &obj) {
+static SQRESULT toSquirrel(const Common::JSONValue *json, HSQOBJECT &obj) {
 	HSQUIRRELVM v = g_twp->getVm();
 	SQInteger top = sq_gettop(v);
 	sq_resetobject(&obj);
 	if (json->isString()) {
 		sqpush(v, json->asString());
-		sqget(v, -1, obj);
+		if (SQ_FAILED(sqget(v, -1, obj)))
+			return sq_throwerror(v, "failed to get string");
 	} else if (json->isIntegerNumber()) {
 		sqpush(v, static_cast<int>(json->asIntegerNumber()));
-		sqget(v, -1, obj);
+		if (SQ_FAILED(sqget(v, -1, obj)))
+			return sq_throwerror(v, "failed to get int");
 	} else if (json->isBool()) {
 		sqpush(v, json->asBool());
-		sqget(v, -1, obj);
+		if (SQ_FAILED(sqget(v, -1, obj)))
+			return sq_throwerror(v, "failed to get bool");
 	} else if (json->isNumber()) {
 		sqpush(v, json->asNumber());
-		sqget(v, -1, obj);
+		if (SQ_FAILED(sqget(v, -1, obj)))
+			return sq_throwerror(v, "failed to get float");
 	} else if (json->isNull()) {
 	} else if (json->isArray()) {
 		sq_newarray(v, 0);
 		const Common::JSONArray &jArr = json->asArray();
 		for (size_t i = 0; i < jArr.size(); i++) {
 			HSQOBJECT tmp;
-			toSquirrel(jArr[i], tmp);
+			if (SQ_FAILED(toSquirrel(jArr[i], tmp)))
+				return sq_throwerror(v, "failed to get array element");
 			sqpush(v, tmp);
 			sq_arrayappend(v, -2);
 		}
-		sqget(v, -1, obj);
+		if (SQ_FAILED(sqget(v, -1, obj)))
+			return sq_throwerror(v, "failed to get array");
 	} else if (json->isObject()) {
 		const Common::JSONObject &jObject = json->asObject();
 		// check if it's a reference to an actor
@@ -205,15 +211,18 @@ static void toSquirrel(const Common::JSONValue *json, HSQOBJECT &obj) {
 			for (auto it = jObject.begin(); it != jObject.end(); it++) {
 				sqpush(v, it->_key);
 				HSQOBJECT tmp;
-				toSquirrel(it->_value, tmp);
+				if (SQ_FAILED(toSquirrel(it->_value, tmp)))
+					return sq_throwerror(v, "failed to get table element");
 				sqpush(v, tmp);
 				sq_newslot(v, -3, SQFalse);
 			}
-			sqget(v, -1, obj);
+			if (SQ_FAILED(sqget(v, -1, obj)))
+				return sq_throwerror(v, "failed to get table");
 		}
 	}
 	sq_addref(v, &obj);
 	sq_settop(v, top);
+	return SQ_OK;
 }
 
 static Common::String sub(const Common::String &s, size_t pos, size_t end) {
@@ -228,7 +237,8 @@ static void setAnimations(Common::SharedPtr<Object> actor, const Common::JSONArr
 	actor->setAnimationNames(headAnim, standAnim, walkAnim, reachAnim);
 }
 
-static void loadActor(Common::SharedPtr<Object> actor, const Common::JSONObject &json) {
+static SQRESULT loadActor(Common::SharedPtr<Object> actor, const Common::JSONObject &json) {
+	HSQUIRRELVM v = g_twp->getVm();
 	actor->setTouchable(!json.contains("_untouchable") || json["_untouchable"]->asIntegerNumber() != 1);
 	actor->_node->setVisible(!json.contains("_hidden") || json["_hidden"]->asIntegerNumber() != 1);
 	actor->_volume = json.contains("_volume") ? json["_volume"]->asNumber() : 1.0f;
@@ -264,7 +274,8 @@ static void loadActor(Common::SharedPtr<Object> actor, const Common::JSONObject
 		} else {
 			if (!it->_key.hasPrefix("_")) {
 				HSQOBJECT tmp;
-				toSquirrel(it->_value, tmp);
+				if (SQ_FAILED(toSquirrel(it->_value, tmp)))
+					return sq_throwerror(v, "failed to get table object");
 				if (sqrawexists(actor->_table, it->_key))
 					sqsetf(actor->_table, it->_key, tmp);
 				else
@@ -274,9 +285,11 @@ static void loadActor(Common::SharedPtr<Object> actor, const Common::JSONObject
 			}
 		}
 	}
+	return SQ_OK;
 }
 
-static void loadObject(Common::SharedPtr<Object> obj, const Common::JSONObject &json) {
+static SQRESULT loadObject(Common::SharedPtr<Object> obj, const Common::JSONObject &json) {
+	HSQUIRRELVM v = g_twp->getVm();
 	int state = 0;
 	if (json.contains("_state"))
 		state = json["_state"]->asIntegerNumber();
@@ -314,7 +327,8 @@ static void loadObject(Common::SharedPtr<Object> obj, const Common::JSONObject &
 			Object::setRoom(obj, room(it->_value->asString()));
 		} else if (!it->_key.hasPrefix("_")) {
 			HSQOBJECT tmp;
-			toSquirrel(it->_value, tmp);
+			if (SQ_FAILED(toSquirrel(it->_value, tmp)))
+				return sq_throwerror(v, "failed to get table object");
 			if (sqrawexists(obj->_table, it->_key))
 				sqsetf(obj->_table, it->_key, tmp);
 			else
@@ -326,6 +340,8 @@ static void loadObject(Common::SharedPtr<Object> obj, const Common::JSONObject &
 
 	if (sqrawexists(obj->_table, "postLoad"))
 		sqcall(obj->_table, "postLoad");
+
+	return SQ_OK;
 }
 
 static void loadPseudoObjects(Common::SharedPtr<Room> room, const Common::JSONObject &json) {
@@ -338,7 +354,8 @@ static void loadPseudoObjects(Common::SharedPtr<Room> room, const Common::JSONOb
 	}
 }
 
-static void loadRoom(Common::SharedPtr<Room> room, const Common::JSONObject &json) {
+static SQRESULT loadRoom(Common::SharedPtr<Room> room, const Common::JSONObject &json) {
+	HSQUIRRELVM v = g_twp->getVm();
 	for (auto it = json.begin(); it != json.end(); it++) {
 		if (it->_key == "_pseudoObjects") {
 			loadPseudoObjects(room, it->_value->asObject());
@@ -347,7 +364,8 @@ static void loadRoom(Common::SharedPtr<Room> room, const Common::JSONObject &jso
 				Common::SharedPtr<Object> o(object(room, it->_key));
 				if (!o) {
 					HSQOBJECT tmp;
-					toSquirrel(it->_value, tmp);
+					if (SQ_FAILED(toSquirrel(it->_value, tmp)))
+						return sq_throwerror(v, "failed to get table object");
 					if (sqrawexists(room->_table, it->_key))
 						sqsetf(room->_table, it->_key, tmp);
 					else {
@@ -364,6 +382,8 @@ static void loadRoom(Common::SharedPtr<Room> room, const Common::JSONObject &jso
 
 	if (sqrawexists(room->_table, "postLoad"))
 		sqcall(room->_table, "postLoad");
+
+	return SQ_OK;
 }
 
 static void setActor(const Common::String &key) {
@@ -417,15 +437,30 @@ bool SaveGameManager::loadGame(Common::SeekableReadStream &stream) {
 	sqcall("preLoad");
 	loadGameScene(json["gameScene"]->asObject());
 	loadDialog(json["dialog"]->asObject());
-	loadCallbacks(json["callbacks"]->asObject());
-	loadGlobals(json["globals"]->asObject());
-	loadActors(json["actors"]->asObject());
+	if (SQ_FAILED(loadCallbacks(json["callbacks"]->asObject()))) {
+		delete jSavegame;
+		return false;
+	}
+	if (SQ_FAILED(loadGlobals(json["globals"]->asObject()))) {
+		delete jSavegame;
+		return false;
+	}
+	if (SQ_FAILED(loadActors(json["actors"]->asObject()))) {
+		delete jSavegame;
+		return false;
+	}
 	loadInventory(json["inventory"]);
-	loadRooms(json["rooms"]->asObject());
+	if (SQ_FAILED(loadRooms(json["rooms"]->asObject()))) {
+		delete jSavegame;
+		return false;
+	}
 	g_twp->_time = (float)gameTime;
 	g_twp->setTotalPlayTime(gameTime * 1000);
 	g_twp->_inputState.setState((InputStateFlag)json["inputState"]->asIntegerNumber());
-	loadObjects(json["objects"]->asObject());
+	if (SQ_FAILED(loadObjects(json["objects"]->asObject()))) {
+		delete jSavegame;
+		return false;
+	}
 	g_twp->setRoom(room(json["currentRoom"]->asString()), true);
 	setActor(json["selectedActor"]->asString());
 	if (g_twp->_actor)
@@ -520,7 +555,8 @@ private:
 	Common::Array<HSQOBJECT> &_objs;
 };
 
-void SaveGameManager::loadCallbacks(const Common::JSONObject &json) {
+SQRESULT SaveGameManager::loadCallbacks(const Common::JSONObject &json) {
+	HSQUIRRELVM v = g_twp->getVm();
 	debugC(kDebugGame, "loadCallbacks");
 	g_twp->_callbacks.clear();
 	if (!json["callbacks"]->isNull()) {
@@ -533,35 +569,43 @@ void SaveGameManager::loadCallbacks(const Common::JSONObject &json) {
 			Common::Array<HSQOBJECT> args;
 			if (jCallBackHash.contains("param")) {
 				HSQOBJECT arg;
-				toSquirrel(jCallBackHash["param"], arg);
+				if (SQ_FAILED(toSquirrel(jCallBackHash["param"], arg)))
+					return sq_throwerror(v, "failed to get callback arg");
 				sqgetitems(arg, GetHObjects(args));
 			}
 			g_twp->_callbacks.push_back(Common::SharedPtr<Callback>(new Callback(id, time, name, args)));
 		}
 	}
 	g_twp->_resManager->resetIds(json["nextGuid"]->asIntegerNumber());
+	return SQ_OK;
 }
 
-void SaveGameManager::loadGlobals(const Common::JSONObject &json) {
+SQRESULT SaveGameManager::loadGlobals(const Common::JSONObject &json) {
 	debugC(kDebugGame, "loadGlobals");
 	HSQUIRRELVM v = g_twp->getVm();
 	HSQOBJECT g;
-	sqgetf("g", g);
+	if(SQ_FAILED(sqgetf("g", g)))
+		return sq_throwerror(v, "Failed to get globals variable");
 	for (auto it = json.begin(); it != json.end(); it++) {
 		HSQOBJECT tmp;
-		toSquirrel(it->_value, tmp);
+		if (SQ_FAILED(toSquirrel(it->_value, tmp)))
+			return sq_throwerror(v, "failed to get callback arg");
 		sq_addref(v, &tmp);
 		sqsetf(g, it->_key, tmp);
 	}
+	return SQ_OK;
 }
 
-void SaveGameManager::loadActors(const Common::JSONObject &json) {
+SQRESULT SaveGameManager::loadActors(const Common::JSONObject &json) {
+	HSQUIRRELVM v = g_twp->getVm();
 	for (size_t i = 0; i < g_twp->_actors.size(); i++) {
 		Common::SharedPtr<Object> a = g_twp->_actors[i];
 		if (a->_key.size() > 0) {
-			loadActor(a, json[a->_key]->asObject());
+			if (SQ_FAILED(loadActor(a, json[a->_key]->asObject())))
+				return sq_throwerror(v, "failed to load actor");
 		}
 	}
+	return SQ_OK;
 }
 
 void SaveGameManager::loadInventory(const Common::JSONValue *json) {
@@ -595,20 +639,27 @@ void SaveGameManager::loadInventory(const Common::JSONValue *json) {
 	}
 }
 
-void SaveGameManager::loadRooms(const Common::JSONObject &json) {
+SQRESULT SaveGameManager::loadRooms(const Common::JSONObject &json) {
+	HSQUIRRELVM v = g_twp->getVm();
 	for (auto it = json.begin(); it != json.end(); it++) {
-		loadRoom(room(it->_key), it->_value->asObject());
+		if (SQ_FAILED(loadRoom(room(it->_key), it->_value->asObject())))
+			return sq_throwerror(v, "failed to load room");
 	}
+	return SQ_OK;
 }
 
-void SaveGameManager::loadObjects(const Common::JSONObject &json) {
+SQRESULT SaveGameManager::loadObjects(const Common::JSONObject &json) {
+	HSQUIRRELVM v = g_twp->getVm();
 	for (auto it = json.begin(); it != json.end(); it++) {
 		Common::SharedPtr<Object> o(object(it->_key));
-		if (o)
-			loadObject(o, it->_value->asObject());
-		else
+		if (o) {
+			if (SQ_FAILED(loadObject(o, it->_value->asObject())))
+				return sq_throwerror(v, "failed to load object");
+		} else {
 			warning("object '%s' not found", it->_key.c_str());
+		}
 	}
+	return SQ_OK;
 }
 
 struct JsonCallback {
@@ -643,34 +694,35 @@ private:
 	Common::JSONArray &_arr;
 };
 
-static void toObject(Common::JSONObject &jObj, const HSQOBJECT &obj, bool checkId, bool skipObj = false, bool pseudo = false) {
+static SQRESULT toObject(Common::JSONObject &jObj, const HSQOBJECT &obj, bool checkId, bool skipObj = false, bool pseudo = false) {
+	HSQUIRRELVM v = g_twp->getVm();
 	if (checkId) {
 		SQInteger id = 0;
-		sqgetf(obj, "_id", id);
+		if(SQ_FAILED(sqgetf(obj, "_id", id)))
+			return sq_throwerror(v, "Failed to get id");
 		if (g_twp->_resManager->isActor(id)) {
 			Common::SharedPtr<Object> a(actor(id));
 			jObj["_actorKey"] = new Common::JSONValue(a->_key);
-			return;
+			return SQ_OK;
 		}
 
 		if (g_twp->_resManager->isObject(id)) {
 			Common::SharedPtr<Object> o(sqobj(id));
 			if (!o)
-				return;
+				return SQ_OK;
 			jObj["_objectKey"] = new Common::JSONValue(o->_key);
 			if (o->_room && o->_room->_pseudo)
 				jObj["_roomKey"] = new Common::JSONValue(o->_room->_name);
-			return;
+			return SQ_OK;
 		}
 
 		if (g_twp->_resManager->isRoom(id)) {
 			Common::SharedPtr<Room> r(getRoom(id));
 			jObj["_roomKey"] = new Common::JSONValue(r->_name);
-			return;
+			return SQ_OK;
 		}
 	}
 
-	HSQUIRRELVM v = g_twp->getVm();
 	HSQOBJECT rootTbl = sqrootTbl(v);
 
 	JsonCallback params;
@@ -678,7 +730,7 @@ static void toObject(Common::JSONObject &jObj, const HSQOBJECT &obj, bool checkI
 	params.pseudo = pseudo;
 	params.rootTable = &rootTbl;
 	params.skipObj = skipObj;
-	sqgetpairs(obj, fillMissingProperties, &params);
+	return sqgetpairs(obj, fillMissingProperties, &params);
 }
 
 static Common::JSONValue *tojson(const HSQOBJECT &obj, bool checkId, bool skipObj, bool pseudo) {
@@ -863,9 +915,11 @@ static Common::JSONValue *createJDialog() {
 
 static Common::JSONValue *createJEasyMode() {
 	HSQOBJECT g;
-	sqgetf("g", g);
+	if(SQ_FAILED(sqgetf("g", g)))
+		error("Failed to get globals variable");
 	SQInteger easyMode;
-	sqgetf(g, "easy_mode", easyMode);
+	if(SQ_FAILED(sqgetf(g, "easy_mode", easyMode)))
+		error("Failed to get easy_mode variable");
 	return new Common::JSONValue((long long int)easyMode);
 }
 
@@ -904,7 +958,8 @@ static Common::JSONValue *createJGameScene() {
 
 static Common::JSONValue *createJGlobals() {
 	HSQOBJECT g;
-	sqgetf("g", g);
+	if(SQ_FAILED(sqgetf("g", g)))
+		error("Failed to get globals variable");
 	//   result.fields.sort(cmpKey);
 	return tojson(g, false);
 }
@@ -965,9 +1020,8 @@ static Common::JSONValue *createJObject(HSQOBJECT &table, Common::SharedPtr<Obje
 
 static Common::JSONValue *createJObjects() {
 	Common::JSONObject json;
-	// sqgetpairs(sqrootTbl(g_twp->getVm()), fillObjects, &json);
-	for (auto &room : g_twp->_rooms) {
-		for (auto &layer : room->_layers) {
+	for (const auto &r : g_twp->_rooms) {
+		for (const auto &layer : r->_layers) {
 			for (auto &obj : layer->_objects) {
 				if (obj->_objType != ObjectType::otNone)
 					continue;
diff --git a/engines/twp/savegame.h b/engines/twp/savegame.h
index 4d0255cb23e..4dd8f8af64b 100644
--- a/engines/twp/savegame.h
+++ b/engines/twp/savegame.h
@@ -44,12 +44,12 @@ public:
 private:
 	void loadGameScene(const Common::JSONObject &json);
 	void loadDialog(const Common::JSONObject &json);
-	void loadCallbacks(const Common::JSONObject &json);
-	void loadGlobals(const Common::JSONObject &json);
-	void loadActors(const Common::JSONObject &json);
+	SQRESULT loadCallbacks(const Common::JSONObject &json);
+	SQRESULT loadGlobals(const Common::JSONObject &json);
+	SQRESULT loadActors(const Common::JSONObject &json);
 	void loadInventory(const Common::JSONValue *json);
-	void loadRooms(const Common::JSONObject &json);
-	void loadObjects(const Common::JSONObject &json);
+	SQRESULT loadRooms(const Common::JSONObject &json);
+	SQRESULT loadObjects(const Common::JSONObject &json);
 
 public:
 	bool _allowSaveGame = true;
diff --git a/engines/twp/squtil.cpp b/engines/twp/squtil.cpp
index e959028d57a..a72b7ad9837 100644
--- a/engines/twp/squtil.cpp
+++ b/engines/twp/squtil.cpp
@@ -249,7 +249,7 @@ void sqcall(const char *name, const Common::Array<HSQOBJECT> &args) {
 
 int getId(HSQOBJECT table) {
 	SQInteger result = 0;
-	sqgetf(table, "_id", result);
+	(void)sqgetf(table, "_id", result);
 	return (int)result;
 }
 
@@ -443,19 +443,22 @@ SQRESULT sqgetarray(HSQUIRRELVM v, int i, Common::Array<Common::SharedPtr<SoundD
 	return result;
 }
 
-void sqgetpairs(HSQOBJECT obj, void func(const Common::String &k, HSQOBJECT &obj, void *data), void *data) {
+SQRESULT sqgetpairs(HSQOBJECT obj, void func(const Common::String &k, HSQOBJECT &obj, void *data), void *data) {
 	HSQUIRRELVM v = g_twp->getVm();
 	sq_pushobject(v, obj);
 	sq_pushnull(v);
 	while (SQ_SUCCEEDED(sq_next(v, -2))) {
 		Common::String key;
 		HSQOBJECT o;
-		sqget(v, -1, o);
-		sqget(v, -2, key);
+		if (SQ_FAILED(sqget(v, -1, o)))
+			return sq_throwerror(v, "failed to get object");
+		if (SQ_FAILED(sqget(v, -2, key)))
+			return sq_throwerror(v, "failed to get key");
 		func(key, o, data);
 		sq_pop(v, 2);
 	}
 	sq_pop(v, 2);
+	return SQ_OK;
 }
 
 } // namespace Twp
diff --git a/engines/twp/squtil.h b/engines/twp/squtil.h
index 858b7e5ff86..89c9d753f36 100644
--- a/engines/twp/squtil.h
+++ b/engines/twp/squtil.h
@@ -64,27 +64,31 @@ void sqsetf(HSQOBJECT o, const Common::String &key, T obj) {
 }
 
 template<typename T>
-void sqgetf(HSQUIRRELVM v, HSQOBJECT o, const Common::String &name, T &value) {
+SQRESULT sqgetf(HSQUIRRELVM v, HSQOBJECT o, const Common::String &name, T &value) {
 	sq_pushobject(v, o);
 	sq_pushstring(v, name.c_str(), -1);
-	if (SQ_FAILED(sq_get(v, -2)))
+	if (SQ_FAILED(sq_get(v, -2))) {
 		sq_pop(v, 1);
-	else {
-		sqget(v, -1, value);
-		sq_pop(v, 2);
+		return sq_throwerror(v, "Failed to get field");
 	}
+
+	if (SQ_FAILED(sqget(v, -1, value)))
+		return sq_throwerror(v, "Failed to get field");
+
+	sq_pop(v, 2);
+	return SQ_OK;
 }
 
 template<typename T>
-void sqgetf(HSQOBJECT o, const Common::String &name, T &value) {
+SQRESULT sqgetf(HSQOBJECT o, const Common::String &name, T &value) {
 	HSQUIRRELVM v = g_twp->getVm();
-	sqgetf(v, o, name, value);
+	return sqgetf(v, o, name, value);
 }
 
 template<typename T>
-void sqgetf(const Common::String &name, T &value) {
+SQRESULT sqgetf(const Common::String &name, T &value) {
 	HSQUIRRELVM v = g_twp->getVm();
-	sqgetf(v, sqrootTbl(v), name, value);
+	return sqgetf(v, sqrootTbl(v), name, value);
 }
 
 void setId(HSQOBJECT &o, int id);
@@ -100,29 +104,33 @@ void sqgetitems(HSQOBJECT o, TFunc func) {
 	sq_pushnull(v);
 	while (SQ_SUCCEEDED(sq_next(v, -2))) {
 		HSQOBJECT obj;
-		sqget(v, -1, obj);
+		if (SQ_FAILED(sqget(v, -1, obj)))
+			error("Failed to get item");
 		func(obj);
 		sq_pop(v, 2);
 	}
 	sq_pop(v, 2);
 }
 
-void sqgetpairs(HSQOBJECT obj, void func(const Common::String &key, HSQOBJECT &obj, void *data), void *data);
+SQRESULT sqgetpairs(HSQOBJECT obj, void func(const Common::String &key, HSQOBJECT &obj, void *data), void *data);
 
 template<typename TFunc>
-void sqgetpairs(HSQOBJECT obj, TFunc func) {
+SQRESULT sqgetpairs(HSQOBJECT obj, TFunc func) {
 	HSQUIRRELVM v = g_twp->getVm();
 	sq_pushobject(v, obj);
 	sq_pushnull(v);
 	while (SQ_SUCCEEDED(sq_next(v, -2))) {
 		Common::String key;
 		HSQOBJECT o;
-		sqget(v, -1, o);
-		sqget(v, -2, key);
+		if (SQ_FAILED(sqget(v, -1, o)))
+			return sq_throwerror(v, "failed to get object");
+		if (SQ_FAILED(sqget(v, -2, key)))
+			return sq_throwerror(v, "failed to get key");
 		func(key, o);
 		sq_pop(v, 2);
 	}
 	sq_pop(v, 2);
+	return SQ_OK;
 }
 
 template<typename T>
@@ -244,7 +252,8 @@ void sqcallfunc(TResult &result, HSQOBJECT o, const char *name, T... args) {
 		error("function %s call failed", name);
 		return;
 	}
-	sqget(v, -1, result);
+	if (SQ_FAILED(sqget(v, -1, result)))
+		error("function %s call failed to get result", name);
 	sq_settop(v, top);
 }
 
diff --git a/engines/twp/twp.cpp b/engines/twp/twp.cpp
index c44dbc9abde..7ac02d19016 100644
--- a/engines/twp/twp.cpp
+++ b/engines/twp/twp.cpp
@@ -1146,7 +1146,8 @@ static void onGetPairs(const Common::String &k, HSQOBJECT &oTable, void *data) {
 				}
 			}
 
-			sqgetf(params->room->_table, k, obj->_table);
+			if(SQ_FAILED(sqgetf(params->room->_table, k, obj->_table)))
+				error("Failed to get room object");
 			const int id = g_twp->_resManager->newObjId();
 			setId(obj->_table, id);
 			g_twp->_resManager->_allObjects[id] = obj;
@@ -1159,7 +1160,8 @@ static void onGetPairs(const Common::String &k, HSQOBJECT &oTable, void *data) {
 			if (sqrawexists(obj->_table, "initState")) {
 				// info fmt"initState {obj.key}"
 				SQInteger state;
-				sqgetf(obj->_table, "initState", state);
+				if(SQ_FAILED(sqgetf(obj->_table, "initState", state)))
+					error("Failed to get initState");
 				obj->setState(state, true);
 			} else {
 				obj->setState(0, true);
@@ -1191,7 +1193,8 @@ Common::SharedPtr<Room> TwpEngine::defineRoom(const Common::String &name, HSQOBJ
 	} else {
 		result.reset(new Room(name, table));
 		Common::String background;
-		sqgetf(table, "background", background);
+		if(SQ_FAILED(sqgetf(table, "background", background)))
+			error("Failed to get room background");
 		GGPackEntryReader entry;
 		entry.open(*_pack, background + ".wimpy");
 		Room::load(result, entry);
@@ -1231,7 +1234,8 @@ Common::SharedPtr<Room> TwpEngine::defineRoom(const Common::String &name, HSQOBJ
 				} else {
 					if (pseudo) {
 						// if it's a pseudo room we need to clone each object
-						sqgetf(result->_table, obj->_key, obj->_table);
+						if(SQ_FAILED(sqgetf(result->_table, obj->_key, obj->_table)))
+							error("Failed to get room object");
 						sq_pushobject(v, obj->_table);
 						sq_clone(v, -1);
 						sq_getstackobj(v, -1, &obj->_table);
@@ -1269,7 +1273,8 @@ Common::SharedPtr<Room> TwpEngine::defineRoom(const Common::String &name, HSQOBJ
 	params.pseudo = pseudo;
 	params.v = v;
 	params.room = result;
-	sqgetpairs(result->_table, onGetPairs, &params);
+	if (SQ_FAILED(sqgetpairs(result->_table, onGetPairs, &params)))
+		error("Falied to define objects");
 
 	// declare the room in the root table
 	setId(result->_table, g_twp->_resManager->newRoomId());


Commit: 19f7c579dfa7fed9b6d1c74729b9dbc48a1afbe8
    https://github.com/scummvm/scummvm/commit/19f7c579dfa7fed9b6d1c74729b9dbc48a1afbe8
Author: scemino (scemino74 at gmail.com)
Date: 2024-04-05T22:16:19+02:00

Commit Message:
TWP: Remove unused squirrel files

Changed paths:
  R engines/twp/squirrel/sqstdblob.cpp
  R engines/twp/squirrel/sqstdblob.h
  R engines/twp/squirrel/sqstdblobimpl.h
  R engines/twp/squirrel/sqstdio.cpp
  R engines/twp/squirrel/sqstdio.h
  R engines/twp/squirrel/sqstdstream.cpp
  R engines/twp/squirrel/sqstdstream.h
  R engines/twp/squirrel/sqstdsystem.h
  R engines/twp/squirrel/squirrel.dsp
    engines/twp/module.mk
    engines/twp/vm.cpp


diff --git a/engines/twp/module.mk b/engines/twp/module.mk
index 068a5072cbe..60ae824b189 100644
--- a/engines/twp/module.mk
+++ b/engines/twp/module.mk
@@ -55,11 +55,8 @@ MODULE_OBJS = \
 	squirrel/sqmem.o \
 	squirrel/sqvm.o \
 	squirrel/sqclass.o \
-	squirrel/sqstdio.o \
 	squirrel/sqstdmath.o \
 	squirrel/sqstdstring.o \
-	squirrel/sqstdstream.o \
-	squirrel/sqstdblob.o \
 	squirrel/sqstdrex.o \
 	squirrel/sqstdaux.o \
 
diff --git a/engines/twp/squirrel/sqstdblob.cpp b/engines/twp/squirrel/sqstdblob.cpp
deleted file mode 100755
index a9fe2ce567b..00000000000
--- a/engines/twp/squirrel/sqstdblob.cpp
+++ /dev/null
@@ -1,283 +0,0 @@
-/* see copyright notice in squirrel.h */
-#include <new>
-#include "squirrel.h"
-#include "sqstdio.h"
-#include <string.h>
-#include "sqstdblob.h"
-#include "sqstdstream.h"
-#include "sqstdblobimpl.h"
-
-#define SQSTD_BLOB_TYPE_TAG ((SQUnsignedInteger)(SQSTD_STREAM_TYPE_TAG | 0x00000002))
-
-//Blob
-
-
-#define SETUP_BLOB(v) \
-    SQBlob *self = NULL; \
-    { if(SQ_FAILED(sq_getinstanceup(v,1,(SQUserPointer*)&self,(SQUserPointer)SQSTD_BLOB_TYPE_TAG))) \
-        return sq_throwerror(v,_SC("invalid type tag"));  } \
-    if(!self || !self->IsValid())  \
-        return sq_throwerror(v,_SC("the blob is invalid"));
-
-
-static SQInteger _blob_resize(HSQUIRRELVM v)
-{
-    SETUP_BLOB(v);
-    SQInteger size;
-    sq_getinteger(v,2,&size);
-    if(!self->Resize(size))
-        return sq_throwerror(v,_SC("resize failed"));
-    return 0;
-}
-
-static void __swap_dword(unsigned int *n)
-{
-    *n=(unsigned int)(((*n&0xFF000000)>>24)  |
-            ((*n&0x00FF0000)>>8)  |
-            ((*n&0x0000FF00)<<8)  |
-            ((*n&0x000000FF)<<24));
-}
-
-static void __swap_word(unsigned short *n)
-{
-    *n=(unsigned short)((*n>>8)&0x00FF)| ((*n<<8)&0xFF00);
-}
-
-static SQInteger _blob_swap4(HSQUIRRELVM v)
-{
-    SETUP_BLOB(v);
-    SQInteger num=(self->Len()-(self->Len()%4))>>2;
-    unsigned int *t=(unsigned int *)self->GetBuf();
-    for(SQInteger i = 0; i < num; i++) {
-        __swap_dword(&t[i]);
-    }
-    return 0;
-}
-
-static SQInteger _blob_swap2(HSQUIRRELVM v)
-{
-    SETUP_BLOB(v);
-    SQInteger num=(self->Len()-(self->Len()%2))>>1;
-    unsigned short *t = (unsigned short *)self->GetBuf();
-    for(SQInteger i = 0; i < num; i++) {
-        __swap_word(&t[i]);
-    }
-    return 0;
-}
-
-static SQInteger _blob__set(HSQUIRRELVM v)
-{
-    SETUP_BLOB(v);
-    SQInteger idx,val;
-    sq_getinteger(v,2,&idx);
-    sq_getinteger(v,3,&val);
-    if(idx < 0 || idx >= self->Len())
-        return sq_throwerror(v,_SC("index out of range"));
-    ((unsigned char *)self->GetBuf())[idx] = (unsigned char) val;
-    sq_push(v,3);
-    return 1;
-}
-
-static SQInteger _blob__get(HSQUIRRELVM v)
-{
-    SETUP_BLOB(v);
-    SQInteger idx;
-
-	if ((sq_gettype(v, 2) & SQOBJECT_NUMERIC) == 0)
-	{
-		sq_pushnull(v);
-		return sq_throwobject(v);
-	}
-    sq_getinteger(v,2,&idx);
-    if(idx < 0 || idx >= self->Len())
-        return sq_throwerror(v,_SC("index out of range"));
-    sq_pushinteger(v,((unsigned char *)self->GetBuf())[idx]);
-    return 1;
-}
-
-static SQInteger _blob__nexti(HSQUIRRELVM v)
-{
-    SETUP_BLOB(v);
-    if(sq_gettype(v,2) == OT_NULL) {
-        sq_pushinteger(v, 0);
-        return 1;
-    }
-    SQInteger idx;
-    if(SQ_SUCCEEDED(sq_getinteger(v, 2, &idx))) {
-        if(idx+1 < self->Len()) {
-            sq_pushinteger(v, idx+1);
-            return 1;
-        }
-        sq_pushnull(v);
-        return 1;
-    }
-    return sq_throwerror(v,_SC("internal error (_nexti) wrong argument type"));
-}
-
-static SQInteger _blob__typeof(HSQUIRRELVM v)
-{
-    sq_pushstring(v,_SC("blob"),-1);
-    return 1;
-}
-
-static SQInteger _blob_releasehook(SQUserPointer p, SQInteger SQ_UNUSED_ARG(size))
-{
-    SQBlob *self = (SQBlob*)p;
-    self->~SQBlob();
-    sq_free(self,sizeof(SQBlob));
-    return 1;
-}
-
-static SQInteger _blob_constructor(HSQUIRRELVM v)
-{
-    SQInteger nparam = sq_gettop(v);
-    SQInteger size = 0;
-    if(nparam == 2) {
-        sq_getinteger(v, 2, &size);
-    }
-    if(size < 0) return sq_throwerror(v, _SC("cannot create blob with negative size"));
-    //SQBlob *b = new SQBlob(size);
-
-    SQBlob *b = new (sq_malloc(sizeof(SQBlob)))SQBlob(size);
-    if(SQ_FAILED(sq_setinstanceup(v,1,b))) {
-        b->~SQBlob();
-        sq_free(b,sizeof(SQBlob));
-        return sq_throwerror(v, _SC("cannot create blob"));
-    }
-    sq_setreleasehook(v,1,_blob_releasehook);
-    return 0;
-}
-
-static SQInteger _blob__cloned(HSQUIRRELVM v)
-{
-    SQBlob *other = NULL;
-    {
-        if(SQ_FAILED(sq_getinstanceup(v,2,(SQUserPointer*)&other,(SQUserPointer)SQSTD_BLOB_TYPE_TAG)))
-            return SQ_ERROR;
-    }
-    //SQBlob *thisone = new SQBlob(other->Len());
-    SQBlob *thisone = new (sq_malloc(sizeof(SQBlob)))SQBlob(other->Len());
-    memcpy(thisone->GetBuf(),other->GetBuf(),thisone->Len());
-    if(SQ_FAILED(sq_setinstanceup(v,1,thisone))) {
-        thisone->~SQBlob();
-        sq_free(thisone,sizeof(SQBlob));
-        return sq_throwerror(v, _SC("cannot clone blob"));
-    }
-    sq_setreleasehook(v,1,_blob_releasehook);
-    return 0;
-}
-
-#define _DECL_BLOB_FUNC(name,nparams,typecheck) {_SC(#name),_blob_##name,nparams,typecheck}
-static const SQRegFunction _blob_methods[] = {
-    _DECL_BLOB_FUNC(constructor,-1,_SC("xn")),
-    _DECL_BLOB_FUNC(resize,2,_SC("xn")),
-    _DECL_BLOB_FUNC(swap2,1,_SC("x")),
-    _DECL_BLOB_FUNC(swap4,1,_SC("x")),
-    _DECL_BLOB_FUNC(_set,3,_SC("xnn")),
-    _DECL_BLOB_FUNC(_get,2,_SC("x.")),
-    _DECL_BLOB_FUNC(_typeof,1,_SC("x")),
-    _DECL_BLOB_FUNC(_nexti,2,_SC("x")),
-    _DECL_BLOB_FUNC(_cloned,2,_SC("xx")),
-    {NULL,(SQFUNCTION)0,0,NULL}
-};
-
-
-
-//GLOBAL FUNCTIONS
-
-static SQInteger _g_blob_casti2f(HSQUIRRELVM v)
-{
-    SQInteger i;
-    sq_getinteger(v,2,&i);
-    sq_pushfloat(v,*((const SQFloat *)&i));
-    return 1;
-}
-
-static SQInteger _g_blob_castf2i(HSQUIRRELVM v)
-{
-    SQFloat f;
-    sq_getfloat(v,2,&f);
-    sq_pushinteger(v,*((const SQInteger *)&f));
-    return 1;
-}
-
-static SQInteger _g_blob_swap2(HSQUIRRELVM v)
-{
-    SQInteger i;
-    sq_getinteger(v,2,&i);
-    short s=(short)i;
-    sq_pushinteger(v,(s<<8)|((s>>8)&0x00FF));
-    return 1;
-}
-
-static SQInteger _g_blob_swap4(HSQUIRRELVM v)
-{
-    SQInteger i;
-    sq_getinteger(v,2,&i);
-    unsigned int t4 = (unsigned int)i;
-    __swap_dword(&t4);
-    sq_pushinteger(v,(SQInteger)t4);
-    return 1;
-}
-
-static SQInteger _g_blob_swapfloat(HSQUIRRELVM v)
-{
-    SQFloat f;
-    sq_getfloat(v,2,&f);
-    __swap_dword((unsigned int *)&f);
-    sq_pushfloat(v,f);
-    return 1;
-}
-
-#define _DECL_GLOBALBLOB_FUNC(name,nparams,typecheck) {_SC(#name),_g_blob_##name,nparams,typecheck}
-static const SQRegFunction bloblib_funcs[]={
-    _DECL_GLOBALBLOB_FUNC(casti2f,2,_SC(".n")),
-    _DECL_GLOBALBLOB_FUNC(castf2i,2,_SC(".n")),
-    _DECL_GLOBALBLOB_FUNC(swap2,2,_SC(".n")),
-    _DECL_GLOBALBLOB_FUNC(swap4,2,_SC(".n")),
-    _DECL_GLOBALBLOB_FUNC(swapfloat,2,_SC(".n")),
-    {NULL,(SQFUNCTION)0,0,NULL}
-};
-
-SQRESULT sqstd_getblob(HSQUIRRELVM v,SQInteger idx,SQUserPointer *ptr)
-{
-    SQBlob *blob;
-    if(SQ_FAILED(sq_getinstanceup(v,idx,(SQUserPointer *)&blob,(SQUserPointer)SQSTD_BLOB_TYPE_TAG)))
-        return -1;
-    *ptr = blob->GetBuf();
-    return SQ_OK;
-}
-
-SQInteger sqstd_getblobsize(HSQUIRRELVM v,SQInteger idx)
-{
-    SQBlob *blob;
-    if(SQ_FAILED(sq_getinstanceup(v,idx,(SQUserPointer *)&blob,(SQUserPointer)SQSTD_BLOB_TYPE_TAG)))
-        return -1;
-    return blob->Len();
-}
-
-SQUserPointer sqstd_createblob(HSQUIRRELVM v, SQInteger size)
-{
-    SQInteger top = sq_gettop(v);
-    sq_pushregistrytable(v);
-    sq_pushstring(v,_SC("std_blob"),-1);
-    if(SQ_SUCCEEDED(sq_get(v,-2))) {
-        sq_remove(v,-2); //removes the registry
-        sq_push(v,1); // push the this
-        sq_pushinteger(v,size); //size
-        SQBlob *blob = NULL;
-        if(SQ_SUCCEEDED(sq_call(v,2,SQTrue,SQFalse))
-            && SQ_SUCCEEDED(sq_getinstanceup(v,-1,(SQUserPointer *)&blob,(SQUserPointer)SQSTD_BLOB_TYPE_TAG))) {
-            sq_remove(v,-2);
-            return blob->GetBuf();
-        }
-    }
-    sq_settop(v,top);
-    return NULL;
-}
-
-SQRESULT sqstd_register_bloblib(HSQUIRRELVM v)
-{
-    return declare_stream(v,_SC("blob"),(SQUserPointer)SQSTD_BLOB_TYPE_TAG,_SC("std_blob"),_blob_methods,bloblib_funcs);
-}
-
diff --git a/engines/twp/squirrel/sqstdblob.h b/engines/twp/squirrel/sqstdblob.h
deleted file mode 100755
index cd7ce567ecd..00000000000
--- a/engines/twp/squirrel/sqstdblob.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/*  see copyright notice in squirrel.h */
-#ifndef _SQSTDBLOB_H_
-#define _SQSTDBLOB_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-SQUIRREL_API SQUserPointer sqstd_createblob(HSQUIRRELVM v, SQInteger size);
-SQUIRREL_API SQRESULT sqstd_getblob(HSQUIRRELVM v,SQInteger idx,SQUserPointer *ptr);
-SQUIRREL_API SQInteger sqstd_getblobsize(HSQUIRRELVM v,SQInteger idx);
-
-SQUIRREL_API SQRESULT sqstd_register_bloblib(HSQUIRRELVM v);
-
-#ifdef __cplusplus
-} /*extern "C"*/
-#endif
-
-#endif /*_SQSTDBLOB_H_*/
-
diff --git a/engines/twp/squirrel/sqstdblobimpl.h b/engines/twp/squirrel/sqstdblobimpl.h
deleted file mode 100755
index bfdaddc29e9..00000000000
--- a/engines/twp/squirrel/sqstdblobimpl.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/*  see copyright notice in squirrel.h */
-#ifndef _SQSTD_BLOBIMPL_H_
-#define _SQSTD_BLOBIMPL_H_
-
-struct SQBlob : public SQStream
-{
-    SQBlob(SQInteger size) {
-        _size = size;
-        _allocated = size;
-        _buf = (unsigned char *)sq_malloc(size);
-        memset(_buf, 0, _size);
-        _ptr = 0;
-        _owns = true;
-    }
-    virtual ~SQBlob() {
-        sq_free(_buf, _allocated);
-    }
-    SQInteger Write(void *buffer, SQInteger size) {
-        if(!CanAdvance(size)) {
-            GrowBufOf(_ptr + size - _size);
-        }
-        memcpy(&_buf[_ptr], buffer, size);
-        _ptr += size;
-        return size;
-    }
-    SQInteger Read(void *buffer,SQInteger size) {
-        SQInteger n = size;
-        if(!CanAdvance(size)) {
-            if((_size - _ptr) > 0)
-                n = _size - _ptr;
-            else return 0;
-        }
-        memcpy(buffer, &_buf[_ptr], n);
-        _ptr += n;
-        return n;
-    }
-    bool Resize(SQInteger n) {
-        if(!_owns) return false;
-        if(n != _allocated) {
-            unsigned char *newbuf = (unsigned char *)sq_malloc(n);
-            memset(newbuf,0,n);
-            if(_size > n)
-                memcpy(newbuf,_buf,n);
-            else
-                memcpy(newbuf,_buf,_size);
-            sq_free(_buf,_allocated);
-            _buf=newbuf;
-            _allocated = n;
-            if(_size > _allocated)
-                _size = _allocated;
-            if(_ptr > _allocated)
-                _ptr = _allocated;
-        }
-        return true;
-    }
-    bool GrowBufOf(SQInteger n)
-    {
-        bool ret = true;
-        if(_size + n > _allocated) {
-            if(_size + n > _size * 2)
-                ret = Resize(_size + n);
-            else
-                ret = Resize(_size * 2);
-        }
-        _size = _size + n;
-        return ret;
-    }
-    bool CanAdvance(SQInteger n) {
-        if(_ptr+n>_size)return false;
-        return true;
-    }
-    SQInteger Seek(SQInteger offset, SQInteger origin) {
-        switch(origin) {
-            case SQ_SEEK_SET:
-                if(offset > _size || offset < 0) return -1;
-                _ptr = offset;
-                break;
-            case SQ_SEEK_CUR:
-                if(_ptr + offset > _size || _ptr + offset < 0) return -1;
-                _ptr += offset;
-                break;
-            case SQ_SEEK_END:
-                if(_size + offset > _size || _size + offset < 0) return -1;
-                _ptr = _size + offset;
-                break;
-            default: return -1;
-        }
-        return 0;
-    }
-    bool IsValid() {
-        return _size == 0 || _buf?true:false;
-    }
-    bool EOS() {
-        return _ptr == _size;
-    }
-    SQInteger Flush() { return 0; }
-    SQInteger Tell() { return _ptr; }
-    SQInteger Len() { return _size; }
-    SQUserPointer GetBuf(){ return _buf; }
-private:
-    SQInteger _size;
-    SQInteger _allocated;
-    SQInteger _ptr;
-    unsigned char *_buf;
-    bool _owns;
-};
-
-#endif //_SQSTD_BLOBIMPL_H_
diff --git a/engines/twp/squirrel/sqstdio.cpp b/engines/twp/squirrel/sqstdio.cpp
deleted file mode 100755
index 4e9df69b496..00000000000
--- a/engines/twp/squirrel/sqstdio.cpp
+++ /dev/null
@@ -1,442 +0,0 @@
-/* see copyright notice in squirrel.h */
-#include <new>
-#include <stdio.h>
-#include "squirrel.h"
-#include "sqstdio.h"
-#include "sqstdstream.h"
-
-#define SQSTD_FILE_TYPE_TAG ((SQUnsignedInteger)(SQSTD_STREAM_TYPE_TAG | 0x00000001))
-//basic API
-SQFILE sqstd_fopen(const SQChar *filename ,const SQChar *mode)
-{
-    return (SQFILE)fopen(filename,mode);
-}
-
-SQInteger sqstd_fread(void* buffer, SQInteger size, SQInteger count, SQFILE file)
-{
-    SQInteger ret = (SQInteger)fread(buffer,size,count,(FILE *)file);
-    return ret;
-}
-
-SQInteger sqstd_fwrite(const SQUserPointer buffer, SQInteger size, SQInteger count, SQFILE file)
-{
-    return (SQInteger)fwrite(buffer,size,count,(FILE *)file);
-}
-
-SQInteger sqstd_fseek(SQFILE file, SQInteger offset, SQInteger origin)
-{
-    SQInteger realorigin;
-    switch(origin) {
-        case SQ_SEEK_CUR: realorigin = SEEK_CUR; break;
-        case SQ_SEEK_END: realorigin = SEEK_END; break;
-        case SQ_SEEK_SET: realorigin = SEEK_SET; break;
-        default: return -1; //failed
-    }
-    return fseek((FILE *)file,(long)offset,(int)realorigin);
-}
-
-SQInteger sqstd_ftell(SQFILE file)
-{
-    return ftell((FILE *)file);
-}
-
-SQInteger sqstd_fflush(SQFILE file)
-{
-    return fflush((FILE *)file);
-}
-
-SQInteger sqstd_fclose(SQFILE file)
-{
-    return fclose((FILE *)file);
-}
-
-SQInteger sqstd_feof(SQFILE file)
-{
-    return feof((FILE *)file);
-}
-
-//File
-struct SQFile : public SQStream {
-    SQFile() { _handle = NULL; _owns = false;}
-    SQFile(SQFILE file, bool owns) { _handle = file; _owns = owns;}
-    virtual ~SQFile() { Close(); }
-    bool Open(const SQChar *filename ,const SQChar *mode) {
-        Close();
-        if( (_handle = sqstd_fopen(filename,mode)) ) {
-            _owns = true;
-            return true;
-        }
-        return false;
-    }
-    void Close() {
-        if(_handle && _owns) {
-            sqstd_fclose(_handle);
-            _handle = NULL;
-            _owns = false;
-        }
-    }
-    SQInteger Read(void *buffer,SQInteger size) {
-        return sqstd_fread(buffer,1,size,_handle);
-    }
-    SQInteger Write(void *buffer,SQInteger size) {
-        return sqstd_fwrite(buffer,1,size,_handle);
-    }
-    SQInteger Flush() {
-        return sqstd_fflush(_handle);
-    }
-    SQInteger Tell() {
-        return sqstd_ftell(_handle);
-    }
-    SQInteger Len() {
-        SQInteger prevpos=Tell();
-        Seek(0,SQ_SEEK_END);
-        SQInteger size=Tell();
-        Seek(prevpos,SQ_SEEK_SET);
-        return size;
-    }
-    SQInteger Seek(SQInteger offset, SQInteger origin)  {
-        return sqstd_fseek(_handle,offset,origin);
-    }
-    bool IsValid() { return _handle?true:false; }
-    bool EOS() { return Tell()==Len()?true:false;}
-    SQFILE GetHandle() {return _handle;}
-private:
-    SQFILE _handle;
-    bool _owns;
-};
-
-static SQInteger _file__typeof(HSQUIRRELVM v)
-{
-    sq_pushstring(v,_SC("file"),-1);
-    return 1;
-}
-
-static SQInteger _file_releasehook(SQUserPointer p, SQInteger SQ_UNUSED_ARG(size))
-{
-    SQFile *self = (SQFile*)p;
-    self->~SQFile();
-    sq_free(self,sizeof(SQFile));
-    return 1;
-}
-
-static SQInteger _file_constructor(HSQUIRRELVM v)
-{
-    const SQChar *filename,*mode;
-    bool owns = true;
-    SQFile *f;
-    SQFILE newf;
-    if(sq_gettype(v,2) == OT_STRING && sq_gettype(v,3) == OT_STRING) {
-        sq_getstring(v, 2, &filename);
-        sq_getstring(v, 3, &mode);
-        newf = sqstd_fopen(filename, mode);
-        if(!newf) return sq_throwerror(v, _SC("cannot open file"));
-    } else if(sq_gettype(v,2) == OT_USERPOINTER) {
-        owns = !(sq_gettype(v,3) == OT_NULL);
-        sq_getuserpointer(v,2,&newf);
-    } else {
-        return sq_throwerror(v,_SC("wrong parameter"));
-    }
-
-    f = new (sq_malloc(sizeof(SQFile)))SQFile(newf,owns);
-    if(SQ_FAILED(sq_setinstanceup(v,1,f))) {
-        f->~SQFile();
-        sq_free(f,sizeof(SQFile));
-        return sq_throwerror(v, _SC("cannot create blob with negative size"));
-    }
-    sq_setreleasehook(v,1,_file_releasehook);
-    return 0;
-}
-
-static SQInteger _file_close(HSQUIRRELVM v)
-{
-    SQFile *self = NULL;
-    if(SQ_SUCCEEDED(sq_getinstanceup(v,1,(SQUserPointer*)&self,(SQUserPointer)SQSTD_FILE_TYPE_TAG))
-        && self != NULL)
-    {
-        self->Close();
-    }
-    return 0;
-}
-
-//bindings
-#define _DECL_FILE_FUNC(name,nparams,typecheck) {_SC(#name),_file_##name,nparams,typecheck}
-static const SQRegFunction _file_methods[] = {
-    _DECL_FILE_FUNC(constructor,3,_SC("x")),
-    _DECL_FILE_FUNC(_typeof,1,_SC("x")),
-    _DECL_FILE_FUNC(close,1,_SC("x")),
-    {NULL,(SQFUNCTION)0,0,NULL}
-};
-
-
-
-SQRESULT sqstd_createfile(HSQUIRRELVM v, SQFILE file,SQBool own)
-{
-    SQInteger top = sq_gettop(v);
-    sq_pushregistrytable(v);
-    sq_pushstring(v,_SC("std_file"),-1);
-    if(SQ_SUCCEEDED(sq_get(v,-2))) {
-        sq_remove(v,-2); //removes the registry
-        sq_pushroottable(v); // push the this
-        sq_pushuserpointer(v,file); //file
-        if(own){
-            sq_pushinteger(v,1); //true
-        }
-        else{
-            sq_pushnull(v); //false
-        }
-        if(SQ_SUCCEEDED( sq_call(v,3,SQTrue,SQFalse) )) {
-            sq_remove(v,-2);
-            return SQ_OK;
-        }
-    }
-    sq_settop(v,top);
-    return SQ_ERROR;
-}
-
-SQRESULT sqstd_getfile(HSQUIRRELVM v, SQInteger idx, SQFILE *file)
-{
-    SQFile *fileobj = NULL;
-    if(SQ_SUCCEEDED(sq_getinstanceup(v,idx,(SQUserPointer*)&fileobj,(SQUserPointer)SQSTD_FILE_TYPE_TAG))) {
-        *file = fileobj->GetHandle();
-        return SQ_OK;
-    }
-    return sq_throwerror(v,_SC("not a file"));
-}
-
-
-
-#define IO_BUFFER_SIZE 2048
-struct IOBuffer {
-    unsigned char buffer[IO_BUFFER_SIZE];
-    SQInteger size;
-    SQInteger ptr;
-    SQFILE file;
-};
-
-SQInteger _read_byte(IOBuffer *iobuffer)
-{
-    if(iobuffer->ptr < iobuffer->size) {
-
-        SQInteger ret = iobuffer->buffer[iobuffer->ptr];
-        iobuffer->ptr++;
-        return ret;
-    }
-    else {
-        if( (iobuffer->size = sqstd_fread(iobuffer->buffer,1,IO_BUFFER_SIZE,iobuffer->file )) > 0 )
-        {
-            SQInteger ret = iobuffer->buffer[0];
-            iobuffer->ptr = 1;
-            return ret;
-        }
-    }
-
-    return 0;
-}
-
-SQInteger _read_two_bytes(IOBuffer *iobuffer)
-{
-    if(iobuffer->ptr < iobuffer->size) {
-        if(iobuffer->size < 2) return 0;
-        SQInteger ret = *((const wchar_t*)&iobuffer->buffer[iobuffer->ptr]);
-        iobuffer->ptr += 2;
-        return ret;
-    }
-    else {
-        if( (iobuffer->size = sqstd_fread(iobuffer->buffer,1,IO_BUFFER_SIZE,iobuffer->file )) > 0 )
-        {
-            if(iobuffer->size < 2) return 0;
-            SQInteger ret = *((const wchar_t*)&iobuffer->buffer[0]);
-            iobuffer->ptr = 2;
-            return ret;
-        }
-    }
-
-    return 0;
-}
-
-static SQInteger _io_file_lexfeed_PLAIN(SQUserPointer iobuf)
-{
-    IOBuffer *iobuffer = (IOBuffer *)iobuf;
-    return _read_byte(iobuffer);
-
-}
-
-static SQInteger _io_file_lexfeed_UCS2_LE(SQUserPointer iobuf)
-{
-    SQInteger ret;
-    IOBuffer *iobuffer = (IOBuffer *)iobuf;
-    if( (ret = _read_two_bytes(iobuffer)) > 0 )
-        return ret;
-    return 0;
-}
-
-static SQInteger _io_file_lexfeed_UCS2_BE(SQUserPointer iobuf)
-{
-    SQInteger c;
-    IOBuffer *iobuffer = (IOBuffer *)iobuf;
-    if( (c = _read_two_bytes(iobuffer)) > 0 ) {
-        c = ((c>>8)&0x00FF)| ((c<<8)&0xFF00);
-        return c;
-    }
-    return 0;
-}
-
-SQInteger file_read(SQUserPointer file,SQUserPointer buf,SQInteger size)
-{
-    SQInteger ret;
-    if( ( ret = sqstd_fread(buf,1,size,(SQFILE)file ))!=0 )return ret;
-    return -1;
-}
-
-SQInteger file_write(SQUserPointer file,SQUserPointer p,SQInteger size)
-{
-    return sqstd_fwrite(p,1,size,(SQFILE)file);
-}
-
-SQRESULT sqstd_loadfile(HSQUIRRELVM v,const SQChar *filename,SQBool printerror)
-{
-    SQFILE file = sqstd_fopen(filename,_SC("rb"));
-
-    SQInteger ret;
-    unsigned short us;
-    unsigned char uc;
-    SQLEXREADFUNC func = _io_file_lexfeed_PLAIN;
-    if(file){
-        ret = sqstd_fread(&us,1,2,file);
-        if(ret != 2) {
-            //probably an empty file
-            us = 0;
-        }
-        if(us == SQ_BYTECODE_STREAM_TAG) { //BYTECODE
-            sqstd_fseek(file,0,SQ_SEEK_SET);
-            if(SQ_SUCCEEDED(sq_readclosure(v,file_read,file))) {
-                sqstd_fclose(file);
-                return SQ_OK;
-            }
-        }
-        else { //SCRIPT
-
-            switch(us)
-            {
-                //gotta swap the next 2 lines on BIG endian machines
-                case 0xFFFE: func = _io_file_lexfeed_UCS2_BE; break;//UTF-16 little endian;
-                case 0xFEFF: func = _io_file_lexfeed_UCS2_LE; break;//UTF-16 big endian;
-                case 0xBBEF:
-                    if(sqstd_fread(&uc,1,sizeof(uc),file) == 0) {
-                        sqstd_fclose(file);
-                        return sq_throwerror(v,_SC("io error"));
-                    }
-                    if(uc != 0xBF) {
-                        sqstd_fclose(file);
-                        return sq_throwerror(v,_SC("Unrecognized encoding"));
-                    }
-
-                    func = _io_file_lexfeed_PLAIN;
-                    break;//UTF-8 ;
-                default: sqstd_fseek(file,0,SQ_SEEK_SET); break; // ascii
-            }
-            IOBuffer buffer;
-            buffer.ptr = 0;
-            buffer.size = 0;
-            buffer.file = file;
-            if(SQ_SUCCEEDED(sq_compile(v,func,&buffer,filename,printerror))){
-                sqstd_fclose(file);
-                return SQ_OK;
-            }
-        }
-        sqstd_fclose(file);
-        return SQ_ERROR;
-    }
-    return sq_throwerror(v,_SC("cannot open the file"));
-}
-
-SQRESULT sqstd_dofile(HSQUIRRELVM v,const SQChar *filename,SQBool retval,SQBool printerror)
-{
-    //at least one entry must exist in order for us to push it as the environment
-    if(sq_gettop(v) == 0)
-        return sq_throwerror(v,_SC("environment table expected"));
-
-    if(SQ_SUCCEEDED(sqstd_loadfile(v,filename,printerror))) {
-        sq_push(v,-2);
-        if(SQ_SUCCEEDED(sq_call(v,1,retval,SQTrue))) {
-            sq_remove(v,retval?-2:-1); //removes the closure
-            return 1;
-        }
-        sq_pop(v,1); //removes the closure
-    }
-    return SQ_ERROR;
-}
-
-SQRESULT sqstd_writeclosuretofile(HSQUIRRELVM v,const SQChar *filename)
-{
-    SQFILE file = sqstd_fopen(filename,_SC("wb+"));
-    if(!file) return sq_throwerror(v,_SC("cannot open the file"));
-    if(SQ_SUCCEEDED(sq_writeclosure(v,file_write,file))) {
-        sqstd_fclose(file);
-        return SQ_OK;
-    }
-    sqstd_fclose(file);
-    return SQ_ERROR; //forward the error
-}
-
-SQInteger _g_io_loadfile(HSQUIRRELVM v)
-{
-    const SQChar *filename;
-    SQBool printerror = SQFalse;
-    sq_getstring(v,2,&filename);
-    if(sq_gettop(v) >= 3) {
-        sq_getbool(v,3,&printerror);
-    }
-    if(SQ_SUCCEEDED(sqstd_loadfile(v,filename,printerror)))
-        return 1;
-    return SQ_ERROR; //propagates the error
-}
-
-SQInteger _g_io_writeclosuretofile(HSQUIRRELVM v)
-{
-    const SQChar *filename;
-    sq_getstring(v,2,&filename);
-    if(SQ_SUCCEEDED(sqstd_writeclosuretofile(v,filename)))
-        return 1;
-    return SQ_ERROR; //propagates the error
-}
-
-SQInteger _g_io_dofile(HSQUIRRELVM v)
-{
-    const SQChar *filename;
-    SQBool printerror = SQFalse;
-    sq_getstring(v,2,&filename);
-    if(sq_gettop(v) >= 3) {
-        sq_getbool(v,3,&printerror);
-    }
-    sq_push(v,1); //repush the this
-    if(SQ_SUCCEEDED(sqstd_dofile(v,filename,SQTrue,printerror)))
-        return 1;
-    return SQ_ERROR; //propagates the error
-}
-
-#define _DECL_GLOBALIO_FUNC(name,nparams,typecheck) {_SC(#name),_g_io_##name,nparams,typecheck}
-static const SQRegFunction iolib_funcs[]={
-    _DECL_GLOBALIO_FUNC(loadfile,-2,_SC(".sb")),
-    _DECL_GLOBALIO_FUNC(dofile,-2,_SC(".sb")),
-    _DECL_GLOBALIO_FUNC(writeclosuretofile,3,_SC(".sc")),
-    {NULL,(SQFUNCTION)0,0,NULL}
-};
-
-SQRESULT sqstd_register_iolib(HSQUIRRELVM v)
-{
-    SQInteger top = sq_gettop(v);
-    //create delegate
-    declare_stream(v,_SC("file"),(SQUserPointer)SQSTD_FILE_TYPE_TAG,_SC("std_file"),_file_methods,iolib_funcs);
-    sq_pushstring(v,_SC("stdout"),-1);
-    sqstd_createfile(v,stdout,SQFalse);
-    sq_newslot(v,-3,SQFalse);
-    sq_pushstring(v,_SC("stdin"),-1);
-    sqstd_createfile(v,stdin,SQFalse);
-    sq_newslot(v,-3,SQFalse);
-    sq_pushstring(v,_SC("stderr"),-1);
-    sqstd_createfile(v,stderr,SQFalse);
-    sq_newslot(v,-3,SQFalse);
-    sq_settop(v,top);
-    return SQ_OK;
-}
diff --git a/engines/twp/squirrel/sqstdio.h b/engines/twp/squirrel/sqstdio.h
deleted file mode 100755
index fbc745101b8..00000000000
--- a/engines/twp/squirrel/sqstdio.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*  see copyright notice in squirrel.h */
-#ifndef _SQSTDIO_H_
-#define _SQSTDIO_H_
-
-#ifdef __cplusplus
-
-#define SQSTD_STREAM_TYPE_TAG 0x80000000
-
-struct SQStream {
-    virtual ~SQStream() {}
-    virtual SQInteger Read(void *buffer, SQInteger size) = 0;
-    virtual SQInteger Write(void *buffer, SQInteger size) = 0;
-    virtual SQInteger Flush() = 0;
-    virtual SQInteger Tell() = 0;
-    virtual SQInteger Len() = 0;
-    virtual SQInteger Seek(SQInteger offset, SQInteger origin) = 0;
-    virtual bool IsValid() = 0;
-    virtual bool EOS() = 0;
-};
-
-extern "C" {
-#endif
-
-#define SQ_SEEK_CUR 0
-#define SQ_SEEK_END 1
-#define SQ_SEEK_SET 2
-
-typedef void* SQFILE;
-
-SQUIRREL_API SQFILE sqstd_fopen(const SQChar *,const SQChar *);
-SQUIRREL_API SQInteger sqstd_fread(SQUserPointer, SQInteger, SQInteger, SQFILE);
-SQUIRREL_API SQInteger sqstd_fwrite(const SQUserPointer, SQInteger, SQInteger, SQFILE);
-SQUIRREL_API SQInteger sqstd_fseek(SQFILE , SQInteger , SQInteger);
-SQUIRREL_API SQInteger sqstd_ftell(SQFILE);
-SQUIRREL_API SQInteger sqstd_fflush(SQFILE);
-SQUIRREL_API SQInteger sqstd_fclose(SQFILE);
-SQUIRREL_API SQInteger sqstd_feof(SQFILE);
-
-SQUIRREL_API SQRESULT sqstd_createfile(HSQUIRRELVM v, SQFILE file,SQBool own);
-SQUIRREL_API SQRESULT sqstd_getfile(HSQUIRRELVM v, SQInteger idx, SQFILE *file);
-
-//compiler helpers
-SQUIRREL_API SQRESULT sqstd_loadfile(HSQUIRRELVM v,const SQChar *filename,SQBool printerror);
-SQUIRREL_API SQRESULT sqstd_dofile(HSQUIRRELVM v,const SQChar *filename,SQBool retval,SQBool printerror);
-SQUIRREL_API SQRESULT sqstd_writeclosuretofile(HSQUIRRELVM v,const SQChar *filename);
-
-SQUIRREL_API SQRESULT sqstd_register_iolib(HSQUIRRELVM v);
-
-#ifdef __cplusplus
-} /*extern "C"*/
-#endif
-
-#endif /*_SQSTDIO_H_*/
-
diff --git a/engines/twp/squirrel/sqstdstream.cpp b/engines/twp/squirrel/sqstdstream.cpp
deleted file mode 100755
index abdd8438cfb..00000000000
--- a/engines/twp/squirrel/sqstdstream.cpp
+++ /dev/null
@@ -1,336 +0,0 @@
-/* see copyright notice in squirrel.h */
-#include <new>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "squirrel.h"
-#include "sqstdio.h"
-#include "sqstdblob.h"
-#include "sqstdstream.h"
-#include "sqstdblobimpl.h"
-
-#define SETUP_STREAM(v) \
-    SQStream *self = NULL; \
-    if(SQ_FAILED(sq_getinstanceup(v,1,(SQUserPointer*)&self,(SQUserPointer)((SQUnsignedInteger)SQSTD_STREAM_TYPE_TAG)))) \
-        return sq_throwerror(v,_SC("invalid type tag")); \
-    if(!self || !self->IsValid())  \
-        return sq_throwerror(v,_SC("the stream is invalid"));
-
-SQInteger _stream_readblob(HSQUIRRELVM v)
-{
-    SETUP_STREAM(v);
-    SQUserPointer data,blobp;
-    SQInteger size,res;
-    sq_getinteger(v,2,&size);
-    if(size > self->Len()) {
-        size = self->Len();
-    }
-    data = sq_getscratchpad(v,size);
-    res = self->Read(data,size);
-    if(res <= 0)
-        return sq_throwerror(v,_SC("no data left to read"));
-    blobp = sqstd_createblob(v,res);
-    memcpy(blobp,data,res);
-    return 1;
-}
-
-#define SAFE_READN(ptr,len) { \
-    if(self->Read(ptr,len) != len) return sq_throwerror(v,_SC("io error")); \
-    }
-SQInteger _stream_readn(HSQUIRRELVM v)
-{
-    SETUP_STREAM(v);
-    SQInteger format;
-    sq_getinteger(v, 2, &format);
-    switch(format) {
-    case 'l': {
-        SQInteger i;
-        SAFE_READN(&i, sizeof(i));
-        sq_pushinteger(v, i);
-              }
-        break;
-    case 'i': {
-        SQInt32 i;
-        SAFE_READN(&i, sizeof(i));
-        sq_pushinteger(v, i);
-              }
-        break;
-    case 's': {
-        short s;
-        SAFE_READN(&s, sizeof(short));
-        sq_pushinteger(v, s);
-              }
-        break;
-    case 'w': {
-        unsigned short w;
-        SAFE_READN(&w, sizeof(unsigned short));
-        sq_pushinteger(v, w);
-              }
-        break;
-    case 'c': {
-        char c;
-        SAFE_READN(&c, sizeof(char));
-        sq_pushinteger(v, c);
-              }
-        break;
-    case 'b': {
-        unsigned char c;
-        SAFE_READN(&c, sizeof(unsigned char));
-        sq_pushinteger(v, c);
-              }
-        break;
-    case 'f': {
-        float f;
-        SAFE_READN(&f, sizeof(float));
-        sq_pushfloat(v, f);
-              }
-        break;
-    case 'd': {
-        double d;
-        SAFE_READN(&d, sizeof(double));
-        sq_pushfloat(v, (SQFloat)d);
-              }
-        break;
-    default:
-        return sq_throwerror(v, _SC("invalid format"));
-    }
-    return 1;
-}
-
-SQInteger _stream_writeblob(HSQUIRRELVM v)
-{
-    SQUserPointer data;
-    SQInteger size;
-    SETUP_STREAM(v);
-    if(SQ_FAILED(sqstd_getblob(v,2,&data)))
-        return sq_throwerror(v,_SC("invalid parameter"));
-    size = sqstd_getblobsize(v,2);
-    if(self->Write(data,size) != size)
-        return sq_throwerror(v,_SC("io error"));
-    sq_pushinteger(v,size);
-    return 1;
-}
-
-SQInteger _stream_writen(HSQUIRRELVM v)
-{
-    SETUP_STREAM(v);
-    SQInteger format, ti;
-    SQFloat tf;
-    sq_getinteger(v, 3, &format);
-    switch(format) {
-    case 'l': {
-        SQInteger i;
-        sq_getinteger(v, 2, &ti);
-        i = ti;
-        self->Write(&i, sizeof(SQInteger));
-              }
-        break;
-    case 'i': {
-        SQInt32 i;
-        sq_getinteger(v, 2, &ti);
-        i = (SQInt32)ti;
-        self->Write(&i, sizeof(SQInt32));
-              }
-        break;
-    case 's': {
-        short s;
-        sq_getinteger(v, 2, &ti);
-        s = (short)ti;
-        self->Write(&s, sizeof(short));
-              }
-        break;
-    case 'w': {
-        unsigned short w;
-        sq_getinteger(v, 2, &ti);
-        w = (unsigned short)ti;
-        self->Write(&w, sizeof(unsigned short));
-              }
-        break;
-    case 'c': {
-        char c;
-        sq_getinteger(v, 2, &ti);
-        c = (char)ti;
-        self->Write(&c, sizeof(char));
-                  }
-        break;
-    case 'b': {
-        unsigned char b;
-        sq_getinteger(v, 2, &ti);
-        b = (unsigned char)ti;
-        self->Write(&b, sizeof(unsigned char));
-              }
-        break;
-    case 'f': {
-        float f;
-        sq_getfloat(v, 2, &tf);
-        f = (float)tf;
-        self->Write(&f, sizeof(float));
-              }
-        break;
-    case 'd': {
-        double d;
-        sq_getfloat(v, 2, &tf);
-        d = tf;
-        self->Write(&d, sizeof(double));
-              }
-        break;
-    default:
-        return sq_throwerror(v, _SC("invalid format"));
-    }
-    return 0;
-}
-
-SQInteger _stream_seek(HSQUIRRELVM v)
-{
-    SETUP_STREAM(v);
-    SQInteger offset, origin = SQ_SEEK_SET;
-    sq_getinteger(v, 2, &offset);
-    if(sq_gettop(v) > 2) {
-        SQInteger t;
-        sq_getinteger(v, 3, &t);
-        switch(t) {
-            case 'b': origin = SQ_SEEK_SET; break;
-            case 'c': origin = SQ_SEEK_CUR; break;
-            case 'e': origin = SQ_SEEK_END; break;
-            default: return sq_throwerror(v,_SC("invalid origin"));
-        }
-    }
-    sq_pushinteger(v, self->Seek(offset, origin));
-    return 1;
-}
-
-SQInteger _stream_tell(HSQUIRRELVM v)
-{
-    SETUP_STREAM(v);
-    sq_pushinteger(v, self->Tell());
-    return 1;
-}
-
-SQInteger _stream_len(HSQUIRRELVM v)
-{
-    SETUP_STREAM(v);
-    sq_pushinteger(v, self->Len());
-    return 1;
-}
-
-SQInteger _stream_flush(HSQUIRRELVM v)
-{
-    SETUP_STREAM(v);
-    if(!self->Flush())
-        sq_pushinteger(v, 1);
-    else
-        sq_pushnull(v);
-    return 1;
-}
-
-SQInteger _stream_eos(HSQUIRRELVM v)
-{
-    SETUP_STREAM(v);
-    if(self->EOS())
-        sq_pushinteger(v, 1);
-    else
-        sq_pushnull(v);
-    return 1;
-}
-
- SQInteger _stream__cloned(HSQUIRRELVM v)
- {
-     return sq_throwerror(v,_SC("this object cannot be cloned"));
- }
-
-static const SQRegFunction _stream_methods[] = {
-    _DECL_STREAM_FUNC(readblob,2,_SC("xn")),
-    _DECL_STREAM_FUNC(readn,2,_SC("xn")),
-    _DECL_STREAM_FUNC(writeblob,-2,_SC("xx")),
-    _DECL_STREAM_FUNC(writen,3,_SC("xnn")),
-    _DECL_STREAM_FUNC(seek,-2,_SC("xnn")),
-    _DECL_STREAM_FUNC(tell,1,_SC("x")),
-    _DECL_STREAM_FUNC(len,1,_SC("x")),
-    _DECL_STREAM_FUNC(eos,1,_SC("x")),
-    _DECL_STREAM_FUNC(flush,1,_SC("x")),
-    _DECL_STREAM_FUNC(_cloned,0,NULL),
-    {NULL,(SQFUNCTION)0,0,NULL}
-};
-
-void init_streamclass(HSQUIRRELVM v)
-{
-    sq_pushregistrytable(v);
-    sq_pushstring(v,_SC("std_stream"),-1);
-    if(SQ_FAILED(sq_get(v,-2))) {
-        sq_pushstring(v,_SC("std_stream"),-1);
-        sq_newclass(v,SQFalse);
-        sq_settypetag(v,-1,(SQUserPointer)((SQUnsignedInteger)SQSTD_STREAM_TYPE_TAG));
-        SQInteger i = 0;
-        while(_stream_methods[i].name != 0) {
-            const SQRegFunction &f = _stream_methods[i];
-            sq_pushstring(v,f.name,-1);
-            sq_newclosure(v,f.f,0);
-            sq_setparamscheck(v,f.nparamscheck,f.typemask);
-            sq_newslot(v,-3,SQFalse);
-            i++;
-        }
-        sq_newslot(v,-3,SQFalse);
-        sq_pushroottable(v);
-        sq_pushstring(v,_SC("stream"),-1);
-        sq_pushstring(v,_SC("std_stream"),-1);
-        sq_get(v,-4);
-        sq_newslot(v,-3,SQFalse);
-        sq_pop(v,1);
-    }
-    else {
-        sq_pop(v,1); //result
-    }
-    sq_pop(v,1);
-}
-
-SQRESULT declare_stream(HSQUIRRELVM v,const SQChar* name,SQUserPointer typetag,const SQChar* reg_name,const SQRegFunction *methods,const SQRegFunction *globals)
-{
-    if(sq_gettype(v,-1) != OT_TABLE)
-        return sq_throwerror(v,_SC("table expected"));
-    SQInteger top = sq_gettop(v);
-    //create delegate
-    init_streamclass(v);
-    sq_pushregistrytable(v);
-    sq_pushstring(v,reg_name,-1);
-    sq_pushstring(v,_SC("std_stream"),-1);
-    if(SQ_SUCCEEDED(sq_get(v,-3))) {
-        sq_newclass(v,SQTrue);
-        sq_settypetag(v,-1,typetag);
-        SQInteger i = 0;
-        while(methods[i].name != 0) {
-            const SQRegFunction &f = methods[i];
-            sq_pushstring(v,f.name,-1);
-            sq_newclosure(v,f.f,0);
-            sq_setparamscheck(v,f.nparamscheck,f.typemask);
-            sq_setnativeclosurename(v,-1,f.name);
-            sq_newslot(v,-3,SQFalse);
-            i++;
-        }
-        sq_newslot(v,-3,SQFalse);
-        sq_pop(v,1);
-
-        i = 0;
-        while(globals[i].name!=0)
-        {
-            const SQRegFunction &f = globals[i];
-            sq_pushstring(v,f.name,-1);
-            sq_newclosure(v,f.f,0);
-            sq_setparamscheck(v,f.nparamscheck,f.typemask);
-            sq_setnativeclosurename(v,-1,f.name);
-            sq_newslot(v,-3,SQFalse);
-            i++;
-        }
-        //register the class in the target table
-        sq_pushstring(v,name,-1);
-        sq_pushregistrytable(v);
-        sq_pushstring(v,reg_name,-1);
-        sq_get(v,-2);
-        sq_remove(v,-2);
-        sq_newslot(v,-3,SQFalse);
-
-        sq_settop(v,top);
-        return SQ_OK;
-    }
-    sq_settop(v,top);
-    return SQ_ERROR;
-}
diff --git a/engines/twp/squirrel/sqstdstream.h b/engines/twp/squirrel/sqstdstream.h
deleted file mode 100755
index 867c135fdee..00000000000
--- a/engines/twp/squirrel/sqstdstream.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/*  see copyright notice in squirrel.h */
-#ifndef _SQSTD_STREAM_H_
-#define _SQSTD_STREAM_H_
-
-SQInteger _stream_readblob(HSQUIRRELVM v);
-SQInteger _stream_readline(HSQUIRRELVM v);
-SQInteger _stream_readn(HSQUIRRELVM v);
-SQInteger _stream_writeblob(HSQUIRRELVM v);
-SQInteger _stream_writen(HSQUIRRELVM v);
-SQInteger _stream_seek(HSQUIRRELVM v);
-SQInteger _stream_tell(HSQUIRRELVM v);
-SQInteger _stream_len(HSQUIRRELVM v);
-SQInteger _stream_eos(HSQUIRRELVM v);
-SQInteger _stream_flush(HSQUIRRELVM v);
-
-#define _DECL_STREAM_FUNC(name,nparams,typecheck) {_SC(#name),_stream_##name,nparams,typecheck}
-SQRESULT declare_stream(HSQUIRRELVM v,const SQChar* name,SQUserPointer typetag,const SQChar* reg_name,const SQRegFunction *methods,const SQRegFunction *globals);
-#endif /*_SQSTD_STREAM_H_*/
diff --git a/engines/twp/squirrel/sqstdsystem.h b/engines/twp/squirrel/sqstdsystem.h
deleted file mode 100755
index 8c823283329..00000000000
--- a/engines/twp/squirrel/sqstdsystem.h
+++ /dev/null
@@ -1,15 +0,0 @@
-/*  see copyright notice in squirrel.h */
-#ifndef _SQSTD_SYSTEMLIB_H_
-#define _SQSTD_SYSTEMLIB_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-SQUIRREL_API SQInteger sqstd_register_systemlib(HSQUIRRELVM v);
-
-#ifdef __cplusplus
-} /*extern "C"*/
-#endif
-
-#endif /* _SQSTD_SYSTEMLIB_H_ */
diff --git a/engines/twp/squirrel/squirrel.dsp b/engines/twp/squirrel/squirrel.dsp
deleted file mode 100755
index 66a84f7dd74..00000000000
--- a/engines/twp/squirrel/squirrel.dsp
+++ /dev/null
@@ -1,302 +0,0 @@
-# Microsoft Developer Studio Project File - Name="squirrel" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=squirrel - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "squirrel.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "squirrel.mak" CFG="squirrel - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "squirrel - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "squirrel - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_LocalPath ".."
-CPP=cl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "squirrel - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /W3 /GX /O2 /I "..\include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "GARBAGE_COLLECTOR" /YX /FD /c
-# ADD BASE RSC /l 0x410 /d "NDEBUG"
-# ADD RSC /l 0x410 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\lib\squirrel.lib"
-
-!ELSEIF  "$(CFG)" == "squirrel - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x410 /d "_DEBUG"
-# ADD RSC /l 0x410 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\lib\squirrel.lib"
-
-!ENDIF 
-
-# Begin Target
-
-# Name "squirrel - Win32 Release"
-# Name "squirrel - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\sqapi.cpp
-
-!IF  "$(CFG)" == "squirrel - Win32 Release"
-
-!ELSEIF  "$(CFG)" == "squirrel - Win32 Debug"
-
-# ADD CPP /YX"stdafx.h"
-
-!ENDIF 
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\sqbaselib.cpp
-
-!IF  "$(CFG)" == "squirrel - Win32 Release"
-
-!ELSEIF  "$(CFG)" == "squirrel - Win32 Debug"
-
-# ADD CPP /YX"stdafx.h"
-
-!ENDIF 
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\sqcompiler.cpp
-
-!IF  "$(CFG)" == "squirrel - Win32 Release"
-
-!ELSEIF  "$(CFG)" == "squirrel - Win32 Debug"
-
-# ADD CPP /YX"stdafx.h"
-
-!ENDIF 
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\sqdebug.cpp
-
-!IF  "$(CFG)" == "squirrel - Win32 Release"
-
-!ELSEIF  "$(CFG)" == "squirrel - Win32 Debug"
-
-# ADD CPP /YX"stdafx.h"
-
-!ENDIF 
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\sqfuncstate.cpp
-
-!IF  "$(CFG)" == "squirrel - Win32 Release"
-
-!ELSEIF  "$(CFG)" == "squirrel - Win32 Debug"
-
-# ADD CPP /YX"stdafx.h"
-
-!ENDIF 
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\sqlexer.cpp
-
-!IF  "$(CFG)" == "squirrel - Win32 Release"
-
-!ELSEIF  "$(CFG)" == "squirrel - Win32 Debug"
-
-# ADD CPP /YX"stdafx.h"
-
-!ENDIF 
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\sqmem.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\sqobject.cpp
-
-!IF  "$(CFG)" == "squirrel - Win32 Release"
-
-!ELSEIF  "$(CFG)" == "squirrel - Win32 Debug"
-
-# ADD CPP /YX"stdafx.h"
-
-!ENDIF 
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\sqstate.cpp
-
-!IF  "$(CFG)" == "squirrel - Win32 Release"
-
-!ELSEIF  "$(CFG)" == "squirrel - Win32 Debug"
-
-# ADD CPP /YX"stdafx.h"
-
-!ENDIF 
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\sqtable.cpp
-
-!IF  "$(CFG)" == "squirrel - Win32 Release"
-
-!ELSEIF  "$(CFG)" == "squirrel - Win32 Debug"
-
-# ADD CPP /YX"stdafx.h"
-
-!ENDIF 
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\sqclass.cpp
-
-!IF  "$(CFG)" == "squirrel - Win32 Release"
-
-!ELSEIF  "$(CFG)" == "squirrel - Win32 Debug"
-
-# ADD CPP /YX"stdafx.h"
-
-!ENDIF 
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\sqvm.cpp
-
-!IF  "$(CFG)" == "squirrel - Win32 Release"
-
-!ELSEIF  "$(CFG)" == "squirrel - Win32 Debug"
-
-# ADD CPP /YX"stdafx.h"
-
-!ENDIF 
-
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\sqarray.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\sqclosure.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\sqcompiler.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\sqfuncproto.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\sqfuncstate.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\sqlexer.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\sqobject.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\sqopcodes.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\sqpcheader.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\sqstate.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\sqstring.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\sqtable.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\squserdata.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\squtils.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\sqclass.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\sqvm.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/engines/twp/vm.cpp b/engines/twp/vm.cpp
index 5617b35148b..67d8aa8beff 100644
--- a/engines/twp/vm.cpp
+++ b/engines/twp/vm.cpp
@@ -29,7 +29,6 @@
 #include "twp/squirrel/sqtable.h"
 #include "twp/squirrel/sqstdstring.h"
 #include "twp/squirrel/sqstdmath.h"
-#include "twp/squirrel/sqstdio.h"
 #include "twp/squirrel/sqstdaux.h"
 #include "twp/squirrel/sqfuncproto.h"
 #include "twp/squirrel/sqclosure.h"
@@ -81,7 +80,6 @@ Vm::Vm() {
 	sq_pushroottable(v);
 	sqstd_register_stringlib(v);
 	sqstd_register_mathlib(v);
-	sqstd_register_iolib(v);
 	sq_pop(v, 1);
 
 	sqgame_register_constants(v);


Commit: ca035348bf778b10b904e629f64fbb699d72d3f2
    https://github.com/scummvm/scummvm/commit/ca035348bf778b10b904e629f64fbb699d72d3f2
Author: scemino (scemino74 at gmail.com)
Date: 2024-04-05T22:17:27+02:00

Commit Message:
TWP: Fix out-of-bounds access in squirrel.

Coverity CID 1540534

Changed paths:
    engines/twp/squirrel/sqstdstring.cpp


diff --git a/engines/twp/squirrel/sqstdstring.cpp b/engines/twp/squirrel/sqstdstring.cpp
index 7b7bd4c0d45..a516bf4633d 100755
--- a/engines/twp/squirrel/sqstdstring.cpp
+++ b/engines/twp/squirrel/sqstdstring.cpp
@@ -332,7 +332,7 @@ static SQInteger _string_startswith(HSQUIRRELVM v)
     SQInteger len = sq_getsize(v,2);
     SQInteger cmplen = sq_getsize(v,3);
     SQBool ret = SQFalse;
-    if(cmplen <= len) {
+    if((len >=0) && (cmplen >=0) && (cmplen <= len)) {
         ret = memcmp(str,cmp,sq_rsl(cmplen)) == 0 ? SQTrue : SQFalse;
     }
     sq_pushbool(v,ret);


Commit: cd69641753687731109d8455ef63ffc7acd54a85
    https://github.com/scummvm/scummvm/commit/cd69641753687731109d8455ef63ffc7acd54a85
Author: scemino (scemino74 at gmail.com)
Date: 2024-04-05T22:22:37+02:00

Commit Message:
TWP: Fix uninitialized pointer field in squirrel.

Coverity CID 1215800

Changed paths:
    engines/twp/squirrel/sqclosure.h


diff --git a/engines/twp/squirrel/sqclosure.h b/engines/twp/squirrel/sqclosure.h
index 66495b94101..4787e83ee14 100755
--- a/engines/twp/squirrel/sqclosure.h
+++ b/engines/twp/squirrel/sqclosure.h
@@ -187,10 +187,10 @@ public:
     void Finalize() { _NULL_SQOBJECT_VECTOR(_outervalues,_noutervalues); }
     SQObjectType GetType() {return OT_NATIVECLOSURE;}
 #endif
-    SQInteger _nparamscheck;
+    SQInteger _nparamscheck = 0;
     SQIntVec _typecheck;
-    SQObjectPtr *_outervalues;
-    SQUnsignedInteger _noutervalues;
+    SQObjectPtr *_outervalues = nullptr;
+    SQUnsignedInteger _noutervalues = 0;
     SQWeakRef *_env;
     SQFUNCTION _function;
     SQObjectPtr _name;


Commit: ae007b1cc1c3664f1a4b6c20d1f0a5b9bf5ce350
    https://github.com/scummvm/scummvm/commit/ae007b1cc1c3664f1a4b6c20d1f0a5b9bf5ce350
Author: scemino (scemino74 at gmail.com)
Date: 2024-04-05T22:26:09+02:00

Commit Message:
TWP: Fix uninitialized scalar field in squirrel.

Coverity CID 968231

Changed paths:
    engines/twp/squirrel/sqclosure.h


diff --git a/engines/twp/squirrel/sqclosure.h b/engines/twp/squirrel/sqclosure.h
index 4787e83ee14..aededee61ae 100755
--- a/engines/twp/squirrel/sqclosure.h
+++ b/engines/twp/squirrel/sqclosure.h
@@ -99,7 +99,7 @@ public:
 #endif
 
     SQObjectPtr *_valptr;  /* pointer to value on stack, or _value below */
-    SQInteger    _idx;     /* idx in stack array, for relocation */
+    SQInteger    _idx = 0;     /* idx in stack array, for relocation */
     SQObjectPtr  _value;   /* value of outer after stack frame is closed */
     SQOuter     *_next;    /* pointer to next outer when frame is open   */
 };


Commit: 77831edb7f8d87ab2ebe3274174209c1565649ea
    https://github.com/scummvm/scummvm/commit/77831edb7f8d87ab2ebe3274174209c1565649ea
Author: scemino (scemino74 at gmail.com)
Date: 2024-04-05T22:28:14+02:00

Commit Message:
TWP: Fix uninitialized pointer field in squirrel.

Coverity CID 968232

Changed paths:
    engines/twp/squirrel/sqclosure.h


diff --git a/engines/twp/squirrel/sqclosure.h b/engines/twp/squirrel/sqclosure.h
index aededee61ae..ee319b3e659 100755
--- a/engines/twp/squirrel/sqclosure.h
+++ b/engines/twp/squirrel/sqclosure.h
@@ -66,8 +66,8 @@ public:
     SQWeakRef *_root;
     SQClass *_base;
     SQFunctionProto *_function;
-    SQObjectPtr *_outervalues;
-    SQObjectPtr *_defaultparams;
+    SQObjectPtr *_outervalues = nullptr;
+    SQObjectPtr *_defaultparams = nullptr;
 };
 
 //////////////////////////////////////////////


Commit: e6c90819fafa0da78bbd011b6b71b1d053f6ccdc
    https://github.com/scummvm/scummvm/commit/e6c90819fafa0da78bbd011b6b71b1d053f6ccdc
Author: scemino (scemino74 at gmail.com)
Date: 2024-04-05T22:32:30+02:00

Commit Message:
TWP: Fix uninitialized pointer field in squirrel.

Coverity CID 968234

Changed paths:
    engines/twp/squirrel/sqlexer.h


diff --git a/engines/twp/squirrel/sqlexer.h b/engines/twp/squirrel/sqlexer.h
index 55949d44f63..d1efa0ec25c 100755
--- a/engines/twp/squirrel/sqlexer.h
+++ b/engines/twp/squirrel/sqlexer.h
@@ -23,24 +23,24 @@ private:
 
     SQInteger AddUTF8(SQUnsignedInteger ch);
     SQInteger ProcessStringHexEscape(SQChar *dest, SQInteger maxdigits);
-    SQInteger _curtoken;
-    SQTable *_keywords;
-    SQBool _reached_eof;
+    SQInteger _curtoken = 0;
+    SQTable *_keywords = nullptr;
+    SQBool _reached_eof = SQFalse;
 public:
-    SQInteger _prevtoken;
-    SQInteger _currentline;
-    SQInteger _lasttokenline;
-    SQInteger _currentcolumn;
-    const SQChar *_svalue;
-    SQInteger _nvalue;
-    SQFloat _fvalue;
-    SQLEXREADFUNC _readf;
-    SQUserPointer _up;
-    LexChar _currdata;
-    SQSharedState *_sharedstate;
+    SQInteger _prevtoken = 0;
+    SQInteger _currentline = 0;
+    SQInteger _lasttokenline = 0;
+    SQInteger _currentcolumn = 0;
+    const SQChar *_svalue = nullptr;
+    SQInteger _nvalue = 0;
+    SQFloat _fvalue = 0.f;
+    SQLEXREADFUNC _readf = nullptr;
+    SQUserPointer _up = nullptr;
+    LexChar _currdata = 0;
+    SQSharedState *_sharedstate = nullptr;
     sqvector<SQChar> _longstr;
-    CompilerErrorFunc _errfunc;
-    void *_errtarget;
+    CompilerErrorFunc _errfunc = nullptr;
+    void *_errtarget = nullptr;
 };
 
 #endif


Commit: 4e10c9c7e49a65b5004fbfca7b2633829a635a7e
    https://github.com/scummvm/scummvm/commit/4e10c9c7e49a65b5004fbfca7b2633829a635a7e
Author: scemino (scemino74 at gmail.com)
Date: 2024-04-05T22:35:44+02:00

Commit Message:
TWP: Fix uninitialized pointer field in squirrel.

Coverity CID 968235

Changed paths:
    engines/twp/squirrel/sqfuncproto.h


diff --git a/engines/twp/squirrel/sqfuncproto.h b/engines/twp/squirrel/sqfuncproto.h
index 052a365c95c..f9a50919da9 100755
--- a/engines/twp/squirrel/sqfuncproto.h
+++ b/engines/twp/squirrel/sqfuncproto.h
@@ -111,30 +111,30 @@ public:
     SQObjectPtr _name;
     SQInteger _stacksize;
     bool _bgenerator;
-    SQInteger _varparams;
+    SQInteger _varparams = 0;
 
-    SQInteger _nlocalvarinfos;
-    SQLocalVarInfo *_localvarinfos;
+    SQInteger _nlocalvarinfos = 0;
+    SQLocalVarInfo *_localvarinfos = nullptr;
 
-    SQInteger _nlineinfos;
-    SQLineInfo *_lineinfos;
+    SQInteger _nlineinfos = 0;
+    SQLineInfo *_lineinfos = nullptr;
 
-    SQInteger _nliterals;
-    SQObjectPtr *_literals;
+    SQInteger _nliterals = 0;
+    SQObjectPtr *_literals = nullptr;
 
-    SQInteger _nparameters;
-    SQObjectPtr *_parameters;
+    SQInteger _nparameters = 0;
+    SQObjectPtr *_parameters = nullptr;
 
-    SQInteger _nfunctions;
-    SQObjectPtr *_functions;
+    SQInteger _nfunctions = 0;
+    SQObjectPtr *_functions = nullptr;
 
-    SQInteger _noutervalues;
-    SQOuterVar *_outervalues;
+    SQInteger _noutervalues = 0;
+    SQOuterVar *_outervalues = nullptr;
 
-    SQInteger _ndefaultparams;
-    SQInteger *_defaultparams;
+    SQInteger _ndefaultparams = 0;
+    SQInteger *_defaultparams = nullptr;
 
-    SQInteger _ninstructions;
+    SQInteger _ninstructions = 0;
     SQInstruction _instructions[1];
 };
 


Commit: dd9bc4b51cfc2d48ac663af8adca8cdb262c9640
    https://github.com/scummvm/scummvm/commit/dd9bc4b51cfc2d48ac663af8adca8cdb262c9640
Author: scemino (scemino74 at gmail.com)
Date: 2024-04-05T22:37:14+02:00

Commit Message:
TWP: Fix uninitialized pointer field in squirrel.

Coverity CID 968239

Changed paths:
    engines/twp/squirrel/squserdata.h


diff --git a/engines/twp/squirrel/squserdata.h b/engines/twp/squirrel/squserdata.h
index ec217313be0..67a4ad17942 100755
--- a/engines/twp/squirrel/squserdata.h
+++ b/engines/twp/squirrel/squserdata.h
@@ -31,9 +31,9 @@ struct SQUserData : SQDelegable
     }
 
 
-    SQInteger _size;
+    SQInteger _size = 0;
     SQRELEASEHOOK _hook;
-    SQUserPointer _typetag;
+    SQUserPointer _typetag = nullptr;
     //SQChar _val[1];
 };
 


Commit: a0cb61f022c65e43cda7034d1438c81f565623b4
    https://github.com/scummvm/scummvm/commit/a0cb61f022c65e43cda7034d1438c81f565623b4
Author: scemino (scemino74 at gmail.com)
Date: 2024-04-05T22:38:48+02:00

Commit Message:
TWP: Fix uninitialized pointer field in squirrel.

Coverity CID 968240

Changed paths:
    engines/twp/squirrel/sqvm.h


diff --git a/engines/twp/squirrel/sqvm.h b/engines/twp/squirrel/sqvm.h
index 7bf80ab9ea3..6ce48002c4b 100755
--- a/engines/twp/squirrel/sqvm.h
+++ b/engines/twp/squirrel/sqvm.h
@@ -146,8 +146,8 @@ public:
 
     SQObjectPtrVec _stack;
 
-    SQInteger _top;
-    SQInteger _stackbase;
+    SQInteger _top = 0;
+    SQInteger _stackbase = 0;
     SQOuter *_openouters;
     SQObjectPtr _roottable;
     SQObjectPtr _lasterror;
@@ -160,9 +160,9 @@ public:
     SQObjectPtr temp_reg;
 
 
-    CallInfo* _callsstack;
-    SQInteger _callsstacksize;
-    SQInteger _alloccallsstacksize;
+    CallInfo* _callsstack = nullptr;
+    SQInteger _callsstacksize = 0;
+    SQInteger _alloccallsstacksize = 0;
     sqvector<CallInfo>  _callstackdata;
 
     ExceptionsTraps _etraps;


Commit: ad29f164d512e9db24e7100a63e56cfe79d1efe6
    https://github.com/scummvm/scummvm/commit/ad29f164d512e9db24e7100a63e56cfe79d1efe6
Author: scemino (scemino74 at gmail.com)
Date: 2024-04-05T22:42:32+02:00

Commit Message:
TWP: Fix structurally dead code field in squirrel.

Coverity CID 968242

Changed paths:
    engines/twp/squirrel/sqcompiler.cpp


diff --git a/engines/twp/squirrel/sqcompiler.cpp b/engines/twp/squirrel/sqcompiler.cpp
index e3e673df2a0..b09e61f3c95 100755
--- a/engines/twp/squirrel/sqcompiler.cpp
+++ b/engines/twp/squirrel/sqcompiler.cpp
@@ -470,7 +470,7 @@ public:
     void LogicalOrExp()
     {
         LogicalAndExp();
-        for(;;) if(_token == TK_OR) {
+        if(_token == TK_OR) {
             SQInteger first_exp = _fs->PopTarget();
             SQInteger trg = _fs->PushTarget();
             _fs->AddInstruction(_OP_OR, trg, 0, first_exp, 0);
@@ -483,8 +483,7 @@ public:
             _fs->SnoozeOpt();
             _fs->SetInstructionParam(jpos, 1, (_fs->GetCurrentPos() - jpos));
             _es.etype = EXPR;
-            break;
-        }else return;
+        }
     }
     void LogicalAndExp()
     {


Commit: f0046daa22f71c7dda67b3f008bb37ccebfbb164
    https://github.com/scummvm/scummvm/commit/f0046daa22f71c7dda67b3f008bb37ccebfbb164
Author: scemino (scemino74 at gmail.com)
Date: 2024-04-05T22:48:57+02:00

Commit Message:
TWP: Fix structurally dead code field in squirrel.

Coverity CID 968243

Changed paths:
    engines/twp/squirrel/sqlexer.cpp


diff --git a/engines/twp/squirrel/sqlexer.cpp b/engines/twp/squirrel/sqlexer.cpp
index 8a2bbf0a579..90236ef037c 100755
--- a/engines/twp/squirrel/sqlexer.cpp
+++ b/engines/twp/squirrel/sqlexer.cpp
@@ -158,7 +158,6 @@ SQInteger SQLexer::Lex()
             case _SC('>'):
                 NEXT();
                 RETURN_TOKEN(TK_ATTR_CLOSE);
-                continue;
             default:
                 RETURN_TOKEN('/');
             }


Commit: 4b9aad2271745b44b4ad04b3b1721072e3ef03c3
    https://github.com/scummvm/scummvm/commit/4b9aad2271745b44b4ad04b3b1721072e3ef03c3
Author: scemino (scemino74 at gmail.com)
Date: 2024-04-05T23:00:19+02:00

Commit Message:
TWP: Fix improper use of negative value in squirrel.

Coverity CID 1540520

Changed paths:
    engines/twp/squirrel/sqstdstring.cpp


diff --git a/engines/twp/squirrel/sqstdstring.cpp b/engines/twp/squirrel/sqstdstring.cpp
index a516bf4633d..0cec000fd4d 100755
--- a/engines/twp/squirrel/sqstdstring.cpp
+++ b/engines/twp/squirrel/sqstdstring.cpp
@@ -221,6 +221,8 @@ static SQInteger _string_rstrip(HSQUIRRELVM v)
     const SQChar *str,*end;
     sq_getstring(v,2,&str);
     SQInteger len = sq_getsize(v,2);
+	if(len < 0)
+        len = 0;
     __strip_r(str,len,&end);
     sq_pushstring(v,str,end - str);
     return 1;


Commit: 1054d031387257035ee7bb3021e7d0eb8d0a5162
    https://github.com/scummvm/scummvm/commit/1054d031387257035ee7bb3021e7d0eb8d0a5162
Author: scemino (scemino74 at gmail.com)
Date: 2024-04-05T23:02:12+02:00

Commit Message:
TWP: Fix structurally dead code field in squirrel.

Coverity CID 1540517

Changed paths:
    engines/twp/squirrel/sqvm.cpp


diff --git a/engines/twp/squirrel/sqvm.cpp b/engines/twp/squirrel/sqvm.cpp
index 86b3f379afc..c60b8a64176 100755
--- a/engines/twp/squirrel/sqvm.cpp
+++ b/engines/twp/squirrel/sqvm.cpp
@@ -1045,7 +1045,7 @@ exception_restore:
                 }
                               }
                 continue;
-            case _OP_THROW: Raise_Error(TARGET); SQ_THROW(); continue;
+            case _OP_THROW: Raise_Error(TARGET); SQ_THROW();
             case _OP_NEWSLOTA:
                 _GUARD(NewSlotA(STK(arg1),STK(arg2),STK(arg3),(arg0&NEW_SLOT_ATTRIBUTES_FLAG) ? STK(arg2-1) : SQObjectPtr(),(arg0&NEW_SLOT_STATIC_FLAG)?true:false,false));
                 continue;


Commit: 5188993440ce71ea346d5e56c31c67bbba246a2a
    https://github.com/scummvm/scummvm/commit/5188993440ce71ea346d5e56c31c67bbba246a2a
Author: scemino (scemino74 at gmail.com)
Date: 2024-04-05T23:05:04+02:00

Commit Message:
TWP: Fix invalid type in argument to printf format specifier in squirrel.

Coverity CID 1540564

Changed paths:
    engines/twp/squirrel/sqvm.cpp


diff --git a/engines/twp/squirrel/sqvm.cpp b/engines/twp/squirrel/sqvm.cpp
index c60b8a64176..6a9aa25a1a4 100755
--- a/engines/twp/squirrel/sqvm.cpp
+++ b/engines/twp/squirrel/sqvm.cpp
@@ -177,7 +177,7 @@ bool SQVM::ArithMetaMethod(SQInteger op,const SQObjectPtr &o1,const SQObjectPtr
             return CallMetaMethod(closure,mm,2,dest);
         }
     }
-    Raise_Error(_SC("arith op %c on between '%s' and '%s'"),op,GetTypeName(o1),GetTypeName(o2));
+    Raise_Error(_SC("arith op %c on between '%s' and '%s'"),(char)op,GetTypeName(o1),GetTypeName(o2));
     return false;
 }
 




More information about the Scummvm-git-logs mailing list