void free_exp ( cEXP* p ) { if( p ) { if( p->exp1 ) free_exp( p->exp1 ); if( p->exp2 ) free_exp( p->exp2 ); if( p->next ) free_exp( p->next ); free( p ); } }
void free_stm ( cSTM* p ) { if( p ) { if( p->exp1 ) free_exp( p->exp1 ); if( p->exp2 ) free_exp( p->exp2 ); if( p->stm1 ) free_stm( p->stm1 ); if( p->stm2 ) free_stm( p->stm2 ); if( p->next ) free_stm( p->next ); free( p ); } }
/* * Free resources and exit program. */ static void quit(){ /* Free eduraster resources */ if(program_surface_light != NULL){ er_delete_program(program_surface_light); program_surface_light = NULL; } if(program_axis != NULL){ er_delete_program(program_axis); program_axis = NULL; } if(program_surface_color != NULL){ er_delete_program(program_surface_color); program_surface_color = NULL; } if(va != NULL){ er_delete_vertex_array(va); va = NULL; } if(color_buffer != NULL){ free(color_buffer); color_buffer = NULL; } if(depth_buffer != NULL){ free(depth_buffer); depth_buffer = NULL; } if(points != NULL){ free(points); points = NULL; } if(index_data != NULL){ free(index_data); index_data = NULL; } er_quit(); /* Free parsing structures */ if(exp_x != NULL){ free_exp(exp_x); exp_x = NULL; } if(exp_y != NULL){ free_exp(exp_y); exp_y = NULL; } if(exp_z != NULL){ free_exp(exp_z); exp_z = NULL; } /* Free SDL structures */ if(texture != NULL){ SDL_DestroyTexture(texture); texture = NULL; } if(renderer != NULL){ SDL_DestroyRenderer(renderer); renderer = NULL; } if(window != NULL){ SDL_DestroyWindow(window); window = NULL; } SDL_Quit(); /* Exit */ exit(0); }