New source grs1disp.c
[yaz-moved-to-github.git] / retrieval / d1_handle.c
index 0c1fef1..51cf971 100644 (file)
@@ -1,54 +1,55 @@
 /*
- * Copyright (c) 1995-1997, Index Data.
+ * Copyright (c) 1995-2002, Index Data.
  * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Log: d1_handle.c,v $
- * Revision 1.3  1998-02-11 11:53:35  adam
- * Changed code so that it compiles as C++.
- *
- * Revision 1.2  1997/09/30 11:50:04  adam
- * Added handler data1_get_map_buf that is used by data1_nodetomarc.
- *
- * Revision 1.1  1997/09/17 12:28:24  adam
- * Introduced new 'global' data1 handle.
  *
+ * $Id: d1_handle.c,v 1.9 2002-07-29 20:04:08 adam Exp $
  */
 
 #include <stdio.h>
 #include <stdlib.h>
 
-#include <log.h>
-#include <data1.h>
+#include <yaz/log.h>
+#include <yaz/data1.h>
 
 struct data1_handle_info {
     WRBUF wrbuf;
     char *tab_path;
+    char *tab_root;
 
     char *read_buf;
     int read_len;
 
     data1_absyn_cache absyn_cache;
+    data1_attset_cache attset_cache;
 
     char *map_buf;
     int map_len;
 
     NMEM mem;
+    int flags;
 };
 
 data1_handle data1_create (void)
 {
+    return data1_createx(0);
+}
+
+data1_handle data1_createx (int flags)
+{
     data1_handle p = (data1_handle)xmalloc (sizeof(*p));
     if (!p)
        return NULL;
     p->tab_path = NULL;
+    p->tab_root = NULL;
     p->wrbuf = wrbuf_alloc();
     p->read_buf = NULL;
     p->read_len = 0;
     p->map_buf = NULL;
     p->map_len = 0;
     p->absyn_cache = NULL;
+    p->attset_cache = NULL;
     p->mem = nmem_create ();
+    p->flags = flags;
     return p;
 }
 
@@ -62,6 +63,11 @@ data1_absyn_cache *data1_absyn_cache_get (data1_handle dh)
     return &dh->absyn_cache;
 }
 
+data1_attset_cache *data1_attset_cache_get (data1_handle dh)
+{
+    return &dh->attset_cache;
+}
+
 void data1_destroy (data1_handle dh)
 {
     if (!dh)
@@ -69,6 +75,8 @@ void data1_destroy (data1_handle dh)
     wrbuf_free (dh->wrbuf, 1);
     if (dh->tab_path)
        xfree (dh->tab_path);
+    if (dh->tab_root)
+       xfree (dh->tab_root);
     if (dh->read_buf)
        xfree (dh->read_buf);
     if (dh->map_buf)
@@ -86,29 +94,31 @@ WRBUF data1_get_wrbuf (data1_handle dp)
 char **data1_get_read_buf (data1_handle dp, int **lenp)
 {
     *lenp = &dp->read_len;
-    logf (LOG_DEBUG, "data1_get_read_buf lenp=%u", **lenp);
+    yaz_log (LOG_DEBUG, "data1_get_read_buf lenp=%u", **lenp);
     return &dp->read_buf;
 }
 
 char **data1_get_map_buf (data1_handle dp, int **lenp)
 {
     *lenp = &dp->map_len;
-    logf (LOG_DEBUG, "data1_get_map_buf lenp=%u", **lenp);
+    yaz_log (LOG_DEBUG, "data1_get_map_buf lenp=%u", **lenp);
     return &dp->map_buf;
 }
 
 void data1_set_tabpath (data1_handle dp, const char *p)
 {
-    if (dp->tab_path)
-    {
-        xfree (dp->tab_path);
-        dp->tab_path = NULL;
-    }
+    xfree (dp->tab_path);
+    dp->tab_path = NULL;
     if (p)
-    {
-        dp->tab_path = (char *)xmalloc (strlen(p)+1);
-        strcpy (dp->tab_path, p);
-    }
+        dp->tab_path = xstrdup (p);
+}
+
+void data1_set_tabroot (data1_handle dp, const char *p)
+{
+    xfree (dp->tab_root);
+    dp->tab_root = NULL;
+    if (p)
+        dp->tab_root = xstrdup (p);
 }
 
 const char *data1_get_tabpath (data1_handle dp)
@@ -116,3 +126,19 @@ const char *data1_get_tabpath (data1_handle dp)
     return dp->tab_path;
 }
 
+const char *data1_get_tabroot (data1_handle dp)
+{
+    return dp->tab_root;
+}
+
+FILE *data1_path_fopen (data1_handle dh, const char *file, const char *mode)
+{
+    const char *path = data1_get_tabpath(dh);
+    const char *root = data1_get_tabroot(dh);
+    return yaz_fopen (path, file, "r", root);
+}
+
+int data1_is_xmlmode(data1_handle dh)
+{
+    return dh->flags & DATA1_FLAG_XML;
+}