added zebra_insert_record call, function in perl api, documentation and tests
[idzebra-moved-to-github.git] / perl / IDZebra_wrap.c
index d5b5965..e147810 100644 (file)
@@ -212,7 +212,7 @@ SWIG_TypeClientData(swig_type_info *ti, void *clientdata) {
  * perl5.swg
  *
  * Perl5 runtime library
- * $Header: /home/cvsroot/idis/perl/Attic/IDZebra_wrap.c,v 1.1 2002-11-15 21:26:00 adam Exp $
+ * $Header: /home/cvsroot/idis/perl/Attic/IDZebra_wrap.c,v 1.16 2003-03-13 04:25:17 pop Exp $
  * ----------------------------------------------------------------------------- */
 
 #define SWIGPERL
@@ -499,42 +499,50 @@ static void _swig_create_magic(CPerlObj *pPerl, SV *sv, const char *name, int (C
 /* -------- TYPES TABLE (BEGIN) -------- */
 
 #define  SWIGTYPE_p_ZebraService swig_types[0] 
-#define  SWIGTYPE_p_data1_esetname swig_types[1] 
-#define  SWIGTYPE_p_data1_maptab swig_types[2] 
-#define  SWIGTYPE_p_ODR swig_types[3] 
-#define  SWIGTYPE_p_f_p_void__int swig_types[4] 
-#define  SWIGTYPE_p_p_char swig_types[5] 
-#define  SWIGTYPE_p_data1_absyn swig_types[6] 
-#define  SWIGTYPE_p_ZebraHandle swig_types[7] 
-#define  SWIGTYPE_p_void swig_types[8] 
-#define  SWIGTYPE_p_data1_attset swig_types[9] 
-#define  SWIGTYPE_p_size_t swig_types[10] 
-#define  SWIGTYPE_p_WRBUF swig_types[11] 
-#define  SWIGTYPE_p_f_data1_handle_p_void_p_data1_absyn__void swig_types[12] 
-#define  SWIGTYPE_p_Z_Espec1 swig_types[13] 
-#define  SWIGTYPE_p_off_t swig_types[14] 
-#define  SWIGTYPE_p_Odr_oid swig_types[15] 
-#define  SWIGTYPE_p_data1_varset swig_types[16] 
-#define  SWIGTYPE_p_perl_context swig_types[17] 
-#define  SWIGTYPE_p_data1_node swig_types[18] 
-#define  SWIGTYPE_p_data1_tagset swig_types[19] 
-#define  SWIGTYPE_p_data1_tag swig_types[20] 
-#define  SWIGTYPE_p_Z_ExplainRecord swig_types[21] 
-#define  SWIGTYPE_p_NMEM swig_types[22] 
-#define  SWIGTYPE_p_data1_marctab swig_types[23] 
-#define  SWIGTYPE_p_Z_BriefBib swig_types[24] 
-#define  SWIGTYPE_p_FILE swig_types[25] 
-#define  SWIGTYPE_p_f_p_void_p_char_size_t__int swig_types[26] 
-#define  SWIGTYPE_p_data1_element swig_types[27] 
-#define  SWIGTYPE_p_recordGroup swig_types[28] 
-#define  SWIGTYPE_p_p_int swig_types[29] 
-#define  SWIGTYPE_p_int swig_types[30] 
-#define  SWIGTYPE_p_data1_handle swig_types[31] 
-#define  SWIGTYPE_p_data1_attset_cache swig_types[32] 
-#define  SWIGTYPE_p_data1_absyn_cache swig_types[33] 
-#define  SWIGTYPE_p_Z_GenericRecord swig_types[34] 
-#define  SWIGTYPE_p_data1_vartype swig_types[35] 
-static swig_type_info *swig_types[37];
+#define  SWIGTYPE_p_cql_transform_t swig_types[1] 
+#define  SWIGTYPE_p_data1_esetname swig_types[2] 
+#define  SWIGTYPE_p_data1_maptab swig_types[3] 
+#define  SWIGTYPE_p_ODR swig_types[4] 
+#define  SWIGTYPE_p_f_p_void__int swig_types[5] 
+#define  SWIGTYPE_p_p_char swig_types[6] 
+#define  SWIGTYPE_p_data1_absyn swig_types[7] 
+#define  SWIGTYPE_p_ZebraHandle swig_types[8] 
+#define  SWIGTYPE_p_void swig_types[9] 
+#define  SWIGTYPE_p_data1_attset swig_types[10] 
+#define  SWIGTYPE_p_size_t swig_types[11] 
+#define  SWIGTYPE_p_WRBUF swig_types[12] 
+#define  SWIGTYPE_p_f_data1_handle_p_void_p_data1_absyn__void swig_types[13] 
+#define  SWIGTYPE_p_Z_Espec1 swig_types[14] 
+#define  SWIGTYPE_p_off_t swig_types[15] 
+#define  SWIGTYPE_p_Odr_oid swig_types[16] 
+#define  SWIGTYPE_p_data1_varset swig_types[17] 
+#define  SWIGTYPE_p_RetrievalRecordBuf swig_types[18] 
+#define  SWIGTYPE_p_perl_context swig_types[19] 
+#define  SWIGTYPE_p_data1_node swig_types[20] 
+#define  SWIGTYPE_p_ScanObj swig_types[21] 
+#define  SWIGTYPE_p_RetrievalObj swig_types[22] 
+#define  SWIGTYPE_p_data1_tagset swig_types[23] 
+#define  SWIGTYPE_p_data1_tag swig_types[24] 
+#define  SWIGTYPE_p_ZebraRetrievalRecord swig_types[25] 
+#define  SWIGTYPE_p_RetrievalRecord swig_types[26] 
+#define  SWIGTYPE_p_NMEM swig_types[27] 
+#define  SWIGTYPE_p_Z_ExplainRecord swig_types[28] 
+#define  SWIGTYPE_p_data1_marctab swig_types[29] 
+#define  SWIGTYPE_p_ZebraTransactionStatus swig_types[30] 
+#define  SWIGTYPE_p_Z_BriefBib swig_types[31] 
+#define  SWIGTYPE_p_scanEntry swig_types[32] 
+#define  SWIGTYPE_p_f_p_void_p_char_size_t__int swig_types[33] 
+#define  SWIGTYPE_p_FILE swig_types[34] 
+#define  SWIGTYPE_p_data1_element swig_types[35] 
+#define  SWIGTYPE_p_recordGroup swig_types[36] 
+#define  SWIGTYPE_p_int swig_types[37] 
+#define  SWIGTYPE_p_data1_handle swig_types[38] 
+#define  SWIGTYPE_p_p_int swig_types[39] 
+#define  SWIGTYPE_p_data1_absyn_cache swig_types[40] 
+#define  SWIGTYPE_p_data1_attset_cache swig_types[41] 
+#define  SWIGTYPE_p_Z_GenericRecord swig_types[42] 
+#define  SWIGTYPE_p_data1_vartype swig_types[43] 
+static swig_type_info *swig_types[45];
 
 /* -------- TYPES TABLE (END) -------- */
 
@@ -558,9 +566,10 @@ SWIGEXPORT(void) SWIG_init (CV *cv, CPerlObj *);
 
 
 #include "zebraapi.h"
-#include "rg.h"
+#include "zebra_perl.h"
 #include "data1.h"
 #include "yaz/odr.h"
+#include "yaz/cql.h"
 
 #ifdef PERL_OBJECT
 #define MAGIC_CLASS _wrap_IDZebra_var::
@@ -1370,17 +1379,25 @@ XS(_wrap_delete_recordGroup) {
 }
 
 
-XS(_wrap_init__SWIG_0) {
+XS(_wrap_RetrievalObj_noOfRecords_set) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
+        RetrievalObj *arg1 ;
+        int arg2 ;
         int argvi = 0;
         dXSARGS;
         
-        if ((items < 0) || (items > 0)) {
-            SWIG_croak("Usage: init();");
+        if ((items < 2) || (items > 2)) {
+            SWIG_croak("Usage: RetrievalObj_noOfRecords_set(self,noOfRecords);");
         }
-        init();
+        {
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_RetrievalObj,0) < 0) {
+                SWIG_croak("Type error in argument 1 of RetrievalObj_noOfRecords_set. Expected _p_RetrievalObj");
+            }
+        }
+        arg2 = (int) SvIV(ST(1));
+        if (arg1) (arg1)->noOfRecords = arg2;
         
         
         XSRETURN(argvi);
@@ -1391,19 +1408,27 @@ XS(_wrap_init__SWIG_0) {
 }
 
 
-XS(_wrap_DESTROY) {
+XS(_wrap_RetrievalObj_noOfRecords_get) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
+        RetrievalObj *arg1 ;
+        int result;
         int argvi = 0;
         dXSARGS;
         
-        if ((items < 0) || (items > 0)) {
-            SWIG_croak("Usage: DESTROY();");
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: RetrievalObj_noOfRecords_get(self);");
         }
-        DESTROY();
-        
+        {
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_RetrievalObj,0) < 0) {
+                SWIG_croak("Type error in argument 1 of RetrievalObj_noOfRecords_get. Expected _p_RetrievalObj");
+            }
+        }
+        result = (int) ((arg1)->noOfRecords);
         
+        ST(argvi) = sv_newmortal();
+        sv_setiv(ST(argvi++), (IV) result);
         XSRETURN(argvi);
         fail:
         (void) _swigerr;
@@ -1412,19 +1437,29 @@ XS(_wrap_DESTROY) {
 }
 
 
-XS(_wrap_logLevel) {
+XS(_wrap_RetrievalObj_records_set) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
-        int arg1 ;
+        RetrievalObj *arg1 ;
+        ZebraRetrievalRecord *arg2 ;
         int argvi = 0;
         dXSARGS;
         
-        if ((items < 1) || (items > 1)) {
-            SWIG_croak("Usage: logLevel(level);");
+        if ((items < 2) || (items > 2)) {
+            SWIG_croak("Usage: RetrievalObj_records_set(self,records);");
         }
-        arg1 = (int) SvIV(ST(0));
-        logLevel(arg1);
+        {
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_RetrievalObj,0) < 0) {
+                SWIG_croak("Type error in argument 1 of RetrievalObj_records_set. Expected _p_RetrievalObj");
+            }
+        }
+        {
+            if (SWIG_ConvertPtr(ST(1), (void **) &arg2, SWIGTYPE_p_ZebraRetrievalRecord,0) < 0) {
+                SWIG_croak("Type error in argument 2 of RetrievalObj_records_set. Expected _p_ZebraRetrievalRecord");
+            }
+        }
+        if (arg1) (arg1)->records = arg2;
         
         
         XSRETURN(argvi);
@@ -1435,22 +1470,27 @@ XS(_wrap_logLevel) {
 }
 
 
-XS(_wrap_logFile) {
+XS(_wrap_RetrievalObj_records_get) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
-        char *arg1 ;
+        RetrievalObj *arg1 ;
+        ZebraRetrievalRecord *result;
         int argvi = 0;
         dXSARGS;
         
         if ((items < 1) || (items > 1)) {
-            SWIG_croak("Usage: logFile(fname);");
+            SWIG_croak("Usage: RetrievalObj_records_get(self);");
         }
-        if (!SvOK((SV*) ST(0))) arg1 = 0;
-        else arg1 = (char *) SvPV(ST(0), PL_na);
-        logFile((char const *)arg1);
-        
+        {
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_RetrievalObj,0) < 0) {
+                SWIG_croak("Type error in argument 1 of RetrievalObj_records_get. Expected _p_RetrievalObj");
+            }
+        }
+        result = (ZebraRetrievalRecord *) ((arg1)->records);
         
+        ST(argvi) = sv_newmortal();
+        SWIG_MakePtr(ST(argvi++), (void *) result, SWIGTYPE_p_ZebraRetrievalRecord,0);
         XSRETURN(argvi);
         fail:
         (void) _swigerr;
@@ -1459,24 +1499,21 @@ XS(_wrap_logFile) {
 }
 
 
-XS(_wrap_logMsg) {
+XS(_wrap_new_RetrievalObj) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
-        int arg1 ;
-        char *arg2 ;
+        RetrievalObj *result;
         int argvi = 0;
         dXSARGS;
         
-        if ((items < 2) || (items > 2)) {
-            SWIG_croak("Usage: logMsg(level,message);");
+        if ((items < 0) || (items > 0)) {
+            SWIG_croak("Usage: new_RetrievalObj();");
         }
-        arg1 = (int) SvIV(ST(0));
-        if (!SvOK((SV*) ST(1))) arg2 = 0;
-        else arg2 = (char *) SvPV(ST(1), PL_na);
-        logMsg(arg1,(char const *)arg2);
-        
+        result = (RetrievalObj *)(RetrievalObj *) calloc(1, sizeof(RetrievalObj));
         
+        ST(argvi) = sv_newmortal();
+        SWIG_MakePtr(ST(argvi++), (void *) result, SWIGTYPE_p_RetrievalObj,0);
         XSRETURN(argvi);
         fail:
         (void) _swigerr;
@@ -1485,27 +1522,25 @@ XS(_wrap_logMsg) {
 }
 
 
-XS(_wrap_odr_createmem) {
+XS(_wrap_delete_RetrievalObj) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
-        int arg1 ;
-        ODR result;
+        RetrievalObj *arg1 ;
         int argvi = 0;
         dXSARGS;
         
         if ((items < 1) || (items > 1)) {
-            SWIG_croak("Usage: odr_createmem(direction);");
+            SWIG_croak("Usage: delete_RetrievalObj(self);");
         }
-        arg1 = (int) SvIV(ST(0));
-        result = odr_createmem(arg1);
-        
         {
-            ODR * resultobj = (ODR *) malloc(sizeof(ODR));
-            memmove(resultobj, &result, sizeof(ODR));
-            ST(argvi) = sv_newmortal();
-            SWIG_MakePtr(ST(argvi++), (void *) resultobj, SWIGTYPE_p_ODR,0);
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_RetrievalObj,0) < 0) {
+                SWIG_croak("Type error in argument 1 of delete_RetrievalObj. Expected _p_RetrievalObj");
+            }
         }
+        free((char *) arg1);
+        
+        
         XSRETURN(argvi);
         fail:
         (void) _swigerr;
@@ -1514,25 +1549,25 @@ XS(_wrap_odr_createmem) {
 }
 
 
-XS(_wrap_odr_reset) {
+XS(_wrap_RetrievalRecord_errCode_set) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
-        ODR arg1 ;
+        RetrievalRecord *arg1 ;
+        int arg2 ;
         int argvi = 0;
         dXSARGS;
         
-        if ((items < 1) || (items > 1)) {
-            SWIG_croak("Usage: odr_reset(o);");
+        if ((items < 2) || (items > 2)) {
+            SWIG_croak("Usage: RetrievalRecord_errCode_set(self,errCode);");
         }
         {
-            ODR * argp;
-            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ODR,0) < 0) {
-                SWIG_croak("Type error in argument 1 of odr_reset. Expected _p_ODR");
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_RetrievalRecord,0) < 0) {
+                SWIG_croak("Type error in argument 1 of RetrievalRecord_errCode_set. Expected _p_RetrievalRecord");
             }
-            arg1 = *argp;
         }
-        odr_reset(arg1);
+        arg2 = (int) SvIV(ST(1));
+        if (arg1) (arg1)->errCode = arg2;
         
         
         XSRETURN(argvi);
@@ -1543,27 +1578,27 @@ XS(_wrap_odr_reset) {
 }
 
 
-XS(_wrap_odr_destroy) {
+XS(_wrap_RetrievalRecord_errCode_get) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
-        ODR arg1 ;
+        RetrievalRecord *arg1 ;
+        int result;
         int argvi = 0;
         dXSARGS;
         
         if ((items < 1) || (items > 1)) {
-            SWIG_croak("Usage: odr_destroy(o);");
+            SWIG_croak("Usage: RetrievalRecord_errCode_get(self);");
         }
         {
-            ODR * argp;
-            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ODR,0) < 0) {
-                SWIG_croak("Type error in argument 1 of odr_destroy. Expected _p_ODR");
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_RetrievalRecord,0) < 0) {
+                SWIG_croak("Type error in argument 1 of RetrievalRecord_errCode_get. Expected _p_RetrievalRecord");
             }
-            arg1 = *argp;
         }
-        odr_destroy(arg1);
-        
+        result = (int) ((arg1)->errCode);
         
+        ST(argvi) = sv_newmortal();
+        sv_setiv(ST(argvi++), (IV) result);
         XSRETURN(argvi);
         fail:
         (void) _swigerr;
@@ -1572,31 +1607,31 @@ XS(_wrap_odr_destroy) {
 }
 
 
