]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - libs/picomodel/picointernal.c
pico: detect intentional material name and do not replace them with texture
[xonotic/netradiant.git] / libs / picomodel / picointernal.c
index f08a9962705efaebfa721ee58480db45b6850bae..0a8597f840416e107c87b2653da4e2765a561c0e 100644 (file)
@@ -1,43 +1,36 @@
 /* -----------------------------------------------------------------------------
 
-PicoModel Library
+   PicoModel Library
 
-Copyright (c) 2002, Randy Reddig & seaw0lf
-All rights reserved.
+   Copyright (c) 2002, Randy Reddig & seaw0lf
+   All rights reserved.
 
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
+   Redistribution and use in source and binary forms, with or without modification,
+   are permitted provided that the following conditions are met:
 
-Redistributions of source code must retain the above copyright notice, this list
-of conditions and the following disclaimer.
+   Redistributions of source code must retain the above copyright notice, this list
+   of conditions and the following disclaimer.
 
-Redistributions in binary form must reproduce the above copyright notice, this
-list of conditions and the following disclaimer in the documentation and/or
-other materials provided with the distribution.
+   Redistributions in binary form must reproduce the above copyright notice, this
+   list of conditions and the following disclaimer in the documentation and/or
+   other materials provided with the distribution.
 
-Neither the names of the copyright holders nor the names of its contributors may
-be used to endorse or promote products derived from this software without
-specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
------------------------------------------------------------------------------ */
-
-
-
-/* marker */
-#define PICOINTERNAL_C
+   Neither the names of the copyright holders nor the names of its contributors may
+   be used to endorse or promote products derived from this software without
+   specific prior written permission.
 
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+   ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+   ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+   ----------------------------------------------------------------------------- */
 
 /* todo:
  * - fix p->curLine for parser routines. increased twice
@@ -46,43 +39,46 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 /* dependencies */
 #include <string.h>
 #include "picointernal.h"
+#include "globaldefs.h"
 
 
 
 /* function pointers */
-void *(*_pico_ptr_malloc       )( size_t ) = malloc;
-void  (*_pico_ptr_free         )( void* ) = free;
-void  (*_pico_ptr_load_file    )( const char*, unsigned char**, int* ) = NULL;
-void  (*_pico_ptr_free_file    )( void* ) = NULL;
-void  (*_pico_ptr_print                )( int, const char* ) = NULL;
+void *( *_pico_ptr_malloc    )( size_t ) = malloc;
+void ( *_pico_ptr_free      )( void* ) = free;
+void ( *_pico_ptr_load_file )( const char*, unsigned char**, int* ) = NULL;
+void ( *_pico_ptr_free_file )( void* ) = NULL;
+void ( *_pico_ptr_print     )( int, const char* ) = NULL;
 
 typedef union
 {
-       float   f;
-       char    c[4];
+       float f;
+       char c[4];
 }
 floatSwapUnion;
 
 /* _pico_alloc:
  *  kludged memory allocation wrapper
  */
