Imported Upstream version 3.3.0
[debian/amanda] / perl / Amanda / Config.c
index 076086c7126bc01c2db7a2c1f853bbc99ad5f203..dbc4f7aeb84fa971f0b236fafe428557346eead2 100644 (file)
@@ -8,6 +8,9 @@
  * interface file instead. 
  * ----------------------------------------------------------------------------- */
 
+#include "../config/config.h"
+
+
 #define SWIGPERL
 #define SWIG_CASTRANK_MODE
 
@@ -1477,21 +1480,23 @@ SWIG_Perl_SetModule(swig_module_info *module) {
 #define SWIGTYPE_p_application_t swig_types[0]
 #define SWIGTYPE_p_changer_config_t swig_types[1]
 #define SWIGTYPE_p_char swig_types[2]
-#define SWIGTYPE_p_config_overwrites_t swig_types[3]
+#define SWIGTYPE_p_config_overrides_t swig_types[3]
 #define SWIGTYPE_p_device_config_t swig_types[4]
 #define SWIGTYPE_p_double swig_types[5]
 #define SWIGTYPE_p_dumptype_t swig_types[6]
 #define SWIGTYPE_p_float swig_types[7]
 #define SWIGTYPE_p_holdingdisk_t swig_types[8]
 #define SWIGTYPE_p_int swig_types[9]
-#define SWIGTYPE_p_interface_t swig_types[10]
-#define SWIGTYPE_p_p_GSList swig_types[11]
-#define SWIGTYPE_p_p_char swig_types[12]
-#define SWIGTYPE_p_pp_script_t swig_types[13]
-#define SWIGTYPE_p_tapetype_t swig_types[14]
-#define SWIGTYPE_p_unsigned_char swig_types[15]
-static swig_type_info *swig_types[17];
-static swig_module_info swig_module = {swig_types, 16, 0, 0, 0, 0};
+#define SWIGTYPE_p_interactivity_t swig_types[10]
+#define SWIGTYPE_p_interface_t swig_types[11]
+#define SWIGTYPE_p_p_GSList swig_types[12]
+#define SWIGTYPE_p_p_char swig_types[13]
+#define SWIGTYPE_p_pp_script_t swig_types[14]
+#define SWIGTYPE_p_taperscan_t swig_types[15]
+#define SWIGTYPE_p_tapetype_t swig_types[16]
+#define SWIGTYPE_p_unsigned_char swig_types[17]
+static swig_type_info *swig_types[19];
+static swig_module_info swig_module = {swig_types, 18, 0, 0, 0, 0};
 #define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
 #define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
 
@@ -1552,6 +1557,254 @@ SWIG_From_int  SWIG_PERL_DECL_ARGS_1(int value)
 }
 
 
+static int
+val_t_to_sv(val_t *val, SV **results) {
+    if (!val) {
+       results[0] = &PL_sv_undef;
+       return 1;
+    } else {
+       switch (val->type) {
+           case CONFTYPE_RATE: {
+               results[0] = sv_newmortal();
+               sv_setnv(results[0], val_t__rate(val)[0]);
+
+               results[1] = sv_newmortal();
+               sv_setnv(results[1], val_t__rate(val)[1]);
+               return 2;
+           }
+
+           case CONFTYPE_INTRANGE: {
+               results[0] = sv_newmortal();
+               sv_setiv(results[0], val_t__intrange(val)[0]);
+
+               results[1] = sv_newmortal();
+               sv_setiv(results[1], val_t__intrange(val)[1]);
+               return 2;
+           }
+
+           case CONFTYPE_EXINCLUDE: {
+               /* exincludes are represented in perl as {
+                *      'list' : [ 'list1', 'list2', ..],
+                *      'file' : [ 'file1', 'file2', ..],
+                *      'optional' : 1,
+                * }
+                */
+               exinclude_t *ei = &val_t__exinclude(val);
+               AV *list_entries = (AV *)sv_2mortal((SV *)newAV());
+               AV *file_entries = (AV *)sv_2mortal((SV *)newAV());
+               SV *optional = sv_newmortal();
+               HV *hv;
+               sle_t *iter;
+
+               /* first set up each of the hash values */
+
+               if (ei->sl_list) {
+                   for (iter = ei->sl_list->first; iter != NULL; iter = iter->next) {
+                       av_push(list_entries, newSVpv(iter->name, 0));
+                   }
+               }
+
+               if(ei->sl_file) {
+                   for (iter = ei->sl_file->first; iter != NULL; iter = iter->next) {
+                       av_push(file_entries, newSVpv(iter->name, 0));
+                   }
+               }
+
+               sv_setiv(optional, ei->optional);
+
+               /* now build the hash */
+               hv = (HV *)sv_2mortal((SV *)newHV());
+               
+               hv_store(hv, "file", 4, newRV((SV *)file_entries), 0);
+               hv_store(hv, "list", 4, newRV((SV *)list_entries), 0);
+               hv_store(hv, "optional", 8, optional, 0);
+               SvREFCNT_inc(optional);
+
+               results[0] = sv_2mortal(newRV((SV *)hv));
+               return 1;
+           }
+
+           case CONFTYPE_PROPLIST:
+               results[0] = sv_2mortal(g_hash_table_to_hashref_property(val_t__proplist(val)));
+               return 1;
+
+           case CONFTYPE_SIZE:
+               results[0] = sv_2mortal(amglue_newSVi64(val_t__size(val)));
+               return 1;
+
+           case CONFTYPE_INT64:
+               results[0] = sv_2mortal(amglue_newSVi64(val_t__int64(val)));
+               return 1;
+
+           case CONFTYPE_BOOLEAN:          /* all same as INT.. */
+           case CONFTYPE_NO_YES_ALL:
+           case CONFTYPE_COMPRESS:
+           case CONFTYPE_ENCRYPT:
+           case CONFTYPE_STRATEGY:
+           case CONFTYPE_TAPERALGO:
+           case CONFTYPE_PRIORITY:
+           case CONFTYPE_HOLDING:
+           case CONFTYPE_EXECUTE_ON:
+           case CONFTYPE_EXECUTE_WHERE:
+           case CONFTYPE_SEND_AMREPORT_ON:
+           case CONFTYPE_DATA_PATH:
+           case CONFTYPE_PART_CACHE_TYPE:
+           case CONFTYPE_INT:
+               results[0] = sv_2mortal(amglue_newSVi64(val_t__int(val)));
+               return 1;
+
+           case CONFTYPE_ESTIMATELIST: {
+               AV *elist = newAV();
+               estimatelist_t el;
+               for (el=val_t__estimatelist(val); el != NULL; el = el->next) {
+                   av_push(elist, newSVuv(GPOINTER_TO_INT(el->data)));
+               }
+               results[0] = sv_2mortal(newRV_noinc((SV *)elist));
+               return 1;
+           }
+
+           case CONFTYPE_TIME:
+               results[0] = sv_2mortal(amglue_newSVi64(val_t__time(val)));
+               return 1;
+
+           case CONFTYPE_REAL:
+               results[0] = sv_newmortal();
+               sv_setnv(results[0], val_t__real(val));
+               return 1;
+
+           case CONFTYPE_IDENT:            /* same as STRING */
+           case CONFTYPE_STR:
+           case CONFTYPE_APPLICATION:
+               results[0] = sv_newmortal();
+               sv_setpv(results[0], val_t__str(val));
+               return 1;
+
+           case CONFTYPE_IDENTLIST: {
+               AV *ilist = newAV();
+
+               identlist_t il;
+               for (il=val_t__identlist(val); il != NULL; il = il->next) {
+                   av_push(ilist, newSVpv((char *)il->data, 0));
+               }
+
+               results[0] = sv_2mortal(newRV_noinc((SV *)ilist));
+               return 1;
+           }
+
+           case CONFTYPE_HOST_LIMIT: {
+               AV *av;
+               GSList *iter;
+               host_limit_t *rl = &val_t__host_limit(val);
+
+               av = newAV();
+               if (rl->same_host)
+                   av_push(av, newSVpv("SAMEHOST-SAMEHOST-SAMEHOST", 0));
+               if (rl->server)
+                   av_push(av, newSVpv("SERVER-SERVER-SERVER", 0));
+               for (iter=rl->match_pats; iter != NULL; iter = iter->next) {
+                   av_push(av, newSVpv((char *)iter->data, 0));
+               }
+
+               results[0] = sv_2mortal(newRV_noinc((SV *)av));
+               return 1;
+           }
+
+           case CONFTYPE_AUTOLABEL: {
+               autolabel_t *autolabel = &val_t__autolabel(val);
+               HV *hv;
+
+               /* now build the hash */
+               hv = (HV *)sv_2mortal((SV *)newHV());
+               hv_store(hv, "template", 8,
+                       (autolabel->template)? newSVpv(autolabel->template, 0) : newSV(0),
+                       0);
+               hv_store(hv, "other_config", 12,
+                       (autolabel->autolabel & AL_OTHER_CONFIG)? &PL_sv_yes : &PL_sv_no,
+                       0);
+               hv_store(hv, "non_amanda", 10,
+                       (autolabel->autolabel & AL_NON_AMANDA)? &PL_sv_yes : &PL_sv_no,
+                       0);
+               hv_store(hv, "volume_error", 12,
+                       (autolabel->autolabel & AL_VOLUME_ERROR)? &PL_sv_yes : &PL_sv_no,
+                       0);
+               hv_store(hv, "empty", 5,
+                       (autolabel->autolabel & AL_EMPTY)? &PL_sv_yes : &PL_sv_no,
+                       0);
+
+               results[0] = sv_2mortal(newRV((SV *)hv));
+               return 1;
+           }
+
+           /* No match yet -> not one of the "complex" types */
+           default:
+               SWIG_exception(SWIG_TypeError, "Unknown val_t conftype");
+               break;
+       }
+    }
+
+    return 0;
+
+fail:
+    SWIG_croak_null();
+}
+
+
+SWIGINTERN swig_type_info*
+SWIG_pchar_descriptor(void)
+{
+  static int init = 0;
+  static swig_type_info* info = 0;
+  if (!init) {
+    info = SWIG_TypeQuery("_p_char");
+    init = 1;
+  }
+  return info;
+}
+
+
+SWIGINTERN int
+SWIG_AsCharPtrAndSize(SV *obj, char** cptr, size_t* psize, int *alloc)
+{
+  if (SvMAGICAL(obj)) {
+     SV *tmp = sv_newmortal();
+     SvSetSV(tmp, obj);
+     obj = tmp;
+  }
+  if (SvPOK(obj)) {
+    STRLEN len = 0;
+    char *cstr = SvPV(obj, len); 
+    size_t size = len + 1;
+    if (cptr)  {
+      if (alloc) {
+       if (*alloc == SWIG_NEWOBJ) {
+         *cptr = (char *)memcpy((char *)malloc((size)*sizeof(char)), cstr, sizeof(char)*(size));
+       } else {
+         *cptr = cstr;
+         *alloc = SWIG_OLDOBJ;
+       }
+      }
+    }
+    if (psize) *psize = size;
+    return SWIG_OK;
+  } else {
+    swig_type_info* pchar_descriptor = SWIG_pchar_descriptor();
+    if (pchar_descriptor) {
+      char* vptr = 0; 
+      if (SWIG_ConvertPtr(obj, (void**)&vptr, pchar_descriptor, 0) == SWIG_OK) {
+       if (cptr) *cptr = vptr;
+       if (psize) *psize = vptr ? (strlen(vptr) + 1) : 0;
+       if (alloc) *alloc = SWIG_OLDOBJ;
+       return SWIG_OK;
+      }
+    }
+  }
+  return SWIG_TypeError;
+}
+
+
+
+
+
 #include <limits.h>
 #if !defined(SWIG_NO_LLONG_MAX)
 # if !defined(LLONG_MAX) && defined(__GNUC__) && defined (__LONG_LONG_MAX__)
@@ -1680,62 +1933,6 @@ SWIG_AsVal_int SWIG_PERL_DECL_ARGS_2(SV * obj, int *val)
 }
 
 
