1 /* -----------------------------------------------------------------------------
5 Copyright (c) 2002, Randy Reddig & seaw0lf
8 Redistribution and use in source and binary forms, with or without modification,
9 are permitted provided that the following conditions are met:
11 Redistributions of source code must retain the above copyright notice, this list
12 of conditions and the following disclaimer.
14 Redistributions in binary form must reproduce the above copyright notice, this
15 list of conditions and the following disclaimer in the documentation and/or
16 other materials provided with the distribution.
18 Neither the names of the copyright holders nor the names of its contributors may
19 be used to endorse or promote products derived from this software without
20 specific prior written permission.
22 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
23 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
24 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
25 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
26 ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
27 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
29 ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
31 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 ----------------------------------------------------------------------------- */
38 #ifndef PICOINTERNAL_H
39 #define PICOINTERNAL_H
41 #include "globaldefs.h"
57 #include "picomodel.h"
60 /* os dependent replacements */
62 #define _pico_stricmp stricmp
63 #define _pico_strnicmp strnicmp
65 #define _pico_stricmp strcasecmp
66 #define _pico_strnicmp strncasecmp
71 #define PICO_PI 3.14159265358979323846
73 #define PICO_SEEK_SET 0
74 #define PICO_SEEK_CUR 1
75 #define PICO_SEEK_END 2
81 typedef struct picoParser_s
94 typedef struct picoMemStream_s
96 const picoByte_t *buffer;
98 const picoByte_t *curPos;
105 extern const picoModule_t *picoModules[];
107 extern void *( *_pico_ptr_malloc )( size_t );
108 extern void ( *_pico_ptr_free )( void* );
109 extern void ( *_pico_ptr_load_file )( const char*, unsigned char**, int* );
110 extern void ( *_pico_ptr_free_file )( void* );
111 extern void ( *_pico_ptr_print )( int, const char* );
118 void *_pico_alloc( size_t size );
119 void *_pico_calloc( size_t num, size_t size );
120 void *_pico_realloc( void **ptr, size_t oldSize, size_t newSize );
121 char *_pico_clone_alloc( const char *str );
122 void _pico_free( void *ptr );
125 void _pico_load_file( const char *name, unsigned char **buffer, int *bufSize );
126 void _pico_free_file( void *buffer );
129 void _pico_first_token( char *str );
130 char *_pico_strltrim( char *str );
131 char *_pico_strrtrim( char *str );
132 int _pico_strchcount( char *str, int ch );
133 void _pico_printf( int level, const char *format, ... );
134 const char *_pico_stristr( const char *str, const char *substr );
135 void _pico_unixify( char *path );
136 int _pico_nofname( const char *path, char *dest, int destSize );
137 const char *_pico_nopath( const char *path );
138 char *_pico_setfext( char *path, const char *ext );
139 int _pico_getline( char *buf, int bufsize, char *dest, int destsize );
140 char *_pico_strlwr( char *str );
143 void _pico_zero_bounds( picoVec3_t mins, picoVec3_t maxs );
144 void _pico_expand_bounds( picoVec3_t p, picoVec3_t mins, picoVec3_t maxs );
145 void _pico_zero_vec( picoVec3_t vec );
146 void _pico_zero_vec2( picoVec2_t vec );
147 void _pico_zero_vec4( picoVec4_t vec );
148 void _pico_set_vec( picoVec3_t v, float a, float b, float c );
149 void _pico_set_vec4( picoVec4_t v, float a, float b, float c, float d );
150 void _pico_set_color( picoColor_t c, int r, int g, int b, int a );
151 void _pico_copy_color( picoColor_t src, picoColor_t dest );
152 void _pico_copy_vec( picoVec3_t src, picoVec3_t dest );
153 void _pico_copy_vec2( picoVec2_t src, picoVec2_t dest );
154 picoVec_t _pico_normalize_vec( picoVec3_t vec );
155 void _pico_add_vec( picoVec3_t a, picoVec3_t b, picoVec3_t dest );
156 void _pico_subtract_vec( picoVec3_t a, picoVec3_t b, picoVec3_t dest );
157 picoVec_t _pico_dot_vec( picoVec3_t a, picoVec3_t b );
158 void _pico_cross_vec( picoVec3_t a, picoVec3_t b, picoVec3_t dest );
159 picoVec_t _pico_calc_plane( picoVec4_t plane, picoVec3_t a, picoVec3_t b, picoVec3_t c );
160 void _pico_scale_vec( picoVec3_t v, float scale, picoVec3_t dest );
161 void _pico_scale_vec4( picoVec4_t v, float scale, picoVec4_t dest );
164 int _pico_big_long( int src );
165 short _pico_big_short( short src );
166 float _pico_big_float( float src );
168 int _pico_little_long( int src );
169 short _pico_little_short( short src );
170 float _pico_little_float( float src );
172 /* pico ascii parser */
173 picoParser_t *_pico_new_parser( const picoByte_t *buffer, int bufSize );
174 void _pico_free_parser( picoParser_t *p );
175 int _pico_parse_ex( picoParser_t *p, int allowLFs, int handleQuoted );
176 char *_pico_parse_first( picoParser_t *p );
177 char *_pico_parse( picoParser_t *p, int allowLFs );
178 void _pico_parse_skip_rest( picoParser_t *p );
179 int _pico_parse_skip_braced( picoParser_t *p );
180 int _pico_parse_check( picoParser_t *p, int allowLFs, char *str );
181 int _pico_parse_checki( picoParser_t *p, int allowLFs, char *str );
182 int _pico_parse_int( picoParser_t *p, int *out );
183 int _pico_parse_int_def( picoParser_t *p, int *out, int def );
184 int _pico_parse_float( picoParser_t *p, float *out );
185 int _pico_parse_float_def( picoParser_t *p, float *out, float def );
186 int _pico_parse_vec( picoParser_t *p, picoVec3_t out );
187 int _pico_parse_vec_def( picoParser_t *p, picoVec3_t out, picoVec3_t def );
188 int _pico_parse_vec2( picoParser_t *p, picoVec2_t out );
189 int _pico_parse_vec2_def( picoParser_t *p, picoVec2_t out, picoVec2_t def );
190 int _pico_parse_vec4( picoParser_t *p, picoVec4_t out );
191 int _pico_parse_vec4_def( picoParser_t *p, picoVec4_t out, picoVec4_t def );
193 /* pico memory stream */
194 picoMemStream_t *_pico_new_memstream( const picoByte_t *buffer, int bufSize );
195 void _pico_free_memstream( picoMemStream_t *s );
196 int _pico_memstream_read( picoMemStream_t *s, void *buffer, int len );
197 int _pico_memstream_getc( picoMemStream_t *s );
198 int _pico_memstream_seek( picoMemStream_t *s, long offset, int origin );
199 long _pico_memstream_tell( picoMemStream_t *s );
200 #define _pico_memstream_eof( _pico_memstream ) ( ( _pico_memstream )->flag & PICO_IOEOF )
201 #define _pico_memstream_error( _pico_memstream ) ( ( _pico_memstream )->flag & PICO_IOERR )