/* * Baltisot * Copyright (C) 1999-2003 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 */ /* $Id: generic.h,v 1.29 2004-07-16 15:04:52 pixel Exp $ */ #ifndef __GENERIC_H__ #define __GENERIC_H__ #include #include #include #define M_BARE -1 #define M_ERROR 0 #define M_STATUS 1 #define M_WARNING 2 #define M_INFO 3 #ifdef _WIN32 #include #endif #ifndef bcopy #define bcopy(x,y,z) memcpy((y),(x),(z)) #endif #if ! defined SDL_VERSIONNUM && ! defined Uint32 typedef unsigned long int Uint32; #endif #ifndef int32 typedef signed long int int32; #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 #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 #ifndef PPACKED #if defined __linux__ || defined sun || defined __solaris__ || defined __CYGWIN32__ || defined __MINGW32__ || defined __APPLE__ #define PPACKED #else // PPACKED #define PPACKED __declspec(align(1)) #endif #endif // !PPACKED extern char verbosity; char ** split(char * s, char t); #ifdef _WIN32 #define tolittle(x) x static Uint32 tobig(Uint32 x) { return (x >> 24) | ((x >> 8) & 0x0000ff00) | ((x << 8) & 0x00ff0000) | (x << 24); } #else #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 #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 #error Unknow compiler/platform #endif #endif #endif