|  |  |  | @ -1244,7 +1244,7 @@ void stb_newell_normal(float *normal, int num_vert, float **vert, int normalize) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | int stb_box_face_vertex_axis_side(int face_number, int vertex_number, int axis) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |    static box_vertices[6][4][3] = | 
			
		
	
		
			
				
					|  |  |  |  |    static int box_vertices[6][4][3] = | 
			
		
	
		
			
				
					|  |  |  |  |    { | 
			
		
	
		
			
				
					|  |  |  |  |       { { 1,1,1 }, { 1,0,1 }, { 1,0,0 }, { 1,1,0 } }, | 
			
		
	
		
			
				
					|  |  |  |  |       { { 0,0,0 }, { 0,0,1 }, { 0,1,1 }, { 0,1,0 } }, | 
			
		
	
	
		
			
				
					|  |  |  | @ -2139,7 +2139,7 @@ void stb_replaceinplace(char *src, char *find, char *replace) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |    size_t len_find = strlen(find); | 
			
		
	
		
			
				
					|  |  |  |  |    size_t len_replace = strlen(replace); | 
			
		
	
		
			
				
					|  |  |  |  |    int count = 0, delta; | 
			
		
	
		
			
				
					|  |  |  |  |    int delta; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |    char *s,*p,*q; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -2771,7 +2771,7 @@ static void * malloc_base(void *context, size_t size, stb__alloc_type t, int ali | 
			
		
	
		
			
				
					|  |  |  |  |          break; | 
			
		
	
		
			
				
					|  |  |  |  |       } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |       default: assert(0); /* NOTREACHED */ | 
			
		
	
		
			
				
					|  |  |  |  |       default: p = NULL; assert(0); /* NOTREACHED */ | 
			
		
	
		
			
				
					|  |  |  |  |    } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |    ++stb_alloc_count_alloc; | 
			
		
	
	
		
			
				
					|  |  |  | @ -3875,14 +3875,16 @@ static int STB_(N,addset)(TYPE *a, KEY k, VALUE v,                            \ | 
			
		
	
		
			
				
					|  |  |  |  |    unsigned int h = STB_(N, hash)(k);                                         \
 | 
			
		
	
		
			
				
					|  |  |  |  |    unsigned int n = h & a->mask;                                              \
 | 
			
		
	
		
			
				
					|  |  |  |  |    int b = -1;                                                                \
 | 
			
		
	
		
			
				
					|  |  |  |  |    if (CCOMPARE(k,EMPTY))                                                     \
 | 
			
		
	
		
			
				
					|  |  |  |  |    if (CCOMPARE(k,EMPTY)) {                                                   \
 | 
			
		
	
		
			
				
					|  |  |  |  |       if (a->has_empty ? allow_old : allow_new) {                             \
 | 
			
		
	
		
			
				
					|  |  |  |  |           n=a->has_empty; a->ev = v; a->has_empty = 1; return !n;             \
 | 
			
		
	
		
			
				
					|  |  |  |  |       } else return 0;                                                        \
 | 
			
		
	
		
			
				
					|  |  |  |  |    if (CCOMPARE(k,DEL))                                                       \
 | 
			
		
	
		
			
				
					|  |  |  |  |    }                                                                          \
 | 
			
		
	
		
			
				
					|  |  |  |  |    if (CCOMPARE(k,DEL)) {                                                     \
 | 
			
		
	
		
			
				
					|  |  |  |  |       if (a->has_del ? allow_old : allow_new) {                               \
 | 
			
		
	
		
			
				
					|  |  |  |  |           n=a->has_del; a->dv = v; a->has_del = 1; return !n;                 \
 | 
			
		
	
		
			
				
					|  |  |  |  |       } else return 0;                                                        \
 | 
			
		
	
		
			
				
					|  |  |  |  |    }                                                                          \
 | 
			
		
	
		
			
				
					|  |  |  |  |    if (!CCOMPARE(a->table[n].k, EMPTY)) {                                     \
 | 
			
		
	
		
			
				
					|  |  |  |  |       unsigned int s;                                                         \
 | 
			
		
	
		
			
				
					|  |  |  |  |       if (CCOMPARE(a->table[n].k, DEL))                                       \
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -4036,11 +4038,12 @@ void stb_ptrmap_delete(stb_ptrmap *e, void (*free_func)(void *)) | 
			
		
	
		
			
				
					|  |  |  |  |    int i; | 
			
		
	
		
			
				
					|  |  |  |  |    if (free_func) | 
			
		
	
		
			
				
					|  |  |  |  |       for (i=0; i < e->limit; ++i) | 
			
		
	
		
			
				
					|  |  |  |  |          if (e->table[i].k != STB_EMPTY && e->table[i].k != STB_EDEL) | 
			
		
	
		
			
				
					|  |  |  |  |          if (e->table[i].k != STB_EMPTY && e->table[i].k != STB_EDEL) { | 
			
		
	
		
			
				
					|  |  |  |  |             if (free_func == free) | 
			
		
	
		
			
				
					|  |  |  |  |                free(e->table[i].v); // allow STB_MALLOC_WRAPPER to operate
 | 
			
		
	
		
			
				
					|  |  |  |  |             else | 
			
		
	
		
			
				
					|  |  |  |  |                free_func(e->table[i].v); | 
			
		
	
		
			
				
					|  |  |  |  |          } | 
			
		
	
		
			
				
					|  |  |  |  |    stb_ptrmap_destroy(e); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -5341,13 +5344,17 @@ FILE *  stb_fopen(char *filename, char *mode) | 
			
		
	
		
			
				
					|  |  |  |  |    FILE *f; | 
			
		
	
		
			
				
					|  |  |  |  |    char name_full[4096]; | 
			
		
	
		
			
				
					|  |  |  |  |    char temp_full[sizeof(name_full) + 12]; | 
			
		
	
		
			
				
					|  |  |  |  |    int j,p; | 
			
		
	
		
			
				
					|  |  |  |  |    int p; | 
			
		
	
		
			
				
					|  |  |  |  | #ifdef _MSC_VER | 
			
		
	
		
			
				
					|  |  |  |  |    int j; | 
			
		
	
		
			
				
					|  |  |  |  | #endif | 
			
		
	
		
			
				
					|  |  |  |  |    if (mode[0] != 'w' && !strchr(mode, '+')) | 
			
		
	
		
			
				
					|  |  |  |  |       return stb__fopen(filename, mode); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |    // save away the full path to the file so if the program
 | 
			
		
	
		
			
				
					|  |  |  |  |    // changes the cwd everything still works right! unix has
 | 
			
		
	
		
			
				
					|  |  |  |  |    // better ways to do this, but we have to work in windows
 | 
			
		
	
		
			
				
					|  |  |  |  |    name_full[0] = '\0'; // stb_fullpath reads name_full[0]
 | 
			
		
	
		
			
				
					|  |  |  |  |    if (stb_fullpath(name_full, sizeof(name_full), filename)==0) | 
			
		
	
		
			
				
					|  |  |  |  |       return 0; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -5807,7 +5814,6 @@ void stb_readdir_free(char **files) | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | STB_EXTERN int stb_wildmatchi(char *expr, char *candidate); | 
			
		
	
		
			
				
					|  |  |  |  | static double stb_readdir_size; | 
			
		
	
		
			
				
					|  |  |  |  | static char **readdir_raw(char *dir, int return_subdirs, char *mask) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |    char **results = NULL; | 
			
		
	
	
		
			
				
					|  |  |  | @ -5877,10 +5883,6 @@ static char **readdir_raw(char *dir, int return_subdirs, char *mask) | 
			
		
	
		
			
				
					|  |  |  |  |                      if (buffer[0] == '.' && buffer[1] == '/') | 
			
		
	
		
			
				
					|  |  |  |  |                         p = buffer+2; | 
			
		
	
		
			
				
					|  |  |  |  |                      stb_arr_push(results, strdup(p)); | 
			
		
	
		
			
				
					|  |  |  |  |                      #ifdef _MSC_VER | 
			
		
	
		
			
				
					|  |  |  |  |                      if (!is_subdir) | 
			
		
	
		
			
				
					|  |  |  |  |                         stb_readdir_size += data.size; | 
			
		
	
		
			
				
					|  |  |  |  |                      #endif | 
			
		
	
		
			
				
					|  |  |  |  |                   } | 
			
		
	
		
			
				
					|  |  |  |  |                } | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
	
		
			
				
					|  |  |  | @ -5908,7 +5910,6 @@ char **stb_readdir_subdirs_mask(char *dir, char *wild) { return readdir_raw(dir, | 
			
		
	
		
			
				
					|  |  |  |  | int stb__rec_max=0x7fffffff; | 
			
		
	
		
			
				
					|  |  |  |  | static char **stb_readdir_rec(char **sofar, char *dir, char *filespec) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |    int n = strcmp(dir, ".") ? strlen(dir)+1 : 0; | 
			
		
	
		
			
				
					|  |  |  |  |    char **files; | 
			
		
	
		
			
				
					|  |  |  |  |    char ** dirs; | 
			
		
	
		
			
				
					|  |  |  |  |    char **p; | 
			
		
	
	
		
			
				
					|  |  |  | @ -6495,7 +6496,7 @@ STB_EXTERN void stb_cfg_set_directory(char *dir) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | STB_EXTERN stb_cfg * stb_cfg_open(char *config, char *mode) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |    unsigned int len; | 
			
		
	
		
			
				
					|  |  |  |  |    size_t len; | 
			
		
	
		
			
				
					|  |  |  |  |    stb_cfg *z; | 
			
		
	
		
			
				
					|  |  |  |  |    char file[512]; | 
			
		
	
		
			
				
					|  |  |  |  |    if (mode[0] != 'r' && mode[0] != 'w') return NULL; | 
			
		
	
	
		
			
				
					|  |  |  | @ -7118,7 +7119,7 @@ static void stb__grow_alloc(void) | 
			
		
	
		
			
				
					|  |  |  |  | static void stb__add_alloc(void *p, int sz, char *file, int line) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |    stb_uint32 h; | 
			
		
	
		
			
				
					|  |  |  |  |    int n, f=-1; | 
			
		
	
		
			
				
					|  |  |  |  |    int n; | 
			
		
	
		
			
				
					|  |  |  |  |    if (stb__alloc_count >= stb__alloc_limit) | 
			
		
	
		
			
				
					|  |  |  |  |       stb__grow_alloc(); | 
			
		
	
		
			
				
					|  |  |  |  |    h = stb_hashptr(p); | 
			
		
	
	
		
			
				
					|  |  |  | @ -9217,7 +9218,6 @@ static void stb__lex_reset(stb_matcher *matcher) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | stb_matcher *stb_regex_matcher(char *regex) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |    void *c = stb__arr_context; | 
			
		
	
		
			
				
					|  |  |  |  |    char *z; | 
			
		
	
		
			
				
					|  |  |  |  |    stb_uint16 end; | 
			
		
	
		
			
				
					|  |  |  |  |    stb_matcher *matcher = stb__alloc_matcher(); | 
			
		
	
	
		
			
				
					|  |  |  | @ -10361,9 +10361,9 @@ stb_uint stb_compress(stb_uchar *out, stb_uchar *input, stb_uint length) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | int stb_compress_tofile(char *filename, char *input, unsigned int length) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |    int maxlen = length + 512 + (length >> 2); // total guess
 | 
			
		
	
		
			
				
					|  |  |  |  |    char *buffer = (char *) malloc(maxlen); | 
			
		
	
		
			
				
					|  |  |  |  |    int blen = stb_compress((stb_uchar*)buffer, (stb_uchar*)input, length); | 
			
		
	
		
			
				
					|  |  |  |  |    //int maxlen = length + 512 + (length >> 2); // total guess
 | 
			
		
	
		
			
				
					|  |  |  |  |    //char *buffer = (char *) malloc(maxlen);
 | 
			
		
	
		
			
				
					|  |  |  |  |    //int blen = stb_compress((stb_uchar*)buffer, (stb_uchar*)input, length);
 | 
			
		
	
		
			
				
					|  |  |  |  |    
 | 
			
		
	
		
			
				
					|  |  |  |  |    stb__out = NULL; | 
			
		
	
		
			
				
					|  |  |  |  |    stb__outfile = fopen(filename, "wb"); | 
			
		
	
	
		
			
				
					|  |  |  | @ -10381,7 +10381,7 @@ int stb_compress_tofile(char *filename, char *input, unsigned int length) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | int stb_compress_intofile(FILE *f, char *input, unsigned int length) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |    int maxlen = length + 512 + (length >> 2); // total guess
 | 
			
		
	
		
			
				
					|  |  |  |  |    //int maxlen = length + 512 + (length >> 2); // total guess
 | 
			
		
	
		
			
				
					|  |  |  |  |    //char *buffer = (char*)malloc(maxlen);
 | 
			
		
	
		
			
				
					|  |  |  |  |    //int blen = stb_compress((stb_uchar*)buffer, (stb_uchar*)input, length);
 | 
			
		
	
		
			
				
					|  |  |  |  |    
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -11049,7 +11049,7 @@ stb_arith_symstate *stb_arith_state_create(int num_sym) | 
			
		
	
		
			
				
					|  |  |  |  |    return s; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | static stb_arith_state_rescale(stb_arith_symstate *s) | 
			
		
	
		
			
				
					|  |  |  |  | static void stb_arith_state_rescale(stb_arith_symstate *s) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |    if (s->pow2 < POW2_LIMIT) { | 
			
		
	
		
			
				
					|  |  |  |  |       int pcf, cf, cf_next, next, i; | 
			
		
	
	
		
			
				
					|  |  |  | 
 |