-XS(_wrap_odr_malloc) {
+XS(_wrap_RetrievalRecord_errString_set) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
-        ODR arg1 ;
-        int arg2 ;
-        void *result;
+        RetrievalRecord *arg1 ;
+        char *arg2 ;
         int argvi = 0;
         dXSARGS;
         
         if ((items < 2) || (items > 2)) {
-            SWIG_croak("Usage: odr_malloc(o,size);");
+            SWIG_croak("Usage: RetrievalRecord_errString_set(self,errString);");
         }
         {
-            ODR * argp;
-            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ODR,0) < 0) {
-                SWIG_croak("Type error in argument 1 of odr_malloc. Expected _p_ODR");
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_RetrievalRecord,0) < 0) {
+                SWIG_croak("Type error in argument 1 of RetrievalRecord_errString_set. Expected _p_RetrievalRecord");
             }
-            arg1 = *argp;
         }
-        arg2 = (int) SvIV(ST(1));
-        result = (void *)odr_malloc(arg1,arg2);
+        if (!SvOK((SV*) ST(1))) arg2 = 0;
+        else arg2 = (char *) SvPV(ST(1), PL_na);
+        {
+            if (arg1->errString) free((char*)arg1->errString);
+            arg1->errString = (char *) malloc(strlen(arg2)+1);
+            strcpy((char*)arg1->errString,arg2);
+        }
         
-        ST(argvi) = sv_newmortal();
-        SWIG_MakePtr(ST(argvi++), (void *) result, SWIGTYPE_p_void,0);
         XSRETURN(argvi);
         fail:
         (void) _swigerr;
@@ -1605,27 +1640,30 @@ XS(_wrap_odr_malloc) {
 }
 
 
-XS(_wrap_start) {
+XS(_wrap_RetrievalRecord_errString_get) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
-        char *arg1 ;
-        ZebraService result;
+        RetrievalRecord *arg1 ;
+        char *result;
         int argvi = 0;
         dXSARGS;
         
         if ((items < 1) || (items > 1)) {
-            SWIG_croak("Usage: start(configName);");
+            SWIG_croak("Usage: RetrievalRecord_errString_get(self);");
         }
-        if (!SvOK((SV*) ST(0))) arg1 = 0;
-        else arg1 = (char *) SvPV(ST(0), PL_na);
-        result = zebra_start((char const *)arg1);
-        
         {
-            ZebraService * resultobj = (ZebraService *) malloc(sizeof(ZebraService));
-            memmove(resultobj, &result, sizeof(ZebraService));
-            ST(argvi) = sv_newmortal();
-            SWIG_MakePtr(ST(argvi++), (void *) resultobj, SWIGTYPE_p_ZebraService,0);
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_RetrievalRecord,0) < 0) {
+                SWIG_croak("Type error in argument 1 of RetrievalRecord_errString_get. Expected _p_RetrievalRecord");
+            }
+        }
+        result = (char *) ((arg1)->errString);
+        
+        ST(argvi) = sv_newmortal();
+        if (result) {
+            sv_setpv((SV*)ST(argvi++), (char *) result);
+        }else {
+            sv_setsv((SV*)ST(argvi++), &PL_sv_undef);
         }
         XSRETURN(argvi);
         fail:
@@ -1635,33 +1673,27 @@ XS(_wrap_start) {
 }
 
 
-XS(_wrap_open) {
+XS(_wrap_RetrievalRecord_position_set) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
-        ZebraService arg1 ;
-        ZebraHandle result;
+        RetrievalRecord *arg1 ;
+        int arg2 ;
         int argvi = 0;
         dXSARGS;
         
-        if ((items < 1) || (items > 1)) {
-            SWIG_croak("Usage: open(zs);");
+        if ((items < 2) || (items > 2)) {
+            SWIG_croak("Usage: RetrievalRecord_position_set(self,position);");
         }
         {
-            ZebraService * argp;
-            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraService,0) < 0) {
-                SWIG_croak("Type error in argument 1 of open. Expected _p_ZebraService");
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_RetrievalRecord,0) < 0) {
+                SWIG_croak("Type error in argument 1 of RetrievalRecord_position_set. Expected _p_RetrievalRecord");
             }
-            arg1 = *argp;
         }
-        result = zebra_open(arg1);
+        arg2 = (int) SvIV(ST(1));
+        if (arg1) (arg1)->position = arg2;
+        
         
-        {
-            ZebraHandle * resultobj = (ZebraHandle *) malloc(sizeof(ZebraHandle));
-            memmove(resultobj, &result, sizeof(ZebraHandle));
-            ST(argvi) = sv_newmortal();
-            SWIG_MakePtr(ST(argvi++), (void *) resultobj, SWIGTYPE_p_ZebraHandle,0);
-        }
         XSRETURN(argvi);
         fail:
         (void) _swigerr;
@@ -1670,27 +1702,27 @@ XS(_wrap_open) {
 }
 
 
-XS(_wrap_close) {
+XS(_wrap_RetrievalRecord_position_get) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
-        ZebraHandle arg1 ;
+        RetrievalRecord *arg1 ;
+        int result;
         int argvi = 0;
         dXSARGS;
         
         if ((items < 1) || (items > 1)) {
-            SWIG_croak("Usage: close(zh);");
+            SWIG_croak("Usage: RetrievalRecord_position_get(self);");
         }
         {
-            ZebraHandle * argp;
-            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
-                SWIG_croak("Type error in argument 1 of close. Expected _p_ZebraHandle");
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_RetrievalRecord,0) < 0) {
+                SWIG_croak("Type error in argument 1 of RetrievalRecord_position_get. Expected _p_RetrievalRecord");
             }
-            arg1 = *argp;
         }
-        zebra_close(arg1);
-        
+        result = (int) ((arg1)->position);
         
+        ST(argvi) = sv_newmortal();
+        sv_setiv(ST(argvi++), (IV) result);
         XSRETURN(argvi);
         fail:
         (void) _swigerr;
@@ -1699,26 +1731,30 @@ XS(_wrap_close) {
 }
 
 
-XS(_wrap_stop) {
+XS(_wrap_RetrievalRecord_base_set) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
-        ZebraService arg1 ;
+        RetrievalRecord *arg1 ;
+        char *arg2 ;
         int argvi = 0;
         dXSARGS;
         
-        if ((items < 1) || (items > 1)) {
-            SWIG_croak("Usage: stop(zs);");
+        if ((items < 2) || (items > 2)) {
+            SWIG_croak("Usage: RetrievalRecord_base_set(self,base);");
         }
         {
-            ZebraService * argp;
-            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraService,0) < 0) {
-                SWIG_croak("Type error in argument 1 of stop. Expected _p_ZebraService");
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_RetrievalRecord,0) < 0) {
+                SWIG_croak("Type error in argument 1 of RetrievalRecord_base_set. Expected _p_RetrievalRecord");
             }
-            arg1 = *argp;
         }
-        zebra_stop(arg1);
-        
+        if (!SvOK((SV*) ST(1))) arg2 = 0;
+        else arg2 = (char *) SvPV(ST(1), PL_na);
+        {
+            if (arg1->base) free((char*)arg1->base);
+            arg1->base = (char *) malloc(strlen(arg2)+1);
+            strcpy((char*)arg1->base,arg2);
+        }
         
         XSRETURN(argvi);
         fail:
@@ -1728,29 +1764,31 @@ XS(_wrap_stop) {
 }
 
 
-XS(_wrap_errCode) {
+XS(_wrap_RetrievalRecord_base_get) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
-        ZebraHandle arg1 ;
-        int result;
+        RetrievalRecord *arg1 ;
+        char *result;
         int argvi = 0;
         dXSARGS;
         
         if ((items < 1) || (items > 1)) {
-            SWIG_croak("Usage: errCode(zh);");
+            SWIG_croak("Usage: RetrievalRecord_base_get(self);");
         }
         {
-            ZebraHandle * argp;
-            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
-                SWIG_croak("Type error in argument 1 of errCode. Expected _p_ZebraHandle");
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_RetrievalRecord,0) < 0) {
+                SWIG_croak("Type error in argument 1 of RetrievalRecord_base_get. Expected _p_RetrievalRecord");
             }
-            arg1 = *argp;
         }
-        result = (int)zebra_errCode(arg1);
+        result = (char *) ((arg1)->base);
         
         ST(argvi) = sv_newmortal();
-        sv_setiv(ST(argvi++), (IV) result);
+        if (result) {
+            sv_setpv((SV*)ST(argvi++), (char *) result);
+        }else {
+            sv_setsv((SV*)ST(argvi++), &PL_sv_undef);
+        }
         XSRETURN(argvi);
         fail:
         (void) _swigerr;
@@ -1759,33 +1797,27 @@ XS(_wrap_errCode) {
 }
 
 
-XS(_wrap_errString) {
+XS(_wrap_RetrievalRecord_sysno_set) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
-        ZebraHandle arg1 ;
-        char *result;
+        RetrievalRecord *arg1 ;
+        int arg2 ;
         int argvi = 0;
         dXSARGS;
         
-        if ((items < 1) || (items > 1)) {
-            SWIG_croak("Usage: errString(zh);");
+        if ((items < 2) || (items > 2)) {
+            SWIG_croak("Usage: RetrievalRecord_sysno_set(self,sysno);");
         }
         {
-            ZebraHandle * argp;
-            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
-                SWIG_croak("Type error in argument 1 of errString. Expected _p_ZebraHandle");
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_RetrievalRecord,0) < 0) {
+                SWIG_croak("Type error in argument 1 of RetrievalRecord_sysno_set. Expected _p_RetrievalRecord");
             }
-            arg1 = *argp;
         }
-        result = (char *)zebra_errString(arg1);
+        arg2 = (int) SvIV(ST(1));
+        if (arg1) (arg1)->sysno = arg2;
+        
         
-        ST(argvi) = sv_newmortal();
-        if (result) {
-            sv_setpv((SV*)ST(argvi++), (char *) result);
-        }else {
-            sv_setsv((SV*)ST(argvi++), &PL_sv_undef);
-        }
         XSRETURN(argvi);
         fail:
         (void) _swigerr;
@@ -1794,33 +1826,27 @@ XS(_wrap_errString) {
 }
 
 
-XS(_wrap_errAdd) {
+XS(_wrap_RetrievalRecord_sysno_get) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
-        ZebraHandle arg1 ;
-        char *result;
+        RetrievalRecord *arg1 ;
+        int result;
         int argvi = 0;
         dXSARGS;
         
         if ((items < 1) || (items > 1)) {
-            SWIG_croak("Usage: errAdd(zh);");
+            SWIG_croak("Usage: RetrievalRecord_sysno_get(self);");
         }
         {
-            ZebraHandle * argp;
-            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
-                SWIG_croak("Type error in argument 1 of errAdd. Expected _p_ZebraHandle");
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_RetrievalRecord,0) < 0) {
+                SWIG_croak("Type error in argument 1 of RetrievalRecord_sysno_get. Expected _p_RetrievalRecord");
             }
-            arg1 = *argp;
         }
-        result = (char *)zebra_errAdd(arg1);
+        result = (int) ((arg1)->sysno);
         
         ST(argvi) = sv_newmortal();
-        if (result) {
-            sv_setpv((SV*)ST(argvi++), (char *) result);
-        }else {
-            sv_setsv((SV*)ST(argvi++), &PL_sv_undef);
-        }
+        sv_setiv(ST(argvi++), (IV) result);
         XSRETURN(argvi);
         fail:
         (void) _swigerr;
@@ -1829,23 +1855,25 @@ XS(_wrap_errAdd) {
 }
 
 
-XS(_wrap_describe_recordGroup) {
+XS(_wrap_RetrievalRecord_score_set) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
-        recordGroup *arg1 ;
+        RetrievalRecord *arg1 ;
+        int arg2 ;
         int argvi = 0;
         dXSARGS;
         
-        if ((items < 1) || (items > 1)) {
-            SWIG_croak("Usage: describe_recordGroup(rg);");
+        if ((items < 2) || (items > 2)) {
+            SWIG_croak("Usage: RetrievalRecord_score_set(self,score);");
         }
         {
-            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_recordGroup,0) < 0) {
-                SWIG_croak("Type error in argument 1 of describe_recordGroup. Expected _p_recordGroup");
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_RetrievalRecord,0) < 0) {
+                SWIG_croak("Type error in argument 1 of RetrievalRecord_score_set. Expected _p_RetrievalRecord");
             }
         }
-        describe_recordGroup(arg1);
+        arg2 = (int) SvIV(ST(1));
+        if (arg1) (arg1)->score = arg2;
         
         
         XSRETURN(argvi);
@@ -1856,25 +1884,27 @@ XS(_wrap_describe_recordGroup) {
 }
 
 
-XS(_wrap_init_recordGroup) {
+XS(_wrap_RetrievalRecord_score_get) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
-        recordGroup *arg1 ;
+        RetrievalRecord *arg1 ;
+        int result;
         int argvi = 0;
         dXSARGS;
         
         if ((items < 1) || (items > 1)) {
-            SWIG_croak("Usage: init_recordGroup(rg);");
+            SWIG_croak("Usage: RetrievalRecord_score_get(self);");
         }
         {
-            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_recordGroup,0) < 0) {
-                SWIG_croak("Type error in argument 1 of init_recordGroup. Expected _p_recordGroup");
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_RetrievalRecord,0) < 0) {
+                SWIG_croak("Type error in argument 1 of RetrievalRecord_score_get. Expected _p_RetrievalRecord");
             }
         }
-        init_recordGroup(arg1);
-        
+        result = (int) ((arg1)->score);
         
+        ST(argvi) = sv_newmortal();
+        sv_setiv(ST(argvi++), (IV) result);
         XSRETURN(argvi);
         fail:
         (void) _swigerr;
@@ -1883,35 +1913,30 @@ XS(_wrap_init_recordGroup) {
 }
 
 
-XS(_wrap_res_get_recordGroup) {
+XS(_wrap_RetrievalRecord_format_set) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
-        ZebraHandle arg1 ;
-        recordGroup *arg2 ;
-        char *arg3 ;
+        RetrievalRecord *arg1 ;
+        char *arg2 ;
         int argvi = 0;
         dXSARGS;
         
-        if ((items < 3) || (items > 3)) {
-            SWIG_croak("Usage: res_get_recordGroup(zh,rg,ext);");
+        if ((items < 2) || (items > 2)) {
+            SWIG_croak("Usage: RetrievalRecord_format_set(self,format);");
         }
         {
-            ZebraHandle * argp;
-            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
-                SWIG_croak("Type error in argument 1 of res_get_recordGroup. Expected _p_ZebraHandle");
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_RetrievalRecord,0) < 0) {
+                SWIG_croak("Type error in argument 1 of RetrievalRecord_format_set. Expected _p_RetrievalRecord");
             }
-            arg1 = *argp;
         }
+        if (!SvOK((SV*) ST(1))) arg2 = 0;
+        else arg2 = (char *) SvPV(ST(1), PL_na);
         {
-            if (SWIG_ConvertPtr(ST(1), (void **) &arg2, SWIGTYPE_p_recordGroup,0) < 0) {
-                SWIG_croak("Type error in argument 2 of res_get_recordGroup. Expected _p_recordGroup");
-            }
+            if (arg1->format) free((char*)arg1->format);
+            arg1->format = (char *) malloc(strlen(arg2)+1);
+            strcpy((char*)arg1->format,arg2);
         }
-        if (!SvOK((SV*) ST(2))) arg3 = 0;
-        else arg3 = (char *) SvPV(ST(2), PL_na);
-        res_get_recordGroup(arg1,arg2,(char const *)arg3);
-        
         
         XSRETURN(argvi);
         fail:
@@ -1921,33 +1946,31 @@ XS(_wrap_res_get_recordGroup) {
 }
 
 
-XS(_wrap_set_group) {
+XS(_wrap_RetrievalRecord_format_get) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
-        ZebraHandle arg1 ;
-        struct recordGroup *arg2 ;
+        RetrievalRecord *arg1 ;
+        char *result;
         int argvi = 0;
         dXSARGS;
         
-        if ((items < 2) || (items > 2)) {
-            SWIG_croak("Usage: set_group(zh,rg);");
-        }
-        {
-            ZebraHandle * argp;
-            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
-                SWIG_croak("Type error in argument 1 of set_group. Expected _p_ZebraHandle");
-            }
-            arg1 = *argp;
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: RetrievalRecord_format_get(self);");
         }
         {
-            if (SWIG_ConvertPtr(ST(1), (void **) &arg2, SWIGTYPE_p_recordGroup,0) < 0) {
-                SWIG_croak("Type error in argument 2 of set_group. Expected _p_recordGroup");
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_RetrievalRecord,0) < 0) {
+                SWIG_croak("Type error in argument 1 of RetrievalRecord_format_get. Expected _p_RetrievalRecord");
             }
         }
