[Scummvm-cvs-logs] CVS: scummvm/scumm/smush codec47.cpp,1.46,1.47

Max Horn fingolfin at users.sourceforge.net
Sat Apr 26 04:03:14 CEST 2003


Update of /cvsroot/scummvm/scummvm/scumm/smush
In directory sc8-pr-cvs1:/tmp/cvs-serv24599

Modified Files:
	codec47.cpp 
Log Message:
fixed endian regression (introduced by the alignment changes)

Index: codec47.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/smush/codec47.cpp,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -d -r1.46 -r1.47
--- codec47.cpp	5 Apr 2003 23:41:21 -0000	1.46
+++ codec47.cpp	26 Apr 2003 11:02:49 -0000	1.47
@@ -28,19 +28,18 @@
 
 #define COPY_4X1_LINE(dst, src)			\
 	do {					\
-		int j;				\
-		for(j=0; j<4; j++)		\
-			(dst)[j] = (src)[j];	\
+		(dst)[0] = (src)[0];	\
+		(dst)[1] = (src)[1];	\
+		(dst)[2] = (src)[2];	\
+		(dst)[3] = (src)[3];	\
 	} while(0)
 
 #define COPY_2X1_LINE(dst, src)			\
 	do {					\
-		int j;				\
-		for(j=0; j<2; j++)		\
-			(dst)[j] = (src)[j];	\
+		(dst)[0] = (src)[0];	\
+		(dst)[1] = (src)[1];	\
 	} while(0)
 
-
 #else /* SCUMM_NEED_ALIGNMENT */
 
 #define COPY_4X1_LINE(dst, src)			\
@@ -51,6 +50,20 @@
 
 #endif
 
+#define FILL_4X1_LINE(dst, val)			\
+	do {					\
+		(dst)[0] = val;	\
+		(dst)[1] = val;	\
+		(dst)[2] = val;	\
+		(dst)[3] = val;	\
+	} while(0)
+
+#define FILL_2X1_LINE(dst, val)			\
+	do {					\
+		(dst)[0] = val;	\
+		(dst)[1] = val;	\
+	} while(0)
+
 static int32 codec37_table[] = {
        0,       1,       2,       3,       3,       3,
        3,       2,       1,       0,       0,       0,
@@ -488,18 +501,16 @@
 		_d_src += 4;
 	} else if (code == 0xFE) {
 		byte t = *_d_src++;
-		tmp = t | t << 8;
-		COPY_2X1_LINE(d_dst, (unsigned char*)&tmp);
-		COPY_2X1_LINE(d_dst + _d_pitch, (unsigned char*)&tmp);
+		FILL_2X1_LINE(d_dst, t);
+		FILL_2X1_LINE(d_dst + _d_pitch, t);
 	} else if (code == 0xFC) {
 		tmp = _offset2;
 		COPY_2X1_LINE(d_dst, d_dst + tmp);
 		COPY_2X1_LINE(d_dst + _d_pitch, d_dst + _d_pitch + tmp);
 	} else {
 		byte t = _paramPtr[code];
-		tmp = t | t << 8;
-		COPY_2X1_LINE(d_dst, (unsigned char*)&tmp);
-		COPY_2X1_LINE(d_dst + _d_pitch, (unsigned char*)&tmp);
+		FILL_2X1_LINE(d_dst, t);
+		FILL_2X1_LINE(d_dst + _d_pitch, t);
 	}
 }
 
@@ -526,9 +537,8 @@
 		d_dst = tmp_dst;
 	} else if (code == 0xFE) {
 		byte t = *_d_src++;
-		uint32 val = t << 24 | t << 16 | t << 8 | t;
 		for (i = 0; i < 4; i++) {
-			COPY_4X1_LINE(d_dst, (unsigned char*)&val);
+			FILL_4X1_LINE(d_dst, t);
 			d_dst += _d_pitch;
 		}
 	} else if (code == 0xFD) {
@@ -555,9 +565,8 @@
 		}
 	} else {
 		byte t = _paramPtr[code];
-		uint32 val = t << 24 | t << 16 | t << 8 | t;
 		for (i = 0; i < 4; i++) {
-			COPY_4X1_LINE(d_dst, (unsigned char*)&val);
+			FILL_4X1_LINE(d_dst, t);
 			d_dst += _d_pitch;
 		}
 	}
@@ -587,10 +596,9 @@
 		d_dst = tmp_dst;
 	} else if (code == 0xFE) {
 		byte t = *_d_src++;
-		int32 val = t << 24 | t << 16 | t << 8 | t;
 		for (i = 0; i < 8; i++) {
-			COPY_4X1_LINE(d_dst, (unsigned char*)&val);
-			COPY_4X1_LINE(d_dst + 4, (unsigned char*)&val);
+			FILL_4X1_LINE(d_dst, t);
+			FILL_4X1_LINE(d_dst + 4, t);
 			d_dst += _d_pitch;
 		}
 	} else if (code == 0xFD) {
@@ -619,10 +627,9 @@
 		}
 	} else {
 		byte t = _paramPtr[code];
-		int32 val = t << 24 | t << 16 | t << 8 | t;
 		for (i = 0; i < 8; i++) {
-			COPY_4X1_LINE(d_dst, (unsigned char*)&val);
-			COPY_4X1_LINE(d_dst + 4, (unsigned char*)&val);
+			FILL_4X1_LINE(d_dst, t);
+			FILL_4X1_LINE(d_dst + 4, t);
 			d_dst += _d_pitch;
 		}
 	}





More information about the Scummvm-git-logs mailing list