[Scummvm-cvs-logs] SF.net SVN: scummvm:[44864] scummvm/branches/branch-1-0-0/engines/cruise

dreammaster at users.sourceforge.net dreammaster at users.sourceforge.net
Sat Oct 10 07:33:46 CEST 2009


Revision: 44864
          http://scummvm.svn.sourceforge.net/scummvm/?rev=44864&view=rev
Author:   dreammaster
Date:     2009-10-10 05:33:45 +0000 (Sat, 10 Oct 2009)

Log Message:
-----------
Backport of all the memory leak fixes

Modified Paths:
--------------
    scummvm/branches/branch-1-0-0/engines/cruise/actor.cpp
    scummvm/branches/branch-1-0-0/engines/cruise/background.cpp
    scummvm/branches/branch-1-0-0/engines/cruise/backgroundIncrust.cpp
    scummvm/branches/branch-1-0-0/engines/cruise/cell.cpp
    scummvm/branches/branch-1-0-0/engines/cruise/cruise.cpp
    scummvm/branches/branch-1-0-0/engines/cruise/cruise.h
    scummvm/branches/branch-1-0-0/engines/cruise/cruise_main.cpp
    scummvm/branches/branch-1-0-0/engines/cruise/cruise_main.h
    scummvm/branches/branch-1-0-0/engines/cruise/ctp.cpp
    scummvm/branches/branch-1-0-0/engines/cruise/dataLoader.cpp
    scummvm/branches/branch-1-0-0/engines/cruise/detection.cpp
    scummvm/branches/branch-1-0-0/engines/cruise/font.cpp
    scummvm/branches/branch-1-0-0/engines/cruise/function.cpp
    scummvm/branches/branch-1-0-0/engines/cruise/gfxModule.cpp
    scummvm/branches/branch-1-0-0/engines/cruise/mainDraw.cpp
    scummvm/branches/branch-1-0-0/engines/cruise/menu.cpp
    scummvm/branches/branch-1-0-0/engines/cruise/object.cpp
    scummvm/branches/branch-1-0-0/engines/cruise/overlay.cpp
    scummvm/branches/branch-1-0-0/engines/cruise/overlay.h
    scummvm/branches/branch-1-0-0/engines/cruise/perso.cpp
    scummvm/branches/branch-1-0-0/engines/cruise/saveload.cpp
    scummvm/branches/branch-1-0-0/engines/cruise/script.cpp
    scummvm/branches/branch-1-0-0/engines/cruise/script.h
    scummvm/branches/branch-1-0-0/engines/cruise/sound.cpp
    scummvm/branches/branch-1-0-0/engines/cruise/staticres.cpp
    scummvm/branches/branch-1-0-0/engines/cruise/staticres.h
    scummvm/branches/branch-1-0-0/engines/cruise/volume.cpp

Modified: scummvm/branches/branch-1-0-0/engines/cruise/actor.cpp
===================================================================
--- scummvm/branches/branch-1-0-0/engines/cruise/actor.cpp	2009-10-10 05:08:56 UTC (rev 44863)
+++ scummvm/branches/branch-1-0-0/engines/cruise/actor.cpp	2009-10-10 05:33:45 UTC (rev 44864)
@@ -599,7 +599,7 @@
 			return -1;
 		}
 
-		perso = persoTable[i] = (persoStruct *) malloc(sizeof(persoStruct));
+		perso = persoTable[i] = (persoStruct *) MemAlloc(sizeof(persoStruct));
 
 		ptr = perso->solution[0];
 
@@ -663,7 +663,7 @@
 		return (-1);
 	}
 
-	perso = persoTable[num] = (persoStruct *) malloc(sizeof(persoStruct));
+	perso = persoTable[num] = (persoStruct *) MemAlloc(sizeof(persoStruct));
 
 	perso->inc_jo1 = stepX;
 	perso->inc_jo2 = stepY;

Modified: scummvm/branches/branch-1-0-0/engines/cruise/background.cpp
===================================================================
--- scummvm/branches/branch-1-0-0/engines/cruise/background.cpp	2009-10-10 05:08:56 UTC (rev 44863)
+++ scummvm/branches/branch-1-0-0/engines/cruise/background.cpp	2009-10-10 05:33:45 UTC (rev 44864)
@@ -107,7 +107,7 @@
 	ptrToFree = gfxModuleData.pPage10;
 	if (loadFileSub1(&ptrToFree, name, NULL) < 0) {
 		if (ptrToFree != gfxModuleData.pPage10)
-			free(ptrToFree);
+			MemFree(ptrToFree);
 
 		return (-18);
 	}
@@ -208,6 +208,7 @@
 		loadCVT(&ptr2);
 	}
 
+	MemFree(ptrToFree);
 
 	if (name != backgroundTable[idx].name)
 		strcpy(backgroundTable[idx].name, name);

Modified: scummvm/branches/branch-1-0-0/engines/cruise/backgroundIncrust.cpp
===================================================================
--- scummvm/branches/branch-1-0-0/engines/cruise/backgroundIncrust.cpp	2009-10-10 05:08:56 UTC (rev 44863)
+++ scummvm/branches/branch-1-0-0/engines/cruise/backgroundIncrust.cpp	2009-10-10 05:33:45 UTC (rev 44864)
@@ -49,7 +49,7 @@
 	pIncrust->savedX = X;
 	pIncrust->savedY = Y;
 
-	pIncrust->ptr = (uint8*)malloc(width * height);
+	pIncrust->ptr = (uint8*)MemAlloc(width * height);
 	for (int i = 0; i < height; i++) {
 		for (int j = 0; j < width; j++) {
 			int xp = j + X;
@@ -239,9 +239,9 @@
 		backgroundIncrustStruct *pNext = pCurrent->next;
 
 		if (pCurrent->ptr)
-			free(pCurrent->ptr);
+			MemFree(pCurrent->ptr);
 
-		free(pCurrent);
+		MemFree(pCurrent);
 
 		pCurrent = pNext;
 	}
@@ -292,10 +292,10 @@
 			bx->prev = pCurrent->next;
 
 			if (pCurrent->ptr) {
-				free(pCurrent->ptr);
+				MemFree(pCurrent->ptr);
 			}
 
-			free(pCurrent);
+			MemFree(pCurrent);
 
 			pCurrent = pNext;
 		} else {

Modified: scummvm/branches/branch-1-0-0/engines/cruise/cell.cpp
===================================================================
--- scummvm/branches/branch-1-0-0/engines/cruise/cell.cpp	2009-10-10 05:08:56 UTC (rev 44863)
+++ scummvm/branches/branch-1-0-0/engines/cruise/cell.cpp	2009-10-10 05:33:45 UTC (rev 44864)
@@ -39,9 +39,9 @@
 void freeMessageList(cellStruct *objPtr) {
 	/*	if (objPtr) {
 			 if (objPtr->next)
-			 free(objPtr->next);
+			 MemFree(objPtr->next);
 
-			free(objPtr);
+			MemFree(objPtr);
 		} */
 }
 
@@ -143,7 +143,7 @@
 
 	var_2 = si;
 
-	pNewElement = (cellStruct *) malloc(sizeof(cellStruct));
+	pNewElement = (cellStruct *) MemAlloc(sizeof(cellStruct));
 	memset(pNewElement, 0, sizeof(cellStruct));
 
 	pNewElement->next = pObject->next;
@@ -218,11 +218,11 @@
 
 			dx->prev = si->prev;
 
-			// TODO: complelty wrong
-			//freeMessageList(si);
+			// Free the entry
+			if (si->gfxPtr)
+				freeGfx(si->gfxPtr);
+			MemFree(si);
 
-			free(si);
-
 			currentObj = dx;
 		} else {
 			currentObj = si->next;
@@ -339,4 +339,4 @@
 	}
 }
 
