X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=common.h;h=bd715ed65eeb2cc9259b33bfabb116c5db959b6a;hb=7c586d061e7308e0e8164827fa0e14b470921d67;hp=406348072b37a6d53cb7a99d8ecf0808844eb7ac;hpb=c72641f5e795ed0e0d58a38d79860cc92597e4da;p=xonotic%2Fdarkplaces.git diff --git a/common.h b/common.h index 40634807..bd715ed6 100644 --- a/common.h +++ b/common.h @@ -21,9 +21,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef COMMON_H #define COMMON_H -/// many buffers use this size -#define MAX_INPUTLINE 16384 - /// MSVC has a different name for several standard functions #ifdef WIN32 @@ -72,78 +69,49 @@ void Com_BlockFullChecksum (void *buffer, int len, unsigned char *outbuf); // 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 -// normally including sys/types.h includes endian.h for the platform, which defines BYTE_ORDER, LITTLE_ENDIAN, and BIG_ENDIAN, however endian.h is a BSD-ism, and may not be present on all platforms (particularly windows) -#ifndef BYTE_ORDER -# if defined(WIN32) || defined (__i386) || defined(__amd64) -# define BYTE_ORDER LITTLE_ENDIAN -# else -# if defined(SUNOS) -# if defined(__i386) || defined(__amd64) -# define BYTE_ORDER LITTLE_ENDIAN -# else -# define BYTE_ORDER BIG_ENDIAN -# endif -# else -# warning "Unable to determine the CPU endianess. Defaulting to little endian" -# define BYTE_ORDER LITTLE_ENDIAN -# endif -# endif -#endif +// check mem_bigendian if you need to know the system byte order /*! \name Byte order functions. * @{ */ -/// Swaps the byte order of the given short \p l. -short ShortSwap (short l); - -/// Swaps the byte order of the given long \p l. -int LongSwap (int l); - -/// Swaps the byte order of the given float \p f. -float FloatSwap (float f); - -#if BYTE_ORDER == LITTLE_ENDIAN -// little endian -#define BigShort(l) ShortSwap(l) -#define LittleShort(l) (l) -#define BigLong(l) LongSwap(l) -#define LittleLong(l) (l) -#define BigFloat(l) FloatSwap(l) -#define LittleFloat(l) (l) -#else -// big endian -#define BigShort(l) (l) -#define LittleShort(l) ShortSwap(l) -#define BigLong(l) (l) -#define LittleLong(l) LongSwap(l) -#define BigFloat(l) (l) -#define LittleFloat(l) FloatSwap(l) -#endif +// unaligned memory access crashes on some platform, so always read bytes... +#define BigShort(l) BuffBigShort((unsigned char *)&(l)) +#define LittleShort(l) BuffLittleShort((unsigned char *)&(l)) +#define BigLong(l) BuffBigLong((unsigned char *)&(l)) +#define LittleLong(l) BuffLittleLong((unsigned char *)&(l)) +#define BigFloat(l) BuffBigFloat((unsigned char *)&(l)) +#define LittleFloat(l) BuffLittleFloat((unsigned char *)&(l)) + +/// Extract a big endian 32bit float from the given \p buffer. +float BuffBigFloat (const unsigned char *buffer); + +/// Extract a big endian 32bit int from the given \p buffer. +int BuffBigLong (const unsigned char *buffer); + +/// Extract a big endian 16bit short from the given \p buffer. +short BuffBigShort (const unsigned char *buffer); + +/// Extract a little endian 32bit float from the given \p buffer. +float BuffLittleFloat (const unsigned char *buffer); -/// Extract a big endian long from the given \p buffer. -unsigned int BuffBigLong (const unsigned char *buffer); +/// Extract a little endian 32bit int from the given \p buffer. +int BuffLittleLong (const unsigned char *buffer); -/// Extract a big endian short from the given \p buffer. -unsigned short BuffBigShort (const unsigned char *buffer); +/// Extract a little endian 16bit short from the given \p buffer. +short BuffLittleShort (const unsigned char *buffer); -/// Extract a little endian long from the given \p buffer. -unsigned int BuffLittleLong (const unsigned char *buffer); +/// Encode a big endian 32bit int to the given \p buffer +void StoreBigLong (unsigned char *buffer, unsigned int i); -/// Extract a little endian short from the given \p buffer. -unsigned short BuffLittleShort (const unsigned char *buffer); +/// Encode a big endian 16bit int to the given \p buffer +void StoreBigShort (unsigned char *buffer, unsigned short i); + +/// Encode a little endian 32bit int to the given \p buffer +void StoreLittleLong (unsigned char *buffer, unsigned int i); + +/// Encode a little endian 16bit int to the given \p buffer +void StoreLittleShort (unsigned char *buffer, unsigned short i); //@} //============================================================================ @@ -166,7 +134,7 @@ typedef enum protocolversion_e PROTOCOL_QUAKEWORLD, ///< quakeworld protocol PROTOCOL_NEHAHRABJP, ///< same as QUAKEDP but with 16bit modelindex PROTOCOL_NEHAHRABJP2, ///< same as NEHAHRABJP but with 16bit soundindex - PROTOCOL_NEHAHRABJP3, ///< same as NEHAHRABJP2 but with some changes + PROTOCOL_NEHAHRABJP3 ///< same as NEHAHRABJP2 but with some changes } protocolversion_t; @@ -236,6 +204,7 @@ int COM_ParseToken_Console(const char **datapointer); extern int com_argc; extern const char **com_argv; +extern int com_selffd; int COM_CheckParm (const char *parm); void COM_Init (void); @@ -247,7 +216,13 @@ char *va(const char *format, ...) DP_FUNC_PRINTF(1); // snprintf and vsnprintf are NOT portable. Use their DP counterparts instead +#ifdef snprintf +# undef snprintf +#endif #define snprintf DO_NOT_USE_SNPRINTF__USE_DPSNPRINTF +#ifdef vsnprintf +# undef vsnprintf +#endif #define vsnprintf DO_NOT_USE_VSNPRINTF__USE_DPVSNPRINTF // dpsnprintf and dpvsnprintf @@ -276,6 +251,16 @@ extern int dpvsnprintf (char *buffer, size_t buffersize, const char *format, va_ extern struct cvar_s registered; extern struct cvar_s cmdline; +typedef enum userdirmode_e +{ + USERDIRMODE_NOHOME, // basedir only + USERDIRMODE_HOME, // Windows basedir, general POSIX (~/.) + USERDIRMODE_MYGAMES, // pre-Vista (My Documents/My Games/), general POSIX (~/.) + USERDIRMODE_SAVEDGAMES, // Vista (%USERPROFILE%/Saved Games/), OSX (~/Library/Application Support/), Linux (~/.config) + USERDIRMODE_COUNT +} +userdirmode_t; + typedef enum gamemode_e { GAME_NORMAL, @@ -283,6 +268,7 @@ typedef enum gamemode_e GAME_ROGUE, GAME_NEHAHRA, GAME_NEXUIZ, + GAME_XONOTIC, GAME_TRANSFUSION, GAME_GOODVSBAD2, GAME_TEU, @@ -300,8 +286,11 @@ typedef enum gamemode_e GAME_DARSANA, GAME_CONTAGIONTHEORY, GAME_EDU2P, - GAME_BLADEMASTER, GAME_PROPHECY, + GAME_BLOODOMNICIDE, + GAME_STEELSTORM, // added by motorsep + GAME_STRAPBOMB, // added by motorsep for Urre + GAME_MOONHELM, GAME_COUNT } gamemode_t; @@ -314,6 +303,8 @@ extern const char *gamescreenshotname; extern const char *gameuserdirname; extern char com_modname[MAX_OSPATH]; +void COM_ChangeGameTypeForGameDirs(void); + void COM_ToLowerString (const char *in, char *out, size_t size_out); void COM_ToUpperString (const char *in, char *out, size_t size_out); int COM_StringBeginsWith(const char *s, const char *match); @@ -338,7 +329,7 @@ int matchpattern_with_separator(const char *in, const char *pattern, int caseins void stringlistinit(stringlist_t *list); void stringlistfreecontents(stringlist_t *list); void stringlistappend(stringlist_t *list, const char *text); -void stringlistsort(stringlist_t *list); +void stringlistsort(stringlist_t *list, qboolean uniq); void listdirectory(stringlist_t *list, const char *basepath, const char *path); char *SearchInfostring(const char *infostring, const char *key); @@ -377,5 +368,10 @@ size_t strlcpy(char *dst, const char *src, size_t siz); void FindFraction(double val, int *num, int *denom, int denomMax); +// decodes XPM file to XPM array (as if #include'd) +char **XPM_DecodeString(const char *in); + +size_t base64_encode(unsigned char *buf, size_t buflen, size_t outbuflen); + #endif