/* * Baltisot * Copyright (C) 1999-2008 Nicolas "Pixel" Noble * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef __GENERIC_H__ #define __GENERIC_H__ #ifdef _MSVC // 4996 = 'foobar' was declared deprecated. // 4244, 4267 = 'foobar': conversion from 'foo' to 'bar', possible loss of data. #pragma warning(disable:4996 4244 4267) #endif #include #include #include #define M_BARE 0 #define M_ERROR 1 #define M_STATUS 2 #define M_WARNING 3 #define M_INFO 4 #ifdef _WIN32 #include #define vsnprintf _vsnprintf #define snprintf _snprintf #endif #ifndef bcopy #define bcopy(x,y,z) memcpy((y),(x),(z)) #endif #ifdef __MIPSEL__ /* we most probably are in ps2dev here */ #include #include typedef u64 Uint64; typedef s64 int64; typedef u32 Uint32; typedef s32 int32; typedef u16 Uint16; typedef s16 int16; typedef u8 Uint8; typedef s8 int8; typedef u8 Byte; typedef u16 Word; typedef u32 DWord; #else #if ! defined SDL_VERSIONNUM && ! defined Uint32 #ifdef __amd64 typedef unsigned int Uint32; #else typedef unsigned long int Uint32; #endif #endif #ifndef int32 #ifdef __amd64 typedef signed int int32; #else typedef signed long int int32; #endif #endif #ifndef Uint16 typedef unsigned short int Uint16; #endif #ifndef int16 typedef signed short int int16; #endif #ifndef Uint8 typedef unsigned char Uint8; #endif #ifndef int8 typedef signed char int8; #endif #ifndef Byte typedef Uint8 Byte; #endif #ifndef Word typedef Uint16 Word; #endif #ifndef DWord typedef Uint32 DWord; #endif #if !defined __ssize_t_defined && !defined _SSIZE_T && !defined ssize_t && !defined _BSD_SSIZE_T_DEFINED_ typedef int32 ssize_t; #endif #if defined __linux__ || defined sun || defined __solaris__ || defined __CYGWIN32__ || defined __MINGW32__ || defined FORCE64 || defined __APPLE__ typedef long long int64; typedef unsigned long long Uint64; #else #if defined _WIN32 typedef _int64 int64; typedef unsigned _int64 Uint64; #else #error Unsupported platform (need 64 bits ints definition) #endif #endif #endif #ifndef PACKED #if defined __linux__ || defined sun || defined __solaris__ || defined __CYGWIN32__ || defined __MINGW32__ || defined __APPLE__ #define PACKED __attribute__((packed)) #else // PACKED #define PACKED #endif #endif // !PACKED extern char verbosity; char ** split(char * s, char t); #if defined(_WIN32) #define tolittle(x) x static Uint32 tobig(Uint32 x) { return (x >> 24) | ((x >> 8) & 0x0000ff00) | ((x << 8) & 0x00ff0000) | (x << 24); } #elif defined(WORDS_BIGENDIAN) #define tobig(x) x static Uint32 tolittle(Uint32 x) { return (x >> 24) | ((x >> 8) & 0x0000ff00) | ((x << 8) & 0x00ff0000) | (x << 24); } #else #ifndef WORDS_LITTLEENDIAN #warning Using little endian by default. #endif #define tolittle(x) x static Uint32 tobig(Uint32 x) { return (x >> 24) | ((x >> 8) & 0x0000ff00) | ((x << 8) & 0x00ff0000) | (x << 24); } #endif #if defined __cplusplus #ifndef MAX template inline T MAX(T a, T b) { return a < b ? b : a; } #endif #ifndef MIN template inline T MIN(T a, T b) { return a > b ? b : a; } #endif #ifndef SWAP template inline void SWAP(T & a, T & b) { T t = a; a = b; b = t; } #endif #ifndef ABS template inline T ABS(T x) { T ox = -x; return x > 0 ? x : ox; } #endif #ifndef align # define align(a) (((ub4)a+(sizeof(void *)-1))&(~(sizeof(void *)-1))) #endif #if defined __linux__ || defined sun || defined __solaris__ || defined __CYGWIN32__ || defined __MINGW32__ || defined __APPLE__ #define FUNCNAME String(__PRETTY_FUNCTION__) #else #define FUNCNAME String(__FUNCSIG__) #endif #else // cplusplus #ifndef MAX #define MAX(__a,__b) ((__a)<(__b)?(__b):(__a)) #endif #ifndef MIN #define MIN(__a,__b) ((__a)>(__b)?(__b):(__a)) #endif #endif // !cplusplus #define BITCOUNT(x) (((BX_(x)+(BX_(x)>>4)) & 0x0F0F0F0F) % 255) #define BX_(x) ((x) - (((x)>>1)&0x77777777) \ - (((x)>>2)&0x33333333) \ - (((x)>>3)&0x11111111)) #define ISPOT(x) (((x)&(x-1))==0?1:0) #if defined __linux__ || defined sun || defined __solaris__ || defined __CYGWIN32__ || defined __APPLE__ #define MKDIR(name) mkdir(name, 0777) #else #if defined __WIN32__ || defined _WIN32 #include #define MKDIR mkdir #else #warning Unknow compiler/platform; MKDIR not defined. #endif #endif #endif