-} // End of namespace Cruise
+} // End of namespace Cruise
\ No newline at end of file

Modified: scummvm/branches/branch-1-0-0/engines/cruise/cruise.cpp
===================================================================
--- scummvm/branches/branch-1-0-0/engines/cruise/cruise.cpp	2009-10-10 05:08:56 UTC (rev 44863)
+++ scummvm/branches/branch-1-0-0/engines/cruise/cruise.cpp	2009-10-10 05:33:45 UTC (rev 44864)
@@ -65,9 +65,11 @@
 	_debugger = new Debugger();
 	_sound = new PCSound(_mixer, this);
 
-	syst->getEventManager()->registerRandomSource(_rnd, "cruise");
+	g_system->getEventManager()->registerRandomSource(_rnd, "cruise");
 }
 
+extern void listMemory();
+
 CruiseEngine::~CruiseEngine() {
 	delete _debugger;
 	delete _sound;
@@ -86,8 +88,10 @@
 	// Initialize backend
 	initGraphics(320, 200, false);
 
-	if (!loadLanguageStrings())
-		return Common::kUnknownError;
+	if (!loadLanguageStrings()) {
+		error("Could not setup language data for your version");
+		return Common::kUnknownError;	// for compilers that don't support NORETURN
+	}
 
 	initialize();
 
@@ -132,7 +136,7 @@
 	// Clear any backgrounds
 	for (int i = 0; i < 8; ++i) {
 		if (backgroundScreens[i]) {
-			free(backgroundScreens[i]);
+			MemFree(backgroundScreens[i]);
 			backgroundScreens[i] = NULL;
 		}
 	}
@@ -143,7 +147,7 @@
 
 	// Give preference to a language file
 	if (f.open("DELPHINE.LNG")) {
-		char *data = (char *)malloc(f.size());
+		char *data = (char *)MemAlloc(f.size());
 		f.read(data, f.size());
 		char *ptr = data;
 
@@ -161,19 +165,23 @@
 		}
 
 		f.close();
+		MemFree(data);
 
 	} else {
 		// Try and use one of the pre-defined language lists
 		const char **p = NULL;
 		switch (getLanguage()) {
-			case Common::EN_ANY:
-				p = englishLanguageStrings;
-				break;
-			case Common::FR_FRA:
-				p = frenchLanguageStrings;
-				break;
-			default:
-				return false;
+		case Common::EN_ANY:
+			p = englishLanguageStrings;
+			break;
+		case Common::FR_FRA:
+			p = frenchLanguageStrings;
+			break;
+		case Common::DE_DEU:
+			p = germanLanguageStrings;
+			break;
+		default:
+			return false;
 		}
 
 		// Load in the located language set

Modified: scummvm/branches/branch-1-0-0/engines/cruise/cruise.h
===================================================================
--- scummvm/branches/branch-1-0-0/engines/cruise/cruise.h	2009-10-10 05:08:56 UTC (rev 44863)
+++ scummvm/branches/branch-1-0-0/engines/cruise/cruise.h	2009-10-10 05:33:45 UTC (rev 44864)
@@ -83,6 +83,7 @@
 	virtual bool hasFeature(EngineFeature f) const;
 
 	int getGameType() const;
+	const char *getGameId() const;
 	uint32 getFeatures() const;
 	Common::Language getLanguage() const;
 	Common::Platform getPlatform() const;

Modified: scummvm/branches/branch-1-0-0/engines/cruise/cruise_main.cpp
===================================================================
--- scummvm/branches/branch-1-0-0/engines/cruise/cruise_main.cpp	2009-10-10 05:08:56 UTC (rev 44863)
+++ scummvm/branches/branch-1-0-0/engines/cruise/cruise_main.cpp	2009-10-10 05:33:45 UTC (rev 44864)
@@ -42,6 +42,14 @@
 
 gfxEntryStruct* linkedMsgList = NULL;
 
+void *MemoryAlloc(uint32 size, bool clearFlag) {
+	byte *result = (byte *)malloc(size);
+	if (clearFlag)
+		memset(result, 0, size);
+
+	return result;
+}
+
 void drawBlackSolidBoxSmall() {
 //  gfxModuleData.drawSolidBox(64,100,256,117,0);
 	drawSolidBox(64, 100, 256, 117, 0);
@@ -139,7 +147,7 @@
 
 	for (i = 0; i < NUM_FILE_ENTRIES; i++) {
 		if (filesDatabase[i].subData.ptr) {
-			free(filesDatabase[i].subData.ptr);
+			MemFree(filesDatabase[i].subData.ptr);
 		}
 
 		filesDatabase[i].subData.ptr = NULL;
@@ -156,6 +164,17 @@
 }
 
 void resetActorPtr(actorStruct *ptr) {
+	actorStruct *p = ptr;
+
+	if (p->next) {
+		p = p->next;
+		do {
+			actorStruct *pNext = p->next;
+			MemFree(p);
+			p = pNext;
+		} while (p);
+	}
+
 	ptr->next = NULL;
 	ptr->prev = NULL;
 }
@@ -317,8 +336,7 @@
 
 	unpackedSize = loadFileVar1 = volumePtrToFileDescriptor[fileIdx].extSize + 2;
 
-	// TODO: here, can unpack in gfx module buffer
-	unpackedBuffer = (uint8 *) mallocAndZero(unpackedSize);
+	unpackedBuffer = (uint8 *)mallocAndZero(unpackedSize);
 
 	if (!unpackedBuffer) {
 		return (-2);
@@ -337,7 +355,7 @@
 
 		delphineUnpack(unpackedBuffer, pakedBuffer, volumePtrToFileDescriptor[fileIdx].size);
 
-		free(pakedBuffer);
+		MemFree(pakedBuffer);
 	} else {
 		loadPackedFileToMem(fileIdx, unpackedBuffer);
 	}
@@ -354,7 +372,9 @@
 	if (!filesDatabase[entryNumber].subData.ptr)
 		return;
 
-	free(filesDatabase[entryNumber].subData.ptr);
+	MemFree(filesDatabase[entryNumber].subData.ptr);
+	if (filesDatabase[entryNumber].subData.ptrMask)
+		MemFree(filesDatabase[entryNumber].subData.ptrMask);
 
 	filesDatabase[entryNumber].subData.ptr = NULL;
 	filesDatabase[entryNumber].subData.ptrMask = NULL;
@@ -366,7 +386,6 @@
 	filesDatabase[entryNumber].subData.resourceType = 0;
 	filesDatabase[entryNumber].subData.compression = 0;
 	filesDatabase[entryNumber].subData.name[0] = 0;
-
 }
 
 uint8 *mainProc14(uint16 overlay, uint16 idx) {
@@ -530,11 +549,10 @@
 		if (ptr->scriptNumber == -1) {
 			oldPtr->nextScriptPtr = ptr->nextScriptPtr;
 
-			if (ptr->var6 && ptr->varA) {
-				//  free(ptr->var6);
-			}
+			if (ptr->data)
+				MemFree(ptr->data);
 
-			free(ptr);
+			MemFree(ptr);
 
 			ptr = oldPtr->nextScriptPtr;
 		} else {
@@ -546,6 +564,26 @@
 	return (0);
 }
 
+void removeAllScripts(scriptInstanceStruct *ptrHandle) {
+	scriptInstanceStruct *ptr = ptrHandle->nextScriptPtr;	// can't destruct the head
+	scriptInstanceStruct *oldPtr = ptrHandle;
+
+	if (!ptr)
+		return;
+
+	do {
+		oldPtr->nextScriptPtr = ptr->nextScriptPtr;
+
+		if (ptr->data)
+			MemFree(ptr->data);
+
+		MemFree(ptr);
+
+		ptr = oldPtr->nextScriptPtr;
+	} while (ptr);
+}
+
+
 bool testMask(int x, int y, unsigned char* pData, int stride) {
 	unsigned char* ptr = y * stride + x / 8 + pData;
 
@@ -701,7 +739,7 @@
 void *allocAndZero(int size) {
 	void *ptr;
 
-	ptr = malloc(size);
+	ptr = MemAlloc(size);
 	memset(ptr, 0, size);
 
 	return ptr;
@@ -1905,15 +1943,17 @@
 		}
 
 	} while (!playerDontAskQuit && quitValue2 && quitValue != 7);
-}
 
-void *mallocAndZero(int32 size) {
-	void *ptr;
-
-	ptr = malloc(size);
-	assert(ptr);
-	memset(ptr, 0, size);
-	return ptr;
+	// Free data
+	removeAllScripts(&relHead);
+	removeAllScripts(&procHead);
+	resetActorPtr(&actorHead);
+	freeOverlayTable();
+	closeCnf();
+	closeBase();
+	resetFileEntryRange(0, NUM_FILE_ENTRIES);
+	freeObjectList(&cellHead);
+	freeBackgroundIncrustList(&backgroundIncrustHead);
 }
 
 } // End of namespace Cruise

