home *** CD-ROM | disk | FTP | other *** search
/ Geek 6 / Geek-006.iso / linux / video / xmovie-1.5.3.tar.gz / xmovie-1.5.3.tar / xmovie-1.5.3 / xmovie / byteorder.h < prev    next >
C/C++ Source or Header  |  2000-11-29  |  1KB  |  77 lines

  1. #ifndef BYTEORDER_H
  2. #define BYTEORDER_H
  3.  
  4. #include "sizes.h"
  5.  
  6. inline int get_byte_order()
  7. {                // 1 if little endian
  8.     BCBASE_INT32 byteordertest;
  9.     int byteorder;
  10.  
  11.     byteordertest = 0x00000001;
  12.     byteorder = *((unsigned char *)&byteordertest);
  13.     return byteorder;
  14. }
  15.  
  16. #define SWAP_ITERATE byte1 = buffer[i++]; \
  17.                                    byte2 = buffer[i--]; \
  18.                                    buffer[i++] = byte2; \
  19.                                    buffer[i++] = byte1;  
  20.                                                                            
  21. #define SWAP_24BIT_ITERATE \
  22.                                  byte1 = buffer[i]; \
  23.                                    byte2 = buffer[j]; \
  24.                                    byte3 = buffer[k]; \
  25.                                    buffer[i] = byte3; \
  26.                                    buffer[j] = byte2; \
  27.                                    buffer[k] = byte1; \
  28.                                    i += 3; j += 3; k += 3;
  29.  
  30. inline int swap_bytes(int wordsize, char *buffer, long len)
  31. {
  32.   register unsigned char byte1, byte2, byte3;
  33.   register long i = 0, j = 0, k = 0;
  34.   
  35.     switch(wordsize)
  36.     {
  37.         case 1:
  38.             return 0;
  39.             break;
  40.         
  41.         case 2:
  42.           len -= 8;
  43.           while(i < len){
  44.             SWAP_ITERATE
  45.             SWAP_ITERATE
  46.             SWAP_ITERATE
  47.             SWAP_ITERATE
  48.           }
  49.  
  50.           len += 8;
  51.           while(i < len){
  52.             SWAP_ITERATE
  53.           }
  54.             return 0;
  55.             break;
  56.         
  57.         case 3:
  58.           len -= 12;
  59.           while(i < len){
  60.             SWAP_24BIT_ITERATE
  61.             SWAP_24BIT_ITERATE
  62.             SWAP_24BIT_ITERATE
  63.             SWAP_24BIT_ITERATE
  64.           }
  65.  
  66.           len += 12;
  67.           while(i < len){
  68.             SWAP_24BIT_ITERATE
  69.           }
  70.             return 0;
  71.             break;
  72.     }
  73.     return 0;
  74. }
  75.  
  76. #endif
  77.