From f3ae5159cb37a9d5822489c92f4a3e5da6e24c0e Mon Sep 17 00:00:00 2001 From: mittorn Date: Tue, 29 Jan 2019 17:27:36 +0700 Subject: [PATCH] Add endian conversion macros --- engine/common/common.h | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/engine/common/common.h b/engine/common/common.h index c0a60d3b..0ee4dfd2 100644 --- a/engine/common/common.h +++ b/engine/common/common.h @@ -120,6 +120,37 @@ XASH SPECIFIC - sort of hack that works only in Xash3D not in GoldSrc #define GAME_EXPORT #endif + +#ifdef XASH_BIG_ENDIAN +#define LittleLong(x) (((int)(((x)&255)<<24)) + ((int)((((x)>>8)&255)<<16)) + ((int)(((x)>>16)&255)<<8) + (((x) >> 24)&255)) +#define LittleLongSW(x) (x = LittleLong(x) ) +#define LittleShort(x) ((short)( (((short)(x) >> 8) & 255) + (((short)(x) & 255) << 8))) +#define LittleShortSW(x) (x = LittleShort(x) ) +_inline float LittleFloat( float f ) +{ + union + { + float f; + unsigned char b[4]; + } dat1, dat2; + + dat1.f = f; + dat2.b[0] = dat1.b[3]; + dat2.b[1] = dat1.b[2]; + dat2.b[2] = dat1.b[1]; + dat2.b[3] = dat1.b[0]; + + return dat2.f; +} +#else +#define LittleLong(x) (x) +#define LittleLongSW(x) +#define LittleShort(x) (x) +#define LittleShortSW(x) +#define LittleFloat(x) (x) +#endif + + typedef unsigned int dword; typedef unsigned int uint; typedef char string[MAX_STRING];