-        zebra_set_group(arg1,arg2);
-        
+        result = (char *) ((arg1)->format);
         
+        ST(argvi) = sv_newmortal();
+        if (result) {
+            sv_setpv((SV*)ST(argvi++), (char *) result);
+        }else {
+            sv_setsv((SV*)ST(argvi++), &PL_sv_undef);
+        }
         XSRETURN(argvi);
         fail:
         (void) _swigerr;
@@ -1956,91 +1979,67 @@ XS(_wrap_set_group) {
 }
 
 
-XS(_wrap_select_databases) {
+XS(_wrap_RetrievalRecord_buf_set) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
-        ZebraHandle arg1 ;
-        int arg2 ;
-        char **arg3 ;
-        int result;
+        RetrievalRecord *arg1 ;
+        RetrievalRecordBuf *arg2 ;
         int argvi = 0;
         dXSARGS;
         
-        if ((items < 3) || (items > 3)) {
-            SWIG_croak("Usage: select_databases(zh,num_bases,basenames);");
+        if ((items < 2) || (items > 2)) {
+            SWIG_croak("Usage: RetrievalRecord_buf_set(self,buf);");
         }
         {
-            ZebraHandle * argp;
-            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
-                SWIG_croak("Type error in argument 1 of select_databases. Expected _p_ZebraHandle");
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_RetrievalRecord,0) < 0) {
+                SWIG_croak("Type error in argument 1 of RetrievalRecord_buf_set. Expected _p_RetrievalRecord");
             }
-            arg1 = *argp;
         }
-        arg2 = (int) SvIV(ST(1));
         {
-            AV *tempav;
-            I32 len;
-            int i;
-            SV  **tv;
-            STRLEN na;
-            if (!SvROK(ST(2)))
-            croak("Argument 3 is not a reference.");
-            if (SvTYPE(SvRV(ST(2))) != SVt_PVAV)
-            croak("Argument 3 is not an array.");
-            tempav = (AV*)SvRV(ST(2));
-            len = av_len(tempav);
-            arg3 = (char **) malloc((len+2)*sizeof(char *));
-            for (i = 0; i <= len; i++) {
-                tv = av_fetch(tempav, i, 0);   
-                arg3[i] = (char *) SvPV(*tv,na);
+            if (SWIG_ConvertPtr(ST(1), (void **) &arg2, SWIGTYPE_p_RetrievalRecordBuf,0) < 0) {
+                SWIG_croak("Type error in argument 2 of RetrievalRecord_buf_set. Expected _p_RetrievalRecordBuf");
             }
-            arg3[i] = NULL;
         }
-        result = (int)zebra_select_databases(arg1,arg2,(char const **)arg3);
+        if (arg1) (arg1)->buf = arg2;
+        
         
-        ST(argvi) = sv_newmortal();
-        sv_setiv(ST(argvi++), (IV) result);
-        {
-            free(arg3);
-        }
         XSRETURN(argvi);
         fail:
-        {
-            free(arg3);
-        }
         (void) _swigerr;
     }
     croak(_swigerr);
 }
 
 
-XS(_wrap_select_database) {
+XS(_wrap_RetrievalRecord_buf_get) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
-        ZebraHandle arg1 ;
-        char *arg2 ;
-        int result;
+        RetrievalRecord *arg1 ;
+        RetrievalRecordBuf *result;
         int argvi = 0;
         dXSARGS;
         
-        if ((items < 2) || (items > 2)) {
-            SWIG_croak("Usage: select_database(zh,basename);");
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: RetrievalRecord_buf_get(self);");
         }
         {
-            ZebraHandle * argp;
-            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
-                SWIG_croak("Type error in argument 1 of select_database. Expected _p_ZebraHandle");
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_RetrievalRecord,0) < 0) {
+                SWIG_croak("Type error in argument 1 of RetrievalRecord_buf_get. Expected _p_RetrievalRecord");
             }
-            arg1 = *argp;
         }
-        if (!SvOK((SV*) ST(1))) arg2 = 0;
-        else arg2 = (char *) SvPV(ST(1), PL_na);
-        result = (int)zebra_select_database(arg1,(char const *)arg2);
+        result = (RetrievalRecordBuf *) ((arg1)->buf);
         
-        ST(argvi) = sv_newmortal();
-        sv_setiv(ST(argvi++), (IV) result);
+        {
+            if (result->len) {
+                ST(argvi) = newSVpv(result->buf,result->len);
+            }else {
+                ST(argvi) = newSVpv("",0);
+            }
+            sv_2mortal(ST(argvi));
+            argvi++;
+        }
         XSRETURN(argvi);
         fail:
         (void) _swigerr;
@@ -2049,27 +2048,21 @@ XS(_wrap_select_database) {
 }
 
 
-XS(_wrap_begin_trans) {
+XS(_wrap_new_RetrievalRecord) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
-        ZebraHandle arg1 ;
+        RetrievalRecord *result;
         int argvi = 0;
         dXSARGS;
         
-        if ((items < 1) || (items > 1)) {
-            SWIG_croak("Usage: begin_trans(zh);");
-        }
-        {
-            ZebraHandle * argp;
-            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
-                SWIG_croak("Type error in argument 1 of begin_trans. Expected _p_ZebraHandle");
-            }
-            arg1 = *argp;
+        if ((items < 0) || (items > 0)) {
+            SWIG_croak("Usage: new_RetrievalRecord();");
         }
-        zebra_begin_trans(arg1);
-        
+        result = (RetrievalRecord *)(RetrievalRecord *) calloc(1, sizeof(RetrievalRecord));
         
+        ST(argvi) = sv_newmortal();
+        SWIG_MakePtr(ST(argvi++), (void *) result, SWIGTYPE_p_RetrievalRecord,0);
         XSRETURN(argvi);
         fail:
         (void) _swigerr;
@@ -2078,25 +2071,23 @@ XS(_wrap_begin_trans) {
 }
 
 
-XS(_wrap_end_trans) {
+XS(_wrap_delete_RetrievalRecord) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
-        ZebraHandle arg1 ;
+        RetrievalRecord *arg1 ;
         int argvi = 0;
         dXSARGS;
         
         if ((items < 1) || (items > 1)) {
-            SWIG_croak("Usage: end_trans(zh);");
+            SWIG_croak("Usage: delete_RetrievalRecord(self);");
         }
         {
-            ZebraHandle * argp;
-            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
-                SWIG_croak("Type error in argument 1 of end_trans. Expected _p_ZebraHandle");
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_RetrievalRecord,0) < 0) {
+                SWIG_croak("Type error in argument 1 of delete_RetrievalRecord. Expected _p_RetrievalRecord");
             }
-            arg1 = *argp;
         }
-        zebra_end_trans(arg1);
+        free((char *) arg1);
         
         
         XSRETURN(argvi);
@@ -2107,29 +2098,27 @@ XS(_wrap_end_trans) {
 }
 
 
-XS(_wrap_commit) {
+XS(_wrap_scanEntry_occurrences_set) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
-        ZebraHandle arg1 ;
-        int result;
+        scanEntry *arg1 ;
+        int arg2 ;
         int argvi = 0;
         dXSARGS;
         
-        if ((items < 1) || (items > 1)) {
-            SWIG_croak("Usage: commit(zh);");
+        if ((items < 2) || (items > 2)) {
+            SWIG_croak("Usage: scanEntry_occurrences_set(self,occurrences);");
         }
         {
-            ZebraHandle * argp;
-            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
-                SWIG_croak("Type error in argument 1 of commit. Expected _p_ZebraHandle");
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_scanEntry,0) < 0) {
+                SWIG_croak("Type error in argument 1 of scanEntry_occurrences_set. Expected _p_scanEntry");
             }
-            arg1 = *argp;
         }
-        result = (int)zebra_commit(arg1);
+        arg2 = (int) SvIV(ST(1));
+        if (arg1) (arg1)->occurrences = arg2;
+        
         
-        ST(argvi) = sv_newmortal();
-        sv_setiv(ST(argvi++), (IV) result);
         XSRETURN(argvi);
         fail:
         (void) _swigerr;
@@ -2138,26 +2127,24 @@ XS(_wrap_commit) {
 }
 
 
-XS(_wrap_get_shadow_enable) {
+XS(_wrap_scanEntry_occurrences_get) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
-        ZebraHandle arg1 ;
+        scanEntry *arg1 ;
         int result;
         int argvi = 0;
         dXSARGS;
         
         if ((items < 1) || (items > 1)) {
-            SWIG_croak("Usage: get_shadow_enable(zh);");
+            SWIG_croak("Usage: scanEntry_occurrences_get(self);");
         }
         {
-            ZebraHandle * argp;
-            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
-                SWIG_croak("Type error in argument 1 of get_shadow_enable. Expected _p_ZebraHandle");
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_scanEntry,0) < 0) {
+                SWIG_croak("Type error in argument 1 of scanEntry_occurrences_get. Expected _p_scanEntry");
             }
-            arg1 = *argp;
         }
-        result = (int)zebra_get_shadow_enable(arg1);
+        result = (int) ((arg1)->occurrences);
         
         ST(argvi) = sv_newmortal();
         sv_setiv(ST(argvi++), (IV) result);
@@ -2169,28 +2156,30 @@ XS(_wrap_get_shadow_enable) {
 }
 
 
-XS(_wrap_set_shadow_enable) {
+XS(_wrap_scanEntry_term_set) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
-        ZebraHandle arg1 ;
-        int arg2 ;
+        scanEntry *arg1 ;
+        char *arg2 ;
         int argvi = 0;
         dXSARGS;
         
         if ((items < 2) || (items > 2)) {
-            SWIG_croak("Usage: set_shadow_enable(zh,value);");
+            SWIG_croak("Usage: scanEntry_term_set(self,term);");
         }
         {
-            ZebraHandle * argp;
-            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
-                SWIG_croak("Type error in argument 1 of set_shadow_enable. Expected _p_ZebraHandle");
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_scanEntry,0) < 0) {
+                SWIG_croak("Type error in argument 1 of scanEntry_term_set. Expected _p_scanEntry");
             }
-            arg1 = *argp;
         }
-        arg2 = (int) SvIV(ST(1));
-        zebra_set_shadow_enable(arg1,arg2);
-        
+        if (!SvOK((SV*) ST(1))) arg2 = 0;
+        else arg2 = (char *) SvPV(ST(1), PL_na);
+        {
+            if (arg1->term) free((char*)arg1->term);
+            arg1->term = (char *) malloc(strlen(arg2)+1);
+            strcpy((char*)arg1->term,arg2);
+        }
         
         XSRETURN(argvi);
         fail:
@@ -2200,29 +2189,31 @@ XS(_wrap_set_shadow_enable) {
 }
 
 
-XS(_wrap_init__SWIG_1) {
+XS(_wrap_scanEntry_term_get) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
-        ZebraHandle arg1 ;
-        int result;
+        scanEntry *arg1 ;
+        char *result;
         int argvi = 0;
         dXSARGS;
         
         if ((items < 1) || (items > 1)) {
-            SWIG_croak("Usage: init(zh);");
+            SWIG_croak("Usage: scanEntry_term_get(self);");
         }
         {
-            ZebraHandle * argp;
-            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
-                SWIG_croak("Type error in argument 1 of init. Expected _p_ZebraHandle");
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_scanEntry,0) < 0) {
+                SWIG_croak("Type error in argument 1 of scanEntry_term_get. Expected _p_scanEntry");
             }
-            arg1 = *argp;
         }
-        result = (int)zebra_init(arg1);
+        result = (char *) ((arg1)->term);
         
         ST(argvi) = sv_newmortal();
-        sv_setiv(ST(argvi++), (IV) result);
+        if (result) {
+            sv_setpv((SV*)ST(argvi++), (char *) result);
+        }else {
+            sv_setsv((SV*)ST(argvi++), &PL_sv_undef);
+        }
         XSRETURN(argvi);
         fail:
         (void) _swigerr;
@@ -2231,56 +2222,21 @@ XS(_wrap_init__SWIG_1) {
 }
 
 
-XS(_wrap_init) {
-    dXSARGS;
-    
-    if (items == 0) {
-        int _v;
-        (*PL_markstack_ptr++);SWIG_CALLXS(_wrap_init__SWIG_0); return;
-    }
-    if (items == 1) {
-        int _v;
-        {
-            void *tmp;
-            if (SWIG_ConvertPtr(ST(0), (void **) &tmp, SWIGTYPE_p_ZebraHandle, 0) == -1) {
-                _v = 0;
-            }else {
-                _v = 1;
-            }
-        }
-        if (_v) {
-            (*PL_markstack_ptr++);SWIG_CALLXS(_wrap_init__SWIG_1); return;
-        }
-    }
-    
-    croak("No matching function for overloaded 'init'");
-    XSRETURN(0);
-}
-
-
-XS(_wrap_compact) {
+XS(_wrap_new_scanEntry) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
-        ZebraHandle arg1 ;
-        int result;
+        scanEntry *result;
         int argvi = 0;
         dXSARGS;
         
-        if ((items < 1) || (items > 1)) {
-            SWIG_croak("Usage: compact(zh);");
-        }
-        {
-            ZebraHandle * argp;
-            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
-                SWIG_croak("Type error in argument 1 of compact. Expected _p_ZebraHandle");
-            }
-            arg1 = *argp;
+        if ((items < 0) || (items > 0)) {
+            SWIG_croak("Usage: new_scanEntry();");
         }
-        result = (int)zebra_compact(arg1);
+        result = (scanEntry *)(scanEntry *) calloc(1, sizeof(scanEntry));
         
         ST(argvi) = sv_newmortal();
-        sv_setiv(ST(argvi++), (IV) result);
+        SWIG_MakePtr(ST(argvi++), (void *) result, SWIGTYPE_p_scanEntry,0);
         XSRETURN(argvi);
         fail:
         (void) _swigerr;
@@ -2289,25 +2245,23 @@ XS(_wrap_compact) {
 }
 
 
-XS(_wrap_repository_update) {
+XS(_wrap_delete_scanEntry) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
-        ZebraHandle arg1 ;
+        scanEntry *arg1 ;
         int argvi = 0;
         dXSARGS;
         
         if ((items < 1) || (items > 1)) {
-            SWIG_croak("Usage: repository_update(zh);");
+            SWIG_croak("Usage: delete_scanEntry(self);");
         }
         {
-            ZebraHandle * argp;
-            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
-                SWIG_croak("Type error in argument 1 of repository_update. Expected _p_ZebraHandle");
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_scanEntry,0) < 0) {
+                SWIG_croak("Type error in argument 1 of delete_scanEntry. Expected _p_scanEntry");
             }
-            arg1 = *argp;
         }
-        zebra_repository_update(arg1);
+        free((char *) arg1);
         
         
         XSRETURN(argvi);
@@ -2318,25 +2272,25 @@ XS(_wrap_repository_update) {
 }
 
 
-XS(_wrap_repository_delete) {
+XS(_wrap_ScanObj_num_entries_set) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
-        ZebraHandle arg1 ;
+        ScanObj *arg1 ;
+        int arg2 ;
         int argvi = 0;
         dXSARGS;
         
-        if ((items < 1) || (items > 1)) {
-            SWIG_croak("Usage: repository_delete(zh);");
+        if ((items < 2) || (items > 2)) {
+            SWIG_croak("Usage: ScanObj_num_entries_set(self,num_entries);");
         }
         {
-            ZebraHandle * argp;
-            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
-                SWIG_croak("Type error in argument 1 of repository_delete. Expected _p_ZebraHandle");
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_ScanObj,0) < 0) {
+                SWIG_croak("Type error in argument 1 of ScanObj_num_entries_set. Expected _p_ScanObj");
             }
-            arg1 = *argp;
         }
-        zebra_repository_delete(arg1);
+        arg2 = (int) SvIV(ST(1));
+        if (arg1) (arg1)->num_entries = arg2;
         
         
         XSRETURN(argvi);
@@ -2347,27 +2301,27 @@ XS(_wrap_repository_delete) {
 }
 
 
-XS(_wrap_repository_show) {
+XS(_wrap_ScanObj_num_entries_get) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
-        ZebraHandle arg1 ;
+        ScanObj *arg1 ;
+        int result;
         int argvi = 0;
         dXSARGS;
         
         if ((items < 1) || (items > 1)) {
-            SWIG_croak("Usage: repository_show(zh);");
+            SWIG_croak("Usage: ScanObj_num_entries_get(self);");
         }
         {
-            ZebraHandle * argp;
-            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
-                SWIG_croak("Type error in argument 1 of repository_show. Expected _p_ZebraHandle");
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_ScanObj,0) < 0) {
+                SWIG_croak("Type error in argument 1 of ScanObj_num_entries_get. Expected _p_ScanObj");
             }