Modified: scummvm/branches/branch-1-0-0/engines/cruise/cruise_main.h
===================================================================
--- scummvm/branches/branch-1-0-0/engines/cruise/cruise_main.h	2009-10-10 05:08:56 UTC (rev 44863)
+++ scummvm/branches/branch-1-0-0/engines/cruise/cruise_main.h	2009-10-10 05:33:45 UTC (rev 44864)
@@ -92,7 +92,6 @@
 ovlData3Struct *getOvlData3Entry(int32 scriptNumber, int32 param);
 ovlData3Struct *scriptFunc1Sub2(int32 scriptNumber, int32 param);
 void resetFileEntry(int32 entryNumber);
-void *mallocAndZero(int32 size);
 uint8 *mainProc14(uint16 overlay, uint16 idx);
 void printInfoBlackBox(const char *string);
 void waitForPlayerInput(void);
@@ -115,7 +114,16 @@
 int removeFinishedScripts(scriptInstanceStruct *ptrHandle);
 void initBigVar3(void);
 void resetActorPtr(actorStruct *ptr);
+void removeAllScripts(scriptInstanceStruct *ptrHandle);
 
+void MemoryList();
+void *MemoryAlloc(uint32 size, bool clearFlag);
+void MemoryFree(void *v);
+
+#define mallocAndZero(size) MemoryAlloc(size, true)
+#define MemAlloc(size) MemoryAlloc(size, false)
+#define MemFree(v) free(v)
+
 } // End of namespace Cruise
 
 #endif

Modified: scummvm/branches/branch-1-0-0/engines/cruise/ctp.cpp
===================================================================
--- scummvm/branches/branch-1-0-0/engines/cruise/ctp.cpp	2009-10-10 05:08:56 UTC (rev 44863)
+++ scummvm/branches/branch-1-0-0/engines/cruise/ctp.cpp	2009-10-10 05:33:45 UTC (rev 44864)
@@ -228,7 +228,7 @@
 	}
 	uint8* ptr = NULL;
 	if (!loadFileSub1(&ptr, ctpName, 0)) {
-		free(ptr);
+		MemFree(ptr);
 		return (-18);
 	}
 
@@ -239,7 +239,7 @@
 	dataPointer += 4;
 
 	if (strcmp(fileType, "CTP ")) {
-		free(ptr);
+		MemFree(ptr);
 		return (0);
 	}
 
@@ -312,7 +312,7 @@
 		walkboxZoom[i] = (int16)READ_BE_UINT16(dataPointer);
 		dataPointer += 2;
 	}
-	free(ptr);
+	MemFree(ptr);
 
 	if (ctpName != currentCtpName)
 		strcpy(currentCtpName, ctpName);

Modified: scummvm/branches/branch-1-0-0/engines/cruise/dataLoader.cpp
===================================================================
--- scummvm/branches/branch-1-0-0/engines/cruise/dataLoader.cpp	2009-10-10 05:08:56 UTC (rev 44863)
+++ scummvm/branches/branch-1-0-0/engines/cruise/dataLoader.cpp	2009-10-10 05:33:45 UTC (rev 44864)
@@ -58,7 +58,7 @@
 		error("Unkown gfx format %d", format);
 	}
 
-	uint8 *buffer = (uint8 *)malloc(spriteSize);
+	uint8 *buffer = (uint8 *)MemAlloc(spriteSize);
 
 	// Perform format specific decoding
 	switch (format) {
@@ -131,7 +131,7 @@
 	}
 	}
 
-	free(pCurrentFileEntry->subData.ptr);
+	MemFree(pCurrentFileEntry->subData.ptr);
 	pCurrentFileEntry->subData.ptr = buffer;
 }
 
