[Scummvm-cvs-logs] CVS: scummvm/bs2 maketext.cpp,1.6,1.7 mouse.cpp,1.9,1.10 protocol.cpp,1.6,1.7 resman.cpp,1.20,1.21 resman.h,1.1,1.2

Oliver Kiehl olki at users.sourceforge.net
Fri Sep 12 11:53:28 CEST 2003


Update of /cvsroot/scummvm/scummvm/bs2
In directory sc8-pr-cvs1:/tmp/cvs-serv22832

Modified Files:
	maketext.cpp mouse.cpp protocol.cpp resman.cpp resman.h 
Log Message:
endian fixes


Index: maketext.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/bs2/maketext.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- maketext.cpp	30 Jul 2003 19:25:29 -0000	1.6
+++ maketext.cpp	12 Sep 2003 18:52:52 -0000	1.7
@@ -367,6 +367,13 @@
 	if( (ch<FIRST_CHAR) )		// if 'ch' out of range
 //	if( (ch<FIRST_CHAR) || (ch>LAST_CHAR) )		// if 'ch' out of range
 		ch = DUD;								// then print the 'dud' character (chequered flag)
+// FIXME: HACK!!!! remapping ' and ! because they cause FetchFrameHeader to crash....
+#ifdef MACOSX
+	if (ch == '\'')
+		ch = ' ';
+	if (ch == '!')
+		ch = ' ';
+#endif
 
 	// address of char = address of charSet + offset to char
 	//return (charSet + *(int32 *)(charSet + sizeof(_header) + 4 + 4*(ch - FIRST_CHAR)));

Index: mouse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/bs2/mouse.cpp,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- mouse.cpp	23 Aug 2003 14:42:37 -0000	1.9
+++ mouse.cpp	12 Sep 2003 18:52:52 -0000	1.10
@@ -1252,13 +1252,13 @@
 			Con_fatal_error("ERROR: mouse_list full [%s line %u]",__FILE__,__LINE__);
 		#endif
 
-		mouse_list[cur_mouse].x1			= ob_mouse->x1;
-		mouse_list[cur_mouse].y1			= ob_mouse->y1;
-		mouse_list[cur_mouse].x2			= ob_mouse->x2;
-		mouse_list[cur_mouse].y2			= ob_mouse->y2;
+		mouse_list[cur_mouse].x1			= FROM_LE_32(ob_mouse->x1);
+		mouse_list[cur_mouse].y1			= FROM_LE_32(ob_mouse->y1);
+		mouse_list[cur_mouse].x2			= FROM_LE_32(ob_mouse->x2);
+		mouse_list[cur_mouse].y2			= FROM_LE_32(ob_mouse->y2);
 
-		mouse_list[cur_mouse].priority		= ob_mouse->priority;
-		mouse_list[cur_mouse].pointer		= ob_mouse->pointer;
+		mouse_list[cur_mouse].priority		= FROM_LE_32(ob_mouse->priority);
+		mouse_list[cur_mouse].pointer		= FROM_LE_32(ob_mouse->pointer);
 
 		//-----------------------------------------------
 		// (James17jun97)

Index: protocol.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/bs2/protocol.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- protocol.cpp	7 Sep 2003 03:18:26 -0000	1.6
+++ protocol.cpp	12 Sep 2003 18:52:52 -0000	1.7
@@ -40,7 +40,7 @@
 
 	_multiScreenHeader *mscreenHeader = (_multiScreenHeader *) (screenFile + sizeof(_standardHeader));
 
-	palette = (uint8 *)mscreenHeader + FROM_LE_32(mscreenHeader->palette);
+	palette = (uint8 *)mscreenHeader + mscreenHeader->palette;
 
 	palette[0] = 0;	// always set colour 0 to black
 	palette[1] = 0;	// because most background screen palettes have a bright colour 0
@@ -57,7 +57,7 @@
 {
 	_multiScreenHeader *mscreenHeader = (_multiScreenHeader *) (screenFile + sizeof(_standardHeader));
 
-	return (uint8 *) mscreenHeader + FROM_LE_32(mscreenHeader->paletteTable);
+	return (uint8 *) mscreenHeader + mscreenHeader->paletteTable;
 }
 
 //-----------------------------------------------------------------------------------------------------------------------
