[Scummvm-cvs-logs] CVS: scummvm insane.cpp,1.43,1.44

Ruediger Hanke tomjoad at users.sourceforge.net
Mon Jul 15 05:31:04 CEST 2002


Update of /cvsroot/scummvm/scummvm
In directory usw-pr-cvs1:/tmp/cvs-serv30834

Modified Files:
	insane.cpp 
Log Message:
Some endian fixes I wanted to check in for some time now ... also allow unencoded plain-text TRES files as they are on my German CDs of Dig/FT

Index: insane.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/insane.cpp,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -d -r1.43 -r1.44
--- insane.cpp	12 Jul 2002 15:29:22 -0000	1.43
+++ insane.cpp	15 Jul 2002 12:30:52 -0000	1.44
@@ -27,7 +27,7 @@
 #include "stdafx.h"
 #include "scumm.h"
 
-#define SWAP2(a) ((((a)>>24)&0xFF) | (((a)>>8)&0xFF00) | (((a)<<8)&0xFF0000) | (((a)<<24)&0xFF000000))
+//#define SWAP2(a) ((((a)>>24)&0xFF) | (((a)>>8)&0xFF00) | (((a)<<8)&0xFF0000) | (((a)<<24)&0xFF000000))
 #define MAX_STREAMER 10
 
 byte * SmushPlayer::loadTres()
@@ -64,6 +64,15 @@
 			*(_buffer_tres + l) ^= 0xcc;
 		_buffer_tres[tmp] = 0;
 	}
+	else
+	{
+		fseek(f_tres, 0, SEEK_END); // assume file is unencrypted
+		tmp = ftell(f_tres);
+		fseek(f_tres, 0, SEEK_SET);
+		_buffer_tres = (byte*)malloc (tmp + 1);
+		fread(_buffer_tres, tmp, 1, f_tres);
+		_buffer_tres[tmp] = 0;
+	}
 	fclose (f_tres);
 
 	return _buffer_tres;
@@ -262,8 +271,8 @@
 	
 	codec44_depack (dst, src, length);
 
-	width = *(uint16*)(font + t_offset + 6);
-	height = *(uint16*)(font + t_offset + 8);
+	width = READ_LE_UINT16(font + t_offset + 6);
+	height = READ_LE_UINT16(font + t_offset + 8);
 
 	y += c_line * height;
 	for (uint32 ty = 0; ty < height; ty++) {
@@ -298,10 +307,10 @@
 
 uint32 SmushPlayer::nextBE32()
 {
-	uint32 a = *((uint32 *)_cur);
+	uint32 a = READ_BE_UINT32(_cur);
 	_cur += sizeof(uint32);
 
-	return SWAP2(a);
+	return a;
 }
 
 void SmushPlayer::fileRead(void *mem, int len)
@@ -313,18 +322,16 @@
 
 uint32 SmushPlayer::fileReadBE32()
 {
-	uint32 number;
-
-	fileRead(&number, sizeof(number));
-	return SWAP2(number);
+	byte b[4];
+	fread(b, sizeof(b), 1, _in);
+	return (b[0]<<24)|(b[1]<<16)|(b[2]<<8)|b[3];
 }
 
 uint32 SmushPlayer::fileReadLE32()
 {
-	uint32 number;
-
-	fileRead(&number, sizeof(number));
-	return number;
+	byte b[4];
+	fread(b, sizeof(b), 1, _in);
+	return (b[3]<<24)|(b[2]<<16)|(b[1]<<8)|b[0];
 }
 
 void SmushPlayer::openFile(byte *fileName)
@@ -563,7 +570,7 @@
 		uint x;
 
 		if ((uint) y >= (uint) cd->outheight) {
-			src += *(uint16 *)(src) + 2;
+			src += READ_LE_UINT16(src)+2;
 			continue;
 		}
 
@@ -911,14 +918,14 @@
 	case 0:{
 			curbuf = pcd->deltaBufs[pcd->curtable];
 			memset(pcd->deltaBuf, 0, curbuf - pcd->deltaBuf);
-			size = *(uint32 *)(cd->src + 4);
+			size = READ_LE_UINT32(cd->src + 4);
 			memset(curbuf + size, 0, pcd->deltaBuf + pcd->deltaSize - curbuf - size);
 			memcpy(curbuf, cd->src + 16, size);
 			break;
 		}
 
 	case 2:{
-			size = *(uint32 *)(cd->src + 4);
+			size = READ_LE_UINT32(cd->src + 4);
 			curbuf = pcd->deltaBufs[pcd->curtable];
 			if (size == 64000)
 				codec37_bompdepack(curbuf, cd->src + 16, size);
@@ -931,7 +938,7 @@
 		}
 
 	case 3:{
-			uint16 number = *(uint16 *)(cd->src + 2);
+			uint16 number = READ_LE_UINT16(cd->src + 2);
 
 			if (number && pcd->flags + 1 != number)
 				break;
@@ -954,7 +961,7 @@
 
 		}
 	case 4:{
-			uint16 number = *(uint16 *)(cd->src + 2);
+			uint16 number = READ_LE_UINT16(cd->src + 2);
 
 			if (number && pcd->flags + 1 != number)
 				break;
@@ -984,7 +991,7 @@
 		error("codec37 default case");
 	}
 
-	pcd->flags = *(uint16 *)(cd->src + 2);
+	pcd->flags = READ_LE_UINT16(cd->src + 2);
 
 	if (result) {
 		pcd->curtable ^= 1;
@@ -1018,8 +1025,8 @@
 	cd.y = 0;
 	cd.x = 0;
 	cd.src = _cur + 0xE;
-	cd.w = *(uint16 *)(_cur + 6);
-	cd.h = *(uint16 *)(_cur + 8);
+	cd.w = READ_LE_UINT16(_cur + 6);
+	cd.h = READ_LE_UINT16(_cur + 8);
 	cd.flags = 0;
 
 	codec = _cur[0];
@@ -1145,14 +1152,14 @@
 	int num;
 	int i;
 
-	num = *(uint16 *)(_cur + 2);
+	num = READ_LE_UINT16(_cur + 2);
 	if (num == 0 || num == 0x200) {
 		if (num == 0x200)
 			memcpy(_fluPalette, _cur + 0x604, 0x300);
 
 		for (i = 0; i < 0x300; i++) {
 			_fluPalMul129[i] = _fluPalette[i] * 129;
-			_fluPalWords[i] = *(uint16 *)(_cur + 4 + i * 2);
+			_fluPalWords[i] = READ_LE_UINT16(_cur + 4 + i * 2);
 		}
 		return;
 	}
@@ -1340,7 +1347,7 @@
 
 			sm->_system->copy_rect(sm->_videoBuffer, 320, 0, 0, 320, 200);
 			sm->_system->update_screen();
-			sm->waitForTimer(60);
+			sm->waitForTimer(18);
 
 			//sm->delta = sm->_system->waitTick(sm->delta);
 		}





More information about the Scummvm-git-logs mailing list