]> git.imager.perl.org - imager.git/blobdiff - dynaload.c
quote the use of min in type=>min, and at least give it some basic
[imager.git] / dynaload.c
index f093f6f48222d2245e5652853a8aa848d3caeca8..a058b05143d917e37ec81cc21a3ac2a44032517f 100644 (file)
@@ -1,5 +1,6 @@
 #include "dynaload.h"
-#include "XSUB.h" /* so we can compile on threaded perls */
+/* #include "XSUB.h"  so we can compile on threaded perls */
+#include "imagei.h"
 
 static symbol_table_t symbol_table={i_has_format,ICL_set_internal,ICL_info,
                             i_img_new,i_img_empty,i_img_empty_ch,i_img_exorcise,
@@ -7,86 +8,6 @@ static symbol_table_t symbol_table={i_has_format,ICL_set_internal,ICL_info,
                             i_box,i_draw,i_arc,i_copyto,i_copyto_trans,i_rubthru};
 
 
-/* These functions are all shared - then comes platform dependant code */
-
-
-int getstr(void *hv_t,char *key,char **store) {
-  SV** svpp;
-  HV* hv=(HV*)hv_t;
-
-  mm_log((1,"getstr(hv_t 0x%X, key %s, store 0x%X)\n",hv_t,key,store));
-
-  if ( !hv_exists(hv,key,strlen(key)) ) return 0;
-
-  svpp=hv_fetch(hv, key, strlen(key), 0);
-  *store=SvPV(*svpp, PL_na );
-
-  return 1;
-}
-
-int getint(void *hv_t,char *key,int *store) {
-  SV** svpp;
-  HV* hv=(HV*)hv_t;  
-
-  mm_log((1,"getint(hv_t 0x%X, key %s, store 0x%X)\n",hv_t,key,store));
-
-  if ( !hv_exists(hv,key,strlen(key)) ) return 0;
-
-  svpp=hv_fetch(hv, key, strlen(key), 0);
-  *store=(int)SvIV(*svpp);
-  return 1;
-}
-
-int getdouble(void *hv_t,char* key,double *store) {
-  SV** svpp;
-  HV* hv=(HV*)hv_t;
-
-  mm_log((1,"getdouble(hv_t 0x%X, key %s, store 0x%X)\n",hv_t,key,store));
-
-  if ( !hv_exists(hv,key,strlen(key)) ) return 0;
-  svpp=hv_fetch(hv, key, strlen(key), 0);
-  *store=(float)SvNV(*svpp);
-  return 1;
-}
-
-int getvoid(void *hv_t,char* key,void **store) {
-  SV** svpp;
-  HV* hv=(HV*)hv_t;
-
-  mm_log((1,"getvoid(hv_t 0x%X, key %s, store 0x%X)\n",hv_t,key,store));
-
-  if ( !hv_exists(hv,key,strlen(key)) ) return 0;
-
-  svpp=hv_fetch(hv, key, strlen(key), 0);
-  *store=(void*)SvIV(*svpp);
-
-  return 1;
-}
-
-int getobj(void *hv_t,char *key,char *type,void **store) {
-  SV** svpp;
-  HV* hv=(HV*)hv_t;
-
-  mm_log((1,"getobj(hv_t 0x%X, key %s,type %s, store 0x%X)\n",hv_t,key,type,store));
-
-  if ( !hv_exists(hv,key,strlen(key)) ) return 0;
-
-  svpp=hv_fetch(hv, key, strlen(key), 0);
-
-  if (sv_derived_from(*svpp,type)) {
-    IV tmp = SvIV((SV*)SvRV(*svpp));
-    *store = (void*) tmp;
-  } else {
-    mm_log((1,"getobj: key exists in hash but is not of correct type"));
-    return 0;
-  }
-
-  return 1;
-}
-
-
-UTIL_table_t UTIL_table={getstr,getint,getdouble,getvoid,getobj};
-
 /*
   Dynamic loading works like this:
   dynaload opens the shared object and
@@ -125,13 +46,13 @@ DSO_open(char* file,char** evalstring) {
   if ( (shl_findsym(&tt_handle, "symbol_table",TYPE_UNDEFINED,(void*)&plugin_symtab))) return NULL;
   if ( (shl_findsym(&tt_handle, "util_table",TYPE_UNDEFINED,&plugin_utiltab))) return NULL;
   (*plugin_symtab)=&symbol_table;
-  (*plugin_utiltab)=&UTIL_table;
+  (*plugin_utiltab)=&i_UTIL_table;
   */
 
   if ( (shl_findsym(&tt_handle, I_INSTALL_TABLES ,TYPE_UNDEFINED, &f ))) return NULL; 
  
   mm_log( (1,"Calling install_tables\n") );
-  f(&symbol_table,&UTIL_table);
+  f(&symbol_table,&i_UTIL_table);
   mm_log( (1,"Call ok.\n") ); 
  
   if ( (shl_findsym(&tt_handle, I_FUNCTION_LIST ,TYPE_UNDEFINED,(func_ptr*)&function_list))) return NULL; 
@@ -181,7 +102,7 @@ DSO_open(char *file, char **evalstring) {
     return NULL;
   }
   mm_log((1, "Calling install tables\n"));
-  f(&symbol_table, &UTIL_table);
+  f(&symbol_table, &i_UTIL_table);
   mm_log((1, "Call ok\n"));
   
   if ( (function_list = (func_ptr *)GetProcAddress(d_handle, I_FUNCTION_LIST)) == NULL) {
@@ -207,9 +128,11 @@ DSO_open(char *file, char **evalstring) {
 undef_int
 DSO_close(void *ptr) {
   DSO_handle *handle = (DSO_handle *)ptr;
-  FreeLibrary(handle->handle);
+  BOOL result = FreeLibrary(handle->handle);
   free(handle->filename);
   free(handle);
+
+  return result;
 }
 
 #else
@@ -293,7 +216,7 @@ static int dlclose(void *handle) /* stub only */
   return 0;
 }
 
-static char *dlerror(void *handle) /* stub only */
+static char *dlerror(void) /* stub only */
 {
   printf("Error occurred\n");
   return dl_error; 
@@ -351,11 +274,11 @@ DSO_open(char* file,char** evalstring) {
   }
 
   mm_log( (1,"Calling install_tables\n") );
-  f(&symbol_table,&UTIL_table);
+  f(&symbol_table,&i_UTIL_table);
   mm_log( (1,"Call ok.\n") );
 
   /* (*plugin_symtab)=&symbol_table;
-     (*plugin_utiltab)=&UTIL_table; */
+     (*plugin_utiltab)=&i_UTIL_table; */
   
   mm_log( (1,"DSO_open: going to dlsym '%s'\n", I_FUNCTION_LIST ));
   if ( (function_list=(func_ptr *)dlsym(d_handle, I_FUNCTION_LIST)) == NULL) {