@@ -167,12 +167,14 @@
 }
 
 int createResFileEntry(int width, int height, int size, int resType) {
+	error("Executing untested createResFileEntry");
+	return 0;	// for compilers that don't support NORETURN
+
+#if 0
 	int i;
 	int entryNumber;
 	int div = 0;
 
-	error("Executing untested createResFileEntry");
-
 	for (i = 0; i < NUM_FILE_ENTRIES; i++) {
 		if (!filesDatabase[i].subData.ptr)
 			break;
@@ -206,6 +208,7 @@
 	filesDatabase[entryNumber].subData.index = -1;
 
 	return entryNumber;
+#endif
 }
 
 fileTypeEnum getFileType(const char *name) {
@@ -304,6 +307,8 @@
 		error("Unknown fileType in loadFileRange");
 	}
 
+	MemFree(ptr);
+
 	return 0;
 }
 
@@ -346,6 +351,8 @@
 		error("Unknown fileType in loadFullBundle");
 	}
 
+	MemFree(ptr);
+
 	return 0;
 }
 

Modified: scummvm/branches/branch-1-0-0/engines/cruise/detection.cpp
===================================================================
--- scummvm/branches/branch-1-0-0/engines/cruise/detection.cpp	2009-10-10 05:08:56 UTC (rev 44863)
+++ scummvm/branches/branch-1-0-0/engines/cruise/detection.cpp	2009-10-10 05:33:45 UTC (rev 44864)
@@ -26,7 +26,7 @@
 
 
 #include "base/plugins.h"
-
+#include "common/savefile.h"
 #include "engines/advancedDetector.h"
 
 #include "cruise/cruise.h"
@@ -41,6 +41,10 @@
 	uint32 features;
 };
 
+const char *CruiseEngine::getGameId() const {
+	return _gameDescription->desc.gameid;
+}
+
 int CruiseEngine::getGameType() const {
 	return _gameDescription->gameType;
 }
@@ -148,6 +152,19 @@
 	{
 		{
 			"cruise",
+			0,
+			AD_ENTRY1("D1", "70f42a21cc257b01d58667853335f4f1"),
+			Common::DE_DEU,
+			Common::kPlatformAmiga,
+			ADGF_NO_FLAGS,
+			GUIO_NONE
+		},
+		GType_CRUISE,
+		0,
+	},
+	{
+		{
+			"cruise",
 			"256 colors",
 			AD_ENTRY1("D1", "e19a4ab2e24a69087e4ea994a5506231"),
 			Common::IT_ITA,

Modified: scummvm/branches/branch-1-0-0/engines/cruise/font.cpp
===================================================================
--- scummvm/branches/branch-1-0-0/engines/cruise/font.cpp	2009-10-10 05:08:56 UTC (rev 44863)
+++ scummvm/branches/branch-1-0-0/engines/cruise/font.cpp	2009-10-10 05:33:45 UTC (rev 44864)
@@ -169,7 +169,7 @@
 }
 
 void freeSystem(void) {
-	free(_systemFNT);
+	MemFree(_systemFNT);
 }
 
 void bigEndianShortToNative(void *var) {
@@ -349,7 +349,7 @@
 	    (uint8 *) mallocAndZero(stringRenderBufferSize);
 	resetBitmap(currentStrRenderBuffer, stringRenderBufferSize);
 
-	generatedGfxEntry = (gfxEntryStruct *) malloc(sizeof(gfxEntryStruct));
+	generatedGfxEntry = (gfxEntryStruct *) MemAlloc(sizeof(gfxEntryStruct));
 	generatedGfxEntry->imagePtr = currentStrRenderBuffer;
 	generatedGfxEntry->imageSize = stringRenderBufferSize / 2;
 	generatedGfxEntry->fontIndex = fontFileIndex;
@@ -430,11 +430,11 @@
 
 void freeGfx(gfxEntryStruct *pGfx) {
 	if (pGfx->imagePtr) {
-		free(pGfx->imagePtr);
+		MemFree(pGfx->imagePtr);
 	}
 
-	free(pGfx);
+	MemFree(pGfx);
 }
 
 
-} // End of namespace Cruise
+} // End of namespace Cruise
\ No newline at end of file

Modified: scummvm/branches/branch-1-0-0/engines/cruise/function.cpp
===================================================================
--- scummvm/branches/branch-1-0-0/engines/cruise/function.cpp	2009-10-10 05:08:56 UTC (rev 44863)
+++ scummvm/branches/branch-1-0-0/engines/cruise/function.cpp	2009-10-10 05:33:45 UTC (rev 44864)
@@ -276,8 +276,9 @@
 		cellStruct *pNext = pCurrent->next;
 
 		if (pCurrent->freeze == 0) {
-			free(pCurrent->gfxPtr);
-			free(pCurrent);
+			if (pCurrent->gfxPtr)
+				freeGfx(pCurrent->gfxPtr);
+			MemFree(pCurrent);
 		}
 
 		var_2 = 1;
@@ -938,7 +939,7 @@
 
 	if (backgroundIdx > 0 && backgroundIdx < 8) {
 		if (backgroundScreens[backgroundIdx])
-			free(backgroundScreens[backgroundIdx]);
+			MemFree(backgroundScreens[backgroundIdx]);
 
 		if (masterScreen == backgroundIdx) {
 			masterScreen = 0;
@@ -1106,7 +1107,7 @@
 		return NULL;
 	}
 
-	actorStruct *pNewElement = (actorStruct *) malloc(sizeof(actorStruct));
+	actorStruct *pNewElement = (actorStruct *) MemAlloc(sizeof(actorStruct));
 	if (!pNewElement)
 		return NULL;
 
@@ -1180,7 +1181,7 @@
 			if (pl->pathId >= 0)
 				freePerso(pl->pathId);
 
-			free(pl);
+			MemFree(pl);
 			pl = pl4;
 		} else {
 			pl2 = pl;

Modified: scummvm/branches/branch-1-0-0/engines/cruise/gfxModule.cpp
===================================================================
--- scummvm/branches/branch-1-0-0/engines/cruise/gfxModule.cpp	2009-10-10 05:08:56 UTC (rev 44863)
+++ scummvm/branches/branch-1-0-0/engines/cruise/gfxModule.cpp	2009-10-10 05:33:45 UTC (rev 44864)
@@ -26,6 +26,8 @@
 
 #include "common/system.h"
 #include "common/endian.h"
+#include "common/list.h"
+#include "common/rect.h"
 
 #include "cruise/cruise.h"
 #include "cruise/cruise_main.h"
@@ -45,6 +47,8 @@
 RectList _dirtyRects;
 RectList _priorFrameRects;
 
+bool _dirtyRectScreen = false;
+
 gfxModuleDataStruct gfxModuleData = {
 	0,			// use Tandy
 	0,			// use EGA

Modified: scummvm/branches/branch-1-0-0/engines/cruise/mainDraw.cpp
===================================================================
--- scummvm/branches/branch-1-0-0/engines/cruise/mainDraw.cpp	2009-10-10 05:08:56 UTC (rev 44863)
+++ scummvm/branches/branch-1-0-0/engines/cruise/mainDraw.cpp	2009-10-10 05:33:45 UTC (rev 44864)
@@ -1222,7 +1222,7 @@
 	cellStruct* plWork = currentObjPtr;
 	int workBufferSize = height * (width / 8);
 
-	unsigned char* workBuf = (unsigned char*)malloc(workBufferSize);
+	unsigned char* workBuf = (unsigned char*)MemAlloc(workBufferSize);
 	memcpy(workBuf, dataBuf, workBufferSize);
 
 	int numPasses = 0;
@@ -1261,7 +1261,7 @@
 		}
 	}
 
