--- glkloader-0.3.2/generate_glkfuncs.pl~ 2001-03-14 03:07:59.000000000 +0000 +++ glkloader-0.3.2/generate_glkfuncs.pl 2007-12-10 22:38:02.000000000 +0000 @@ -307,7 +307,9 @@ print OUT_FILE "$ret_type $name(", createArgList (@arg_list), ")\n"; print OUT_FILE "{\n"; - print OUT_FILE " $ret_type (*funcPtr)(", createArgList (@arg_list), ");\n"; + print OUT_FILE " static $ret_type (*funcPtr)(", createArgList (@arg_list), ");\n"; + print OUT_FILE "\n"; + print OUT_FILE " if (! funcPtr) {\n"; print OUT_FILE " char * errBuf = NULL;\n"; print OUT_FILE "\n"; print OUT_FILE " funcPtr = loadSymbol(gGlkLib, \"$name\", &errBuf);\n"; @@ -315,6 +317,7 @@ print OUT_FILE " fprintf(stderr, \"%s\\n\", errBuf);\n"; print OUT_FILE " exit(1);\n"; print OUT_FILE " }\n"; + print OUT_FILE " }\n"; print OUT_FILE "\n"; if ($ret_type eq "void") { --- glkloader-0.3.2/blorbfuncs.c~ 2007-12-10 22:36:47.000000000 +0000 +++ glkloader-0.3.2/blorbfuncs.c 2007-12-10 22:38:02.000000000 +0000 @@ -46,7 +46,9 @@ giblorb_err_t giblorb_set_resource_map(strid_t file) { - giblorb_err_t (*funcPtr)(strid_t file); + static giblorb_err_t (*funcPtr)(strid_t file); + + if (! funcPtr) { char * errBuf = NULL; funcPtr = loadSymbol(gGlkLib, "giblorb_set_resource_map", &errBuf); @@ -54,13 +56,16 @@ fprintf(stderr, "%s\n", errBuf); exit(1); } + } return (*funcPtr)(file); } giblorb_map_t *giblorb_get_resource_map(void) { - giblorb_map_t * (*funcPtr)(void); + static giblorb_map_t * (*funcPtr)(void); + + if (! funcPtr) { char * errBuf = NULL; funcPtr = loadSymbol(gGlkLib, "giblorb_get_resource_map", &errBuf); @@ -68,13 +73,16 @@ fprintf(stderr, "%s\n", errBuf); exit(1); } + } return (*funcPtr)(); } giblorb_err_t giblorb_create_map(strid_t file, giblorb_map_t **newmap) { - giblorb_err_t (*funcPtr)(strid_t file, giblorb_map_t **newmap); + static giblorb_err_t (*funcPtr)(strid_t file, giblorb_map_t **newmap); + + if (! funcPtr) { char * errBuf = NULL; funcPtr = loadSymbol(gGlkLib, "giblorb_create_map", &errBuf); @@ -82,13 +90,16 @@ fprintf(stderr, "%s\n", errBuf); exit(1); } + } return (*funcPtr)(file, newmap); } giblorb_err_t giblorb_destroy_map(giblorb_map_t *map) { - giblorb_err_t (*funcPtr)(giblorb_map_t *map); + static giblorb_err_t (*funcPtr)(giblorb_map_t *map); + + if (! funcPtr) { char * errBuf = NULL; funcPtr = loadSymbol(gGlkLib, "giblorb_destroy_map", &errBuf); @@ -96,6 +107,7 @@ fprintf(stderr, "%s\n", errBuf); exit(1); } + } return (*funcPtr)(map); } @@ -103,8 +115,10 @@ giblorb_err_t giblorb_load_chunk_by_type(giblorb_map_t *map, glui32 method, giblorb_result_t *res, glui32 chunktype, glui32 count) { - giblorb_err_t (*funcPtr)(giblorb_map_t *map, + static giblorb_err_t (*funcPtr)(giblorb_map_t *map, glui32 method, giblorb_result_t *res, glui32 chunktype, glui32 count); + + if (! funcPtr) { char * errBuf = NULL; funcPtr = loadSymbol(gGlkLib, "giblorb_load_chunk_by_type", &errBuf); @@ -112,6 +126,7 @@ fprintf(stderr, "%s\n", errBuf); exit(1); } + } return (*funcPtr)(map, method, res, chunktype, count); } @@ -119,8 +134,10 @@ giblorb_err_t giblorb_load_chunk_by_number(giblorb_map_t *map, glui32 method, giblorb_result_t *res, glui32 chunknum) { - giblorb_err_t (*funcPtr)(giblorb_map_t *map, + static giblorb_err_t (*funcPtr)(giblorb_map_t *map, glui32 method, giblorb_result_t *res, glui32 chunknum); + + if (! funcPtr) { char * errBuf = NULL; funcPtr = loadSymbol(gGlkLib, "giblorb_load_chunk_by_number", &errBuf); @@ -128,13 +145,16 @@ fprintf(stderr, "%s\n", errBuf); exit(1); } + } return (*funcPtr)(map, method, res, chunknum); } giblorb_err_t giblorb_unload_chunk(giblorb_map_t *map, glui32 chunknum) { - giblorb_err_t (*funcPtr)(giblorb_map_t *map, glui32 chunknum); + static giblorb_err_t (*funcPtr)(giblorb_map_t *map, glui32 chunknum); + + if (! funcPtr) { char * errBuf = NULL; funcPtr = loadSymbol(gGlkLib, "giblorb_unload_chunk", &errBuf); @@ -142,6 +162,7 @@ fprintf(stderr, "%s\n", errBuf); exit(1); } + } return (*funcPtr)(map, chunknum); } @@ -149,8 +170,10 @@ giblorb_err_t giblorb_load_resource(giblorb_map_t *map, glui32 method, giblorb_result_t *res, glui32 usage, glui32 resnum) { - giblorb_err_t (*funcPtr)(giblorb_map_t *map, + static giblorb_err_t (*funcPtr)(giblorb_map_t *map, glui32 method, giblorb_result_t *res, glui32 usage, glui32 resnum); + + if (! funcPtr) { char * errBuf = NULL; funcPtr = loadSymbol(gGlkLib, "giblorb_load_resource", &errBuf); @@ -158,6 +181,7 @@ fprintf(stderr, "%s\n", errBuf); exit(1); } + } return (*funcPtr)(map, method, res, usage, resnum); } @@ -165,8 +189,10 @@ giblorb_err_t giblorb_count_resources(giblorb_map_t *map, glui32 usage, glui32 *num, glui32 *min, glui32 *max) { - giblorb_err_t (*funcPtr)(giblorb_map_t *map, + static giblorb_err_t (*funcPtr)(giblorb_map_t *map, glui32 usage, glui32 *num, glui32 *min, glui32 *max); + + if (! funcPtr) { char * errBuf = NULL; funcPtr = loadSymbol(gGlkLib, "giblorb_count_resources", &errBuf); @@ -174,6 +200,7 @@ fprintf(stderr, "%s\n", errBuf); exit(1); } + } return (*funcPtr)(map, usage, num, min, max); } --- glkloader-0.3.2/dispafuncs.c~ 2007-12-10 22:36:47.000000000 +0000 +++ glkloader-0.3.2/dispafuncs.c 2007-12-10 22:38:02.000000000 +0000 @@ -48,9 +48,11 @@ gidispatch_rock_t (*regi)(void *obj, glui32 objclass), void (*unregi)(void *obj, glui32 objclass, gidispatch_rock_t objrock)) { - void (*funcPtr)( + static void (*funcPtr)( gidispatch_rock_t (*regi)(void *obj, glui32 objclass), void (*unregi)(void *obj, glui32 objclass, gidispatch_rock_t objrock)); + + if (! funcPtr) { char * errBuf = NULL; funcPtr = loadSymbol(gGlkLib, "gidispatch_set_object_registry", &errBuf); @@ -58,13 +60,16 @@ fprintf(stderr, "%s\n", errBuf); exit(1); } + } (*funcPtr)(regi, unregi); } gidispatch_rock_t gidispatch_get_objrock(void *obj, glui32 objclass) { - gidispatch_rock_t (*funcPtr)(void *obj, glui32 objclass); + static gidispatch_rock_t (*funcPtr)(void *obj, glui32 objclass); + + if (! funcPtr) { char * errBuf = NULL; funcPtr = loadSymbol(gGlkLib, "gidispatch_get_objrock", &errBuf); @@ -72,6 +77,7 @@ fprintf(stderr, "%s\n", errBuf); exit(1); } + } return (*funcPtr)(obj, objclass); } @@ -81,10 +87,12 @@ void (*unregi)(void *array, glui32 len, char *typecode, gidispatch_rock_t objrock)) { - void (*funcPtr)( + static void (*funcPtr)( gidispatch_rock_t (*regi)(void *array, glui32 len, char *typecode), void (*unregi)(void *array, glui32 len, char *typecode, gidispatch_rock_t objrock)); + + if (! funcPtr) { char * errBuf = NULL; funcPtr = loadSymbol(gGlkLib, "gidispatch_set_retained_registry", &errBuf); @@ -92,13 +100,16 @@ fprintf(stderr, "%s\n", errBuf); exit(1); } + } return (*funcPtr)(regi, unregi); } void gidispatch_call(glui32 funcnum, glui32 numargs, gluniversal_t *arglist) { - void (*funcPtr)(glui32 funcnum, glui32 numargs, gluniversal_t *arglist); + static void (*funcPtr)(glui32 funcnum, glui32 numargs, gluniversal_t *arglist); + + if (! funcPtr) { char * errBuf = NULL; funcPtr = loadSymbol(gGlkLib, "gidispatch_call", &errBuf); @@ -106,13 +117,16 @@ fprintf(stderr, "%s\n", errBuf); exit(1); } + } return (*funcPtr)(funcnum, numargs, arglist); } char *gidispatch_prototype(glui32 funcnum) { - char * (*funcPtr)(glui32 funcnum); + static char * (*funcPtr)(glui32 funcnum); + + if (! funcPtr) { char * errBuf = NULL; funcPtr = loadSymbol(gGlkLib, "gidispatch_prototype", &errBuf); @@ -120,13 +134,16 @@ fprintf(stderr, "%s\n", errBuf); exit(1); } + } return (*funcPtr)(funcnum); } glui32 gidispatch_count_classes(void) { - glui32 (*funcPtr)(void); + static glui32 (*funcPtr)(void); + + if (! funcPtr) { char * errBuf = NULL; funcPtr = loadSymbol(gGlkLib, "gidispatch_count_classes", &errBuf); @@ -134,13 +151,16 @@ fprintf(stderr, "%s\n", errBuf); exit(1); } + } return (*funcPtr)(); } gidispatch_intconst_t *gidispatch_get_class(glui32 index) { - gidispatch_intconst_t * (*funcPtr)(glui32 index); + static gidispatch_intconst_t * (*funcPtr)(glui32 index); + + if (! funcPtr) { char * errBuf = NULL; funcPtr = loadSymbol(gGlkLib, "gidispatch_get_class", &errBuf); @@ -148,13 +168,16 @@ fprintf(stderr, "%s\n", errBuf); exit(1); } + } return (*funcPtr)(index); } glui32 gidispatch_count_intconst(void) { - glui32 (*funcPtr)(void); + static glui32 (*funcPtr)(void); + + if (! funcPtr) { char * errBuf = NULL; funcPtr = loadSymbol(gGlkLib, "gidispatch_count_intconst", &errBuf); @@ -162,13 +185,16 @@ fprintf(stderr, "%s\n", errBuf); exit(1); } + } return (*funcPtr)(); } gidispatch_intconst_t *gidispatch_get_intconst(glui32 index) { - gidispatch_intconst_t * (*funcPtr)(glui32 index); + static gidispatch_intconst_t * (*funcPtr)(glui32 index); + + if (! funcPtr) { char * errBuf = NULL; funcPtr = loadSymbol(gGlkLib, "gidispatch_get_intconst", &errBuf); @@ -176,13 +202,16 @@ fprintf(stderr, "%s\n", errBuf); exit(1); } + } return (*funcPtr)(index); } glui32 gidispatch_count_functions(void) { - glui32 (*funcPtr)(void); + static glui32 (*funcPtr)(void); + + if (! funcPtr) { char * errBuf = NULL; funcPtr = loadSymbol(gGlkLib, "gidispatch_count_functions", &errBuf); @@ -190,13 +219,16 @@ fprintf(stderr, "%s\n", errBuf); exit(1); } + } return (*funcPtr)(); } gidispatch_function_t *gidispatch_get_function(glui32 index) { - gidispatch_function_t * (*funcPtr)(glui32 index); + static gidispatch_function_t * (*funcPtr)(glui32 index); + + if (! funcPtr) { char * errBuf = NULL; funcPtr = loadSymbol(gGlkLib, "gidispatch_get_function", &errBuf); @@ -204,13 +236,16 @@ fprintf(stderr, "%s\n", errBuf); exit(1); } + } return (*funcPtr)(index); } gidispatch_function_t *gidispatch_get_function_by_id(glui32 id) { - gidispatch_function_t * (*funcPtr)(glui32 id); + static gidispatch_function_t * (*funcPtr)(glui32 id); + + if (! funcPtr) { char * errBuf = NULL; funcPtr = loadSymbol(gGlkLib, "gidispatch_get_function_by_id", &errBuf); @@ -218,6 +253,7 @@ fprintf(stderr, "%s\n", errBuf); exit(1); } + } return (*funcPtr)(id); } --- glkloader-0.3.2/unixfuncs.c~ 2001-03-14 03:07:59.000000000 +0000 +++ glkloader-0.3.2/unixfuncs.c 2007-12-10 22:38:02.000000000 +0000 @@ -46,7 +46,9 @@ strid_t glkunix_stream_open_pathname(char *pathname, glui32 textmode, glui32 rock) { - strid_t (*funcPtr)(char *pathname, glui32 textmode, glui32 rock); + static strid_t (*funcPtr)(char *pathname, glui32 textmode, glui32 rock); + + if (! funcPtr) { char * errBuf = NULL; funcPtr = loadSymbol(gGlkLib, "glkunix_stream_open_pathname", &errBuf); @@ -54,13 +56,16 @@ fprintf(stderr, "%s\n", errBuf); exit(1); } + } return (*funcPtr)(pathname, textmode, rock); } void glkunix_set_base_file(char *filename) { - void (*funcPtr)(char *filename); + static void (*funcPtr)(char *filename); + + if (! funcPtr) { char * errBuf = NULL; funcPtr = loadSymbol(gGlkLib, "glkunix_set_base_file", &errBuf); @@ -68,6 +73,7 @@ fprintf(stderr, "%s\n", errBuf); exit(1); } + } (*funcPtr)(filename); }