1 /*
2 ===========================================================================
3 Copyright (C) 1999-2005 Id Software, Inc.
4 
5 This file is part of Quake III Arena source code.
6 
7 Quake III Arena source code is free software; you can redistribute it
8 and/or modify it under the terms of the GNU General Public License as
9 published by the Free Software Foundation; either version 2 of the License,
10 or (at your option) any later version.
11 
12 Quake III Arena source code is distributed in the hope that it will be
13 useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16 
17 You should have received a copy of the GNU General Public License
18 along with Quake III Arena source code; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
20 ===========================================================================
21 */
22 // bg_lib.h -- standard C library replacement routines used by code
23 // compiled for the virtual machine
24 
25 // This file is NOT included on native builds
26 #if !defined( BG_LIB_H ) && defined( Q3_VM )
27 #define BG_LIB_H
28 
29 //Ignore __attribute__ on non-gcc platforms
30 #ifndef __GNUC__
31 #ifndef __attribute__
32 #define __attribute__(x)
33 #endif
34 #endif
35 
36 #ifndef NULL
37 #define NULL ((void *)0)
38 #endif
39 
40 typedef int size_t;
41 
42 typedef char *  va_list;
43 #define _INTSIZEOF(n)   ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )
44 #define va_start(ap,v)  ( ap = (va_list)&v + _INTSIZEOF(v) )
45 #define va_arg(ap,t)    ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
46 #define va_end(ap)      ( ap = (va_list)0 )
47 
48 #define CHAR_BIT      8         /* number of bits in a char */
49 #define SCHAR_MIN   (-128)      /* minimum signed char value */
50 #define SCHAR_MAX     127       /* maximum signed char value */
51 #define UCHAR_MAX     0xff      /* maximum unsigned char value */
52 
53 #define SHRT_MIN    (-32768)        /* minimum (signed) short value */
54 #define SHRT_MAX      32767         /* maximum (signed) short value */
55 #define USHRT_MAX     0xffff        /* maximum unsigned short value */
56 #define INT_MIN     (-2147483647 - 1) /* minimum (signed) int value */
57 #define INT_MAX       2147483647    /* maximum (signed) int value */
58 #define UINT_MAX      0xffffffff    /* maximum unsigned int value */
59 #define LONG_MIN    (-2147483647L - 1) /* minimum (signed) long value */
60 #define LONG_MAX      2147483647L   /* maximum (signed) long value */
61 #define ULONG_MAX     0xffffffffUL  /* maximum unsigned long value */
62 
63 #define isalnum(c)  (isalpha(c) || isdigit(c))
64 #define isalpha(c)  (isupper(c) || islower(c))
65 #define isascii(c)  ((c) > 0 && (c) <= 0x7f)
66 #define iscntrl(c)  (((c) >= 0) && (((c) <= 0x1f) || ((c) == 0x7f)))
67 #define isdigit(c)  ((c) >= '0' && (c) <= '9')
68 #define isgraph(c)  ((c) != ' ' && isprint(c))
69 #define islower(c)  ((c) >=  'a' && (c) <= 'z')
70 #define isprint(c)  ((c) >= ' ' && (c) <= '~')
71 #define ispunct(c)  (((c) > ' ' && (c) <= '~') && !isalnum(c))
72 #define isspace(c)  ((c) ==  ' ' || (c) == '\f' || (c) == '\n' || (c) == '\r' || \
73                      (c) == '\t' || (c) == '\v')
74 #define isupper(c)  ((c) >=  'A' && (c) <= 'Z')
75 #define isxdigit(c) (isxupper(c) || isxlower(c))
76 #define isxlower(c) (isdigit(c) || (c >= 'a' && c <= 'f'))
77 #define isxupper(c) (isdigit(c) || (c >= 'A' && c <= 'F'))
78 
79 // Misc functions
80 typedef int cmp_t(const void *, const void *);
81 void qsort(void *a, size_t n, size_t es, cmp_t *cmp);
82 void	srand( unsigned seed );
83 int		rand( void );
84 
85 // String functions
86 size_t strlen( const char *string );
87 char *strcat( char *strDestination, const char *strSource );
88 char *strcpy( char *strDestination, const char *strSource );
89 int strcmp( const char *string1, const char *string2 );
90 char *strchr( const char *string, int c );
91 char *strstr( const char *string, const char *strCharSet );
92 char *strncpy( char *strDest, const char *strSource, size_t count );
93 int tolower( int c );
94 int toupper( int c );
95 
96 double atof( const char *string );
97 double _atof( const char **stringPtr );
98 int atoi( const char *string );
99 int _atoi( const char **stringPtr );
100 
101 int Q_vsnprintf( char *buffer, size_t length, const char *fmt, va_list argptr );
102 int Q_snprintf( char *buffer, size_t length, const char *fmt, ... ) __attribute__ ((format (printf, 3, 4)));
103 
104 int sscanf( const char *buffer, const char *fmt, ... ) __attribute__ ((format (scanf, 2, 3)));
105 
106 // Memory functions
107 void *memmove( void *dest, const void *src, size_t count );
108 void *memset( void *dest, int c, size_t count );
109 void *memcpy( void *dest, const void *src, size_t count );
110 
111 // Math functions
112 double ceil( double x );
113 double floor( double x );
114 double sqrt( double x );
115 double sin( double x );
116 double cos( double x );
117 double atan2( double y, double x );
118 double tan( double x );
119 int abs( int n );
120 double fabs( double x );
121 double acos( double x );
122 
123 #endif // BG_LIB_H
124