]> de.git.xonotic.org Git - xonotic/netradiant.git/blob - libs/picomodel/picointernal.h
transfer from internal tree r5311 branches/1.4-gpl
[xonotic/netradiant.git] / libs / picomodel / picointernal.h
1 /* -----------------------------------------------------------------------------\r
2 \r
3 PicoModel Library\r
4 \r
5 Copyright (c) 2002, Randy Reddig & seaw0lf\r
6 All rights reserved.\r
7 \r
8 Redistribution and use in source and binary forms, with or without modification,\r
9 are permitted provided that the following conditions are met:\r
10 \r
11 Redistributions of source code must retain the above copyright notice, this list\r
12 of conditions and the following disclaimer.\r
13 \r
14 Redistributions in binary form must reproduce the above copyright notice, this\r
15 list of conditions and the following disclaimer in the documentation and/or\r
16 other materials provided with the distribution.\r
17 \r
18 Neither the names of the copyright holders nor the names of its contributors may\r
19 be used to endorse or promote products derived from this software without\r
20 specific prior written permission.\r
21 \r
22 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND\r
23 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r
24 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r
25 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\r
26 ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r
27 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r
28 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r
29 ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
30 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r
31 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
32 \r
33 ----------------------------------------------------------------------------- */\r
34 \r
35 \r
36 \r
37 /* marker */\r
38 #ifndef PICOINTERNAL_H\r
39 #define PICOINTERNAL_H\r
40 \r
41 #ifdef __cplusplus\r
42 extern "C"\r
43 {\r
44 #endif\r
45 \r
46 \r
47 /* dependencies */\r
48 #include <stdio.h>\r
49 #include <stdlib.h>\r
50 #include <stdarg.h>\r
51 #include <string.h>\r
52 #include <ctype.h>\r
53 #include <math.h>\r
54 \r
55 #include "picomodel.h"\r
56 \r
57 \r
58 /* os dependant replacements */\r
59 #if WIN32 || _WIN32\r
60         #define _pico_stricmp stricmp\r
61         #define _pico_strnicmp strnicmp\r
62 #else\r
63         #define _pico_stricmp strcasecmp\r
64         #define _pico_strnicmp strncasecmp\r
65 #endif\r
66 \r
67 \r
68 /* constants */\r
69 #define PICO_PI 3.14159265358979323846\r
70 \r
71 #define PICO_SEEK_SET    0\r
72 #define PICO_SEEK_CUR    1\r
73 #define PICO_SEEK_END    2\r
74 \r
75 #define PICO_IOEOF      1\r
76 #define PICO_IOERR      2\r
77 \r
78 /* types */\r
79 typedef struct picoParser_s\r
80 {\r
81         char    *buffer;\r
82         int              bufSize;\r
83         char    *token;\r
84         int              tokenSize;\r
85         int              tokenMax;\r
86         char    *cursor;\r
87         char    *max;\r
88         int              curLine;\r
89 }\r
90 picoParser_t;\r
91 \r
92 typedef struct picoMemStream_s\r
93 {\r
94         picoByte_t      *buffer;\r
95         int                     bufSize;\r
96         picoByte_t      *curPos;\r
97         int                     flag;\r
98 }\r
99 picoMemStream_t;\r
100 \r
101 \r
102 /* variables */\r
103 extern const picoModule_t       *picoModules[];\r
104 \r
105 extern void                                     *(*_pico_ptr_malloc)( size_t );\r
106 extern void                                     (*_pico_ptr_free)( void* );\r
107 extern void                                     (*_pico_ptr_load_file)( char*, unsigned char**, int* );\r
108 extern void                                     (*_pico_ptr_free_file)( void* );\r
109 extern void                                     (*_pico_ptr_print)( int, const char* );\r
110 \r
111 \r
112 \r
113 /* prototypes */\r
114 \r
115 /* memory */\r
116 void                    *_pico_alloc( size_t size );\r
117 void                    *_pico_calloc( size_t num, size_t size );\r
118 void                    *_pico_realloc( void **ptr, size_t oldSize, size_t newSize );\r
119 char                    *_pico_clone_alloc( char *str, int size );\r
120 void                    _pico_free( void *ptr );\r
121 \r
122 /* files */\r
123 void                    _pico_load_file( char *name, unsigned char **buffer, int *bufSize );\r
124 void                    _pico_free_file( void *buffer );\r
125 \r
126 /* strings */\r
127 char                    *_pico_strltrim( char *str );\r
128 char                    *_pico_strrtrim( char *str );\r
129 int                             _pico_strchcount( char *str, int ch );\r
130 void                    _pico_printf( int level, const char *format, ... );\r
131 char                    *_pico_stristr( char *str, const char *substr );\r
132 void                    _pico_unixify( char *path );\r
133 int                             _pico_nofname( const char *path, char *dest, int destSize );\r
134 char                    *_pico_nopath( const char *path );\r
135 char                    *_pico_setfext( char *path, const char *ext );\r
136 int                             _pico_getline( char *buf, int bufsize, char *dest, int destsize );\r
137 char                    *_pico_strlwr( char *str );\r
138 \r
139 /* vectors */\r
140 void                    _pico_zero_bounds( picoVec3_t mins, picoVec3_t maxs );\r
141 void                    _pico_expand_bounds( picoVec3_t p, picoVec3_t mins, picoVec3_t maxs );\r
142 void                    _pico_zero_vec( picoVec3_t vec );\r
143 void                    _pico_zero_vec2( picoVec2_t vec );\r
144 void                    _pico_zero_vec4( picoVec4_t vec );\r
145 void                    _pico_set_vec( picoVec3_t v, float a, float b, float c );\r
146 void                    _pico_set_vec4( picoVec4_t v, float a, float b, float c, float d );\r
147 void                    _pico_set_color( picoColor_t c, int r, int g, int b, int a );\r
148 void                    _pico_copy_color( picoColor_t src, picoColor_t dest );\r
149 void                    _pico_copy_vec( picoVec3_t src, picoVec3_t dest );\r
150 void                    _pico_copy_vec2( picoVec2_t src, picoVec2_t dest );\r
151 picoVec_t               _pico_normalize_vec( picoVec3_t vec );\r
152 void                    _pico_add_vec( picoVec3_t a, picoVec3_t b, picoVec3_t dest );\r
153 void                    _pico_subtract_vec( picoVec3_t a, picoVec3_t b, picoVec3_t dest );\r
154 picoVec_t               _pico_dot_vec( picoVec3_t a, picoVec3_t b );\r
155 void                    _pico_cross_vec( picoVec3_t a, picoVec3_t b, picoVec3_t dest );\r
156 picoVec_t               _pico_calc_plane( picoVec4_t plane, picoVec3_t a, picoVec3_t b, picoVec3_t c );\r
157 void                    _pico_scale_vec( picoVec3_t v, float scale, picoVec3_t dest );\r
158 void                    _pico_scale_vec4( picoVec4_t v, float scale, picoVec4_t dest );\r
159 \r
160 /* endian */\r
161 int                     _pico_big_long( int src );\r
162 short                   _pico_big_short( short src );\r
163 float                   _pico_big_float( float src );\r
164 \r
165 int                     _pico_little_long( int src );\r
166 short                   _pico_little_short( short src );\r
167 float                   _pico_little_float( float src );\r
168 \r
169 /* pico ascii parser */\r
170 picoParser_t    *_pico_new_parser( picoByte_t *buffer, int bufSize );\r
171 void                    _pico_free_parser( picoParser_t *p );\r
172 int                             _pico_parse_ex( picoParser_t *p, int allowLFs, int handleQuoted );\r
173 char                    *_pico_parse_first( picoParser_t *p );\r
174 char                    *_pico_parse( picoParser_t *p, int allowLFs );\r
175 void                    _pico_parse_skip_rest( picoParser_t *p );\r
176 int                             _pico_parse_skip_braced( picoParser_t *p );\r
177 int                     _pico_parse_check( picoParser_t *p, int allowLFs, char *str );\r
178 int                     _pico_parse_checki( picoParser_t *p, int allowLFs, char *str );\r
179 int                     _pico_parse_int( picoParser_t *p, int *out );\r
180 int                     _pico_parse_int_def( picoParser_t *p, int *out, int def );\r
181 int                     _pico_parse_float( picoParser_t *p, float *out );\r
182 int                     _pico_parse_float_def( picoParser_t *p, float *out, float def );\r
183 int                     _pico_parse_vec( picoParser_t *p, picoVec3_t out);\r
184 int                     _pico_parse_vec_def( picoParser_t *p, picoVec3_t out, picoVec3_t def);\r
185 int                     _pico_parse_vec2( picoParser_t *p, picoVec2_t out );\r
186 int                     _pico_parse_vec2_def( picoParser_t *p, picoVec2_t out, picoVec2_t def );\r
187 int                     _pico_parse_vec4( picoParser_t *p, picoVec4_t out);\r
188 int                     _pico_parse_vec4_def( picoParser_t *p, picoVec4_t out, picoVec4_t def);\r
189 \r
190 /* pico memory stream */\r
191 picoMemStream_t *_pico_new_memstream( picoByte_t *buffer, int bufSize );\r
192 void                    _pico_free_memstream( picoMemStream_t *s );\r
193 int                             _pico_memstream_read( picoMemStream_t *s, void *buffer, int len );\r
194 int                             _pico_memstream_getc( picoMemStream_t *s );\r
195 int                             _pico_memstream_seek( picoMemStream_t *s, long offset, int origin );\r
196 long                    _pico_memstream_tell( picoMemStream_t *s );\r
197 #define                 _pico_memstream_eof( _pico_memstream )          ((_pico_memstream)->flag & PICO_IOEOF)\r
198 #define                 _pico_memstream_error( _pico_memstream )        ((_pico_memstream)->flag & PICO_IOERR)\r
199 \r
200 /* end marker */\r
201 #ifdef __cplusplus\r
202 }\r
203 #endif\r
204 \r
205 #endif\r