[Scummvm-cvs-logs] CVS: scummvm/simon simon.cpp,1.21,1.22

Ruediger Hanke tomjoad at users.sourceforge.net
Sun Apr 21 05:52:01 CEST 2002


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

Modified Files:
	simon.cpp 
Log Message:
Endian and alignment fixes to make Simon games boot (and play) on big endian systems

Index: simon.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/simon/simon.cpp,v
retrieving revision 1.21
retrieving revision 1.22
diff -C2 -d -r1.21 -r1.22
*** simon.cpp	20 Apr 2002 04:09:02 -0000	1.21
--- simon.cpp	21 Apr 2002 12:51:13 -0000	1.22
***************
*** 7705,7708 ****
--- 7705,7712 ----
  
  		resfile_read(_game_offsets_ptr, 0, gss->NUM_GAME_OFFSETS*sizeof(uint32));
+ #if defined(SCUMM_BIG_ENDIAN)
+ 		for( int r = 0; r < gss->NUM_GAME_OFFSETS; r++ )
+ 			_game_offsets_ptr[ r ] = READ_LE_UINT32( &_game_offsets_ptr[ r ] );
+ #endif
  	}
  
***************
*** 8238,8241 ****
--- 8242,8249 ----
  		if (fread(_voice_offsets, gss->NUM_VOICE_RESOURCES * sizeof(uint32), 1, _voice_file) != 1)
  			error("Cannot read voice offsets");
+ #if defined(SCUMM_BIG_ENDIAN)
+ 		for( int r = 0; r < gss->NUM_VOICE_RESOURCES; r++ )
+ 			_voice_offsets[ r ] = READ_LE_UINT32( &_voice_offsets[ r ] );
+ #endif
  	}
  }
***************
*** 8256,8260 ****
  	uint16 block_align;
  	uint16 bits_per_sample;
! };
  
  void SimonState::playVoice(uint voice) {
--- 8264,8268 ----
  	uint16 block_align;
  	uint16 bits_per_sample;
! } GCC_PACK;
  
  void SimonState::playVoice(uint voice) {
***************
*** 8272,8284 ****
  
  	if (fread(&wave_hdr, sizeof(wave_hdr), 1, _voice_file)!=1 ||
! 		wave_hdr.riff!='FFIR' || wave_hdr.wave!='EVAW' || wave_hdr.fmt!=' tmf' ||
! 		wave_hdr.format_tag!=1 || wave_hdr.channels!=1 || wave_hdr.bits_per_sample!=8) {
  			warning("playVoice(%d): cannot read RIFF header", voice);
  			return;
  		}
  
! 	fseek(_voice_file, wave_hdr.size - sizeof(wave_hdr) + 20, SEEK_CUR);
  
! 	if (fread(data, sizeof(data), 1, _voice_file) != 1 ||
  		data[0] != 'atad' ) {
  			warning("playVoice(%d): cannot read data header",voice);
--- 8280,8295 ----
  
  	if (fread(&wave_hdr, sizeof(wave_hdr), 1, _voice_file)!=1 ||
! 		wave_hdr.riff!=MKID('RIFF') || wave_hdr.wave!=MKID('WAVE') || wave_hdr.fmt!=MKID('fmt ') ||
! 		READ_LE_UINT16(&wave_hdr.format_tag)!=1 || READ_LE_UINT16(&wave_hdr.channels)!=1 ||
! 		READ_LE_UINT16(&wave_hdr.bits_per_sample)!=8) {
  			warning("playVoice(%d): cannot read RIFF header", voice);
  			return;
  		}
  
! 	fseek(_voice_file, READ_LE_UINT32(&wave_hdr.size) - sizeof(wave_hdr) + 20, SEEK_CUR);
  
! 	data[ 0 ] = fileReadLE32(_voice_file);
! 	data[ 1 ] = fileReadLE32(_voice_file);
! 	if (//fread(data, sizeof(data), 1, _voice_file) != 1 ||
  		data[0] != 'atad' ) {
  			warning("playVoice(%d): cannot read data header",voice);
***************
*** 8286,8290 ****
  		}
  
! 	_mixer->play_raw(&_voice_sound, _voice_file, data[1], wave_hdr.samples_per_sec, 
  		SoundMixer::FLAG_FILE|SoundMixer::FLAG_UNSIGNED);
  }
--- 8297,8301 ----
  		}
  
! 	_mixer->play_raw(&_voice_sound, _voice_file, data[1], READ_LE_UINT32(&wave_hdr.samples_per_sec),
  		SoundMixer::FLAG_FILE|SoundMixer::FLAG_UNSIGNED);
  }
***************
*** 8303,8307 ****
  		}
  		
! 		p = _sfx_heap + ((uint32*)_sfx_heap)[sound];
  
  		for(;;) {
--- 8314,8318 ----
  		}
  		
! 		p = _sfx_heap + READ_LE_UINT32(&((uint32*)_sfx_heap)[sound]);
  
  		for(;;) {
***************
*** 8317,8321 ****
  		}
  
! 		_mixer->play_raw(&_playing_sound, p+8,*(uint32*)(p+4),22050,SoundMixer::FLAG_UNSIGNED);
  	} else {
  		warning("playSound(%d)", sound);
--- 8328,8332 ----
  		}
  
! 		_mixer->play_raw(&_playing_sound, p+8,READ_LE_UINT32(p+4),22050,SoundMixer::FLAG_UNSIGNED);
  	} else {
  		warning("playSound(%d)", sound);





More information about the Scummvm-git-logs mailing list