-	free(workBuf);
+	MemFree(workBuf);
 }
 
 #ifdef _DEBUG

Modified: scummvm/branches/branch-1-0-0/engines/cruise/menu.cpp
===================================================================
--- scummvm/branches/branch-1-0-0/engines/cruise/menu.cpp	2009-10-10 05:08:56 UTC (rev 44863)
+++ scummvm/branches/branch-1-0-0/engines/cruise/menu.cpp	2009-10-10 05:33:45 UTC (rev 44864)
@@ -27,14 +27,19 @@
 #include "cruise/cruise_main.h"
 #include "cruise/staticres.h"
 
+#include "engines/metaengine.h"
+#include "gui/saveload.h"
+
 namespace Cruise {
 
+extern int currentMouseButton;
+
 menuStruct *menuTable[8];
 
 menuStruct *createMenu(int X, int Y, const char *menuName) {
 	menuStruct *entry;
 
-	entry = (menuStruct *) malloc(sizeof(menuStruct));
+	entry = (menuStruct *) MemAlloc(sizeof(menuStruct));
 	ASSERT(entry);
 
 	entry->x = X - 160 / 2;
@@ -202,6 +207,38 @@
 	return -1;
 }
 
+static void handleSaveLoad(bool saveFlag) {
+	const EnginePlugin *plugin = 0;
+	EngineMan.findGame(_vm->getGameId(), &plugin);
+	GUI::SaveLoadChooser *dialog;
+	if (saveFlag)
+		dialog = new GUI::SaveLoadChooser("Save game:", "Save");
+	else
+		dialog = new GUI::SaveLoadChooser("Load game:", "Load");
+
+	dialog->setSaveMode(saveFlag);
+	int slot = dialog->runModal(plugin, ConfMan.getActiveDomainName());
+
+	if (slot >= 0) {
+		if (!saveFlag)
+			_vm->loadGameState(slot);
+		else {
+			Common::String result(dialog->getResultString());
+			if (result.empty()) {
+				// If the user was lazy and entered no save name, come up with a default name.
+				char buf[20];
+				snprintf(buf, 20, "Save %d", slot + 1);
+
+				_vm->saveGameState(slot, buf);
+			} else {
+				_vm->saveGameState(slot, result.c_str());
+			}
+		}
+	}
+
+	delete dialog;
+}
+
 int playerMenu(int menuX, int menuY) {
 	int retourMenu;
 	//int restartGame = 0;
@@ -251,15 +288,14 @@
 
 		freeMenu(menuTable[0]);
 		menuTable[0] = NULL;
+		currentMouseButton = 0;
 
 		switch (retourMenu) {
 		case 3: // select save drive
 			break;
 		case 4: // save
-			saveSavegameData(0, "Default Save");
-			break;
 		case 5: // load
-			loadSavegameData(0);
+			handleSaveLoad(retourMenu == 4);
 			break;
 		case 6: // restart
 			_vm->sound().fadeOutMusic();
@@ -293,7 +329,7 @@
 
 			nextSub = pSub->pNext;
 
-			free(pSub);
+			MemFree(pSub);
 
 			pSub = nextSub;
 		}
@@ -302,13 +338,13 @@
 			freeGfx(pElement->gfx);
 		}
 
-		free(pElement);
+		MemFree(pElement);
 
 		pElement = next;
 	}
 
 	freeGfx(pMenu->gfx);
-	free(pMenu);
+	MemFree(pMenu);
 }
 
-} // End of namespace Cruise
+} // End of namespace Cruise
\ No newline at end of file

Modified: scummvm/branches/branch-1-0-0/engines/cruise/object.cpp
===================================================================
--- scummvm/branches/branch-1-0-0/engines/cruise/object.cpp	2009-10-10 05:08:56 UTC (rev 44863)
+++ scummvm/branches/branch-1-0-0/engines/cruise/object.cpp	2009-10-10 05:33:45 UTC (rev 44864)
@@ -118,7 +118,6 @@
 
 	if (!ptr) {
 		return;
-		ASSERT(0);
 	}
 	//overlayTable[param1].ovlData
 

Modified: scummvm/branches/branch-1-0-0/engines/cruise/overlay.cpp
===================================================================
--- scummvm/branches/branch-1-0-0/engines/cruise/overlay.cpp	2009-10-10 05:08:56 UTC (rev 44863)
+++ scummvm/branches/branch-1-0-0/engines/cruise/overlay.cpp	2009-10-10 05:33:45 UTC (rev 44864)
@@ -46,6 +46,84 @@
 	numOfLoadedOverlay = 1;
 }
 
