New function marc_display_exl - used by YAZ client. Server returns
[yaz-moved-to-github.git] / ztest / ztest.c
index bb816bb..ba85739 100644 (file)
@@ -6,7 +6,17 @@
  *    Chas Woodfield, Fretwell Downing Datasystems.
  *
  * $Log: ztest.c,v $
- * Revision 1.42  2001-04-06 12:26:46  adam
+ * Revision 1.45  2001-10-29 09:17:19  adam
+ * New function marc_display_exl - used by YAZ client. Server returns
+ * bad record on position 98 (for testing).
+ *
+ * Revision 1.44  2001/07/19 19:51:42  adam
+ * Added typecasts to make C++ happy.
+ *
+ * Revision 1.43  2001/06/28 09:27:25  adam
+ * Number of Extended Services Requests logged.
+ *
+ * Revision 1.42  2001/04/06 12:26:46  adam
  * Optional CCL module. Moved atoi_n to marcdisp.h from yaz-util.h.
  *
  * Revision 1.41  2001/04/05 13:08:48  adam
@@ -173,11 +183,20 @@ int ztest_present (void *handle, bend_present_rr *rr)
 
 int ztest_esrequest (void *handle, bend_esrequest_rr *rr)
 {
-    yaz_log(LOG_LOG, "function: %d", *rr->esr->function);
+    /* user-defined handle - created in bend_init */
+    int *counter = (int*) handle;  
+
+    yaz_log(LOG_LOG, "ESRequest no %d", *counter);
+
+    (*counter)++;
+
     if (rr->esr->packageName)
        yaz_log(LOG_LOG, "packagename: %s", rr->esr->packageName);
     yaz_log(LOG_LOG, "Waitaction: %d", *rr->esr->waitAction);
 
+
+    yaz_log(LOG_LOG, "function: %d", *rr->esr->function);
+
     if (!rr->esr->taskSpecificParameters)
     {
         yaz_log (LOG_WARN, "No task specific parameters");
@@ -354,12 +373,14 @@ int ztest_esrequest (void *handle, bend_esrequest_rr *rr)
            }
            if (toKeep)
            {
-               Z_External *ext = odr_malloc (rr->stream, sizeof(*ext));
-               Z_IUOriginPartToKeep *keep =
-                   odr_malloc (rr->stream, sizeof(*keep));
-               Z_IUTargetPart *targetPart =
+               Z_External *ext = (Z_External *)
+                    odr_malloc (rr->stream, sizeof(*ext));
+               Z_IUOriginPartToKeep *keep = (Z_IUOriginPartToKeep *)
+                    odr_malloc (rr->stream, sizeof(*keep));
+               Z_IUTargetPart *targetPart = (Z_IUTargetPart *)
                    odr_malloc (rr->stream, sizeof(*targetPart));
-               rr->taskPackage = odr_malloc (rr->stream, sizeof(*rr->taskPackage));
+               rr->taskPackage = (Z_TaskPackage *)
+                    odr_malloc (rr->stream, sizeof(*rr->taskPackage));
                rr->taskPackage->packageType =
                    odr_oiddup (rr->stream, rr->esr->packageType);
                rr->taskPackage->packageName = 0;
@@ -370,10 +391,10 @@ int ztest_esrequest (void *handle, bend_esrequest_rr *rr)
                rr->taskPackage->targetReference = (Odr_oct *)
                    odr_malloc (rr->stream, sizeof(Odr_oct));
                rr->taskPackage->targetReference->buf =
-                   odr_strdup (rr->stream, "123");
+                   (unsigned char *) odr_strdup (rr->stream, "123");
                rr->taskPackage->targetReference->len =
                    rr->taskPackage->targetReference->size =
-                   strlen(rr->taskPackage->targetReference->buf);
+                   strlen((char *) (rr->taskPackage->targetReference->buf));
                rr->taskPackage->creationDateTime = 0;
                rr->taskPackage->taskStatus = odr_intdup(rr->stream, 0);
                rr->taskPackage->packageDiagnostics = 0;
@@ -392,7 +413,7 @@ int ztest_esrequest (void *handle, bend_esrequest_rr *rr)
                ext->u.update->u.taskPackage->originPart = keep;
                ext->u.update->u.taskPackage->targetPart = targetPart;
 
-               keep->action = odr_malloc (rr->stream, sizeof(int));
+               keep->action = (int *) odr_malloc (rr->stream, sizeof(int));
                *keep->action = *toKeep->action;
                keep->databaseName =
                    odr_strdup (rr->stream, toKeep->databaseName);
@@ -402,9 +423,10 @@ int ztest_esrequest (void *handle, bend_esrequest_rr *rr)
 
                targetPart->updateStatus = odr_intdup (rr->stream, 1);
                targetPart->num_globalDiagnostics = 0;
-               targetPart->globalDiagnostics = odr_nullval();
+               targetPart->globalDiagnostics = (Z_DiagRec **) odr_nullval();
                targetPart->num_taskPackageRecords = 0;
-               targetPart->taskPackageRecords = odr_nullval();
+               targetPart->taskPackageRecords =
+                    (Z_IUTaskPackageRecordStructure **) odr_nullval();
            }
            if (notToKeep)
            {
@@ -515,23 +537,23 @@ static char *dummy_database_record (int num, ODR odr)
 
     if (!inf)
        return NULL;
-    while (--num >= 0)
+    if (num == 98) 
+    {   /* this will generate a very bad MARC record (testing only) */
+        buf = (char*) odr_malloc(odr, 2101);
+        memset(buf, '7', 2100);
+        buf[2100] = '\0';
+    }
+    else
     {
-       if (num == 98)
-       {
-           buf = (char*) odr_malloc(odr, 2101);
-           memset(buf, 'A', 2100);
-           buf[2100] = '\0';
-           break;
-       }
-       else
-           buf = marc_read (inf, odr);
-       if (!num || !buf)
-           break;
+        /* OK, try to get proper MARC records from the file */
+        while (--num >= 0)
+        {
+            buf = marc_read (inf, odr);
+            if (!buf)
+                break;
+        }
     }
     fclose(inf);
-    if (num < 0)
-       return 0;
     return buf;
 }
 
@@ -705,11 +727,12 @@ int ztest_scan(void *handle, bend_scan_rr *q)
 bend_initresult *bend_init(bend_initrequest *q)
 {
     bend_initresult *r = (bend_initresult *) odr_malloc (q->stream, sizeof(*r));
-    static char *dummy = "Hej fister";
+    int *counter = (int *) xmalloc (sizeof(int));
 
+    *counter = 0;
     r->errcode = 0;
     r->errstring = 0;
-    r->handle = dummy;
+    r->handle = counter;         /* user handle, in this case a simple int */
     q->bend_sort = ztest_sort;              /* register sort handler */
     q->bend_search = ztest_search;          /* register search handler */
     q->bend_present = ztest_present;        /* register present handle */
@@ -722,6 +745,7 @@ bend_initresult *bend_init(bend_initrequest *q)
 
 void bend_close(void *handle)
 {
+    xfree (handle);              /* release our user-defined handle */
     return;
 }