*** cdstatus-0.96.05/src/cdstatus.c.orig	2005-11-26 16:23:27.000000000 +0100
--- cdstatus-0.96.05/src/cdstatus.c	2005-11-26 19:06:57.000000000 +0100
***************
*** 436,441 ****
--- 436,501 ----
  	return 0;
  }
  
+ /* following code copied from
+   http://www.gamedev.net/reference/articles/article2091.asp
+   it has been slightly modified as we did not have a reason to output
+   big endian or float 
+ */
+ static short ShortSwap( short s )
+ {
+   unsigned char b1, b2;
+   
+   b1 = s & 255;
+   b2 = (s >> 8) & 255;
+ 
+   return (b1 << 8) + b2;
+ }
+ 
+ static short ShortNoSwap( short s )
+ {
+   return s;
+ }
+ 
+ static int LongSwap (int i)
+ {
+   unsigned char b1, b2, b3, b4;
+ 
+   b1 = i & 255;
+   b2 = ( i >> 8 ) & 255;
+   b3 = ( i>>16 ) & 255;
+   b4 = ( i>>24 ) & 255;
+ 
+   return ((int)b1 << 24) + ((int)b2 << 16) + ((int)b3 << 8) + b4;
+ }
+ 
+ static int LongNoSwap( int i )
+ {
+   return i;
+ }
+ 
+ static short (*LittleShort) ( short s );
+ static int (*LittleLong) ( int i );
+ 
+ static void InitEndian( void )
+ {
+   char SwapTest[2] = { 1, 0 };
+   
+   if( *(short *) SwapTest == 1 )
+   {
+     // little endian
+     //set func pointers to correct funcs
+     LittleShort = ShortNoSwap;
+     LittleLong = LongNoSwap;
+   }
+   else
+   {
+     // big endian
+     LittleShort = ShortSwap;
+     LittleLong = LongSwap;
+   }
+ }
+ /* end of copied code */
+ 
  static void writeWavHeader(unsigned int readframes, FILE * audio_out)
  {
  	long int chunksize;
***************
*** 456,478 ****
  
  	wavHeader wHeader;
  
  	/* "RIFF" */
! 	wHeader.RIFF_header = 0x46464952;
  
  	chunksize = readframes * CD_FRAMESIZE_RAW;
! 	wHeader.total_size = (int32_t)(chunksize + sizeof(wavHeader));
  
  	/* "WAVEfmt " */
! 	wHeader.WAVE = 0x45564157;
! 	wHeader.fmt = 0x20746D66;
  
! 	wHeader.subchunk_size = 16;
! 	wHeader.audio_format = 1;
! 	wHeader.number_channels = 2;
! 	wHeader.sampling_rate = 44100;
! 	wHeader.byte_rate = 176400;
! 	wHeader.block_align = 4;
! 	wHeader.bits_per_sample = 16;
  
  	if(fwrite((const void *) &wHeader, sizeof(wavHeader), (size_t) 1, audio_out)!=1)
  	{
--- 516,539 ----
  
  	wavHeader wHeader;
  
+ 	InitEndian();
  	/* "RIFF" */
! 	wHeader.RIFF_header = LittleLong(0x46464952);
  
  	chunksize = readframes * CD_FRAMESIZE_RAW;
! 	wHeader.total_size = LittleLong((int32_t)(chunksize + sizeof(wavHeader)));
  
  	/* "WAVEfmt " */
! 	wHeader.WAVE = LittleLong(0x45564157);
! 	wHeader.fmt = LittleLong(0x20746D66);
  
! 	wHeader.subchunk_size = LittleLong(16);
! 	wHeader.audio_format = LittleShort(1);
! 	wHeader.number_channels = LittleShort(2);
! 	wHeader.sampling_rate = LittleLong(44100);
! 	wHeader.byte_rate = LittleLong(176400);
! 	wHeader.block_align = LittleShort(4);
! 	wHeader.bits_per_sample = LittleShort(16);
  
  	if(fwrite((const void *) &wHeader, sizeof(wavHeader), (size_t) 1, audio_out)!=1)
  	{
***************
*** 492,497 ****
--- 553,559 ----
  		}
  		exit(EXIT_FAILURE);
  	}
+ 	chunksize = LittleLong(chunksize);
  	if(fwrite((const void *) &chunksize, sizeof(long int), (size_t) 1, audio_out)!=1)
  	{
  		perror("Error writing wav file chunksize header");