+void freeOverlayTable() {
+	for (int i = 0; i < 90; i++) {
+		if (overlayTable[i].alreadyLoaded)
+			freeOverlay(i);
+	}
+}
+
+int freeOverlay(int overlayIdx) {
+	ovlDataStruct *ovlDataPtr;
+	int i;
+
+	if (overlayTable[overlayIdx].alreadyLoaded == 0)
+		return -4;
+
+	overlayTable[overlayIdx].alreadyLoaded = 0;
+
+	ovlDataPtr = overlayTable[overlayIdx].ovlData;
+
+	if (!ovlDataPtr)
+		return -4;
+
+
+	/*
+	  if (overlayTable[overlayIdx].var1E) {
+	    MemFree(overlayTable[overlayIdx].var1E);
+	    overlayTable[overlayIdx].var1E = NULL;
+	  }
+
+	  if (overlayTable[overlayIdx].var16) {
+	    MemFree(overlayTable[overlayIdx].var16);
+	    overlayTable[overlayIdx].var16 = NULL;
+	  } */
+
+	removeScript(overlayIdx, -1, &procHead);
+	removeScript(overlayIdx, -1, &procHead);
+
+	removeScript(overlayIdx, -1, &relHead);
+	removeScript(overlayIdx, -1, &relHead);
+
+	if (ovlDataPtr->stringTable) {
+		for (i = 0; i < ovlDataPtr->numStrings; ++i)
+			MemFree(ovlDataPtr->stringTable[i].string);
+		MemFree(ovlDataPtr->stringTable);
+	}
+	if (ovlDataPtr->arrayProc) {
+		ovlData3Struct *tempPtr = ovlDataPtr->arrayProc;
+		for (i = 0; i < ovlDataPtr->numProc; ++i, ++tempPtr)
+			MemFree(tempPtr->dataPtr);
+		MemFree(ovlDataPtr->arrayProc);
+	}
+	if (ovlDataPtr->ptr1) {
+		ovlData3Struct *tempPtr = (ovlData3Struct *)ovlDataPtr->ptr1;
+		for (i = 0; i < ovlDataPtr->numRel; ++i, ++tempPtr)
+			MemFree(tempPtr->dataPtr);
+		MemFree(ovlDataPtr->ptr1);
+	}
+
+	MemFree(ovlDataPtr->arraySymbGlob);
+	MemFree(ovlDataPtr->arrayNameSymbGlob);
+	MemFree(ovlDataPtr->data4Ptr);
+	MemFree(ovlDataPtr->arrayMsgRelHeader);
+	MemFree(ovlDataPtr->ptr8);
+	MemFree(ovlDataPtr->arrayObject);
+	MemFree(ovlDataPtr->arrayObjVar);
+	MemFree(ovlDataPtr->arrayStates);
+	MemFree(ovlDataPtr->nameVerbGlob);
+	MemFree(ovlDataPtr->arrayNameObj);
+	MemFree(ovlDataPtr->arrayRelocGlob);
+	MemFree(ovlDataPtr->arrayNameRelocGlob);
+	
+	MemFree(ovlDataPtr);
+	overlayTable[overlayIdx].ovlData = NULL;
+
+	debug(1, "freeOverlay: finish !");
+
+	return 0;
+}
+
 int loadOverlay(const char *scriptName) {
 	int newNumberOfScript;
 	bool scriptNotLoadedBefore;
@@ -107,8 +185,9 @@
 
 	unpackedSize = volumePtrToFileDescriptor[fileIdx].extSize + 2;
 
-	// TODO: here, can unpack in gfx module buffer
-	unpackedBuffer = (byte *)mallocAndZero(unpackedSize);
+	// This memory block will be later passed to a MemoryReadStream, which will dispose of it
+	unpackedBuffer = (byte *)malloc(unpackedSize);
+	memset(unpackedBuffer, 0, unpackedSize);
 
 	if (!unpackedBuffer) {
 		return (-2);
@@ -123,14 +202,15 @@
 
 		delphineUnpack((uint8 *)unpackedBuffer, (const uint8 *)pakedBuffer, volumePtrToFileDescriptor[fileIdx].size);
 
-		free(pakedBuffer);
+		MemFree(pakedBuffer);
 	} else {
 		loadPackedFileToMem(fileIdx, (uint8 *) unpackedBuffer);
 	}
 
 	debug(1, "OVL loading done...");
 
-	Common::MemoryReadStream s(unpackedBuffer, unpackedSize);
+	Common::MemoryReadStream s(unpackedBuffer, unpackedSize, true);
+	unpackedBuffer = NULL;
 
 	ovlData = overlayTable[scriptIdx].ovlData;
 
@@ -486,8 +566,9 @@
 
 		unpackedSize = volumePtrToFileDescriptor[fileIdx].extSize + 2;
 
-		// TODO: here, can unpack in gfx module buffer
-		unpackedBuffer = (byte *)mallocAndZero(unpackedSize);
+		// This memory block will be later passed to a MemoryReadStream, which will dispose of it
+		unpackedBuffer = (byte *)malloc(unpackedSize);
+		memset(unpackedBuffer, 0, unpackedSize);
 
 		if (!unpackedBuffer) {
 			return (-2);
@@ -504,12 +585,13 @@
 
 			delphineUnpack((uint8 *) unpackedBuffer, (const uint8 *)pakedBuffer, volumePtrToFileDescriptor[fileIdx].size);
 
-			free(pakedBuffer);
+			MemFree(pakedBuffer);
 		} else {
 			loadPackedFileToMem(fileIdx, (uint8 *) unpackedBuffer);
 		}
 
-		Common::MemoryReadStream s2(unpackedBuffer, unpackedSize);
+		Common::MemoryReadStream s2(unpackedBuffer, unpackedSize, true);
+		unpackedBuffer = NULL;
 
 		ovlData->specialString1Length = s2.readUint16BE();
 		if (ovlData->specialString1Length) {
@@ -612,43 +694,12 @@
 }
 
 int releaseOverlay(const char *name) {
-	int overlayIdx;
-	ovlDataStruct *ovlDataPtr;
+	int overlayIdx = findOverlayByName(name);
 
-	overlayIdx = findOverlayByName(name);
-
 	if (overlayIdx == -4)
 		return -4;
 
-	if (overlayTable[overlayIdx].alreadyLoaded == 0)
-		return -4;
-
-	overlayTable[overlayIdx].alreadyLoaded = 0;
-
-	ovlDataPtr = overlayTable[overlayIdx].ovlData;
-
-	if (!ovlDataPtr)
-		return -4;
-	/*
-	  if (overlayTable[overlayIdx].var1E) {
-	    free(overlayTable[overlayIdx].var1E);
-	    overlayTable[overlayIdx].var1E = NULL;
-	  }
-
-	  if (overlayTable[overlayIdx].var16) {
-	    free(overlayTable[overlayIdx].var16);
-	    overlayTable[overlayIdx].var16 = NULL;
-	  } */
-
-	removeScript(overlayIdx, -1, &procHead);
-	removeScript(overlayIdx, -1, &procHead);
-
-	removeScript(overlayIdx, -1, &relHead);
-	removeScript(overlayIdx, -1, &relHead);
-
-	debug(1, "releaseOverlay: finish !");
-
-	return 0;
+	return freeOverlay(overlayIdx);
 }
 
 int32 findOverlayByName2(const char *name) {

Modified: scummvm/branches/branch-1-0-0/engines/cruise/overlay.h
===================================================================
--- scummvm/branches/branch-1-0-0/engines/cruise/overlay.h	2009-10-10 05:08:56 UTC (rev 44863)
+++ scummvm/branches/branch-1-0-0/engines/cruise/overlay.h	2009-10-10 05:33:45 UTC (rev 44864)
@@ -184,6 +184,8 @@
 int32 findOverlayByName2(const char * name);
 int findOverlayByName(const char *overlayName);
 int releaseOverlay(const char *name);
+int freeOverlay(int overlayIdx);
+void freeOverlayTable();
 
 } // End of namespace Cruise
 

Modified: scummvm/branches/branch-1-0-0/engines/cruise/perso.cpp
===================================================================
--- scummvm/branches/branch-1-0-0/engines/cruise/perso.cpp	2009-10-10 05:08:56 UTC (rev 44863)
+++ scummvm/branches/branch-1-0-0/engines/cruise/perso.cpp	2009-10-10 05:33:45 UTC (rev 44864)
@@ -34,7 +34,7 @@
 
 void freePerso(int persoIdx) {
 	if (persoTable[persoIdx]) {
-		free(persoTable[persoIdx]);
+		MemFree(persoTable[persoIdx]);
 		persoTable[persoIdx] = NULL;
 	}
 }

Modified: scummvm/branches/branch-1-0-0/engines/cruise/saveload.cpp
===================================================================
--- scummvm/branches/branch-1-0-0/engines/cruise/saveload.cpp	2009-10-10 05:08:56 UTC (rev 44863)
+++ scummvm/branches/branch-1-0-0/engines/cruise/saveload.cpp	2009-10-10 05:33:45 UTC (rev 44864)
@@ -332,7 +332,7 @@
 		s.syncAsSint16LE(ptr->ccr);
 		s.syncAsSint16LE(ptr->scriptOffset);
 		s.syncAsUint32LE(dummyLong);
-		s.syncAsSint16LE(ptr->varA);
+		s.syncAsSint16LE(ptr->dataSize);
 		s.syncAsSint16LE(ptr->scriptNumber);
 		s.syncAsSint16LE(ptr->overlayNumber);
 		s.syncAsSint16LE(ptr->sysKey);
@@ -342,12 +342,12 @@
 		s.syncAsSint16LE(ptr->var18);
 		s.syncAsSint16LE(ptr->var1A);
 
-		s.syncAsSint16LE(ptr->varA);
+		s.syncAsSint16LE(ptr->dataSize);
 
-		if (ptr->varA) {
+		if (ptr->dataSize) {
 			if (s.isLoading())
-				ptr->var6 = (byte *)mallocAndZero(ptr->varA);
-			s.syncBytes(ptr->var6, ptr->varA);
+				ptr->data = (byte *)mallocAndZero(ptr->dataSize);
+			s.syncBytes(ptr->data, ptr->dataSize);
 		}
 
 		if (s.isLoading()) {
@@ -470,7 +470,7 @@
 
 		if (t->saveSize) {
 			if (s.isLoading())
-				t->ptr = (byte *)malloc(t->saveSize);
+				t->ptr = (byte *)MemAlloc(t->saveSize);
 
 			s.syncBytes(t->ptr, t->saveSize);
 		}
@@ -642,7 +642,7 @@
 	for (unsigned long int i = 0; i < 64; i++) {
 		if (strlen(preloadData[i].name)) {
 			if (preloadData[i].ptr) {
-				free(preloadData[i].ptr);
+				MemFree(preloadData[i].ptr);
 				preloadData[i].ptr = NULL;
 			}
 			strcpy(preloadData[i].name, "");
@@ -665,6 +665,7 @@
 
 	resetPreload();
 	freeCTP();
+	freeBackgroundIncrustList(&backgroundIncrustHead);
 
 	freezeCell(&cellHead, -1, -1, -1, -1, -1, 0);
 	// TODO: unfreeze anims
@@ -672,6 +673,8 @@
 	freeObjectList(&cellHead);
 	removeAnimation(&actorHead, -1, -1, -1);
 
+	removeAllScripts(&relHead);
+	removeAllScripts(&procHead);
 	changeScriptParamInList(-1, -1, &procHead, -1, 0);
 	removeFinishedScripts(&procHead);
 
@@ -850,7 +853,7 @@
 
 				if (ovlRestoreData[j]._sBssSize) {
 					if (ovlData->data4Ptr) {
-						free(ovlData->data4Ptr);
+						MemFree(ovlData->data4Ptr);
 					}
 
 					ovlData->data4Ptr = ovlRestoreData[j]._pBss;
@@ -861,7 +864,7 @@
 
 				if (ovlRestoreData[j]._sNumObj) {
 					if (ovlData->arrayObjVar) {
-						free(ovlData->arrayObjVar);
+						MemFree(ovlData->arrayObjVar);
 					}
 
 					ovlData->arrayObjVar = ovlRestoreData[j]._pObj;

Modified: scummvm/branches/branch-1-0-0/engines/cruise/script.cpp
===================================================================
--- scummvm/branches/branch-1-0-0/engines/cruise/script.cpp	2009-10-10 05:08:56 UTC (rev 44863)
+++ scummvm/branches/branch-1-0-0/engines/cruise/script.cpp	2009-10-10 05:33:45 UTC (rev 44864)
@@ -97,15 +97,13 @@
 		if (size == 1) {
 			address += index;
 			pushVar((int16)READ_BE_UINT16(address));
-			return (0);
+			return 0;
 		} else if (size == 2) {
 			pushVar(*address);
-			return (0);
+			return 0;
 		} else {
 			error("Unsupported code in opcodeType0 case 1");
 		}
-
-		return (0);
 	}
 	case 2: {
 		int16 var_16;
@@ -122,15 +120,11 @@
 		}
 
 		pushVar(var_16);
-		return (0);
-
-		break;
+		return 0;
 	}
 	default:
 		error("Unsupported type %d in opcodeType0", currentScriptOpcodeType);
 	}
-
-	return 0;
 }
 
 // save opcode
@@ -546,13 +540,13 @@
 	if (!tempPtr)
 		return (NULL);
 
-	tempPtr->var6 = NULL;
+	tempPtr->data = NULL;
 
 	if (var_C) {
-		tempPtr->var6 = (uint8 *) mallocAndZero(var_C);
+		tempPtr->data = (uint8 *) mallocAndZero(var_C);
 	}
 
-	tempPtr->varA = var_C;
+	tempPtr->dataSize = var_C;
 	tempPtr->nextScriptPtr = NULL;
 	tempPtr->scriptOffset = 0;
 
@@ -574,7 +568,7 @@
 
 	oldTail->nextScriptPtr = tempPtr;	// attache the new node to the list
 
-	return (tempPtr->var6);
+	return (tempPtr->data);
 }
 
 int executeScripts(scriptInstanceStruct *ptr) {
@@ -614,7 +608,7 @@
 
 	currentData3DataPtr = ptr2->dataPtr;
 
-	scriptDataPtrTable[1] = (uint8 *) ptr->var6;
+	scriptDataPtrTable[1] = (uint8 *) ptr->data;
 	scriptDataPtrTable[2] = getDataFromData3(ptr2, 1);
 	scriptDataPtrTable[5] = ovlData->data4Ptr;	// free strings
 	scriptDataPtrTable[6] = ovlData->ptr8;

Modified: scummvm/branches/branch-1-0-0/engines/cruise/script.h
===================================================================
--- scummvm/branches/branch-1-0-0/engines/cruise/script.h	2009-10-10 05:08:56 UTC (rev 44863)
+++ scummvm/branches/branch-1-0-0/engines/cruise/script.h	2009-10-10 05:33:45 UTC (rev 44864)
@@ -39,8 +39,8 @@
 	struct scriptInstanceStruct *nextScriptPtr;
 	int16 ccr;
 	int16 scriptOffset;
-	uint8 *var6;
-	int16 varA;
+	uint8 *data;
+	int16 dataSize;
 	int16 scriptNumber;
 	int16 overlayNumber;
 	int16 sysKey;

Modified: scummvm/branches/branch-1-0-0/engines/cruise/sound.cpp
===================================================================
--- scummvm/branches/branch-1-0-0/engines/cruise/sound.cpp	2009-10-10 05:08:56 UTC (rev 44863)
+++ scummvm/branches/branch-1-0-0/engines/cruise/sound.cpp	2009-10-10 05:33:45 UTC (rev 44864)
@@ -237,7 +237,7 @@
 	if (fileIdx < 0) return NULL;
 
 	int unpackedSize = volumePtrToFileDescriptor[fileIdx].extSize + 2;
-	byte *data = (byte *)malloc(unpackedSize);
+	byte *data = (byte *)MemAlloc(unpackedSize);
 	assert(data);
 
 	if (volumePtrToFileDescriptor[fileIdx].size + 2 != unpackedSize) {
@@ -249,7 +249,7 @@
 
 		delphineUnpack(data, packedBuffer, volumePtrToFileDescriptor[fileIdx].size);
 
-		free(packedBuffer);
+		MemFree(packedBuffer);
 	} else {
 		loadPackedFileToMem(fileIdx, data);
 	}
@@ -601,9 +601,7 @@
 
 PCSoundFxPlayer::~PCSoundFxPlayer() {
 	_driver->setUpdateCallback(NULL, NULL);
-	if (_playing) {
-		stop();
-	}
+	stop();
 }
 
 bool PCSoundFxPlayer::load(const char *song) {
@@ -674,8 +672,8 @@
 			_driver->stopChannel(i);
 		}
 		_driver->stopAll();
-		unload();
 	}
+	unload();
 }
 
 void PCSoundFxPlayer::fadeOut() {
@@ -747,10 +745,10 @@
 
 void PCSoundFxPlayer::unload() {
 	for (int i = 0; i < NUM_INSTRUMENTS; ++i) {
-		free(_instrumentsData[i]);
+		MemFree(_instrumentsData[i]);
 		_instrumentsData[i] = NULL;
 	}
-	free(_sfxData);
+	MemFree(_sfxData);
 	_sfxData = NULL;
 	_songPlayed = true;
 }

Modified: scummvm/branches/branch-1-0-0/engines/cruise/staticres.cpp
===================================================================
--- scummvm/branches/branch-1-0-0/engines/cruise/staticres.cpp	2009-10-10 05:08:56 UTC (rev 44863)
+++ scummvm/branches/branch-1-0-0/engines/cruise/staticres.cpp	2009-10-10 05:33:45 UTC (rev 44864)
@@ -317,5 +317,11 @@
 	"", NULL, NULL, NULL, NULL, "Inventaire", "Parler de...", "Menu Joueur", NULL,
 	"Sauvegarde", "Chargement", "Recommencer le jeu", "Quitter"
 };
+// The original Amiga version does use "Speilermen\xFC" instead of "Spielermen\xFC", if we want to correct
+// this typo, we can easily do so.
+const char *germanLanguageStrings[13] = {
+	" ", NULL, NULL, NULL, NULL, "Inventar", "Sprechen ""\xFC""ber", "Speilermen\xFC", "Speicherlaufwerk",
+	"Speichern", "Laden", "Neu beginnen", "Ende"
+};
 
 } // End of namespace Cruise