-            arg1 = *argp;
         }
-        zebra_repository_show(arg1);
-        
+        result = (int) ((arg1)->num_entries);
         
+        ST(argvi) = sv_newmortal();
+        sv_setiv(ST(argvi++), (IV) result);
         XSRETURN(argvi);
         fail:
         (void) _swigerr;
@@ -2376,23 +2330,1726 @@ XS(_wrap_repository_show) {
 }
 
 
-XS(_wrap_update_record) {
+XS(_wrap_ScanObj_position_set) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
-        ZebraHandle arg1 ;
-        recordGroup *arg2 ;
-        int arg3 ;
-        char *arg4 ;
+        ScanObj *arg1 ;
+        int arg2 ;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 2) || (items > 2)) {
+            SWIG_croak("Usage: ScanObj_position_set(self,position);");
+        }
+        {
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_ScanObj,0) < 0) {
+                SWIG_croak("Type error in argument 1 of ScanObj_position_set. Expected _p_ScanObj");
+            }
+        }
+        arg2 = (int) SvIV(ST(1));
+        if (arg1) (arg1)->position = arg2;
+        
+        
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_ScanObj_position_get) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ScanObj *arg1 ;
+        int result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: ScanObj_position_get(self);");
+        }
+        {
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_ScanObj,0) < 0) {
+                SWIG_croak("Type error in argument 1 of ScanObj_position_get. Expected _p_ScanObj");
+            }
+        }
+        result = (int) ((arg1)->position);
+        
+        ST(argvi) = sv_newmortal();
+        sv_setiv(ST(argvi++), (IV) result);
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_ScanObj_is_partial_set) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ScanObj *arg1 ;
+        int arg2 ;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 2) || (items > 2)) {
+            SWIG_croak("Usage: ScanObj_is_partial_set(self,is_partial);");
+        }
+        {
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_ScanObj,0) < 0) {
+                SWIG_croak("Type error in argument 1 of ScanObj_is_partial_set. Expected _p_ScanObj");
+            }
+        }
+        arg2 = (int) SvIV(ST(1));
+        if (arg1) (arg1)->is_partial = arg2;
+        
+        
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_ScanObj_is_partial_get) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ScanObj *arg1 ;
+        int result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: ScanObj_is_partial_get(self);");
+        }
+        {
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_ScanObj,0) < 0) {
+                SWIG_croak("Type error in argument 1 of ScanObj_is_partial_get. Expected _p_ScanObj");
+            }
+        }
+        result = (int) ((arg1)->is_partial);
+        
+        ST(argvi) = sv_newmortal();
+        sv_setiv(ST(argvi++), (IV) result);
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_ScanObj_entries_set) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ScanObj *arg1 ;
+        scanEntry *arg2 ;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 2) || (items > 2)) {
+            SWIG_croak("Usage: ScanObj_entries_set(self,entries);");
+        }
+        {
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_ScanObj,0) < 0) {
+                SWIG_croak("Type error in argument 1 of ScanObj_entries_set. Expected _p_ScanObj");
+            }
+        }
+        {
+            if (SWIG_ConvertPtr(ST(1), (void **) &arg2, SWIGTYPE_p_scanEntry,0) < 0) {
+                SWIG_croak("Type error in argument 2 of ScanObj_entries_set. Expected _p_scanEntry");
+            }
+        }
+        if (arg1) (arg1)->entries = arg2;
+        
+        
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_ScanObj_entries_get) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ScanObj *arg1 ;
+        scanEntry *result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: ScanObj_entries_get(self);");
+        }
+        {
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_ScanObj,0) < 0) {
+                SWIG_croak("Type error in argument 1 of ScanObj_entries_get. Expected _p_ScanObj");
+            }
+        }
+        result = (scanEntry *) ((arg1)->entries);
+        
+        ST(argvi) = sv_newmortal();
+        SWIG_MakePtr(ST(argvi++), (void *) result, SWIGTYPE_p_scanEntry,0);
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_new_ScanObj) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ScanObj *result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 0) || (items > 0)) {
+            SWIG_croak("Usage: new_ScanObj();");
+        }
+        result = (ScanObj *)(ScanObj *) calloc(1, sizeof(ScanObj));
+        
+        ST(argvi) = sv_newmortal();
+        SWIG_MakePtr(ST(argvi++), (void *) result, SWIGTYPE_p_ScanObj,0);
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_delete_ScanObj) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ScanObj *arg1 ;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: delete_ScanObj(self);");
+        }
+        {
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_ScanObj,0) < 0) {
+                SWIG_croak("Type error in argument 1 of delete_ScanObj. Expected _p_ScanObj");
+            }
+        }
+        free((char *) arg1);
+        
+        
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_ZebraTransactionStatus_processed_set) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraTransactionStatus *arg1 ;
+        int arg2 ;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 2) || (items > 2)) {
+            SWIG_croak("Usage: ZebraTransactionStatus_processed_set(self,processed);");
+        }
+        {
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_ZebraTransactionStatus,0) < 0) {
+                SWIG_croak("Type error in argument 1 of ZebraTransactionStatus_processed_set. Expected _p_ZebraTransactionStatus");
+            }
+        }
+        arg2 = (int) SvIV(ST(1));
+        if (arg1) (arg1)->processed = arg2;
+        
+        
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_ZebraTransactionStatus_processed_get) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraTransactionStatus *arg1 ;
+        int result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: ZebraTransactionStatus_processed_get(self);");
+        }
+        {
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_ZebraTransactionStatus,0) < 0) {
+                SWIG_croak("Type error in argument 1 of ZebraTransactionStatus_processed_get. Expected _p_ZebraTransactionStatus");
+            }
+        }
+        result = (int) ((arg1)->processed);
+        
+        ST(argvi) = sv_newmortal();
+        sv_setiv(ST(argvi++), (IV) result);
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_ZebraTransactionStatus_inserted_set) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraTransactionStatus *arg1 ;
+        int arg2 ;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 2) || (items > 2)) {
+            SWIG_croak("Usage: ZebraTransactionStatus_inserted_set(self,inserted);");
+        }
+        {
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_ZebraTransactionStatus,0) < 0) {
+                SWIG_croak("Type error in argument 1 of ZebraTransactionStatus_inserted_set. Expected _p_ZebraTransactionStatus");
+            }
+        }
+        arg2 = (int) SvIV(ST(1));
+        if (arg1) (arg1)->inserted = arg2;
+        
+        
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_ZebraTransactionStatus_inserted_get) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraTransactionStatus *arg1 ;
+        int result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: ZebraTransactionStatus_inserted_get(self);");
+        }
+        {
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_ZebraTransactionStatus,0) < 0) {
+                SWIG_croak("Type error in argument 1 of ZebraTransactionStatus_inserted_get. Expected _p_ZebraTransactionStatus");
+            }
+        }
+        result = (int) ((arg1)->inserted);
+        
+        ST(argvi) = sv_newmortal();
+        sv_setiv(ST(argvi++), (IV) result);
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_ZebraTransactionStatus_updated_set) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraTransactionStatus *arg1 ;
+        int arg2 ;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 2) || (items > 2)) {
+            SWIG_croak("Usage: ZebraTransactionStatus_updated_set(self,updated);");
+        }
+        {
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_ZebraTransactionStatus,0) < 0) {
+                SWIG_croak("Type error in argument 1 of ZebraTransactionStatus_updated_set. Expected _p_ZebraTransactionStatus");
+            }
+        }
+        arg2 = (int) SvIV(ST(1));
+        if (arg1) (arg1)->updated = arg2;
+        
+        
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_ZebraTransactionStatus_updated_get) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraTransactionStatus *arg1 ;
+        int result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: ZebraTransactionStatus_updated_get(self);");
+        }
+        {
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_ZebraTransactionStatus,0) < 0) {
+                SWIG_croak("Type error in argument 1 of ZebraTransactionStatus_updated_get. Expected _p_ZebraTransactionStatus");
+            }
+        }
+        result = (int) ((arg1)->updated);
+        
+        ST(argvi) = sv_newmortal();
+        sv_setiv(ST(argvi++), (IV) result);
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_ZebraTransactionStatus_deleted_set) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraTransactionStatus *arg1 ;
+        int arg2 ;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 2) || (items > 2)) {
+            SWIG_croak("Usage: ZebraTransactionStatus_deleted_set(self,deleted);");
+        }
+        {
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_ZebraTransactionStatus,0) < 0) {
+                SWIG_croak("Type error in argument 1 of ZebraTransactionStatus_deleted_set. Expected _p_ZebraTransactionStatus");
+            }
+        }
+        arg2 = (int) SvIV(ST(1));
+        if (arg1) (arg1)->deleted = arg2;
+        
+        
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_ZebraTransactionStatus_deleted_get) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraTransactionStatus *arg1 ;
+        int result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: ZebraTransactionStatus_deleted_get(self);");
+        }
+        {
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_ZebraTransactionStatus,0) < 0) {
+                SWIG_croak("Type error in argument 1 of ZebraTransactionStatus_deleted_get. Expected _p_ZebraTransactionStatus");
+            }
+        }
+        result = (int) ((arg1)->deleted);
+        
+        ST(argvi) = sv_newmortal();
+        sv_setiv(ST(argvi++), (IV) result);
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_ZebraTransactionStatus_utime_set) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraTransactionStatus *arg1 ;
+        long arg2 ;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 2) || (items > 2)) {
+            SWIG_croak("Usage: ZebraTransactionStatus_utime_set(self,utime);");
+        }
+        {
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_ZebraTransactionStatus,0) < 0) {
+                SWIG_croak("Type error in argument 1 of ZebraTransactionStatus_utime_set. Expected _p_ZebraTransactionStatus");
+            }
+        }
+        arg2 = (long) SvIV(ST(1));
+        if (arg1) (arg1)->utime = arg2;
+        
+        
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_ZebraTransactionStatus_utime_get) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraTransactionStatus *arg1 ;
+        long result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: ZebraTransactionStatus_utime_get(self);");
+        }
+        {
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_ZebraTransactionStatus,0) < 0) {
+                SWIG_croak("Type error in argument 1 of ZebraTransactionStatus_utime_get. Expected _p_ZebraTransactionStatus");
+            }
+        }
+        result = (long) ((arg1)->utime);
+        
+        ST(argvi) = sv_newmortal();
+        sv_setiv(ST(argvi++), (IV) result);
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_ZebraTransactionStatus_stime_set) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraTransactionStatus *arg1 ;
+        long arg2 ;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 2) || (items > 2)) {
+            SWIG_croak("Usage: ZebraTransactionStatus_stime_set(self,stime);");
+        }
+        {
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_ZebraTransactionStatus,0) < 0) {
+                SWIG_croak("Type error in argument 1 of ZebraTransactionStatus_stime_set. Expected _p_ZebraTransactionStatus");
+            }
+        }
+        arg2 = (long) SvIV(ST(1));
+        if (arg1) (arg1)->stime = arg2;
+        
+        
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_ZebraTransactionStatus_stime_get) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraTransactionStatus *arg1 ;
+        long result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: ZebraTransactionStatus_stime_get(self);");
+        }
+        {
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_ZebraTransactionStatus,0) < 0) {
+                SWIG_croak("Type error in argument 1 of ZebraTransactionStatus_stime_get. Expected _p_ZebraTransactionStatus");
+            }
+        }
+        result = (long) ((arg1)->stime);
+        
+        ST(argvi) = sv_newmortal();
+        sv_setiv(ST(argvi++), (IV) result);
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_new_ZebraTransactionStatus) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraTransactionStatus *result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 0) || (items > 0)) {
+            SWIG_croak("Usage: new_ZebraTransactionStatus();");
+        }
+        result = (ZebraTransactionStatus *)(ZebraTransactionStatus *) calloc(1, sizeof(ZebraTransactionStatus));
+        
+        ST(argvi) = sv_newmortal();
+        SWIG_MakePtr(ST(argvi++), (void *) result, SWIGTYPE_p_ZebraTransactionStatus,0);
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_delete_ZebraTransactionStatus) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraTransactionStatus *arg1 ;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: delete_ZebraTransactionStatus(self);");
+        }
+        {
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_ZebraTransactionStatus,0) < 0) {
+                SWIG_croak("Type error in argument 1 of delete_ZebraTransactionStatus. Expected _p_ZebraTransactionStatus");
+            }
+        }
+        free((char *) arg1);
+        
+        
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_init__SWIG_0) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 0) || (items > 0)) {
+            SWIG_croak("Usage: init();");
+        }
+        init();
+        
+        
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_DESTROY) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 0) || (items > 0)) {
+            SWIG_croak("Usage: DESTROY();");
+        }
+        DESTROY();
+        
+        
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_logLevel) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        int arg1 ;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: logLevel(level);");
+        }
+        arg1 = (int) SvIV(ST(0));
+        logLevel(arg1);
+        
+        
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_logFile) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        char *arg1 ;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: logFile(fname);");
+        }
+        if (!SvOK((SV*) ST(0))) arg1 = 0;
+        else arg1 = (char *) SvPV(ST(0), PL_na);
+        logFile((char const *)arg1);
+        
+        
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_logMsg) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        int arg1 ;
+        char *arg2 ;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 2) || (items > 2)) {
+            SWIG_croak("Usage: logMsg(level,message);");
+        }
+        arg1 = (int) SvIV(ST(0));
+        if (!SvOK((SV*) ST(1))) arg2 = 0;
+        else arg2 = (char *) SvPV(ST(1), PL_na);
+        logMsg(arg1,(char const *)arg2);
+        
+        
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_odr_createmem) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        int arg1 ;
+        ODR result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: odr_createmem(direction);");
+        }
+        arg1 = (int) SvIV(ST(0));
+        result = odr_createmem(arg1);
+        
+        {
+            ODR * resultobj = (ODR *) malloc(sizeof(ODR));
+            memmove(resultobj, &result, sizeof(ODR));
+            ST(argvi) = sv_newmortal();
+            SWIG_MakePtr(ST(argvi++), (void *) resultobj, SWIGTYPE_p_ODR,0);
+        }
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_odr_reset) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ODR arg1 ;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: odr_reset(o);");
+        }
+        {
+            ODR * argp;
+            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ODR,0) < 0) {
+                SWIG_croak("Type error in argument 1 of odr_reset. Expected _p_ODR");
+            }
+            arg1 = *argp;
+        }
+        odr_reset(arg1);
+        
+        
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_odr_destroy) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ODR arg1 ;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: odr_destroy(o);");
+        }
+        {
+            ODR * argp;
+            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ODR,0) < 0) {
+                SWIG_croak("Type error in argument 1 of odr_destroy. Expected _p_ODR");
+            }
+            arg1 = *argp;
+        }
+        odr_destroy(arg1);
+        
+        
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_odr_malloc) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ODR arg1 ;
+        int arg2 ;
+        void *result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 2) || (items > 2)) {
+            SWIG_croak("Usage: odr_malloc(o,size);");
+        }
+        {
+            ODR * argp;
+            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ODR,0) < 0) {
+                SWIG_croak("Type error in argument 1 of odr_malloc. Expected _p_ODR");
+            }
+            arg1 = *argp;
+        }
+        arg2 = (int) SvIV(ST(1));
+        result = (void *)odr_malloc(arg1,arg2);
+        
+        ST(argvi) = sv_newmortal();
+        SWIG_MakePtr(ST(argvi++), (void *) result, SWIGTYPE_p_void,0);
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_start) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        char *arg1 ;
+        ZebraService result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: start(configName);");
+        }
+        if (!SvOK((SV*) ST(0))) arg1 = 0;
+        else arg1 = (char *) SvPV(ST(0), PL_na);
+        result = zebra_start((char const *)arg1);
+        
+        {
+            ZebraService * resultobj = (ZebraService *) malloc(sizeof(ZebraService));
+            memmove(resultobj, &result, sizeof(ZebraService));
+            ST(argvi) = sv_newmortal();
+            SWIG_MakePtr(ST(argvi++), (void *) resultobj, SWIGTYPE_p_ZebraService,0);
+        }
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_open) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraService arg1 ;
+        ZebraHandle result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: open(zs);");
+        }
+        {
+            ZebraService * argp;
+            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraService,0) < 0) {
+                SWIG_croak("Type error in argument 1 of open. Expected _p_ZebraService");
+            }
+            arg1 = *argp;
+        }
+        result = zebra_open(arg1);
+        
+        {
+            ZebraHandle * resultobj = (ZebraHandle *) malloc(sizeof(ZebraHandle));
+            memmove(resultobj, &result, sizeof(ZebraHandle));
+            ST(argvi) = sv_newmortal();
+            SWIG_MakePtr(ST(argvi++), (void *) resultobj, SWIGTYPE_p_ZebraHandle,0);
+        }
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_close) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraHandle arg1 ;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: close(zh);");
+        }
+        {
+            ZebraHandle * argp;
+            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
+                SWIG_croak("Type error in argument 1 of close. Expected _p_ZebraHandle");
+            }
+            arg1 = *argp;
+        }
+        zebra_close(arg1);
+        
+        
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_stop) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraService arg1 ;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: stop(zs);");
+        }
+        {
+            ZebraService * argp;
+            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraService,0) < 0) {
+                SWIG_croak("Type error in argument 1 of stop. Expected _p_ZebraService");
+            }
+            arg1 = *argp;
+        }
+        zebra_stop(arg1);
+        
+        
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_errCode) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraHandle arg1 ;
+        int result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: errCode(zh);");
+        }
+        {
+            ZebraHandle * argp;
+            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
+                SWIG_croak("Type error in argument 1 of errCode. Expected _p_ZebraHandle");
+            }
+            arg1 = *argp;
+        }
+        result = (int)zebra_errCode(arg1);
+        
+        ST(argvi) = sv_newmortal();
+        sv_setiv(ST(argvi++), (IV) result);
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_errString) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraHandle arg1 ;
+        char *result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: errString(zh);");
+        }
+        {
+            ZebraHandle * argp;
+            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
+                SWIG_croak("Type error in argument 1 of errString. Expected _p_ZebraHandle");
+            }
+            arg1 = *argp;
+        }
+        result = (char *)zebra_errString(arg1);
+        
+        ST(argvi) = sv_newmortal();
+        if (result) {
+            sv_setpv((SV*)ST(argvi++), (char *) result);
+        }else {
+            sv_setsv((SV*)ST(argvi++), &PL_sv_undef);
+        }
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_errAdd) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraHandle arg1 ;
+        char *result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: errAdd(zh);");
+        }
+        {
+            ZebraHandle * argp;
+            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
+                SWIG_croak("Type error in argument 1 of errAdd. Expected _p_ZebraHandle");
+            }
+            arg1 = *argp;
+        }
+        result = (char *)zebra_errAdd(arg1);
+        
+        ST(argvi) = sv_newmortal();
+        if (result) {
+            sv_setpv((SV*)ST(argvi++), (char *) result);
+        }else {
+            sv_setsv((SV*)ST(argvi++), &PL_sv_undef);
+        }
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_init_recordGroup) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        recordGroup *arg1 ;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: init_recordGroup(rg);");
+        }
+        {
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_recordGroup,0) < 0) {
+                SWIG_croak("Type error in argument 1 of init_recordGroup. Expected _p_recordGroup");
+            }
+        }
+        init_recordGroup(arg1);
+        
+        
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_res_get_recordGroup) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraHandle arg1 ;
+        recordGroup *arg2 ;
+        char *arg3 ;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 3) || (items > 3)) {
+            SWIG_croak("Usage: res_get_recordGroup(zh,rg,ext);");
+        }
+        {
+            ZebraHandle * argp;
+            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
+                SWIG_croak("Type error in argument 1 of res_get_recordGroup. Expected _p_ZebraHandle");
+            }
+            arg1 = *argp;
+        }
+        {
+            if (SWIG_ConvertPtr(ST(1), (void **) &arg2, SWIGTYPE_p_recordGroup,0) < 0) {
+                SWIG_croak("Type error in argument 2 of res_get_recordGroup. Expected _p_recordGroup");
+            }
+        }
+        if (!SvOK((SV*) ST(2))) arg3 = 0;
+        else arg3 = (char *) SvPV(ST(2), PL_na);
+        res_get_recordGroup(arg1,arg2,(char const *)arg3);
+        
+        
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_set_group) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraHandle arg1 ;
+        struct recordGroup *arg2 ;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 2) || (items > 2)) {
+            SWIG_croak("Usage: set_group(zh,rg);");
+        }
+        {
+            ZebraHandle * argp;
+            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
+                SWIG_croak("Type error in argument 1 of set_group. Expected _p_ZebraHandle");
+            }
+            arg1 = *argp;
+        }
+        {
+            if (SWIG_ConvertPtr(ST(1), (void **) &arg2, SWIGTYPE_p_recordGroup,0) < 0) {
+                SWIG_croak("Type error in argument 2 of set_group. Expected _p_recordGroup");
+            }
+        }
+        zebra_set_group(arg1,arg2);
+        
+        
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_select_database) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraHandle arg1 ;
+        char *arg2 ;
+        int result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 2) || (items > 2)) {
+            SWIG_croak("Usage: select_database(zh,basename);");
+        }
+        {
+            ZebraHandle * argp;
+            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
+                SWIG_croak("Type error in argument 1 of select_database. Expected _p_ZebraHandle");
+            }
+            arg1 = *argp;
+        }
+        if (!SvOK((SV*) ST(1))) arg2 = 0;
+        else arg2 = (char *) SvPV(ST(1), PL_na);
+        result = (int)zebra_select_database(arg1,(char const *)arg2);
+        
+        ST(argvi) = sv_newmortal();
+        sv_setiv(ST(argvi++), (IV) result);
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_select_databases) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraHandle arg1 ;
+        int arg2 ;
+        char **arg3 ;
+        int result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 3) || (items > 3)) {
+            SWIG_croak("Usage: select_databases(zh,num_bases,basenames);");
+        }
+        {
+            ZebraHandle * argp;
+            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
+                SWIG_croak("Type error in argument 1 of select_databases. Expected _p_ZebraHandle");
+            }
+            arg1 = *argp;
+        }
+        arg2 = (int) SvIV(ST(1));
+        {
+            AV *tempav;
+            I32 len;
+            int i;
+            SV  **tv;
+            STRLEN na;
+            if (!SvROK(ST(2)))
+            croak("Argument 3 is not a reference.");
+            if (SvTYPE(SvRV(ST(2))) != SVt_PVAV)
+            croak("Argument 3 is not an array.");
+            tempav = (AV*)SvRV(ST(2));
+            len = av_len(tempav);
+            arg3 = (char **) malloc((len+2)*sizeof(char *));
+            for (i = 0; i <= len; i++) {
+                tv = av_fetch(tempav, i, 0);   
+                arg3[i] = (char *) SvPV(*tv,na);
+            }
+            arg3[i] = NULL;
+        }
+        result = (int)zebra_select_databases(arg1,arg2,(char const **)arg3);
+        
+        ST(argvi) = sv_newmortal();
+        sv_setiv(ST(argvi++), (IV) result);
+        {
+            free(arg3);
+        }
+        XSRETURN(argvi);
+        fail:
+        {
+            free(arg3);
+        }
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_begin_trans) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraHandle arg1 ;
+        int arg2 ;
+        int result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 2) || (items > 2)) {
+            SWIG_croak("Usage: begin_trans(zh,rw);");
+        }
+        {
+            ZebraHandle * argp;
+            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
+                SWIG_croak("Type error in argument 1 of begin_trans. Expected _p_ZebraHandle");
+            }
+            arg1 = *argp;
+        }
+        arg2 = (int) SvIV(ST(1));
+        result = (int)zebra_begin_trans(arg1,arg2);
+        
+        ST(argvi) = sv_newmortal();
+        sv_setiv(ST(argvi++), (IV) result);
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_end_trans) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraHandle arg1 ;
+        ZebraTransactionStatus *arg2 ;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 2) || (items > 2)) {
+            SWIG_croak("Usage: end_trans(zh,stat);");
+        }
+        {
+            ZebraHandle * argp;
+            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
+                SWIG_croak("Type error in argument 1 of end_trans. Expected _p_ZebraHandle");
+            }
+            arg1 = *argp;
+        }
+        {
+            if (SWIG_ConvertPtr(ST(1), (void **) &arg2, SWIGTYPE_p_ZebraTransactionStatus,0) < 0) {
+                SWIG_croak("Type error in argument 2 of end_trans. Expected _p_ZebraTransactionStatus");
+            }
+        }
+        zebra_end_transaction(arg1,arg2);
+        
+        
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_trans_no) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraHandle arg1 ;
+        int result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: trans_no(zh);");
+        }
+        {
+            ZebraHandle * argp;
+            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
+                SWIG_croak("Type error in argument 1 of trans_no. Expected _p_ZebraHandle");
+            }
+            arg1 = *argp;
+        }
+        result = (int)zebra_trans_no(arg1);
+        
+        ST(argvi) = sv_newmortal();
+        sv_setiv(ST(argvi++), (IV) result);
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_commit) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraHandle arg1 ;
+        int result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: commit(zh);");
+        }
+        {
+            ZebraHandle * argp;
+            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
+                SWIG_croak("Type error in argument 1 of commit. Expected _p_ZebraHandle");
+            }
+            arg1 = *argp;
+        }
+        result = (int)zebra_commit(arg1);
+        
+        ST(argvi) = sv_newmortal();
+        sv_setiv(ST(argvi++), (IV) result);
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_get_shadow_enable) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraHandle arg1 ;
+        int result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: get_shadow_enable(zh);");
+        }
+        {
+            ZebraHandle * argp;
+            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
+                SWIG_croak("Type error in argument 1 of get_shadow_enable. Expected _p_ZebraHandle");
+            }
+            arg1 = *argp;
+        }
+        result = (int)zebra_get_shadow_enable(arg1);
+        
+        ST(argvi) = sv_newmortal();
+        sv_setiv(ST(argvi++), (IV) result);
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_set_shadow_enable) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraHandle arg1 ;
+        int arg2 ;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 2) || (items > 2)) {
+            SWIG_croak("Usage: set_shadow_enable(zh,value);");
+        }
+        {
+            ZebraHandle * argp;
+            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
+                SWIG_croak("Type error in argument 1 of set_shadow_enable. Expected _p_ZebraHandle");
+            }
+            arg1 = *argp;
+        }
+        arg2 = (int) SvIV(ST(1));
+        zebra_set_shadow_enable(arg1,arg2);
+        
+        
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_init__SWIG_1) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraHandle arg1 ;
+        int result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: init(zh);");
+        }
+        {
+            ZebraHandle * argp;
+            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
+                SWIG_croak("Type error in argument 1 of init. Expected _p_ZebraHandle");
+            }
+            arg1 = *argp;
+        }
+        result = (int)zebra_init(arg1);
+        
+        ST(argvi) = sv_newmortal();
+        sv_setiv(ST(argvi++), (IV) result);
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_init) {
+    dXSARGS;
+    
+    if (items == 0) {
+        int _v;
+        (*PL_markstack_ptr++);SWIG_CALLXS(_wrap_init__SWIG_0); return;
+    }
+    if (items == 1) {
+        int _v;
+        {
+            void *tmp;
+            if (SWIG_ConvertPtr(ST(0), (void **) &tmp, SWIGTYPE_p_ZebraHandle, 0) == -1) {
+                _v = 0;
+            }else {
+                _v = 1;
+            }
+        }
+        if (_v) {
+            (*PL_markstack_ptr++);SWIG_CALLXS(_wrap_init__SWIG_1); return;
+        }
+    }
+    
+    croak("No matching function for overloaded 'init'");
+    XSRETURN(0);
+}
+
+
+XS(_wrap_compact) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraHandle arg1 ;
+        int result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: compact(zh);");
+        }
+        {
+            ZebraHandle * argp;
+            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
+                SWIG_croak("Type error in argument 1 of compact. Expected _p_ZebraHandle");
+            }
+            arg1 = *argp;
+        }
+        result = (int)zebra_compact(arg1);
+        
+        ST(argvi) = sv_newmortal();
+        sv_setiv(ST(argvi++), (IV) result);
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_repository_update) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraHandle arg1 ;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: repository_update(zh);");
+        }
+        {
+            ZebraHandle * argp;
+            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
+                SWIG_croak("Type error in argument 1 of repository_update. Expected _p_ZebraHandle");
+            }
+            arg1 = *argp;
+        }
+        zebra_repository_update(arg1);
+        
+        
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_repository_delete) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraHandle arg1 ;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: repository_delete(zh);");
+        }
+        {
+            ZebraHandle * argp;
+            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
+                SWIG_croak("Type error in argument 1 of repository_delete. Expected _p_ZebraHandle");
+            }
+            arg1 = *argp;
+        }
+        zebra_repository_delete(arg1);
+        
+        
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_repository_show) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraHandle arg1 ;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: repository_show(zh);");
+        }
+        {
+            ZebraHandle * argp;
+            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
+                SWIG_croak("Type error in argument 1 of repository_show. Expected _p_ZebraHandle");
+            }
+            arg1 = *argp;
+        }
+        zebra_repository_show(arg1);
+        
+        
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_insert_record) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraHandle arg1 ;
+        recordGroup *arg2 ;
+        char *arg3 ;
+        int arg4 ;
+        char *arg5 ;
+        char *arg6 ;
+        char *arg7 ;
+        int arg8 ;
+        int arg9 ;
+        int result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 9) || (items > 9)) {
+            SWIG_croak("Usage: insert_record(zh,rGroup,recordType,sysno,match,fname,buf,buf_size,force_update);");
+        }
+        {
+            ZebraHandle * argp;
+            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
+                SWIG_croak("Type error in argument 1 of insert_record. Expected _p_ZebraHandle");
+            }
+            arg1 = *argp;
+        }
+        {
+            if (SWIG_ConvertPtr(ST(1), (void **) &arg2, SWIGTYPE_p_recordGroup,0) < 0) {
+                SWIG_croak("Type error in argument 2 of insert_record. Expected _p_recordGroup");
+            }
+        }
+        if (!SvOK((SV*) ST(2))) arg3 = 0;
+        else arg3 = (char *) SvPV(ST(2), PL_na);
+        arg4 = (int) SvIV(ST(3));
+        if (!SvOK((SV*) ST(4))) arg5 = 0;
+        else arg5 = (char *) SvPV(ST(4), PL_na);
+        if (!SvOK((SV*) ST(5))) arg6 = 0;
+        else arg6 = (char *) SvPV(ST(5), PL_na);
+        if (!SvOK((SV*) ST(6))) arg7 = 0;
+        else arg7 = (char *) SvPV(ST(6), PL_na);
+        arg8 = (int) SvIV(ST(7));
+        arg9 = (int) SvIV(ST(8));
+        result = (int)zebra_insert_record(arg1,arg2,(char const *)arg3,arg4,(char const *)arg5,(char const *)arg6,(char const *)arg7,arg8,arg9);
+        
+        ST(argvi) = sv_newmortal();
+        sv_setiv(ST(argvi++), (IV) result);
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_update_record) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraHandle arg1 ;
+        recordGroup *arg2 ;
+        char *arg3 ;
+        int arg4 ;
         char *arg5 ;
         char *arg6 ;