@@ -67,13 +67,7 @@
 {
 	// Get the table
 	_multiScreenHeader *mscreenHeader = (_multiScreenHeader *) (screenFile + sizeof(_standardHeader));
-	_screenHeader *screenHeader = (_screenHeader*) ((uint8 *) mscreenHeader + FROM_LE_32(mscreenHeader->screen));
-
-#if defined(SCUMM_BIG_ENDIAN)
-	screenHeader->width = SWAP_BYTES_16(screenHeader->width);
-	screenHeader->height = SWAP_BYTES_16(screenHeader->height);
-	screenHeader->noLayers = SWAP_BYTES_16(screenHeader->noLayers);
-#endif
+	_screenHeader *screenHeader = (_screenHeader*) ((uint8 *) mscreenHeader + mscreenHeader->screen);
 
 	return screenHeader;
 }
@@ -92,16 +86,7 @@
 
 	_multiScreenHeader *mscreenHeader = (_multiScreenHeader *) (screenFile + sizeof(_standardHeader));
 
-	_layerHeader *layerHeader = (_layerHeader *) ((uint8 *) mscreenHeader + FROM_LE_32(mscreenHeader->layers) + (layerNo * sizeof(_layerHeader)));
-
-#if defined(SCUMM_BIG_ENDIAN)
-	layerHeader->x = SWAP_BYTES_16(layerHeader->x);
-	layerHeader->y = SWAP_BYTES_16(layerHeader->y);
-	layerHeader->width = SWAP_BYTES_16(layerHeader->width);
-	layerHeader->height = SWAP_BYTES_16(layerHeader->height);
-	layerHeader->maskSize = SWAP_BYTES_32(layerHeader->maskSize);
-	layerHeader->offset = SWAP_BYTES_32(layerHeader->offset);
-#endif
+	_layerHeader *layerHeader = (_layerHeader *) ((uint8 *) mscreenHeader + mscreenHeader->layers + (layerNo * sizeof(_layerHeader)));
 
 	return layerHeader;
 }
@@ -114,7 +99,7 @@
 {
 	_multiScreenHeader *mscreenHeader = (_multiScreenHeader *) (screenFile + sizeof(_standardHeader));
 
-	return (uint8 *) mscreenHeader + FROM_LE_32(mscreenHeader->maskOffset);
+	return (uint8 *) mscreenHeader + mscreenHeader->maskOffset;
 }
 
 //-----------------------------------------------------------------------------------------------------------------------
@@ -126,15 +111,6 @@
 	_animHeader *animHead;
 	animHead = (_animHeader *) (animFile + sizeof(_standardHeader));
 	
-#if defined(SCUMM_BIG_ENDIAN)
-	animHead->noAnimFrames = SWAP_BYTES_16(animHead->noAnimFrames);
-	animHead->feetStartX = SWAP_BYTES_16(animHead->feetStartX);
-	animHead->feetStartY = SWAP_BYTES_16(animHead->feetStartY);
-	animHead->feetEndX = SWAP_BYTES_16(animHead->feetEndX);
-	animHead->feetEndY = SWAP_BYTES_16(animHead->feetEndY);
-	animHead->blend = SWAP_BYTES_16(animHead->blend);
-#endif
-	
 	return animHead;
 }
 
@@ -157,12 +133,6 @@
 	_cdtEntry *cdtEntry;
 	cdtEntry = (_cdtEntry *) ( (uint8 *)animHead + sizeof(_animHeader) + frameNo * sizeof(_cdtEntry) );
 
-#if defined(SCUMM_BIG_ENDIAN)
-	cdtEntry->x = (int16)SWAP_BYTES_16(cdtEntry->x);
-	cdtEntry->y = (int16)SWAP_BYTES_16(cdtEntry->y);
-	cdtEntry->frameOffset = SWAP_BYTES_32(cdtEntry->frameOffset);
-#endif
-
 	return cdtEntry;
 }
 
@@ -176,12 +146,6 @@
 	// required address = (address of the start of the anim header) + frameOffset
 	_frameHeader *frameHeader = (_frameHeader *) (animFile + sizeof(_standardHeader) + (FetchCdtEntry(animFile,frameNo)->frameOffset) );
 	
-#if defined(SCUMM_BIG_ENDIAN)
-	frameHeader->compSize = SWAP_BYTES_32(frameHeader->compSize);
-	frameHeader->width = SWAP_BYTES_16(frameHeader->width);
-	frameHeader->height = SWAP_BYTES_16(frameHeader->height);
-#endif
-
 	return frameHeader;
 }
 //---------------------------------------------------------------
@@ -192,12 +156,13 @@
 	_multiScreenHeader *mscreenHeader = (_multiScreenHeader *) (screenFile + sizeof(_standardHeader));
 
 #ifdef _SWORD2_DEBUG
