2 * IR toolkit for tcl/tk
4 * See the file LICENSE for details.
5 * Sebastian Hammer, Adam Dickmeiss
8 * Revision 1.1 1996-08-16 15:07:43 adam
9 * First work on Explain.
32 typedef char *Z_ElementSetName;
33 typedef Odr_oid *Z_AttributeSetId;
34 typedef int Z_integer;
35 typedef char *Z_InternationalString;
36 typedef char *Z_LanguageCode;
38 static int ir_UnitType (IrExpArg *iea,
39 Z_UnitType *p, const char *name, int argi);
40 static int ir_Unit (IrExpArg *iea,
41 Z_Unit *p, const char *name, int argi);
42 static int ir_VariantType (IrExpArg *iea,
43 Z_VariantType *p, const char *name, int argi);
44 static int ir_OmittedAttributeInterpretation (IrExpArg *iea,
45 Z_OmittedAttributeInterpretation *p, const char *name, int argi);
46 static int ir_AttributeTypeDetails (IrExpArg *iea,
47 Z_AttributeTypeDetails *p, const char *name, int argi);
48 static int ir_Specification (IrExpArg *iea,
49 Z_Specification *p, const char *name, int argi);
50 static int ir_RetrievalRecordDetails (IrExpArg *iea,
51 Z_RetrievalRecordDetails *p, const char *name, int argi);
52 static int ir_ElementInfo (IrExpArg *iea,
53 Z_ElementInfo *p, const char *name, int argi);
54 static int ir_integer (IrExpArg *iea,
55 Z_integer *p, const char *name, int argi);
56 static int ir_InternationalString (IrExpArg *iea,
57 char *p, const char *name, int argi);
58 static int ir_TagSetInfo (IrExpArg *iea,
59 Z_TagSetInfo *p, const char *name, int argi);
60 static int ir_DatabaseName (IrExpArg *iea,
61 char *p, const char *name, int argi);
62 static int ir_AccessInfo (IrExpArg *iea,
63 Z_AccessInfo *p, const char *name, int argi);
64 static int ir_bool (IrExpArg *iea,
65 bool_t *p, const char *name, int argi);
66 static int ir_LanguageCode (IrExpArg *iea,
67 char *p, const char *name, int argi);
68 static int ir_Units (IrExpArg *iea,
69 Z_Units *p, const char *name, int argi);
70 static int ir_SortDetails (IrExpArg *iea,
71 Z_SortDetails *p, const char *name, int argi);
72 static int ir_ElementSetDetails (IrExpArg *iea,
73 Z_ElementSetDetails *p, const char *name, int argi);
74 static int ir_TermListDetails (IrExpArg *iea,
75 Z_TermListDetails *p, const char *name, int argi);
76 static int ir_AttributeValue (IrExpArg *iea,
77 Z_AttributeValue *p, const char *name, int argi);
78 static int ir_ElementDataType (IrExpArg *iea,
79 Z_ElementDataType *p, const char *name, int argi);
80 static int ir_ProximitySupport (IrExpArg *iea,
81 Z_ProximitySupport *p, const char *name, int argi);
82 static int ir_ProcessingInformation (IrExpArg *iea,
83 Z_ProcessingInformation *p, const char *name, int argi);
84 static int ir_AttributeCombinations (IrExpArg *iea,
85 Z_AttributeCombinations *p, const char *name, int argi);
86 static int ir_AttributeSetDetails (IrExpArg *iea,
87 Z_AttributeSetDetails *p, const char *name, int argi);
88 static int ir_DatabaseInfo (IrExpArg *iea,
89 Z_DatabaseInfo *p, const char *name, int argi);
90 static int ir_IconObject (IrExpArg *iea,
91 Z_IconObject *p, const char *name, int argi);
92 static int ir_RpnCapabilities (IrExpArg *iea,
93 Z_RpnCapabilities *p, const char *name, int argi);
94 static int ir_QueryTypeDetails (IrExpArg *iea,
95 Z_QueryTypeDetails *p, const char *name, int argi);
96 static int ir_ValueDescription (IrExpArg *iea,
97 Z_ValueDescription *p, const char *name, int argi);
98 static int ir_AttributeSetInfo (IrExpArg *iea,
99 Z_AttributeSetInfo *p, const char *name, int argi);
100 static int ir_SchemaInfo (IrExpArg *iea,
101 Z_SchemaInfo *p, const char *name, int argi);
102 static int ir_AttributeOccurrence (IrExpArg *iea,
103 Z_AttributeOccurrence *p, const char *name, int argi);
104 static int ir_AttributeCombination (IrExpArg *iea,
105 Z_AttributeCombination *p, const char *name, int argi);
106 static int ir_UnitInfo (IrExpArg *iea,
107 Z_UnitInfo *p, const char *name, int argi);
108 static int ir_VariantClass (IrExpArg *iea,
109 Z_VariantClass *p, const char *name, int argi);
110 static int ir_VariantSetInfo (IrExpArg *iea,
111 Z_VariantSetInfo *p, const char *name, int argi);
112 static int ir_RecordTag (IrExpArg *iea,
113 Z_RecordTag *p, const char *name, int argi);
114 static int ir_TermListInfo (IrExpArg *iea,
115 Z_TermListInfo *p, const char *name, int argi);
116 static int ir_StringOrNumeric (IrExpArg *iea,
117 Z_StringOrNumeric *p, const char *name, int argi);
118 static int ir_CategoryInfo (IrExpArg *iea,
119 Z_CategoryInfo *p, const char *name, int argi);
120 static int ir_ValueRange (IrExpArg *iea,
121 Z_ValueRange *p, const char *name, int argi);
122 static int ir_Term (IrExpArg *iea,
123 Z_Term *p, const char *name, int argi);
124 static int ir_DatabaseList (IrExpArg *iea,
125 Z_DatabaseList *p, const char *name, int argi);
126 static int ir_HumanString (IrExpArg *iea,
127 Z_HumanString *p, const char *name, int argi);
128 static int ir_CommonInfo (IrExpArg *iea,
129 Z_CommonInfo *p, const char *name, int argi);
130 static int ir_NetworkAddress (IrExpArg *iea,
131 Z_NetworkAddress *p, const char *name, int argi);
132 static int ir_Costs (IrExpArg *iea,
133 Z_Costs *p, const char *name, int argi);
134 static int ir_RecordSyntaxInfo (IrExpArg *iea,
135 Z_RecordSyntaxInfo *p, const char *name, int argi);
136 static int ir_OtherInformation (IrExpArg *iea,
137 Z_OtherInformation *p, const char *name, int argi);
138 static int ir_CategoryList (IrExpArg *iea,
139 Z_CategoryList *p, const char *name, int argi);
140 static int ir_VariantValue (IrExpArg *iea,
141 Z_VariantValue *p, const char *name, int argi);
142 static int ir_PerElementDetails (IrExpArg *iea,
143 Z_PerElementDetails *p, const char *name, int argi);
144 static int ir_AttributeDetails (IrExpArg *iea,
145 Z_AttributeDetails *p, const char *name, int argi);
146 static int ir_ExtendedServicesInfo (IrExpArg *iea,
147 Z_ExtendedServicesInfo *p, const char *name, int argi);
148 static int ir_AttributeType (IrExpArg *iea,
149 Z_AttributeType *p, const char *name, int argi);
150 static int ir_IntUnit (IrExpArg *iea,
151 Z_IntUnit *p, const char *name, int argi);
152 static int ir_Charge (IrExpArg *iea,
153 Z_Charge *p, const char *name, int argi);
154 static int ir_PrivateCapabilities (IrExpArg *iea,
155 Z_PrivateCapabilities *p, const char *name, int argi);
156 static int ir_ValueSet (IrExpArg *iea,
157 Z_ValueSet *p, const char *name, int argi);
158 static int ir_AttributeDescription (IrExpArg *iea,
159 Z_AttributeDescription *p, const char *name, int argi);
160 static int ir_Path (IrExpArg *iea,
161 Z_Path *p, const char *name, int argi);
162 static int ir_ContactInfo (IrExpArg *iea,
163 Z_ContactInfo *p, const char *name, int argi);
164 static int ir_SearchKey (IrExpArg *iea,
165 Z_SearchKey *p, const char *name, int argi);
166 static int ir_Iso8777Capabilities (IrExpArg *iea,
167 Z_Iso8777Capabilities *p, const char *name, int argi);
168 static int ir_AccessRestrictions (IrExpArg *iea,
169 Z_AccessRestrictions *p, const char *name, int argi);
170 static int ir_SortKeyDetails (IrExpArg *iea,
171 Z_SortKeyDetails *p, const char *name, int argi);
175 ir_match_start (const char *name, void *p, IrExpArg *iea, int argi)
179 Tcl_AppendResult (iea->interp, name, " {", NULL);
184 ir_match_end (const char *name, IrExpArg *iea, int argi)
186 Tcl_AppendResult (iea->interp, "} ", NULL);
191 ir_choice (IrExpArg *iea, IrExpChoice *clist, int what, void *p, int argi)
195 if (clist->id == what)
196 return (*clist->handle)(iea, p, clist->name, argi);
202 static int ir_null (IrExpArg *iea,
203 Odr_null *p, const char *name, int argi)
206 Tcl_AppendResult (iea->interp, name, " ", NULL);
210 static int ir_CString (IrExpArg *iea,
211 char *p, const char *name, int argi)
213 Tcl_AppendResult (iea->interp, "{", name, " ", NULL);
215 Tcl_AppendElement (iea->interp, p);
216 Tcl_AppendResult (iea->interp, "} ", NULL);
222 static int ir_ElementSetName (IrExpArg *iea,
223 char *p, const char *name, int argi)
225 return ir_CString (iea, p, name, argi);
228 static int ir_DatabaseName (IrExpArg *iea,
229 char *p, const char *name, int argi)
231 return ir_CString (iea, p, name, argi);
234 static int ir_InternationalString (IrExpArg *iea,
235 char *p, const char *name, int argi)
237 return ir_CString (iea, p, name, argi);
240 static int ir_GeneralizedTime (IrExpArg *iea,
241 char *p, const char *name, int argi)
243 return ir_CString (iea, p, name, argi);
246 static int ir_oid (IrExpArg *iea,
247 Odr_oid *p, const char *name, int argi)
252 static int ir_TagTypeMapping (IrExpArg *iea,
253 Z_TagTypeMapping **p, const char *name, int argi)
258 static int ir_PrimitiveDataType (IrExpArg *iea,
259 int *p, const char *name, int argi)
264 static int ir_octet (IrExpArg *iea,
265 Odr_oct *p, const char *name, int argi)
270 static int ir_choice_nop (IrExpArg *iea,
271 void *p, const char *name, int argi)
273 Tcl_AppendResult (iea->interp, name, " ", NULL);
277 static int ir_Term (IrExpArg *iea,
278 Z_Term *p, const char *name, int argi)
283 static int ir_bool (IrExpArg *iea,
284 bool_t *p, const char *name, int argi)
286 Tcl_AppendResult (iea->interp, "{", name, " ", NULL);
288 Tcl_AppendResult (iea->interp, *p ? "1" : "0", NULL);
289 Tcl_AppendResult (iea->interp, "} ", NULL);
293 static int ir_integer (IrExpArg *iea,
294 int *p, const char *name, int argi)
296 Tcl_AppendResult (iea->interp, "{", name, NULL);
300 sprintf (buf, " %d", *p);
301 Tcl_AppendResult (iea->interp, buf, NULL);
303 Tcl_AppendResult (iea->interp, "} ", NULL);
307 static int ir_LanguageCode (IrExpArg *iea,
308 char *p, const char *name, int argi)
311 Tcl_AppendResult (iea->interp, name, " ", p, " ", NULL);
315 static int ir_External (IrExpArg *iea,
316 Z_External *p, const char *name, int argi)
321 static int ir_sequence (int (*fh)(), IrExpArg *iea, void *p, int num,
322 const char *name, int argi)
324 void **pp = (void **) p;
325 if (num > 0 && ir_match_start (name, p, iea, argi))
328 for (i = 0; i<num; i++)
329 (*fh)(iea, pp[i], "", argi);
330 return ir_match_end (name, iea, argi);
336 static int ir_TargetInfo (IrExpArg *iea,
337 Z_TargetInfo *p, const char *name, int argi)
339 if (!ir_match_start (name, p, iea, ++argi))
341 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
342 ir_InternationalString (iea, p->name, "name", argi);
343 ir_HumanString (iea, p->recentNews, "recent-news", argi);
344 ir_IconObject (iea, p->icon, "icon", argi);
345 ir_bool (iea, p->namedResultSets, "namedResultSets", argi);
346 ir_bool (iea, p->multipleDBsearch, "multipleDBsearch", argi);
347 ir_integer (iea, p->maxResultSets, "maxResultSets", argi);
348 ir_integer (iea, p->maxResultSize, "maxResultSize", argi);
349 ir_integer (iea, p->maxTerms, "maxTerms", argi);
350 ir_IntUnit (iea, p->timeoutInterval, "timeoutInterval", argi);
351 ir_HumanString (iea, p->welcomeMessage, "welcomeMessage", argi);
352 ir_ContactInfo (iea, p->contactInfo, "contactInfo", argi);
353 ir_HumanString (iea, p->description, "description", argi);
354 ir_sequence (ir_InternationalString, iea, p->nicknames,
355 p->num_nicknames, "nicknames", argi);
356 ir_HumanString (iea, p->usageRest, "usage-rest", argi);
357 ir_HumanString (iea, p->paymentAddr, "paymentAddr", argi);
358 ir_HumanString (iea, p->hours, "hours", argi);
359 ir_sequence (ir_DatabaseList, iea, p->dbCombinations,
360 p->num_dbCombinations, "dbCombinations", argi);
361 ir_sequence (ir_NetworkAddress, iea, p->addresses,
362 p->num_addresses, "addresses", argi);
363 ir_AccessInfo (iea, p->commonAccessInfo, "commonAccessInfo", argi);
364 return ir_match_end (name, iea, argi);
367 static int ir_DatabaseInfo (IrExpArg *iea,
368 Z_DatabaseInfo *p, const char *name, int argi)
370 static IrExpChoice arm_recordCount [] = {
371 { "actualNumber", Z_Exp_RecordCount_actualNumber,
373 { "approxNumber", Z_Exp_RecordCount_approxNumber,
377 if (!ir_match_start (name, p, iea, ++argi))
379 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
380 ir_DatabaseName (iea, p->name, "name", argi);
381 ir_null (iea, p->explainDatabase, "explainDatabase", argi);
382 ir_sequence (ir_DatabaseName, iea, p->nicknames,
383 p->num_nicknames, "nicknames", argi);
384 ir_IconObject (iea, p->icon, "icon", argi);
385 ir_bool (iea, p->userFee, "user-fee", argi);
386 ir_bool (iea, p->available, "available", argi);
387 ir_HumanString (iea, p->titleString, "titleString", argi);
388 ir_sequence (ir_HumanString, iea, p->keywords,
389 p->num_keywords, "keywords", argi);
390 ir_HumanString (iea, p->description, "description", argi);
391 ir_DatabaseList (iea, p->associatedDbs, "associatedDbs", argi);
392 ir_DatabaseList (iea, p->subDbs, "subDbs", argi);
393 ir_HumanString (iea, p->disclaimers, "disclaimers", argi);
394 ir_HumanString (iea, p->news, "news", argi);
396 ir_choice (iea, arm_recordCount, p->recordCount_which,
397 p->recordCount, argi);
399 ir_HumanString (iea, p->defaultOrder, "defaultOrder", argi);
400 ir_integer (iea, p->avRecordSize, "avRecordSize", argi);
401 ir_integer (iea, p->maxRecordSize, "maxRecordSize", argi);
402 ir_HumanString (iea, p->hours, "hours", argi);
403 ir_HumanString (iea, p->bestTime, "bestTime", argi);
404 ir_GeneralizedTime (iea, p->lastUpdate, "lastUpdate", argi);
405 ir_IntUnit (iea, p->updateInterval, "updateInterval", argi);
406 ir_HumanString (iea, p->coverage, "coverage", argi);
407 ir_bool (iea, p->proprietary, "proprietary", argi);
408 ir_HumanString (iea, p->copyrightText, "copyrightText", argi);
409 ir_HumanString (iea, p->copyrightNotice, "copyrightNotice", argi);
410 ir_ContactInfo (iea, p->producerContactInfo, "producerContactInfo", argi);
411 ir_ContactInfo (iea, p->supplierContactInfo, "supplierContactInfo", argi);
412 ir_ContactInfo (iea, p->submissionContactInfo, "submissionContactInfo", argi);
413 ir_AccessInfo (iea, p->accessInfo, "accessInfo", argi);
414 return ir_match_end (name, iea, argi);
417 static int ir_SchemaInfo (IrExpArg *iea,
418 Z_SchemaInfo *p, const char *name, int argi)
420 if (!ir_match_start (name, p, iea, ++argi))
422 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
423 ir_oid (iea, p->schema, "schema", argi);
424 ir_InternationalString (iea, p->name, "name", argi);
425 ir_HumanString (iea, p->description, "description", argi);
427 ir_sequence (ir_TagTypeMapping, iea, p->tagTypeMapping,
428 p->num_tagTypeMapping, "tagTypeMapping", argi);
429 ir_sequence (ir_ElementInfo, iea, p->recordStructure,
430 p->num_recordStructure, "recordStructure", argi);
431 return ir_match_end (name, iea, argi);
434 static int ir_ElementDataTypePrimitive (IrExpArg *iea,
435 int *p, const char *name, int argi)
437 static IrExpChoice arm[] = {
438 {"octetString", Z_PrimitiveElement_octetString, ir_choice_nop },
439 {"numeric", Z_PrimitiveElement_numeric, ir_choice_nop },
442 if (!ir_match_start (name, p, iea, ++argi))
444 ir_choice (iea, arm, *p, NULL, argi);
445 return ir_match_end (name, iea, argi);
448 static int ir_ElementInfo (IrExpArg *iea,
449 Z_ElementInfo *p, const char *name, int argi)
451 if (!ir_match_start (name, p, iea, ++argi))
453 ir_InternationalString (iea, p->elementName, "elementName", argi);
454 ir_Path (iea, p->elementTagPath, "elementTagPath", argi);
455 ir_ElementDataType (iea, p->dataType, "dataType", argi);
456 ir_bool (iea, p->required, "required", argi);
457 ir_bool (iea, p->repeatable, "repeatable", argi);
458 ir_HumanString (iea, p->description, "description", argi);
459 return ir_match_end (name, iea, argi);
462 static int ir_ElementInfoList (IrExpArg *iea,
463 Z_ElementInfoList *p, const char *name, int argi)
465 if (!ir_match_start (name, p, iea, ++argi))
467 ir_sequence (ir_ElementInfo, iea, p->list,
468 p->num, "list", argi);
469 return ir_match_end (name, iea, argi);
472 static int ir_ElementDataType (IrExpArg *iea,
473 Z_ElementDataType *p, const char *name, int argi)
475 static IrExpChoice arm[] = {
476 { "primitive", Z_ElementDataType_primitive,
477 ir_ElementDataTypePrimitive },
478 { "structured", Z_ElementDataType_structured,
479 ir_ElementInfoList },
481 if (!ir_match_start (name, p, iea, ++argi))
483 ir_choice (iea, arm, p->which, p->u.primitive, argi);
484 return ir_match_end (name, iea, argi);
487 static int ir_PathUnit (IrExpArg *iea,
488 Z_PathUnit *p, const char *name, int argi)
490 if (!ir_match_start (name, p, iea, ++argi))
492 ir_integer (iea, p->tagType, "tagType", argi);
493 ir_StringOrNumeric (iea, p->tagValue, "tagValue", argi);
494 return ir_match_end (name, iea, argi);
497 static int ir_Path (IrExpArg *iea,
498 Z_Path *p, const char *name, int argi)
500 if (!ir_match_start (name, p, iea, ++argi))
502 ir_sequence (ir_PathUnit, iea, p->list,
503 p->num, "list", argi);
504 return ir_match_end (name, iea, argi);
507 static int ir_TagSetInfoElements (IrExpArg *iea,
508 Z_TagSetInfoElements *p, const char *name, int argi)
510 if (!ir_match_start (name, p, iea, ++argi))
512 ir_InternationalString (iea, p->elementName, "elementname", argi);
513 ir_sequence (ir_InternationalString, iea, p->nicknames,
514 p->num_nicknames, "nicknames", argi);
515 ir_StringOrNumeric (iea, p->elementTag, "elementTag", argi);
516 ir_HumanString (iea, p->description, "description", argi);
517 ir_PrimitiveDataType (iea, p->dataType, "dataType", argi);
518 ir_OtherInformation (iea, p->otherTagInfo, "otherTagInfo", argi);
519 return ir_match_end (name, iea, argi);
522 static int ir_TagSetInfo (IrExpArg *iea,
523 Z_TagSetInfo *p, const char *name, int argi)
526 if (!ir_match_start (name, p, iea, ++argi))
528 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
529 ir_oid (iea, p->tagSet, "tagSet", argi);
530 ir_InternationalString (iea, p->name, "name", argi);
531 ir_HumanString (iea, p->description, "description", argi);
532 for (i = 0; i<p->num_elements; i++)
533 ir_TagSetInfoElements (iea, p->elements[i], "elements", argi);
534 return ir_match_end (name, iea, argi);
537 static int ir_RecordSyntaxInfo (IrExpArg *iea,
538 Z_RecordSyntaxInfo *p, const char *name, int argi)
540 if (!ir_match_start (name, p, iea, ++argi))
542 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
543 ir_oid (iea, p->recordSyntax, "recordSyntax", argi);
544 ir_InternationalString (iea, p->name, "name", argi);
545 ir_sequence (ir_oid, iea, p->transferSyntaxes,
546 p->num_transferSyntaxes, "transferSyntaxes", argi);
547 ir_HumanString (iea, p->description, "description", argi);
548 ir_InternationalString (iea, p->asn1Module, "asn1Module", argi);
549 ir_sequence (ir_ElementInfo, iea, p->abstractStructure,
550 p->num_abstractStructure, "abstractStructure", argi);
551 return ir_match_end (name, iea, argi);
554 static int ir_AttributeType (IrExpArg *iea,
555 Z_AttributeType *p, const char *name, int argi)
557 if (!ir_match_start (name, p, iea, ++argi))
559 ir_InternationalString (iea, p->name, "name", argi);
560 ir_HumanString (iea, p->description, "description", argi);
561 ir_integer (iea, p->attributeType, "attributeType", argi);
562 ir_sequence (ir_AttributeDescription, iea, p->attributeValues,
563 p->num_attributeValues, "attributeValues", argi);
564 return ir_match_end (name, iea, argi);
567 static int ir_AttributeSetInfo (IrExpArg *iea,
568 Z_AttributeSetInfo *p, const char *name, int argi)
570 if (!ir_match_start (name, p, iea, ++argi))
572 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
573 ir_oid (iea, p->attributeSet, "attributeSet", argi);
574 ir_InternationalString (iea, p->name, "name", argi);
575 ir_sequence (ir_AttributeType, iea, p->attributes,
576 p->num_attributes, "attributes", argi);
577 ir_HumanString (iea, p->description, "description", argi);
578 return ir_match_end (name, iea, argi);
581 static int ir_AttributeDescription (IrExpArg *iea,
582 Z_AttributeDescription *p, const char *name, int argi)
584 if (!ir_match_start (name, p, iea, ++argi))
586 ir_InternationalString (iea, p->name, "name", argi);
587 ir_HumanString (iea, p->description, "description", argi);
588 ir_StringOrNumeric (iea, p->attributeValue, "attributeValue", argi);
589 ir_sequence (ir_StringOrNumeric,iea, p->equivalentAttributes,
590 p->num_equivalentAttributes, "equivalentAttributes", argi);
591 return ir_match_end (name, iea, argi);
594 static int ir_TermListElement (IrExpArg *iea,
595 Z_TermListElement *p, const char *name, int argi)
597 static IrExpChoice searchCostArm [] = {
598 { "optimized", Z_TermListInfo_optimized, ir_choice_nop },
599 { "normal", Z_TermListInfo_normal, ir_choice_nop },
600 { "expensive", Z_TermListInfo_expensive, ir_choice_nop },
601 { "filter", Z_TermListInfo_filter, ir_choice_nop },
603 ir_InternationalString (iea, p->name, "name", argi);
604 ir_HumanString (iea, p->title, "title", argi);
606 ir_choice (iea, searchCostArm, *p->searchCost, NULL, argi);
608 ir_bool (iea, p->scanable, "scanable", argi);
609 ir_sequence (ir_InternationalString, iea, p->broader,
610 p->num_broader, "broader", argi);
611 ir_sequence (ir_InternationalString, iea, p->narrower,
612 p->num_narrower, "narrower", argi);
613 return ir_match_end (name, iea, argi);
616 static int ir_TermListInfo (IrExpArg *iea,
617 Z_TermListInfo *p, const char *name, int argi)
619 if (!ir_match_start (name, p, iea, ++argi))
621 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
622 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
623 ir_sequence (ir_TermListElement, iea, p->termLists,
624 p->num_termLists, "termLists", argi);
625 return ir_match_end (name, iea, argi);
628 static int ir_ExtendedServicesInfo (IrExpArg *iea,
629 Z_ExtendedServicesInfo *p, const char *name, int argi)
631 static IrExpChoice waitActionArm [] = {
632 { "waitSupported", Z_ExtendedServicesInfo_waitSupported,
634 { "waitAlways", Z_ExtendedServicesInfo_waitAlways,
636 { "waitNotSupported", Z_ExtendedServicesInfo_waitNotSupported,
638 { "depends", Z_ExtendedServicesInfo_depends,
640 { "notSaying", Z_ExtendedServicesInfo_notSaying,
644 ir_InternationalString (iea, p->name, "name", argi);
645 if (!ir_match_start (name, p, iea, ++argi))
647 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
648 ir_oid (iea, p->type, "type", argi);
649 ir_InternationalString (iea, p->name, "name", argi);
650 ir_bool (iea, p->privateType, "privateType", argi);
651 ir_bool (iea, p->restrictionsApply, "restrictionsApply", argi);
652 ir_bool (iea, p->feeApply, "feeApply", argi);
653 ir_bool (iea, p->available, "available", argi);
654 ir_bool (iea, p->retentionSupported, "retentionSupported", argi);
656 ir_choice (iea, waitActionArm, *p->waitAction, NULL, argi);
658 ir_HumanString (iea, p->description, "description", argi);
659 ir_External (iea, p->specificExplain, "specificExplain", argi);
660 ir_InternationalString (iea, p->esASN, "esASN", argi);
661 return ir_match_end (name, iea, argi);
664 static int ir_AttributeDetails (IrExpArg *iea,
665 Z_AttributeDetails *p, const char *name, int argi)
667 if (!ir_match_start (name, p, iea, ++argi))
669 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
670 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
671 ir_sequence (ir_AttributeSetDetails, iea, p->attributesBySet,
672 p->num_attributesBySet, "attributesBySet", argi);
673 ir_AttributeCombinations (iea, p->attributeCombinations,
674 "attributeCombinations", argi);
675 return ir_match_end (name, iea, argi);
678 static int ir_AttributeSetDetails (IrExpArg *iea,
679 Z_AttributeSetDetails *p, const char *name, int argi)
681 if (!ir_match_start (name, p, iea, ++argi))
683 ir_oid (iea, p->attributeSet, "attributeSet", argi);
684 ir_sequence (ir_AttributeTypeDetails, iea, p->attributesByType,
685 p->num_attributesByType, "attributesByType", argi);
686 return ir_match_end (name, iea, argi);
689 static int ir_AttributeTypeDetails (IrExpArg *iea,
690 Z_AttributeTypeDetails *p, const char *name, int argi)
692 if (!ir_match_start (name, p, iea, ++argi))
694 ir_integer (iea, p->attributeType, "attributeType", argi);
695 ir_OmittedAttributeInterpretation (iea, p->optionalType,
696 "optionalType", argi);
697 ir_sequence (ir_AttributeValue, iea, p->attributeValues,
698 p->num_attributeValues, "attributeValues", argi);
699 return ir_match_end (name, iea, argi);
702 static int ir_OmittedAttributeInterpretation (IrExpArg *iea,
703 Z_OmittedAttributeInterpretation *p, const char *name, int argi)
705 if (!ir_match_start (name, p, iea, ++argi))
707 ir_StringOrNumeric (iea, p->defaultValue, "defaultValue", argi);
708 ir_HumanString (iea, p->defaultDescription, "defaultDescription", argi);
709 return ir_match_end (name, iea, argi);
712 static int ir_EScanInfo (IrExpArg *iea,
713 Z_EScanInfo *p, const char *name, int argi)
715 if (!ir_match_start (name, p, iea, ++argi))
717 ir_integer (iea, p->maxStepSize, "maxStepSize", argi);
718 ir_HumanString (iea, p->collatingSequence, "collatingSequence", argi);
719 ir_bool (iea, p->increasing, "increasing", argi);
720 return ir_match_end (name, iea, argi);
723 static int ir_TermListDetails (IrExpArg *iea,
724 Z_TermListDetails *p, const char *name, int argi)
726 if (!ir_match_start (name, p, iea, ++argi))
728 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
729 ir_InternationalString (iea, p->termListName, "termListName", argi);
730 ir_HumanString (iea, p->description, "description", argi);
731 ir_AttributeCombinations (iea, p->attributes, "attributes", argi);
733 ir_EScanInfo (iea, p->scanInfo, "scanInfo", argi);
735 ir_integer (iea, p->estNumberTerms, "estNumberTerms", argi);
736 ir_sequence (ir_Term, iea, p->sampleTerms,
737 p->num_sampleTerms, "sampleTerms", argi);
738 return ir_match_end (name, iea, argi);
741 static int ir_ElementSetDetails (IrExpArg *iea,
742 Z_ElementSetDetails *p, const char *name, int argi)
744 if (!ir_match_start (name, p, iea, ++argi))
746 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
747 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
748 ir_ElementSetName (iea, p->elementSetName, "elementSetName", argi);
749 ir_oid (iea, p->recordSyntax, "recordSyntax", argi);
750 ir_oid (iea, p->schema, "schema", argi);
751 ir_HumanString (iea, p->description, "description", argi);
752 ir_sequence (ir_PerElementDetails, iea, p->detailsPerElement,
753 p->num_detailsPerElement, "detailsPerElement", argi);
754 return ir_match_end (name, iea, argi);
757 static int ir_RetrievalRecordDetails (IrExpArg *iea,
758 Z_RetrievalRecordDetails *p, const char *name, int argi)
760 if (!ir_match_start (name, p, iea, ++argi))
762 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
763 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
764 ir_oid (iea, p->schema, "schema", argi);
765 ir_oid (iea, p->recordSyntax, "recordSyntax", argi);
766 ir_HumanString (iea, p->description, "description", argi);
767 ir_sequence (ir_PerElementDetails, iea, p->detailsPerElement,
768 p->num_detailsPerElement, "detailsPerElement", argi);
769 return ir_match_end (name, iea, argi);
772 static int ir_PerElementDetails (IrExpArg *iea,
773 Z_PerElementDetails *p, const char *name, int argi)
775 if (!ir_match_start (name, p, iea, ++argi))
777 ir_InternationalString (iea, p->name, "name", argi);
778 ir_RecordTag (iea, p->recordTag, "recordTag", argi);
779 ir_sequence (ir_Path, iea, p->schemaTags,
780 p->num_schemaTags, "schemaTags", argi);
781 ir_integer (iea, p->maxSize, "maxSize", argi);
782 ir_integer (iea, p->minSize, "minSize", argi);
783 ir_integer (iea, p->avgSize, "avgSize", argi);
784 ir_integer (iea, p->fixedSize, "fixedSize", argi);
785 ir_bool (iea, p->repeatable, "repeatable", argi);
786 ir_bool (iea, p->required, "required", argi);
787 ir_HumanString (iea, p->description, "description", argi);
788 ir_HumanString (iea, p->contents, "contents", argi);
789 ir_HumanString (iea, p->billingInfo, "billingInfo", argi);
790 ir_HumanString (iea, p->restrictions, "restrictions", argi);
791 ir_sequence (ir_InternationalString, iea, p->alternateNames,
792 p->num_alternateNames, "alternateNames", argi);
793 ir_sequence (ir_InternationalString, iea, p->genericNames,
794 p->num_genericNames, "genericNames", argi);
795 ir_AttributeCombinations (iea, p->searchAccess, "searchAccess", argi);
796 return ir_match_end (name, iea, argi);
799 static int ir_RecordTag (IrExpArg *iea,
800 Z_RecordTag *p, const char *name, int argi)
802 if (!ir_match_start (name, p, iea, ++argi))
804 ir_StringOrNumeric (iea, p->qualifier, "qualifier", argi);
805 ir_StringOrNumeric (iea, p->tagValue, "tagValue", argi);
806 return ir_match_end (name, iea, argi);
809 static int ir_SortDetails (IrExpArg *iea,
810 Z_SortDetails *p, const char *name, int argi)
812 if (!ir_match_start (name, p, iea, ++argi))
814 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
815 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
816 ir_sequence (ir_SortKeyDetails, iea, p->sortKeys,
817 p->num_sortKeys, "sortKeys", argi);
818 return ir_match_end (name, iea, argi);
821 static int ir_SortKeyDetailsSortType (IrExpArg *iea,
822 Z_SortKeyDetailsSortType *p, const char *name, int argi)
824 static IrExpChoice sortArm [] = {
825 { "character", Z_SortKeyDetailsSortType_character,
827 { "numeric", Z_SortKeyDetailsSortType_numeric,
829 { "structured", Z_SortKeyDetailsSortType_structured,
832 return ir_choice (iea, sortArm, p->which, p->u.character, argi);
835 static int ir_SortKeyDetails (IrExpArg *iea,
836 Z_SortKeyDetails *p, const char *name, int argi)
838 static IrExpChoice sortArm [] = {
839 { "always", Z_SortKeyDetails_always,
841 { "never", Z_SortKeyDetails_never,
843 { "defaultYes", Z_SortKeyDetails_defaultYes,
845 { "defaultNo", Z_SortKeyDetails_defaultNo,
849 if (!ir_match_start (name, p, iea, ++argi))
851 ir_HumanString (iea, p->description, "description", argi);
852 ir_sequence (ir_Specification, iea, p->elementSpecifications,
853 p->num_elementSpecifications, "elementSpecifications", argi);
854 ir_AttributeCombinations (iea, p->attributeSpecifications,
855 "attributeSpecifications", argi);
856 ir_SortKeyDetailsSortType (iea, p->sortType, "sortType", argi);
858 if (p->caseSensitivity)
859 ir_choice (iea, sortArm, *p->caseSensitivity, NULL, argi);
861 return ir_match_end (name, iea, argi);
864 static int ir_ProcessingInformation (IrExpArg *iea,
865 Z_ProcessingInformation *p, const char *name, int argi)
867 IrExpChoice arm[] = {
868 { "access", Z_ProcessingInformation_access,
870 { "search", Z_ProcessingInformation_search,
872 { "retrieval", Z_ProcessingInformation_retrieval,
874 { "recordPresentation", Z_ProcessingInformation_recordPresentation,
876 { "recordHandling", Z_ProcessingInformation_recordHandling,
879 if (!ir_match_start (name, p, iea, ++argi))
881 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
882 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
884 ir_choice (iea, arm, *p->processingContext, NULL, argi);
885 ir_InternationalString (iea, p->name, "name", argi);
886 ir_oid (iea, p->oid, "oid", argi);
887 ir_HumanString (iea, p->description, "description", argi);
888 ir_External (iea, p->instructions, "instructions", argi);
889 return ir_match_end (name, iea, argi);
892 static int ir_VariantSetInfo (IrExpArg *iea,
893 Z_VariantSetInfo *p, const char *name, int argi)
895 if (!ir_match_start (name, p, iea, ++argi))
897 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
898 ir_oid (iea, p->variantSet, "variantSet", argi);
899 ir_InternationalString (iea, p->name, "name", argi);
900 ir_sequence (ir_VariantClass, iea, p->variants,
901 p->num_variants, "variants", argi);
902 return ir_match_end (name, iea, argi);
905 static int ir_VariantClass (IrExpArg *iea,
906 Z_VariantClass *p, const char *name, int argi)
908 if (!ir_match_start (name, p, iea, ++argi))
910 ir_InternationalString (iea, p->name, "name", argi);
911 ir_HumanString (iea, p->description, "description", argi);
912 ir_integer (iea, p->variantClass, "variantClass", argi);
913 ir_sequence (ir_VariantType, iea, p->variantTypes,
914 p->num_variantTypes, "variantTypes", argi);
915 return ir_match_end (name, iea, argi);
918 static int ir_VariantType (IrExpArg *iea,
919 Z_VariantType *p, const char *name, int argi)
921 if (!ir_match_start (name, p, iea, ++argi))
923 ir_InternationalString (iea, p->name, "name", argi);
924 ir_HumanString (iea, p->description, "description", argi);
925 ir_integer (iea, p->variantType, "variantType", argi);
926 ir_VariantValue (iea, p->variantValue, "variantValue", argi);
927 return ir_match_end (name, iea, argi);
930 static int ir_ValueSetEnumerated (IrExpArg *iea,
931 Z_ValueSetEnumerated *p, const char *name, int argi)
933 if (!ir_match_start (name, p, iea, ++argi))
935 ir_sequence (ir_ValueDescription, iea, p->enumerated,
936 p->num_enumerated, "enumerated", argi);
937 return ir_match_end (name, iea, argi);
940 static int ir_ValueSet (IrExpArg *iea,
941 Z_ValueSet *p, const char *name, int argi)
943 IrExpChoice arm [] = {
944 { "range", Z_ValueSet_range, ir_ValueRange },
945 { "enumerated", Z_ValueSet_enumerated, ir_ValueSetEnumerated },
947 if (!ir_match_start (name, p, iea, ++argi))
949 ir_choice (iea, arm, p->which, p->u.range, argi);
950 return ir_match_end (name, iea, argi);
953 static int ir_VariantValue (IrExpArg *iea,
954 Z_VariantValue *p, const char *name, int argi)
956 if (!ir_match_start (name, p, iea, ++argi))
958 ir_PrimitiveDataType (iea, p->dataType, "dataType", argi);
960 ir_ValueSet (iea, p->values, "values", argi);
961 return ir_match_end (name, iea, argi);
964 static int ir_ValueRange (IrExpArg *iea,
965 Z_ValueRange *p, const char *name, int argi)
967 if (!ir_match_start (name, p, iea, ++argi))
969 ir_ValueDescription (iea, p->lower, "lower", argi);
970 ir_ValueDescription (iea, p->upper, "upper", argi);
971 return ir_match_end (name, iea, argi);
974 static int ir_ValueDescription (IrExpArg *iea,
975 Z_ValueDescription *p, const char *name, int argi)
977 static IrExpChoice arm [] = {
978 { "integer", Z_ValueDescription_integer, ir_integer },
979 { "string", Z_ValueDescription_string, ir_InternationalString},
980 { "octets", Z_ValueDescription_octets, ir_octet},
981 { "oid", Z_ValueDescription_oid, ir_oid},
982 { "unit", Z_ValueDescription_unit, ir_Unit},
983 { "valueAndUnit", Z_ValueDescription_valueAndUnit, ir_IntUnit},
986 if (!ir_match_start (name, p, iea, ++argi))
988 ir_choice (iea, arm, p->which, p->u.integer, argi);
989 return ir_match_end (name, iea, argi);
992 static int ir_UnitInfo (IrExpArg *iea,
993 Z_UnitInfo *p, const char *name, int argi)
995 if (!ir_match_start (name, p, iea, ++argi))
997 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
998 ir_InternationalString (iea, p->unitSystem, "unitSystem", argi);
999 ir_HumanString (iea, p->description, "description", argi);
1000 ir_sequence (ir_UnitType, iea, p->units,
1001 p->num_units, "units", argi);
1002 return ir_match_end (name, iea, argi);
1005 static int ir_UnitType (IrExpArg *iea,
1006 Z_UnitType *p, const char *name, int argi)
1008 if (!ir_match_start (name, p, iea, ++argi))
1010 ir_InternationalString (iea, p->name, "name", argi);
1011 ir_HumanString (iea, p->description, "description", argi);
1012 ir_StringOrNumeric (iea, p->unitType, "unitType", argi);
1013 ir_sequence (ir_Units, iea, p->units, p->num_units, "units", argi);
1014 return ir_match_end (name, iea, argi);
1017 static int ir_Units (IrExpArg *iea,
1018 Z_Units *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_StringOrNumeric (iea, p->unit, "unit", argi);
1025 return ir_match_end (name, iea, argi);
1028 static int ir_CategoryList (IrExpArg *iea,
1029 Z_CategoryList *p, const char *name, int argi)
1031 if (!ir_match_start (name, p, iea, ++argi))
1033 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
1034 ir_sequence (ir_CategoryInfo, iea, p->categories,
1035 p->num_categories, "categories", argi);
1036 return ir_match_end (name, iea, argi);
1039 static int ir_CategoryInfo (IrExpArg *iea,
1040 Z_CategoryInfo *p, const char *name, int argi)
1042 if (!ir_match_start (name, p, iea, ++argi))
1044 ir_InternationalString (iea, p->category, "category", argi);
1045 ir_InternationalString (iea, p->originalCategory, "originalCategory", argi);
1046 ir_HumanString (iea, p->description, "description", argi);
1047 ir_InternationalString (iea, p->asn1Module, "asn1Module", argi);
1048 return ir_match_end (name, iea, argi);
1051 static int ir_CommonInfo (IrExpArg *iea,
1052 Z_CommonInfo *p, const char *name, int argi)
1054 if (!ir_match_start (name, p, iea, ++argi))
1056 ir_GeneralizedTime (iea, p->dateAdded, "dateAdded", argi);
1057 ir_GeneralizedTime (iea, p->dateChanged, "dateChanged", argi);
1058 ir_GeneralizedTime (iea, p->expiry, "expiry", argi);
1059 ir_LanguageCode (iea, p->humanStringLanguage, "humanString-Language",
1061 ir_OtherInformation (iea, p->otherInfo, "otherInfo", argi);
1062 return ir_match_end (name, iea, argi);
1065 static int ir_HumanStringUnit (IrExpArg *iea,
1066 Z_HumanStringUnit *p, const char *name, int argi)
1068 if (!ir_match_start (name, p, iea, ++argi))
1070 ir_LanguageCode (iea, p->language, "language", argi);
1071 ir_InternationalString (iea, p->text, "text", argi);
1072 return ir_match_end (name, iea, argi);
1075 static int ir_HumanString (IrExpArg *iea,
1076 Z_HumanString *p, const char *name, int argi)
1078 if (!ir_match_start (name, p, iea, ++argi))
1080 ir_sequence (ir_HumanStringUnit, iea, p->strings,
1081 p->num_strings, "strings", argi);
1082 return ir_match_end (name, iea, argi);
1085 static int ir_IconObjectUnit (IrExpArg *iea,
1086 Z_IconObjectUnit *p, const char *name, int argi)
1088 static IrExpChoice arm [] = {
1089 { "ianaType", Z_IconObject_ianaType, ir_choice_nop },
1090 { "z3950type", Z_IconObject_z3950type, ir_choice_nop },
1091 { "otherType", Z_IconObject_otherType, ir_choice_nop },
1093 if (!ir_match_start (name, p, iea, ++argi))
1095 ir_choice (iea, arm, p->which, NULL, argi);
1096 ir_InternationalString (iea, p->bodyType, "bodyType", argi);
1097 ir_octet (iea, p->content, "content", argi);
1098 return ir_match_end (name, iea, argi);
1101 static int ir_IconObject (IrExpArg *iea,
1102 Z_IconObject *p, const char *name, int argi)
1104 if (!ir_match_start (name, p, iea, ++argi))
1106 ir_sequence (ir_IconObjectUnit, iea, p->iconUnits,
1107 p->num_iconUnits, "iconUnits", argi);
1108 return ir_match_end (name, iea, argi);
1111 static int ir_ContactInfo (IrExpArg *iea,
1112 Z_ContactInfo *p, const char *name, int argi)
1114 if (!ir_match_start (name, p, iea, ++argi))
1116 ir_InternationalString (iea, p->name, "name", argi);
1117 ir_HumanString (iea, p->description, "description", argi);
1118 ir_HumanString (iea, p->address, "address", argi);
1119 ir_InternationalString (iea, p->email, "email", argi);
1120 ir_InternationalString (iea, p->phone, "phone", argi);
1121 return ir_match_end (name, iea, argi);
1124 static int ir_NetworkAddressIA (IrExpArg *iea,
1125 Z_NetworkAddressIA *p, const char *name, int argi)
1127 if (!ir_match_start (name, p, iea, ++argi))
1129 ir_InternationalString (iea, p->hostAddress, "hostAddress", argi);
1130 ir_integer (iea, p->port, "port", argi);
1131 return ir_match_end (name, iea, argi);
1134 static int ir_NetworkAddressOPA (IrExpArg *iea,
1135 Z_NetworkAddressOPA *p, const char *name, int argi)
1137 if (!ir_match_start (name, p, iea, ++argi))
1139 ir_InternationalString (iea, p->pSel, "pSel", argi);
1140 ir_InternationalString (iea, p->sSel, "sSel", argi);
1141 ir_InternationalString (iea, p->tSel, "tSel", argi);
1142 ir_InternationalString (iea, p->nSap, "nSap", argi);
1143 return ir_match_end (name, iea, argi);
1146 static int ir_NetworkAddressOther (IrExpArg *iea,
1147 Z_NetworkAddressOther *p, const char *name, int argi)
1149 if (!ir_match_start (name, p, iea, ++argi))
1151 ir_InternationalString (iea, p->type, "type", argi);
1152 ir_InternationalString (iea, p->address, "address", argi);
1153 return ir_match_end (name, iea, argi);
1156 static int ir_NetworkAddress (IrExpArg *iea,
1157 Z_NetworkAddress *p, const char *name, int argi)
1159 IrExpChoice arm [] = {
1160 { "iA", Z_NetworkAddress_iA, ir_NetworkAddressIA },
1161 { "oPA", Z_NetworkAddress_oPA, ir_NetworkAddressOPA },
1162 { "other", Z_NetworkAddress_other, ir_NetworkAddressOther },
1164 if (!ir_match_start (name, p, iea, ++argi))
1166 ir_choice (iea, arm, p->which, p->u.internetAddress, argi);
1167 return ir_match_end (name, iea, argi);
1170 static int ir_AccessInfo (IrExpArg *iea,
1171 Z_AccessInfo *p, const char *name, int argi)
1173 if (!ir_match_start (name, p, iea, ++argi))
1175 ir_sequence (ir_QueryTypeDetails, iea, p->queryTypesSupported,
1176 p->num_queryTypesSupported, "queryTypesSupported", argi);
1177 ir_sequence (ir_oid, iea, p->diagnosticsSets,
1178 p->num_diagnosticsSets, "diagnosticsSets", argi);
1179 ir_sequence (ir_oid, iea, p->attributeSetIds,
1180 p->num_attributeSetIds, "attributeSetIds", argi);
1181 ir_sequence (ir_oid, iea, p->schemas,
1182 p->num_schemas, "schemas", argi);
1183 ir_sequence (ir_oid, iea, p->recordSyntaxes,
1184 p->num_recordSyntaxes, "recordSyntaxes", argi);
1185 ir_sequence (ir_oid, iea, p->resourceChallenges,
1186 p->num_resourceChallenges, "resourceChallenges", argi);
1187 ir_AccessRestrictions (iea, p->restrictedAccess, "restrictedAccess", argi);
1188 ir_Costs (iea, p->costInfo, "costInfo", argi);
1189 ir_sequence (ir_oid, iea, p->variantSets,
1190 p->num_variantSets, "variantSets", argi);
1191 ir_sequence (ir_ElementSetName, iea, p->elementSetNames,
1192 p->num_elementSetNames, "elementSetNames", argi);
1193 ir_sequence (ir_InternationalString, iea, p->unitSystems,
1194 p->num_unitSystems, "unitSystems", argi);
1195 return ir_match_end (name, iea, argi);
1199 static int ir_QueryTypeDetails (IrExpArg *iea,
1200 Z_QueryTypeDetails *p, const char *name, int argi)
1202 static IrExpChoice arm[] = {
1203 { "private", Z_QueryTypeDetails_private,
1204 ir_PrivateCapabilities },
1205 { "rpn", Z_QueryTypeDetails_rpn,
1206 ir_RpnCapabilities },
1207 { "iso8777", Z_QueryTypeDetails_iso8777,
1208 ir_Iso8777Capabilities },
1209 { "z3958", Z_QueryTypeDetails_z3958,
1211 { "erpn", Z_QueryTypeDetails_erpn,
1212 ir_RpnCapabilities },
1213 { "rankedList", Z_QueryTypeDetails_rankedList,
1217 if (!ir_match_start (name, p, iea, ++argi))
1219 ir_choice (iea, arm, p->which, p->u.private, argi);
1220 return ir_match_end (name, iea, argi);
1223 static int ir_PrivateCapOperator (IrExpArg *iea,
1224 Z_PrivateCapOperator *p, const char *name, int argi)
1226 if (!ir_match_start (name, p, iea, ++argi))
1228 ir_InternationalString (iea, p->roperator, "operator", argi);
1229 ir_HumanString (iea, p->description, "description", argi);
1230 return ir_match_end (name, iea, argi);
1233 static int ir_PrivateCapabilities (IrExpArg *iea,
1234 Z_PrivateCapabilities *p, const char *name, int argi)
1236 if (!ir_match_start (name, p, iea, ++argi))
1239 ir_sequence (ir_PrivateCapOperator, iea, p->operators,
1240 p->num_operators, "operators", argi);
1241 ir_sequence (ir_SearchKey, iea, p->searchKeys,
1242 p->num_searchKeys, "searchKeys", argi);
1243 ir_sequence (ir_HumanString, iea, p->description,
1244 p->num_description, "description", argi);
1245 return ir_match_end (name, iea, argi);
1248 static int ir_RpnCapabilities (IrExpArg *iea,
1249 Z_RpnCapabilities *p, const char *name, int argi)
1251 if (!ir_match_start (name, p, iea, ++argi))
1253 ir_sequence (ir_integer, iea, p->operators,
1254 p->num_operators, "operators", argi);
1255 ir_bool (iea, p->resultSetAsOperandSupported,
1256 "resultSetAsOperandSupported", argi);
1257 ir_bool (iea, p->restrictionOperandSupported,
1258 "restrictionOperandSupported", argi);
1259 ir_ProximitySupport (iea, p->proximity, "proximity", argi);
1260 return ir_match_end (name, iea, argi);
1263 static int ir_Iso8777Capabilities (IrExpArg *iea,
1264 Z_Iso8777Capabilities *p, const char *name, int argi)
1266 if (!ir_match_start (name, p, iea, ++argi))
1268 ir_sequence (ir_SearchKey, iea, p->searchKeys,
1269 p->num_searchKeys, "searchKeys", argi);
1270 ir_HumanString (iea, p->restrictions, "restrictions", argi);
1271 return ir_match_end (name, iea, argi);
1274 static int ir_ProxSupportPrivate (IrExpArg *iea,
1275 Z_ProxSupportPrivate *p, const char *name, int argi)
1277 if (!ir_match_start (name, p, iea, ++argi))
1279 ir_integer (iea, p->unit, "unit", argi);
1280 ir_HumanString (iea, p->description, "description", argi);
1281 return ir_match_end (name, iea, argi);
1284 static int ir_ProxSupportUnit (IrExpArg *iea,
1285 Z_ProxSupportUnit *p, const char *name, int argi)
1287 static IrExpChoice arm [] = {
1288 { "known", Z_ProxSupportUnit_known, ir_integer },
1289 { "private", Z_ProxSupportUnit_private, ir_ProxSupportPrivate },
1291 if (!ir_match_start (name, p, iea, ++argi))
1293 ir_choice (iea, arm, p->which, p->u.private, argi);
1294 return ir_match_end (name, iea, argi);
1297 static int ir_ProximitySupport (IrExpArg *iea,
1298 Z_ProximitySupport *p, const char *name, int argi)
1300 if (!ir_match_start (name, p, iea, ++argi))
1302 ir_bool (iea, p->anySupport, "anySupport", argi);
1303 ir_sequence (ir_ProxSupportUnit, iea, p->unitsSupported,
1304 p->num_unitsSupported, "unitsSupported", argi);
1305 return ir_match_end (name, iea, argi);
1308 static int ir_SearchKey (IrExpArg *iea,
1309 Z_SearchKey *p, const char *name, int argi)
1311 if (!ir_match_start (name, p, iea, ++argi))
1313 ir_InternationalString (iea, p->searchKey, "searchKey", argi);
1314 ir_HumanString (iea, p->description, "description", argi);
1315 return ir_match_end (name, iea, argi);
1318 static int ir_AccessRestrictionsUnit (IrExpArg *iea,
1319 Z_AccessRestrictionsUnit *p, const char *name, int argi)
1321 static IrExpChoice arm[] = {
1322 { "any", Z_AccessRestrictions_any,
1324 { "search", Z_AccessRestrictions_search,
1326 { "present", Z_AccessRestrictions_present,
1328 { "specific-elements", Z_AccessRestrictions_specific_elements,
1330 { "extended-services", Z_AccessRestrictions_extended_services,
1332 { "by-database", Z_AccessRestrictions_by_database,
1336 if (!ir_match_start (name, p, iea, ++argi))
1338 ir_choice (iea, arm, *p->accessType, NULL, argi);
1339 ir_HumanString (iea, p->accessText, "accessText", argi);
1340 ir_sequence (ir_oid, iea, p->accessChallenges,
1341 p->num_accessChallenges, "accessChallenges", argi);
1342 return ir_match_end (name, iea, argi);
1345 static int ir_AccessRestrictions (IrExpArg *iea,
1346 Z_AccessRestrictions *p, const char *name, int argi)
1348 if (!ir_match_start (name, p, iea, ++argi))
1350 ir_sequence (ir_AccessRestrictionsUnit, iea, p->restrictions,
1351 p->num_restrictions, "restrictions", argi);
1352 return ir_match_end (name, iea, argi);
1355 static int ir_CostsOtherCharge (IrExpArg *iea,
1356 Z_CostsOtherCharge *p, const char *name, int argi)
1358 if (!ir_match_start (name, p, iea, ++argi))
1360 ir_HumanString (iea, p->forWhat, "forWhat", argi);
1361 ir_Charge (iea, p->charge, "charge", argi);
1362 return ir_match_end (name, iea, argi);
1365 static int ir_Costs (IrExpArg *iea,
1366 Z_Costs *p, const char *name, int argi)
1368 if (!ir_match_start (name, p, iea, ++argi))
1370 ir_Charge (iea, p->connectCharge, "connectCharge", argi);
1371 ir_Charge (iea, p->connectTime, "connectTime", argi);
1372 ir_Charge (iea, p->displayCharge, "displayCharge", argi);
1373 ir_Charge (iea, p->searchCharge, "searchCharge", argi);
1374 ir_Charge (iea, p->subscriptCharge, "subscriptCharge", argi);
1376 ir_sequence (ir_CostsOtherCharge, iea, p->otherCharges,
1377 p->num_otherCharges, "otherCharges", argi);
1378 return ir_match_end (name, iea, argi);
1381 static int ir_Charge (IrExpArg *iea,
1382 Z_Charge *p, const char *name, int argi)
1384 if (!ir_match_start (name, p, iea, ++argi))
1386 ir_IntUnit (iea, p->cost, "cost", argi);
1387 ir_Unit (iea, p->perWhat, "perWhat", argi);
1388 ir_HumanString (iea, p->text, "text", argi);
1389 return ir_match_end (name, iea, argi);
1392 static int ir_DatabaseList (IrExpArg *iea,
1393 Z_DatabaseList *p, const char *name, int argi)
1395 if (!ir_match_start (name, p, iea, ++argi))
1397 ir_sequence (ir_DatabaseName, iea, p->databases,
1398 p->num_databases, "databases", argi);
1399 return ir_match_end (name, iea, argi);
1402 static int ir_AttributeCombinations (IrExpArg *iea,
1403 Z_AttributeCombinations *p, const char *name, int argi)
1405 if (!ir_match_start (name, p, iea, ++argi))
1407 ir_oid (iea, p->defaultAttributeSet, "defaultAttributeSet", argi);
1408 ir_sequence (ir_AttributeCombination, iea, p->legalCombinations,
1409 p->num_legalCombinations, "legalCombinations", argi);
1410 return ir_match_end (name, iea, argi);
1413 static int ir_AttributeCombination (IrExpArg *iea,
1414 Z_AttributeCombination *p, const char *name, int argi)
1416 if (!ir_match_start (name, p, iea, ++argi))
1418 ir_sequence (ir_AttributeOccurrence, iea, p->occurrences,
1419 p->num_occurrences, "occurrences", argi);
1420 return ir_match_end (name, iea, argi);
1423 static int ir_AttributeValueList (IrExpArg *iea,
1424 Z_AttributeValueList *p, const char *name, int argi)
1426 if (!ir_match_start (name, p, iea, ++argi))
1428 ir_sequence (ir_StringOrNumeric, iea, p->attributes,
1429 p->num_attributes, "attributes", argi);
1430 return ir_match_end (name, iea, argi);
1433 static int ir_AttributeOccurrence (IrExpArg *iea,
1434 Z_AttributeOccurrence *p, const char *name, int argi)
1436 static IrExpChoice arm [] = {
1437 { "any-or-none", Z_AttributeOcc_anyOrNone, ir_null },
1438 { "specific", Z_AttributeOcc_specific, ir_AttributeValueList },
1439 { NULL, 0, NULL } };
1440 if (!ir_match_start (name, p, iea, ++argi))
1442 ir_oid (iea, p->attributeSet, "attributeSet", argi);
1443 ir_integer (iea, p->attributeType, "attributeType", argi);
1444 ir_null (iea, p->mustBeSupplied, "mustBeSupplied", argi);
1445 ir_choice (iea, arm, p->which, p->attributeValues->anyOrNone, argi);
1446 return ir_match_end (name, iea, argi);
1449 static int ir_AttributeValue (IrExpArg *iea,
1450 Z_AttributeValue *p, const char *name, int argi)
1452 if (!ir_match_start (name, p, iea, ++argi))
1454 ir_StringOrNumeric (iea, p->value, "value", argi);
1455 ir_HumanString (iea, p->description, "description", argi);
1456 ir_sequence (ir_StringOrNumeric, iea, p->subAttributes,
1457 p->num_subAttributes, "subAttributes", argi);
1458 ir_sequence (ir_StringOrNumeric, iea, p->superAttributes,
1459 p->num_superAttributes, "superAttributes", argi);
1460 ir_null (iea, p->partialSupport, "partialSupport", argi);
1461 return ir_match_end (name, iea, argi);
1464 static int ir_StringOrNumeric (IrExpArg *iea,
1465 Z_StringOrNumeric *p, const char *name, int argi)
1467 IrExpChoice arm[] = {
1468 { "string", Z_StringOrNumeric_string, ir_InternationalString },
1469 { "numeric", Z_StringOrNumeric_numeric, ir_integer },
1471 if (!ir_match_start (name, p, iea, ++argi))
1473 ir_choice (iea, arm, p->which, p->u.string, argi);
1474 return ir_match_end (name, iea, argi);
1477 static int ir_ElementSpec (IrExpArg *iea,
1478 Z_ElementSpec *p, const char *name, int argi)
1480 static IrExpChoice arm[] = {
1481 { "elementSetName", Z_ElementSpec_elementSetName,
1482 ir_InternationalString },
1483 { "externalSpec", Z_ElementSpec_externalSpec,
1487 if (!ir_match_start (name, p, iea, ++argi))
1489 ir_choice (iea, arm, p->which, p->u.elementSetName, argi);
1490 return ir_match_end (name, iea, argi);
1493 static int ir_Specification (IrExpArg *iea,
1494 Z_Specification *p, const char *name, int argi)
1496 if (!ir_match_start (name, p, iea, ++argi))
1498 ir_oid (iea, p->schema, "schema", argi);
1499 ir_ElementSpec (iea, p->elementSpec, "elementSpec", argi);
1500 return ir_match_end (name, iea, argi);
1503 static int ir_InfoCategory (IrExpArg *iea,
1504 Z_InfoCategory *p, const char *name, int argi)
1506 if (!ir_match_start (name, p, iea, ++argi))
1508 ir_oid (iea, p->categoryTypeId, "categoryTypeId", argi);
1509 ir_integer (iea, p->categoryValue, "categoryValue", argi);
1510 return ir_match_end (name, iea, argi);
1513 static int ir_OtherInformationUnit (IrExpArg *iea,
1514 Z_OtherInformationUnit *p, const char *name, int argi)
1516 static IrExpChoice arm[] = {
1517 { "characterInfo", Z_OtherInfo_characterInfo,
1518 ir_InternationalString },
1519 { "binaryInfo", Z_OtherInfo_binaryInfo,
1521 { "externallyDefinedInfo", Z_OtherInfo_externallyDefinedInfo,
1523 { "oid", Z_OtherInfo_oid,
1527 if (!ir_match_start (name, p, iea, ++argi))
1529 ir_InfoCategory (iea, p->category, "category", argi);
1530 ir_choice (iea, arm, p->which, p->information.characterInfo, argi);
1531 return ir_match_end (name, iea, argi);
1534 static int ir_OtherInformation (IrExpArg *iea,
1535 Z_OtherInformation *p, const char *name, int argi)
1537 if (!ir_match_start (name, p, iea, ++argi))
1539 ir_sequence (ir_OtherInformationUnit, iea, p->list,
1540 p->num_elements, "list", argi);
1541 return ir_match_end (name, iea, argi);
1544 static int ir_IntUnit (IrExpArg *iea,
1545 Z_IntUnit *p, const char *name, int argi)
1547 if (!ir_match_start (name, p, iea, ++argi))
1549 ir_integer (iea, p->value, "value", argi);
1550 ir_Unit (iea, p->unitUsed, "unitUsed", argi);
1551 return ir_match_end (name, iea, argi);
1554 static int ir_Unit (IrExpArg *iea,
1555 Z_Unit *p, const char *name, int argi)
1557 if (!ir_match_start (name, p, iea, ++argi))
1559 ir_InternationalString (iea, p->unitSystem, "unitSystem", argi);
1560 ir_StringOrNumeric (iea, p->unitType, "unitType", argi);
1561 ir_StringOrNumeric (iea, p->unit, "unit", argi);
1562 ir_integer (iea, p->scaleFactor, "scaleFactor", argi);
1563 return ir_match_end (name, iea, argi);
1566 int ir_ExplainRecord (IrExpArg *iea, Z_ExplainRecord *p, int argi)
1568 static IrExpChoice arm[] = {
1569 {"targetInfo", Z_Explain_targetInfo,
1571 {"databaseInfo", Z_Explain_databaseInfo,
1573 {"schemaInfo", Z_Explain_schemaInfo,
1575 {"tagSetInfo", Z_Explain_tagSetInfo,
1577 {"recordSyntaxInfo", Z_Explain_recordSyntaxInfo,
1578 ir_RecordSyntaxInfo},
1579 {"attributeSetInfo", Z_Explain_attributeSetInfo,
1580 ir_AttributeSetInfo},
1581 {"termListInfo", Z_Explain_termListInfo,
1583 {"extendedServicesInfo", Z_Explain_extendedServicesInfo,
1584 ir_ExtendedServicesInfo},
1585 {"attributeDetails", Z_Explain_attributeDetails,
1586 ir_AttributeDetails},
1587 {"termListDetails", Z_Explain_termListDetails,
1588 ir_TermListDetails},
1589 {"elementSetDetails", Z_Explain_elementSetDetails,
1590 ir_ElementSetDetails},
1591 {"retrievalRecordDetails", Z_Explain_retrievalRecordDetails,
1592 ir_RetrievalRecordDetails},
1593 {"sortDetails", Z_Explain_sortDetails,
1595 {"processing", Z_Explain_processing,
1596 ir_ProcessingInformation},
1597 {"variants", Z_Explain_variants,
1599 {"units", Z_Explain_units,
1601 {"categoryList", Z_Explain_categoryList,
1606 return ir_choice (iea, arm, p->which, p->u.targetInfo, argi);
1609 int ir_tcl_get_explain (Tcl_Interp *interp, Z_ExplainRecord *rec,
1610 int argc, char **argv)
1616 iea.interp = interp;
1618 return ir_ExplainRecord (&iea, rec, 2);