-        int arg7 ;
+        char *arg7 ;
+        int arg8 ;
+        int arg9 ;
         int result;
         int argvi = 0;
         dXSARGS;
         
-        if ((items < 7) || (items > 7)) {
-            SWIG_croak("Usage: update_record(zh,rGroup,sysno,match,fname,buf,buf_size);");
+        if ((items < 9) || (items > 9)) {
+            SWIG_croak("Usage: update_record(zh,rGroup,recordType,sysno,match,fname,buf,buf_size,force_update);");
         }
         {
             ZebraHandle * argp;
@@ -2406,15 +4063,281 @@ XS(_wrap_update_record) {
                 SWIG_croak("Type error in argument 2 of update_record. Expected _p_recordGroup");
             }
         }
-        arg3 = (int) SvIV(ST(2));
-        if (!SvOK((SV*) ST(3))) arg4 = 0;
-        else arg4 = (char *) SvPV(ST(3), PL_na);
-        if (!SvOK((SV*) ST(4))) arg5 = 0;
-        else arg5 = (char *) SvPV(ST(4), PL_na);
-        if (!SvOK((SV*) ST(5))) arg6 = 0;
-        else arg6 = (char *) SvPV(ST(5), PL_na);
-        arg7 = (int) SvIV(ST(6));
-        result = (int)zebra_update_record(arg1,arg2,arg3,(char const *)arg4,(char const *)arg5,(char const *)arg6,arg7);
+        if (!SvOK((SV*) ST(2))) arg3 = 0;
+        else arg3 = (char *) SvPV(ST(2), PL_na);
+        arg4 = (int) SvIV(ST(3));
+        if (!SvOK((SV*) ST(4))) arg5 = 0;
+        else arg5 = (char *) SvPV(ST(4), PL_na);
+        if (!SvOK((SV*) ST(5))) arg6 = 0;
+        else arg6 = (char *) SvPV(ST(5), PL_na);
+        if (!SvOK((SV*) ST(6))) arg7 = 0;
+        else arg7 = (char *) SvPV(ST(6), PL_na);
+        arg8 = (int) SvIV(ST(7));
+        arg9 = (int) SvIV(ST(8));
+        result = (int)zebra_update_record(arg1,arg2,(char const *)arg3,arg4,(char const *)arg5,(char const *)arg6,(char const *)arg7,arg8,arg9);
+        
+        ST(argvi) = sv_newmortal();
+        sv_setiv(ST(argvi++), (IV) result);
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_delete_record) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraHandle arg1 ;
+        recordGroup *arg2 ;
+        char *arg3 ;
+        int arg4 ;
+        char *arg5 ;
+        char *arg6 ;
+        char *arg7 ;
+        int arg8 ;
+        int arg9 ;
+        int result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 9) || (items > 9)) {
+            SWIG_croak("Usage: delete_record(zh,rGroup,recordType,sysno,match,fname,buf,buf_size,force_update);");
+        }
+        {
+            ZebraHandle * argp;
+            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
+                SWIG_croak("Type error in argument 1 of delete_record. Expected _p_ZebraHandle");
+            }
+            arg1 = *argp;
+        }
+        {
+            if (SWIG_ConvertPtr(ST(1), (void **) &arg2, SWIGTYPE_p_recordGroup,0) < 0) {
+                SWIG_croak("Type error in argument 2 of delete_record. Expected _p_recordGroup");
+            }
+        }
+        if (!SvOK((SV*) ST(2))) arg3 = 0;
+        else arg3 = (char *) SvPV(ST(2), PL_na);
+        arg4 = (int) SvIV(ST(3));
+        if (!SvOK((SV*) ST(4))) arg5 = 0;
+        else arg5 = (char *) SvPV(ST(4), PL_na);
+        if (!SvOK((SV*) ST(5))) arg6 = 0;
+        else arg6 = (char *) SvPV(ST(5), PL_na);
+        if (!SvOK((SV*) ST(6))) arg7 = 0;
+        else arg7 = (char *) SvPV(ST(6), PL_na);
+        arg8 = (int) SvIV(ST(7));
+        arg9 = (int) SvIV(ST(8));
+        result = (int)zebra_delete_record(arg1,arg2,(char const *)arg3,arg4,(char const *)arg5,(char const *)arg6,(char const *)arg7,arg8,arg9);
+        
+        ST(argvi) = sv_newmortal();
+        sv_setiv(ST(argvi++), (IV) result);
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_search_PQF) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        ZebraHandle arg1 ;
+        ODR arg2 ;
+        ODR arg3 ;
+        char *arg4 ;
+        char *arg5 ;
+        int result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 5) || (items > 5)) {
+            SWIG_croak("Usage: search_PQF(zh,odr_input,odr_output,pqf_query,setname);");
+        }
+        {
+            ZebraHandle * argp;
+            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
+                SWIG_croak("Type error in argument 1 of search_PQF. Expected _p_ZebraHandle");
+            }
+            arg1 = *argp;
+        }
+        {
+            ODR * argp;
+            if (SWIG_ConvertPtr(ST(1),(void **) &argp, SWIGTYPE_p_ODR,0) < 0) {
+                SWIG_croak("Type error in argument 2 of search_PQF. Expected _p_ODR");
+            }
+            arg2 = *argp;
+        }
+        {
+            ODR * argp;
+            if (SWIG_ConvertPtr(ST(2),(void **) &argp, SWIGTYPE_p_ODR,0) < 0) {
+                SWIG_croak("Type error in argument 3 of search_PQF. Expected _p_ODR");
+            }
+            arg3 = *argp;
+        }
+        if (!SvOK((SV*) ST(3))) arg4 = 0;
+        else arg4 = (char *) SvPV(ST(3), PL_na);
+        if (!SvOK((SV*) ST(4))) arg5 = 0;
+        else arg5 = (char *) SvPV(ST(4), PL_na);
+        result = (int)zebra_search_PQF(arg1,arg2,arg3,(char const *)arg4,(char const *)arg5);
+        
+        ST(argvi) = sv_newmortal();
+        sv_setiv(ST(argvi++), (IV) result);
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_cql_transform_open_fname) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        char *arg1 ;
+        cql_transform_t result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: cql_transform_open_fname(fname);");
+        }
+        if (!SvOK((SV*) ST(0))) arg1 = 0;
+        else arg1 = (char *) SvPV(ST(0), PL_na);
+        result = cql_transform_open_fname((char const *)arg1);
+        
+        {
+            cql_transform_t * resultobj = (cql_transform_t *) malloc(sizeof(cql_transform_t));
+            memmove(resultobj, &result, sizeof(cql_transform_t));
+            ST(argvi) = sv_newmortal();
+            SWIG_MakePtr(ST(argvi++), (void *) resultobj, SWIGTYPE_p_cql_transform_t,0);
+        }
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_cql_transform_close) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        cql_transform_t arg1 ;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: cql_transform_close(ct);");
+        }
+        {
+            cql_transform_t * argp;
+            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_cql_transform_t,0) < 0) {
+                SWIG_croak("Type error in argument 1 of cql_transform_close. Expected _p_cql_transform_t");
+            }
+            arg1 = *argp;
+        }
+        cql_transform_close(arg1);
+        
+        
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_cql_transform_error) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        cql_transform_t arg1 ;
+        char **arg2 ;
+        int result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 2) || (items > 2)) {
+            SWIG_croak("Usage: cql_transform_error(ct,addinfo);");
+        }
+        {
+            cql_transform_t * argp;
+            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_cql_transform_t,0) < 0) {
+                SWIG_croak("Type error in argument 1 of cql_transform_error. Expected _p_cql_transform_t");
+            }
+            arg1 = *argp;
+        }
+        {
+            AV *tempav;
+            I32 len;
+            int i;
+            SV  **tv;
+            STRLEN na;
+            if (!SvROK(ST(1)))
+            croak("Argument 2 is not a reference.");
+            if (SvTYPE(SvRV(ST(1))) != SVt_PVAV)
+            croak("Argument 2 is not an array.");
+            tempav = (AV*)SvRV(ST(1));
+            len = av_len(tempav);
+            arg2 = (char **) malloc((len+2)*sizeof(char *));
+            for (i = 0; i <= len; i++) {
+                tv = av_fetch(tempav, i, 0);   
+                arg2[i] = (char *) SvPV(*tv,na);
+            }
+            arg2[i] = NULL;
+        }
+        result = (int)cql_transform_error(arg1,(char const **)arg2);
+        
+        ST(argvi) = sv_newmortal();
+        sv_setiv(ST(argvi++), (IV) result);
+        {
+            free(arg2);
+        }
+        XSRETURN(argvi);
+        fail:
+        {
+            free(arg2);
+        }
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_cql2pqf) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        cql_transform_t arg1 ;
+        char *arg2 ;
+        char *arg3 ;
+        int arg4 ;
+        int result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 4) || (items > 4)) {
+            SWIG_croak("Usage: cql2pqf(ct,query,res,len);");
+        }
+        {
+            cql_transform_t * argp;
+            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_cql_transform_t,0) < 0) {
+                SWIG_croak("Type error in argument 1 of cql2pqf. Expected _p_cql_transform_t");
+            }
+            arg1 = *argp;
+        }
+        if (!SvOK((SV*) ST(1))) arg2 = 0;
+        else arg2 = (char *) SvPV(ST(1), PL_na);
+        if (!SvOK((SV*) ST(2))) arg3 = 0;
+        else arg3 = (char *) SvPV(ST(2), PL_na);
+        arg4 = (int) SvIV(ST(3));
+        result = (int)zebra_cql2pqf(arg1,(char const *)arg2,arg3,arg4);
         
         ST(argvi) = sv_newmortal();
         sv_setiv(ST(argvi++), (IV) result);
