Put local variables footer in all c, h files.
[idzebra-moved-to-github.git] / index / apitest.c
index 7af42a5..d655f92 100644 (file)
@@ -1,9 +1,31 @@
+/* $Id: apitest.c,v 1.25 2006-05-10 08:13:20 adam Exp $
+   Copyright (C) 1995-2005
+   Index Data ApS
+
+This file is part of the Zebra server.
+
+Zebra is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+Zebra is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with Zebra; see the file LICENSE.zebra.  If not, write to the
+Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+02111-1307, USA.
+*/
 
 #include <stdio.h>
+#include <stdlib.h>
 
-#include <log.h>
-#include <pquery.h>
-#include "zebraapi.h"
+#include <yaz/log.h>
+#include <yaz/pquery.h>
+#include <idzebra/api.h>
 
 /* Small routine to display GRS-1 record variants ... */
 /* Copied verbatim from yaz/client/client.c */
@@ -98,103 +120,130 @@ int main (int argc, char **argv)
 {
     /* odr is a handle to memory assocated with RETURNED data from
        various functions */
-    ODR odr;
+    ODR odr_input, odr_output;
     
-    /* zh is our Zebra Handle - describes the server as a whole */
+    /* zs is our Zebra Service - decribes whole server */
+    ZebraService zs;
+
+    /* zh is our Zebra Handle - describes database session */
     ZebraHandle zh;
     
     /* the database we specify in our example */
-    char *base = "Default";
+    const char *base = "Default";
     int argno;
 
     nmem_init ();
 
-    odr = odr_createmem (ODR_ENCODE);    
+    yaz_log_init_file("apitest.log");
+
+    odr_input = odr_createmem (ODR_DECODE);    
+    odr_output = odr_createmem (ODR_ENCODE);    
     
-   /* open Zebra */
-    zh = zebra_open ("zebra.cfg");
+    zs = zebra_start ("zebra.cfg");
+    if (!zs)
+    {
+       printf ("zebra_start failed; missing zebra.cfg?\n");
+       exit (1);
+    }
+    /* open Zebra */
+    zh = zebra_open (zs, 0);
     if (!zh)
     {
-       printf ("Couldn't init zebra\n");
+       printf ("zebras_open failed\n");
+       exit (1);
+    }
+    if (zebra_select_databases (zh, 1, &base) != ZEBRA_OK)
+    {
+       printf ("zebra_select_databases failed\n");
        exit (1);
     }
-
-    /* This call controls the logging facility in YAZ/Zebra */
-#if 0
-    log_init(LOG_ALL, "", "out.log");
-#endif
-
     /* Each argument to main will be a query */
     for (argno = 1; argno < argc; argno++)
     {
        /* parse the query and generate an RPN structure */
-       Z_RPNQuery *query = p_query_rpn (odr, PROTO_Z3950, argv[argno]);
+       Z_RPNQuery *query = p_query_rpn (odr_input, PROTO_Z3950, argv[argno]);
        char setname[64];
        int errCode;
        int i;
-       const char *errString;
-       char *errAdd;
+        zint hits;
+       char *errString;
        ZebraRetrievalRecord *records;
        int noOfRecordsToFetch;
 
        /* bad query? */
        if (!query)
        {
-           logf (LOG_WARN, "bad query %s\n", argv[argno]);
-           odr_reset (odr);
+           yaz_log (YLOG_WARN, "bad query %s\n", argv[argno]);
+           odr_reset (odr_input);
            continue;
        }
+       else
+       {
+           char out_str[100];
+           int r;
+#if 1
+           r = zebra_string_norm (zh, 'w',
+                                  argv[argno], strlen(argv[argno]),
+                                  out_str, sizeof(out_str));
+           if (r >= 0)
+           {
+               printf ("norm: '%s'\n", out_str);
+           }
+           else
+           {
+               printf ("norm fail: %d\n", r);
+           }
+#endif
 
+       }
        /* result set name will be called 1,2, etc */
-       sprintf (setname, "%d", i);
+       sprintf (setname, "%d", argno);
 
        /* fire up the search */
-       zebra_search_rpn (zh, odr, query, 1, &base, setname);
+       zebra_search_RPN (zh, odr_input, query, setname, &hits);
        
        /* status ... */
-       errCode = zebra_errCode (zh);
-       errString = zebra_errString (zh);
-       errAdd = zebra_errAdd (zh);
+        zebra_result (zh, &errCode, &errString);
        
        /* error? */
        if (errCode)
        {
-           printf ("Zebra Search Error %d %s %s\n",
-                   errCode, errString, errAdd ? errAdd : "");
+           printf ("Zebra Search Error %d %s\n",
+                   errCode, errString);
            continue;
        }
        /* ok ... */
-       printf ("Zebra Search gave %d hits\n", zebra_hits (zh));
+       printf ("Zebra Search gave " ZINT_FORMAT " hits\n", hits);
        
        /* Deterimine number of records to fetch ... */
-       if (zebra_hits(zh) > 10)
+       if (hits > 10)
            noOfRecordsToFetch = 10;
        else
-           noOfRecordsToFetch = zebra_hits(zh);
+           noOfRecordsToFetch = hits;
 
        /* reset our memory - we've finished dealing with search */
-       odr_reset (odr);
+       odr_reset (odr_input);
+       odr_reset (odr_output);
 
        /* prepare to fetch ... */
-       records = malloc (sizeof(*records) * noOfRecordsToFetch);
+       records = odr_malloc (odr_input, sizeof(*records) * noOfRecordsToFetch);
        /* specify position of each record to fetch */
        /* first one is numbered 1 and NOT 0 */
        for (i = 0; i<noOfRecordsToFetch; i++)
            records[i].position = i+1;
        /* fetch them and request for GRS-1 records */
-       zebra_records_retrieve (zh, odr, setname, NULL, VAL_GRS1,
+       zebra_records_retrieve (zh, odr_input, setname, NULL, VAL_SUTRS,
                                noOfRecordsToFetch, records);
 
        /* status ... */
-       errCode = zebra_errCode (zh);
-       errString = zebra_errString (zh);
-       errAdd = zebra_errAdd (zh);
-       
+
+        zebra_result (zh, &errCode, &errString);
+
        /* error ? */
        if (errCode)
        {
-           printf ("Zebra Search Error %d %s %s\n",
-                   errCode, errString, errAdd ? errAdd : "");
+           printf ("Zebra Search Error %d %s\n",
+                   errCode, errString);
        }
        else
        {
@@ -216,6 +265,11 @@ int main (int argc, char **argv)
                    printf ("  GRS-1\n");
                    display_grs1(grs_record, 0);
                }
+                else if (records[i].format == VAL_SUTRS)
+                {
+                    printf ("  SUTRS\n");
+                    printf ("%.*s", records[i].len, records[i].buf);
+                }
                /* some other record we don't handle yet... */
                else
                {
@@ -223,8 +277,21 @@ int main (int argc, char **argv)
                }
            }
        }
-       free (records);
-       odr_reset (odr);  /* reset memory */
+       /* reset our memory - we've finished dealing with present */
+       odr_reset (odr_input); 
+       odr_reset (odr_output);
     }
+    odr_destroy (odr_input);
+    odr_destroy (odr_output);
+    zebra_close (zh);
+    zebra_stop (zs);
     return 0;
 }
+/*
+ * Local variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ * vim: shiftwidth=4 tabstop=8 expandtab
+ */
+