Modified: scummvm/branches/branch-1-0-0/engines/cruise/staticres.h
===================================================================
--- scummvm/branches/branch-1-0-0/engines/cruise/staticres.h	2009-10-10 05:08:56 UTC (rev 44863)
+++ scummvm/branches/branch-1-0-0/engines/cruise/staticres.h	2009-10-10 05:33:45 UTC (rev 44864)
@@ -59,6 +59,7 @@
 // Language strings
 extern const char *englishLanguageStrings[13];
 extern const char *frenchLanguageStrings[13];
+extern const char *germanLanguageStrings[13];
 
 } // End of namespace Cruise
 

Modified: scummvm/branches/branch-1-0-0/engines/cruise/volume.cpp
===================================================================
--- scummvm/branches/branch-1-0-0/engines/cruise/volume.cpp	2009-10-10 05:08:56 UTC (rev 44863)
+++ scummvm/branches/branch-1-0-0/engines/cruise/volume.cpp	2009-10-10 05:33:45 UTC (rev 44864)
@@ -36,11 +36,10 @@
 char currentBaseName[15] = "";
 
 void loadPal(volumeDataStruct *entry) {
+	// This code isn't currently being used
+#if 0
 	char name[20];
 
-	// This code isn't currently being used, so return
-	return;
-
 	if (PAL_file.isOpen())
 		PAL_file.close();
 
@@ -53,14 +52,15 @@
 	numLoadedPal = PAL_file.readSint16BE();
 	fileData2 = PAL_file.readSint16BE();
 
-	PAL_ptr = (uint8 *)malloc(numLoadedPal * fileData2);
+	PAL_ptr = (uint8 *)MemAlloc(numLoadedPal * fileData2);
+#endif
 }
 
 void closePal(void) {
 	if (PAL_file.isOpen()) {
 		PAL_file.close();
 
-		free(PAL_ptr);
+		MemFree(PAL_ptr);
 		PAL_ptr = NULL;
 
 		numLoadedPal = 0;
@@ -72,7 +72,7 @@
 	if (currentVolumeFile.isOpen()) {
 		currentVolumeFile.close();
 
-		free(volumePtrToFileDescriptor);
+		MemFree(volumePtrToFileDescriptor);
 
 		strcpy(currentBaseName, "");
 	}
@@ -180,7 +180,7 @@
 void freeDisk(void) {
 	if (currentVolumeFile.isOpen()) {
 		currentVolumeFile.close();
-		free(volumePtrToFileDescriptor);
+		MemFree(volumePtrToFileDescriptor);
 	}
 
 	/* TODO
@@ -316,7 +316,7 @@
 int closeCnf(void) {
 	for (long int i = 0; i < numOfDisks; i++) {
 		if (volumeData[i].ptr) {
-			free(volumeData[i].ptr);
+			MemFree(volumeData[i].ptr);
 			volumeData[i].ptr = NULL;
 		}
 	}
@@ -434,11 +434,11 @@
 				if (fout.isOpen())
 					fout.write(uncompBuffer, buffer[j].extSize);
 
-				//free(uncompBuffer);
+				//MemFree(uncompBuffer);
 
 			}
 
-			free(bufferLocal);
+			MemFree(bufferLocal);
 		}
 		fileHandle.close();
 	}


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list