2 * IR toolkit for tcl/tk
3 * (c) Index Data 1996-1998
4 * See the file LICENSE for details.
5 * Sebastian Hammer, Adam Dickmeiss
8 * Revision 1.11 1998-05-20 12:24:41 adam
9 * Fixed bug regaring missing element languages in TargetInfo.
10 * Changed code so that it works with ASN.1 compiled YAZ code.
12 * Revision 1.10 1998/04/02 14:31:08 adam
13 * This version works with compiled ASN.1 code.
15 * Revision 1.9 1997/11/24 11:34:38 adam
16 * Using odr_nullval() instead of ODR_NULLVAL when appropriate.
18 * Revision 1.8 1997/09/09 10:19:51 adam
19 * New MSV5.0 port with fewer warnings.
21 * Revision 1.7 1997/08/28 20:17:36 adam
24 * Revision 1.6 1997/05/14 06:57:14 adam
25 * Adopted to use YAZ with C++ support.
27 * Revision 1.5 1996/08/23 11:59:47 adam
28 * Bug fix: infinite look in ir_oid.
30 * Revision 1.4 1996/08/22 13:39:31 adam
31 * More work on explain.
33 * Revision 1.3 1996/08/21 13:32:50 adam
34 * Implemented saveFile method and extended loadFile method to work with it.
36 * Revision 1.2 1996/08/20 09:27:48 adam
37 * More work on explain.
38 * Renamed tkinit.c to tkmain.c. The tcl shell uses the Tcl 7.5 interface
39 * for socket i/o instead of the handcrafted one (for Tcl 7.3 and Tcl7.4).
41 * Revision 1.1 1996/08/16 15:07:43 adam
42 * First work on Explain.
67 typedef char *Z_ElementSetName;
68 typedef Odr_oid *Z_AttributeSetId;
69 typedef char *Z_InternationalString;
70 typedef char *Z_LanguageCode;
73 static int ir_UnitType (IrExpArg *iea,
74 Z_UnitType *p, const char *name, int argi);
75 static int ir_Unit (IrExpArg *iea,
76 Z_Unit *p, const char *name, int argi);
77 static int ir_VariantType (IrExpArg *iea,
78 Z_VariantType *p, const char *name, int argi);
79 static int ir_OmittedAttributeInterpretation (IrExpArg *iea,
80 Z_OmittedAttributeInterpretation *p, const char *name, int argi);
81 static int ir_AttributeTypeDetails (IrExpArg *iea,
82 Z_AttributeTypeDetails *p, const char *name, int argi);
83 static int ir_Specification (IrExpArg *iea,
84 Z_Specification *p, const char *name, int argi);
85 static int ir_RetrievalRecordDetails (IrExpArg *iea,
86 Z_RetrievalRecordDetails *p, const char *name, int argi);
87 static int ir_ElementInfo (IrExpArg *iea,
88 Z_ElementInfo *p, const char *name, int argi);
89 static int ir_InternationalString (IrExpArg *iea,
90 char *p, const char *name, int argi);
91 static int ir_TagSetInfo (IrExpArg *iea,
92 Z_TagSetInfo *p, const char *name, int argi);
93 static int ir_DatabaseName (IrExpArg *iea,
94 char *p, const char *name, int argi);
95 static int ir_AccessInfo (IrExpArg *iea,
96 Z_AccessInfo *p, const char *name, int argi);
97 static int ir_bool (IrExpArg *iea,
98 bool_t *p, const char *name, int argi);
99 static int ir_LanguageCode (IrExpArg *iea,
100 char *p, const char *name, int argi);
101 static int ir_Units (IrExpArg *iea,
102 Z_Units *p, const char *name, int argi);
103 static int ir_SortDetails (IrExpArg *iea,
104 Z_SortDetails *p, const char *name, int argi);
105 static int ir_ElementSetDetails (IrExpArg *iea,
106 Z_ElementSetDetails *p, const char *name, int argi);
107 static int ir_TermListDetails (IrExpArg *iea,
108 Z_TermListDetails *p, const char *name, int argi);
109 static int ir_AttributeValue (IrExpArg *iea,
110 Z_AttributeValue *p, const char *name, int argi);
111 static int ir_ElementDataType (IrExpArg *iea,
112 Z_ElementDataType *p, const char *name, int argi);
113 static int ir_ProximitySupport (IrExpArg *iea,
114 Z_ProximitySupport *p, const char *name, int argi);
115 static int ir_ProcessingInformation (IrExpArg *iea,
116 Z_ProcessingInformation *p, const char *name, int argi);
117 static int ir_AttributeCombinations (IrExpArg *iea,
118 Z_AttributeCombinations *p, const char *name, int argi);
119 static int ir_AttributeSetDetails (IrExpArg *iea,
120 Z_AttributeSetDetails *p, const char *name, int argi);
121 static int ir_DatabaseInfo (IrExpArg *iea,
122 Z_DatabaseInfo *p, const char *name, int argi);
123 static int ir_IconObject (IrExpArg *iea,
124 Z_IconObject *p, const char *name, int argi);
125 static int ir_RpnCapabilities (IrExpArg *iea,
126 Z_RpnCapabilities *p, const char *name, int argi);
127 static int ir_QueryTypeDetails (IrExpArg *iea,
128 Z_QueryTypeDetails *p, const char *name, int argi);
129 static int ir_ValueDescription (IrExpArg *iea,
130 Z_ValueDescription *p, const char *name, int argi);
131 static int ir_AttributeSetInfo (IrExpArg *iea,
132 Z_AttributeSetInfo *p, const char *name, int argi);
133 static int ir_SchemaInfo (IrExpArg *iea,
134 Z_SchemaInfo *p, const char *name, int argi);
135 static int ir_AttributeOccurrence (IrExpArg *iea,
136 Z_AttributeOccurrence *p, const char *name, int argi);
137 static int ir_AttributeCombination (IrExpArg *iea,
138 Z_AttributeCombination *p, const char *name, int argi);
139 static int ir_UnitInfo (IrExpArg *iea,
140 Z_UnitInfo *p, const char *name, int argi);
141 static int ir_VariantClass (IrExpArg *iea,
142 Z_VariantClass *p, const char *name, int argi);
143 static int ir_VariantSetInfo (IrExpArg *iea,
144 Z_VariantSetInfo *p, const char *name, int argi);
145 static int ir_RecordTag (IrExpArg *iea,
146 Z_RecordTag *p, const char *name, int argi);
147 static int ir_TermListInfo (IrExpArg *iea,
148 Z_TermListInfo *p, const char *name, int argi);
149 static int ir_StringOrNumeric (IrExpArg *iea,
150 Z_StringOrNumeric *p, const char *name, int argi);
151 static int ir_CategoryInfo (IrExpArg *iea,
152 Z_CategoryInfo *p, const char *name, int argi);
153 static int ir_ValueRange (IrExpArg *iea,
154 Z_ValueRange *p, const char *name, int argi);
155 static int ir_Term (IrExpArg *iea,
156 Z_Term *p, const char *name, int argi);
157 static int ir_DatabaseList (IrExpArg *iea,
158 Z_DatabaseList *p, const char *name, int argi);
159 static int ir_HumanString (IrExpArg *iea,
160 Z_HumanString *p, const char *name, int argi);
161 static int ir_CommonInfo (IrExpArg *iea,
162 Z_CommonInfo *p, const char *name, int argi);
163 static int ir_NetworkAddress (IrExpArg *iea,
164 Z_NetworkAddress *p, const char *name, int argi);
165 static int ir_Costs (IrExpArg *iea,
166 Z_Costs *p, const char *name, int argi);
167 static int ir_RecordSyntaxInfo (IrExpArg *iea,
168 Z_RecordSyntaxInfo *p, const char *name, int argi);
169 static int ir_OtherInformation (IrExpArg *iea,
170 Z_OtherInformation *p, const char *name, int argi);
171 static int ir_CategoryList (IrExpArg *iea,
172 Z_CategoryList *p, const char *name, int argi);
173 static int ir_VariantValue (IrExpArg *iea,
174 Z_VariantValue *p, const char *name, int argi);
175 static int ir_PerElementDetails (IrExpArg *iea,
176 Z_PerElementDetails *p, const char *name, int argi);
177 static int ir_AttributeDetails (IrExpArg *iea,
178 Z_AttributeDetails *p, const char *name, int argi);
179 static int ir_ExtendedServicesInfo (IrExpArg *iea,
180 Z_ExtendedServicesInfo *p, const char *name, int argi);
181 static int ir_AttributeType (IrExpArg *iea,
182 Z_AttributeType *p, const char *name, int argi);
183 static int ir_IntUnit (IrExpArg *iea,
184 Z_IntUnit *p, const char *name, int argi);
185 static int ir_Charge (IrExpArg *iea,
186 Z_Charge *p, const char *name, int argi);
187 static int ir_PrivateCapabilities (IrExpArg *iea,
188 Z_PrivateCapabilities *p, const char *name, int argi);
189 static int ir_ValueSet (IrExpArg *iea,
190 Z_ValueSet *p, const char *name, int argi);
191 static int ir_AttributeDescription (IrExpArg *iea,
192 Z_AttributeDescription *p, const char *name, int argi);
193 static int ir_Path (IrExpArg *iea,
194 Z_Path *p, const char *name, int argi);
195 static int ir_ContactInfo (IrExpArg *iea,
196 Z_ContactInfo *p, const char *name, int argi);
197 static int ir_SearchKey (IrExpArg *iea,
198 Z_SearchKey *p, const char *name, int argi);
199 static int ir_Iso8777Capabilities (IrExpArg *iea,
200 Z_Iso8777Capabilities *p, const char *name, int argi);
201 static int ir_AccessRestrictions (IrExpArg *iea,
202 Z_AccessRestrictions *p, const char *name, int argi);
203 static int ir_SortKeyDetails (IrExpArg *iea,
204 Z_SortKeyDetails *p, const char *name, int argi);
208 ir_match_start (const char *name, void *p, IrExpArg *iea, int argi)
212 if (argi >= iea->argc)
213 Tcl_AppendResult (iea->interp, name, " ", NULL);
216 if (argi < iea->argc)
218 if (strcmp (name, iea->argv[argi]))
222 Tcl_AppendResult (iea->interp, "{", name, " ", NULL);
224 Tcl_AppendResult (iea->interp, "{", NULL);
229 ir_match_end (const char *name, IrExpArg *iea, int argi)
231 if (argi >= iea->argc)
232 Tcl_AppendResult (iea->interp, "} ", NULL);
237 ir_choice (IrExpArg *iea, IrExpChoice *clist, int *what, void *p,
244 if (clist->id == *what)
245 return (*clist->handle)(iea, p, clist->name, argi);
249 if (argi >= iea->argc)
250 Tcl_AppendResult (iea->interp, "{} ", NULL);
254 static int ir_null (IrExpArg *iea,
255 Odr_null *p, const char *name, int argi)
257 if (!ir_match_start (name, p, iea, ++argi))
259 Tcl_AppendResult (iea->interp, "1 ", NULL);
260 return ir_match_end (name, iea, argi);
263 static int ir_CString (IrExpArg *iea,
264 char *p, const char *name, int argi)
266 if (!ir_match_start (name, p, iea, ++argi))
268 Tcl_AppendElement (iea->interp, p);
269 return ir_match_end (name, iea, argi);
272 static int ir_ElementSetName (IrExpArg *iea,
273 char *p, const char *name, int argi)
275 return ir_CString (iea, p, name, argi);
278 static int ir_DatabaseName (IrExpArg *iea,
279 char *p, const char *name, int argi)
281 return ir_CString (iea, p, name, argi);
284 static int ir_InternationalString (IrExpArg *iea,
285 char *p, const char *name, int argi)
287 return ir_CString (iea, p, name, argi);
290 static int ir_GeneralizedTime (IrExpArg *iea,
291 char *p, const char *name, int argi)
293 return ir_CString (iea, p, name, argi);
296 static int ir_oid (IrExpArg *iea,
297 Odr_oid *p, const char *name, int argi)
300 if (!ir_match_start (name, p, iea, ++argi))
306 sprintf (buf, "%c%d", first, *p);
307 Tcl_AppendResult (iea->interp, buf, NULL);
311 return ir_match_end (name, iea, argi);
314 static int ir_TagTypeMapping (IrExpArg *iea,
315 Z_TagTypeMapping **p, const char *name, int argi)
317 if (!ir_match_start (name, p, iea, ++argi))
320 return ir_match_end (name, iea, argi);
323 static int ir_PrimitiveDataType (IrExpArg *iea,
324 int *p, const char *name, int argi)
326 if (!ir_match_start (name, p, iea, ++argi))
329 return ir_match_end (name, iea, argi);
332 static int ir_octet (IrExpArg *iea,
333 Odr_oct *p, const char *name, int argi)
335 if (!ir_match_start (name, p, iea, ++argi))
338 return ir_match_end (name, iea, argi);
341 static int ir_choice_nop (IrExpArg *iea,
342 void *p, const char *name, int argi)
344 if (argi >= iea->argc)
345 Tcl_AppendResult (iea->interp, name, " ", NULL);
349 static int ir_bool (IrExpArg *iea,
350 bool_t *p, const char *name, int argi)
352 if (!ir_match_start (name, p, iea, ++argi))
354 Tcl_AppendResult (iea->interp, *p ? "1" : "0", NULL);
355 return ir_match_end (name, iea, argi);
358 static int ir_integer (IrExpArg *iea,
359 int *p, const char *name, int argi)
362 if (!ir_match_start (name, p, iea, ++argi))
364 sprintf (buf, "%d", *p);
365 Tcl_AppendResult (iea->interp, buf, NULL);
366 return ir_match_end (name, iea, argi);
369 static int ir_LanguageCode (IrExpArg *iea,
370 char *p, const char *name, int argi)
372 return ir_CString (iea, p, name, argi);
375 static int ir_External (IrExpArg *iea,
376 Z_External *p, const char *name, int argi)
378 if (!ir_match_start (name, p, iea, ++argi))
381 return ir_match_end (name, iea, argi);
384 static int ir_sequence (int (*fh)(), IrExpArg *iea, void *p, int *num,
385 const char *name, int argi)
387 void **pp = (void **) p;
390 if (!ir_match_start (name, p, iea, ++argi))
392 for (i = 0; i < *num; i++)
393 (*fh)(iea, pp[i], "", argi);
394 return ir_match_end (name, iea, argi);
397 static int ir_Term (IrExpArg *iea,
398 Z_Term *p, const char *name, int argi)
400 static IrExpChoice arm [] = {
401 { "general", Z_Term_general,
403 { "numeric", Z_Term_numeric,
405 { "characterString", Z_Term_characterString,
406 ir_InternationalString },
409 { "dateTime", Z_Term_dateTime,
410 ir_GeneralizedTime },
411 { "external", Z_Term_external,
413 { "null", Z_Term_null,
417 if (!ir_match_start (name, p, iea, ++argi))
420 ir_choice (iea, arm, &p->which, p->u.general, argi);
421 return ir_match_end (name, iea, argi);
424 static int ir_TargetInfo (IrExpArg *iea,
425 Z_TargetInfo *p, const char *name, int argi)
427 if (!ir_match_start (name, p, iea, ++argi))
429 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
430 ir_InternationalString (iea, p->name, "name", argi);
431 ir_HumanString (iea, p->recentNews, "recentNews", argi);
432 ir_IconObject (iea, p->icon, "icon", argi);
433 ir_bool (iea, p->namedResultSets, "namedResultSets", argi);
434 ir_bool (iea, p->multipleDBsearch, "multipleDBsearch", argi);
435 ir_integer (iea, p->maxResultSets, "maxResultSets", argi);
436 ir_integer (iea, p->maxResultSize, "maxResultSize", argi);
437 ir_integer (iea, p->maxTerms, "maxTerms", argi);
438 ir_IntUnit (iea, p->timeoutInterval, "timeoutInterval", argi);
439 ir_HumanString (iea, p->welcomeMessage, "welcomeMessage", argi);
440 ir_ContactInfo (iea, p->contactInfo, "contactInfo", argi);
441 ir_HumanString (iea, p->description, "description", argi);
442 ir_sequence (ir_InternationalString, iea, p->nicknames,
443 &p->num_nicknames, "nicknames", argi);
444 ir_HumanString (iea, p->usageRest, "usageRest", argi);
445 ir_HumanString (iea, p->paymentAddr, "paymentAddr", argi);
446 ir_HumanString (iea, p->hours, "hours", argi);
447 ir_sequence (ir_DatabaseList, iea, p->dbCombinations,
448 &p->num_dbCombinations, "dbCombinations", argi);
449 ir_sequence (ir_NetworkAddress, iea, p->addresses,
450 &p->num_addresses, "addresses", argi);
451 ir_sequence (ir_InternationalString, iea, p->languages,
452 &p->num_languages, "languages", argi);
453 ir_AccessInfo (iea, p->commonAccessInfo, "commonAccessInfo", argi);
454 return ir_match_end (name, iea, argi);
457 static int ir_DatabaseInfo (IrExpArg *iea,
458 Z_DatabaseInfo *p, const char *name, int argi)
460 static IrExpChoice arm_recordCount [] = {
461 { "actualNumber", Z_DatabaseInfo_actualNumber,
463 { "approxNumber", Z_DatabaseInfo_approxNumber,
467 if (!ir_match_start (name, p, iea, ++argi))
470 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
471 ir_DatabaseName (iea, p->name, "name", argi);
472 ir_null (iea, p->explainDatabase, "explainDatabase", argi);
473 ir_sequence (ir_DatabaseName, iea, p->nicknames,
474 &p->num_nicknames, "nicknames", argi);
475 ir_IconObject (iea, p->icon, "icon", argi);
476 ir_bool (iea, p->userFee, "userFee", argi);
477 ir_bool (iea, p->available, "available", argi);
478 ir_HumanString (iea, p->titleString, "titleString", argi);
479 ir_sequence (ir_HumanString, iea, p->keywords,
480 &p->num_keywords, "keywords", argi);
481 ir_HumanString (iea, p->description, "description", argi);
482 ir_DatabaseList (iea, p->associatedDbs, "associatedDbs", argi);
483 ir_DatabaseList (iea, p->subDbs, "subDbs", argi);
484 ir_HumanString (iea, p->disclaimers, "disclaimers", argi);
485 ir_HumanString (iea, p->news, "news", argi);
487 ir_choice (iea, arm_recordCount, &p->which,
488 p->u.actualNumber, argi);
489 ir_HumanString (iea, p->defaultOrder, "defaultOrder", argi);
490 ir_integer (iea, p->avRecordSize, "avRecordSize", argi);
491 ir_integer (iea, p->maxRecordSize, "maxRecordSize", argi);
492 ir_HumanString (iea, p->hours, "hours", argi);
493 ir_HumanString (iea, p->bestTime, "bestTime", argi);
494 ir_GeneralizedTime (iea, p->lastUpdate, "lastUpdate", argi);
495 ir_IntUnit (iea, p->updateInterval, "updateInterval", argi);
496 ir_HumanString (iea, p->coverage, "coverage", argi);
497 ir_bool (iea, p->proprietary, "proprietary", argi);
498 ir_HumanString (iea, p->copyrightText, "copyrightText", argi);
499 ir_HumanString (iea, p->copyrightNotice, "copyrightNotice", argi);
500 ir_ContactInfo (iea, p->producerContactInfo, "producerContactInfo", argi);
501 ir_ContactInfo (iea, p->supplierContactInfo, "supplierContactInfo", argi);
502 ir_ContactInfo (iea, p->submissionContactInfo, "submissionContactInfo", argi);
503 ir_AccessInfo (iea, p->accessInfo, "accessInfo", argi);
504 return ir_match_end (name, iea, argi);
507 static int ir_SchemaInfo (IrExpArg *iea,
508 Z_SchemaInfo *p, const char *name, int argi)
510 if (!ir_match_start (name, p, iea, ++argi))
512 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
513 ir_oid (iea, p->schema, "schema", argi);
514 ir_InternationalString (iea, p->name, "name", argi);
515 ir_HumanString (iea, p->description, "description", argi);
517 ir_sequence (ir_TagTypeMapping, iea, p->tagTypeMapping,
518 &p->num_tagTypeMapping, "tagTypeMapping", argi);
519 ir_sequence (ir_ElementInfo, iea, p->recordStructure,
520 &p->num_recordStructure, "recordStructure", argi);
521 return ir_match_end (name, iea, argi);
524 static int ir_ElementDataTypePrimitive (IrExpArg *iea,
525 int *p, const char *name, int argi)
527 static IrExpChoice arm[] = {
528 {"octetString", Z_PrimitiveDataType_octetString, ir_choice_nop },
529 {"numeric", Z_PrimitiveDataType_numeric, ir_choice_nop },
532 if (!ir_match_start (name, p, iea, ++argi))
534 ir_choice (iea, arm, p, odr_nullval(), argi);
535 return ir_match_end (name, iea, argi);
538 static int ir_ElementInfo (IrExpArg *iea,
539 Z_ElementInfo *p, const char *name, int argi)
541 if (!ir_match_start (name, p, iea, ++argi))
543 ir_InternationalString (iea, p->elementName, "elementName", argi);
544 ir_Path (iea, p->elementTagPath, "elementTagPath", argi);
545 ir_ElementDataType (iea, p->dataType, "dataType", argi);
546 ir_bool (iea, p->required, "required", argi);
547 ir_bool (iea, p->repeatable, "repeatable", argi);
548 ir_HumanString (iea, p->description, "description", argi);
549 return ir_match_end (name, iea, argi);
552 static int ir_ElementInfoList (IrExpArg *iea,
553 Z_ElementInfoList *p, const char *name, int argi)
555 if (!ir_match_start (name, p, iea, ++argi))
558 ir_sequence (ir_ElementInfo, iea, p->elements,
559 &p->num, "elements", argi);
561 ir_sequence (ir_ElementInfo, iea, p->list,
562 &p->num, "elements", argi);
564 return ir_match_end (name, iea, argi);
567 static int ir_ElementDataType (IrExpArg *iea,
568 Z_ElementDataType *p, const char *name, int argi)
570 static IrExpChoice arm[] = {
571 { "primitive", Z_ElementDataType_primitive,
572 ir_ElementDataTypePrimitive },
573 { "structured", Z_ElementDataType_structured,
574 ir_ElementInfoList },
576 if (!ir_match_start (name, p, iea, ++argi))
578 ir_choice (iea, arm, &p->which, p->u.primitive, argi);
579 return ir_match_end (name, iea, argi);
582 static int ir_PathUnit (IrExpArg *iea,
583 Z_PathUnit *p, const char *name, int argi)
585 if (!ir_match_start (name, p, iea, ++argi))
587 ir_integer (iea, p->tagType, "tagType", argi);
588 ir_StringOrNumeric (iea, p->tagValue, "tagValue", argi);
589 return ir_match_end (name, iea, argi);
592 static int ir_Path (IrExpArg *iea,
593 Z_Path *p, const char *name, int argi)
595 if (!ir_match_start (name, p, iea, ++argi))
598 ir_sequence (ir_PathUnit, iea, p->elements,
599 &p->num, "elements", argi);
601 ir_sequence (ir_PathUnit, iea, p->list,
602 &p->num, "elements", argi);
604 return ir_match_end (name, iea, argi);
608 static int ir_TagSetElements (IrExpArg *iea,
609 Z_TagSetElements *p, const char *name, int argi)
611 static int ir_TagSetElements (IrExpArg *iea,
612 Z_TagSetInfoElements *p, const char *name, int argi)
615 if (!ir_match_start (name, p, iea, ++argi))
617 ir_InternationalString (iea, p->elementname, "elementname", argi);
618 ir_sequence (ir_InternationalString, iea, p->nicknames,
619 &p->num_nicknames, "nicknames", argi);
620 ir_StringOrNumeric (iea, p->elementTag, "elementTag", argi);
621 ir_HumanString (iea, p->description, "description", argi);
622 ir_PrimitiveDataType (iea, p->dataType, "dataType", argi);
623 ir_OtherInformation (iea, p->otherTagInfo, "otherTagInfo", argi);
624 return ir_match_end (name, iea, argi);
627 static int ir_TagSetInfo (IrExpArg *iea,
628 Z_TagSetInfo *p, const char *name, int argi)
630 if (!ir_match_start (name, p, iea, ++argi))
632 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
633 ir_oid (iea, p->tagSet, "tagSet", argi);
634 ir_InternationalString (iea, p->name, "name", argi);
635 ir_HumanString (iea, p->description, "description", argi);
636 ir_sequence (ir_TagSetElements, iea, p->elements,
637 &p->num_elements, "elements", argi);
638 return ir_match_end (name, iea, argi);
641 static int ir_RecordSyntaxInfo (IrExpArg *iea,
642 Z_RecordSyntaxInfo *p, const char *name, int argi)
644 if (!ir_match_start (name, p, iea, ++argi))
646 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
647 ir_oid (iea, p->recordSyntax, "recordSyntax", argi);
648 ir_InternationalString (iea, p->name, "name", argi);
649 ir_sequence (ir_oid, iea, p->transferSyntaxes,
650 &p->num_transferSyntaxes, "transferSyntaxes", argi);
651 ir_HumanString (iea, p->description, "description", argi);
652 ir_InternationalString (iea, p->asn1Module, "asn1Module", argi);
653 ir_sequence (ir_ElementInfo, iea, p->abstractStructure,
654 &p->num_abstractStructure, "abstractStructure", argi);
655 return ir_match_end (name, iea, argi);
658 static int ir_AttributeType (IrExpArg *iea,
659 Z_AttributeType *p, const char *name, int argi)
661 if (!ir_match_start (name, p, iea, ++argi))
663 ir_InternationalString (iea, p->name, "name", argi);
664 ir_HumanString (iea, p->description, "description", argi);
665 ir_integer (iea, p->attributeType, "attributeType", argi);
666 ir_sequence (ir_AttributeDescription, iea, p->attributeValues,
667 &p->num_attributeValues, "attributeValues", argi);
668 return ir_match_end (name, iea, argi);
671 static int ir_AttributeSetInfo (IrExpArg *iea,
672 Z_AttributeSetInfo *p, const char *name, int argi)
674 if (!ir_match_start (name, p, iea, ++argi))
676 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
677 ir_oid (iea, p->attributeSet, "attributeSet", argi);
678 ir_InternationalString (iea, p->name, "name", argi);
679 ir_sequence (ir_AttributeType, iea, p->attributes,
680 &p->num_attributes, "attributes", argi);
681 ir_HumanString (iea, p->description, "description", argi);
682 return ir_match_end (name, iea, argi);
685 static int ir_AttributeDescription (IrExpArg *iea,
686 Z_AttributeDescription *p, const char *name, int argi)
688 if (!ir_match_start (name, p, iea, ++argi))
690 ir_InternationalString (iea, p->name, "name", argi);
691 ir_HumanString (iea, p->description, "description", argi);
692 ir_StringOrNumeric (iea, p->attributeValue, "attributeValue", argi);
693 ir_sequence (ir_StringOrNumeric,iea, p->equivalentAttributes,
694 &p->num_equivalentAttributes, "equivalentAttributes", argi);
695 return ir_match_end (name, iea, argi);
698 static int ir_TermListElement (IrExpArg *iea,
699 Z_TermListElement *p, const char *name, int argi)
701 static IrExpChoice searchCostArm [] = {
702 { "optimized", Z_TermListElement_optimized, ir_choice_nop },
703 { "normal", Z_TermListElement_normal, ir_choice_nop },
704 { "expensive", Z_TermListElement_expensive, ir_choice_nop },
705 { "filter", Z_TermListElement_filter, ir_choice_nop },
707 ir_InternationalString (iea, p->name, "name", argi);
708 ir_HumanString (iea, p->title, "title", argi);
710 ir_choice (iea, searchCostArm, p->searchCost, odr_nullval(), argi);
712 ir_bool (iea, p->scanable, "scanable", argi);
713 ir_sequence (ir_InternationalString, iea, p->broader,
714 &p->num_broader, "broader", argi);
715 ir_sequence (ir_InternationalString, iea, p->narrower,
716 &p->num_narrower, "narrower", argi);
717 return ir_match_end (name, iea, argi);
720 static int ir_TermListInfo (IrExpArg *iea,
721 Z_TermListInfo *p, const char *name, int argi)
723 if (!ir_match_start (name, p, iea, ++argi))
725 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
726 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
727 ir_sequence (ir_TermListElement, iea, p->termLists,
728 &p->num_termLists, "termLists", argi);
729 return ir_match_end (name, iea, argi);
732 static int ir_ExtendedServicesInfo (IrExpArg *iea,
733 Z_ExtendedServicesInfo *p, const char *name, int argi)
735 static IrExpChoice waitActionArm [] = {
736 { "waitSupported", Z_ExtendedServicesInfo_waitSupported,
738 { "waitAlways", Z_ExtendedServicesInfo_waitAlways,
740 { "waitNotSupported", Z_ExtendedServicesInfo_waitNotSupported,
742 { "depends", Z_ExtendedServicesInfo_depends,
744 { "notSaying", Z_ExtendedServicesInfo_notSaying,
748 ir_InternationalString (iea, p->name, "name", argi);
749 if (!ir_match_start (name, p, iea, ++argi))
751 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
752 ir_oid (iea, p->type, "type", argi);
753 ir_InternationalString (iea, p->name, "name", argi);
754 ir_bool (iea, p->privateType, "privateType", argi);
755 ir_bool (iea, p->restrictionsApply, "restrictionsApply", argi);
756 ir_bool (iea, p->feeApply, "feeApply", argi);
757 ir_bool (iea, p->available, "available", argi);
758 ir_bool (iea, p->retentionSupported, "retentionSupported", argi);
760 ir_choice (iea, waitActionArm, p->waitAction, odr_nullval(), argi);
762 ir_HumanString (iea, p->description, "description", argi);
763 ir_External (iea, p->specificExplain, "specificExplain", argi);
764 ir_InternationalString (iea, p->esASN, "esASN", argi);
765 return ir_match_end (name, iea, argi);
768 static int ir_AttributeDetails (IrExpArg *iea,
769 Z_AttributeDetails *p, const char *name, int argi)
771 if (!ir_match_start (name, p, iea, ++argi))
773 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
774 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
775 ir_sequence (ir_AttributeSetDetails, iea, p->attributesBySet,
776 &p->num_attributesBySet, "attributesBySet", argi);
777 ir_AttributeCombinations (iea, p->attributeCombinations,
778 "attributeCombinations", argi);
779 return ir_match_end (name, iea, argi);
782 static int ir_AttributeSetDetails (IrExpArg *iea,
783 Z_AttributeSetDetails *p, const char *name, int argi)
785 if (!ir_match_start (name, p, iea, ++argi))
787 ir_oid (iea, p->attributeSet, "attributeSet", argi);
788 ir_sequence (ir_AttributeTypeDetails, iea, p->attributesByType,
789 &p->num_attributesByType, "attributesByType", argi);
790 return ir_match_end (name, iea, argi);
793 static int ir_AttributeTypeDetails (IrExpArg *iea,
794 Z_AttributeTypeDetails *p, const char *name, int argi)
796 if (!ir_match_start (name, p, iea, ++argi))
798 ir_integer (iea, p->attributeType, "attributeType", argi);
799 ir_OmittedAttributeInterpretation (iea, p->defaultIfOmitted,
800 "defaultIfOmitted", argi);
801 ir_sequence (ir_AttributeValue, iea, p->attributeValues,
802 &p->num_attributeValues, "attributeValues", argi);
803 return ir_match_end (name, iea, argi);
806 static int ir_OmittedAttributeInterpretation (IrExpArg *iea,
807 Z_OmittedAttributeInterpretation *p, const char *name, int argi)
809 if (!ir_match_start (name, p, iea, ++argi))
811 ir_StringOrNumeric (iea, p->defaultValue, "defaultValue", argi);
812 ir_HumanString (iea, p->defaultDescription, "defaultDescription", argi);
813 return ir_match_end (name, iea, argi);
816 static int ir_EScanInfo (IrExpArg *iea,
817 Z_EScanInfo *p, const char *name, int argi)
819 if (!ir_match_start (name, p, iea, ++argi))
821 ir_integer (iea, p->maxStepSize, "maxStepSize", argi);
822 ir_HumanString (iea, p->collatingSequence, "collatingSequence", argi);
823 ir_bool (iea, p->increasing, "increasing", argi);
824 return ir_match_end (name, iea, argi);
827 static int ir_TermListDetails (IrExpArg *iea,
828 Z_TermListDetails *p, const char *name, int argi)
830 if (!ir_match_start (name, p, iea, ++argi))
832 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
833 ir_InternationalString (iea, p->termListName, "termListName", argi);
834 ir_HumanString (iea, p->description, "description", argi);
835 ir_AttributeCombinations (iea, p->attributes, "attributes", argi);
837 ir_EScanInfo (iea, p->scanInfo, "scanInfo", argi);
839 ir_integer (iea, p->estNumberTerms, "estNumberTerms", argi);
840 ir_sequence (ir_Term, iea, p->sampleTerms,
841 &p->num_sampleTerms, "sampleTerms", argi);
842 return ir_match_end (name, iea, argi);
845 static int ir_ElementSetDetails (IrExpArg *iea,
846 Z_ElementSetDetails *p, const char *name, int argi)
848 if (!ir_match_start (name, p, iea, ++argi))
850 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
851 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
852 ir_ElementSetName (iea, p->elementSetName, "elementSetName", argi);
853 ir_oid (iea, p->recordSyntax, "recordSyntax", argi);
854 ir_oid (iea, p->schema, "schema", argi);
855 ir_HumanString (iea, p->description, "description", argi);
856 ir_sequence (ir_PerElementDetails, iea, p->detailsPerElement,
857 &p->num_detailsPerElement, "detailsPerElement", argi);
858 return ir_match_end (name, iea, argi);
861 static int ir_RetrievalRecordDetails (IrExpArg *iea,
862 Z_RetrievalRecordDetails *p, const char *name, int argi)
864 if (!ir_match_start (name, p, iea, ++argi))
866 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
867 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
868 ir_oid (iea, p->schema, "schema", argi);
869 ir_oid (iea, p->recordSyntax, "recordSyntax", argi);
870 ir_HumanString (iea, p->description, "description", argi);
871 ir_sequence (ir_PerElementDetails, iea, p->detailsPerElement,
872 &p->num_detailsPerElement, "detailsPerElement", argi);
873 return ir_match_end (name, iea, argi);
876 static int ir_PerElementDetails (IrExpArg *iea,
877 Z_PerElementDetails *p, const char *name, int argi)
879 if (!ir_match_start (name, p, iea, ++argi))
881 ir_InternationalString (iea, p->name, "name", argi);
882 ir_RecordTag (iea, p->recordTag, "recordTag", argi);
883 ir_sequence (ir_Path, iea, p->schemaTags,
884 &p->num_schemaTags, "schemaTags", argi);
885 ir_integer (iea, p->maxSize, "maxSize", argi);
886 ir_integer (iea, p->minSize, "minSize", argi);
887 ir_integer (iea, p->avgSize, "avgSize", argi);
888 ir_integer (iea, p->fixedSize, "fixedSize", argi);
889 ir_bool (iea, p->repeatable, "repeatable", argi);
890 ir_bool (iea, p->required, "required", argi);
891 ir_HumanString (iea, p->description, "description", argi);
892 ir_HumanString (iea, p->contents, "contents", argi);
893 ir_HumanString (iea, p->billingInfo, "billingInfo", argi);
894 ir_HumanString (iea, p->restrictions, "restrictions", argi);
895 ir_sequence (ir_InternationalString, iea, p->alternateNames,
896 &p->num_alternateNames, "alternateNames", argi);
897 ir_sequence (ir_InternationalString, iea, p->genericNames,
898 &p->num_genericNames, "genericNames", argi);
899 ir_AttributeCombinations (iea, p->searchAccess, "searchAccess", argi);
900 return ir_match_end (name, iea, argi);
903 static int ir_RecordTag (IrExpArg *iea,
904 Z_RecordTag *p, const char *name, int argi)
906 if (!ir_match_start (name, p, iea, ++argi))
908 ir_StringOrNumeric (iea, p->qualifier, "qualifier", argi);
909 ir_StringOrNumeric (iea, p->tagValue, "tagValue", argi);
910 return ir_match_end (name, iea, argi);
913 static int ir_SortDetails (IrExpArg *iea,
914 Z_SortDetails *p, const char *name, int argi)
916 if (!ir_match_start (name, p, iea, ++argi))
918 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
919 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
920 ir_sequence (ir_SortKeyDetails, iea, p->sortKeys,
921 &p->num_sortKeys, "sortKeys", argi);
922 return ir_match_end (name, iea, argi);
925 static int ir_SortKeyDetails (IrExpArg *iea,
926 Z_SortKeyDetails *p, const char *name, int argi)
928 static IrExpChoice sortArm [] = {
929 { "always", Z_SortKeyDetails_always,
931 { "never", Z_SortKeyDetails_never,
933 { "defaultYes", Z_SortKeyDetails_default_yes,
935 { "defaultNo", Z_SortKeyDetails_default_no,
939 static IrExpChoice sortArm2 [] = {
940 { "character", Z_SortKeyDetails_character,
942 { "numeric", Z_SortKeyDetails_numeric,
944 { "structured", Z_SortKeyDetails_structured,
948 if (!ir_match_start (name, p, iea, ++argi))
950 ir_HumanString (iea, p->description, "description", argi);
951 ir_sequence (ir_Specification, iea, p->elementSpecifications,
952 &p->num_elementSpecifications, "elementSpecifications", argi);
953 ir_AttributeCombinations (iea, p->attributeSpecifications,
954 "attributeSpecifications", argi);
955 ir_choice (iea, sortArm2, &p->which, p->u.character, argi);
957 if (p->caseSensitivity)
958 ir_choice (iea, sortArm, p->caseSensitivity, odr_nullval(), argi);
960 return ir_match_end (name, iea, argi);
963 static int ir_ProcessingInformation (IrExpArg *iea,
964 Z_ProcessingInformation *p, const char *name, int argi)
966 IrExpChoice arm[] = {
967 { "access", Z_ProcessingInformation_access,
969 { "search", Z_ProcessingInformation_search,
971 { "retrieval", Z_ProcessingInformation_retrieval,
973 { "recordPresentation", Z_ProcessingInformation_record_presentation,
975 { "recordHandling", Z_ProcessingInformation_record_handling,
978 if (!ir_match_start (name, p, iea, ++argi))
980 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
981 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
983 ir_choice (iea, arm, p->processingContext, odr_nullval(), argi);
984 ir_InternationalString (iea, p->name, "name", argi);
985 ir_oid (iea, p->oid, "oid", argi);
986 ir_HumanString (iea, p->description, "description", argi);
987 ir_External (iea, p->instructions, "instructions", argi);
988 return ir_match_end (name, iea, argi);
991 static int ir_VariantSetInfo (IrExpArg *iea,
992 Z_VariantSetInfo *p, const char *name, int argi)
994 if (!ir_match_start (name, p, iea, ++argi))
996 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
997 ir_oid (iea, p->variantSet, "variantSet", argi);
998 ir_InternationalString (iea, p->name, "name", argi);
999 ir_sequence (ir_VariantClass, iea, p->variants,
1000 &p->num_variants, "variants", argi);
1001 return ir_match_end (name, iea, argi);
1004 static int ir_VariantClass (IrExpArg *iea,
1005 Z_VariantClass *p, const char *name, int argi)
1007 if (!ir_match_start (name, p, iea, ++argi))
1009 ir_InternationalString (iea, p->name, "name", argi);
1010 ir_HumanString (iea, p->description, "description", argi);
1011 ir_integer (iea, p->variantClass, "variantClass", argi);
1012 ir_sequence (ir_VariantType, iea, p->variantTypes,
1013 &p->num_variantTypes, "variantTypes", argi);
1014 return ir_match_end (name, iea, argi);
1017 static int ir_VariantType (IrExpArg *iea,
1018 Z_VariantType *p, const char *name, int argi)
1020 if (!ir_match_start (name, p, iea, ++argi))
1022 ir_InternationalString (iea, p->name, "name", argi);
1023 ir_HumanString (iea, p->description, "description", argi);
1024 ir_integer (iea, p->variantType, "variantType", argi);
1025 ir_VariantValue (iea, p->variantValue, "variantValue", argi);
1026 return ir_match_end (name, iea, argi);
1029 static int ir_ValueSetEnumerated (IrExpArg *iea,
1030 Z_ValueSetEnumerated *p, const char *name, int argi)
1032 if (!ir_match_start (name, p, iea, ++argi))
1034 ir_sequence (ir_ValueDescription, iea, p->elements,
1035 &p->num, "enumerated", argi);
1036 return ir_match_end (name, iea, argi);
1039 static int ir_ValueSet (IrExpArg *iea,
1040 Z_ValueSet *p, const char *name, int argi)
1042 IrExpChoice arm [] = {
1043 { "range", Z_ValueSet_range, ir_ValueRange },
1044 { "enumerated", Z_ValueSet_enumerated, ir_ValueSetEnumerated },
1046 if (!ir_match_start (name, p, iea, ++argi))
1048 ir_choice (iea, arm, &p->which, p->u.range, argi);
1049 return ir_match_end (name, iea, argi);
1052 static int ir_VariantValue (IrExpArg *iea,
1053 Z_VariantValue *p, const char *name, int argi)
1055 if (!ir_match_start (name, p, iea, ++argi))
1057 ir_PrimitiveDataType (iea, p->dataType, "dataType", argi);
1059 ir_ValueSet (iea, p->values, "values", argi);
1060 return ir_match_end (name, iea, argi);
1063 static int ir_ValueRange (IrExpArg *iea,
1064 Z_ValueRange *p, const char *name, int argi)
1066 if (!ir_match_start (name, p, iea, ++argi))
1068 ir_ValueDescription (iea, p->lower, "lower", argi);
1069 ir_ValueDescription (iea, p->upper, "upper", argi);
1070 return ir_match_end (name, iea, argi);
1073 static int ir_ValueDescription (IrExpArg *iea,
1074 Z_ValueDescription *p, const char *name, int argi)
1076 static IrExpChoice arm [] = {
1077 { "integer", Z_ValueDescription_integer, ir_integer },
1078 { "string", Z_ValueDescription_string, ir_InternationalString},
1079 { "octets", Z_ValueDescription_octets, ir_octet},
1080 { "oid", Z_ValueDescription_oid, ir_oid},
1081 { "unit", Z_ValueDescription_unit, ir_Unit},
1082 { "valueAndUnit", Z_ValueDescription_valueAndUnit, ir_IntUnit},
1085 if (!ir_match_start (name, p, iea, ++argi))
1087 ir_choice (iea, arm, &p->which, p->u.integer, argi);
1088 return ir_match_end (name, iea, argi);
1091 static int ir_UnitInfo (IrExpArg *iea,
1092 Z_UnitInfo *p, const char *name, int argi)
1094 if (!ir_match_start (name, p, iea, ++argi))
1096 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
1097 ir_InternationalString (iea, p->unitSystem, "unitSystem", argi);
1098 ir_HumanString (iea, p->description, "description", argi);
1099 ir_sequence (ir_UnitType, iea, p->units,
1100 &p->num_units, "units", argi);
1101 return ir_match_end (name, iea, argi);
1104 static int ir_UnitType (IrExpArg *iea,
1105 Z_UnitType *p, const char *name, int argi)
1107 if (!ir_match_start (name, p, iea, ++argi))
1109 ir_InternationalString (iea, p->name, "name", argi);
1110 ir_HumanString (iea, p->description, "description", argi);
1111 ir_StringOrNumeric (iea, p->unitType, "unitType", argi);
1112 ir_sequence (ir_Units, iea, p->units, &p->num_units, "units", argi);
1113 return ir_match_end (name, iea, argi);
1116 static int ir_Units (IrExpArg *iea,
1117 Z_Units *p, const char *name, int argi)
1119 if (!ir_match_start (name, p, iea, ++argi))
1121 ir_InternationalString (iea, p->name, "name", argi);
1122 ir_HumanString (iea, p->description, "description", argi);
1123 ir_StringOrNumeric (iea, p->unit, "unit", argi);
1124 return ir_match_end (name, iea, argi);
1127 static int ir_CategoryList (IrExpArg *iea,
1128 Z_CategoryList *p, const char *name, int argi)
1130 if (!ir_match_start (name, p, iea, ++argi))
1132 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
1133 ir_sequence (ir_CategoryInfo, iea, p->categories,
1134 &p->num_categories, "categories", argi);
1135 return ir_match_end (name, iea, argi);
1138 static int ir_CategoryInfo (IrExpArg *iea,
1139 Z_CategoryInfo *p, const char *name, int argi)
1141 if (!ir_match_start (name, p, iea, ++argi))
1143 ir_InternationalString (iea, p->category, "category", argi);
1144 ir_InternationalString (iea, p->originalCategory, "originalCategory", argi);
1145 ir_HumanString (iea, p->description, "description", argi);
1146 ir_InternationalString (iea, p->asn1Module, "asn1Module", argi);
1147 return ir_match_end (name, iea, argi);
1150 static int ir_CommonInfo (IrExpArg *iea,
1151 Z_CommonInfo *p, const char *name, int argi)
1153 if (!ir_match_start (name, p, iea, ++argi))
1155 ir_GeneralizedTime (iea, p->dateAdded, "dateAdded", argi);
1156 ir_GeneralizedTime (iea, p->dateChanged, "dateChanged", argi);
1157 ir_GeneralizedTime (iea, p->expiry, "expiry", argi);
1158 ir_LanguageCode (iea, p->humanStringLanguage, "humanString-Language",
1160 ir_OtherInformation (iea, p->otherInfo, "otherInfo", argi);
1161 return ir_match_end (name, iea, argi);
1164 static int ir_HumanStringUnit (IrExpArg *iea,
1165 Z_HumanStringUnit *p, const char *name, int argi)
1167 if (!ir_match_start (name, p, iea, ++argi))
1169 ir_LanguageCode (iea, p->language, "language", argi);
1170 ir_InternationalString (iea, p->text, "text", argi);
1171 return ir_match_end (name, iea, argi);
1174 static int ir_HumanString (IrExpArg *iea,
1175 Z_HumanString *p, const char *name, int argi)
1177 if (!ir_match_start (name, p, iea, ++argi))
1179 ir_sequence (ir_HumanStringUnit, iea, p->strings,
1180 &p->num_strings, "strings", argi);
1181 return ir_match_end (name, iea, argi);
1184 static int ir_IconObjectUnit (IrExpArg *iea,
1185 Z_IconObjectUnit *p, const char *name, int argi)
1187 static IrExpChoice arm [] = {
1188 { "ianaType", Z_IconObjectUnit_ianaType, ir_InternationalString },
1189 { "z3950type", Z_IconObjectUnit_z3950type, ir_InternationalString },
1190 { "otherType", Z_IconObjectUnit_otherType, ir_InternationalString },
1192 if (!ir_match_start (name, p, iea, ++argi))
1194 ir_choice (iea, arm, &p->which, odr_nullval(), argi);
1195 ir_octet (iea, p->content, "content", argi);
1196 return ir_match_end (name, iea, argi);
1199 static int ir_IconObject (IrExpArg *iea,
1200 Z_IconObject *p, const char *name, int argi)
1202 if (!ir_match_start (name, p, iea, ++argi))
1204 ir_sequence (ir_IconObjectUnit, iea, p->elements,
1205 &p->num, "iconUnits", argi);
1206 return ir_match_end (name, iea, argi);
1209 static int ir_ContactInfo (IrExpArg *iea,
1210 Z_ContactInfo *p, const char *name, int argi)
1212 if (!ir_match_start (name, p, iea, ++argi))
1214 ir_InternationalString (iea, p->name, "name", argi);
1215 ir_HumanString (iea, p->description, "description", argi);
1216 ir_HumanString (iea, p->address, "address", argi);
1217 ir_InternationalString (iea, p->email, "email", argi);
1218 ir_InternationalString (iea, p->phone, "phone", argi);
1219 return ir_match_end (name, iea, argi);
1222 static int ir_NetworkAddressIA (IrExpArg *iea,
1223 Z_NetworkAddressIA *p, const char *name, int argi)
1225 if (!ir_match_start (name, p, iea, ++argi))
1227 ir_InternationalString (iea, p->hostAddress, "hostAddress", argi);
1228 ir_integer (iea, p->port, "port", argi);
1229 return ir_match_end (name, iea, argi);
1232 static int ir_NetworkAddressOPA (IrExpArg *iea,
1233 Z_NetworkAddressOPA *p, const char *name, int argi)
1235 if (!ir_match_start (name, p, iea, ++argi))
1237 ir_InternationalString (iea, p->pSel, "pSel", argi);
1238 ir_InternationalString (iea, p->sSel, "sSel", argi);
1239 ir_InternationalString (iea, p->tSel, "tSel", argi);
1240 ir_InternationalString (iea, p->nSap, "nSap", argi);
1241 return ir_match_end (name, iea, argi);
1244 static int ir_NetworkAddressOther (IrExpArg *iea,
1245 Z_NetworkAddressOther *p, const char *name, int argi)
1247 if (!ir_match_start (name, p, iea, ++argi))
1249 ir_InternationalString (iea, p->type, "type", argi);
1250 ir_InternationalString (iea, p->address, "address", argi);
1251 return ir_match_end (name, iea, argi);
1254 static int ir_NetworkAddress (IrExpArg *iea,
1255 Z_NetworkAddress *p, const char *name, int argi)
1257 IrExpChoice arm [] = {
1258 { "iA", Z_NetworkAddress_iA, ir_NetworkAddressIA },
1259 { "oPA", Z_NetworkAddress_oPA, ir_NetworkAddressOPA },
1260 { "other", Z_NetworkAddress_other, ir_NetworkAddressOther },
1262 if (!ir_match_start (name, p, iea, ++argi))
1264 ir_choice (iea, arm, &p->which, p->u.internetAddress, argi);
1265 return ir_match_end (name, iea, argi);
1268 static int ir_AccessInfo (IrExpArg *iea,
1269 Z_AccessInfo *p, const char *name, int argi)
1271 if (!ir_match_start (name, p, iea, ++argi))
1273 ir_sequence (ir_QueryTypeDetails, iea, p->queryTypesSupported,
1274 &p->num_queryTypesSupported, "queryTypesSupported", argi);
1275 ir_sequence (ir_oid, iea, p->diagnosticsSets,
1276 &p->num_diagnosticsSets, "diagnosticsSets", argi);
1277 ir_sequence (ir_oid, iea, p->attributeSetIds,
1278 &p->num_attributeSetIds, "attributeSetIds", argi);
1279 ir_sequence (ir_oid, iea, p->schemas,
1280 &p->num_schemas, "schemas", argi);
1281 ir_sequence (ir_oid, iea, p->recordSyntaxes,
1282 &p->num_recordSyntaxes, "recordSyntaxes", argi);
1283 ir_sequence (ir_oid, iea, p->resourceChallenges,
1284 &p->num_resourceChallenges, "resourceChallenges", argi);
1285 ir_AccessRestrictions (iea, p->restrictedAccess, "restrictedAccess", argi);
1286 ir_Costs (iea, p->costInfo, "costInfo", argi);
1287 ir_sequence (ir_oid, iea, p->variantSets,
1288 &p->num_variantSets, "variantSets", argi);
1289 ir_sequence (ir_ElementSetName, iea, p->elementSetNames,
1290 &p->num_elementSetNames, "elementSetNames", argi);
1291 ir_sequence (ir_InternationalString, iea, p->unitSystems,
1292 &p->num_unitSystems, "unitSystems", argi);
1293 return ir_match_end (name, iea, argi);
1297 static int ir_QueryTypeDetails (IrExpArg *iea,
1298 Z_QueryTypeDetails *p, const char *name, int argi)
1300 static IrExpChoice arm[] = {
1301 { "private", Z_QueryTypeDetails_private,
1302 ir_PrivateCapabilities },
1303 { "rpn", Z_QueryTypeDetails_rpn,
1304 ir_RpnCapabilities },
1305 { "iso8777", Z_QueryTypeDetails_iso8777,
1306 ir_Iso8777Capabilities },
1307 { "z39_58", Z_QueryTypeDetails_z39_58,
1309 { "erpn", Z_QueryTypeDetails_erpn,
1310 ir_RpnCapabilities },
1311 { "rankedList", Z_QueryTypeDetails_rankedList,
1315 if (!ir_match_start (name, p, iea, ++argi))
1317 ir_choice (iea, arm, &p->which, p->u.zprivate, argi);
1318 return ir_match_end (name, iea, argi);
1321 static int ir_PrivateCapOperator (IrExpArg *iea,
1322 Z_PrivateCapOperator *p, const char *name, int argi)
1324 if (!ir_match_start (name, p, iea, ++argi))
1326 ir_InternationalString (iea, p->roperator, "operator", argi);
1327 ir_HumanString (iea, p->description, "description", argi);
1328 return ir_match_end (name, iea, argi);
1331 static int ir_PrivateCapabilities (IrExpArg *iea,
1332 Z_PrivateCapabilities *p, const char *name, int argi)
1334 if (!ir_match_start (name, p, iea, ++argi))
1337 ir_sequence (ir_PrivateCapOperator, iea, p->operators,
1338 &p->num_operators, "operators", argi);
1339 ir_sequence (ir_SearchKey, iea, p->searchKeys,
1340 &p->num_searchKeys, "searchKeys", argi);
1341 ir_sequence (ir_HumanString, iea, p->description,
1342 &p->num_description, "description", argi);
1343 return ir_match_end (name, iea, argi);
1346 static int ir_RpnCapabilities (IrExpArg *iea,
1347 Z_RpnCapabilities *p, const char *name, int argi)
1349 if (!ir_match_start (name, p, iea, ++argi))
1351 ir_sequence (ir_integer, iea, p->operators,
1352 &p->num_operators, "operators", argi);
1353 ir_bool (iea, p->resultSetAsOperandSupported,
1354 "resultSetAsOperandSupported", argi);
1355 ir_bool (iea, p->restrictionOperandSupported,
1356 "restrictionOperandSupported", argi);
1357 ir_ProximitySupport (iea, p->proximity, "proximity", argi);
1358 return ir_match_end (name, iea, argi);
1361 static int ir_Iso8777Capabilities (IrExpArg *iea,
1362 Z_Iso8777Capabilities *p, const char *name, int argi)
1364 if (!ir_match_start (name, p, iea, ++argi))
1366 ir_sequence (ir_SearchKey, iea, p->searchKeys,
1367 &p->num_searchKeys, "searchKeys", argi);
1368 ir_HumanString (iea, p->restrictions, "restrictions", argi);
1369 return ir_match_end (name, iea, argi);
1372 static int ir_ProxSupportPrivate (IrExpArg *iea,
1373 Z_ProxSupportPrivate *p, const char *name, int argi)
1375 if (!ir_match_start (name, p, iea, ++argi))
1377 ir_integer (iea, p->unit, "unit", argi);
1378 ir_HumanString (iea, p->description, "description", argi);
1379 return ir_match_end (name, iea, argi);
1382 static int ir_ProxSupportUnit (IrExpArg *iea,
1383 Z_ProxSupportUnit *p, const char *name, int argi)
1385 static IrExpChoice arm [] = {
1386 { "known", Z_ProxSupportUnit_known, ir_integer },
1387 { "private", Z_ProxSupportUnit_private, ir_ProxSupportPrivate },
1389 if (!ir_match_start (name, p, iea, ++argi))
1391 ir_choice (iea, arm, &p->which, p->u.zprivate, argi);
1392 return ir_match_end (name, iea, argi);
1395 static int ir_ProximitySupport (IrExpArg *iea,
1396 Z_ProximitySupport *p, const char *name, int argi)
1398 if (!ir_match_start (name, p, iea, ++argi))
1400 ir_bool (iea, p->anySupport, "anySupport", argi);
1401 ir_sequence (ir_ProxSupportUnit, iea, p->unitsSupported,
1402 &p->num_unitsSupported, "unitsSupported", argi);
1403 return ir_match_end (name, iea, argi);
1406 static int ir_SearchKey (IrExpArg *iea,
1407 Z_SearchKey *p, const char *name, int argi)
1409 if (!ir_match_start (name, p, iea, ++argi))
1411 ir_InternationalString (iea, p->searchKey, "searchKey", argi);
1412 ir_HumanString (iea, p->description, "description", argi);
1413 return ir_match_end (name, iea, argi);
1416 static int ir_AccessRestrictionsUnit (IrExpArg *iea,
1417 Z_AccessRestrictionsUnit *p, const char *name, int argi)
1419 static IrExpChoice arm[] = {
1420 { "any", Z_AccessRestrictionsUnit_any,
1422 { "search", Z_AccessRestrictionsUnit_search,
1424 { "present", Z_AccessRestrictionsUnit_present,
1426 { "specificElements", Z_AccessRestrictionsUnit_specific_elements,
1428 { "extendedServices", Z_AccessRestrictionsUnit_extended_services,
1430 { "byDatabase", Z_AccessRestrictionsUnit_by_database,
1434 if (!ir_match_start (name, p, iea, ++argi))
1436 ir_choice (iea, arm, p->accessType, odr_nullval(), argi);
1437 ir_HumanString (iea, p->accessText, "accessText", argi);
1438 ir_sequence (ir_oid, iea, p->accessChallenges,
1439 &p->num_accessChallenges, "accessChallenges", argi);
1440 return ir_match_end (name, iea, argi);
1443 static int ir_AccessRestrictions (IrExpArg *iea,
1444 Z_AccessRestrictions *p, const char *name, int argi)
1446 if (!ir_match_start (name, p, iea, ++argi))
1448 ir_sequence (ir_AccessRestrictionsUnit, iea, p->elements,
1449 &p->num, "restrictions", argi);
1450 return ir_match_end (name, iea, argi);
1453 static int ir_CostsOtherCharge (IrExpArg *iea,
1454 Z_CostsOtherCharge *p, const char *name, int argi)
1456 if (!ir_match_start (name, p, iea, ++argi))
1458 ir_HumanString (iea, p->forWhat, "forWhat", argi);
1459 ir_Charge (iea, p->charge, "charge", argi);
1460 return ir_match_end (name, iea, argi);
1463 static int ir_Costs (IrExpArg *iea,
1464 Z_Costs *p, const char *name, int argi)
1466 if (!ir_match_start (name, p, iea, ++argi))
1468 ir_Charge (iea, p->connectCharge, "connectCharge", argi);
1469 ir_Charge (iea, p->connectTime, "connectTime", argi);
1470 ir_Charge (iea, p->displayCharge, "displayCharge", argi);
1471 ir_Charge (iea, p->searchCharge, "searchCharge", argi);
1472 ir_Charge (iea, p->subscriptCharge, "subscriptCharge", argi);
1474 ir_sequence (ir_CostsOtherCharge, iea, p->otherCharges,
1475 &p->num_otherCharges, "otherCharges", argi);
1476 return ir_match_end (name, iea, argi);
1479 static int ir_Charge (IrExpArg *iea,
1480 Z_Charge *p, const char *name, int argi)
1482 if (!ir_match_start (name, p, iea, ++argi))
1484 ir_IntUnit (iea, p->cost, "cost", argi);
1485 ir_Unit (iea, p->perWhat, "perWhat", argi);
1486 ir_HumanString (iea, p->text, "text", argi);
1487 return ir_match_end (name, iea, argi);
1490 static int ir_DatabaseList (IrExpArg *iea,
1491 Z_DatabaseList *p, const char *name, int argi)
1493 if (!ir_match_start (name, p, iea, ++argi))
1495 ir_sequence (ir_DatabaseName, iea, p->databases,
1496 &p->num_databases, "databases", argi);
1497 return ir_match_end (name, iea, argi);
1500 static int ir_AttributeCombinations (IrExpArg *iea,
1501 Z_AttributeCombinations *p, const char *name, int argi)
1503 if (!ir_match_start (name, p, iea, ++argi))
1505 ir_oid (iea, p->defaultAttributeSet, "defaultAttributeSet", argi);
1506 ir_sequence (ir_AttributeCombination, iea, p->legalCombinations,
1507 &p->num_legalCombinations, "legalCombinations", argi);
1508 return ir_match_end (name, iea, argi);
1511 static int ir_AttributeCombination (IrExpArg *iea,
1512 Z_AttributeCombination *p, const char *name, int argi)
1514 if (!ir_match_start (name, p, iea, ++argi))
1516 ir_sequence (ir_AttributeOccurrence, iea, p->occurrences,
1517 &p->num_occurrences, "occurrences", argi);
1518 return ir_match_end (name, iea, argi);
1521 static int ir_AttributeValueList (IrExpArg *iea,
1522 Z_AttributeValueList *p, const char *name, int argi)
1524 if (!ir_match_start (name, p, iea, ++argi))
1526 ir_sequence (ir_StringOrNumeric, iea, p->attributes,
1527 &p->num_attributes, "attributes", argi);
1528 return ir_match_end (name, iea, argi);
1531 static int ir_AttributeOccurrence (IrExpArg *iea,
1532 Z_AttributeOccurrence *p, const char *name, int argi)
1534 static IrExpChoice arm [] = {
1535 { "anyOrNone", Z_AttributeOcc_any_or_none, ir_null },
1536 { "specific", Z_AttributeOcc_specific,
1537 ir_AttributeValueList },
1538 { NULL, 0, NULL } };
1539 if (!ir_match_start (name, p, iea, ++argi))
1541 ir_oid (iea, p->attributeSet, "attributeSet", argi);
1542 ir_integer (iea, p->attributeType, "attributeType", argi);
1543 ir_null (iea, p->mustBeSupplied, "mustBeSupplied", argi);
1544 ir_choice (iea, arm, &p->which, p->attributeValues.any_or_none, argi);
1545 return ir_match_end (name, iea, argi);
1548 static int ir_AttributeValue (IrExpArg *iea,
1549 Z_AttributeValue *p, const char *name, int argi)
1551 if (!ir_match_start (name, p, iea, ++argi))
1553 ir_StringOrNumeric (iea, p->value, "value", argi);
1554 ir_HumanString (iea, p->description, "description", argi);
1555 ir_sequence (ir_StringOrNumeric, iea, p->subAttributes,
1556 &p->num_subAttributes, "subAttributes", argi);
1557 ir_sequence (ir_StringOrNumeric, iea, p->superAttributes,
1558 &p->num_superAttributes, "superAttributes", argi);
1559 ir_null (iea, p->partialSupport, "partialSupport", argi);
1560 return ir_match_end (name, iea, argi);
1563 static int ir_StringOrNumeric (IrExpArg *iea,
1564 Z_StringOrNumeric *p, const char *name, int argi)
1566 IrExpChoice arm[] = {
1567 { "string", Z_StringOrNumeric_string, ir_InternationalString },
1568 { "numeric", Z_StringOrNumeric_numeric, ir_integer },
1570 if (!ir_match_start (name, p, iea, ++argi))
1572 ir_choice (iea, arm, &p->which, p->u.string, argi);
1573 return ir_match_end (name, iea, argi);
1576 static int ir_ElementSpec (IrExpArg *iea,
1577 Z_ElementSpec *p, const char *name, int argi)
1579 static IrExpChoice arm[] = {
1580 { "elementSetName", Z_ElementSpec_elementSetName,
1581 ir_InternationalString },
1582 { "externalSpec", Z_ElementSpec_externalSpec,
1586 if (!ir_match_start (name, p, iea, ++argi))
1588 ir_choice (iea, arm, &p->which, p->u.elementSetName, argi);
1589 return ir_match_end (name, iea, argi);
1592 static int ir_Specification (IrExpArg *iea,
1593 Z_Specification *p, const char *name, int argi)
1595 if (!ir_match_start (name, p, iea, ++argi))
1597 ir_oid (iea, p->schema, "schema", argi);
1598 ir_ElementSpec (iea, p->elementSpec, "elementSpec", argi);
1599 return ir_match_end (name, iea, argi);
1602 static int ir_InfoCategory (IrExpArg *iea,
1603 Z_InfoCategory *p, const char *name, int argi)
1605 if (!ir_match_start (name, p, iea, ++argi))
1607 ir_oid (iea, p->categoryTypeId, "categoryTypeId", argi);
1608 ir_integer (iea, p->categoryValue, "categoryValue", argi);
1609 return ir_match_end (name, iea, argi);
1612 static int ir_OtherInformationUnit (IrExpArg *iea,
1613 Z_OtherInformationUnit *p, const char *name, int argi)
1615 static IrExpChoice arm[] = {
1617 Z_OtherInfo_characterInfo, ir_InternationalString },
1619 Z_OtherInfo_binaryInfo, ir_octet},
1620 { "externallyDefinedInfo",
1621 Z_OtherInfo_externallyDefinedInfo,
1624 Z_OtherInfo_oid, ir_oid},
1627 if (!ir_match_start (name, p, iea, ++argi))
1629 ir_InfoCategory (iea, p->category, "category", argi);
1630 ir_choice (iea, arm, &p->which, p->information.characterInfo, argi);
1631 return ir_match_end (name, iea, argi);
1634 static int ir_OtherInformation (IrExpArg *iea,
1635 Z_OtherInformation *p, const char *name, int argi)
1637 if (!ir_match_start (name, p, iea, ++argi))
1639 ir_sequence (ir_OtherInformationUnit, iea, p->list,
1640 &p->num_elements, "list", argi);
1641 return ir_match_end (name, iea, argi);
1644 static int ir_IntUnit (IrExpArg *iea,
1645 Z_IntUnit *p, const char *name, int argi)
1647 if (!ir_match_start (name, p, iea, ++argi))
1649 ir_integer (iea, p->value, "value", argi);
1650 ir_Unit (iea, p->unitUsed, "unitUsed", argi);
1651 return ir_match_end (name, iea, argi);
1654 static int ir_Unit (IrExpArg *iea,
1655 Z_Unit *p, const char *name, int argi)
1657 if (!ir_match_start (name, p, iea, ++argi))
1659 ir_InternationalString (iea, p->unitSystem, "unitSystem", argi);
1660 ir_StringOrNumeric (iea, p->unitType, "unitType", argi);
1661 ir_StringOrNumeric (iea, p->unit, "unit", argi);
1662 ir_integer (iea, p->scaleFactor, "scaleFactor", argi);
1663 return ir_match_end (name, iea, argi);
1666 int ir_ExplainRecord (IrExpArg *iea, Z_ExplainRecord *p, int argi)
1668 static IrExpChoice arm[] = {
1669 {"targetInfo", Z_Explain_targetInfo,
1671 {"databaseInfo", Z_Explain_databaseInfo,
1673 {"schemaInfo", Z_Explain_schemaInfo,
1675 {"tagSetInfo", Z_Explain_tagSetInfo,
1677 {"recordSyntaxInfo", Z_Explain_recordSyntaxInfo,
1678 ir_RecordSyntaxInfo},
1679 {"attributeSetInfo", Z_Explain_attributeSetInfo,
1680 ir_AttributeSetInfo},
1681 {"termListInfo", Z_Explain_termListInfo,
1683 {"extendedServicesInfo", Z_Explain_extendedServicesInfo,
1684 ir_ExtendedServicesInfo},
1685 {"attributeDetails", Z_Explain_attributeDetails,
1686 ir_AttributeDetails},
1687 {"termListDetails", Z_Explain_termListDetails,
1688 ir_TermListDetails},
1689 {"elementSetDetails", Z_Explain_elementSetDetails,
1690 ir_ElementSetDetails},
1691 {"retrievalRecordDetails", Z_Explain_retrievalRecordDetails,
1692 ir_RetrievalRecordDetails},
1693 {"sortDetails", Z_Explain_sortDetails,
1695 {"processing", Z_Explain_processing,
1696 ir_ProcessingInformation},
1697 {"variants", Z_Explain_variants,
1699 {"units", Z_Explain_units,
1701 {"categoryList", Z_Explain_categoryList,
1706 return ir_choice (iea, arm, &p->which, p->u.targetInfo, argi);
1709 int ir_tcl_get_explain (Tcl_Interp *interp, Z_ExplainRecord *rec,
1710 int argc, char **argv)
1716 iea.interp = interp;
1718 return ir_ExplainRecord (&iea, rec, 2);