062b4ad0826fb32aa811b4f3fdbf5fe649abf73c
[yaz-moved-to-github.git] / retrieval / d1_handle.c
1 /*
2  * Copyright (c) 1995-1997, Index Data.
3  * See the file LICENSE for details.
4  * Sebastian Hammer, Adam Dickmeiss
5  *
6  * $Log: d1_handle.c,v $
7  * Revision 1.2  1997-09-30 11:50:04  adam
8  * Added handler data1_get_map_buf that is used by data1_nodetomarc.
9  *
10  * Revision 1.1  1997/09/17 12:28:24  adam
11  * Introduced new 'global' data1 handle.
12  *
13  */
14
15 #include <stdio.h>
16 #include <stdlib.h>
17
18 #include <log.h>
19 #include <data1.h>
20
21 struct data1_handle_info {
22     WRBUF wrbuf;
23     char *tab_path;
24
25     char *read_buf;
26     int read_len;
27
28     data1_absyn_cache absyn_cache;
29
30     char *map_buf;
31     int map_len;
32
33     NMEM mem;
34 };
35
36 data1_handle data1_create (void)
37 {
38     data1_handle p = xmalloc (sizeof(*p));
39     if (!p)
40         return NULL;
41     p->tab_path = NULL;
42     p->wrbuf = wrbuf_alloc();
43     p->read_buf = NULL;
44     p->read_len = 0;
45     p->map_buf = NULL;
46     p->map_len = 0;
47     p->absyn_cache = NULL;
48     p->mem = nmem_create ();
49     return p;
50 }
51
52 NMEM data1_nmem_get (data1_handle dh)
53 {
54     return dh->mem;
55 }
56
57 data1_absyn_cache *data1_absyn_cache_get (data1_handle dh)
58 {
59     return &dh->absyn_cache;
60 }
61
62 void data1_destroy (data1_handle dh)
63 {
64     if (!dh)
65         return;
66     wrbuf_free (dh->wrbuf, 1);
67     if (dh->tab_path)
68         xfree (dh->tab_path);
69     if (dh->read_buf)
70         xfree (dh->read_buf);
71     if (dh->map_buf)
72         xfree (dh->map_buf);
73     nmem_destroy (dh->mem);
74     
75     xfree (dh);
76 }
77
78 WRBUF data1_get_wrbuf (data1_handle dp)
79 {
80     return dp->wrbuf;
81 }
82
83 char **data1_get_read_buf (data1_handle dp, int **lenp)
84 {
85     *lenp = &dp->read_len;
86     logf (LOG_DEBUG, "data1_get_read_buf lenp=%u", **lenp);
87     return &dp->read_buf;
88 }
89
90 char **data1_get_map_buf (data1_handle dp, int **lenp)
91 {
92     *lenp = &dp->map_len;
93     logf (LOG_DEBUG, "data1_get_map_buf lenp=%u", **lenp);
94     return &dp->map_buf;
95 }
96
97 void data1_set_tabpath (data1_handle dp, const char *p)
98 {
99     if (dp->tab_path)
100     {
101         xfree (dp->tab_path);
102         dp->tab_path = NULL;
103     }
104     if (p)
105     {
106         dp->tab_path = xmalloc (strlen(p)+1);
107         strcpy (dp->tab_path, p);
108     }
109 }
110
111 const char *data1_get_tabpath (data1_handle dp)
112 {
113     return dp->tab_path;
114 }
115