YAZ  4.2.41
opacdisp.c
Go to the documentation of this file.
1 /* This file is part of the YAZ toolkit.
2  * Copyright (C) 1995-2012 Index Data
3  * See the file LICENSE for details.
4  */
9 #if HAVE_CONFIG_H
10 #include <config.h>
11 #endif
12 
13 #include <stdio.h>
14 #include <string.h>
15 #include <stdlib.h>
16 
17 #include <yaz/proto.h>
18 #include <yaz/marcdisp.h>
19 
21  int l, const char *elem,
22  const char *data)
23 {
24  if (data)
25  {
26  size_t pos;
27  while (--l >= 0)
28  wrbuf_puts(wrbuf, " ");
29  wrbuf_puts(wrbuf, "<");
30  wrbuf_puts(wrbuf, elem);
31  wrbuf_puts(wrbuf, ">");
32 
33  pos = wrbuf->pos; /* save position */
34  if (wrbuf_iconv_write_x(wrbuf, cd1, data, strlen(data), 1) && cd2)
35  {
36  wrbuf->pos = pos; /* rewind to pos */
37  wrbuf_iconv_write_x(wrbuf, cd2, data, strlen(data), 1);
38  }
39  wrbuf_puts(wrbuf, "</");
40  wrbuf_puts(wrbuf, elem);
41  wrbuf_puts(wrbuf, ">\n");
42  }
43 }
44 
45 static void opac_element_bool(WRBUF wrbuf, int l, const char *elem, int *data)
46 {
47  if (data)
48  {
49  while (--l >= 0)
50  wrbuf_puts(wrbuf, " ");
51  wrbuf_puts(wrbuf, "<");
52  wrbuf_puts(wrbuf, elem);
53  if (*data)
54  wrbuf_puts(wrbuf, " value=\"1\"");
55  else
56  wrbuf_puts(wrbuf, " value=\"0\"");
57  wrbuf_puts(wrbuf, "/>\n");
58  }
59 }
60 
62  yaz_iconv_t cd2)
63 {
64  int i;
66 
67  wrbuf_puts(wrbuf, "<opacRecord>\n");
68  if (r->bibliographicRecord)
69  {
71 
72  wrbuf_puts(wrbuf, " <bibliographicRecord>\n");
73  if (ext->which == Z_External_octet)
74  yaz_marc_decode_wrbuf(mt, (const char *) ext->u.octet_aligned->buf,
75  ext->u.octet_aligned->len, wrbuf);
76  wrbuf_puts(wrbuf, " </bibliographicRecord>\n");
77  }
78  wrbuf_puts(wrbuf, "<holdings>\n");
79 
80  for (i = 0; i < r->num_holdingsData; i++)
81  {
82  Z_HoldingsRecord *h = r->holdingsData[i];
83  wrbuf_puts(wrbuf, " <holding>\n");
84 
86  {
88 
89  wrbuf_puts(wrbuf, " <marcHoldingsRecord>\n");
90  if (ext->which == Z_External_octet)
91  yaz_marc_decode_wrbuf(mt, (const char *)
92  ext->u.octet_aligned->buf,
93  ext->u.octet_aligned->len, wrbuf);
94  wrbuf_puts(wrbuf, " </marcHoldingsRecord>\n");
95  }
97  {
98  int j;
99 
101 
102  opac_element_str(wrbuf, cd1, cd2, 2, "typeOfRecord",
103  d->typeOfRecord);
104  opac_element_str(wrbuf, cd1, cd2, 2, "encodingLevel",
105  d->encodingLevel);
106  opac_element_str(wrbuf, cd1, cd2, 2, "format",
107  d->format);
108  opac_element_str(wrbuf, cd1, cd2, 2, "receiptAcqStatus",
109  d->receiptAcqStatus);
110  opac_element_str(wrbuf, cd1, cd2, 2, "generalRetention",
111  d->generalRetention);
112  opac_element_str(wrbuf, cd1, cd2, 2, "completeness",
113  d->completeness);
114  opac_element_str(wrbuf, cd1, cd2, 2, "dateOfReport",
115  d->dateOfReport);
116  opac_element_str(wrbuf, cd1, cd2, 2, "nucCode", d->nucCode);
117  opac_element_str(wrbuf, cd1, cd2, 2, "localLocation",
118  d->localLocation);
119  opac_element_str(wrbuf, cd1, cd2, 2, "shelvingLocation",
120  d->shelvingLocation);
121  opac_element_str(wrbuf, cd1, cd2, 2, "callNumber",
122  d->callNumber);
123  opac_element_str(wrbuf, cd1, cd2, 2, "shelvingData",
124  d->shelvingData);
125  opac_element_str(wrbuf, cd1, cd2, 2, "copyNumber",
126  d->copyNumber);
127  opac_element_str(wrbuf, cd1, cd2, 2, "publicNote",
128  d->publicNote);
129  opac_element_str(wrbuf, cd1, cd2, 2, "reproductionNote",
130  d->reproductionNote);
131  opac_element_str(wrbuf, cd1, cd2, 2, "termsUseRepro",
132  d->termsUseRepro);
133  opac_element_str(wrbuf, cd1, cd2, 2, "enumAndChron",
134  d->enumAndChron);
135  if (d->num_volumes)
136  {
137  wrbuf_puts (wrbuf, " <volumes>\n");
138  for (j = 0; j<d->num_volumes; j++)
139  {
140  wrbuf_puts (wrbuf, " <volume>\n");
141  opac_element_str(wrbuf, cd1, cd2, 4, "enumeration",
142  d->volumes[j]->enumeration);
143  opac_element_str(wrbuf, cd1, cd2, 4, "chronology",
144  d->volumes[j]->chronology);
145  opac_element_str(wrbuf, cd1, cd2, 4, "enumAndChron",
146  d->volumes[j]->enumAndChron);
147  wrbuf_puts(wrbuf, " </volume>\n");
148  }
149  wrbuf_puts(wrbuf, " </volumes>\n");
150  }
151  if (d->num_circulationData)
152  {
153  wrbuf_puts (wrbuf, " <circulations>\n");
154  for (j = 0; j<d->num_circulationData; j++)
155  {
156  wrbuf_puts(wrbuf," <circulation>\n");
157  opac_element_bool(wrbuf, 4, "availableNow",
159  opac_element_str(wrbuf, cd1, cd2, 4, "availabiltyDate",
161  opac_element_str(wrbuf, cd1, cd2, 4, "availableThru",
163  opac_element_str(wrbuf, cd1, cd2, 4, "restrictions",
165  opac_element_str(wrbuf, cd1, cd2, 4, "itemId",
166  d->circulationData[j]->itemId);
167  opac_element_bool(wrbuf, 4, "renewable",
168  d->circulationData[j]->renewable);
169  opac_element_bool(wrbuf, 4, "onHold",
170  d->circulationData[j]->onHold);
171  opac_element_str(wrbuf, cd1, cd2, 4, "enumAndChron",
173  opac_element_str(wrbuf, cd1, cd2, 4, "midspine",
174  d->circulationData[j]->midspine);
175  opac_element_str(wrbuf, cd1, cd2, 4, "temporaryLocation",
177  wrbuf_puts(wrbuf, " </circulation>\n");
178  }
179  wrbuf_puts(wrbuf, " </circulations>\n");
180  }
181  }
182  wrbuf_puts(wrbuf, " </holding>\n");
183  }
184  wrbuf_puts(wrbuf, "</holdings>\n");
185  wrbuf_puts(wrbuf, "</opacRecord>\n");
186 }
187 
189 {
190  yaz_opac_decode_wrbuf2(mt, r, wrbuf, 0);
191 }
192 
193 /*
194  * Local variables:
195  * c-basic-offset: 4
196  * c-file-style: "Stroustrup"
197  * indent-tabs-mode: nil
198  * End:
199  * vim: shiftwidth=4 tabstop=8 expandtab
200  */
201