X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=common.h;h=8a6dbd2a62534bfcf4f402ac14793cac3f195c08;hb=5f6013df0acabebeb17602e8824f4e450d010d9f;hp=45cf7de54be886c202609a77f7e1e87e43b64208;hpb=b3030be8791663d54406b82fd5d307c948bd8bdd;p=xonotic%2Fdarkplaces.git diff --git a/common.h b/common.h index 45cf7de5..8a6dbd2a 100644 --- a/common.h +++ b/common.h @@ -46,6 +46,8 @@ typedef struct sizebuf_s unsigned char *data; int maxsize; int cursize; + int readcount; + qboolean badread; // set if a read goes beyond end of message } sizebuf_t; void SZ_Clear (sizebuf_t *buf); @@ -64,6 +66,8 @@ unsigned char COM_BlockSequenceCRCByteQW(unsigned char *base, int length, int se unsigned Com_BlockChecksum (void *buffer, int length); void Com_BlockFullChecksum (void *buffer, int len, unsigned char *outbuf); +void COM_Init_Commands(void); + //============================================================================ // Endianess handling @@ -134,7 +138,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; @@ -143,6 +147,7 @@ protocolversion_t; * @{ */ +void MSG_InitReadBuffer (sizebuf_t *buf, unsigned char *data, int size); void MSG_WriteChar (sizebuf_t *sb, int c); void MSG_WriteByte (sizebuf_t *sb, int c); void MSG_WriteShort (sizebuf_t *sb, int c); @@ -160,34 +165,31 @@ void MSG_WriteCoord (sizebuf_t *sb, float f, protocolversion_t protocol); void MSG_WriteVector (sizebuf_t *sb, float *v, protocolversion_t protocol); void MSG_WriteAngle (sizebuf_t *sb, float f, protocolversion_t protocol); -extern int msg_readcount; -extern qboolean msg_badread; // set if a read goes beyond end of message - -void MSG_BeginReading (void); -int MSG_ReadLittleShort (void); -int MSG_ReadBigShort (void); -int MSG_ReadLittleLong (void); -int MSG_ReadBigLong (void); -float MSG_ReadLittleFloat (void); -float MSG_ReadBigFloat (void); -char *MSG_ReadString (void); -int MSG_ReadBytes (int numbytes, unsigned char *out); - -#define MSG_ReadChar() (msg_readcount >= net_message.cursize ? (msg_badread = true, -1) : (signed char)net_message.data[msg_readcount++]) -#define MSG_ReadByte() (msg_readcount >= net_message.cursize ? (msg_badread = true, -1) : (unsigned char)net_message.data[msg_readcount++]) +void MSG_BeginReading (sizebuf_t *sb); +int MSG_ReadLittleShort (sizebuf_t *sb); +int MSG_ReadBigShort (sizebuf_t *sb); +int MSG_ReadLittleLong (sizebuf_t *sb); +int MSG_ReadBigLong (sizebuf_t *sb); +float MSG_ReadLittleFloat (sizebuf_t *sb); +float MSG_ReadBigFloat (sizebuf_t *sb); +char *MSG_ReadString (sizebuf_t *sb, char *string, size_t maxstring); +int MSG_ReadBytes (sizebuf_t *sb, int numbytes, unsigned char *out); + +#define MSG_ReadChar(sb) ((sb)->readcount >= (sb)->cursize ? ((sb)->badread = true, -1) : (signed char)(sb)->data[(sb)->readcount++]) +#define MSG_ReadByte(sb) ((sb)->readcount >= (sb)->cursize ? ((sb)->badread = true, -1) : (unsigned char)(sb)->data[(sb)->readcount++]) #define MSG_ReadShort MSG_ReadLittleShort #define MSG_ReadLong MSG_ReadLittleLong #define MSG_ReadFloat MSG_ReadLittleFloat -float MSG_ReadAngle8i (void); -float MSG_ReadAngle16i (void); -float MSG_ReadAngle32f (void); -float MSG_ReadCoord13i (void); -float MSG_ReadCoord16i (void); -float MSG_ReadCoord32f (void); -float MSG_ReadCoord (protocolversion_t protocol); -void MSG_ReadVector (float *v, protocolversion_t protocol); -float MSG_ReadAngle (protocolversion_t protocol); +float MSG_ReadAngle8i (sizebuf_t *sb); +float MSG_ReadAngle16i (sizebuf_t *sb); +float MSG_ReadAngle32f (sizebuf_t *sb); +float MSG_ReadCoord13i (sizebuf_t *sb); +float MSG_ReadCoord16i (sizebuf_t *sb); +float MSG_ReadCoord32f (sizebuf_t *sb); +float MSG_ReadCoord (sizebuf_t *sb, protocolversion_t protocol); +void MSG_ReadVector (sizebuf_t *sb, float *v, protocolversion_t protocol); +float MSG_ReadAngle (sizebuf_t *sb, protocolversion_t protocol); //@} //============================================================================ @@ -197,25 +199,32 @@ int COM_Wordwrap(const char *string, size_t length, float continuationSize, floa extern char com_token[MAX_INPUTLINE]; -int COM_ParseToken_Simple(const char **datapointer, qboolean returnnewline, qboolean parsebackslash); +int COM_ParseToken_Simple(const char **datapointer, qboolean returnnewline, qboolean parsebackslash, qboolean parsecomments); int COM_ParseToken_QuakeC(const char **datapointer, qboolean returnnewline); int COM_ParseToken_VM_Tokenize(const char **datapointer, qboolean returnnewline); 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); void COM_Shutdown (void); void COM_InitGameType (void); -char *va(const char *format, ...) DP_FUNC_PRINTF(1); -// does a varargs printf into a temp buffer +char *va(char *buf, size_t buflen, const char *format, ...) DP_FUNC_PRINTF(3); +// does a varargs printf into provided buffer, returns buffer (so it can be called in-line unlike dpsnprintf) // 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 @@ -244,6 +253,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, @@ -251,6 +270,7 @@ typedef enum gamemode_e GAME_ROGUE, GAME_NEHAHRA, GAME_NEXUIZ, + GAME_XONOTIC, GAME_TRANSFUSION, GAME_GOODVSBAD2, GAME_TEU, @@ -271,6 +291,10 @@ typedef enum gamemode_e GAME_PROPHECY, GAME_BLOODOMNICIDE, GAME_STEELSTORM, // added by motorsep + GAME_STEELSTORM2, // added by motorsep + GAME_TOMESOFMEPHISTOPHELES, // added by motorsep + GAME_STRAPBOMB, // added by motorsep for Urre + GAME_MOONHELM, GAME_COUNT } gamemode_t; @@ -283,6 +307,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); @@ -307,12 +333,10 @@ 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); - -void InfoString_GetValue(const char *buffer, const char *key, char *value, size_t valuelength); +char *InfoString_GetValue(const char *buffer, const char *key, char *value, size_t valuelength); void InfoString_SetValue(char *buffer, size_t bufferlength, const char *key, const char *value); void InfoString_Print(char *buffer); @@ -346,5 +370,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