[Scummvm-cvs-logs] SF.net SVN: scummvm: [25976] scummvm/trunk/engines/parallaction

peres001 at users.sourceforge.net peres001 at users.sourceforge.net
Sun Mar 4 16:09:45 CET 2007


Revision: 25976
          http://scummvm.svn.sourceforge.net/scummvm/?rev=25976&view=rev
Author:   peres001
Date:     2007-03-04 07:09:45 -0800 (Sun, 04 Mar 2007)

Log Message:
-----------
made loadScript and loadLocation benefit from Script's ability to dispose of its input buffer

Modified Paths:
--------------
    scummvm/trunk/engines/parallaction/animation.cpp
    scummvm/trunk/engines/parallaction/disk.cpp
    scummvm/trunk/engines/parallaction/disk.h
    scummvm/trunk/engines/parallaction/location.cpp

Modified: scummvm/trunk/engines/parallaction/animation.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/animation.cpp	2007-03-04 15:05:47 UTC (rev 25975)
+++ scummvm/trunk/engines/parallaction/animation.cpp	2007-03-04 15:09:45 UTC (rev 25976)
@@ -251,14 +251,10 @@
 void Parallaction::loadProgram(Animation *a, char *filename) {
 //	printf("loadProgram(%s)\n", filename);
 
-	// the largest script in Nippon Safes is 3,668 bytes, so 4 kb is well enough
-	char* src = (char*)malloc(0x1000);
-	_disk->loadScript(filename, src);
+	Script *script = _disk->loadScript(filename);
 
 	_numLocals = 0;
 
-	Script *script = new Script(src);
-
 	fillBuffers(*script);
 
 	a->_program = (Program*)malloc(sizeof(Program));
@@ -284,7 +280,6 @@
 	addNode(vD0, &vCC->_node);
 
 	delete script;
-	free(src);
 
 	a->_program->_ip = (Instruction*)a->_program->_node._next;
 

Modified: scummvm/trunk/engines/parallaction/disk.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/disk.cpp	2007-03-04 15:05:47 UTC (rev 25975)
+++ scummvm/trunk/engines/parallaction/disk.cpp	2007-03-04 15:09:45 UTC (rev 25976)
@@ -205,7 +205,7 @@
 
 }
 
-void Disk::loadLocation(const char *name, char* script) {
+Script* Disk::loadLocation(const char *name) {
 
 	char archivefile[PATH_LEN];
 
@@ -232,14 +232,16 @@
 			error("can't find location file '%s'", name);
 	}
 
-	uint32 count = _archive.size();
-	_archive.read(script, count);
-	_archive.closeArchivedFile();
-	_archive.close();
+	uint32 size = _archive.size();
+	char *buf = (char*)malloc(size+1);
+	_archive.read(buf, size);
+	buf[size] = '\0';
 
+	return new Script(buf, true);
+
 }
 
-void Disk::loadScript(const char* name, char *script) {
+Script* Disk::loadScript(const char* name) {
 
 	char vC8[PATH_LEN];
 
@@ -249,12 +251,11 @@
 		errorFileNotFound(vC8);
 
 	uint32 size = _archive.size();
+	char *buf = (char*)malloc(size+1);
+	_archive.read(buf, size);
+	buf[size] = '\0';
 
-	_archive.read(script, size);
-	script[size] = '\0';
-
-	_archive.closeArchivedFile();
-
+	return new Script(buf, true);
 }
 
 void Disk::loadHead(const char* name, StaticCnv* cnv) {

Modified: scummvm/trunk/engines/parallaction/disk.h
===================================================================
--- scummvm/trunk/engines/parallaction/disk.h	2007-03-04 15:05:47 UTC (rev 25975)
+++ scummvm/trunk/engines/parallaction/disk.h	2007-03-04 15:09:45 UTC (rev 25976)
@@ -39,6 +39,7 @@
 
 class Parallaction;
 class Graphics;
+class Script;
 
 class Archive : public Common::SeekableReadStream {
 
@@ -98,8 +99,8 @@
 
 	void selectArchive(const char *name);
 
-	void loadLocation(const char *name, char* script);
-	void loadScript(const char* name, char *script);
+	Script* loadLocation(const char *name);
+	Script* loadScript(const char* name);
 	void loadTalk(const char *name, Cnv *cnv);
 	void loadObjects(const char *name, Cnv *cnv);
 	void loadPointer(StaticCnv* cnv);

Modified: scummvm/trunk/engines/parallaction/location.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/location.cpp	2007-03-04 15:05:47 UTC (rev 25975)
+++ scummvm/trunk/engines/parallaction/location.cpp	2007-03-04 15:09:45 UTC (rev 25976)
@@ -41,15 +41,11 @@
 //	printf("parseLocation(%s)", filename);
     debugC(1, kDebugLocation, "parseLocation('%s')", filename);
 
-	char *location_src = NULL;
-
 	uint16 _si = 1;
 	_vm->_graphics->_proportionalFont = false;
 	_vm->_graphics->setFont("topaz");
 
-	location_src = (char*)malloc(0x4000);
-	_disk->loadLocation(filename, location_src);
-	_locationScript = new Script(location_src);
+	_locationScript = _disk->loadLocation(filename);
 
 	fillBuffers(*_locationScript, true);
 	while (scumm_stricmp(_tokens[0], "ENDLOCATION")) {
@@ -164,8 +160,6 @@
 	delete _locationScript;
 	_locationScript = NULL;
 
-	free(location_src);
-
 	return;
 }
 


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