-	if (FROM_LE_32(mscreenHeader->bg_parallax[layer]) == 0)
+	if (mscreenHeader->bg_parallax[layer] == 0)
 		Con_fatal_error("FetchBackgroundParallaxLayer(%d) - No parallax layer exists (%s line %u)",layer,__FILE__,__LINE__);
 #endif
 
-	_parallax *parallax = (_parallax *) ((uint8 *) mscreenHeader + FROM_LE_32(mscreenHeader->bg_parallax[layer]));
+	_parallax *parallax = (_parallax *) ((uint8 *) mscreenHeader + mscreenHeader->bg_parallax[layer]);
 	
+// FIXME: this shouldn't be here
 #if defined(SCUMM_BIG_ENDIAN)
 	parallax->w = SWAP_BYTES_16(parallax->w);
 	parallax->h = SWAP_BYTES_16(parallax->h);
@@ -211,17 +176,18 @@
 	_multiScreenHeader *mscreenHeader = (_multiScreenHeader *) (screenFile + sizeof(_standardHeader));
 
 #ifdef _SWORD2_DEBUG
-	if (FROM_LE_32(mscreenHeader->screen) == 0)
+	if (mscreenHeader->screen == 0)
 		Con_fatal_error("FetchBackgroundLayer (%d) - No background layer exists (%s line %u)",__FILE__,__LINE__);
 #endif
 
-	_parallax *parallax = (_parallax *) ((uint8 *) mscreenHeader + FROM_LE_32(mscreenHeader->screen) + sizeof(_screenHeader));
+	_parallax *parallax = (_parallax *) ((uint8 *) mscreenHeader + mscreenHeader->screen + sizeof(_screenHeader));
 	
+// FIXME: this shouldn't be here
 #if defined(SCUMM_BIG_ENDIAN)
 	parallax->w = SWAP_BYTES_16(parallax->w);
 	parallax->h = SWAP_BYTES_16(parallax->h);
 #endif
-	
+
 	return parallax;
 }
 //---------------------------------------------------------------
@@ -230,12 +196,13 @@
 	_multiScreenHeader *mscreenHeader = (_multiScreenHeader *) (screenFile + sizeof(_standardHeader));
 
 #ifdef _SWORD2_DEBUG
-	if (FROM_LE_32(mscreenHeader->fg_parallax[layer]) == 0)
+	if (mscreenHeader->fg_parallax[layer] == 0)
 		Con_fatal_error("FetchForegroundParallaxLayer(%d) - No parallax layer exists (%s line %u)",layer,__FILE__,__LINE__);
 #endif
 
-	_parallax *parallax = (_parallax *) ((uint8 *) mscreenHeader + FROM_LE_32(mscreenHeader->fg_parallax[layer]));
+	_parallax *parallax = (_parallax *) ((uint8 *) mscreenHeader + mscreenHeader->fg_parallax[layer]);
 	
+// FIXME: this shouldn't be here
 #if defined(SCUMM_BIG_ENDIAN)
 	parallax->w = SWAP_BYTES_16(parallax->w);
 	parallax->h = SWAP_BYTES_16(parallax->h);
@@ -256,19 +223,18 @@
 	_textHeader *text_header = (_textHeader *) (file + sizeof(_standardHeader));
 
 
-	if	(text_line>=FROM_LE_32(text_header->noOfLines))		// (James08aug97)
+	if	(text_line>=text_header->noOfLines)		// (James08aug97)
 	{
 		fileHeader = (_standardHeader*)file;
-		sprintf ((char*)errorLine, "xxMissing line %d of %s (only 0..%d)", text_line, fileHeader->name, FROM_LE_32(text_header->noOfLines)-1);
+		sprintf ((char*)errorLine, "xxMissing line %d of %s (only 0..%d)", text_line, fileHeader->name, text_header->noOfLines-1);
 		errorLine[0]=0;	// first 2 chars are NULL so that actor-number comes out as '0'
 		errorLine[1]=0;
 		return(errorLine);
 
 //		GOT RID OF CON_FATAL_ERROR HERE BECAUSE WE DON'T WANT IT TO CRASH OUT ANY MORE!
-//		Con_fatal_error("FetchTextLine cannot get %d, only 0..%d avail (%s line %u)", text_line, FROM_LE_32(text_header->noOfLines)-1,__FILE__,__LINE__);
+//		Con_fatal_error("FetchTextLine cannot get %d, only 0..%d avail (%s line %u)", text_line, text_header->noOfLines-1,__FILE__,__LINE__);
 	}
 
-
 	point=(uint32*) text_header+1;	//point to the lookup table
 
 	return( (uint8*) (file + READ_LE_UINT32(point+text_line)) );
