237b2e29b00244ae4f4a4e20366c0446da082523
[yaz-moved-to-github.git] / src / opacdisp.c
1 /*
2  * Copyright (c) 2003-2004, Index Data.
3  * See the file LICENSE for details.
4  *
5  * $Id: opacdisp.c,v 1.2 2004-03-10 21:09:01 adam Exp $
6  */
7
8 #include <stdio.h>
9 #include <string.h>
10 #include <stdlib.h>
11 #include <ctype.h>
12
13 #include <yaz/proto.h>
14
15 static void opac_element_str(WRBUF wrbuf, int l, const char *elem,
16                              const char *data)
17 {
18     if (data)
19     {
20         while (--l >= 0)
21             wrbuf_puts(wrbuf, " ");
22         wrbuf_puts(wrbuf, "<");
23         wrbuf_puts(wrbuf, elem);
24         wrbuf_puts(wrbuf, ">");
25         wrbuf_xmlputs(wrbuf, data);
26         wrbuf_puts(wrbuf, "</");
27         wrbuf_puts(wrbuf, elem);
28         wrbuf_puts(wrbuf, ">\n");
29     }
30 }
31
32 static void opac_element_bool(WRBUF wrbuf, int l, const char *elem, int *data)
33 {
34     if (data)
35     {
36         while (--l >= 0)
37             wrbuf_puts(wrbuf, " ");
38         wrbuf_puts(wrbuf, "<");
39         wrbuf_puts(wrbuf, elem);
40         if (*data)
41             wrbuf_puts(wrbuf, " value=\"1\"");
42         else
43             wrbuf_puts(wrbuf, " value=\"0\"");
44         wrbuf_puts(wrbuf, "/>\n");
45     }
46 }
47
48 void yaz_display_OPAC(WRBUF wrbuf, Z_OPACRecord *r, int flags)
49 {
50     int i;
51     wrbuf_puts(wrbuf, "<holdings>\n");
52
53     for (i = 0; i < r->num_holdingsData; i++)
54     {
55         Z_HoldingsRecord *h = r->holdingsData[i];
56         wrbuf_puts(wrbuf, " <holding>\n");
57
58         if (h->which == Z_HoldingsRecord_marcHoldingsRecord)
59         {
60             wrbuf_puts (wrbuf, "  <marc/>\n");
61         /*  h->u.marcHoldingsRecord) */
62         }
63         else if (h->which == Z_HoldingsRecord_holdingsAndCirc)
64         {
65             int j;
66             
67             Z_HoldingsAndCircData *d = h->u.holdingsAndCirc;
68         
69             opac_element_str(wrbuf, 2, "typeOfRecord", d->typeOfRecord);
70             opac_element_str(wrbuf, 2, "encodingLevel", d->encodingLevel);
71             opac_element_str(wrbuf, 2, "format", d->format);
72             opac_element_str(wrbuf, 2, "receiptAcqStatus", d->receiptAcqStatus);
73             opac_element_str (wrbuf, 2, "generalRetention", d->generalRetention);
74             opac_element_str (wrbuf, 2, "completeness", d->completeness);
75             opac_element_str (wrbuf, 2, "dateOfReport", d->dateOfReport);
76             opac_element_str (wrbuf, 2, "nucCode", d->nucCode);
77             opac_element_str (wrbuf, 2, "localLocation", d->localLocation);
78             opac_element_str (wrbuf, 2, "shelvingLocation", d->shelvingLocation);
79             opac_element_str (wrbuf, 2, "callNumber", d->callNumber);
80             opac_element_str (wrbuf, 2, "shelvingData", d->shelvingData);
81             
82             opac_element_str (wrbuf, 2, "copyNumber", d->copyNumber);
83             opac_element_str (wrbuf, 2, "publicNote", d->publicNote);
84             opac_element_str (wrbuf, 2, "reproductionNote", d->reproductionNote);
85             opac_element_str (wrbuf, 2, "termsUseRepro", d->termsUseRepro);
86             opac_element_str (wrbuf, 2, "enumAndChron", d->enumAndChron);
87             if (d->num_volumes)
88             {
89                 wrbuf_puts (wrbuf, "  <volumes>\n");
90                 for (j = 0; j<d->num_volumes; j++)
91                 {
92                     wrbuf_puts (wrbuf, "   <volume>\n");
93                     opac_element_str (wrbuf, 4, "enumeration",
94                                       d->volumes[j]->enumeration);
95                     opac_element_str (wrbuf, 4, "chronology",
96                                       d->volumes[j]->chronology);
97                     opac_element_str (wrbuf, 4, "enumAndChron",
98                                       d->volumes[j]->enumAndChron);
99                     wrbuf_puts (wrbuf, "   </volume>\n");
100                 }
101                 wrbuf_puts (wrbuf, "  </volumes>\n");
102             }
103             if (d->num_circulationData)
104             {
105                 wrbuf_puts (wrbuf, "  <circulations>\n");
106                 for (j = 0; j<d->num_circulationData; j++)
107                 {
108                     wrbuf_puts (wrbuf,"   <circulation>\n");
109                     opac_element_bool (wrbuf, 4, "availableNow",
110                                        d->circulationData[j]->availableNow);
111                     opac_element_str (wrbuf, 4, "availabiltyDate",
112                                       d->circulationData[j]->availablityDate);
113                     opac_element_str (wrbuf, 4, "availableThru",
114                                       d->circulationData[j]->availableThru);
115                     opac_element_str (wrbuf, 4, "restrictions",
116                                       d->circulationData[j]->restrictions);
117                     opac_element_str (wrbuf, 4, "itemId",
118                                       d->circulationData[j]->itemId);
119                     opac_element_bool (wrbuf, 4, "renewable",
120                                        d->circulationData[j]->renewable);
121                     opac_element_bool (wrbuf, 4, "onHold",
122                                        d->circulationData[j]->onHold);
123                     opac_element_str (wrbuf, 4, "enumAndChron",
124                                       d->circulationData[j]->enumAndChron);
125                     opac_element_str (wrbuf, 4, "midspine",
126                                       d->circulationData[j]->midspine);
127                     opac_element_str (wrbuf, 4, "temporaryLocation",
128                                       d->circulationData[j]->temporaryLocation);
129                     wrbuf_puts (wrbuf, "   </circulation>\n");
130                 }
131                 wrbuf_puts (wrbuf, "  </circulations>\n");
132             }
133         }
134         wrbuf_puts(wrbuf, " </holding>\n");
135     }
136     wrbuf_puts(wrbuf, "</holdings>\n");
137 }