-SWIGINTERN swig_type_info*
-SWIG_pchar_descriptor(void)
-{
-  static int init = 0;
-  static swig_type_info* info = 0;
-  if (!init) {
-    info = SWIG_TypeQuery("_p_char");
-    init = 1;
-  }
-  return info;
-}
-
-
-SWIGINTERN int
-SWIG_AsCharPtrAndSize(SV *obj, char** cptr, size_t* psize, int *alloc)
-{
-  if (SvMAGICAL(obj)) {
-     SV *tmp = sv_newmortal();
-     SvSetSV(tmp, obj);
-     obj = tmp;
-  }
-  if (SvPOK(obj)) {
-    STRLEN len = 0;
-    char *cstr = SvPV(obj, len); 
-    size_t size = len + 1;
-    if (cptr)  {
-      if (alloc) {
-       if (*alloc == SWIG_NEWOBJ) {
-         *cptr = (char *)memcpy((char *)malloc((size)*sizeof(char)), cstr, sizeof(char)*(size));
-       } else {
-         *cptr = cstr;
-         *alloc = SWIG_OLDOBJ;
-       }
-      }
-    }
-    if (psize) *psize = size;
-    return SWIG_OK;
-  } else {
-    swig_type_info* pchar_descriptor = SWIG_pchar_descriptor();
-    if (pchar_descriptor) {
-      char* vptr = 0; 
-      if (SWIG_ConvertPtr(obj, (void**)&vptr, pchar_descriptor, 0) == SWIG_OK) {
-       if (cptr) *cptr = vptr;
-       if (psize) *psize = vptr ? (strlen(vptr) + 1) : 0;
-       if (alloc) *alloc = SWIG_OLDOBJ;
-       return SWIG_OK;
-      }
-    }
-  }
-  return SWIG_TypeError;
-}
-
-
-
-
-
 typedef char **val_t_strs;
 val_t_strs getconf_byname_strs(char *key, int str_needs_quotes) {
     val_t *val = getconf_byname(key);
@@ -1801,6 +1998,28 @@ SWIGCLASS_STATIC int _wrap_debug_amandad_get(pTHX_ SV *sv, MAGIC *SWIGUNUSEDPARM
 }
 
 
+SWIGCLASS_STATIC int _wrap_debug_recovery_set(pTHX_ SV* sv, MAGIC * SWIGUNUSEDPARM(mg)) {
+  MAGIC_PPERL
+  {
+    int val;
+    int res = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(sv, &val);
+    if (!SWIG_IsOK(res)) {
+      SWIG_exception_fail(SWIG_ArgError(res), "in variable '""debug_recovery""' of type '""int""'");
+    }
+    debug_recovery = (int)(val);
+  }
+fail:
+  return 1;
+}
+
+
+SWIGCLASS_STATIC int _wrap_debug_recovery_get(pTHX_ SV *sv, MAGIC *SWIGUNUSEDPARM(mg)) {
+  MAGIC_PPERL
+  sv_setsv(sv,SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(debug_recovery)))  ;
+  return 1;
+}
+
+
 SWIGCLASS_STATIC int _wrap_debug_amidxtaped_set(pTHX_ SV* sv, MAGIC * SWIGUNUSEDPARM(mg)) {
   MAGIC_PPERL
   {
@@ -2144,6 +2363,42 @@ SWIGCLASS_STATIC int _wrap_debug_sendbackup_get(pTHX_ SV *sv, MAGIC *SWIGUNUSEDP
 #ifdef __cplusplus
 extern "C" {
 #endif
+XS(_wrap_data_path_from_string) {
+  {
+    char *arg1 = (char *) 0 ;
+    int res1 ;
+    char *buf1 = 0 ;
+    int alloc1 = 0 ;
+    int argvi = 0;
+    data_path_t result;
+    dXSARGS;
+    
+    if ((items < 1) || (items > 1)) {
+      SWIG_croak("Usage: data_path_from_string(data);");
+    }
+    res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
+    if (!SWIG_IsOK(res1)) {
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "data_path_from_string" "', argument " "1"" of type '" "char *""'");
+    }
+    arg1 = (char *)(buf1);
+    result = (data_path_t)data_path_from_string(arg1);
+    {
+      SV *for_stack;
+      SP += argvi; PUTBACK;
+      for_stack = sv_2mortal(amglue_newSVi64(result));
+      SPAGAIN; SP -= argvi;
+      ST(argvi) = for_stack;
+      argvi++;
+    }
+    if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+    XSRETURN(argvi);
+  fail:
+    if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+    SWIG_croak_null();
+  }
+}
+
+
 XS(_wrap_getconf) {
   {
     confparm_key arg1 ;
@@ -2169,131 +2424,18 @@ XS(_wrap_getconf) {
     }
     result = (val_t *)getconf(arg1);
     {
-      if (!result) {
-        ST(argvi) = &PL_sv_undef;
+      SV *results[3], **iter;
+      int nresults;
+      
+      /* save the stack, since val_t_to_sv may invoke arbitrary Perl code */
+      SP += argvi; PUTBACK;
+      nresults = val_t_to_sv(result, results);
+      SPAGAIN; SP -= argvi;
+      
+      /* add val_t_to_sv's results to the stack */
+      for (iter = results; nresults; iter++, nresults--) {
+        ST(argvi) = *iter;
         argvi++;
-      } else {
-        switch (result->type) {
-          case CONFTYPE_RATE: {
-            ST(argvi)= sv_newmortal();
-            sv_setnv(ST(argvi), val_t__rate(result)[0]);
-            argvi++;
-            
-            ST(argvi)= sv_newmortal();
-            sv_setnv(ST(argvi), val_t__rate(result)[1]);
-            argvi++;
-            break;
-          }
-          
-          case CONFTYPE_INTRANGE: {
-            ST(argvi)= sv_newmortal();
-            sv_setiv(ST(argvi), val_t__intrange(result)[0]);
-            argvi++;
-            
-            ST(argvi)= sv_newmortal();
-            sv_setiv(ST(argvi), val_t__intrange(result)[1]);
-            argvi++;
-            break;
-            break;
-          }
-          
-          case CONFTYPE_EXINCLUDE: {
-            /* exincludes are represented in perl as {
-                        *      'list' : [ 'list1', 'list2', ..],
-                        *      'file' : [ 'file1', 'file2', ..],
-                        *      'optional' : 1,
-                        * }
-                        */
-            exinclude_t *ei = &val_t__exinclude(result);
-            AV *list_entries = (AV *)sv_2mortal((SV *)newAV());
-            AV *file_entries = (AV *)sv_2mortal((SV *)newAV());
-            SV *optional = sv_newmortal();
-            HV *hv;
-            sle_t *iter;
-            
-            /* first set up each of the hash values */
-            
-            if (ei->sl_list) {
-              for (iter = ei->sl_list->first; iter != NULL; iter = iter->next) {
-                av_push(list_entries, newSVpv(iter->name, 0));
-              }
-            }
-            
-            if(ei->sl_file) {
-              for (iter = ei->sl_file->first; iter != NULL; iter = iter->next) {
-                av_push(file_entries, newSVpv(iter->name, 0));
-              }
-            }
-            
-            sv_setiv(optional, ei->optional);
-            
-            /* now build the hash */
-            hv = (HV *)sv_2mortal((SV *)newHV());
-            
-            hv_store(hv, "file", 4, newRV((SV *)file_entries), 0);
-            hv_store(hv, "list", 4, newRV((SV *)list_entries), 0);
-            hv_store(hv, "optional", 8, optional, 0);
-            SvREFCNT_inc(optional);
-            
-            ST(argvi) = sv_2mortal(newRV((SV *)hv));
-            argvi++;
-            break;
-          }
-          
-        case CONFTYPE_PROPLIST:
-          ST(argvi) = sv_2mortal(g_hash_table_to_hashref_property(val_t__proplist(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_SIZE:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__size(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_INT64:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__int64(result)));
-          argvi++;
-          break;
-          
-          case CONFTYPE_BOOLEAN:           /* all same as INT.. */
-        case CONFTYPE_COMPRESS:
-        case CONFTYPE_ENCRYPT:
-        case CONFTYPE_ESTIMATE:
-        case CONFTYPE_STRATEGY:
-        case CONFTYPE_TAPERALGO:
-        case CONFTYPE_PRIORITY:
-        case CONFTYPE_HOLDING:
-        case CONFTYPE_EXECUTE_ON:
-        case CONFTYPE_EXECUTE_WHERE:
-        case CONFTYPE_SEND_AMREPORT_ON:
-        case CONFTYPE_INT:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__int(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_TIME:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__time(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_REAL:
-          ST(argvi) = sv_newmortal();
-          sv_setnv(ST(argvi), val_t__real(result));
-          argvi++;
-          break;
-          
-          case CONFTYPE_IDENT:     /* same as STRING */
-        case CONFTYPE_STR:
-          ST(argvi) = sv_newmortal();
-          sv_setpv(ST(argvi), val_t__str(result));
-          argvi++;
-          break;
-          
-          /* No match yet -> not one of the "complex" types */
-        default:
-          SWIG_exception(SWIG_TypeError, "Unknown val_t conftype");
-          break;
-        }
       }
     }
     
@@ -2330,7 +2472,51 @@ XS(_wrap_getconf_seen) {
     }
     result = (gboolean)getconf_seen(arg1);
     {
-      ST(argvi) = sv_2mortal(amglue_newSVi64(result));
+      if (result)
+      ST(argvi) = &PL_sv_yes;
+      else
+      ST(argvi) = &PL_sv_no;
+      argvi++;
+    }
+    
+    XSRETURN(argvi);
+  fail:
+    
+    SWIG_croak_null();
+  }
+}
+
+
+XS(_wrap_getconf_linenum) {
+  {
+    confparm_key arg1 ;
+    int argvi = 0;
+    int result;
+    dXSARGS;
+    
+    if ((items < 1) || (items > 1)) {
+      SWIG_croak("Usage: getconf_linenum(key);");
+    }
+    {
+      if (sizeof(signed int) == 1) {
+        arg1 = amglue_SvI8(ST(0));
+      } else if (sizeof(signed int) == 2) {
+        arg1 = amglue_SvI16(ST(0));
+      } else if (sizeof(signed int) == 4) {
+        arg1 = amglue_SvI32(ST(0));
+      } else if (sizeof(signed int) == 8) {
+        arg1 = amglue_SvI64(ST(0));
+      } else {
+        g_critical("Unexpected signed int >64 bits?"); /* should be optimized out unless sizeof(signed int) > 8 */
+      }
+    }
+    result = (int)getconf_linenum(arg1);
+    {
+      SV *for_stack;
+      SP += argvi; PUTBACK;
+      for_stack = sv_2mortal(amglue_newSVi64(result));
+      SPAGAIN; SP -= argvi;
+      ST(argvi) = for_stack;
       argvi++;
     }
     
@@ -2362,131 +2548,18 @@ XS(_wrap_getconf_byname) {
     arg1 = (char *)(buf1);
     result = (val_t *)getconf_byname(arg1);
     {
-      if (!result) {
-        ST(argvi) = &PL_sv_undef;
+      SV *results[3], **iter;
+      int nresults;
+      
+      /* save the stack, since val_t_to_sv may invoke arbitrary Perl code */
+      SP += argvi; PUTBACK;
+      nresults = val_t_to_sv(result, results);
+      SPAGAIN; SP -= argvi;
+      
+      /* add val_t_to_sv's results to the stack */
+      for (iter = results; nresults; iter++, nresults--) {
+        ST(argvi) = *iter;
         argvi++;
-      } else {
-        switch (result->type) {
-          case CONFTYPE_RATE: {
-            ST(argvi)= sv_newmortal();
-            sv_setnv(ST(argvi), val_t__rate(result)[0]);
-            argvi++;
-            
-            ST(argvi)= sv_newmortal();
-            sv_setnv(ST(argvi), val_t__rate(result)[1]);
-            argvi++;
-            break;
-          }
-          
-          case CONFTYPE_INTRANGE: {
-            ST(argvi)= sv_newmortal();
-            sv_setiv(ST(argvi), val_t__intrange(result)[0]);
-            argvi++;
-            
-            ST(argvi)= sv_newmortal();
-            sv_setiv(ST(argvi), val_t__intrange(result)[1]);
-            argvi++;
-            break;
-            break;
-          }
-          
-          case CONFTYPE_EXINCLUDE: {
-            /* exincludes are represented in perl as {
-                        *      'list' : [ 'list1', 'list2', ..],
-                        *      'file' : [ 'file1', 'file2', ..],
-                        *      'optional' : 1,
-                        * }
-                        */
-            exinclude_t *ei = &val_t__exinclude(result);
-            AV *list_entries = (AV *)sv_2mortal((SV *)newAV());
-            AV *file_entries = (AV *)sv_2mortal((SV *)newAV());
-            SV *optional = sv_newmortal();
-            HV *hv;
-            sle_t *iter;
-            
-            /* first set up each of the hash values */
-            
-            if (ei->sl_list) {
-              for (iter = ei->sl_list->first; iter != NULL; iter = iter->next) {
-                av_push(list_entries, newSVpv(iter->name, 0));
-              }
-            }
-            
-            if(ei->sl_file) {
-              for (iter = ei->sl_file->first; iter != NULL; iter = iter->next) {
-                av_push(file_entries, newSVpv(iter->name, 0));
-              }
-            }
-            
-            sv_setiv(optional, ei->optional);
-            
-            /* now build the hash */
-            hv = (HV *)sv_2mortal((SV *)newHV());
-            
-            hv_store(hv, "file", 4, newRV((SV *)file_entries), 0);
-            hv_store(hv, "list", 4, newRV((SV *)list_entries), 0);
-            hv_store(hv, "optional", 8, optional, 0);
-            SvREFCNT_inc(optional);
-            
-            ST(argvi) = sv_2mortal(newRV((SV *)hv));
-            argvi++;
-            break;
-          }
-          
-        case CONFTYPE_PROPLIST:
-          ST(argvi) = sv_2mortal(g_hash_table_to_hashref_property(val_t__proplist(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_SIZE:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__size(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_INT64:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__int64(result)));
-          argvi++;
-          break;
-          
-          case CONFTYPE_BOOLEAN:           /* all same as INT.. */
-        case CONFTYPE_COMPRESS:
-        case CONFTYPE_ENCRYPT:
-        case CONFTYPE_ESTIMATE:
-        case CONFTYPE_STRATEGY:
-        case CONFTYPE_TAPERALGO:
-        case CONFTYPE_PRIORITY:
-        case CONFTYPE_HOLDING:
-        case CONFTYPE_EXECUTE_ON:
-        case CONFTYPE_EXECUTE_WHERE:
-        case CONFTYPE_SEND_AMREPORT_ON:
-        case CONFTYPE_INT:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__int(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_TIME:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__time(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_REAL:
-          ST(argvi) = sv_newmortal();
-          sv_setnv(ST(argvi), val_t__real(result));
-          argvi++;
-          break;
-          
-          case CONFTYPE_IDENT:     /* same as STRING */
-        case CONFTYPE_STR:
-          ST(argvi) = sv_newmortal();
-          sv_setpv(ST(argvi), val_t__str(result));
-          argvi++;
-          break;
-          
-          /* No match yet -> not one of the "complex" types */
-        default:
-          SWIG_exception(SWIG_TypeError, "Unknown val_t conftype");
-          break;
-        }
       }
     }
     if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
@@ -2653,131 +2726,18 @@ XS(_wrap_tapetype_getconf) {
     }
     result = (val_t *)tapetype_getconf(arg1,arg2);
     {
-      if (!result) {
-        ST(argvi) = &PL_sv_undef;
+      SV *results[3], **iter;
+      int nresults;
+      
+      /* save the stack, since val_t_to_sv may invoke arbitrary Perl code */
+      SP += argvi; PUTBACK;
+      nresults = val_t_to_sv(result, results);
+      SPAGAIN; SP -= argvi;
+      
+      /* add val_t_to_sv's results to the stack */
+      for (iter = results; nresults; iter++, nresults--) {
+        ST(argvi) = *iter;
         argvi++;
-      } else {
-        switch (result->type) {
-          case CONFTYPE_RATE: {
-            ST(argvi)= sv_newmortal();
-            sv_setnv(ST(argvi), val_t__rate(result)[0]);
-            argvi++;
-            
-            ST(argvi)= sv_newmortal();
-            sv_setnv(ST(argvi), val_t__rate(result)[1]);
-            argvi++;
-            break;
-          }
-          
-          case CONFTYPE_INTRANGE: {
-            ST(argvi)= sv_newmortal();
-            sv_setiv(ST(argvi), val_t__intrange(result)[0]);
-            argvi++;
-            
-            ST(argvi)= sv_newmortal();
-            sv_setiv(ST(argvi), val_t__intrange(result)[1]);
-            argvi++;
-            break;
-            break;
-          }
-          
-          case CONFTYPE_EXINCLUDE: {
-            /* exincludes are represented in perl as {
-                        *      'list' : [ 'list1', 'list2', ..],
-                        *      'file' : [ 'file1', 'file2', ..],
-                        *      'optional' : 1,
-                        * }
-                        */
-            exinclude_t *ei = &val_t__exinclude(result);
-            AV *list_entries = (AV *)sv_2mortal((SV *)newAV());
-            AV *file_entries = (AV *)sv_2mortal((SV *)newAV());
-            SV *optional = sv_newmortal();
-            HV *hv;
-            sle_t *iter;
-            
-            /* first set up each of the hash values */
-            
-            if (ei->sl_list) {
-              for (iter = ei->sl_list->first; iter != NULL; iter = iter->next) {
-                av_push(list_entries, newSVpv(iter->name, 0));
-              }
-            }
-            
-            if(ei->sl_file) {
-              for (iter = ei->sl_file->first; iter != NULL; iter = iter->next) {
-                av_push(file_entries, newSVpv(iter->name, 0));
-              }
-            }
-            
-            sv_setiv(optional, ei->optional);
-            
-            /* now build the hash */
-            hv = (HV *)sv_2mortal((SV *)newHV());
-            
-            hv_store(hv, "file", 4, newRV((SV *)file_entries), 0);
-            hv_store(hv, "list", 4, newRV((SV *)list_entries), 0);
-            hv_store(hv, "optional", 8, optional, 0);
-            SvREFCNT_inc(optional);
-            
-            ST(argvi) = sv_2mortal(newRV((SV *)hv));
-            argvi++;
-            break;
-          }
-          
-        case CONFTYPE_PROPLIST:
-          ST(argvi) = sv_2mortal(g_hash_table_to_hashref_property(val_t__proplist(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_SIZE:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__size(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_INT64:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__int64(result)));
-          argvi++;
-          break;
-          
-          case CONFTYPE_BOOLEAN:           /* all same as INT.. */
-        case CONFTYPE_COMPRESS:
-        case CONFTYPE_ENCRYPT:
-        case CONFTYPE_ESTIMATE:
-        case CONFTYPE_STRATEGY:
-        case CONFTYPE_TAPERALGO:
-        case CONFTYPE_PRIORITY:
-        case CONFTYPE_HOLDING:
-        case CONFTYPE_EXECUTE_ON:
-        case CONFTYPE_EXECUTE_WHERE:
-        case CONFTYPE_SEND_AMREPORT_ON:
-        case CONFTYPE_INT:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__int(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_TIME:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__time(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_REAL:
-          ST(argvi) = sv_newmortal();
-          sv_setnv(ST(argvi), val_t__real(result));
-          argvi++;
-          break;
-          
-          case CONFTYPE_IDENT:     /* same as STRING */
-        case CONFTYPE_STR:
-          ST(argvi) = sv_newmortal();
-          sv_setpv(ST(argvi), val_t__str(result));
-          argvi++;
-          break;
-          
-          /* No match yet -> not one of the "complex" types */
-        default:
-          SWIG_exception(SWIG_TypeError, "Unknown val_t conftype");
-          break;
-        }
       }
     }
     
@@ -2852,7 +2812,10 @@ XS(_wrap_tapetype_seen) {
     }
     result = (gboolean)tapetype_seen(arg1,arg2);
     {
-      ST(argvi) = sv_2mortal(amglue_newSVi64(result));
+      if (result)
+      ST(argvi) = &PL_sv_yes;
+      else
+      ST(argvi) = &PL_sv_no;
       argvi++;
     }
     
@@ -2928,131 +2891,18 @@ XS(_wrap_dumptype_getconf) {
     }
     result = (val_t *)dumptype_getconf(arg1,arg2);
     {
-      if (!result) {
-        ST(argvi) = &PL_sv_undef;
+      SV *results[3], **iter;
+      int nresults;
+      
+      /* save the stack, since val_t_to_sv may invoke arbitrary Perl code */
+      SP += argvi; PUTBACK;
+      nresults = val_t_to_sv(result, results);
+      SPAGAIN; SP -= argvi;
+      
+      /* add val_t_to_sv's results to the stack */
+      for (iter = results; nresults; iter++, nresults--) {
+        ST(argvi) = *iter;
         argvi++;
-      } else {
-        switch (result->type) {
-          case CONFTYPE_RATE: {
-            ST(argvi)= sv_newmortal();
-            sv_setnv(ST(argvi), val_t__rate(result)[0]);
-            argvi++;
-            
-            ST(argvi)= sv_newmortal();
-            sv_setnv(ST(argvi), val_t__rate(result)[1]);
-            argvi++;
-            break;
-          }
-          
-          case CONFTYPE_INTRANGE: {
-            ST(argvi)= sv_newmortal();
-            sv_setiv(ST(argvi), val_t__intrange(result)[0]);
-            argvi++;
-            
-            ST(argvi)= sv_newmortal();
-            sv_setiv(ST(argvi), val_t__intrange(result)[1]);
-            argvi++;
-            break;
-            break;
-          }
-          
-          case CONFTYPE_EXINCLUDE: {
-            /* exincludes are represented in perl as {
-                        *      'list' : [ 'list1', 'list2', ..],
-                        *      'file' : [ 'file1', 'file2', ..],
-                        *      'optional' : 1,
-                        * }
-                        */
-            exinclude_t *ei = &val_t__exinclude(result);
-            AV *list_entries = (AV *)sv_2mortal((SV *)newAV());
-            AV *file_entries = (AV *)sv_2mortal((SV *)newAV());
-            SV *optional = sv_newmortal();
-            HV *hv;
-            sle_t *iter;
-            
-            /* first set up each of the hash values */
-            
-            if (ei->sl_list) {
-              for (iter = ei->sl_list->first; iter != NULL; iter = iter->next) {
-                av_push(list_entries, newSVpv(iter->name, 0));
-              }
-            }
-            
-            if(ei->sl_file) {
-              for (iter = ei->sl_file->first; iter != NULL; iter = iter->next) {
-                av_push(file_entries, newSVpv(iter->name, 0));
-              }
-            }
-            
-            sv_setiv(optional, ei->optional);
-            
-            /* now build the hash */
-            hv = (HV *)sv_2mortal((SV *)newHV());
-            
-            hv_store(hv, "file", 4, newRV((SV *)file_entries), 0);
-            hv_store(hv, "list", 4, newRV((SV *)list_entries), 0);
-            hv_store(hv, "optional", 8, optional, 0);
-            SvREFCNT_inc(optional);
-            
-            ST(argvi) = sv_2mortal(newRV((SV *)hv));
-            argvi++;
-            break;
-          }
-          
-        case CONFTYPE_PROPLIST:
-          ST(argvi) = sv_2mortal(g_hash_table_to_hashref_property(val_t__proplist(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_SIZE:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__size(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_INT64:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__int64(result)));
-          argvi++;
-          break;
-          
-          case CONFTYPE_BOOLEAN:           /* all same as INT.. */
-        case CONFTYPE_COMPRESS:
-        case CONFTYPE_ENCRYPT:
-        case CONFTYPE_ESTIMATE:
-        case CONFTYPE_STRATEGY:
-        case CONFTYPE_TAPERALGO:
-        case CONFTYPE_PRIORITY:
-        case CONFTYPE_HOLDING:
-        case CONFTYPE_EXECUTE_ON:
-        case CONFTYPE_EXECUTE_WHERE:
-        case CONFTYPE_SEND_AMREPORT_ON:
-        case CONFTYPE_INT:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__int(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_TIME:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__time(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_REAL:
-          ST(argvi) = sv_newmortal();
-          sv_setnv(ST(argvi), val_t__real(result));
-          argvi++;
-          break;
-          
-          case CONFTYPE_IDENT:     /* same as STRING */
-        case CONFTYPE_STR:
-          ST(argvi) = sv_newmortal();
-          sv_setpv(ST(argvi), val_t__str(result));
-          argvi++;
-          break;
-          
-          /* No match yet -> not one of the "complex" types */
-        default:
-          SWIG_exception(SWIG_TypeError, "Unknown val_t conftype");
-          break;
-        }
       }
     }
     
@@ -3127,7 +2977,10 @@ XS(_wrap_dumptype_seen) {
     }
     result = (gboolean)dumptype_seen(arg1,arg2);
     {
-      ST(argvi) = sv_2mortal(amglue_newSVi64(result));
+      if (result)
+      ST(argvi) = &PL_sv_yes;
+      else
+      ST(argvi) = &PL_sv_no;
       argvi++;
     }
     
@@ -3203,131 +3056,18 @@ XS(_wrap_interface_getconf) {
     }
     result = (val_t *)interface_getconf(arg1,arg2);
     {
-      if (!result) {
-        ST(argvi) = &PL_sv_undef;
+      SV *results[3], **iter;
+      int nresults;
+      
+      /* save the stack, since val_t_to_sv may invoke arbitrary Perl code */
+      SP += argvi; PUTBACK;
+      nresults = val_t_to_sv(result, results);
+      SPAGAIN; SP -= argvi;
+      
+      /* add val_t_to_sv's results to the stack */
+      for (iter = results; nresults; iter++, nresults--) {
+        ST(argvi) = *iter;
         argvi++;
-      } else {
-        switch (result->type) {
-          case CONFTYPE_RATE: {
-            ST(argvi)= sv_newmortal();
-            sv_setnv(ST(argvi), val_t__rate(result)[0]);
-            argvi++;
-            
-            ST(argvi)= sv_newmortal();
-            sv_setnv(ST(argvi), val_t__rate(result)[1]);
-            argvi++;
-            break;
-          }
-          
-          case CONFTYPE_INTRANGE: {
-            ST(argvi)= sv_newmortal();
-            sv_setiv(ST(argvi), val_t__intrange(result)[0]);
-            argvi++;
-            
-            ST(argvi)= sv_newmortal();
-            sv_setiv(ST(argvi), val_t__intrange(result)[1]);
-            argvi++;
-            break;
-            break;
-          }
-          
-          case CONFTYPE_EXINCLUDE: {
-            /* exincludes are represented in perl as {
-                        *      'list' : [ 'list1', 'list2', ..],
-                        *      'file' : [ 'file1', 'file2', ..],
-                        *      'optional' : 1,
-                        * }
-                        */
-            exinclude_t *ei = &val_t__exinclude(result);
-            AV *list_entries = (AV *)sv_2mortal((SV *)newAV());
-            AV *file_entries = (AV *)sv_2mortal((SV *)newAV());
-            SV *optional = sv_newmortal();
-            HV *hv;
-            sle_t *iter;
-            
-            /* first set up each of the hash values */
-            
-            if (ei->sl_list) {
-              for (iter = ei->sl_list->first; iter != NULL; iter = iter->next) {
-                av_push(list_entries, newSVpv(iter->name, 0));
-              }
-            }
-            
-            if(ei->sl_file) {
-              for (iter = ei->sl_file->first; iter != NULL; iter = iter->next) {
-                av_push(file_entries, newSVpv(iter->name, 0));
-              }
-            }
-            
-            sv_setiv(optional, ei->optional);
-            
-            /* now build the hash */
-            hv = (HV *)sv_2mortal((SV *)newHV());
-            
-            hv_store(hv, "file", 4, newRV((SV *)file_entries), 0);
-            hv_store(hv, "list", 4, newRV((SV *)list_entries), 0);
-            hv_store(hv, "optional", 8, optional, 0);
-            SvREFCNT_inc(optional);
-            
-            ST(argvi) = sv_2mortal(newRV((SV *)hv));
-            argvi++;
-            break;
-          }
-          
-        case CONFTYPE_PROPLIST:
-          ST(argvi) = sv_2mortal(g_hash_table_to_hashref_property(val_t__proplist(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_SIZE:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__size(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_INT64:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__int64(result)));
-          argvi++;
-          break;
-          
-          case CONFTYPE_BOOLEAN:           /* all same as INT.. */
-        case CONFTYPE_COMPRESS:
-        case CONFTYPE_ENCRYPT:
-        case CONFTYPE_ESTIMATE:
-        case CONFTYPE_STRATEGY:
-        case CONFTYPE_TAPERALGO:
-        case CONFTYPE_PRIORITY:
-        case CONFTYPE_HOLDING:
-        case CONFTYPE_EXECUTE_ON:
-        case CONFTYPE_EXECUTE_WHERE:
-        case CONFTYPE_SEND_AMREPORT_ON:
-        case CONFTYPE_INT:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__int(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_TIME:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__time(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_REAL:
-          ST(argvi) = sv_newmortal();
-          sv_setnv(ST(argvi), val_t__real(result));
-          argvi++;
-          break;
-          
-          case CONFTYPE_IDENT:     /* same as STRING */
-        case CONFTYPE_STR:
-          ST(argvi) = sv_newmortal();
-          sv_setpv(ST(argvi), val_t__str(result));
-          argvi++;
-          break;
-          
-          /* No match yet -> not one of the "complex" types */
-        default:
-          SWIG_exception(SWIG_TypeError, "Unknown val_t conftype");
-          break;
-        }
       }
     }
     
@@ -3402,7 +3142,10 @@ XS(_wrap_interface_seen) {
     }
     result = (gboolean)interface_seen(arg1,arg2);
     {
-      ST(argvi) = sv_2mortal(amglue_newSVi64(result));
+      if (result)
+      ST(argvi) = &PL_sv_yes;
+      else
+      ST(argvi) = &PL_sv_no;
       argvi++;
     }
     
@@ -3448,44 +3191,26 @@ XS(_wrap_lookup_holdingdisk) {
 XS(_wrap_getconf_holdingdisks) {
   {
     int argvi = 0;
-    holdingdisk_t *result = 0 ;
+    GSList *result = 0 ;
     dXSARGS;
     
     if ((items < 0) || (items > 0)) {
       SWIG_croak("Usage: getconf_holdingdisks();");
     }
-    result = (holdingdisk_t *)getconf_holdingdisks();
-    ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_holdingdisk_t, 0 | 0); argvi++ ;
-    XSRETURN(argvi);
-  fail:
-    SWIG_croak_null();
-  }
-}
-
-
-XS(_wrap_holdingdisk_next) {
-  {
-    holdingdisk_t *arg1 = (holdingdisk_t *) 0 ;
-    void *argp1 = 0 ;
-    int res1 = 0 ;
-    int argvi = 0;
-    holdingdisk_t *result = 0 ;
-    dXSARGS;
-    
-    if ((items < 1) || (items > 1)) {
-      SWIG_croak("Usage: holdingdisk_next(hdisk);");
-    }
-    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_holdingdisk_t, 0 |  0 );
-    if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "holdingdisk_next" "', argument " "1"" of type '" "holdingdisk_t *""'"); 
+    result = (GSList *)getconf_holdingdisks();
+    {
+      GSList *it = result;
+      
+      while (it) {
+        ST(argvi) = sv_2mortal(newSVpv(it->data, 0));
+        argvi++;
+        it = it->next;
+      }
+      
+      g_slist_free(result);
     }
-    arg1 = (holdingdisk_t *)(argp1);
-    result = (holdingdisk_t *)holdingdisk_next(arg1);
-    ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_holdingdisk_t, 0 | 0); argvi++ ;
-    
     XSRETURN(argvi);
   fail:
-    
     SWIG_croak_null();
   }
 }
@@ -3524,131 +3249,18 @@ XS(_wrap_holdingdisk_getconf) {
     }
     result = (val_t *)holdingdisk_getconf(arg1,arg2);
     {
-      if (!result) {
-        ST(argvi) = &PL_sv_undef;
+      SV *results[3], **iter;
+      int nresults;
+      
+      /* save the stack, since val_t_to_sv may invoke arbitrary Perl code */
+      SP += argvi; PUTBACK;
+      nresults = val_t_to_sv(result, results);
+      SPAGAIN; SP -= argvi;
+      
+      /* add val_t_to_sv's results to the stack */
+      for (iter = results; nresults; iter++, nresults--) {
+        ST(argvi) = *iter;
         argvi++;
-      } else {
-        switch (result->type) {
-          case CONFTYPE_RATE: {
-            ST(argvi)= sv_newmortal();
-            sv_setnv(ST(argvi), val_t__rate(result)[0]);
-            argvi++;
-            
-            ST(argvi)= sv_newmortal();
-            sv_setnv(ST(argvi), val_t__rate(result)[1]);
-            argvi++;
-            break;
-          }
-          
-          case CONFTYPE_INTRANGE: {
-            ST(argvi)= sv_newmortal();
-            sv_setiv(ST(argvi), val_t__intrange(result)[0]);
-            argvi++;
-            
-            ST(argvi)= sv_newmortal();
-            sv_setiv(ST(argvi), val_t__intrange(result)[1]);
-            argvi++;
-            break;
-            break;
-          }
-          
-          case CONFTYPE_EXINCLUDE: {
-            /* exincludes are represented in perl as {
-                        *      'list' : [ 'list1', 'list2', ..],
-                        *      'file' : [ 'file1', 'file2', ..],
-                        *      'optional' : 1,
-                        * }
-                        */
-            exinclude_t *ei = &val_t__exinclude(result);
-            AV *list_entries = (AV *)sv_2mortal((SV *)newAV());
-            AV *file_entries = (AV *)sv_2mortal((SV *)newAV());
-            SV *optional = sv_newmortal();
-            HV *hv;
-            sle_t *iter;
-            
-            /* first set up each of the hash values */
-            
-            if (ei->sl_list) {
-              for (iter = ei->sl_list->first; iter != NULL; iter = iter->next) {
-                av_push(list_entries, newSVpv(iter->name, 0));
-              }
-            }
-            
-            if(ei->sl_file) {
-              for (iter = ei->sl_file->first; iter != NULL; iter = iter->next) {
-                av_push(file_entries, newSVpv(iter->name, 0));
-              }
-            }
-            
-            sv_setiv(optional, ei->optional);
-            
-            /* now build the hash */
-            hv = (HV *)sv_2mortal((SV *)newHV());
-            
-            hv_store(hv, "file", 4, newRV((SV *)file_entries), 0);
-            hv_store(hv, "list", 4, newRV((SV *)list_entries), 0);
-            hv_store(hv, "optional", 8, optional, 0);
-            SvREFCNT_inc(optional);
-            
-            ST(argvi) = sv_2mortal(newRV((SV *)hv));
-            argvi++;
-            break;
-          }
-          
-        case CONFTYPE_PROPLIST:
-          ST(argvi) = sv_2mortal(g_hash_table_to_hashref_property(val_t__proplist(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_SIZE:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__size(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_INT64:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__int64(result)));
-          argvi++;
-          break;
-          
-          case CONFTYPE_BOOLEAN:           /* all same as INT.. */
-        case CONFTYPE_COMPRESS:
-        case CONFTYPE_ENCRYPT:
-        case CONFTYPE_ESTIMATE:
-        case CONFTYPE_STRATEGY:
-        case CONFTYPE_TAPERALGO:
-        case CONFTYPE_PRIORITY:
-        case CONFTYPE_HOLDING:
-        case CONFTYPE_EXECUTE_ON:
-        case CONFTYPE_EXECUTE_WHERE:
-        case CONFTYPE_SEND_AMREPORT_ON:
-        case CONFTYPE_INT:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__int(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_TIME:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__time(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_REAL:
-          ST(argvi) = sv_newmortal();
-          sv_setnv(ST(argvi), val_t__real(result));
-          argvi++;
-          break;
-          
-          case CONFTYPE_IDENT:     /* same as STRING */
-        case CONFTYPE_STR:
-          ST(argvi) = sv_newmortal();
-          sv_setpv(ST(argvi), val_t__str(result));
-          argvi++;
-          break;
-          
-          /* No match yet -> not one of the "complex" types */
-        default:
-          SWIG_exception(SWIG_TypeError, "Unknown val_t conftype");
-          break;
-        }
       }
     }
     
@@ -3723,7 +3335,10 @@ XS(_wrap_holdingdisk_seen) {
     }
     result = (gboolean)holdingdisk_seen(arg1,arg2);
     {
-      ST(argvi) = sv_2mortal(amglue_newSVi64(result));
+      if (result)
+      ST(argvi) = &PL_sv_yes;
+      else
+      ST(argvi) = &PL_sv_no;
       argvi++;
     }
     
@@ -3799,131 +3414,18 @@ XS(_wrap_application_getconf) {
     }
     result = (val_t *)application_getconf(arg1,arg2);
     {
-      if (!result) {
-        ST(argvi) = &PL_sv_undef;
+      SV *results[3], **iter;
+      int nresults;
+      
+      /* save the stack, since val_t_to_sv may invoke arbitrary Perl code */
+      SP += argvi; PUTBACK;
+      nresults = val_t_to_sv(result, results);
+      SPAGAIN; SP -= argvi;
+      
+      /* add val_t_to_sv's results to the stack */
+      for (iter = results; nresults; iter++, nresults--) {
+        ST(argvi) = *iter;
         argvi++;
-      } else {
-        switch (result->type) {
-          case CONFTYPE_RATE: {
-            ST(argvi)= sv_newmortal();
-            sv_setnv(ST(argvi), val_t__rate(result)[0]);
-            argvi++;
-            
-            ST(argvi)= sv_newmortal();
-            sv_setnv(ST(argvi), val_t__rate(result)[1]);
-            argvi++;
-            break;
-          }
-          
-          case CONFTYPE_INTRANGE: {
-            ST(argvi)= sv_newmortal();
-            sv_setiv(ST(argvi), val_t__intrange(result)[0]);
-            argvi++;
-            
-            ST(argvi)= sv_newmortal();
-            sv_setiv(ST(argvi), val_t__intrange(result)[1]);
-            argvi++;
-            break;
-            break;
-          }
-          
-          case CONFTYPE_EXINCLUDE: {
-            /* exincludes are represented in perl as {
-                        *      'list' : [ 'list1', 'list2', ..],
-                        *      'file' : [ 'file1', 'file2', ..],
-                        *      'optional' : 1,
-                        * }
-                        */
-            exinclude_t *ei = &val_t__exinclude(result);
-            AV *list_entries = (AV *)sv_2mortal((SV *)newAV());
-            AV *file_entries = (AV *)sv_2mortal((SV *)newAV());
-            SV *optional = sv_newmortal();
-            HV *hv;
-            sle_t *iter;
-            
-            /* first set up each of the hash values */
-            
-            if (ei->sl_list) {
-              for (iter = ei->sl_list->first; iter != NULL; iter = iter->next) {
-                av_push(list_entries, newSVpv(iter->name, 0));
-              }
-            }
-            
-            if(ei->sl_file) {
-              for (iter = ei->sl_file->first; iter != NULL; iter = iter->next) {
-                av_push(file_entries, newSVpv(iter->name, 0));
-              }
-            }
-            
-            sv_setiv(optional, ei->optional);
-            
-            /* now build the hash */
-            hv = (HV *)sv_2mortal((SV *)newHV());
-            
-            hv_store(hv, "file", 4, newRV((SV *)file_entries), 0);
-            hv_store(hv, "list", 4, newRV((SV *)list_entries), 0);
-            hv_store(hv, "optional", 8, optional, 0);
-            SvREFCNT_inc(optional);
-            
-            ST(argvi) = sv_2mortal(newRV((SV *)hv));
-            argvi++;
-            break;
-          }
-          
-        case CONFTYPE_PROPLIST:
-          ST(argvi) = sv_2mortal(g_hash_table_to_hashref_property(val_t__proplist(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_SIZE:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__size(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_INT64:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__int64(result)));
-          argvi++;
-          break;
-          
-          case CONFTYPE_BOOLEAN:           /* all same as INT.. */
-        case CONFTYPE_COMPRESS:
-        case CONFTYPE_ENCRYPT:
-        case CONFTYPE_ESTIMATE:
-        case CONFTYPE_STRATEGY:
-        case CONFTYPE_TAPERALGO:
-        case CONFTYPE_PRIORITY:
-        case CONFTYPE_HOLDING:
-        case CONFTYPE_EXECUTE_ON:
-        case CONFTYPE_EXECUTE_WHERE:
-        case CONFTYPE_SEND_AMREPORT_ON:
-        case CONFTYPE_INT:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__int(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_TIME:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__time(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_REAL:
-          ST(argvi) = sv_newmortal();
-          sv_setnv(ST(argvi), val_t__real(result));
-          argvi++;
-          break;
-          
-          case CONFTYPE_IDENT:     /* same as STRING */
-        case CONFTYPE_STR:
-          ST(argvi) = sv_newmortal();
-          sv_setpv(ST(argvi), val_t__str(result));
-          argvi++;
-          break;
-          
-          /* No match yet -> not one of the "complex" types */
-        default:
-          SWIG_exception(SWIG_TypeError, "Unknown val_t conftype");
-          break;
-        }
       }
     }
     
@@ -3998,7 +3500,10 @@ XS(_wrap_application_seen) {
     }
     result = (gboolean)application_seen(arg1,arg2);
     {
-      ST(argvi) = sv_2mortal(amglue_newSVi64(result));
+      if (result)
+      ST(argvi) = &PL_sv_yes;
+      else
+      ST(argvi) = &PL_sv_no;
       argvi++;
     }
     
@@ -4074,131 +3579,18 @@ XS(_wrap_pp_script_getconf) {
     }
     result = (val_t *)pp_script_getconf(arg1,arg2);
     {
-      if (!result) {
-        ST(argvi) = &PL_sv_undef;
+      SV *results[3], **iter;
+      int nresults;
+      
+      /* save the stack, since val_t_to_sv may invoke arbitrary Perl code */
+      SP += argvi; PUTBACK;
+      nresults = val_t_to_sv(result, results);
+      SPAGAIN; SP -= argvi;
+      
+      /* add val_t_to_sv's results to the stack */
+      for (iter = results; nresults; iter++, nresults--) {
+        ST(argvi) = *iter;
         argvi++;
-      } else {
-        switch (result->type) {
-          case CONFTYPE_RATE: {
-            ST(argvi)= sv_newmortal();
-            sv_setnv(ST(argvi), val_t__rate(result)[0]);
-            argvi++;
-            
-            ST(argvi)= sv_newmortal();
-            sv_setnv(ST(argvi), val_t__rate(result)[1]);
-            argvi++;
-            break;
-          }
-          
-          case CONFTYPE_INTRANGE: {
-            ST(argvi)= sv_newmortal();
-            sv_setiv(ST(argvi), val_t__intrange(result)[0]);
-            argvi++;
-            
-            ST(argvi)= sv_newmortal();
-            sv_setiv(ST(argvi), val_t__intrange(result)[1]);
-            argvi++;
-            break;
-            break;
-          }
-          
-          case CONFTYPE_EXINCLUDE: {
-            /* exincludes are represented in perl as {
-                        *      'list' : [ 'list1', 'list2', ..],
-                        *      'file' : [ 'file1', 'file2', ..],
-                        *      'optional' : 1,
-                        * }
-                        */
-            exinclude_t *ei = &val_t__exinclude(result);
-            AV *list_entries = (AV *)sv_2mortal((SV *)newAV());
-            AV *file_entries = (AV *)sv_2mortal((SV *)newAV());
-            SV *optional = sv_newmortal();
-            HV *hv;
-            sle_t *iter;
-            
-            /* first set up each of the hash values */
-            
-            if (ei->sl_list) {
-              for (iter = ei->sl_list->first; iter != NULL; iter = iter->next) {
-                av_push(list_entries, newSVpv(iter->name, 0));
-              }
-            }
-            
-            if(ei->sl_file) {
-              for (iter = ei->sl_file->first; iter != NULL; iter = iter->next) {
-                av_push(file_entries, newSVpv(iter->name, 0));
-              }
-            }
-            
-            sv_setiv(optional, ei->optional);
-            
-            /* now build the hash */
-            hv = (HV *)sv_2mortal((SV *)newHV());
-            
-            hv_store(hv, "file", 4, newRV((SV *)file_entries), 0);
-            hv_store(hv, "list", 4, newRV((SV *)list_entries), 0);
-            hv_store(hv, "optional", 8, optional, 0);
-            SvREFCNT_inc(optional);
-            
-            ST(argvi) = sv_2mortal(newRV((SV *)hv));
-            argvi++;
-            break;
-          }
-          
-        case CONFTYPE_PROPLIST:
-          ST(argvi) = sv_2mortal(g_hash_table_to_hashref_property(val_t__proplist(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_SIZE:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__size(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_INT64:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__int64(result)));
-          argvi++;
-          break;
-          
-          case CONFTYPE_BOOLEAN:           /* all same as INT.. */
-        case CONFTYPE_COMPRESS:
-        case CONFTYPE_ENCRYPT:
-        case CONFTYPE_ESTIMATE:
-        case CONFTYPE_STRATEGY:
-        case CONFTYPE_TAPERALGO:
-        case CONFTYPE_PRIORITY:
-        case CONFTYPE_HOLDING:
-        case CONFTYPE_EXECUTE_ON:
-        case CONFTYPE_EXECUTE_WHERE:
-        case CONFTYPE_SEND_AMREPORT_ON:
-        case CONFTYPE_INT:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__int(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_TIME:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__time(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_REAL:
-          ST(argvi) = sv_newmortal();
-          sv_setnv(ST(argvi), val_t__real(result));
-          argvi++;
-          break;
-          
-          case CONFTYPE_IDENT:     /* same as STRING */
-        case CONFTYPE_STR:
-          ST(argvi) = sv_newmortal();
-          sv_setpv(ST(argvi), val_t__str(result));
-          argvi++;
-          break;
-          
-          /* No match yet -> not one of the "complex" types */
-        default:
-          SWIG_exception(SWIG_TypeError, "Unknown val_t conftype");
-          break;
-        }
       }
     }
     
@@ -4273,7 +3665,10 @@ XS(_wrap_pp_script_seen) {
     }
     result = (gboolean)pp_script_seen(arg1,arg2);
     {
-      ST(argvi) = sv_2mortal(amglue_newSVi64(result));
+      if (result)
+      ST(argvi) = &PL_sv_yes;
+      else
+      ST(argvi) = &PL_sv_no;
       argvi++;
     }
     
@@ -4349,131 +3744,18 @@ XS(_wrap_device_config_getconf) {
     }
     result = (val_t *)device_config_getconf(arg1,arg2);
     {
-      if (!result) {
-        ST(argvi) = &PL_sv_undef;
+      SV *results[3], **iter;
+      int nresults;
+      
+      /* save the stack, since val_t_to_sv may invoke arbitrary Perl code */
+      SP += argvi; PUTBACK;
+      nresults = val_t_to_sv(result, results);
+      SPAGAIN; SP -= argvi;
+      
+      /* add val_t_to_sv's results to the stack */
+      for (iter = results; nresults; iter++, nresults--) {
+        ST(argvi) = *iter;
         argvi++;
-      } else {
-        switch (result->type) {
-          case CONFTYPE_RATE: {
-            ST(argvi)= sv_newmortal();
-            sv_setnv(ST(argvi), val_t__rate(result)[0]);
-            argvi++;
-            
-            ST(argvi)= sv_newmortal();
-            sv_setnv(ST(argvi), val_t__rate(result)[1]);
-            argvi++;
-            break;
-          }
-          
-          case CONFTYPE_INTRANGE: {
-            ST(argvi)= sv_newmortal();
-            sv_setiv(ST(argvi), val_t__intrange(result)[0]);
-            argvi++;
-            
-            ST(argvi)= sv_newmortal();
-            sv_setiv(ST(argvi), val_t__intrange(result)[1]);
-            argvi++;
-            break;
-            break;
-          }
-          
-          case CONFTYPE_EXINCLUDE: {
-            /* exincludes are represented in perl as {
-                        *      'list' : [ 'list1', 'list2', ..],
-                        *      'file' : [ 'file1', 'file2', ..],
-                        *      'optional' : 1,
-                        * }
-                        */
-            exinclude_t *ei = &val_t__exinclude(result);
-            AV *list_entries = (AV *)sv_2mortal((SV *)newAV());
-            AV *file_entries = (AV *)sv_2mortal((SV *)newAV());
-            SV *optional = sv_newmortal();
-            HV *hv;
-            sle_t *iter;
-            
-            /* first set up each of the hash values */
-            
-            if (ei->sl_list) {
-              for (iter = ei->sl_list->first; iter != NULL; iter = iter->next) {
-                av_push(list_entries, newSVpv(iter->name, 0));
-              }
-            }
-            
-            if(ei->sl_file) {
-              for (iter = ei->sl_file->first; iter != NULL; iter = iter->next) {
-                av_push(file_entries, newSVpv(iter->name, 0));
-              }
-            }
-            
-            sv_setiv(optional, ei->optional);
-            
-            /* now build the hash */
-            hv = (HV *)sv_2mortal((SV *)newHV());
-            
-            hv_store(hv, "file", 4, newRV((SV *)file_entries), 0);
-            hv_store(hv, "list", 4, newRV((SV *)list_entries), 0);
-            hv_store(hv, "optional", 8, optional, 0);
-            SvREFCNT_inc(optional);
-            
-            ST(argvi) = sv_2mortal(newRV((SV *)hv));
-            argvi++;
-            break;
-          }
-          
-        case CONFTYPE_PROPLIST:
-          ST(argvi) = sv_2mortal(g_hash_table_to_hashref_property(val_t__proplist(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_SIZE:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__size(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_INT64:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__int64(result)));
-          argvi++;
-          break;
-          
-          case CONFTYPE_BOOLEAN:           /* all same as INT.. */
-        case CONFTYPE_COMPRESS:
-        case CONFTYPE_ENCRYPT:
-        case CONFTYPE_ESTIMATE:
-        case CONFTYPE_STRATEGY:
-        case CONFTYPE_TAPERALGO:
-        case CONFTYPE_PRIORITY:
-        case CONFTYPE_HOLDING:
-        case CONFTYPE_EXECUTE_ON:
-        case CONFTYPE_EXECUTE_WHERE:
-        case CONFTYPE_SEND_AMREPORT_ON:
-        case CONFTYPE_INT:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__int(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_TIME:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__time(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_REAL:
-          ST(argvi) = sv_newmortal();
-          sv_setnv(ST(argvi), val_t__real(result));
-          argvi++;
-          break;
-          
-          case CONFTYPE_IDENT:     /* same as STRING */
-        case CONFTYPE_STR:
-          ST(argvi) = sv_newmortal();
-          sv_setpv(ST(argvi), val_t__str(result));
-          argvi++;
-          break;
-          
-          /* No match yet -> not one of the "complex" types */
-        default:
-          SWIG_exception(SWIG_TypeError, "Unknown val_t conftype");
-          break;
-        }
       }
     }
     
@@ -4548,7 +3830,10 @@ XS(_wrap_device_config_seen) {
     }
     result = (gboolean)device_config_seen(arg1,arg2);
     {
-      ST(argvi) = sv_2mortal(amglue_newSVi64(result));
+      if (result)
+      ST(argvi) = &PL_sv_yes;
+      else
+      ST(argvi) = &PL_sv_no;
       argvi++;
     }
     
@@ -4624,131 +3909,18 @@ XS(_wrap_changer_config_getconf) {
     }
     result = (val_t *)changer_config_getconf(arg1,arg2);
     {
-      if (!result) {
-        ST(argvi) = &PL_sv_undef;
+      SV *results[3], **iter;
+      int nresults;
+      
+      /* save the stack, since val_t_to_sv may invoke arbitrary Perl code */
+      SP += argvi; PUTBACK;
+      nresults = val_t_to_sv(result, results);
+      SPAGAIN; SP -= argvi;
+      
+      /* add val_t_to_sv's results to the stack */
+      for (iter = results; nresults; iter++, nresults--) {
+        ST(argvi) = *iter;
         argvi++;
-      } else {
-        switch (result->type) {
-          case CONFTYPE_RATE: {
-            ST(argvi)= sv_newmortal();
-            sv_setnv(ST(argvi), val_t__rate(result)[0]);
-            argvi++;
-            
-            ST(argvi)= sv_newmortal();
-            sv_setnv(ST(argvi), val_t__rate(result)[1]);
-            argvi++;
-            break;
-          }
-          
-          case CONFTYPE_INTRANGE: {
-            ST(argvi)= sv_newmortal();
-            sv_setiv(ST(argvi), val_t__intrange(result)[0]);
-            argvi++;
-            
-            ST(argvi)= sv_newmortal();
-            sv_setiv(ST(argvi), val_t__intrange(result)[1]);
-            argvi++;
-            break;
-            break;
-          }
-          
-          case CONFTYPE_EXINCLUDE: {
-            /* exincludes are represented in perl as {
-                        *      'list' : [ 'list1', 'list2', ..],
-                        *      'file' : [ 'file1', 'file2', ..],
-                        *      'optional' : 1,
-                        * }
-                        */
-            exinclude_t *ei = &val_t__exinclude(result);
-            AV *list_entries = (AV *)sv_2mortal((SV *)newAV());
-            AV *file_entries = (AV *)sv_2mortal((SV *)newAV());
-            SV *optional = sv_newmortal();
-            HV *hv;
-            sle_t *iter;
-            
-            /* first set up each of the hash values */
-            
-            if (ei->sl_list) {
-              for (iter = ei->sl_list->first; iter != NULL; iter = iter->next) {
-                av_push(list_entries, newSVpv(iter->name, 0));
-              }
-            }
-            
-            if(ei->sl_file) {
-              for (iter = ei->sl_file->first; iter != NULL; iter = iter->next) {
-                av_push(file_entries, newSVpv(iter->name, 0));
-              }
-            }
-            
-            sv_setiv(optional, ei->optional);
-            
-            /* now build the hash */
-            hv = (HV *)sv_2mortal((SV *)newHV());
-            
-            hv_store(hv, "file", 4, newRV((SV *)file_entries), 0);
-            hv_store(hv, "list", 4, newRV((SV *)list_entries), 0);
-            hv_store(hv, "optional", 8, optional, 0);
-            SvREFCNT_inc(optional);
-            
-            ST(argvi) = sv_2mortal(newRV((SV *)hv));
-            argvi++;
-            break;
-          }
-          
-        case CONFTYPE_PROPLIST:
-          ST(argvi) = sv_2mortal(g_hash_table_to_hashref_property(val_t__proplist(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_SIZE:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__size(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_INT64:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__int64(result)));
-          argvi++;
-          break;
-          
-          case CONFTYPE_BOOLEAN:           /* all same as INT.. */
-        case CONFTYPE_COMPRESS:
-        case CONFTYPE_ENCRYPT:
-        case CONFTYPE_ESTIMATE:
-        case CONFTYPE_STRATEGY:
-        case CONFTYPE_TAPERALGO:
-        case CONFTYPE_PRIORITY:
-        case CONFTYPE_HOLDING:
-        case CONFTYPE_EXECUTE_ON:
-        case CONFTYPE_EXECUTE_WHERE:
-        case CONFTYPE_SEND_AMREPORT_ON:
-        case CONFTYPE_INT:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__int(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_TIME:
-          ST(argvi) = sv_2mortal(amglue_newSVi64(val_t__time(result)));
-          argvi++;
-          break;
-          
-        case CONFTYPE_REAL:
-          ST(argvi) = sv_newmortal();
-          sv_setnv(ST(argvi), val_t__real(result));
-          argvi++;
-          break;
-          
-          case CONFTYPE_IDENT:     /* same as STRING */
-        case CONFTYPE_STR:
-          ST(argvi) = sv_newmortal();
-          sv_setpv(ST(argvi), val_t__str(result));
-          argvi++;
-          break;
-          
-          /* No match yet -> not one of the "complex" types */
-        default:
-          SWIG_exception(SWIG_TypeError, "Unknown val_t conftype");
-          break;
-        }
       }
     }
     
@@ -4823,7 +3995,340 @@ XS(_wrap_changer_config_seen) {
     }
     result = (gboolean)changer_config_seen(arg1,arg2);
     {
-      ST(argvi) = sv_2mortal(amglue_newSVi64(result));
+      if (result)
+      ST(argvi) = &PL_sv_yes;
+      else
+      ST(argvi) = &PL_sv_no;
+      argvi++;
+    }
+    
+    
+    XSRETURN(argvi);
+  fail:
+    
+    
+    SWIG_croak_null();
+  }
+}
+
+
+XS(_wrap_lookup_interactivity) {
+  {
+    char *arg1 = (char *) 0 ;
+    int res1 ;
+    char *buf1 = 0 ;
+    int alloc1 = 0 ;
+    int argvi = 0;
+    interactivity_t *result = 0 ;
+    dXSARGS;
+    
+    if ((items < 1) || (items > 1)) {
+      SWIG_croak("Usage: lookup_interactivity(identifier);");
+    }
+    res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
+    if (!SWIG_IsOK(res1)) {
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "lookup_interactivity" "', argument " "1"" of type '" "char *""'");
+    }
+    arg1 = (char *)(buf1);
+    result = (interactivity_t *)lookup_interactivity(arg1);
+    ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_interactivity_t, 0 | 0); argvi++ ;
+    if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+    XSRETURN(argvi);
+  fail:
+    if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+    SWIG_croak_null();
+  }
+}
+
+
+XS(_wrap_interactivity_getconf) {
+  {
+    interactivity_t *arg1 = (interactivity_t *) 0 ;
+    interactivity_key arg2 ;
+    void *argp1 = 0 ;
+    int res1 = 0 ;
+    int argvi = 0;
+    val_t *result = 0 ;
+    dXSARGS;
+    
+    if ((items < 2) || (items > 2)) {
+      SWIG_croak("Usage: interactivity_getconf(app,key);");
+    }
+    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_interactivity_t, 0 |  0 );
+    if (!SWIG_IsOK(res1)) {
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "interactivity_getconf" "', argument " "1"" of type '" "interactivity_t *""'"); 
+    }
+    arg1 = (interactivity_t *)(argp1);
+    {
+      if (sizeof(signed int) == 1) {
+        arg2 = amglue_SvI8(ST(1));
+      } else if (sizeof(signed int) == 2) {
+        arg2 = amglue_SvI16(ST(1));
+      } else if (sizeof(signed int) == 4) {
+        arg2 = amglue_SvI32(ST(1));
+      } else if (sizeof(signed int) == 8) {
+        arg2 = amglue_SvI64(ST(1));
+      } else {
+        g_critical("Unexpected signed int >64 bits?"); /* should be optimized out unless sizeof(signed int) > 8 */
+      }
+    }
+    result = (val_t *)interactivity_getconf(arg1,arg2);
+    {
+      SV *results[3], **iter;
+      int nresults;
+      
+      /* save the stack, since val_t_to_sv may invoke arbitrary Perl code */
+      SP += argvi; PUTBACK;
+      nresults = val_t_to_sv(result, results);
+      SPAGAIN; SP -= argvi;
+      
+      /* add val_t_to_sv's results to the stack */
+      for (iter = results; nresults; iter++, nresults--) {
+        ST(argvi) = *iter;
+        argvi++;
+      }
+    }
+    
+    
+    XSRETURN(argvi);
+  fail:
+    
+    
+    SWIG_croak_null();
+  }
+}
+
+
+XS(_wrap_interactivity_name) {
+  {
+    interactivity_t *arg1 = (interactivity_t *) 0 ;
+    void *argp1 = 0 ;
+    int res1 = 0 ;
+    int argvi = 0;
+    char *result = 0 ;
+    dXSARGS;
+    
+    if ((items < 1) || (items > 1)) {
+      SWIG_croak("Usage: interactivity_name(app);");
+    }
+    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_interactivity_t, 0 |  0 );
+    if (!SWIG_IsOK(res1)) {
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "interactivity_name" "', argument " "1"" of type '" "interactivity_t *""'"); 
+    }
+    arg1 = (interactivity_t *)(argp1);
+    result = (char *)interactivity_name(arg1);
+    ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+    
+    XSRETURN(argvi);
+  fail:
+    
+    SWIG_croak_null();
+  }
+}
+
+
+XS(_wrap_interactivity_seen) {
+  {
+    interactivity_t *arg1 = (interactivity_t *) 0 ;
+    interactivity_key arg2 ;
+    void *argp1 = 0 ;
+    int res1 = 0 ;
+    int argvi = 0;
+    gboolean result;
+    dXSARGS;
+    
+    if ((items < 2) || (items > 2)) {
+      SWIG_croak("Usage: interactivity_seen(app,key);");
+    }
+    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_interactivity_t, 0 |  0 );
+    if (!SWIG_IsOK(res1)) {
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "interactivity_seen" "', argument " "1"" of type '" "interactivity_t *""'"); 
+    }
+    arg1 = (interactivity_t *)(argp1);
+    {
+      if (sizeof(signed int) == 1) {
+        arg2 = amglue_SvI8(ST(1));
+      } else if (sizeof(signed int) == 2) {
+        arg2 = amglue_SvI16(ST(1));
+      } else if (sizeof(signed int) == 4) {
+        arg2 = amglue_SvI32(ST(1));
+      } else if (sizeof(signed int) == 8) {
+        arg2 = amglue_SvI64(ST(1));
+      } else {
+        g_critical("Unexpected signed int >64 bits?"); /* should be optimized out unless sizeof(signed int) > 8 */
+      }
+    }
+    result = (gboolean)interactivity_seen(arg1,arg2);
+    {
+      if (result)
+      ST(argvi) = &PL_sv_yes;
+      else
+      ST(argvi) = &PL_sv_no;
+      argvi++;
+    }
+    
+    
+    XSRETURN(argvi);
+  fail:
+    
+    
+    SWIG_croak_null();
+  }
+}
+
+
+XS(_wrap_lookup_taperscan) {
+  {
+    char *arg1 = (char *) 0 ;
+    int res1 ;
+    char *buf1 = 0 ;
+    int alloc1 = 0 ;
+    int argvi = 0;
+    taperscan_t *result = 0 ;
+    dXSARGS;
+    
+    if ((items < 1) || (items > 1)) {
+      SWIG_croak("Usage: lookup_taperscan(identifier);");
+    }
+    res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
+    if (!SWIG_IsOK(res1)) {
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "lookup_taperscan" "', argument " "1"" of type '" "char *""'");
+    }
+    arg1 = (char *)(buf1);
+    result = (taperscan_t *)lookup_taperscan(arg1);
+    ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_taperscan_t, 0 | 0); argvi++ ;
+    if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+    XSRETURN(argvi);
+  fail:
+    if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+    SWIG_croak_null();
+  }
+}
+
+
+XS(_wrap_taperscan_getconf) {
+  {
+    taperscan_t *arg1 = (taperscan_t *) 0 ;
+    taperscan_key arg2 ;
+    void *argp1 = 0 ;
+    int res1 = 0 ;
+    int argvi = 0;
+    val_t *result = 0 ;
+    dXSARGS;
+    
+    if ((items < 2) || (items > 2)) {
+      SWIG_croak("Usage: taperscan_getconf(app,key);");
+    }
+    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_taperscan_t, 0 |  0 );
+    if (!SWIG_IsOK(res1)) {
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "taperscan_getconf" "', argument " "1"" of type '" "taperscan_t *""'"); 
+    }
+    arg1 = (taperscan_t *)(argp1);
+    {
+      if (sizeof(signed int) == 1) {
+        arg2 = amglue_SvI8(ST(1));
+      } else if (sizeof(signed int) == 2) {
+        arg2 = amglue_SvI16(ST(1));
+      } else if (sizeof(signed int) == 4) {
+        arg2 = amglue_SvI32(ST(1));
+      } else if (sizeof(signed int) == 8) {
+        arg2 = amglue_SvI64(ST(1));
+      } else {
+        g_critical("Unexpected signed int >64 bits?"); /* should be optimized out unless sizeof(signed int) > 8 */
+      }
+    }
+    result = (val_t *)taperscan_getconf(arg1,arg2);
+    {
+      SV *results[3], **iter;
+      int nresults;
+      
+      /* save the stack, since val_t_to_sv may invoke arbitrary Perl code */
+      SP += argvi; PUTBACK;
+      nresults = val_t_to_sv(result, results);
+      SPAGAIN; SP -= argvi;
+      
+      /* add val_t_to_sv's results to the stack */
+      for (iter = results; nresults; iter++, nresults--) {
+        ST(argvi) = *iter;
+        argvi++;
+      }
+    }
+    
+    
+    XSRETURN(argvi);
+  fail:
+    
+    
+    SWIG_croak_null();
+  }
+}
+
+
+XS(_wrap_taperscan_name) {
+  {
+    taperscan_t *arg1 = (taperscan_t *) 0 ;
+    void *argp1 = 0 ;
+    int res1 = 0 ;
+    int argvi = 0;
+    char *result = 0 ;
+    dXSARGS;
+    
+    if ((items < 1) || (items > 1)) {
+      SWIG_croak("Usage: taperscan_name(app);");
+    }
+    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_taperscan_t, 0 |  0 );
+    if (!SWIG_IsOK(res1)) {
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "taperscan_name" "', argument " "1"" of type '" "taperscan_t *""'"); 
+    }
+    arg1 = (taperscan_t *)(argp1);
+    result = (char *)taperscan_name(arg1);
+    ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+    
+    XSRETURN(argvi);
+  fail:
+    
+    SWIG_croak_null();
+  }
+}
+
+
+XS(_wrap_taperscan_seen) {
+  {
+    taperscan_t *arg1 = (taperscan_t *) 0 ;
+    taperscan_key arg2 ;
+    void *argp1 = 0 ;
+    int res1 = 0 ;
+    int argvi = 0;
+    gboolean result;
+    dXSARGS;
+    
+    if ((items < 2) || (items > 2)) {
+      SWIG_croak("Usage: taperscan_seen(app,key);");
+    }
+    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_taperscan_t, 0 |  0 );
+    if (!SWIG_IsOK(res1)) {
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "taperscan_seen" "', argument " "1"" of type '" "taperscan_t *""'"); 
+    }
+    arg1 = (taperscan_t *)(argp1);
+    {
+      if (sizeof(signed int) == 1) {
+        arg2 = amglue_SvI8(ST(1));
+      } else if (sizeof(signed int) == 2) {
+        arg2 = amglue_SvI16(ST(1));
+      } else if (sizeof(signed int) == 4) {
+        arg2 = amglue_SvI32(ST(1));
+      } else if (sizeof(signed int) == 8) {
+        arg2 = amglue_SvI64(ST(1));
+      } else {
+        g_critical("Unexpected signed int >64 bits?"); /* should be optimized out unless sizeof(signed int) > 8 */
+      }
+    }
+    result = (gboolean)taperscan_seen(arg1,arg2);
+    {
+      if (result)
+      ST(argvi) = &PL_sv_yes;
+      else
+      ST(argvi) = &PL_sv_no;
       argvi++;
     }
     
@@ -4848,7 +4353,11 @@ XS(_wrap_getconf_unit_divisor) {
     }
     result = (long)getconf_unit_divisor();
     {
-      ST(argvi) = sv_2mortal(amglue_newSVi64(result));
+      SV *for_stack;
+      SP += argvi; PUTBACK;
+      for_stack = sv_2mortal(amglue_newSVi64(result));
+      SPAGAIN; SP -= argvi;
+      ST(argvi) = for_stack;
       argvi++;
     }
     XSRETURN(argvi);
@@ -4866,7 +4375,7 @@ XS(_wrap_config_init) {
     char *buf2 = 0 ;
     int alloc2 = 0 ;
     int argvi = 0;
-    gboolean result;
+    cfgerr_level_t result;
     dXSARGS;
     
     if ((items < 2) || (items > 2)) {
@@ -4890,9 +4399,13 @@ XS(_wrap_config_init) {
       SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "config_init" "', argument " "2"" of type '" "char *""'");
     }
     arg2 = (char *)(buf2);
-    result = (gboolean)config_init(arg1,arg2);
+    result = (cfgerr_level_t)config_init(arg1,arg2);
     {
-      ST(argvi) = sv_2mortal(amglue_newSVi64(result));
+      SV *for_stack;
+      SP += argvi; PUTBACK;
+      for_stack = sv_2mortal(amglue_newSVi64(result));
+      SPAGAIN; SP -= argvi;
+      ST(argvi) = for_stack;
       argvi++;
     }
     
@@ -5062,7 +4575,11 @@ XS(_wrap_config_errors) {
     }
     result = (cfgerr_level_t)config_errors(arg1);
     {
-      ST(argvi) = sv_2mortal(amglue_newSVi64(result));
+      SV *for_stack;
+      SP += argvi; PUTBACK;
+      for_stack = sv_2mortal(amglue_newSVi64(result));
+      SPAGAIN; SP -= argvi;
+      ST(argvi) = for_stack;
       argvi++;
     }
     {
@@ -5083,15 +4600,15 @@ XS(_wrap_config_errors) {
 }
 
 
-XS(_wrap_new_config_overwrites) {
+XS(_wrap_new_config_overrides) {
   {
     int arg1 ;
     int argvi = 0;
-    config_overwrites_t *result = 0 ;
+    config_overrides_t *result = 0 ;
     dXSARGS;
     
     if ((items < 1) || (items > 1)) {
-      SWIG_croak("Usage: new_config_overwrites(size_estimate);");
+      SWIG_croak("Usage: new_config_overrides(size_estimate);");
     }
     {
       if (sizeof(signed int) == 1) {
@@ -5106,8 +4623,8 @@ XS(_wrap_new_config_overwrites) {
         g_critical("Unexpected signed int >64 bits?"); /* should be optimized out unless sizeof(signed int) > 8 */
       }
     }
-    result = (config_overwrites_t *)new_config_overwrites(arg1);
-    ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_config_overwrites_t, 0 | 0); argvi++ ;
+    result = (config_overrides_t *)new_config_overrides(arg1);
+    ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_config_overrides_t, 0 | 0); argvi++ ;
     
     XSRETURN(argvi);
   fail:
@@ -5117,23 +4634,23 @@ XS(_wrap_new_config_overwrites) {
 }
 
 
-XS(_wrap_free_config_overwrites) {
+XS(_wrap_free_config_overrides) {
   {
-    config_overwrites_t *arg1 = (config_overwrites_t *) 0 ;
+    config_overrides_t *arg1 = (config_overrides_t *) 0 ;
     void *argp1 = 0 ;
     int res1 = 0 ;
     int argvi = 0;
     dXSARGS;
     
     if ((items < 1) || (items > 1)) {
-      SWIG_croak("Usage: free_config_overwrites(co);");
+      SWIG_croak("Usage: free_config_overrides(co);");
     }
-    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_config_overwrites_t, 0 |  0 );
+    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_config_overrides_t, 0 |  0 );
     if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "free_config_overwrites" "', argument " "1"" of type '" "config_overwrites_t *""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "free_config_overrides" "', argument " "1"" of type '" "config_overrides_t *""'"); 
     }
-    arg1 = (config_overwrites_t *)(argp1);
-    free_config_overwrites(arg1);
+    arg1 = (config_overrides_t *)(argp1);
+    free_config_overrides(arg1);
     ST(argvi) = sv_newmortal();
     
     XSRETURN(argvi);
@@ -5144,9 +4661,9 @@ XS(_wrap_free_config_overwrites) {
 }
 
 
-XS(_wrap_add_config_overwrite) {
+XS(_wrap_add_config_override) {
   {
-    config_overwrites_t *arg1 = (config_overwrites_t *) 0 ;
+    config_overrides_t *arg1 = (config_overrides_t *) 0 ;
     char *arg2 = (char *) 0 ;
     char *arg3 = (char *) 0 ;
     void *argp1 = 0 ;
@@ -5161,24 +4678,24 @@ XS(_wrap_add_config_overwrite) {
     dXSARGS;
     
     if ((items < 3) || (items > 3)) {
-      SWIG_croak("Usage: add_config_overwrite(co,key,value);");
+      SWIG_croak("Usage: add_config_override(co,key,value);");
     }
-    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_config_overwrites_t, 0 |  0 );
+    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_config_overrides_t, 0 |  0 );
     if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "add_config_overwrite" "', argument " "1"" of type '" "config_overwrites_t *""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "add_config_override" "', argument " "1"" of type '" "config_overrides_t *""'"); 
     }
-    arg1 = (config_overwrites_t *)(argp1);
+    arg1 = (config_overrides_t *)(argp1);
     res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
     if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "add_config_overwrite" "', argument " "2"" of type '" "char *""'");
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "add_config_override" "', argument " "2"" of type '" "char *""'");
     }
     arg2 = (char *)(buf2);
     res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
     if (!SWIG_IsOK(res3)) {
-      SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "add_config_overwrite" "', argument " "3"" of type '" "char *""'");
+      SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "add_config_override" "', argument " "3"" of type '" "char *""'");
     }
     arg3 = (char *)(buf3);
-    add_config_overwrite(arg1,arg2,arg3);
+    add_config_override(arg1,arg2,arg3);
     ST(argvi) = sv_newmortal();
     
     if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
@@ -5193,9 +4710,9 @@ XS(_wrap_add_config_overwrite) {
 }
 
 
-XS(_wrap_add_config_overwrite_opt) {
+XS(_wrap_add_config_override_opt) {
   {
-    config_overwrites_t *arg1 = (config_overwrites_t *) 0 ;
+    config_overrides_t *arg1 = (config_overrides_t *) 0 ;
     char *arg2 = (char *) 0 ;
     void *argp1 = 0 ;
     int res1 = 0 ;
@@ -5206,19 +4723,19 @@ XS(_wrap_add_config_overwrite_opt) {
     dXSARGS;
     
     if ((items < 2) || (items > 2)) {
-      SWIG_croak("Usage: add_config_overwrite_opt(co,optarg);");
+      SWIG_croak("Usage: add_config_override_opt(co,optarg);");
     }
-    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_config_overwrites_t, 0 |  0 );
+    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_config_overrides_t, 0 |  0 );
     if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "add_config_overwrite_opt" "', argument " "1"" of type '" "config_overwrites_t *""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "add_config_override_opt" "', argument " "1"" of type '" "config_overrides_t *""'"); 
     }
-    arg1 = (config_overwrites_t *)(argp1);
+    arg1 = (config_overrides_t *)(argp1);
     res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
     if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "add_config_overwrite_opt" "', argument " "2"" of type '" "char *""'");
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "add_config_override_opt" "', argument " "2"" of type '" "char *""'");
     }
     arg2 = (char *)(buf2);
-    add_config_overwrite_opt(arg1,arg2);
+    add_config_override_opt(arg1,arg2);
     ST(argvi) = sv_newmortal();
     
     if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
@@ -5231,28 +4748,24 @@ XS(_wrap_add_config_overwrite_opt) {
 }
 
 
-XS(_wrap_apply_config_overwrites) {
+XS(_wrap_set_config_overrides) {
   {
-    config_overwrites_t *arg1 = (config_overwrites_t *) 0 ;
+    config_overrides_t *arg1 = (config_overrides_t *) 0 ;
     void *argp1 = 0 ;
     int res1 = 0 ;
     int argvi = 0;
-    cfgerr_level_t result;
     dXSARGS;
     
     if ((items < 1) || (items > 1)) {
-      SWIG_croak("Usage: apply_config_overwrites(co);");
+      SWIG_croak("Usage: set_config_overrides(co);");
     }
-    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_config_overwrites_t, 0 |  0 );
+    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_config_overrides_t, 0 |  0 );
     if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "apply_config_overwrites" "', argument " "1"" of type '" "config_overwrites_t *""'"); 
-    }
-    arg1 = (config_overwrites_t *)(argp1);
-    result = (cfgerr_level_t)apply_config_overwrites(arg1);
-    {
-      ST(argvi) = sv_2mortal(amglue_newSVi64(result));
-      argvi++;
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "set_config_overrides" "', argument " "1"" of type '" "config_overrides_t *""'"); 
     }
+    arg1 = (config_overrides_t *)(argp1);
+    set_config_overrides(arg1);
+    ST(argvi) = sv_newmortal();
     
     XSRETURN(argvi);
   fail:
@@ -5363,7 +4876,47 @@ XS(_wrap_find_multiplier) {
     arg1 = (char *)(buf1);
     result = find_multiplier(arg1);
     {
-      ST(argvi) = sv_2mortal(amglue_newSVi64(result));
+      SV *for_stack;
+      SP += argvi; PUTBACK;
+      for_stack = sv_2mortal(amglue_newSVi64(result));
+      SPAGAIN; SP -= argvi;
+      ST(argvi) = for_stack;
+      argvi++;
+    }
+    if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+    XSRETURN(argvi);
+  fail:
+    if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+    SWIG_croak_null();
+  }
+}
+
+
+XS(_wrap_C_string_to_boolean) {
+  {
+    char *arg1 = (char *) 0 ;
+    int res1 ;
+    char *buf1 = 0 ;
+    int alloc1 = 0 ;
+    int argvi = 0;
+    int result;
+    dXSARGS;
+    
+    if ((items < 1) || (items > 1)) {
+      SWIG_croak("Usage: C_string_to_boolean(str);");
+    }
+    res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
+    if (!SWIG_IsOK(res1)) {
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "C_string_to_boolean" "', argument " "1"" of type '" "char const *""'");
+    }
+    arg1 = (char *)(buf1);
+    result = (int)string_to_boolean((char const *)arg1);
+    {
+      SV *for_stack;
+      SP += argvi; PUTBACK;
+      for_stack = sv_2mortal(amglue_newSVi64(result));
+      SPAGAIN; SP -= argvi;
+      ST(argvi) = for_stack;
       argvi++;
     }
     if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
@@ -5375,23 +4928,54 @@ XS(_wrap_find_multiplier) {
 }
 
 
+XS(_wrap_amandaify_property_name) {
+  {
+    gchar *arg1 = (gchar *) 0 ;
+    int res1 ;
+    char *buf1 = 0 ;
+    int alloc1 = 0 ;
+    int argvi = 0;
+    gchar *result = 0 ;
+    dXSARGS;
+    
+    if ((items < 1) || (items > 1)) {
+      SWIG_croak("Usage: amandaify_property_name(name);");
+    }
+    res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1);
+    if (!SWIG_IsOK(res1)) {
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "amandaify_property_name" "', argument " "1"" of type '" "gchar const *""'");
+    }
+    arg1 = (gchar *)(buf1);
+    result = (gchar *)amandaify_property_name((char const *)arg1);
+    ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+    if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+    XSRETURN(argvi);
+  fail:
+    if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
+    SWIG_croak_null();
+  }
+}
+
+
 
 /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
 
 static swig_type_info _swigt__p_application_t = {"_p_application_t", "application_t *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_changer_config_t = {"_p_changer_config_t", "changer_config_t *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_char = {"_p_char", "gchar *|char *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_config_overwrites_t = {"_p_config_overwrites_t", "config_overwrites_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_config_overrides_t = {"_p_config_overrides_t", "config_overrides_t *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_device_config_t = {"_p_device_config_t", "device_config_t *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_double = {"_p_double", "double *|gdouble *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_dumptype_t = {"_p_dumptype_t", "dumptype_t *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_float = {"_p_float", "float *|gfloat *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_holdingdisk_t = {"_p_holdingdisk_t", "holdingdisk_t *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_int = {"_p_int", "application_key *|strategy_t *|pp_script_key *|int *|comp_t *|dump_holdingdisk_t *|holdingdisk_key *|device_config_key *|changer_config_key *|confparm_key *|interface_key *|dumptype_key *|tapetype_key *|cfgerr_level_t *|encrypt_t *|taperalgo_t *|gboolean *|execute_on_t *|send_amreport_on_t *|estimate_t *|config_init_flags *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_int = {"_p_int", "taperscan_key *|application_key *|strategy_t *|pp_script_key *|int *|autolabel_enum_t *|comp_t *|dump_holdingdisk_t *|changer_config_key *|confparm_key *|interface_key *|device_config_key *|holdingdisk_key *|dumptype_key *|tapetype_key *|interactivity_key *|part_cache_type_t *|cfgerr_level_t *|encrypt_t *|taperalgo_t *|gboolean *|data_path_t *|execute_on_t *|send_amreport_on_t *|estimate_t *|config_init_flags *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_interactivity_t = {"_p_interactivity_t", "interactivity_t *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_interface_t = {"_p_interface_t", "interface_t *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_p_GSList = {"_p_p_GSList", "GSList **", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_p_char = {"_p_p_char", "char **", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_pp_script_t = {"_p_pp_script_t", "pp_script_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_taperscan_t = {"_p_taperscan_t", "taperscan_t *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_tapetype_t = {"_p_tapetype_t", "tapetype_t *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_unsigned_char = {"_p_unsigned_char", "guchar *|unsigned char *", 0, 0, (void*)0, 0};
 
@@ -5399,17 +4983,19 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_application_t,
   &_swigt__p_changer_config_t,
   &_swigt__p_char,
-  &_swigt__p_config_overwrites_t,
+  &_swigt__p_config_overrides_t,
   &_swigt__p_device_config_t,
   &_swigt__p_double,
   &_swigt__p_dumptype_t,
   &_swigt__p_float,
   &_swigt__p_holdingdisk_t,
   &_swigt__p_int,
+  &_swigt__p_interactivity_t,
   &_swigt__p_interface_t,
   &_swigt__p_p_GSList,
   &_swigt__p_p_char,
   &_swigt__p_pp_script_t,
+  &_swigt__p_taperscan_t,
   &_swigt__p_tapetype_t,
   &_swigt__p_unsigned_char,
 };
@@ -5417,17 +5003,19 @@ static swig_type_info *swig_type_initial[] = {
 static swig_cast_info _swigc__p_application_t[] = {  {&_swigt__p_application_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_changer_config_t[] = {  {&_swigt__p_changer_config_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_char[] = {  {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_config_overwrites_t[] = {  {&_swigt__p_config_overwrites_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_config_overrides_t[] = {  {&_swigt__p_config_overrides_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_device_config_t[] = {  {&_swigt__p_device_config_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_double[] = {  {&_swigt__p_double, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_dumptype_t[] = {  {&_swigt__p_dumptype_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_float[] = {  {&_swigt__p_float, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_holdingdisk_t[] = {  {&_swigt__p_holdingdisk_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_int[] = {  {&_swigt__p_int, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_interactivity_t[] = {  {&_swigt__p_interactivity_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_interface_t[] = {  {&_swigt__p_interface_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_p_GSList[] = {  {&_swigt__p_p_GSList, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_p_char[] = {  {&_swigt__p_p_char, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_pp_script_t[] = {  {&_swigt__p_pp_script_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_taperscan_t[] = {  {&_swigt__p_taperscan_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_tapetype_t[] = {  {&_swigt__p_tapetype_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_unsigned_char[] = {  {&_swigt__p_unsigned_char, 0, 0, 0},{0, 0, 0, 0}};
 
@@ -5435,17 +5023,19 @@ static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_application_t,
   _swigc__p_changer_config_t,
   _swigc__p_char,
-  _swigc__p_config_overwrites_t,
+  _swigc__p_config_overrides_t,
   _swigc__p_device_config_t,
   _swigc__p_double,
   _swigc__p_dumptype_t,
   _swigc__p_float,
   _swigc__p_holdingdisk_t,
   _swigc__p_int,
+  _swigc__p_interactivity_t,
   _swigc__p_interface_t,
   _swigc__p_p_GSList,
   _swigc__p_p_char,
   _swigc__p_pp_script_t,
+  _swigc__p_taperscan_t,
   _swigc__p_tapetype_t,
   _swigc__p_unsigned_char,
 };
@@ -5461,6 +5051,7 @@ static swig_constant_info swig_constants[] = {
 #endif
 static swig_variable_info swig_variables[] = {
     { "Amanda::Configc::debug_amandad", MAGIC_CLASS _wrap_debug_amandad_set, MAGIC_CLASS _wrap_debug_amandad_get,0 },
+    { "Amanda::Configc::debug_recovery", MAGIC_CLASS _wrap_debug_recovery_set, MAGIC_CLASS _wrap_debug_recovery_get,0 },
     { "Amanda::Configc::debug_amidxtaped", MAGIC_CLASS _wrap_debug_amidxtaped_set, MAGIC_CLASS _wrap_debug_amidxtaped_get,0 },
     { "Amanda::Configc::debug_amindexd", MAGIC_CLASS _wrap_debug_amindexd_set, MAGIC_CLASS _wrap_debug_amindexd_get,0 },
     { "Amanda::Configc::debug_amrecover", MAGIC_CLASS _wrap_debug_amrecover_set, MAGIC_CLASS _wrap_debug_amrecover_get,0 },
@@ -5479,8 +5070,10 @@ static swig_variable_info swig_variables[] = {
 {0,0,0,0}
 };
 static swig_command_info swig_commands[] = {
+{"Amanda::Configc::data_path_from_string", _wrap_data_path_from_string},
 {"Amanda::Configc::getconf", _wrap_getconf},
 {"Amanda::Configc::getconf_seen", _wrap_getconf_seen},
+{"Amanda::Configc::getconf_linenum", _wrap_getconf_linenum},
 {"Amanda::Configc::getconf_byname", _wrap_getconf_byname},
 {"Amanda::Configc::getconf_list", _wrap_getconf_list},
 {"Amanda::Configc::getconf_byname_strs", _wrap_getconf_byname_strs},
@@ -5498,7 +5091,6 @@ static swig_command_info swig_commands[] = {
 {"Amanda::Configc::interface_seen", _wrap_interface_seen},
 {"Amanda::Configc::lookup_holdingdisk", _wrap_lookup_holdingdisk},
 {"Amanda::Configc::getconf_holdingdisks", _wrap_getconf_holdingdisks},
-{"Amanda::Configc::holdingdisk_next", _wrap_holdingdisk_next},
 {"Amanda::Configc::holdingdisk_getconf", _wrap_holdingdisk_getconf},
 {"Amanda::Configc::holdingdisk_name", _wrap_holdingdisk_name},
 {"Amanda::Configc::holdingdisk_seen", _wrap_holdingdisk_seen},
@@ -5518,6 +5110,14 @@ static swig_command_info swig_commands[] = {
 {"Amanda::Configc::changer_config_getconf", _wrap_changer_config_getconf},
 {"Amanda::Configc::changer_config_name", _wrap_changer_config_name},
 {"Amanda::Configc::changer_config_seen", _wrap_changer_config_seen},
+{"Amanda::Configc::lookup_interactivity", _wrap_lookup_interactivity},
+{"Amanda::Configc::interactivity_getconf", _wrap_interactivity_getconf},
+{"Amanda::Configc::interactivity_name", _wrap_interactivity_name},
+{"Amanda::Configc::interactivity_seen", _wrap_interactivity_seen},
+{"Amanda::Configc::lookup_taperscan", _wrap_lookup_taperscan},
+{"Amanda::Configc::taperscan_getconf", _wrap_taperscan_getconf},
+{"Amanda::Configc::taperscan_name", _wrap_taperscan_name},
+{"Amanda::Configc::taperscan_seen", _wrap_taperscan_seen},
 {"Amanda::Configc::getconf_unit_divisor", _wrap_getconf_unit_divisor},
 {"Amanda::Configc::config_init", _wrap_config_init},
 {"Amanda::Configc::config_uninit", _wrap_config_uninit},
@@ -5528,15 +5128,17 @@ static swig_command_info swig_commands[] = {
 {"Amanda::Configc::config_print_errors", _wrap_config_print_errors},
 {"Amanda::Configc::config_clear_errors", _wrap_config_clear_errors},
 {"Amanda::Configc::config_errors", _wrap_config_errors},
-{"Amanda::Configc::new_config_overwrites", _wrap_new_config_overwrites},
-{"Amanda::Configc::free_config_overwrites", _wrap_free_config_overwrites},
-{"Amanda::Configc::add_config_overwrite", _wrap_add_config_overwrite},
-{"Amanda::Configc::add_config_overwrite_opt", _wrap_add_config_overwrite_opt},
-{"Amanda::Configc::apply_config_overwrites", _wrap_apply_config_overwrites},
+{"Amanda::Configc::new_config_overrides", _wrap_new_config_overrides},
+{"Amanda::Configc::free_config_overrides", _wrap_free_config_overrides},
+{"Amanda::Configc::add_config_override", _wrap_add_config_override},
+{"Amanda::Configc::add_config_override_opt", _wrap_add_config_override_opt},
+{"Amanda::Configc::set_config_overrides", _wrap_set_config_overrides},
 {"Amanda::Configc::dump_configuration", _wrap_dump_configuration},
 {"Amanda::Configc::config_dir_relative", _wrap_config_dir_relative},
 {"Amanda::Configc::taperalgo2str", _wrap_taperalgo2str},
 {"Amanda::Configc::find_multiplier", _wrap_find_multiplier},
+{"Amanda::Configc::C_string_to_boolean", _wrap_C_string_to_boolean},
+{"Amanda::Configc::amandaify_property_name", _wrap_amandaify_property_name},
 {0,0}
 };
 /* -----------------------------------------------------------------------------
@@ -5841,6 +5443,11 @@ XS(SWIG_init) {
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(CNF_CONF)));
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "CNF_AMDUMP_SERVER", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(CNF_AMDUMP_SERVER)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
     SV *sv = get_sv((char*) SWIG_prefix "CNF_INDEX_SERVER", TRUE | 0x2 | GV_ADDMULTI);
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(CNF_INDEX_SERVER)));
@@ -5871,6 +5478,11 @@ XS(SWIG_init) {
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(CNF_CLIENT_USERNAME)));
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "CNF_CLIENT_PORT", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(CNF_CLIENT_PORT)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
     SV *sv = get_sv((char*) SWIG_prefix "CNF_GNUTAR_LIST_DIR", TRUE | 0x2 | GV_ADDMULTI);
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(CNF_GNUTAR_LIST_DIR)));
@@ -5926,6 +5538,16 @@ XS(SWIG_init) {
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(CNF_LABELSTR)));
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "CNF_AUTOLABEL", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(CNF_AUTOLABEL)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "CNF_META_AUTOLABEL", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(CNF_META_AUTOLABEL)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
     SV *sv = get_sv((char*) SWIG_prefix "CNF_TAPELIST", TRUE | 0x2 | GV_ADDMULTI);
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(CNF_TAPELIST)));
@@ -6036,11 +5658,6 @@ XS(SWIG_init) {
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(CNF_CTIMEOUT)));
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
-  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
-    SV *sv = get_sv((char*) SWIG_prefix "CNF_TAPEBUFS", TRUE | 0x2 | GV_ADDMULTI);
-    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(CNF_TAPEBUFS)));
-    SvREADONLY_on(sv);
-  } while(0) /*@SWIG@*/;
   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
     SV *sv = get_sv((char*) SWIG_prefix "CNF_DEVICE_OUTPUT_BUFFER_SIZE", TRUE | 0x2 | GV_ADDMULTI);
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(CNF_DEVICE_OUTPUT_BUFFER_SIZE)));
@@ -6151,6 +5768,11 @@ XS(SWIG_init) {
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(CNF_DEBUG_AMANDAD)));
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "CNF_DEBUG_RECOVERY", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(CNF_DEBUG_RECOVERY)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
     SV *sv = get_sv((char*) SWIG_prefix "CNF_DEBUG_AMIDXTAPED", TRUE | 0x2 | GV_ADDMULTI);
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(CNF_DEBUG_AMIDXTAPED)));
@@ -6241,6 +5863,36 @@ XS(SWIG_init) {
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(CNF_UNRESERVED_TCP_PORT)));
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "CNF_HOLDINGDISK", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(CNF_HOLDINGDISK)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "CNF_SEND_AMREPORT_ON", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(CNF_SEND_AMREPORT_ON)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "CNF_TAPER_PARALLEL_WRITE", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(CNF_TAPER_PARALLEL_WRITE)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "CNF_RECOVERY_LIMIT", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(CNF_RECOVERY_LIMIT)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "CNF_INTERACTIVITY", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(CNF_INTERACTIVITY)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "CNF_TAPERSCAN", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(CNF_TAPERSCAN)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
     SV *sv = get_sv((char*) SWIG_prefix "TAPETYPE_COMMENT", TRUE | 0x2 | GV_ADDMULTI);
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(TAPETYPE_COMMENT)));
@@ -6277,8 +5929,23 @@ XS(SWIG_init) {
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
-    SV *sv = get_sv((char*) SWIG_prefix "TAPETYPE_FILE_PAD", TRUE | 0x2 | GV_ADDMULTI);
-    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(TAPETYPE_FILE_PAD)));
+    SV *sv = get_sv((char*) SWIG_prefix "TAPETYPE_PART_SIZE", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(TAPETYPE_PART_SIZE)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "TAPETYPE_PART_CACHE_TYPE", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(TAPETYPE_PART_CACHE_TYPE)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "TAPETYPE_PART_CACHE_DIR", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(TAPETYPE_PART_CACHE_DIR)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "TAPETYPE_PART_CACHE_MAX_SIZE", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(TAPETYPE_PART_CACHE_MAX_SIZE)));
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
@@ -6321,14 +5988,19 @@ XS(SWIG_init) {
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(DUMPTYPE_CLIENT_USERNAME)));
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "DUMPTYPE_CLIENT_PORT", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(DUMPTYPE_CLIENT_PORT)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
     SV *sv = get_sv((char*) SWIG_prefix "DUMPTYPE_SSH_KEYS", TRUE | 0x2 | GV_ADDMULTI);
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(DUMPTYPE_SSH_KEYS)));
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
-    SV *sv = get_sv((char*) SWIG_prefix "DUMPTYPE_SECURITY_DRIVER", TRUE | 0x2 | GV_ADDMULTI);
-    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(DUMPTYPE_SECURITY_DRIVER)));
+    SV *sv = get_sv((char*) SWIG_prefix "DUMPTYPE_AUTH", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(DUMPTYPE_AUTH)));
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
@@ -6392,8 +6064,8 @@ XS(SWIG_init) {
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
-    SV *sv = get_sv((char*) SWIG_prefix "DUMPTYPE_ESTIMATE", TRUE | 0x2 | GV_ADDMULTI);
-    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(DUMPTYPE_ESTIMATE)));
+    SV *sv = get_sv((char*) SWIG_prefix "DUMPTYPE_ESTIMATELIST", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(DUMPTYPE_ESTIMATELIST)));
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
@@ -6477,8 +6149,8 @@ XS(SWIG_init) {
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
-    SV *sv = get_sv((char*) SWIG_prefix "DUMPTYPE_PP_SCRIPTLIST", TRUE | 0x2 | GV_ADDMULTI);
-    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(DUMPTYPE_PP_SCRIPTLIST)));
+    SV *sv = get_sv((char*) SWIG_prefix "DUMPTYPE_SCRIPTLIST", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(DUMPTYPE_SCRIPTLIST)));
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
@@ -6486,6 +6158,26 @@ XS(SWIG_init) {
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(DUMPTYPE_PROPERTY)));
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "DUMPTYPE_DATA_PATH", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(DUMPTYPE_DATA_PATH)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "DUMPTYPE_ALLOW_SPLIT", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(DUMPTYPE_ALLOW_SPLIT)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "DUMPTYPE_RECOVERY_LIMIT", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(DUMPTYPE_RECOVERY_LIMIT)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "DUMPTYPE_DUMP_LIMIT", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(DUMPTYPE_DUMP_LIMIT)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
     SV *sv = get_sv((char*) SWIG_prefix "INTER_COMMENT", TRUE | 0x2 | GV_ADDMULTI);
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(INTER_COMMENT)));
@@ -6531,6 +6223,11 @@ XS(SWIG_init) {
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(APPLICATION_PROPERTY)));
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "APPLICATION_CLIENT_NAME", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(APPLICATION_CLIENT_NAME)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
     SV *sv = get_sv((char*) SWIG_prefix "PP_SCRIPT_COMMENT", TRUE | 0x2 | GV_ADDMULTI);
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(PP_SCRIPT_COMMENT)));
@@ -6556,6 +6253,21 @@ XS(SWIG_init) {
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(PP_SCRIPT_EXECUTE_WHERE)));
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "PP_SCRIPT_ORDER", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(PP_SCRIPT_ORDER)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "PP_SCRIPT_SINGLE_EXECUTION", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(PP_SCRIPT_SINGLE_EXECUTION)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "PP_SCRIPT_CLIENT_NAME", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(PP_SCRIPT_CLIENT_NAME)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
     SV *sv = get_sv((char*) SWIG_prefix "DEVICE_CONFIG_COMMENT", TRUE | 0x2 | GV_ADDMULTI);
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(DEVICE_CONFIG_COMMENT)));
@@ -6596,6 +6308,46 @@ XS(SWIG_init) {
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(CHANGER_CONFIG_CHANGERFILE)));
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "CHANGER_CONFIG_PROPERTY", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(CHANGER_CONFIG_PROPERTY)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "CHANGER_CONFIG_DEVICE_PROPERTY", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(CHANGER_CONFIG_DEVICE_PROPERTY)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "INTERACTIVITY_COMMENT", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(INTERACTIVITY_COMMENT)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "INTERACTIVITY_PLUGIN", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(INTERACTIVITY_PLUGIN)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "INTERACTIVITY_PROPERTY", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(INTERACTIVITY_PROPERTY)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "TAPERSCAN_COMMENT", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(TAPERSCAN_COMMENT)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "TAPERSCAN_PLUGIN", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(TAPERSCAN_PLUGIN)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "TAPERSCAN_PROPERTY", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(TAPERSCAN_PROPERTY)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
     SV *sv = get_sv((char*) SWIG_prefix "HOLD_NEVER", TRUE | 0x2 | GV_ADDMULTI);
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(HOLD_NEVER)));
@@ -6716,6 +6468,26 @@ XS(SWIG_init) {
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(ES_CALCSIZE)));
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "AL_OTHER_CONFIG", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(AL_OTHER_CONFIG)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "AL_NON_AMANDA", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(AL_NON_AMANDA)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "AL_VOLUME_ERROR", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(AL_VOLUME_ERROR)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "AL_EMPTY", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(AL_EMPTY)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
     SV *sv = get_sv((char*) SWIG_prefix "ALGO_FIRST", TRUE | 0x2 | GV_ADDMULTI);
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(ALGO_FIRST)));
@@ -6746,6 +6518,11 @@ XS(SWIG_init) {
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(ALGO_LAST)));
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "EXECUTE_ON_PRE_AMCHECK", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(EXECUTE_ON_PRE_AMCHECK)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
     SV *sv = get_sv((char*) SWIG_prefix "EXECUTE_ON_PRE_DLE_AMCHECK", TRUE | 0x2 | GV_ADDMULTI);
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(EXECUTE_ON_PRE_DLE_AMCHECK)));
@@ -6756,6 +6533,11 @@ XS(SWIG_init) {
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(EXECUTE_ON_PRE_HOST_AMCHECK)));
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "EXECUTE_ON_POST_AMCHECK", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(EXECUTE_ON_POST_AMCHECK)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
     SV *sv = get_sv((char*) SWIG_prefix "EXECUTE_ON_POST_DLE_AMCHECK", TRUE | 0x2 | GV_ADDMULTI);
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(EXECUTE_ON_POST_DLE_AMCHECK)));
@@ -6766,6 +6548,11 @@ XS(SWIG_init) {
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(EXECUTE_ON_POST_HOST_AMCHECK)));
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "EXECUTE_ON_PRE_ESTIMATE", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(EXECUTE_ON_PRE_ESTIMATE)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
     SV *sv = get_sv((char*) SWIG_prefix "EXECUTE_ON_PRE_DLE_ESTIMATE", TRUE | 0x2 | GV_ADDMULTI);
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(EXECUTE_ON_PRE_DLE_ESTIMATE)));
@@ -6776,6 +6563,11 @@ XS(SWIG_init) {
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(EXECUTE_ON_PRE_HOST_ESTIMATE)));
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "EXECUTE_ON_POST_ESTIMATE", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(EXECUTE_ON_POST_ESTIMATE)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
     SV *sv = get_sv((char*) SWIG_prefix "EXECUTE_ON_POST_DLE_ESTIMATE", TRUE | 0x2 | GV_ADDMULTI);
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(EXECUTE_ON_POST_DLE_ESTIMATE)));
@@ -6786,6 +6578,11 @@ XS(SWIG_init) {
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(EXECUTE_ON_POST_HOST_ESTIMATE)));
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "EXECUTE_ON_PRE_BACKUP", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(EXECUTE_ON_PRE_BACKUP)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
     SV *sv = get_sv((char*) SWIG_prefix "EXECUTE_ON_PRE_DLE_BACKUP", TRUE | 0x2 | GV_ADDMULTI);
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(EXECUTE_ON_PRE_DLE_BACKUP)));
@@ -6796,6 +6593,11 @@ XS(SWIG_init) {
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(EXECUTE_ON_PRE_HOST_BACKUP)));
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "EXECUTE_ON_POST_BACKUP", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(EXECUTE_ON_POST_BACKUP)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
     SV *sv = get_sv((char*) SWIG_prefix "EXECUTE_ON_POST_DLE_BACKUP", TRUE | 0x2 | GV_ADDMULTI);
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(EXECUTE_ON_POST_DLE_BACKUP)));
@@ -6826,6 +6628,31 @@ XS(SWIG_init) {
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(SEND_AMREPORT_NEVER)));
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "DATA_PATH_AMANDA", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(DATA_PATH_AMANDA)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "DATA_PATH_DIRECTTCP", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(DATA_PATH_DIRECTTCP)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "PART_CACHE_TYPE_NONE", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(PART_CACHE_TYPE_NONE)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "PART_CACHE_TYPE_DISK", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(PART_CACHE_TYPE_DISK)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
+  /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
+    SV *sv = get_sv((char*) SWIG_prefix "PART_CACHE_TYPE_MEMORY", TRUE | 0x2 | GV_ADDMULTI);
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(PART_CACHE_TYPE_MEMORY)));
+    SvREADONLY_on(sv);
+  } while(0) /*@SWIG@*/;
   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
     SV *sv = get_sv((char*) SWIG_prefix "CFGERR_OK", TRUE | 0x2 | GV_ADDMULTI);
     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(CFGERR_OK)));