@@ -279,7 +245,7 @@
 {
 	_textHeader *text_header = (_textHeader *) (file + sizeof(_standardHeader));
 
-	if (text_line>=FROM_LE_32(text_header->noOfLines))
+	if (text_line>=text_header->noOfLines)
 		return(0);	// out of range => invalid
 	else
 		return(1);	// valid

Index: resman.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/bs2/resman.cpp,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -d -r1.20 -r1.21
--- resman.cpp	9 Sep 2003 12:45:33 -0000	1.20
+++ resman.cpp	12 Sep 2003 18:52:52 -0000	1.21
@@ -368,6 +368,10 @@
 
 		//close the cluster
 		file.close();
+
+#ifdef SCUMM_BIG_ENDIAN
+		convertEndian((uint8 *) resList[res]->ad);
+#endif
 	} else {
 		// Zdebug("RO %d, already open count=%d", res, count[res]);
 	}
@@ -385,6 +389,142 @@
 
 	return (uint8 *) resList[res]->ad;
 }
+
+void resMan::convertEndian(uint8 *file) {
+	_standardHeader *hdr = (_standardHeader *)file;
+
+	hdr->compSize = SWAP_BYTES_32(hdr->compSize);
+	hdr->decompSize = SWAP_BYTES_32(hdr->decompSize);
+
+	switch(hdr->fileType) {
+		case ANIMATION_FILE: {
+			_animHeader *animHead = (_animHeader *) (file + sizeof(_standardHeader));
+
+			animHead->noAnimFrames = SWAP_BYTES_16(animHead->noAnimFrames);
+			animHead->feetStartX = SWAP_BYTES_16(animHead->feetStartX);
+			animHead->feetStartY = SWAP_BYTES_16(animHead->feetStartY);
+			animHead->feetEndX = SWAP_BYTES_16(animHead->feetEndX);
+			animHead->feetEndY = SWAP_BYTES_16(animHead->feetEndY);
+			animHead->blend = SWAP_BYTES_16(animHead->blend);
+
+			int i;
+			for (i = 0; i < animHead->noAnimFrames; i++) {
+				_cdtEntry *cdtEntry = (_cdtEntry *) ( (uint8 *)animHead + sizeof(_animHeader) + i * sizeof(_cdtEntry) );
+				cdtEntry->x = (int16)SWAP_BYTES_16(cdtEntry->x);
+				cdtEntry->y = (int16)SWAP_BYTES_16(cdtEntry->y);
+				cdtEntry->frameOffset = SWAP_BYTES_32(cdtEntry->frameOffset);
+
+				_frameHeader *frameHeader = (_frameHeader *) (file + sizeof(_standardHeader) + cdtEntry->frameOffset);
+				frameHeader->compSize = SWAP_BYTES_32(frameHeader->compSize);
+				frameHeader->width = SWAP_BYTES_16(frameHeader->width);
+				frameHeader->height = SWAP_BYTES_16(frameHeader->height);
+			}
+			break;
+		}
+		case SCREEN_FILE: {
+			_multiScreenHeader *mscreenHeader = (_multiScreenHeader *) (file + sizeof(_standardHeader));
+
+			mscreenHeader->palette = SWAP_BYTES_32(mscreenHeader->palette);
+			mscreenHeader->bg_parallax[0] = SWAP_BYTES_32(mscreenHeader->bg_parallax[0]);
+			mscreenHeader->bg_parallax[1] = SWAP_BYTES_32(mscreenHeader->bg_parallax[1]);
+			mscreenHeader->screen = SWAP_BYTES_32(mscreenHeader->screen);
+			mscreenHeader->fg_parallax[0] = SWAP_BYTES_32(mscreenHeader->fg_parallax[0]);
+			mscreenHeader->fg_parallax[1] = SWAP_BYTES_32(mscreenHeader->fg_parallax[1]);
+			mscreenHeader->layers = SWAP_BYTES_32(mscreenHeader->layers);
+			mscreenHeader->paletteTable = SWAP_BYTES_32(mscreenHeader->paletteTable);
+			mscreenHeader->maskOffset = SWAP_BYTES_32(mscreenHeader->maskOffset);
+
+			// screenHeader
+			_screenHeader *screenHeader = (_screenHeader*) ((uint8 *) mscreenHeader + mscreenHeader->screen);
+
+			screenHeader->width = SWAP_BYTES_16(screenHeader->width);
+			screenHeader->height = SWAP_BYTES_16(screenHeader->height);
+			screenHeader->noLayers = SWAP_BYTES_16(screenHeader->noLayers);
+
+			// layerHeader
+			_layerHeader *layerHeader;
+			int i;
+			for (i = 0; i < screenHeader->noLayers; i++) {
+				layerHeader = (_layerHeader *) ((uint8 *) mscreenHeader + mscreenHeader->layers + (i * sizeof(_layerHeader)));
+
+				layerHeader->x = SWAP_BYTES_16(layerHeader->x);
+				layerHeader->y = SWAP_BYTES_16(layerHeader->y);
+				layerHeader->width = SWAP_BYTES_16(layerHeader->width);
+				layerHeader->height = SWAP_BYTES_16(layerHeader->height);
+				layerHeader->maskSize = SWAP_BYTES_32(layerHeader->maskSize);
+				layerHeader->offset = SWAP_BYTES_32(layerHeader->offset);
+			}
+
+			// FIXME: byte swapping should be done here instead of in protocol.cpp
+/*
+			// backgroundParallaxLayer
+			_parallax *parallax;
+			parallax = (_parallax *) ((uint8 *) mscreenHeader + mscreenHeader->bg_parallax[0]);
+			parallax->w = SWAP_BYTES_16(parallax->w);
+			parallax->h = SWAP_BYTES_16(parallax->h);
+
+			parallax = (_parallax *) ((uint8 *) mscreenHeader + mscreenHeader->bg_parallax[1]);
+			parallax->w = SWAP_BYTES_16(parallax->w);
+			parallax->h = SWAP_BYTES_16(parallax->h);
+
+			// backgroundLayer
+			parallax = (_parallax *) ((uint8 *) mscreenHeader + mscreenHeader->screen + sizeof(_screenHeader));
+			parallax->w = SWAP_BYTES_16(parallax->w);
+			parallax->h = SWAP_BYTES_16(parallax->h);
+
+			// foregroundParallaxLayer
+			parallax = (_parallax *) ((uint8 *) mscreenHeader + mscreenHeader->fg_parallax[0]);
+			parallax->w = SWAP_BYTES_16(parallax->w);
+			parallax->h = SWAP_BYTES_16(parallax->h);
+
+			parallax = (_parallax *) ((uint8 *) mscreenHeader + mscreenHeader->fg_parallax[1]);
+			parallax->w = SWAP_BYTES_16(parallax->w);
+			parallax->h = SWAP_BYTES_16(parallax->h);
+*/
+
+			break;
+		}
+		case GAME_OBJECT: {
+			_object_hub *objectHub = (_object_hub *) ((_standardHeader *)file+1);
+
+			objectHub->type = (int)SWAP_BYTES_32(objectHub->type);
+			objectHub->logic_level = SWAP_BYTES_32(objectHub->logic_level);
+
+			int i;
+			for (i = 0; i < TREE_SIZE; i++) {
+				objectHub->logic[i] = SWAP_BYTES_32(objectHub->logic[i]);
+				objectHub->script_id[i] = SWAP_BYTES_32(objectHub->script_id[i]);
+				objectHub->script_pc[i] = SWAP_BYTES_32(objectHub->script_pc[i]);
+			}
+			break;
+		}
+		case WALK_GRID_FILE: {
+			_walkGridHeader	*walkGridHeader = (_walkGridHeader *)file;
+			walkGridHeader->numBars = SWAP_BYTES_32(walkGridHeader->numBars);
+			walkGridHeader->numNodes = SWAP_BYTES_32(walkGridHeader->numNodes);
+
+			break;
+		}
+		case GLOBAL_VAR_FILE:
+			break;
+		case PARALLAX_FILE_null:
+			break;
+		case RUN_LIST:
+			break;
+		case TEXT_FILE: {
+			_textHeader *textHeader = (_textHeader *) (file + sizeof(_standardHeader));
+			textHeader->noOfLines = SWAP_BYTES_32(textHeader->noOfLines);
+			break;
+		}
+		case SCREEN_MANAGER:
+			break;
+		case MOUSE_FILE:
+			break;
+		case ICON_FILE:
+			break;
+	}
+}
+
 
 uint8 resMan::Res_check_valid(uint32 res) {	// James 12mar97
 	// returns '1' if resource is valid, otherwise returns '0'

Index: resman.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/bs2/resman.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- resman.h	28 Jul 2003 01:44:38 -0000	1.1
+++ resman.h	12 Sep 2003 18:52:52 -0000	1.2
@@ -44,6 +44,7 @@
 		void	Res_close(uint32 res);			//decrements the count
 
 //----
+		void convertEndian(uint8 *ad);
 
 		uint8	Res_check_valid( uint32 res );	// returns '0' if resource out of range or null, otherwise '1' for ok
 





More information about the Scummvm-git-logs mailing list