-void *_pico_alloc( size_t size )
-{
+void *_pico_alloc( size_t size ){
        void *ptr;
 
        /* some sanity checks */
-       if( size == 0 )
+       if ( size == 0 ) {
                return NULL;
-       if (_pico_ptr_malloc == NULL)
+       }
+       if ( _pico_ptr_malloc == NULL ) {
                return NULL;
+       }
 
        /* allocate memory */
-       ptr = _pico_ptr_malloc(size);
-       if (ptr == NULL)
+       ptr = _pico_ptr_malloc( size );
+       if ( ptr == NULL ) {
                return NULL;
+       }
 
        /* zero out allocated memory */
-       memset(ptr,0,size);
+       memset( ptr,0,size );
 
        /* return pointer to allocated memory */
        return ptr;
@@ -91,23 +87,25 @@ void *_pico_alloc( size_t size )
 /* _pico_calloc:
  *  _pico_calloc wrapper
  */
-void *_pico_calloc( size_t num, size_t size )
-{
+void *_pico_calloc( size_t num, size_t size ){
        void *ptr;
 
        /* some sanity checks */
-       if( num == 0 || size == 0 )
+       if ( num == 0 || size == 0 ) {
                return NULL;
-       if (_pico_ptr_malloc == NULL)
+       }
+       if ( _pico_ptr_malloc == NULL ) {
                return NULL;
+       }
 
        /* allocate memory */
-       ptr = _pico_ptr_malloc(num*size);
-       if (ptr == NULL)
+       ptr = _pico_ptr_malloc( num * size );
+       if ( ptr == NULL ) {
                return NULL;
+       }
 
        /* zero out allocated memory */
-       memset(ptr,0,num*size);
+       memset( ptr,0,num * size );
 
        /* return pointer to allocated memory */
        return ptr;
@@ -117,30 +115,32 @@ void *_pico_calloc( size_t num, size_t size )
  *  memory reallocation wrapper (note: only grows,
  *  but never shrinks or frees)
  */
-void *_pico_realloc( void **ptr, size_t oldSize, size_t newSize )
-{
+void *_pico_realloc( void **ptr, size_t oldSize, size_t newSize ){
        void *ptr2;
-       
+
        /* sanity checks */
-       if( ptr == NULL )
+       if ( ptr == NULL ) {
                return NULL;
-       if( newSize < oldSize )
+       }
+       if ( newSize < oldSize ) {
                return *ptr;
-       if (_pico_ptr_malloc == NULL)
+       }
+       if ( _pico_ptr_malloc == NULL ) {
                return NULL;
+       }
 
        /* allocate new pointer */
        ptr2 = _pico_alloc( newSize );
-       if( ptr2 == NULL )
+       if ( ptr2 == NULL ) {
                return NULL;
+       }
 
        /* copy */
-       if( *ptr != NULL )
-       {
+       if ( *ptr != NULL ) {
                memcpy( ptr2, *ptr, oldSize );
                _pico_free( *ptr );
        }
-       
+
        /* fix up and return */
        *ptr = ptr2;
        return *ptr;
@@ -155,18 +155,19 @@ void *_pico_realloc( void **ptr, size_t oldSize, size_t newSize )
  *  as custom clone size (the string is cropped to fit into mem
  *  if needed). -sea
  */
-char *_pico_clone_alloc( const char *str )
-{
-  char* cloned;
+char *_pico_clone_alloc( const char *str ){
+       char* cloned;
 
        /* sanity check */
-       if (str == NULL)
-    return NULL;
+       if ( str == NULL ) {
+               return NULL;
+       }
 
        /* allocate memory */
-       cloned = _pico_alloc( strlen(str) + 1 );
-       if (cloned == NULL)
+       cloned = _pico_alloc( strlen( str ) + 1 );
+       if ( cloned == NULL ) {
                return NULL;
+       }
 
        /* copy input string to cloned string */
        strcpy( cloned, str );
@@ -178,31 +179,29 @@ char *_pico_clone_alloc( const char *str )
 /* _pico_free:
  * wrapper around the free function pointer
  */
-void _pico_free( void *ptr )
-{
+void _pico_free( void *ptr ){
        /* sanity checks */
-       if( ptr == NULL )
+       if ( ptr == NULL ) {
                return;
-       if (_pico_ptr_free == NULL)
+       }
+       if ( _pico_ptr_free == NULL ) {
                return;
+       }
 
        /* free the allocated memory */
-               _pico_ptr_free( ptr );
+       _pico_ptr_free( ptr );
 }
 
 /* _pico_load_file:
  * wrapper around the loadfile function pointer
  */
-void _pico_load_file( const char *name, unsigned char **buffer, int *bufSize )
-{
+void _pico_load_file( const char *name, unsigned char **buffer, int *bufSize ){
        /* sanity checks */
-       if( name == NULL )
-       {
+       if ( name == NULL ) {
                *bufSize = -1;
                return;
        }
-       if (_pico_ptr_load_file == NULL)
-       {
+       if ( _pico_ptr_load_file == NULL ) {
                *bufSize = -1;
                return;
        }
@@ -214,15 +213,14 @@ void _pico_load_file( const char *name, unsigned char **buffer, int *bufSize )
 /* _pico_free_file:
  * wrapper around the file free function pointer
  */
-void _pico_free_file( void *buffer )
-{
+void _pico_free_file( void *buffer ){
        /* sanity checks */
-       if( buffer == NULL )
+       if ( buffer == NULL ) {
                return;
+       }
 
        /* use default free */
-       if( _pico_ptr_free_file == NULL )
-       {
+       if ( _pico_ptr_free_file == NULL ) {
                free( buffer );
                return;
        }
@@ -233,16 +231,17 @@ void _pico_free_file( void *buffer )
 /* _pico_printf:
  * wrapper around the print function pointer -sea
  */
-void _pico_printf( int level, const char *format, ...)
-{
-       char    str[4096];
-       va_list argptr;
+void _pico_printf( int level, const char *format, ... ){
+       char str[4096];
+       va_list argptr;
 
        /* sanity checks */
-       if( format == NULL )
+       if ( format == NULL ) {
                return;
-       if (_pico_ptr_print == NULL)
+       }
+       if ( _pico_ptr_print == NULL ) {
                return;
+       }
 
        /* format string */
        va_start( argptr,format );
@@ -250,8 +249,9 @@ void _pico_printf( int level, const char *format, ...)
        va_end( argptr );
 
        /* remove linefeeds */
-       if (str[ strlen(str)-1 ] == '\n')
-               str[ strlen(str)-1 ] = '\0';
+       if ( str[ strlen( str ) - 1 ] == '\n' ) {
+               str[ strlen( str ) - 1 ] = '\0';
+       }
 
        /* do the actual call */
        _pico_ptr_print( level,str );
@@ -261,11 +261,11 @@ void _pico_printf( int level, const char *format, ...)
  * trims everything after the first whitespace-delimited token
  */
 
-void _pico_first_token( char *str )
-{
-       if( !str || !*str )
+void _pico_first_token( char *str ){
+       if ( !str || !*str ) {
                return;
-       while( *str && !isspace( *str ) )
+       }
+       while ( *str && !isspace( *str ) )
                str++;
        *str = '\0';
 }
@@ -273,53 +273,53 @@ void _pico_first_token( char *str )
 /* _pico_strltrim:
  * left trims the given string -sea
  */
-char *_pico_strltrim( char *str )
-{
+char *_pico_strltrim( char *str ){
        char *str1 = str, *str2 = str;
 
-       while (isspace(*str2)) str2++;
-       if( str2 != str )
-               while( *str2 != '\0' ) /* fix: ydnar */
+       while ( isspace( *str2 ) ) str2++;
+       if ( str2 != str ) {
+               while ( *str2 != '\0' ) /* fix: ydnar */
                        *str1++ = *str2++;
+       }
        return str;
 }
 
 /* _pico_strrtrim:
  * right trims the given string -sea
  */
-char *_pico_strrtrim( char *str )
-{
-       if (str && *str)
-       {
+char *_pico_strrtrim( char *str ){
+       if ( str && *str ) {
                char *str1 = str;
                int allspace = 1;
 
-               while (*str1)
+               while ( *str1 )
                {
-                       if (allspace && !isspace(*str1)) allspace = 0;
+                       if ( allspace && !isspace( *str1 ) ) {
+                               allspace = 0;
+                       }
                        str1++;
                }
-               if (allspace) *str = '\0';
+               if ( allspace ) {
+                       *str = '\0';
+               }
                else {
                        str1--;
-                       while ((isspace(*str1)) && (str1 >= str))
+                       while ( ( isspace( *str1 ) ) && ( str1 >= str ) )
                                *str1-- = '\0';
                }
        }
-    return str;
+       return str;
 }
 
 /* _pico_strlwr:
  *  pico internal string-to-lower routine.
  */
-char *_pico_strlwr( char *str )
-{
+char *_pico_strlwr( char *str ){
        char *cp;
-       for (cp=str; *cp; ++cp)
+       for ( cp = str; *cp; ++cp )
        {
-               if ('A' <= *cp && *cp <= 'Z')
-               {
-                       *cp += ('a' - 'A');
+               if ( 'A' <= *cp && *cp <= 'Z' ) {
+                       *cp += ( 'a' - 'A' );
                }
        }
        return str;
@@ -328,79 +328,74 @@ char *_pico_strlwr( char *str )
 /* _pico_strchcount:
  *  counts how often the given char appears in str. -sea
  */
-int _pico_strchcount( char *str, int ch )
-{
+int _pico_strchcount( char *str, int ch ){
        int count = 0;
-       while (*str++) if (*str == ch) count++;
+       while ( *str++ ) if ( *str == ch ) {
+                       count++;
+               }
        return count;
 }
 
-void _pico_zero_bounds( picoVec3_t mins, picoVec3_t maxs )
-{
+void _pico_zero_bounds( picoVec3_t mins, picoVec3_t maxs ){
        int i;
-       for (i=0; i<3; i++)
+       for ( i = 0; i < 3; i++ )
        {
                mins[i] = +999999;
                maxs[i] = -999999;
        }
 }
 
-void _pico_expand_bounds( picoVec3_t p, picoVec3_t mins, picoVec3_t maxs )
-{
+void _pico_expand_bounds( picoVec3_t p, picoVec3_t mins, picoVec3_t maxs ){
        int i;
-       for (i=0; i<3; i++)
+       for ( i = 0; i < 3; i++ )
        {
                float value = p[i];
-               if (value < mins[i]) mins[i] = value;
-               if (value > maxs[i]) maxs[i] = value;
+               if ( value < mins[i] ) {
+                       mins[i] = value;
+               }
+               if ( value > maxs[i] ) {
+                       maxs[i] = value;
+               }
        }
 }
 
-void _pico_zero_vec( picoVec3_t vec )
-{
+void _pico_zero_vec( picoVec3_t vec ){
        vec[ 0 ] = vec[ 1 ] = vec[ 2 ] = 0;
 }
 
-void _pico_zero_vec2( picoVec2_t vec )
-{
+void _pico_zero_vec2( picoVec2_t vec ){
        vec[ 0 ] = vec[ 1 ] = 0;
 }
 
-void _pico_zero_vec4( picoVec4_t vec )
-{
+void _pico_zero_vec4( picoVec4_t vec ){
        vec[ 0 ] = vec[ 1 ] = vec[ 2 ] = vec[ 3 ] = 0;
 }
 
-void _pico_set_vec( picoVec3_t v, float a, float b, float c )
-{
+void _pico_set_vec( picoVec3_t v, float a, float b, float c ){
        v[ 0 ] = a;
        v[ 1 ] = b;
        v[ 2 ] = c;
 }
 
-void _pico_set_vec4( picoVec4_t v, float a, float b, float c, float d )
-{
+void _pico_set_vec4( picoVec4_t v, float a, float b, float c, float d ){
        v[ 0 ] = a;
        v[ 1 ] = b;
        v[ 2 ] = c;
        v[ 3 ] = d;
 }
 
-void _pico_copy_vec( picoVec3_t src, picoVec3_t dest )
-{
+void _pico_copy_vec( picoVec3_t src, picoVec3_t dest ){
        dest[ 0 ] = src[ 0 ];
        dest[ 1 ] = src[ 1 ];
        dest[ 2 ] = src[ 2 ];
 }
 
-void _pico_copy_vec2( picoVec2_t src, picoVec2_t dest )
-{
+void _pico_copy_vec2( picoVec2_t src, picoVec2_t dest ){
        dest[ 0 ] = src[ 0 ];
        dest[ 1 ] = src[ 1 ];
 }
 
-void _pico_copy_vec4( picoVec4_t src, picoVec4_t dest )
-{
+void _pico_copy_vec4( picoVec4_t src, picoVec4_t dest ){
        dest[ 0 ] = src[ 0 ];
        dest[ 1 ] = src[ 1 ];
        dest[ 2 ] = src[ 2 ];
@@ -408,12 +403,13 @@ void _pico_copy_vec4( picoVec4_t src, picoVec4_t dest )
 }
 
 /* ydnar */
-picoVec_t _pico_normalize_vec( picoVec3_t vec )
-{
-       double  len, ilen;
-       
+picoVec_t _pico_normalize_vec( picoVec3_t vec ){
+       double len, ilen;
+
        len = sqrt( vec[ 0 ] * vec[ 0 ] + vec[ 1 ] * vec[ 1 ] + vec[ 2 ] * vec[ 2 ] );
-       if( len == 0.0 ) return 0.0;
+       if ( len == 0.0 ) {
+               return 0.0;
+       }
        ilen = 1.0 / len;
        vec[ 0 ] *= (picoVec_t) ilen;
        vec[ 1 ] *= (picoVec_t) ilen;
@@ -421,50 +417,43 @@ picoVec_t _pico_normalize_vec( picoVec3_t vec )
        return (picoVec_t) len;
 }
 
-void _pico_add_vec( picoVec3_t a, picoVec3_t b, picoVec3_t dest )
-{
+void _pico_add_vec( picoVec3_t a, picoVec3_t b, picoVec3_t dest ){
        dest[ 0 ] = a[ 0 ] + b[ 0 ];
        dest[ 1 ] = a[ 1 ] + b[ 1 ];
        dest[ 2 ] = a[ 2 ] + b[ 2 ];
 }
 
-void _pico_subtract_vec( picoVec3_t a, picoVec3_t b, picoVec3_t dest )
-{
+void _pico_subtract_vec( picoVec3_t a, picoVec3_t b, picoVec3_t dest ){
        dest[ 0 ] = a[ 0 ] - b[ 0 ];
        dest[ 1 ] = a[ 1 ] - b[ 1 ];
        dest[ 2 ] = a[ 2 ] - b[ 2 ];
 }
 
-void _pico_scale_vec( picoVec3_t v, float scale, picoVec3_t dest )
-{
+void _pico_scale_vec( picoVec3_t v, float scale, picoVec3_t dest ){
        dest[ 0 ] = v[ 0 ] * scale;
        dest[ 1 ] = v[ 1 ] * scale;
        dest[ 2 ] = v[ 2 ] * scale;
 }
 
-void _pico_scale_vec4( picoVec4_t v, float scale, picoVec4_t dest )
-{
+void _pico_scale_vec4( picoVec4_t v, float scale, picoVec4_t dest ){
        dest[ 0 ] = v[ 0 ] * scale;
        dest[ 1 ] = v[ 1 ] * scale;
        dest[ 2 ] = v[ 2 ] * scale;
        dest[ 3 ] = v[ 3 ] * scale;
 }
 
-picoVec_t _pico_dot_vec( picoVec3_t a, picoVec3_t b )
-{
+picoVec_t _pico_dot_vec( picoVec3_t a, picoVec3_t b ){
        return a[ 0 ] * b[ 0 ] + a[ 1 ] * b[ 1 ] + a[ 2 ] * b[ 2 ];
 }
 
-void _pico_cross_vec( picoVec3_t a, picoVec3_t b, picoVec3_t dest )
-{
+void _pico_cross_vec( picoVec3_t a, picoVec3_t b, picoVec3_t dest ){
        dest[ 0 ] = a[ 1 ] * b[ 2 ] - a[ 2 ] * b[ 1 ];
        dest[ 1 ] = a[ 2 ] * b[ 0 ] - a[ 0 ] * b[ 2 ];
        dest[ 2 ] = a[ 0 ] * b[ 1 ] - a[ 1 ] * b[ 0 ];
 }
 
-picoVec_t _pico_calc_plane( picoVec4_t plane, picoVec3_t a, picoVec3_t b, picoVec3_t c )
-{
-       picoVec3_t      ba, ca;
+picoVec_t _pico_calc_plane( picoVec4_t plane, picoVec3_t a, picoVec3_t b, picoVec3_t c ){
+       picoVec3_t ba, ca;
 
        _pico_subtract_vec( b, a, ba );
        _pico_subtract_vec( c, a, ca );
@@ -473,45 +462,42 @@ picoVec_t _pico_calc_plane( picoVec4_t plane, picoVec3_t a, picoVec3_t b, picoVe
        return _pico_normalize_vec( plane );
 }
 
+const picoColor_t picoColor_white = { 255, 255, 255, 255 };
+
 /* separate from _pico_set_vec4 */
-void _pico_set_color( picoColor_t c, int r, int g, int b, int a )
-{
+void _pico_set_color( picoColor_t c, int r, int g, int b, int a ){
        c[ 0 ] = r;
        c[ 1 ] = g;
        c[ 2 ] = b;
        c[ 3 ] = a;
 }
 
-void _pico_copy_color( picoColor_t src, picoColor_t dest )
-{
+void _pico_copy_color( const picoColor_t src, picoColor_t dest ){
        dest[ 0 ] = src[ 0 ];
        dest[ 1 ] = src[ 1 ];
        dest[ 2 ] = src[ 2 ];
        dest[ 3 ] = src[ 3 ];
 }
 
-#ifdef __BIG_ENDIAN__
+#if GDEF_ARCH_ENDIAN_BIG
 
-int   _pico_big_long ( int   src ) { return src; }
+int   _pico_big_long( int src ) { return src; }
 short _pico_big_short( short src ) { return src; }
 float _pico_big_float( float src ) { return src; }
 
-int _pico_little_long( int src )
-{
-       return ((src & 0xFF000000) >> 24) |
-                  ((src & 0x00FF0000) >> 8) |
-                  ((src & 0x0000FF00) << 8) |
-                  ((src & 0x000000FF) << 24);
+int _pico_little_long( int src ){
+       return ( ( src & 0xFF000000 ) >> 24 ) |
+                  ( ( src & 0x00FF0000 ) >> 8 ) |
+                  ( ( src & 0x0000FF00 ) << 8 ) |
+                  ( ( src & 0x000000FF ) << 24 );
 }
 
-short _pico_little_short( short src )
-{
-       return ((src & 0xFF00) >> 8) |
-                  ((src & 0x00FF) << 8);
+short _pico_little_short( short src ){
+       return ( ( src & 0xFF00 ) >> 8 ) |
+                  ( ( src & 0x00FF ) << 8 );
 }
 
-float _pico_little_float( float src )
-{
+float _pico_little_float( float src ){
        floatSwapUnion in,out;
        in.f = src;
        out.c[ 0 ] = in.c[ 3 ];
@@ -522,26 +508,23 @@ float _pico_little_float( float src )
 }
 #else /*__BIG_ENDIAN__*/
 
-int   _pico_little_long ( int   src ) { return src; }
+int   _pico_little_long( int src ) { return src; }
 short _pico_little_short( short src ) { return src; }
 float _pico_little_float( float src ) { return src; }
-       
-int _pico_big_long( int src )
-{
-       return ((src & 0xFF000000) >> 24) |
-                  ((src & 0x00FF0000) >> 8) |
-                  ((src & 0x0000FF00) << 8) |
-                  ((src & 0x000000FF) << 24);
+
+int _pico_big_long( int src ){
+       return ( ( src & 0xFF000000 ) >> 24 ) |
+                  ( ( src & 0x00FF0000 ) >> 8 ) |
+                  ( ( src & 0x0000FF00 ) << 8 ) |
+                  ( ( src & 0x000000FF ) << 24 );
 }
-       
-short _pico_big_short( short src )
-{
-       return ((src & 0xFF00) >> 8) |
-                  ((src & 0x00FF) << 8);
+
+short _pico_big_short( short src ){
+       return ( ( src & 0xFF00 ) >> 8 ) |
+                  ( ( src & 0x00FF ) << 8 );
 }
-       
-float _pico_big_float( float src )
-{
+
+float _pico_big_float( float src ){
        floatSwapUnion in,out;
        in.f = src;
        out.c[ 0 ] = in.c[ 3 ];
@@ -555,31 +538,35 @@ float _pico_big_float( float src )
 /* _pico_stristr:
  *  case-insensitive strstr. -sea
  */
-const char *_pico_stristr( const char *str, const char *substr )
-{
-       const size_t sublen = strlen(substr);
-       while (*str)
+const char *_pico_stristr( const char *str, const char *substr ){
+       const size_t sublen = strlen( substr );
+       while ( *str )
        {
-               if (!_pico_strnicmp(str,substr,sublen)) break;
+               if ( !_pico_strnicmp( str,substr,sublen ) ) {
+                       break;
+               }
                str++;
        }
-       if (!(*str)) str = NULL;
+       if ( !( *str ) ) {
+               str = NULL;
+       }
        return str;
 }
 
 /*
-_pico_unixify()
-changes dos \ style path separators to /
-*/
+   _pico_unixify()
+   changes dos \ style path separators to /
+ */
 
-void _pico_unixify( char *path )
-{
-       if( path == NULL )
+void _pico_unixify( char *path ){
+       if ( path == NULL ) {
                return;
-       while( *path )
+       }
+       while ( *path )
        {
-               if( *path == '\\' )
+               if ( *path == '\\' ) {
                        *path = '/';
+               }
                path++;
        }
 }
@@ -589,22 +576,19 @@ void _pico_unixify( char *path )
  *  the directory separators to un*x style. returns 1 on success
  *  or 0 when 'destSize' was exceeded. -sea
  */
-int _pico_nofname( const char *path, char *dest, int destSize )
-{
-       int   left  = destSize;
+int _pico_nofname( const char *path, char *dest, int destSize ){
+       int left  = destSize;
        char *temp  = dest;
 
-       while ((*dest = *path) != '\0')
+       while ( ( *dest = *path ) != '\0' )
        {
-               if (*dest == '/' || *dest == '\\')
-               {
-                       temp = (dest + 1);
+               if ( *dest == '/' || *dest == '\\' ) {
+                       temp = ( dest + 1 );
                        *dest = '/';
                }
                dest++; path++;
 
-               if (--left < 1)
-               {
+               if ( --left < 1 ) {
                        *temp = '\0';
                        return 0;
                }
@@ -617,19 +601,22 @@ int _pico_nofname( const char *path, char *dest, int destSize )
  *  returns ptr to filename portion in given path or an empty
  *  string otherwise. given 'path' is not altered. -sea
  */
-const char *_pico_nopath( const char *path )
-{
+const char *_pico_nopath( const char *path ){
        const char *src;
-       src = path + (strlen(path) - 1);
+       src = path + ( strlen( path ) - 1 );
 
-       if (path == NULL) return "";
-       if (!strchr(path,'/') && !strchr(path,'\\'))
-               return (path);
+       if ( path == NULL ) {
+               return "";
+       }
+       if ( !strchr( path,'/' ) && !strchr( path,'\\' ) ) {
+               return ( path );
+       }
 
-       while ((src--) != path)
+       while ( ( src-- ) != path )
        {
-               if (*src == '/' || *src == '\\')
-                       return (++src);
+               if ( *src == '/' || *src == '\\' ) {
+                       return ( ++src );
+               }
        }
        return "";
 }
@@ -639,35 +626,38 @@ const char *_pico_nopath( const char *path )
  *  or filepath's filename portion. the given 'path' *is*
  *  altered. leave 'ext' empty to remove extension. -sea
  */
-char *_pico_setfext( char *path, const char *ext )
-{
+char *_pico_setfext( char *path, const char *ext ){
        char *src;
-       int   remfext = 0;
+       int remfext = 0;
 
-       src = path + (strlen(path) - 1);
+       src = path + ( strlen( path ) - 1 );
 
-       if (ext == NULL) ext = "";
-       if (strlen(ext ) < 1) remfext = 1;
-       if (strlen(path) < 1)
+       if ( ext == NULL ) {
+               ext = "";
+       }
+       if ( strlen( ext ) < 1 ) {
+               remfext = 1;
+       }
+       if ( strlen( path ) < 1 ) {
                return path;
+       }
 
-       while ((src--) != path)
+       while ( ( src-- ) != path )
        {
-               if (*src == '/' || *src == '\\')
+               if ( *src == '/' || *src == '\\' ) {
                        return path;
+               }
 
-               if (*src == '.')
-               {
-                       if (remfext)
-                       {
+               if ( *src == '.' ) {
+                       if ( remfext ) {
                                *src = '\0';
                                return path;
                        }
-                       *(++src) = '\0';
+                       *( ++src ) = '\0';
                        break;
                }
        }
-       strcat(path,ext);
+       strcat( path,ext );
        return path;
 }
 
@@ -677,22 +667,26 @@ char *_pico_setfext( char *path, const char *ext )
  *  removed string trimming here. this can be done manually by the
  *  calling func.
  */
-int _pico_getline( char *buf, int bufsize, char *dest, int destsize )
-{
+int _pico_getline( char *buf, int bufsize, char *dest, int destsize ){
        int pos;
 
        /* check output */
-       if (dest == NULL || destsize < 1) return -1;
+       if ( dest == NULL || destsize < 1 ) {
+               return -1;
+       }
        memset( dest,0,destsize );
 
        /* check input */
-       if (buf == NULL || bufsize < 1)
+       if ( buf == NULL || bufsize < 1 ) {
                return -1;
+       }
 
        /* get next line */
-       for (pos=0; pos<bufsize && pos<destsize; pos++)
+       for ( pos = 0; pos < bufsize && pos < destsize; pos++ )
        {
-               if (buf[pos] == '\n') { pos++; break; }
+               if ( buf[pos] == '\n' ) {
+                       pos++; break;
+               }
                dest[pos] = buf[pos];
        }
        /* terminate dest and return */
@@ -700,33 +694,110 @@ int _pico_getline( char *buf, int bufsize, char *dest, int destsize )
        return pos;
 }
 
+/* expecting fileName to be relative vfs model path */
+void _pico_deduce_shadername( const char* fileName, const char* srcName, picoShader_t* shader ){
+       if( srcName == NULL || fileName == NULL )
+               return;
+       char name[strlen( srcName ) + 1];
+       strcpy( name, srcName );
+       _pico_unixify( name );
+       _pico_setfext( name, NULL );
+
+       char path[strlen( fileName ) + strlen( name ) + 1];
+       _pico_nofname( fileName, path, strlen( fileName ) + strlen( name ) + 1 );
+       _pico_unixify( path );
+
+       if( !strchr( name , '/' ) ){ /* texture is likely in the folder, where model is */
+               strcat( path, name );
+       }
+       else if( name[0] == '/' || ( name[0] != '\0' && name[1] == ':' ) || strstr( name, ".." ) ){ /* absolute path or with .. */
+               const char* p = name;
+               for (; *p != '\0'; ++p )
+                       if ( _pico_strnicmp( p, "/models/", 8 ) == 0 || _pico_strnicmp( p, "/textures/", 10 ) == 0 )
+                               break;
+               if( *p != '\0' ){
+                       strcpy( path, p + 1 );
+               }
+               else{
+                       p = _pico_nopath( name );
+                       strcat( path, p );
+               }
+       }
+       else{
+               PicoSetShaderName( shader, name );
+               return;
+       }
+
+       _pico_printf( PICO_NORMAL, "PICO: substituting shader name: %s -> %s", srcName, path );
+       PicoSetShaderName( shader, path );
+}
+
+/* deduce shadernames from bitmap or shadername paths */
+void _pico_deduce_shadernames( picoModel_t *model ){
+       for ( int i = 0; i < model->numShaders; ++i ){
+               /* skip null shaders */
+               if ( model->shader[i] == NULL )
+                       continue;
+
+               const char* mapname = model->shader[i]->mapName;
+               const char* shadername = model->shader[i]->name;
+
+               /* Detect intentional material name to not replace it with texture name.
+
+               Reimplement commits by Garux:
+               https://github.com/Garux/netradiant-custom/commit/1bd3e7ae186b55fb61e3738d2493432c0b1f5a7b
+               https://github.com/Garux/netradiant-custom/commit/ea21eee2254fb2e667732d8f1b0f83c439a89bfa
+
+               This attempts to restore proper material behaviour when the mapper knows what he is doing,
+               also called Julius' case or correct case because Julius is always correctâ„¢
+               while keeping the fallback for other situations, also called newbie's case
+               which may be compatible with third-party tools not following Quake 3 conventions.
+
+               See: https://gitlab.com/xonotic/netradiant/-/merge_requests/179#note_777324051 */
+               if ( shadername && *shadername &&
+                       ( _pico_strnicmp( shadername, "models/", 7 ) == 0
+                       || _pico_strnicmp( shadername, "models\\", 7 ) == 0
+                       || _pico_strnicmp( shadername, "textures/", 9 ) == 0
+                       || _pico_strnicmp( shadername, "textures\\", 9 ) == 0 ) )
+               {
+                       _pico_deduce_shadername( model->fileName, shadername, model->shader[i] );
+               }
+               else if( mapname && *mapname )
+                       _pico_deduce_shadername( model->fileName, mapname, model->shader[i] );
+               else if( shadername && *shadername )
+                       _pico_deduce_shadername( model->fileName, shadername, model->shader[i] );
+       }
+}
+
 /* _pico_parse_skip_white:
  *  skips white spaces in current pico parser, sets *hasLFs
  *  to 1 if linefeeds were skipped, and either returns the
  *  parser's cursor pointer or NULL on error. -sea
  */
-void _pico_parse_skip_white( picoParser_t *p, int *hasLFs )
-{
+void _pico_parse_skip_white( picoParser_t *p, int *hasLFs ){
        /* sanity checks */
-       if (p == NULL || p->cursor == NULL)
+       if ( p == NULL || p->cursor == NULL ) {
                return;
+       }
 
        /* skin white spaces */
-       while( 1 )
+       while ( 1 )
        {
                /* sanity checks */
-               if (p->cursor <  p->buffer ||
-                       p->cursor >= p->max)
-               {
+               if ( p->cursor <  p->buffer ||
+                        p->cursor >= p->max ) {
                        return;
                }
                /* break for chars other than white spaces */
-               if (*p->cursor >  0x20) break;
-               if (*p->cursor == 0x00) return;
+               if ( *p->cursor >  0x20 ) {
+                       break;
+               }
+               if ( *p->cursor == 0x00 ) {
+                       return;
+               }
 
                /* a bit of linefeed handling */
-               if (*p->cursor == '\n')
-               {
+               if ( *p->cursor == '\n' ) {
                        *hasLFs = 1;
                        p->curLine++;
                }
@@ -738,33 +809,34 @@ void _pico_parse_skip_white( picoParser_t *p, int *hasLFs )
 /* _pico_new_parser:
  *  allocates a new ascii parser object.
  */
-picoParser_t *_pico_new_parser( const picoByte_t *buffer, int bufSize )
-{
+picoParser_t *_pico_new_parser( const picoByte_t *buffer, int bufSize ){
        picoParser_t *p;
-       
+
        /* sanity check */
-       if( buffer == NULL || bufSize <= 0 )
+       if ( buffer == NULL || bufSize <= 0 ) {
                return NULL;
-       
+       }
+
        /* allocate reader */
-       p = _pico_alloc( sizeof(picoParser_t) );
-       if (p == NULL) return NULL;
-       memset( p,0,sizeof(picoParser_t) );
+       p = _pico_alloc( sizeof( picoParser_t ) );
+       if ( p == NULL ) {
+               return NULL;
+       }
+       memset( p,0,sizeof( picoParser_t ) );
 
        /* allocate token space */
        p->tokenSize = 0;
        p->tokenMax = 1024;
        p->token = _pico_alloc( p->tokenMax );
-       if( p->token == NULL )
-       {
+       if ( p->token == NULL ) {
                _pico_free( p );
                return NULL;
        }
        /* setup */
-       p->buffer       = (const char *) buffer;
-       p->cursor       = (const char *) buffer;
-       p->bufSize      = bufSize;
-       p->max          = p->buffer + bufSize;
+       p->buffer   = (const char *) buffer;
+       p->cursor   = p->buffer;
+       p->bufSize  = bufSize;
+       p->max      = p->buffer + bufSize;
        p->curLine = 1; /* sea: new */
 
        /* return ptr to parser */
@@ -774,14 +846,14 @@ picoParser_t *_pico_new_parser( const picoByte_t *buffer, int bufSize )
 /* _pico_free_parser:
  *  frees an existing pico parser object.
  */
-void _pico_free_parser( picoParser_t *p )
-{
+void _pico_free_parser( picoParser_t *p ){
        /* sanity check */
-       if (p == NULL) return;
+       if ( p == NULL ) {
+               return;
+       }
 
        /* free the parser */
-       if (p->token != NULL)
-       {
+       if ( p->token != NULL ) {
                _pico_free( p->token );
        }
        _pico_free( p );
@@ -795,16 +867,14 @@ void _pico_free_parser( picoParser_t *p )
  *  will handle "quoted" strings and return the data between the
  *  quotes as token. returns 0 on end/error or 1 on success. -sea
  */
-int _pico_parse_ex( picoParser_t *p, int allowLFs, int handleQuoted )
-{
+int _pico_parse_ex( picoParser_t *p, int allowLFs, int handleQuoted ){
        int hasLFs = 0;
        const char *old;
 
        /* sanity checks */
-       if( p == NULL || p->buffer == NULL ||
-               p->cursor <  p->buffer ||
-               p->cursor >= p->max )
-       {
+       if ( p == NULL || p->buffer == NULL ||
+                p->cursor <  p->buffer ||
+                p->cursor >= p->max ) {
                return 0;
        }
        /* clear parser token */
@@ -813,43 +883,36 @@ int _pico_parse_ex( picoParser_t *p, int allowLFs, int handleQuoted )
        old = p->cursor;
 
        /* skip whitespaces */
-       while( p->cursor < p->max && *p->cursor <= 32 )
+       while ( p->cursor < p->max && *p->cursor <= 32 )
        {
-               if (*p->cursor == '\n')
-               {
+               if ( *p->cursor == '\n' ) {
                        p->curLine++;
                        hasLFs++;
                }
                p->cursor++;
        }
        /* return if we're not allowed to go beyond lfs */
-       if ((hasLFs > 0) && !allowLFs)
-       {
+       if ( ( hasLFs > 0 ) && !allowLFs ) {
                p->cursor = old;
                return 0;
        }
        /* get next quoted string */
-       if (*p->cursor == '\"' && handleQuoted)
-       {
+       if ( *p->cursor == '\"' && handleQuoted ) {
                p->cursor++;
-               while (p->cursor < p->max && *p->cursor)
+               while ( p->cursor < p->max && *p->cursor )
                {
-                       if (*p->cursor == '\\')
-                       {
-                               if (*(p->cursor+1) == '"')
-                               {
+                       if ( *p->cursor == '\\' ) {
+                               if ( *( p->cursor + 1 ) == '"' ) {
                                        p->cursor++;
                                }
                                p->token[ p->tokenSize++ ] = *p->cursor++;
                                continue;
                        }
-                       else if (*p->cursor == '\"')
-                       {
+                       else if ( *p->cursor == '\"' ) {
                                p->cursor++;
                                break;
                        }
-                       else if (*p->cursor == '\n')
-                       {
+                       else if ( *p->cursor == '\n' ) {
                                p->curLine++;
                        }
                        p->token[ p->tokenSize++ ] = *p->cursor++;
@@ -859,10 +922,9 @@ int _pico_parse_ex( picoParser_t *p, int allowLFs, int handleQuoted )
                return 1;
        }
        /* otherwise get next word */
-       while( p->cursor < p->max && *p->cursor > 32 )
+       while ( p->cursor < p->max && *p->cursor > 32 )
        {
-               if (*p->cursor == '\n')
-               {
+               if ( *p->cursor == '\n' ) {
                        p->curLine++;
                }
                p->token[ p->tokenSize++ ] = *p->cursor++;
@@ -876,14 +938,16 @@ int _pico_parse_ex( picoParser_t *p, int allowLFs, int handleQuoted )
  *  reads the first token from the next line and returns
  *  a pointer to it. returns NULL on EOL or EOF. -sea
  */
-char *_pico_parse_first( picoParser_t *p )
-{
+char *_pico_parse_first( picoParser_t *p ){
        /* sanity check */
-       if (p == NULL) return NULL;
+       if ( p == NULL ) {
+               return NULL;
+       }
 
        /* try to read next token (with lfs & quots) */
-       if (!_pico_parse_ex( p,1,1 ))
+       if ( !_pico_parse_ex( p,1,1 ) ) {
                return NULL;
+       }
 
        /* return ptr to the token string */
        return p->token;
@@ -894,14 +958,16 @@ char *_pico_parse_first( picoParser_t *p )
  *  to it. quoted strings are handled as usual. returns NULL
  *  on EOL or EOF. -sea
  */
-char *_pico_parse( picoParser_t *p, int allowLFs )
-{
+char *_pico_parse( picoParser_t *p, int allowLFs ){
        /* sanity check */
-       if (p == NULL) return NULL;
+       if ( p == NULL ) {
+               return NULL;
+       }
 
        /* try to read next token (with quots) */
-       if (!_pico_parse_ex( p,allowLFs,1 ))
+       if ( !_pico_parse_ex( p,allowLFs,1 ) ) {
                return NULL;
+       }
 
        /* return ptr to the token string */
        return p->token;
@@ -910,9 +976,8 @@ char *_pico_parse( picoParser_t *p, int allowLFs )
 /* _pico_parse_skip_rest:
  *  skips the rest of the current line in parser.
  */
-void _pico_parse_skip_rest( picoParser_t *p )
-{
-       while( _pico_parse_ex( p,0,0 ) ) ;
+void _pico_parse_skip_rest( picoParser_t *p ){
+       while ( _pico_parse_ex( p,0,0 ) ) ;
 }
 
 /* _pico_parse_skip_braced:
@@ -921,29 +986,28 @@ void _pico_parse_skip_rest( picoParser_t *p )
  *  end of buffer was reached or when the opening bracket was
  *  missing).
  */
-int _pico_parse_skip_braced( picoParser_t *p )
-{
+int _pico_parse_skip_braced( picoParser_t *p ){
        int firstToken = 1;
        int level;
 
        /* sanity check */
-       if (p == NULL) return 0;
+       if ( p == NULL ) {
+               return 0;
+       }
 
        /* set the initial level for parsing */
        level = 0;
 
        /* skip braced section */
-       while( 1 )
+       while ( 1 )
        {
                /* read next token (lfs allowed) */
-               if (!_pico_parse_ex( p,1,1 ))
-               {
+               if ( !_pico_parse_ex( p,1,1 ) ) {
                        /* end of parser buffer reached */
                        return 0;
                }
                /* first token must be an opening bracket */
-               if (firstToken && p->token[0] != '{')
-               {
+               if ( firstToken && p->token[0] != '{' ) {
                        /* opening bracket missing */
                        return 0;
                }
@@ -951,126 +1015,140 @@ int _pico_parse_skip_braced( picoParser_t *p )
                firstToken = 0;
 
                /* update level */
-               if (p->token[1] == '\0')
-               {
-                       if (p->token[0] == '{') level++;
-                       if (p->token[0] == '}') level--;
+               if ( p->token[1] == '\0' ) {
+                       if ( p->token[0] == '{' ) {
+                               level++;
+                       }
+                       if ( p->token[0] == '}' ) {
+                               level--;
+                       }
                }
                /* break if we're back at our starting level */
-               if (level == 0) break;
+               if ( level == 0 ) {
+                       break;
+               }
        }
        /* successfully skipped braced section */
        return 1;
 }
 
-int _pico_parse_check( picoParser_t *p, int allowLFs, char *str )
-{
-       if (!_pico_parse_ex( p,allowLFs,1 ))
+int _pico_parse_check( picoParser_t *p, int allowLFs, char *str ){
+       if ( !_pico_parse_ex( p,allowLFs,1 ) ) {
                return 0;
-       if (!strcmp(p->token,str))
+       }
+       if ( !strcmp( p->token,str ) ) {
                return 1;
-               return 0;
+       }
+       return 0;
 }
 
-int _pico_parse_checki( picoParser_t *p, int allowLFs, char *str )
-{
-       if (!_pico_parse_ex( p,allowLFs,1 ))
+int _pico_parse_checki( picoParser_t *p, int allowLFs, char *str ){
+       if ( !_pico_parse_ex( p,allowLFs,1 ) ) {
                return 0;
-       if (!_pico_stricmp(p->token,str))
+       }
+       if ( !_pico_stricmp( p->token,str ) ) {
                return 1;
-               return 0;
+       }
+       return 0;
 }
 
-int _pico_parse_int( picoParser_t *p, int *out )
-{
+int _pico_parse_int( picoParser_t *p, int *out ){
        char *token;
 
        /* sanity checks */
-       if (p == NULL || out == NULL)
+       if ( p == NULL || out == NULL ) {
                return 0;
+       }
 
        /* get token and turn it into an integer */
        *out = 0;
        token = _pico_parse( p,0 );
-       if (token == NULL) return 0;
+       if ( token == NULL ) {
+               return 0;
+       }
        *out = atoi( token );
 
        /* success */
        return 1;
 }
 
-int _pico_parse_int_def( picoParser_t *p, int *out, int def )
-{
+int _pico_parse_int_def( picoParser_t *p, int *out, int def ){
        char *token;
 
        /* sanity checks */
-       if (p == NULL || out == NULL)
+       if ( p == NULL || out == NULL ) {
                return 0;
+       }
 
        /* get token and turn it into an integer */
        *out = def;
        token = _pico_parse( p,0 );
-       if (token == NULL) return 0;
+       if ( token == NULL ) {
+               return 0;
+       }
        *out = atoi( token );
 
        /* success */
        return 1;
 }
 
-int _pico_parse_float( picoParser_t *p, float *out )
-{
+int _pico_parse_float( picoParser_t *p, float *out ){
        char *token;
 
        /* sanity checks */
-       if (p == NULL || out == NULL)
+       if ( p == NULL || out == NULL ) {
                return 0;
+       }
 
        /* get token and turn it into a float */
        *out = 0.0f;
        token = _pico_parse( p,0 );
-       if (token == NULL) return 0;
+       if ( token == NULL ) {
+               return 0;
+       }
        *out = (float) atof( token );
 
        /* success */
        return 1;
 }
 
-int _pico_parse_float_def( picoParser_t *p, float *out, float def )
-{
+int _pico_parse_float_def( picoParser_t *p, float *out, float def ){
        char *token;
 
        /* sanity checks */
-       if (p == NULL || out == NULL)
+       if ( p == NULL || out == NULL ) {
                return 0;
+       }
 
        /* get token and turn it into a float */
        *out = def;
        token = _pico_parse( p,0 );
-       if (token == NULL) return 0;
+       if ( token == NULL ) {
+               return 0;
+       }
        *out = (float) atof( token );
 
        /* success */
        return 1;
 }
 
-int _pico_parse_vec( picoParser_t *p, picoVec3_t out )
-{
+int _pico_parse_vec( picoParser_t *p, picoVec3_t out ){
        char *token;
-       int       i;
+       int i;
 
        /* sanity checks */
-       if (p == NULL || out == NULL)
+       if ( p == NULL || out == NULL ) {
                return 0;
+       }
 
        /* zero out outination vector */
        _pico_zero_vec( out );
 
        /* parse three vector components */
-       for (i=0; i<3; i++)
+       for ( i = 0; i < 3; i++ )
        {
                token = _pico_parse( p,0 );
-               if (token == NULL)
-               {
+               if ( token == NULL ) {
                        _pico_zero_vec( out );
                        return 0;
                }
@@ -1080,24 +1158,23 @@ int _pico_parse_vec( picoParser_t *p, picoVec3_t out )
        return 1;
 }
 
-int _pico_parse_vec_def( picoParser_t *p, picoVec3_t out, picoVec3_t def )
-{
+int _pico_parse_vec_def( picoParser_t *p, picoVec3_t out, picoVec3_t def ){
        char *token;
-       int       i;
+       int i;
 
        /* sanity checks */
-       if (p == NULL || out == NULL)
+       if ( p == NULL || out == NULL ) {
                return 0;
+       }
 
        /* assign default vector value */
        _pico_copy_vec( def,out );
 
        /* parse three vector components */
-       for (i=0; i<3; i++)
+       for ( i = 0; i < 3; i++ )
        {
                token = _pico_parse( p,0 );
-               if (token == NULL)
-               {
+               if ( token == NULL ) {
                        _pico_copy_vec( def,out );
                        return 0;
                }
@@ -1107,24 +1184,23 @@ int _pico_parse_vec_def( picoParser_t *p, picoVec3_t out, picoVec3_t def )
        return 1;
 }
 
-int _pico_parse_vec2( picoParser_t *p, picoVec2_t out )
-{
+int _pico_parse_vec2( picoParser_t *p, picoVec2_t out ){
        char *token;
-       int       i;
+       int i;
 
        /* sanity checks */
-       if (p == NULL || out == NULL)
+       if ( p == NULL || out == NULL ) {
                return 0;
+       }
 
        /* zero out outination vector */
        _pico_zero_vec2( out );
 
        /* parse two vector components */
-       for (i=0; i<2; i++)
+       for ( i = 0; i < 2; i++ )
        {
                token = _pico_parse( p,0 );
-               if (token == NULL)
-               {
+               if ( token == NULL ) {
                        _pico_zero_vec2( out );
                        return 0;
                }
@@ -1134,24 +1210,23 @@ int _pico_parse_vec2( picoParser_t *p, picoVec2_t out )
        return 1;
 }
 
-int _pico_parse_vec2_def( picoParser_t *p, picoVec2_t out, picoVec2_t def )
-{
+int _pico_parse_vec2_def( picoParser_t *p, picoVec2_t out, picoVec2_t def ){
        char *token;
-       int       i;
+       int i;
 
        /* sanity checks */
-       if (p == NULL || out == NULL)
+       if ( p == NULL || out == NULL ) {
                return 0;
+       }
 
        /* assign default vector value */
        _pico_copy_vec2( def,out );
 
        /* parse two vector components */
-       for (i=0; i<2; i++)
+       for ( i = 0; i < 2; i++ )
        {
                token = _pico_parse( p,0 );
-               if (token == NULL)
-               {
+               if ( token == NULL ) {
                        _pico_copy_vec2( def,out );
                        return 0;
                }
@@ -1161,24 +1236,23 @@ int _pico_parse_vec2_def( picoParser_t *p, picoVec2_t out, picoVec2_t def )
        return 1;
 }
 
-int _pico_parse_vec4( picoParser_t *p, picoVec4_t out )
-{
+int _pico_parse_vec4( picoParser_t *p, picoVec4_t out ){
        char *token;
-       int       i;
+       int i;
 
        /* sanity checks */
-       if (p == NULL || out == NULL)
+       if ( p == NULL || out == NULL ) {
                return 0;
+       }
 
        /* zero out outination vector */
        _pico_zero_vec4( out );
 
        /* parse four vector components */
-       for (i=0; i<4; i++)
+       for ( i = 0; i < 4; i++ )
        {
                token = _pico_parse( p,0 );
-               if (token == NULL)
-               {
+               if ( token == NULL ) {
                        _pico_zero_vec4( out );
                        return 0;
                }
@@ -1188,24 +1262,23 @@ int _pico_parse_vec4( picoParser_t *p, picoVec4_t out )
        return 1;
 }
 
-int _pico_parse_vec4_def( picoParser_t *p, picoVec4_t out, picoVec4_t def )
-{
+int _pico_parse_vec4_def( picoParser_t *p, picoVec4_t out, picoVec4_t def ){
        char *token;
-       int       i;
+       int i;
 
        /* sanity checks */
-       if (p == NULL || out == NULL)
+       if ( p == NULL || out == NULL ) {
                return 0;
+       }
 
        /* assign default vector value */
        _pico_copy_vec4( def,out );
 
        /* parse four vector components */
-       for (i=0; i<4; i++)
+       for ( i = 0; i < 4; i++ )
        {
                token = _pico_parse( p,0 );
-               if (token == NULL)
-               {
+               if ( token == NULL ) {
                        _pico_copy_vec4( def,out );
                        return 0;
                }
@@ -1218,24 +1291,26 @@ int _pico_parse_vec4_def( picoParser_t *p, picoVec4_t out, picoVec4_t def )
 /* _pico_new_memstream:
  *  allocates a new memorystream object.
  */
-picoMemStream_t *_pico_new_memstream( const picoByte_t *buffer, int bufSize )
-{
+picoMemStream_t *_pico_new_memstream( const picoByte_t *buffer, int bufSize ){
        picoMemStream_t *s;
-       
+
        /* sanity check */
-       if( buffer == NULL || bufSize <= 0 )
+       if ( buffer == NULL || bufSize <= 0 ) {
                return NULL;
-       
+       }
+
        /* allocate stream */
-       s = _pico_alloc( sizeof(picoMemStream_t) );
-       if (s == NULL) return NULL;
-       memset( s,0,sizeof(picoMemStream_t) );
+       s = _pico_alloc( sizeof( picoMemStream_t ) );
+       if ( s == NULL ) {
+               return NULL;
+       }
+       memset( s,0,sizeof( picoMemStream_t ) );
 
        /* setup */
-       s->buffer       = buffer;
-       s->curPos       = buffer;
-       s->bufSize      = bufSize;
-       s->flag         = 0;
+       s->buffer   = buffer;
+       s->curPos   = buffer;
+       s->bufSize  = bufSize;
+       s->flag     = 0;
 
        /* return ptr to stream */
        return s;
@@ -1244,10 +1319,11 @@ picoMemStream_t *_pico_new_memstream( const picoByte_t *buffer, int bufSize )
 /* _pico_free_memstream:
  *  frees an existing pico memorystream object.
  */
-void _pico_free_memstream( picoMemStream_t *s )
-{
+void _pico_free_memstream( picoMemStream_t *s ){
        /* sanity check */
-       if (s == NULL) return;
+       if ( s == NULL ) {
+               return;
+       }
 
        /* free the stream */
        _pico_free( s );
@@ -1256,16 +1332,15 @@ void _pico_free_memstream( picoMemStream_t *s )
 /* _pico_memstream_read:
  *  reads data from a pico memorystream into a buffer.
  */
-int _pico_memstream_read( picoMemStream_t *s, void *buffer, int len )
-{
+int _pico_memstream_read( picoMemStream_t *s, void *buffer, int len ){
        int ret = 1;
 
        /* sanity checks */
-       if (s == NULL || buffer == NULL)
+       if ( s == NULL || buffer == NULL ) {
                return 0;
+       }
 
-       if (s->curPos + len > s->buffer + s->bufSize)
-       {
+       if ( s->curPos + len > s->buffer + s->bufSize ) {
                s->flag |= PICO_IOEOF;
                len = s->buffer + s->bufSize - s->curPos;
                ret = 0;
@@ -1280,17 +1355,18 @@ int _pico_memstream_read( picoMemStream_t *s, void *buffer, int len )
 /* _pico_memstream_read:
  *  reads a character from a pico memorystream
  */
-int _pico_memstream_getc( picoMemStream_t *s )
-{
+int _pico_memstream_getc( picoMemStream_t *s ){
        int c = 0;
 
        /* sanity check */
-       if (s == NULL)
+       if ( s == NULL ) {
                return -1;
+       }
 
        /* read the character */
-       if (_pico_memstream_read( s, &c, 1) == 0)
+       if ( _pico_memstream_read( s, &c, 1 ) == 0 ) {
                return -1;
+       }
 
        return c;
 }
@@ -1298,42 +1374,36 @@ int _pico_memstream_getc( picoMemStream_t *s )
 /* _pico_memstream_seek:
  *  sets the current read position to a different location
  */
-int _pico_memstream_seek( picoMemStream_t *s, long offset, int origin )
-{
+int _pico_memstream_seek( picoMemStream_t *s, long offset, int origin ){
        int overflow;
 
        /* sanity check */
-       if (s == NULL)
+       if ( s == NULL ) {
                return -1;
+       }
 
-       if (origin == PICO_SEEK_SET)
-       {
+       if ( origin == PICO_SEEK_SET ) {
                s->curPos = s->buffer + offset;
                overflow = s->curPos - ( s->buffer + s->bufSize );
-               if (overflow > 0)
-               {
+               if ( overflow > 0 ) {
                        s->curPos = s->buffer + s->bufSize;
                        return offset - overflow;
                }
                return 0;
        }
-       else if (origin == PICO_SEEK_CUR)
-       {
+       else if ( origin == PICO_SEEK_CUR ) {
                s->curPos += offset;
                overflow = s->curPos - ( s->buffer + s->bufSize );
-               if (overflow > 0)
-               {
+               if ( overflow > 0 ) {
                        s->curPos = s->buffer + s->bufSize;
                        return offset - overflow;
                }
                return 0;
        }
-       else if (origin == PICO_SEEK_END)
-       {
+       else if ( origin == PICO_SEEK_END ) {
                s->curPos = ( s->buffer + s->bufSize ) - offset;
                overflow = s->buffer - s->curPos;
-               if (overflow > 0)
-               {
+               if ( overflow > 0 ) {
                        s->curPos = s->buffer;
                        return offset - overflow;
                }
@@ -1346,11 +1416,11 @@ int _pico_memstream_seek( picoMemStream_t *s, long offset, int origin )
 /* _pico_memstream_tell:
  *  returns the current read position in the pico memorystream
  */
-long _pico_memstream_tell( picoMemStream_t *s )
-{
+long _pico_memstream_tell( picoMemStream_t *s ){
        /* sanity check */
-       if (s == NULL)
+       if ( s == NULL ) {
                return -1;
+       }
 
        return s->curPos - s->buffer;
 }