2011-02-18 14:31:32 +00:00
|
|
|
/*
|
|
|
|
===========================================================================
|
|
|
|
Copyright (C) 1999-2005 Id Software, Inc.
|
2015-11-13 22:41:34 +00:00
|
|
|
Copyright (C) 2002-2015 Q3Rally Team (Per Thormann - q3rally@gmail.com)
|
2011-02-18 14:31:32 +00:00
|
|
|
|
|
|
|
This file is part of q3rally source code.
|
|
|
|
|
|
|
|
q3rally source code 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.
|
|
|
|
|
|
|
|
q3rally source code 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 q3rally; if not, write to the Free Software
|
|
|
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
===========================================================================
|
|
|
|
*/
|
|
|
|
// bg_lib.h -- standard C library replacement routines used by code
|
|
|
|
// compiled for the virtual machine
|
|
|
|
|
|
|
|
// This file is NOT included on native builds
|
|
|
|
#if !defined( BG_LIB_H ) && defined( Q3_VM )
|
|
|
|
#define BG_LIB_H
|
|
|
|
|
|
|
|
//Ignore __attribute__ on non-gcc platforms
|
|
|
|
#ifndef __GNUC__
|
|
|
|
#ifndef __attribute__
|
|
|
|
#define __attribute__(x)
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef NULL
|
|
|
|
#define NULL ((void *)0)
|
|
|
|
#endif
|
|
|
|
|
2011-07-26 08:52:24 +00:00
|
|
|
typedef unsigned int size_t;
|
2011-02-18 14:31:32 +00:00
|
|
|
|
|
|
|
typedef char * va_list;
|
|
|
|
#define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )
|
|
|
|
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )
|
|
|
|
#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
|
|
|
|
#define va_end(ap) ( ap = (va_list)0 )
|
|
|
|
|
|
|
|
#define CHAR_BIT 8 /* number of bits in a char */
|
|
|
|
#define SCHAR_MAX 0x7f /* maximum signed char value */
|
|
|
|
#define SCHAR_MIN (-SCHAR_MAX - 1) /* minimum signed char value */
|
|
|
|
#define UCHAR_MAX 0xff /* maximum unsigned char value */
|
|
|
|
|
|
|
|
#define SHRT_MAX 0x7fff /* maximum (signed) short value */
|
|
|
|
#define SHRT_MIN (-SHRT_MAX - 1) /* minimum (signed) short value */
|
|
|
|
#define USHRT_MAX 0xffff /* maximum unsigned short value */
|
|
|
|
#define INT_MAX 0x7fffffff /* maximum (signed) int value */
|
|
|
|
#define INT_MIN (-INT_MAX - 1) /* minimum (signed) int value */
|
|
|
|
#define UINT_MAX 0xffffffff /* maximum unsigned int value */
|
|
|
|
#define LONG_MAX 0x7fffffffL /* maximum (signed) long value */
|
|
|
|
#define LONG_MIN (-LONG_MAX - 1) /* minimum (signed) long value */
|
|
|
|
#define ULONG_MAX 0xffffffffUL /* maximum unsigned long value */
|
|
|
|
|
|
|
|
#define isalnum(c) (isalpha(c) || isdigit(c))
|
|
|
|
#define isalpha(c) (isupper(c) || islower(c))
|
|
|
|
#define isascii(c) ((c) > 0 && (c) <= 0x7f)
|
|
|
|
#define iscntrl(c) (((c) >= 0) && (((c) <= 0x1f) || ((c) == 0x7f)))
|
|
|
|
#define isdigit(c) ((c) >= '0' && (c) <= '9')
|
|
|
|
#define isgraph(c) ((c) != ' ' && isprint(c))
|
|
|
|
#define islower(c) ((c) >= 'a' && (c) <= 'z')
|
|
|
|
#define isprint(c) ((c) >= ' ' && (c) <= '~')
|
|
|
|
#define ispunct(c) (((c) > ' ' && (c) <= '~') && !isalnum(c))
|
|
|
|
#define isspace(c) ((c) == ' ' || (c) == '\f' || (c) == '\n' || (c) == '\r' || \
|
|
|
|
(c) == '\t' || (c) == '\v')
|
|
|
|
#define isupper(c) ((c) >= 'A' && (c) <= 'Z')
|
|
|
|
#define isxdigit(c) (isxupper(c) || isxlower(c))
|
|
|
|
#define isxlower(c) (isdigit(c) || (c >= 'a' && c <= 'f'))
|
|
|
|
#define isxupper(c) (isdigit(c) || (c >= 'A' && c <= 'F'))
|
|
|
|
|
|
|
|
// Misc functions
|
|
|
|
typedef int cmp_t(const void *, const void *);
|
|
|
|
void qsort(void *a, size_t n, size_t es, cmp_t *cmp);
|
|
|
|
void srand( unsigned seed );
|
|
|
|
int rand( void );
|
|
|
|
|
|
|
|
// String functions
|
|
|
|
size_t strlen( const char *string );
|
|
|
|
char *strcat( char *strDestination, const char *strSource );
|
|
|
|
char *strcpy( char *strDestination, const char *strSource );
|
|
|
|
int strcmp( const char *string1, const char *string2 );
|
|
|
|
char *strchr( const char *string, int c );
|
2011-07-26 08:52:24 +00:00
|
|
|
char *strrchr(const char *string, int c);
|
2011-02-18 14:31:32 +00:00
|
|
|
char *strstr( const char *string, const char *strCharSet );
|
|
|
|
char *strncpy( char *strDest, const char *strSource, size_t count );
|
|
|
|
int tolower( int c );
|
|
|
|
int toupper( int c );
|
|
|
|
|
|
|
|
double atof( const char *string );
|
|
|
|
double _atof( const char **stringPtr );
|
2011-07-26 08:52:24 +00:00
|
|
|
double strtod( const char *nptr, char **endptr );
|
2011-02-18 14:31:32 +00:00
|
|
|
int atoi( const char *string );
|
|
|
|
int _atoi( const char **stringPtr );
|
2011-07-26 08:52:24 +00:00
|
|
|
long strtol( const char *nptr, char **endptr, int base );
|
2011-02-18 14:31:32 +00:00
|
|
|
|
|
|
|
int Q_vsnprintf( char *buffer, size_t length, const char *fmt, va_list argptr );
|
|
|
|
|
|
|
|
int sscanf( const char *buffer, const char *fmt, ... ) __attribute__ ((format (scanf, 2, 3)));
|
|
|
|
|
|
|
|
// Memory functions
|
|
|
|
void *memmove( void *dest, const void *src, size_t count );
|
|
|
|
void *memset( void *dest, int c, size_t count );
|
|
|
|
void *memcpy( void *dest, const void *src, size_t count );
|
|
|
|
|
|
|
|
// STONELANCE - used in cg_rally_platetools
|
2012-09-15 08:01:58 +00:00
|
|
|
int memcmp( const void *dest, const void *src, size_t count );
|
2011-02-18 14:31:32 +00:00
|
|
|
// END
|
|
|
|
|
|
|
|
// Math functions
|
|
|
|
double ceil( double x );
|
|
|
|
double floor( double x );
|
|
|
|
double sqrt( double x );
|
|
|
|
double sin( double x );
|
|
|
|
double cos( double x );
|
2012-09-15 08:01:58 +00:00
|
|
|
float Q_acos( float c );
|
|
|
|
float Q_asin( float c );
|
2011-02-18 14:31:32 +00:00
|
|
|
double atan2( double y, double x );
|
|
|
|
double tan( double x );
|
|
|
|
int abs( int n );
|
|
|
|
double fabs( double x );
|
|
|
|
|
2012-09-15 08:01:58 +00:00
|
|
|
// STONELANCE
|
|
|
|
double exp( double x );
|
|
|
|
// END
|
2011-02-18 14:31:32 +00:00
|
|
|
|
2012-09-15 08:01:58 +00:00
|
|
|
#endif // BG_LIB_H
|