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