@@ -2426,37 +4349,41 @@ XS(_wrap_update_record) {
 }
 
 
-XS(_wrap_delete_record) {
+XS(_wrap_records_retrieve) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
         ZebraHandle arg1 ;
-        recordGroup *arg2 ;
-        int arg3 ;
+        ODR arg2 ;
+        char *arg3 ;
         char *arg4 ;
         char *arg5 ;
         char *arg6 ;
         int arg7 ;
-        int result;
+        int arg8 ;
+        RetrievalObj *arg9 ;
         int argvi = 0;
         dXSARGS;
         
-        if ((items < 7) || (items > 7)) {
-            SWIG_croak("Usage: delete_record(zh,rGroup,sysno,match,fname,buf,buf_size);");
+        if ((items < 9) || (items > 9)) {
+            SWIG_croak("Usage: records_retrieve(zh,stream,setname,a_eset,a_schema,a_format,from,to,res);");
         }
         {
             ZebraHandle * argp;
             if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
-                SWIG_croak("Type error in argument 1 of delete_record. Expected _p_ZebraHandle");
+                SWIG_croak("Type error in argument 1 of records_retrieve. Expected _p_ZebraHandle");
             }
             arg1 = *argp;
         }
         {
-            if (SWIG_ConvertPtr(ST(1), (void **) &arg2, SWIGTYPE_p_recordGroup,0) < 0) {
-                SWIG_croak("Type error in argument 2 of delete_record. Expected _p_recordGroup");
+            ODR * argp;
+            if (SWIG_ConvertPtr(ST(1),(void **) &argp, SWIGTYPE_p_ODR,0) < 0) {
+                SWIG_croak("Type error in argument 2 of records_retrieve. Expected _p_ODR");
             }
+            arg2 = *argp;
         }
-        arg3 = (int) SvIV(ST(2));
+        if (!SvOK((SV*) ST(2))) arg3 = 0;
+        else arg3 = (char *) SvPV(ST(2), PL_na);
         if (!SvOK((SV*) ST(3))) arg4 = 0;
         else arg4 = (char *) SvPV(ST(3), PL_na);
         if (!SvOK((SV*) ST(4))) arg5 = 0;
@@ -2464,10 +4391,15 @@ XS(_wrap_delete_record) {
         if (!SvOK((SV*) ST(5))) arg6 = 0;
         else arg6 = (char *) SvPV(ST(5), PL_na);
         arg7 = (int) SvIV(ST(6));
-        result = (int)zebra_delete_record(arg1,arg2,arg3,(char const *)arg4,(char const *)arg5,(char const *)arg6,arg7);
+        arg8 = (int) SvIV(ST(7));
+        {
+            if (SWIG_ConvertPtr(ST(8), (void **) &arg9, SWIGTYPE_p_RetrievalObj,0) < 0) {
+                SWIG_croak("Type error in argument 9 of records_retrieve. Expected _p_RetrievalObj");
+            }
+        }
+        records_retrieve(arg1,arg2,(char const *)arg3,(char const *)arg4,(char const *)arg5,(char const *)arg6,arg7,arg8,arg9);
+        
         
-        ST(argvi) = sv_newmortal();
-        sv_setiv(ST(argvi++), (IV) result);
         XSRETURN(argvi);
         fail:
         (void) _swigerr;
@@ -2476,29 +4408,41 @@ XS(_wrap_delete_record) {
 }
 
 
-XS(_wrap_begin_read) {
+XS(_wrap_record_retrieve) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
-        ZebraHandle arg1 ;
-        int result;
+        RetrievalObj *arg1 ;
+        ODR arg2 ;
+        RetrievalRecord *arg3 ;
+        int arg4 ;
         int argvi = 0;
         dXSARGS;
         
-        if ((items < 1) || (items > 1)) {
-            SWIG_croak("Usage: begin_read(zh);");
+        if ((items < 4) || (items > 4)) {
+            SWIG_croak("Usage: record_retrieve(ro,stream,res,pos);");
         }
         {
-            ZebraHandle * argp;
-            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
-                SWIG_croak("Type error in argument 1 of begin_read. Expected _p_ZebraHandle");
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_RetrievalObj,0) < 0) {
+                SWIG_croak("Type error in argument 1 of record_retrieve. Expected _p_RetrievalObj");
+            }
+        }
+        {
+            ODR * argp;
+            if (SWIG_ConvertPtr(ST(1),(void **) &argp, SWIGTYPE_p_ODR,0) < 0) {
+                SWIG_croak("Type error in argument 2 of record_retrieve. Expected _p_ODR");
+            }
+            arg2 = *argp;
+        }
+        {
+            if (SWIG_ConvertPtr(ST(2), (void **) &arg3, SWIGTYPE_p_RetrievalRecord,0) < 0) {
+                SWIG_croak("Type error in argument 3 of record_retrieve. Expected _p_RetrievalRecord");
             }
-            arg1 = *argp;
         }
-        result = (int)zebra_begin_read(arg1);
+        arg4 = (int) SvIV(ST(3));
+        record_retrieve(arg1,arg2,arg3,arg4);
+        
         
-        ST(argvi) = sv_newmortal();
-        sv_setiv(ST(argvi++), (IV) result);
         XSRETURN(argvi);
         fail:
         (void) _swigerr;
@@ -2507,107 +4451,182 @@ XS(_wrap_begin_read) {
 }
 
 
-XS(_wrap_end_read) {
+XS(_wrap_deleteResultSet) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
         ZebraHandle arg1 ;
+        int arg2 ;
+        int arg3 ;
+        char **arg4 ;
+        int *arg5 ;
+        int result;
         int argvi = 0;
         dXSARGS;
         
-        if ((items < 1) || (items > 1)) {
-            SWIG_croak("Usage: end_read(zh);");
+        if ((items < 5) || (items > 5)) {
+            SWIG_croak("Usage: deleteResultSet(zh,function,num_setnames,setnames,statuses);");
         }
         {
             ZebraHandle * argp;
             if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
-                SWIG_croak("Type error in argument 1 of end_read. Expected _p_ZebraHandle");
+                SWIG_croak("Type error in argument 1 of deleteResultSet. Expected _p_ZebraHandle");
             }
             arg1 = *argp;
         }
-        zebra_end_read(arg1);
-        
+        arg2 = (int) SvIV(ST(1));
+        arg3 = (int) SvIV(ST(2));
+        {
+            AV *tempav;
+            I32 len;
+            int i;
+            SV  **tv;
+            STRLEN na;
+            if (!SvROK(ST(3)))
+            croak("Argument 4 is not a reference.");
+            if (SvTYPE(SvRV(ST(3))) != SVt_PVAV)
+            croak("Argument 4 is not an array.");
+            tempav = (AV*)SvRV(ST(3));
+            len = av_len(tempav);
+            arg4 = (char **) malloc((len+2)*sizeof(char *));
+            for (i = 0; i <= len; i++) {
+                tv = av_fetch(tempav, i, 0);   
+                arg4[i] = (char *) SvPV(*tv,na);
+            }
+            arg4[i] = NULL;
+        }
+        {
+            int i;
+            if (!SvIOK(ST(4))) 
+            croak("Argument 5 is not an integer.");
+            i = SvIV(ST(4));
+            arg5 = &i;
+        }
+        result = (int)zebra_deleleResultSet(arg1,arg2,arg3,arg4,arg5);
         
+        ST(argvi) = sv_newmortal();
+        sv_setiv(ST(argvi++), (IV) result);
+        {
+            free(arg4);
+        }
         XSRETURN(argvi);
         fail:
+        {
+            free(arg4);
+        }
         (void) _swigerr;
     }
     croak(_swigerr);
 }
 
 
-XS(_wrap_search_PQF) {
+XS(_wrap_sort) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
         ZebraHandle arg1 ;
         ODR arg2 ;
-        ODR arg3 ;
+        char *arg3 ;
         char *arg4 ;
-        char *arg5 ;
+        char **arg5 ;
         int result;
         int argvi = 0;
         dXSARGS;
         
         if ((items < 5) || (items > 5)) {
-            SWIG_croak("Usage: search_PQF(zh,odr_input,odr_output,pqf_query,setname);");
+            SWIG_croak("Usage: sort(zh,stream,sort_spec,output_setname,input_setnames);");
         }
         {
             ZebraHandle * argp;
             if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
-                SWIG_croak("Type error in argument 1 of search_PQF. Expected _p_ZebraHandle");
+                SWIG_croak("Type error in argument 1 of sort. Expected _p_ZebraHandle");
             }
             arg1 = *argp;
         }
         {
             ODR * argp;
             if (SWIG_ConvertPtr(ST(1),(void **) &argp, SWIGTYPE_p_ODR,0) < 0) {
-                SWIG_croak("Type error in argument 2 of search_PQF. Expected _p_ODR");
+                SWIG_croak("Type error in argument 2 of sort. Expected _p_ODR");
             }
             arg2 = *argp;
         }
+        if (!SvOK((SV*) ST(2))) arg3 = 0;
+        else arg3 = (char *) SvPV(ST(2), PL_na);
+        if (!SvOK((SV*) ST(3))) arg4 = 0;
+        else arg4 = (char *) SvPV(ST(3), PL_na);
         {
-            ODR * argp;
-            if (SWIG_ConvertPtr(ST(2),(void **) &argp, SWIGTYPE_p_ODR,0) < 0) {
-                SWIG_croak("Type error in argument 3 of search_PQF. Expected _p_ODR");
+            AV *tempav;
+            I32 len;
+            int i;
+            SV  **tv;
+            STRLEN na;
+            if (!SvROK(ST(4)))
+            croak("Argument 5 is not a reference.");
+            if (SvTYPE(SvRV(ST(4))) != SVt_PVAV)
+            croak("Argument 5 is not an array.");
+            tempav = (AV*)SvRV(ST(4));
+            len = av_len(tempav);
+            arg5 = (char **) malloc((len+2)*sizeof(char *));
+            for (i = 0; i <= len; i++) {
+                tv = av_fetch(tempav, i, 0);   
+                arg5[i] = (char *) SvPV(*tv,na);
             }
-            arg3 = *argp;
+            arg5[i] = NULL;
         }
-        if (!SvOK((SV*) ST(3))) arg4 = 0;
-        else arg4 = (char *) SvPV(ST(3), PL_na);
-        if (!SvOK((SV*) ST(4))) arg5 = 0;
-        else arg5 = (char *) SvPV(ST(4), PL_na);
-        result = (int)zebra_search_PQF(arg1,arg2,arg3,(char const *)arg4,(char const *)arg5);
+        result = (int)sort(arg1,arg2,(char const *)arg3,(char const *)arg4,(char const **)arg5);
         
         ST(argvi) = sv_newmortal();
         sv_setiv(ST(argvi++), (IV) result);
+        {
+            free(arg5);
+        }
         XSRETURN(argvi);
         fail:
+        {
+            free(arg5);
+        }
         (void) _swigerr;
     }
     croak(_swigerr);
 }
 
 
-XS(_wrap_admin_start) {
+XS(_wrap_scan_PQF) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
         ZebraHandle arg1 ;
+        ScanObj *arg2 ;
+        ODR arg3 ;
+        char *arg4 ;
         int argvi = 0;
         dXSARGS;
         
-        if ((items < 1) || (items > 1)) {
-            SWIG_croak("Usage: admin_start(zh);");
+        if ((items < 4) || (items > 4)) {
+            SWIG_croak("Usage: scan_PQF(zh,so,stream,pqf_query);");
         }
         {
             ZebraHandle * argp;
             if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
-                SWIG_croak("Type error in argument 1 of admin_start. Expected _p_ZebraHandle");
+                SWIG_croak("Type error in argument 1 of scan_PQF. Expected _p_ZebraHandle");
             }
             arg1 = *argp;
         }
-        zebra_admin_start(arg1);
+        {
+            if (SWIG_ConvertPtr(ST(1), (void **) &arg2, SWIGTYPE_p_ScanObj,0) < 0) {
+                SWIG_croak("Type error in argument 2 of scan_PQF. Expected _p_ScanObj");
+            }
+        }
+        {
+            ODR * argp;
+            if (SWIG_ConvertPtr(ST(2),(void **) &argp, SWIGTYPE_p_ODR,0) < 0) {
+                SWIG_croak("Type error in argument 3 of scan_PQF. Expected _p_ODR");
+            }
+            arg3 = *argp;
+        }
+        if (!SvOK((SV*) ST(3))) arg4 = 0;
+        else arg4 = (char *) SvPV(ST(3), PL_na);
+        zebra_scan_PQF(arg1,arg2,arg3,(char const *)arg4);
         
         
         XSRETURN(argvi);
@@ -2618,27 +4637,29 @@ XS(_wrap_admin_start) {
 }
 
 
-XS(_wrap_admin_shutdown) {
+XS(_wrap_getScanEntry) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
     {
-        ZebraHandle arg1 ;
+        ScanObj *arg1 ;
+        int arg2 ;
+        scanEntry *result;
         int argvi = 0;
         dXSARGS;
         
-        if ((items < 1) || (items > 1)) {
-            SWIG_croak("Usage: admin_shutdown(zh);");
+        if ((items < 2) || (items > 2)) {
+            SWIG_croak("Usage: getScanEntry(so,pos);");
         }
         {
-            ZebraHandle * argp;
-            if (SWIG_ConvertPtr(ST(0),(void **) &argp, SWIGTYPE_p_ZebraHandle,0) < 0) {
-                SWIG_croak("Type error in argument 1 of admin_shutdown. Expected _p_ZebraHandle");
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_ScanObj,0) < 0) {
+                SWIG_croak("Type error in argument 1 of getScanEntry. Expected _p_ScanObj");
             }
-            arg1 = *argp;
         }
-        zebra_admin_shutdown(arg1);
-        
+        arg2 = (int) SvIV(ST(1));
+        result = (scanEntry *)getScanEntry(arg1,arg2);
         
+        ST(argvi) = sv_newmortal();
+        SWIG_MakePtr(ST(argvi++), (void *) result, SWIGTYPE_p_scanEntry,0);
         XSRETURN(argvi);
         fail:
         (void) _swigerr;
@@ -3227,9 +5248,11 @@ XS(_wrap_data1_nodetogr) {
             arg4 = *argp;
         }
         {
-            if (SWIG_ConvertPtr(ST(4), (void **) &arg5, SWIGTYPE_p_int,0) < 0) {
-                SWIG_croak("Type error in argument 5 of data1_nodetogr. Expected _p_int");
-            }
+            int i;
+            if (!SvIOK(ST(4))) 
+            croak("Argument 5 is not an integer.");
+            i = SvIV(ST(4));
+            arg5 = &i;
         }
         result = (Z_GenericRecord *)data1_nodetogr(arg1,arg2,arg3,arg4,arg5);
         
@@ -3347,9 +5370,11 @@ XS(_wrap_data1_nodetobuf) {
         }
         arg3 = (int) SvIV(ST(2));
         {
-            if (SWIG_ConvertPtr(ST(3), (void **) &arg4, SWIGTYPE_p_int,0) < 0) {
-                SWIG_croak("Type error in argument 4 of data1_nodetobuf. Expected _p_int");
-            }
+            int i;
+            if (!SvIOK(ST(3))) 
+            croak("Argument 4 is not an integer.");
+            i = SvIV(ST(3));
+            arg4 = &i;
         }
         result = (char *)data1_nodetobuf(arg1,arg2,arg3,arg4);
         
@@ -4921,9 +6946,11 @@ XS(_wrap_data1_nodetomarc) {
         }
         arg4 = (int) SvIV(ST(3));
         {
-            if (SWIG_ConvertPtr(ST(4), (void **) &arg5, SWIGTYPE_p_int,0) < 0) {
-                SWIG_croak("Type error in argument 5 of data1_nodetomarc. Expected _p_int");
-            }
+            int i;
+            if (!SvIOK(ST(4))) 
+            croak("Argument 5 is not an integer.");
+            i = SvIV(ST(4));
+            arg5 = &i;
         }
         result = (char *)data1_nodetomarc(arg1,arg2,arg3,arg4,arg5);
         
@@ -4970,9 +6997,11 @@ XS(_wrap_data1_nodetoidsgml) {
         }
         arg3 = (int) SvIV(ST(2));
         {
-            if (SWIG_ConvertPtr(ST(3), (void **) &arg4, SWIGTYPE_p_int,0) < 0) {
-                SWIG_croak("Type error in argument 4 of data1_nodetoidsgml. Expected _p_int");
-            }
+            int i;
+            if (!SvIOK(ST(3))) 
+            croak("Argument 4 is not an integer.");
+            i = SvIV(ST(3));
+            arg4 = &i;
         }
         result = (char *)data1_nodetoidsgml(arg1,arg2,arg3,arg4);
         
@@ -5113,9 +7142,11 @@ XS(_wrap_data1_nodetosoif) {
         }
         arg3 = (int) SvIV(ST(2));
         {
-            if (SWIG_ConvertPtr(ST(3), (void **) &arg4, SWIGTYPE_p_int,0) < 0) {
-                SWIG_croak("Type error in argument 4 of data1_nodetosoif. Expected _p_int");
-            }
+            int i;
+            if (!SvIOK(ST(3))) 
+            croak("Argument 4 is not an integer.");
+            i = SvIV(ST(3));
+            arg4 = &i;
         }
         result = (char *)data1_nodetosoif(arg1,arg2,arg3,arg4);
         
@@ -5207,7 +7238,7 @@ XS(_wrap_data1_get_read_buf) {
                 svs[i] = sv_newmortal();
                 sv_setpv((SV*)svs[i],result[i]);
             };
-            myav =     av_make(len,svs);
+            myav =  av_make(len,svs);
             free(svs);
             ST(argvi) = newRV((SV*)myav);
             sv_2mortal(ST(argvi));
@@ -5260,7 +7291,7 @@ XS(_wrap_data1_get_map_buf) {
                 svs[i] = sv_newmortal();
                 sv_setpv((SV*)svs[i],result[i]);
             };
-            myav =     av_make(len,svs);
+            myav =  av_make(len,svs);
             free(svs);
             ST(argvi) = newRV((SV*)myav);
             sv_2mortal(ST(argvi));
@@ -5971,6 +8002,64 @@ XS(_wrap_grs_perl_readf) {
 }
 
 
+XS(_wrap_grs_perl_readline) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        struct perl_context *arg1 ;
+        int result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: grs_perl_readline(context);");
+        }
+        {
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_perl_context,0) < 0) {
+                SWIG_croak("Type error in argument 1 of grs_perl_readline. Expected _p_perl_context");
+            }
+        }
+        result = (int)grs_perl_readline(arg1);
+        
+        ST(argvi) = sv_newmortal();
+        sv_setiv(ST(argvi++), (IV) result);
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
+XS(_wrap_grs_perl_getc) {
+    char _swigmsg[SWIG_MAX_ERRMSG] = "";
+    const char *_swigerr = _swigmsg;
+    {
+        struct perl_context *arg1 ;
+        char result;
+        int argvi = 0;
+        dXSARGS;
+        
+        if ((items < 1) || (items > 1)) {
+            SWIG_croak("Usage: grs_perl_getc(context);");
+        }
+        {
+            if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_perl_context,0) < 0) {
+                SWIG_croak("Type error in argument 1 of grs_perl_getc. Expected _p_perl_context");
+            }
+        }
+        result = (char)grs_perl_getc(arg1);
+        
+        ST(argvi) = sv_newmortal();
+        sv_setpvn((SV*)ST(argvi++), &result, 1);
+        XSRETURN(argvi);
+        fail:
+        (void) _swigerr;
+    }
+    croak(_swigerr);
+}
+
+
 XS(_wrap_grs_perl_seekf) {
     char _swigmsg[SWIG_MAX_ERRMSG] = "";
     const char *_swigerr = _swigmsg;
@@ -6085,7 +8174,7 @@ XS(_wrap_grs_perl_get_dh) {
     const char *_swigerr = _swigmsg;
     {
         struct perl_context *arg1 ;
-        data1_handle result;
+        data1_handle *result;
         int argvi = 0;
         dXSARGS;
         
@@ -6097,14 +8186,10 @@ XS(_wrap_grs_perl_get_dh) {
                 SWIG_croak("Type error in argument 1 of grs_perl_get_dh. Expected _p_perl_context");
             }
         }
-        result = grs_perl_get_dh(arg1);
+        result = (data1_handle *)grs_perl_get_dh(arg1);
         
-        {
-            data1_handle * resultobj = (data1_handle *) malloc(sizeof(data1_handle));
-            memmove(resultobj, &result, sizeof(data1_handle));
-            ST(argvi) = sv_newmortal();
-            SWIG_MakePtr(ST(argvi++), (void *) resultobj, SWIGTYPE_p_data1_handle,0);
-        }
+        ST(argvi) = sv_newmortal();
+        SWIG_MakePtr(ST(argvi++), (void *) result, SWIGTYPE_p_data1_handle,0);
         XSRETURN(argvi);
         fail:
         (void) _swigerr;
@@ -6118,7 +8203,7 @@ XS(_wrap_grs_perl_get_mem) {
     const char *_swigerr = _swigmsg;
     {
         struct perl_context *arg1 ;
-        NMEM result;
+        NMEM *result;
         int argvi = 0;
         dXSARGS;
         
@@ -6130,14 +8215,10 @@ XS(_wrap_grs_perl_get_mem) {
                 SWIG_croak("Type error in argument 1 of grs_perl_get_mem. Expected _p_perl_context");
             }
         }
-        result = grs_perl_get_mem(arg1);
+        result = (NMEM *)grs_perl_get_mem(arg1);
         
-        {
-            NMEM * resultobj = (NMEM *) malloc(sizeof(NMEM));
-            memmove(resultobj, &result, sizeof(NMEM));
-            ST(argvi) = sv_newmortal();
-            SWIG_MakePtr(ST(argvi++), (void *) resultobj, SWIGTYPE_p_NMEM,0);
-        }
+        ST(argvi) = sv_newmortal();
+        SWIG_MakePtr(ST(argvi++), (void *) result, SWIGTYPE_p_NMEM,0);
         XSRETURN(argvi);
         fail:
         (void) _swigerr;
@@ -6183,6 +8264,7 @@ XS(_wrap_grs_perl_set_res) {
 /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
 
 static swig_type_info _swigt__p_ZebraService[] = {{"_p_ZebraService", 0, "ZebraService *", 0},{"_p_ZebraService"},{0}};
+static swig_type_info _swigt__p_cql_transform_t[] = {{"_p_cql_transform_t", 0, "cql_transform_t *", 0},{"_p_cql_transform_t"},{0}};
 static swig_type_info _swigt__p_data1_esetname[] = {{"_p_data1_esetname", 0, "data1_esetname *", 0},{"_p_data1_esetname"},{0}};
 static swig_type_info _swigt__p_data1_maptab[] = {{"_p_data1_maptab", 0, "data1_maptab *", 0},{"_p_data1_maptab"},{0}};
 static swig_type_info _swigt__p_ODR[] = {{"_p_ODR", 0, "ODR *", 0},{"_p_ODR"},{0}};
@@ -6199,28 +8281,36 @@ static swig_type_info _swigt__p_Z_Espec1[] = {{"_p_Z_Espec1", 0, "Z_Espec1 *", 0
 static swig_type_info _swigt__p_off_t[] = {{"_p_off_t", 0, "off_t *", 0},{"_p_off_t"},{0}};
 static swig_type_info _swigt__p_Odr_oid[] = {{"_p_Odr_oid", 0, "Odr_oid *", 0},{"_p_Odr_oid"},{0}};
 static swig_type_info _swigt__p_data1_varset[] = {{"_p_data1_varset", 0, "data1_varset *", 0},{"_p_data1_varset"},{0}};
+static swig_type_info _swigt__p_RetrievalRecordBuf[] = {{"_p_RetrievalRecordBuf", 0, "RetrievalRecordBuf *", 0},{"_p_RetrievalRecordBuf"},{0}};
 static swig_type_info _swigt__p_perl_context[] = {{"_p_perl_context", 0, "struct perl_context *", 0},{"_p_perl_context"},{0}};
 static swig_type_info _swigt__p_data1_node[] = {{"_p_data1_node", 0, "data1_node *", 0},{"_p_data1_node"},{0}};
+static swig_type_info _swigt__p_ScanObj[] = {{"IDZebra::ScanObj", 0, "ScanObj *", 0},{"IDZebra::ScanObj"},{0}};
+static swig_type_info _swigt__p_RetrievalObj[] = {{"IDZebra::RetrievalObj", 0, "RetrievalObj *", 0},{"IDZebra::RetrievalObj"},{0}};
 static swig_type_info _swigt__p_data1_tagset[] = {{"_p_data1_tagset", 0, "data1_tagset *", 0},{"_p_data1_tagset"},{0}};
 static swig_type_info _swigt__p_data1_tag[] = {{"_p_data1_tag", 0, "data1_tag *", 0},{"_p_data1_tag"},{0}};
-static swig_type_info _swigt__p_Z_ExplainRecord[] = {{"_p_Z_ExplainRecord", 0, "Z_ExplainRecord *", 0},{"_p_Z_ExplainRecord"},{0}};
+static swig_type_info _swigt__p_ZebraRetrievalRecord[] = {{"_p_ZebraRetrievalRecord", 0, "ZebraRetrievalRecord *", 0},{"_p_ZebraRetrievalRecord"},{0}};
+static swig_type_info _swigt__p_RetrievalRecord[] = {{"IDZebra::RetrievalRecord", 0, "RetrievalRecord *", 0},{"IDZebra::RetrievalRecord"},{0}};
 static swig_type_info _swigt__p_NMEM[] = {{"_p_NMEM", 0, "NMEM *", 0},{"_p_NMEM"},{0}};
+static swig_type_info _swigt__p_Z_ExplainRecord[] = {{"_p_Z_ExplainRecord", 0, "Z_ExplainRecord *", 0},{"_p_Z_ExplainRecord"},{0}};
 static swig_type_info _swigt__p_data1_marctab[] = {{"_p_data1_marctab", 0, "data1_marctab *", 0},{"_p_data1_marctab"},{0}};
+static swig_type_info _swigt__p_ZebraTransactionStatus[] = {{"IDZebra::ZebraTransactionStatus", 0, "ZebraTransactionStatus *", 0},{"IDZebra::ZebraTransactionStatus"},{0}};
 static swig_type_info _swigt__p_Z_BriefBib[] = {{"_p_Z_BriefBib", 0, "Z_BriefBib *", 0},{"_p_Z_BriefBib"},{0}};
-static swig_type_info _swigt__p_FILE[] = {{"_p_FILE", 0, "FILE *", 0},{"_p_FILE"},{0}};
+static swig_type_info _swigt__p_scanEntry[] = {{"IDZebra::scanEntry", 0, "scanEntry *", 0},{"IDZebra::scanEntry"},{0}};
 static swig_type_info _swigt__p_f_p_void_p_char_size_t__int[] = {{"_p_f_p_void_p_char_size_t__int", 0, "int (*)(void *,char *,size_t)", 0},{"_p_f_p_void_p_char_size_t__int"},{0}};
+static swig_type_info _swigt__p_FILE[] = {{"_p_FILE", 0, "FILE *", 0},{"_p_FILE"},{0}};
 static swig_type_info _swigt__p_data1_element[] = {{"_p_data1_element", 0, "data1_element *", 0},{"_p_data1_element"},{0}};
 static swig_type_info _swigt__p_recordGroup[] = {{"IDZebra::recordGroup", 0, "recordGroup *", 0},{"IDZebra::recordGroup"},{0}};
-static swig_type_info _swigt__p_p_int[] = {{"_p_p_int", 0, "int **", 0},{"_p_p_int"},{0}};
 static swig_type_info _swigt__p_int[] = {{"_p_int", 0, "int *", 0},{"_p_int"},{0}};
 static swig_type_info _swigt__p_data1_handle[] = {{"_p_data1_handle", 0, "data1_handle *", 0},{"_p_data1_handle"},{0}};
-static swig_type_info _swigt__p_data1_attset_cache[] = {{"_p_data1_attset_cache", 0, "data1_attset_cache *", 0},{"_p_data1_attset_cache"},{0}};
+static swig_type_info _swigt__p_p_int[] = {{"_p_p_int", 0, "int **", 0},{"_p_p_int"},{0}};
 static swig_type_info _swigt__p_data1_absyn_cache[] = {{"_p_data1_absyn_cache", 0, "data1_absyn_cache *", 0},{"_p_data1_absyn_cache"},{0}};
+static swig_type_info _swigt__p_data1_attset_cache[] = {{"_p_data1_attset_cache", 0, "data1_attset_cache *", 0},{"_p_data1_attset_cache"},{0}};
 static swig_type_info _swigt__p_Z_GenericRecord[] = {{"_p_Z_GenericRecord", 0, "Z_GenericRecord *", 0},{"_p_Z_GenericRecord"},{0}};
 static swig_type_info _swigt__p_data1_vartype[] = {{"_p_data1_vartype", 0, "data1_vartype *", 0},{"_p_data1_vartype"},{0}};
 
 static swig_type_info *swig_types_initial[] = {
 _swigt__p_ZebraService, 
+_swigt__p_cql_transform_t, 
 _swigt__p_data1_esetname, 
 _swigt__p_data1_maptab, 
 _swigt__p_ODR, 
@@ -6237,23 +8327,30 @@ _swigt__p_Z_Espec1,
 _swigt__p_off_t, 
 _swigt__p_Odr_oid, 
 _swigt__p_data1_varset, 
+_swigt__p_RetrievalRecordBuf, 
 _swigt__p_perl_context, 
 _swigt__p_data1_node, 
+_swigt__p_ScanObj, 
+_swigt__p_RetrievalObj, 
 _swigt__p_data1_tagset, 
 _swigt__p_data1_tag, 
-_swigt__p_Z_ExplainRecord, 
+_swigt__p_ZebraRetrievalRecord, 
+_swigt__p_RetrievalRecord, 
 _swigt__p_NMEM, 
+_swigt__p_Z_ExplainRecord, 
 _swigt__p_data1_marctab, 
+_swigt__p_ZebraTransactionStatus, 
 _swigt__p_Z_BriefBib, 
-_swigt__p_FILE, 
+_swigt__p_scanEntry, 
 _swigt__p_f_p_void_p_char_size_t__int, 
+_swigt__p_FILE, 
 _swigt__p_data1_element, 
 _swigt__p_recordGroup, 
-_swigt__p_p_int, 
 _swigt__p_int, 
 _swigt__p_data1_handle, 
-_swigt__p_data1_attset_cache, 
+_swigt__p_p_int, 
 _swigt__p_data1_absyn_cache, 
+_swigt__p_data1_attset_cache, 
 _swigt__p_Z_GenericRecord, 
 _swigt__p_data1_vartype, 
 0
@@ -6337,6 +8434,60 @@ static swig_command_info swig_commands[] = {
 {"IDZebrac::recordGroup_followLinks_get", _wrap_recordGroup_followLinks_get},
 {"IDZebrac::new_recordGroup", _wrap_new_recordGroup},
 {"IDZebrac::delete_recordGroup", _wrap_delete_recordGroup},
+{"IDZebrac::RetrievalObj_noOfRecords_set", _wrap_RetrievalObj_noOfRecords_set},
+{"IDZebrac::RetrievalObj_noOfRecords_get", _wrap_RetrievalObj_noOfRecords_get},
+{"IDZebrac::RetrievalObj_records_set", _wrap_RetrievalObj_records_set},
+{"IDZebrac::RetrievalObj_records_get", _wrap_RetrievalObj_records_get},
+{"IDZebrac::new_RetrievalObj", _wrap_new_RetrievalObj},
+{"IDZebrac::delete_RetrievalObj", _wrap_delete_RetrievalObj},
+{"IDZebrac::RetrievalRecord_errCode_set", _wrap_RetrievalRecord_errCode_set},
+{"IDZebrac::RetrievalRecord_errCode_get", _wrap_RetrievalRecord_errCode_get},
+{"IDZebrac::RetrievalRecord_errString_set", _wrap_RetrievalRecord_errString_set},
+{"IDZebrac::RetrievalRecord_errString_get", _wrap_RetrievalRecord_errString_get},
+{"IDZebrac::RetrievalRecord_position_set", _wrap_RetrievalRecord_position_set},
+{"IDZebrac::RetrievalRecord_position_get", _wrap_RetrievalRecord_position_get},
+{"IDZebrac::RetrievalRecord_base_set", _wrap_RetrievalRecord_base_set},
+{"IDZebrac::RetrievalRecord_base_get", _wrap_RetrievalRecord_base_get},
+{"IDZebrac::RetrievalRecord_sysno_set", _wrap_RetrievalRecord_sysno_set},
+{"IDZebrac::RetrievalRecord_sysno_get", _wrap_RetrievalRecord_sysno_get},
+{"IDZebrac::RetrievalRecord_score_set", _wrap_RetrievalRecord_score_set},
+{"IDZebrac::RetrievalRecord_score_get", _wrap_RetrievalRecord_score_get},
+{"IDZebrac::RetrievalRecord_format_set", _wrap_RetrievalRecord_format_set},
+{"IDZebrac::RetrievalRecord_format_get", _wrap_RetrievalRecord_format_get},
+{"IDZebrac::RetrievalRecord_buf_set", _wrap_RetrievalRecord_buf_set},
+{"IDZebrac::RetrievalRecord_buf_get", _wrap_RetrievalRecord_buf_get},
+{"IDZebrac::new_RetrievalRecord", _wrap_new_RetrievalRecord},
+{"IDZebrac::delete_RetrievalRecord", _wrap_delete_RetrievalRecord},
+{"IDZebrac::scanEntry_occurrences_set", _wrap_scanEntry_occurrences_set},
+{"IDZebrac::scanEntry_occurrences_get", _wrap_scanEntry_occurrences_get},
+{"IDZebrac::scanEntry_term_set", _wrap_scanEntry_term_set},
+{"IDZebrac::scanEntry_term_get", _wrap_scanEntry_term_get},
+{"IDZebrac::new_scanEntry", _wrap_new_scanEntry},
+{"IDZebrac::delete_scanEntry", _wrap_delete_scanEntry},
+{"IDZebrac::ScanObj_num_entries_set", _wrap_ScanObj_num_entries_set},
+{"IDZebrac::ScanObj_num_entries_get", _wrap_ScanObj_num_entries_get},
+{"IDZebrac::ScanObj_position_set", _wrap_ScanObj_position_set},
+{"IDZebrac::ScanObj_position_get", _wrap_ScanObj_position_get},
+{"IDZebrac::ScanObj_is_partial_set", _wrap_ScanObj_is_partial_set},
+{"IDZebrac::ScanObj_is_partial_get", _wrap_ScanObj_is_partial_get},
+{"IDZebrac::ScanObj_entries_set", _wrap_ScanObj_entries_set},
+{"IDZebrac::ScanObj_entries_get", _wrap_ScanObj_entries_get},
+{"IDZebrac::new_ScanObj", _wrap_new_ScanObj},
+{"IDZebrac::delete_ScanObj", _wrap_delete_ScanObj},
+{"IDZebrac::ZebraTransactionStatus_processed_set", _wrap_ZebraTransactionStatus_processed_set},
+{"IDZebrac::ZebraTransactionStatus_processed_get", _wrap_ZebraTransactionStatus_processed_get},
+{"IDZebrac::ZebraTransactionStatus_inserted_set", _wrap_ZebraTransactionStatus_inserted_set},
+{"IDZebrac::ZebraTransactionStatus_inserted_get", _wrap_ZebraTransactionStatus_inserted_get},
+{"IDZebrac::ZebraTransactionStatus_updated_set", _wrap_ZebraTransactionStatus_updated_set},
+{"IDZebrac::ZebraTransactionStatus_updated_get", _wrap_ZebraTransactionStatus_updated_get},
+{"IDZebrac::ZebraTransactionStatus_deleted_set", _wrap_ZebraTransactionStatus_deleted_set},
+{"IDZebrac::ZebraTransactionStatus_deleted_get", _wrap_ZebraTransactionStatus_deleted_get},
+{"IDZebrac::ZebraTransactionStatus_utime_set", _wrap_ZebraTransactionStatus_utime_set},
+{"IDZebrac::ZebraTransactionStatus_utime_get", _wrap_ZebraTransactionStatus_utime_get},
+{"IDZebrac::ZebraTransactionStatus_stime_set", _wrap_ZebraTransactionStatus_stime_set},
+{"IDZebrac::ZebraTransactionStatus_stime_get", _wrap_ZebraTransactionStatus_stime_get},
+{"IDZebrac::new_ZebraTransactionStatus", _wrap_new_ZebraTransactionStatus},
+{"IDZebrac::delete_ZebraTransactionStatus", _wrap_delete_ZebraTransactionStatus},
 {"IDZebrac::DESTROY", _wrap_DESTROY},
 {"IDZebrac::logLevel", _wrap_logLevel},
 {"IDZebrac::logFile", _wrap_logFile},
@@ -6352,14 +8503,14 @@ static swig_command_info swig_commands[] = {
 {"IDZebrac::errCode", _wrap_errCode},
 {"IDZebrac::errString", _wrap_errString},
 {"IDZebrac::errAdd", _wrap_errAdd},
-{"IDZebrac::describe_recordGroup", _wrap_describe_recordGroup},
 {"IDZebrac::init_recordGroup", _wrap_init_recordGroup},
 {"IDZebrac::res_get_recordGroup", _wrap_res_get_recordGroup},
 {"IDZebrac::set_group", _wrap_set_group},
-{"IDZebrac::select_databases", _wrap_select_databases},
 {"IDZebrac::select_database", _wrap_select_database},
+{"IDZebrac::select_databases", _wrap_select_databases},
 {"IDZebrac::begin_trans", _wrap_begin_trans},
 {"IDZebrac::end_trans", _wrap_end_trans},
+{"IDZebrac::trans_no", _wrap_trans_no},
 {"IDZebrac::commit", _wrap_commit},
 {"IDZebrac::get_shadow_enable", _wrap_get_shadow_enable},
 {"IDZebrac::set_shadow_enable", _wrap_set_shadow_enable},
@@ -6368,13 +8519,20 @@ static swig_command_info swig_commands[] = {
 {"IDZebrac::repository_update", _wrap_repository_update},
 {"IDZebrac::repository_delete", _wrap_repository_delete},
 {"IDZebrac::repository_show", _wrap_repository_show},
+{"IDZebrac::insert_record", _wrap_insert_record},
 {"IDZebrac::update_record", _wrap_update_record},
 {"IDZebrac::delete_record", _wrap_delete_record},
-{"IDZebrac::begin_read", _wrap_begin_read},
-{"IDZebrac::end_read", _wrap_end_read},
 {"IDZebrac::search_PQF", _wrap_search_PQF},
-{"IDZebrac::admin_start", _wrap_admin_start},
-{"IDZebrac::admin_shutdown", _wrap_admin_shutdown},
+{"IDZebrac::cql_transform_open_fname", _wrap_cql_transform_open_fname},
+{"IDZebrac::cql_transform_close", _wrap_cql_transform_close},
+{"IDZebrac::cql_transform_error", _wrap_cql_transform_error},
+{"IDZebrac::cql2pqf", _wrap_cql2pqf},
+{"IDZebrac::records_retrieve", _wrap_records_retrieve},
+{"IDZebrac::record_retrieve", _wrap_record_retrieve},
+{"IDZebrac::deleteResultSet", _wrap_deleteResultSet},
+{"IDZebrac::sort", _wrap_sort},
+{"IDZebrac::scan_PQF", _wrap_scan_PQF},
+{"IDZebrac::getScanEntry", _wrap_getScanEntry},
 {"IDZebrac::nmem_create", _wrap_nmem_create},
 {"IDZebrac::nmem_destroy", _wrap_nmem_destroy},
 {"IDZebrac::data1_create", _wrap_data1_create},
@@ -6452,6 +8610,8 @@ static swig_command_info swig_commands[] = {
 {"IDZebrac::data1_get_tabpath", _wrap_data1_get_tabpath},
 {"IDZebrac::data1_get_tabroot", _wrap_data1_get_tabroot},
 {"IDZebrac::grs_perl_readf", _wrap_grs_perl_readf},
+{"IDZebrac::grs_perl_readline", _wrap_grs_perl_readline},
+{"IDZebrac::grs_perl_getc", _wrap_grs_perl_getc},
 {"IDZebrac::grs_perl_seekf", _wrap_grs_perl_seekf},
 {"IDZebrac::grs_perl_tellf", _wrap_grs_perl_tellf},
 {"IDZebrac::grs_perl_endf", _wrap_grs_perl_endf},
@@ -6520,6 +8680,11 @@ XS(SWIG_init) {
     }
     
     SWIG_TypeClientData(SWIGTYPE_p_recordGroup, (void*) "IDZebra::recordGroup");
+    SWIG_TypeClientData(SWIGTYPE_p_RetrievalObj, (void*) "IDZebra::RetrievalObj");
+    SWIG_TypeClientData(SWIGTYPE_p_RetrievalRecord, (void*) "IDZebra::RetrievalRecord");
+    SWIG_TypeClientData(SWIGTYPE_p_scanEntry, (void*) "IDZebra::scanEntry");
+    SWIG_TypeClientData(SWIGTYPE_p_ScanObj, (void*) "IDZebra::ScanObj");
+    SWIG_TypeClientData(SWIGTYPE_p_ZebraTransactionStatus, (void*) "IDZebra::ZebraTransactionStatus");
     ST(0) = &PL_sv_yes;
     XSRETURN(1);
 }