00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef __ENDIAN_H__
00031 #define __ENDIAN_H__
00032
00034
00035
00036
00037
00038
00039 #include "SDL_byteorder.h"
00040 #include "SDL_endian.h"
00041
00042
00043
00044
00045
00049 #define ConvertLE16(v) SDL_SwapLE16((v))
00050
00054 #define ConvertLE32(v) SDL_SwapLE32((v))
00055
00059 #ifdef __ULTRA_SPARC__
00060
00061 extern unsigned short inline AccessLE16(unsigned char *p) {
00062 return p[0] + (p[1] << 8);
00063 }
00064
00065 #else
00066
00067 #define AccessLE16(p) SDL_SwapLE16(*((unsigned short *)(p)))
00068
00069 #endif
00070
00074 #ifdef __ULTRA_SPARC__
00075
00076 extern unsigned inline AccessLE32(unsigned char *p) {
00077 return p[0] + (p[1] << 8) + (p[2] << 16) + (p[3] <<24);
00078 }
00079
00080 #else
00081
00082 #define AccessLE32(p) SDL_SwapLE32(*((unsigned int *)(p)))
00083
00084 #endif
00085
00090 #ifdef __ULTRA_SPARC__
00091
00092 extern unsigned short inline _FetchLE16(unsigned char **pp) {
00093 unsigned char *p = *pp;
00094 unsigned short i = p[0] + (p[1] << 8);
00095 (*pp) += 2;
00096 return i;
00097 }
00098 #define FetchLE16(p) _FetchLE16(&p)
00099
00100 #else
00101
00102 #define FetchLE16(p) SDL_SwapLE16(*((unsigned short *)(p))); p += 2
00103
00104 #endif
00105
00110 #ifdef __ULTRA_SPARC__
00111
00112 extern unsigned inline _FetchLE32(unsigned char **pp) {
00113 unsigned char *p = *pp;
00114 unsigned int i = p[0] + (p[1] << 8) + (p[2] << 16) + (p[3] <<24);
00115 (*pp) += 4;
00116 return i;
00117 }
00118 #define FetchLE32(p) _FetchLE32(&p)
00119
00120 #else
00121
00122 #define FetchLE32(p) SDL_SwapLE32(*((unsigned int *)(p))); p += 4
00123
00124 #endif
00125
00126
00127 #if SDL_BYTEORDER == SDL_LIL_ENDIAN
00128 #define STRATAGUS_LITTLE_ENDIAN
00129 #elif SDL_BYTEORDER == SDL_BIG_ENDIAN
00130 #define STRATAGUS_BIG_ENDIAN
00131 #else
00132 #error Neither SDL_BIG_ENDIAN nor SDL_LIL_ENDIAN is set
00133 #endif
00134
00135
00136 #else // }{ SDL
00137
00138
00139
00140
00141
00142
00143 #if !defined(__CYGWIN__) && !defined(__MINGW32__) && !defined(_MSC_VER)
00144 #if defined(USE_BSD)
00145 #include <sys/types.h>
00146 #else
00147 #include <endian.h>
00148 #endif // USE_BSD
00149
00150 #if defined(__BYTE_ORDER) && __BYTE_ORDER == __BIG_ENDIAN
00151 #include <byteswap.h>
00152 #endif
00153 #if defined(__APPLE__)
00154 #include <architecture/byte_order.h>
00155 #endif
00156 #endif
00157
00158
00159
00160
00161
00162 #if defined(__BYTE_ORDER) && __BYTE_ORDER == __BIG_ENDIAN
00163
00167 #define ConvertLE16(v) bswap_16((v))
00168
00172 #define ConvertLE32(v) bswap_32((v))
00173
00174 #else
00175
00176 #if defined(__APPLE__)
00177
00181 #define ConvertLE16(v) NXSwapLittleShortToHost(v)
00182
00186 #define ConvertLE32(v) NXSwapLittleIntToHost(v)
00187
00188 #else
00189
00193 #define ConvertLE16(v) (v)
00194
00198 #define ConvertLE32(v) (v)
00199
00200 #endif // defined(__APPLE__)
00201
00202 #endif // ! defined(__BYTE_ORDER) && __BYTE_ORDER == __BIG_ENDIAN
00203
00207 #define AccessLE16(p) ConvertLE16(*((unsigned short *)(p)))
00208
00212 #define AccessLE32(p) ConvertLE32(*((unsigned int *)(p)))
00213
00218 #define FetchLE16(p) ConvertLE16(*((unsigned short *)(p))++)
00219
00224 #define FetchLE32(p) ConvertLE32(*((unsigned int *)(p))++)
00225
00230 #define FetchByte(p) (*((unsigned char *)(p))++)
00231
00233
00234 #endif // !__ENDIAN_H__