void SZ_Clear (sizebuf_t *buf);
void *SZ_GetSpace (sizebuf_t *buf, int length);
void SZ_Write (sizebuf_t *buf, const void *data, int length);
-void SZ_Print (sizebuf_t *buf, const char *data); // strcats onto the sizebuf
+void SZ_Print(sizebuf_t *buf, const char *data); // strcats onto the sizebuf
void SZ_HexDumpToConsole(const sizebuf_t *buf);
void Com_HexDumpToConsole(const qbyte *data, int size);
+
//============================================================================
-#if !defined(ENDIAN_LITTLE) && !defined(ENDIAN_BIG)
-#if defined(__i386__) || defined(__ia64__) || defined(WIN32) || (defined(__alpha__) || defined(__alpha)) || defined(__arm__) || (defined(__mips__) && defined(__MIPSEL__)) || defined(__LITTLE_ENDIAN__)
-#define ENDIAN_LITTLE
-#else
-#define ENDIAN_BIG
+// Endianess handling
+//============================================================================
+
+// We use BSD-style defines: BYTE_ORDER is defined to either BIG_ENDIAN or LITTLE_ENDIAN
+
+// Initializations
+#if !defined(BYTE_ORDER) || !defined(LITTLE_ENDIAN) || !defined(BIG_ENDIAN) || (BYTE_ORDER != LITTLE_ENDIAN && BYTE_ORDER != BIG_ENDIAN)
+# undef BYTE_ORDER
+# undef LITTLE_ENDIAN
+# undef BIG_ENDIAN
+# define LITTLE_ENDIAN 1234
+# define BIG_ENDIAN 4321
#endif
+
+// If we still don't know the CPU endianess at this point, we try to guess
+#ifndef BYTE_ORDER
+# if defined(WIN32)
+# define BYTE_ORDER LITTLE_ENDIAN
+# else
+# warning "Unable to determine the CPU endianess. Defaulting to little endian"
+# define BYTE_ORDER LITTLE_ENDIAN
+# endif
#endif
+
short ShortSwap (short l);
int LongSwap (int l);
float FloatSwap (float f);
-#ifdef ENDIAN_LITTLE
+#if BYTE_ORDER == LITTLE_ENDIAN
// little endian
#define BigShort(l) ShortSwap(l)
#define LittleShort(l) (l)
#define LittleLong(l) (l)
#define BigFloat(l) FloatSwap(l)
#define LittleFloat(l) (l)
-#elif defined(ENDIAN_BIG)
+#else
// big endian
#define BigShort(l) (l)
#define LittleShort(l) ShortSwap(l)
#define LittleLong(l) LongSwap(l)
#define BigFloat(l) (l)
#define LittleFloat(l) FloatSwap(l)
-#else
-// figure it out at runtime
-extern short (*BigShort) (short l);
-extern short (*LittleShort) (short l);
-extern int (*BigLong) (int l);
-extern int (*LittleLong) (int l);
-extern float (*BigFloat) (float l);
-extern float (*LittleFloat) (float l);
#endif
unsigned int BuffBigLong (const qbyte *buffer);
float MSG_ReadCoord (void);
-float MSG_ReadDPCoord (void);
-
#define MSG_ReadAngle() (MSG_ReadByte() * (360.0f / 256.0f))
#define MSG_ReadPreciseAngle() (MSG_ReadShort() * (360.0f / 65536.0f))
-#define MSG_ReadVector(v) {(v)[0] = MSG_ReadCoord();(v)[1] = MSG_ReadCoord();(v)[2] = MSG_ReadCoord();}
+#define MSG_ReadVector(v) ((v)[0] = MSG_ReadCoord(), (v)[1] = MSG_ReadCoord(), (v)[2] = MSG_ReadCoord())
//============================================================================
//============================================================================
extern struct cvar_s registered;
+extern struct cvar_s cmdline;
#define GAME_NORMAL 0
#define GAME_HIPNOTIC 1
#define GAME_SETHERAL 11
#define GAME_SOM 12
#define GAME_TENEBRAE 13 // full of evil hackery
+#define GAME_NEOTERIC 14
extern int gamemode;
extern char *gamename;
extern char *gamedirname;
+extern char *gamescreenshotname;
extern char com_modname[MAX_OSPATH];
void COM_ToLowerString (const char *in, char *out, size_t size_out);