2 * IR toolkit for tcl/tk
4 * See the file LICENSE for details.
5 * Sebastian Hammer, Adam Dickmeiss
8 * Revision 1.2 1996-08-20 09:27:48 adam
9 * More work on explain.
10 * Renamed tkinit.c to tkmain.c. The tcl shell uses the Tcl 7.5 interface
11 * for socket i/o instead of the handcrafted one (for Tcl 7.3 and Tcl7.4).
13 * Revision 1.1 1996/08/16 15:07:43 adam
14 * First work on Explain.
37 typedef char *Z_ElementSetName;
38 typedef Odr_oid *Z_AttributeSetId;
39 typedef char *Z_InternationalString;
40 typedef char *Z_LanguageCode;
42 static int ir_UnitType (IrExpArg *iea,
43 Z_UnitType *p, const char *name, int argi);
44 static int ir_Unit (IrExpArg *iea,
45 Z_Unit *p, const char *name, int argi);
46 static int ir_VariantType (IrExpArg *iea,
47 Z_VariantType *p, const char *name, int argi);
48 static int ir_OmittedAttributeInterpretation (IrExpArg *iea,
49 Z_OmittedAttributeInterpretation *p, const char *name, int argi);
50 static int ir_AttributeTypeDetails (IrExpArg *iea,
51 Z_AttributeTypeDetails *p, const char *name, int argi);
52 static int ir_Specification (IrExpArg *iea,
53 Z_Specification *p, const char *name, int argi);
54 static int ir_RetrievalRecordDetails (IrExpArg *iea,
55 Z_RetrievalRecordDetails *p, const char *name, int argi);
56 static int ir_ElementInfo (IrExpArg *iea,
57 Z_ElementInfo *p, const char *name, int argi);
58 static int ir_InternationalString (IrExpArg *iea,
59 char *p, const char *name, int argi);
60 static int ir_TagSetInfo (IrExpArg *iea,
61 Z_TagSetInfo *p, const char *name, int argi);
62 static int ir_DatabaseName (IrExpArg *iea,
63 char *p, const char *name, int argi);
64 static int ir_AccessInfo (IrExpArg *iea,
65 Z_AccessInfo *p, const char *name, int argi);
66 static int ir_bool (IrExpArg *iea,
67 bool_t *p, const char *name, int argi);
68 static int ir_LanguageCode (IrExpArg *iea,
69 char *p, const char *name, int argi);
70 static int ir_Units (IrExpArg *iea,
71 Z_Units *p, const char *name, int argi);
72 static int ir_SortDetails (IrExpArg *iea,
73 Z_SortDetails *p, const char *name, int argi);
74 static int ir_ElementSetDetails (IrExpArg *iea,
75 Z_ElementSetDetails *p, const char *name, int argi);
76 static int ir_TermListDetails (IrExpArg *iea,
77 Z_TermListDetails *p, const char *name, int argi);
78 static int ir_AttributeValue (IrExpArg *iea,
79 Z_AttributeValue *p, const char *name, int argi);
80 static int ir_ElementDataType (IrExpArg *iea,
81 Z_ElementDataType *p, const char *name, int argi);
82 static int ir_ProximitySupport (IrExpArg *iea,
83 Z_ProximitySupport *p, const char *name, int argi);
84 static int ir_ProcessingInformation (IrExpArg *iea,
85 Z_ProcessingInformation *p, const char *name, int argi);
86 static int ir_AttributeCombinations (IrExpArg *iea,
87 Z_AttributeCombinations *p, const char *name, int argi);
88 static int ir_AttributeSetDetails (IrExpArg *iea,
89 Z_AttributeSetDetails *p, const char *name, int argi);
90 static int ir_DatabaseInfo (IrExpArg *iea,
91 Z_DatabaseInfo *p, const char *name, int argi);
92 static int ir_IconObject (IrExpArg *iea,
93 Z_IconObject *p, const char *name, int argi);
94 static int ir_RpnCapabilities (IrExpArg *iea,
95 Z_RpnCapabilities *p, const char *name, int argi);
96 static int ir_QueryTypeDetails (IrExpArg *iea,
97 Z_QueryTypeDetails *p, const char *name, int argi);
98 static int ir_ValueDescription (IrExpArg *iea,
99 Z_ValueDescription *p, const char *name, int argi);
100 static int ir_AttributeSetInfo (IrExpArg *iea,
101 Z_AttributeSetInfo *p, const char *name, int argi);
102 static int ir_SchemaInfo (IrExpArg *iea,
103 Z_SchemaInfo *p, const char *name, int argi);
104 static int ir_AttributeOccurrence (IrExpArg *iea,
105 Z_AttributeOccurrence *p, const char *name, int argi);
106 static int ir_AttributeCombination (IrExpArg *iea,
107 Z_AttributeCombination *p, const char *name, int argi);
108 static int ir_UnitInfo (IrExpArg *iea,
109 Z_UnitInfo *p, const char *name, int argi);
110 static int ir_VariantClass (IrExpArg *iea,
111 Z_VariantClass *p, const char *name, int argi);
112 static int ir_VariantSetInfo (IrExpArg *iea,
113 Z_VariantSetInfo *p, const char *name, int argi);
114 static int ir_RecordTag (IrExpArg *iea,
115 Z_RecordTag *p, const char *name, int argi);
116 static int ir_TermListInfo (IrExpArg *iea,
117 Z_TermListInfo *p, const char *name, int argi);
118 static int ir_StringOrNumeric (IrExpArg *iea,
119 Z_StringOrNumeric *p, const char *name, int argi);
120 static int ir_CategoryInfo (IrExpArg *iea,
121 Z_CategoryInfo *p, const char *name, int argi);
122 static int ir_ValueRange (IrExpArg *iea,
123 Z_ValueRange *p, const char *name, int argi);
124 static int ir_Term (IrExpArg *iea,
125 Z_Term *p, const char *name, int argi);
126 static int ir_DatabaseList (IrExpArg *iea,
127 Z_DatabaseList *p, const char *name, int argi);
128 static int ir_HumanString (IrExpArg *iea,
129 Z_HumanString *p, const char *name, int argi);
130 static int ir_CommonInfo (IrExpArg *iea,
131 Z_CommonInfo *p, const char *name, int argi);
132 static int ir_NetworkAddress (IrExpArg *iea,
133 Z_NetworkAddress *p, const char *name, int argi);
134 static int ir_Costs (IrExpArg *iea,
135 Z_Costs *p, const char *name, int argi);
136 static int ir_RecordSyntaxInfo (IrExpArg *iea,
137 Z_RecordSyntaxInfo *p, const char *name, int argi);
138 static int ir_OtherInformation (IrExpArg *iea,
139 Z_OtherInformation *p, const char *name, int argi);
140 static int ir_CategoryList (IrExpArg *iea,
141 Z_CategoryList *p, const char *name, int argi);
142 static int ir_VariantValue (IrExpArg *iea,
143 Z_VariantValue *p, const char *name, int argi);
144 static int ir_PerElementDetails (IrExpArg *iea,
145 Z_PerElementDetails *p, const char *name, int argi);
146 static int ir_AttributeDetails (IrExpArg *iea,
147 Z_AttributeDetails *p, const char *name, int argi);
148 static int ir_ExtendedServicesInfo (IrExpArg *iea,
149 Z_ExtendedServicesInfo *p, const char *name, int argi);
150 static int ir_AttributeType (IrExpArg *iea,
151 Z_AttributeType *p, const char *name, int argi);
152 static int ir_IntUnit (IrExpArg *iea,
153 Z_IntUnit *p, const char *name, int argi);
154 static int ir_Charge (IrExpArg *iea,
155 Z_Charge *p, const char *name, int argi);
156 static int ir_PrivateCapabilities (IrExpArg *iea,
157 Z_PrivateCapabilities *p, const char *name, int argi);
158 static int ir_ValueSet (IrExpArg *iea,
159 Z_ValueSet *p, const char *name, int argi);
160 static int ir_AttributeDescription (IrExpArg *iea,
161 Z_AttributeDescription *p, const char *name, int argi);
162 static int ir_Path (IrExpArg *iea,
163 Z_Path *p, const char *name, int argi);
164 static int ir_ContactInfo (IrExpArg *iea,
165 Z_ContactInfo *p, const char *name, int argi);
166 static int ir_SearchKey (IrExpArg *iea,
167 Z_SearchKey *p, const char *name, int argi);
168 static int ir_Iso8777Capabilities (IrExpArg *iea,
169 Z_Iso8777Capabilities *p, const char *name, int argi);
170 static int ir_AccessRestrictions (IrExpArg *iea,
171 Z_AccessRestrictions *p, const char *name, int argi);
172 static int ir_SortKeyDetails (IrExpArg *iea,
173 Z_SortKeyDetails *p, const char *name, int argi);
177 ir_match_start (const char *name, void *p, IrExpArg *iea, int argi)
181 if (argi < iea->argc)
183 if (strcmp (name, iea->argv[argi]))
186 Tcl_AppendResult (iea->interp, "{", name, " ", NULL);
191 ir_match_end (const char *name, IrExpArg *iea, int argi)
193 Tcl_AppendResult (iea->interp, "} ", NULL);
198 ir_choice (IrExpArg *iea, IrExpChoice *clist, int what, void *p, int argi)
202 if (clist->id == what)
203 return (*clist->handle)(iea, p, clist->name, argi);
209 static int ir_null (IrExpArg *iea,
210 Odr_null *p, const char *name, int argi)
212 if (!ir_match_start (name, p, iea, ++argi))
214 Tcl_AppendResult (iea->interp, "{} ", NULL);
215 return ir_match_end (name, iea, argi);
218 static int ir_CString (IrExpArg *iea,
219 char *p, const char *name, int argi)
221 if (!ir_match_start (name, p, iea, ++argi))
223 Tcl_AppendElement (iea->interp, p);
224 return ir_match_end (name, iea, argi);
227 static int ir_ElementSetName (IrExpArg *iea,
228 char *p, const char *name, int argi)
230 return ir_CString (iea, p, name, argi);
233 static int ir_DatabaseName (IrExpArg *iea,
234 char *p, const char *name, int argi)
236 return ir_CString (iea, p, name, argi);
239 static int ir_InternationalString (IrExpArg *iea,
240 char *p, const char *name, int argi)
242 return ir_CString (iea, p, name, argi);
245 static int ir_GeneralizedTime (IrExpArg *iea,
246 char *p, const char *name, int argi)
248 return ir_CString (iea, p, name, argi);
251 static int ir_oid (IrExpArg *iea,
252 Odr_oid *p, const char *name, int argi)
255 if (!ir_match_start (name, p, iea, ++argi))
261 sprintf (buf, "%c%d", first, *p);
262 Tcl_AppendResult (iea->interp, buf, NULL);
265 return ir_match_end (name, iea, argi);
268 static int ir_TagTypeMapping (IrExpArg *iea,
269 Z_TagTypeMapping **p, const char *name, int argi)
271 if (!ir_match_start (name, p, iea, ++argi))
274 return ir_match_end (name, iea, argi);
277 static int ir_PrimitiveDataType (IrExpArg *iea,
278 int *p, const char *name, int argi)
280 if (!ir_match_start (name, p, iea, ++argi))
283 return ir_match_end (name, iea, argi);
286 static int ir_octet (IrExpArg *iea,
287 Odr_oct *p, const char *name, int argi)
289 if (!ir_match_start (name, p, iea, ++argi))
292 return ir_match_end (name, iea, argi);
295 static int ir_choice_nop (IrExpArg *iea,
296 void *p, const char *name, int argi)
298 Tcl_AppendResult (iea->interp, name, " ", NULL);
302 static int ir_bool (IrExpArg *iea,
303 bool_t *p, const char *name, int argi)
305 if (!ir_match_start (name, p, iea, ++argi))
307 Tcl_AppendResult (iea->interp, *p ? "1" : "0", NULL);
308 return ir_match_end (name, iea, argi);
311 static int ir_integer (IrExpArg *iea,
312 int *p, const char *name, int argi)
315 if (!ir_match_start (name, p, iea, ++argi))
317 sprintf (buf, " %d", *p);
318 Tcl_AppendResult (iea->interp, buf, NULL);
319 return ir_match_end (name, iea, argi);
322 static int ir_LanguageCode (IrExpArg *iea,
323 char *p, const char *name, int argi)
325 return ir_CString (iea, p, name, argi);
328 static int ir_External (IrExpArg *iea,
329 Z_External *p, const char *name, int argi)
331 if (!ir_match_start (name, p, iea, ++argi))
334 return ir_match_end (name, iea, argi);
337 static int ir_sequence (int (*fh)(), IrExpArg *iea, void *p, int num,
338 const char *name, int argi)
340 void **pp = (void **) p;
343 if (!ir_match_start (name, p, iea, ++argi))
345 for (i = 0; i<num; i++)
346 (*fh)(iea, pp[i], "", argi);
347 return ir_match_end (name, iea, argi);
350 static int ir_Term (IrExpArg *iea,
351 Z_Term *p, const char *name, int argi)
353 static IrExpChoice arm [] = {
354 { "general", Z_Term_general,
356 { "numeric", Z_Term_numeric,
358 { "characterString", Z_Term_characterString,
359 ir_InternationalString },
362 { "dateTime", Z_Term_dateTime,
363 ir_GeneralizedTime },
364 { "external", Z_Term_external,
366 { "null", Z_Term_null,
370 if (!ir_match_start (name, p, iea, ++argi))
373 ir_choice (iea, arm, p->which, p->u.general, argi);
374 return ir_match_end (name, iea, argi);
377 static int ir_TargetInfo (IrExpArg *iea,
378 Z_TargetInfo *p, const char *name, int argi)
380 if (!ir_match_start (name, p, iea, ++argi))
382 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
383 ir_InternationalString (iea, p->name, "name", argi);
384 ir_HumanString (iea, p->recentNews, "recentNews", argi);
385 ir_IconObject (iea, p->icon, "icon", argi);
386 ir_bool (iea, p->namedResultSets, "namedResultSets", argi);
387 ir_bool (iea, p->multipleDBsearch, "multipleDBsearch", argi);
388 ir_integer (iea, p->maxResultSets, "maxResultSets", argi);
389 ir_integer (iea, p->maxResultSize, "maxResultSize", argi);
390 ir_integer (iea, p->maxTerms, "maxTerms", argi);
391 ir_IntUnit (iea, p->timeoutInterval, "timeoutInterval", argi);
392 ir_HumanString (iea, p->welcomeMessage, "welcomeMessage", argi);
393 ir_ContactInfo (iea, p->contactInfo, "contactInfo", argi);
394 ir_HumanString (iea, p->description, "description", argi);
395 ir_sequence (ir_InternationalString, iea, p->nicknames,
396 p->num_nicknames, "nicknames", argi);
397 ir_HumanString (iea, p->usageRest, "usageRest", argi);
398 ir_HumanString (iea, p->paymentAddr, "paymentAddr", argi);
399 ir_HumanString (iea, p->hours, "hours", argi);
400 ir_sequence (ir_DatabaseList, iea, p->dbCombinations,
401 p->num_dbCombinations, "dbCombinations", argi);
402 ir_sequence (ir_NetworkAddress, iea, p->addresses,
403 p->num_addresses, "addresses", argi);
404 ir_AccessInfo (iea, p->commonAccessInfo, "commonAccessInfo", argi);
405 return ir_match_end (name, iea, argi);
408 static int ir_DatabaseInfo (IrExpArg *iea,
409 Z_DatabaseInfo *p, const char *name, int argi)
411 static IrExpChoice arm_recordCount [] = {
412 { "actualNumber", Z_Exp_RecordCount_actualNumber,
414 { "approxNumber", Z_Exp_RecordCount_approxNumber,
418 if (!ir_match_start (name, p, iea, ++argi))
420 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
421 ir_DatabaseName (iea, p->name, "name", argi);
422 ir_null (iea, p->explainDatabase, "explainDatabase", argi);
423 ir_sequence (ir_DatabaseName, iea, p->nicknames,
424 p->num_nicknames, "nicknames", argi);
425 ir_IconObject (iea, p->icon, "icon", argi);
426 ir_bool (iea, p->userFee, "userFee", argi);
427 ir_bool (iea, p->available, "available", argi);
428 ir_HumanString (iea, p->titleString, "titleString", argi);
429 ir_sequence (ir_HumanString, iea, p->keywords,
430 p->num_keywords, "keywords", argi);
431 ir_HumanString (iea, p->description, "description", argi);
432 ir_DatabaseList (iea, p->associatedDbs, "associatedDbs", argi);
433 ir_DatabaseList (iea, p->subDbs, "subDbs", argi);
434 ir_HumanString (iea, p->disclaimers, "disclaimers", argi);
435 ir_HumanString (iea, p->news, "news", argi);
437 ir_choice (iea, arm_recordCount, p->recordCount_which,
438 p->recordCount, argi);
440 ir_HumanString (iea, p->defaultOrder, "defaultOrder", argi);
441 ir_integer (iea, p->avRecordSize, "avRecordSize", argi);
442 ir_integer (iea, p->maxRecordSize, "maxRecordSize", argi);
443 ir_HumanString (iea, p->hours, "hours", argi);
444 ir_HumanString (iea, p->bestTime, "bestTime", argi);
445 ir_GeneralizedTime (iea, p->lastUpdate, "lastUpdate", argi);
446 ir_IntUnit (iea, p->updateInterval, "updateInterval", argi);
447 ir_HumanString (iea, p->coverage, "coverage", argi);
448 ir_bool (iea, p->proprietary, "proprietary", argi);
449 ir_HumanString (iea, p->copyrightText, "copyrightText", argi);
450 ir_HumanString (iea, p->copyrightNotice, "copyrightNotice", argi);
451 ir_ContactInfo (iea, p->producerContactInfo, "producerContactInfo", argi);
452 ir_ContactInfo (iea, p->supplierContactInfo, "supplierContactInfo", argi);
453 ir_ContactInfo (iea, p->submissionContactInfo, "submissionContactInfo", argi);
454 ir_AccessInfo (iea, p->accessInfo, "accessInfo", argi);
455 return ir_match_end (name, iea, argi);
458 static int ir_SchemaInfo (IrExpArg *iea,
459 Z_SchemaInfo *p, const char *name, int argi)
461 if (!ir_match_start (name, p, iea, ++argi))
463 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
464 ir_oid (iea, p->schema, "schema", argi);
465 ir_InternationalString (iea, p->name, "name", argi);
466 ir_HumanString (iea, p->description, "description", argi);
468 ir_sequence (ir_TagTypeMapping, iea, p->tagTypeMapping,
469 p->num_tagTypeMapping, "tagTypeMapping", argi);
470 ir_sequence (ir_ElementInfo, iea, p->recordStructure,
471 p->num_recordStructure, "recordStructure", argi);
472 return ir_match_end (name, iea, argi);
475 static int ir_ElementDataTypePrimitive (IrExpArg *iea,
476 int *p, const char *name, int argi)
478 static IrExpChoice arm[] = {
479 {"octetString", Z_PrimitiveElement_octetString, ir_choice_nop },
480 {"numeric", Z_PrimitiveElement_numeric, ir_choice_nop },
483 if (!ir_match_start (name, p, iea, ++argi))
485 ir_choice (iea, arm, *p, NULL, argi);
486 return ir_match_end (name, iea, argi);
489 static int ir_ElementInfo (IrExpArg *iea,
490 Z_ElementInfo *p, const char *name, int argi)
492 if (!ir_match_start (name, p, iea, ++argi))
494 ir_InternationalString (iea, p->elementName, "elementName", argi);
495 ir_Path (iea, p->elementTagPath, "elementTagPath", argi);
496 ir_ElementDataType (iea, p->dataType, "dataType", argi);
497 ir_bool (iea, p->required, "required", argi);
498 ir_bool (iea, p->repeatable, "repeatable", argi);
499 ir_HumanString (iea, p->description, "description", argi);
500 return ir_match_end (name, iea, argi);
503 static int ir_ElementInfoList (IrExpArg *iea,
504 Z_ElementInfoList *p, const char *name, int argi)
506 if (!ir_match_start (name, p, iea, ++argi))
508 ir_sequence (ir_ElementInfo, iea, p->list,
509 p->num, "list", argi);
510 return ir_match_end (name, iea, argi);
513 static int ir_ElementDataType (IrExpArg *iea,
514 Z_ElementDataType *p, const char *name, int argi)
516 static IrExpChoice arm[] = {
517 { "primitive", Z_ElementDataType_primitive,
518 ir_ElementDataTypePrimitive },
519 { "structured", Z_ElementDataType_structured,
520 ir_ElementInfoList },
522 if (!ir_match_start (name, p, iea, ++argi))
524 ir_choice (iea, arm, p->which, p->u.primitive, argi);
525 return ir_match_end (name, iea, argi);
528 static int ir_PathUnit (IrExpArg *iea,
529 Z_PathUnit *p, const char *name, int argi)
531 if (!ir_match_start (name, p, iea, ++argi))
533 ir_integer (iea, p->tagType, "tagType", argi);
534 ir_StringOrNumeric (iea, p->tagValue, "tagValue", argi);
535 return ir_match_end (name, iea, argi);
538 static int ir_Path (IrExpArg *iea,
539 Z_Path *p, const char *name, int argi)
541 if (!ir_match_start (name, p, iea, ++argi))
543 ir_sequence (ir_PathUnit, iea, p->list,
544 p->num, "list", argi);
545 return ir_match_end (name, iea, argi);
548 static int ir_TagSetInfoElements (IrExpArg *iea,
549 Z_TagSetInfoElements *p, const char *name, int argi)
551 if (!ir_match_start (name, p, iea, ++argi))
553 ir_InternationalString (iea, p->elementName, "elementname", argi);
554 ir_sequence (ir_InternationalString, iea, p->nicknames,
555 p->num_nicknames, "nicknames", argi);
556 ir_StringOrNumeric (iea, p->elementTag, "elementTag", argi);
557 ir_HumanString (iea, p->description, "description", argi);
558 ir_PrimitiveDataType (iea, p->dataType, "dataType", argi);
559 ir_OtherInformation (iea, p->otherTagInfo, "otherTagInfo", argi);
560 return ir_match_end (name, iea, argi);
563 static int ir_TagSetInfo (IrExpArg *iea,
564 Z_TagSetInfo *p, const char *name, int argi)
567 if (!ir_match_start (name, p, iea, ++argi))
569 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
570 ir_oid (iea, p->tagSet, "tagSet", argi);
571 ir_InternationalString (iea, p->name, "name", argi);
572 ir_HumanString (iea, p->description, "description", argi);
573 for (i = 0; i<p->num_elements; i++)
574 ir_TagSetInfoElements (iea, p->elements[i], "elements", argi);
575 return ir_match_end (name, iea, argi);
578 static int ir_RecordSyntaxInfo (IrExpArg *iea,
579 Z_RecordSyntaxInfo *p, const char *name, int argi)
581 if (!ir_match_start (name, p, iea, ++argi))
583 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
584 ir_oid (iea, p->recordSyntax, "recordSyntax", argi);
585 ir_InternationalString (iea, p->name, "name", argi);
586 ir_sequence (ir_oid, iea, p->transferSyntaxes,
587 p->num_transferSyntaxes, "transferSyntaxes", argi);
588 ir_HumanString (iea, p->description, "description", argi);
589 ir_InternationalString (iea, p->asn1Module, "asn1Module", argi);
590 ir_sequence (ir_ElementInfo, iea, p->abstractStructure,
591 p->num_abstractStructure, "abstractStructure", argi);
592 return ir_match_end (name, iea, argi);
595 static int ir_AttributeType (IrExpArg *iea,
596 Z_AttributeType *p, const char *name, int argi)
598 if (!ir_match_start (name, p, iea, ++argi))
600 ir_InternationalString (iea, p->name, "name", argi);
601 ir_HumanString (iea, p->description, "description", argi);
602 ir_integer (iea, p->attributeType, "attributeType", argi);
603 ir_sequence (ir_AttributeDescription, iea, p->attributeValues,
604 p->num_attributeValues, "attributeValues", argi);
605 return ir_match_end (name, iea, argi);
608 static int ir_AttributeSetInfo (IrExpArg *iea,
609 Z_AttributeSetInfo *p, const char *name, int argi)
611 if (!ir_match_start (name, p, iea, ++argi))
613 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
614 ir_oid (iea, p->attributeSet, "attributeSet", argi);
615 ir_InternationalString (iea, p->name, "name", argi);
616 ir_sequence (ir_AttributeType, iea, p->attributes,
617 p->num_attributes, "attributes", argi);
618 ir_HumanString (iea, p->description, "description", argi);
619 return ir_match_end (name, iea, argi);
622 static int ir_AttributeDescription (IrExpArg *iea,
623 Z_AttributeDescription *p, const char *name, int argi)
625 if (!ir_match_start (name, p, iea, ++argi))
627 ir_InternationalString (iea, p->name, "name", argi);
628 ir_HumanString (iea, p->description, "description", argi);
629 ir_StringOrNumeric (iea, p->attributeValue, "attributeValue", argi);
630 ir_sequence (ir_StringOrNumeric,iea, p->equivalentAttributes,
631 p->num_equivalentAttributes, "equivalentAttributes", argi);
632 return ir_match_end (name, iea, argi);
635 static int ir_TermListElement (IrExpArg *iea,
636 Z_TermListElement *p, const char *name, int argi)
638 static IrExpChoice searchCostArm [] = {
639 { "optimized", Z_TermListInfo_optimized, ir_choice_nop },
640 { "normal", Z_TermListInfo_normal, ir_choice_nop },
641 { "expensive", Z_TermListInfo_expensive, ir_choice_nop },
642 { "filter", Z_TermListInfo_filter, ir_choice_nop },
644 ir_InternationalString (iea, p->name, "name", argi);
645 ir_HumanString (iea, p->title, "title", argi);
647 ir_choice (iea, searchCostArm, *p->searchCost, NULL, argi);
649 ir_bool (iea, p->scanable, "scanable", argi);
650 ir_sequence (ir_InternationalString, iea, p->broader,
651 p->num_broader, "broader", argi);
652 ir_sequence (ir_InternationalString, iea, p->narrower,
653 p->num_narrower, "narrower", argi);
654 return ir_match_end (name, iea, argi);
657 static int ir_TermListInfo (IrExpArg *iea,
658 Z_TermListInfo *p, const char *name, int argi)
660 if (!ir_match_start (name, p, iea, ++argi))
662 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
663 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
664 ir_sequence (ir_TermListElement, iea, p->termLists,
665 p->num_termLists, "termLists", argi);
666 return ir_match_end (name, iea, argi);
669 static int ir_ExtendedServicesInfo (IrExpArg *iea,
670 Z_ExtendedServicesInfo *p, const char *name, int argi)
672 static IrExpChoice waitActionArm [] = {
673 { "waitSupported", Z_ExtendedServicesInfo_waitSupported,
675 { "waitAlways", Z_ExtendedServicesInfo_waitAlways,
677 { "waitNotSupported", Z_ExtendedServicesInfo_waitNotSupported,
679 { "depends", Z_ExtendedServicesInfo_depends,
681 { "notSaying", Z_ExtendedServicesInfo_notSaying,
685 ir_InternationalString (iea, p->name, "name", argi);
686 if (!ir_match_start (name, p, iea, ++argi))
688 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
689 ir_oid (iea, p->type, "type", argi);
690 ir_InternationalString (iea, p->name, "name", argi);
691 ir_bool (iea, p->privateType, "privateType", argi);
692 ir_bool (iea, p->restrictionsApply, "restrictionsApply", argi);
693 ir_bool (iea, p->feeApply, "feeApply", argi);
694 ir_bool (iea, p->available, "available", argi);
695 ir_bool (iea, p->retentionSupported, "retentionSupported", argi);
697 ir_choice (iea, waitActionArm, *p->waitAction, NULL, argi);
699 ir_HumanString (iea, p->description, "description", argi);
700 ir_External (iea, p->specificExplain, "specificExplain", argi);
701 ir_InternationalString (iea, p->esASN, "esASN", argi);
702 return ir_match_end (name, iea, argi);
705 static int ir_AttributeDetails (IrExpArg *iea,
706 Z_AttributeDetails *p, const char *name, int argi)
708 if (!ir_match_start (name, p, iea, ++argi))
710 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
711 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
712 ir_sequence (ir_AttributeSetDetails, iea, p->attributesBySet,
713 p->num_attributesBySet, "attributesBySet", argi);
714 ir_AttributeCombinations (iea, p->attributeCombinations,
715 "attributeCombinations", argi);
716 return ir_match_end (name, iea, argi);
719 static int ir_AttributeSetDetails (IrExpArg *iea,
720 Z_AttributeSetDetails *p, const char *name, int argi)
722 if (!ir_match_start (name, p, iea, ++argi))
724 ir_oid (iea, p->attributeSet, "attributeSet", argi);
725 ir_sequence (ir_AttributeTypeDetails, iea, p->attributesByType,
726 p->num_attributesByType, "attributesByType", argi);
727 return ir_match_end (name, iea, argi);
730 static int ir_AttributeTypeDetails (IrExpArg *iea,
731 Z_AttributeTypeDetails *p, const char *name, int argi)
733 if (!ir_match_start (name, p, iea, ++argi))
735 ir_integer (iea, p->attributeType, "attributeType", argi);
736 ir_OmittedAttributeInterpretation (iea, p->optionalType,
737 "optionalType", argi);
738 ir_sequence (ir_AttributeValue, iea, p->attributeValues,
739 p->num_attributeValues, "attributeValues", argi);
740 return ir_match_end (name, iea, argi);
743 static int ir_OmittedAttributeInterpretation (IrExpArg *iea,
744 Z_OmittedAttributeInterpretation *p, const char *name, int argi)
746 if (!ir_match_start (name, p, iea, ++argi))
748 ir_StringOrNumeric (iea, p->defaultValue, "defaultValue", argi);
749 ir_HumanString (iea, p->defaultDescription, "defaultDescription", argi);
750 return ir_match_end (name, iea, argi);
753 static int ir_EScanInfo (IrExpArg *iea,
754 Z_EScanInfo *p, const char *name, int argi)
756 if (!ir_match_start (name, p, iea, ++argi))
758 ir_integer (iea, p->maxStepSize, "maxStepSize", argi);
759 ir_HumanString (iea, p->collatingSequence, "collatingSequence", argi);
760 ir_bool (iea, p->increasing, "increasing", argi);
761 return ir_match_end (name, iea, argi);
764 static int ir_TermListDetails (IrExpArg *iea,
765 Z_TermListDetails *p, const char *name, int argi)
767 if (!ir_match_start (name, p, iea, ++argi))
769 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
770 ir_InternationalString (iea, p->termListName, "termListName", argi);
771 ir_HumanString (iea, p->description, "description", argi);
772 ir_AttributeCombinations (iea, p->attributes, "attributes", argi);
774 ir_EScanInfo (iea, p->scanInfo, "scanInfo", argi);
776 ir_integer (iea, p->estNumberTerms, "estNumberTerms", argi);
777 ir_sequence (ir_Term, iea, p->sampleTerms,
778 p->num_sampleTerms, "sampleTerms", argi);
779 return ir_match_end (name, iea, argi);
782 static int ir_ElementSetDetails (IrExpArg *iea,
783 Z_ElementSetDetails *p, const char *name, int argi)
785 if (!ir_match_start (name, p, iea, ++argi))
787 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
788 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
789 ir_ElementSetName (iea, p->elementSetName, "elementSetName", argi);
790 ir_oid (iea, p->recordSyntax, "recordSyntax", argi);
791 ir_oid (iea, p->schema, "schema", argi);
792 ir_HumanString (iea, p->description, "description", argi);
793 ir_sequence (ir_PerElementDetails, iea, p->detailsPerElement,
794 p->num_detailsPerElement, "detailsPerElement", argi);
795 return ir_match_end (name, iea, argi);
798 static int ir_RetrievalRecordDetails (IrExpArg *iea,
799 Z_RetrievalRecordDetails *p, const char *name, int argi)
801 if (!ir_match_start (name, p, iea, ++argi))
803 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
804 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
805 ir_oid (iea, p->schema, "schema", argi);
806 ir_oid (iea, p->recordSyntax, "recordSyntax", argi);
807 ir_HumanString (iea, p->description, "description", argi);
808 ir_sequence (ir_PerElementDetails, iea, p->detailsPerElement,
809 p->num_detailsPerElement, "detailsPerElement", argi);
810 return ir_match_end (name, iea, argi);
813 static int ir_PerElementDetails (IrExpArg *iea,
814 Z_PerElementDetails *p, const char *name, int argi)
816 if (!ir_match_start (name, p, iea, ++argi))
818 ir_InternationalString (iea, p->name, "name", argi);
819 ir_RecordTag (iea, p->recordTag, "recordTag", argi);
820 ir_sequence (ir_Path, iea, p->schemaTags,
821 p->num_schemaTags, "schemaTags", argi);
822 ir_integer (iea, p->maxSize, "maxSize", argi);
823 ir_integer (iea, p->minSize, "minSize", argi);
824 ir_integer (iea, p->avgSize, "avgSize", argi);
825 ir_integer (iea, p->fixedSize, "fixedSize", argi);
826 ir_bool (iea, p->repeatable, "repeatable", argi);
827 ir_bool (iea, p->required, "required", argi);
828 ir_HumanString (iea, p->description, "description", argi);
829 ir_HumanString (iea, p->contents, "contents", argi);
830 ir_HumanString (iea, p->billingInfo, "billingInfo", argi);
831 ir_HumanString (iea, p->restrictions, "restrictions", argi);
832 ir_sequence (ir_InternationalString, iea, p->alternateNames,
833 p->num_alternateNames, "alternateNames", argi);
834 ir_sequence (ir_InternationalString, iea, p->genericNames,
835 p->num_genericNames, "genericNames", argi);
836 ir_AttributeCombinations (iea, p->searchAccess, "searchAccess", argi);
837 return ir_match_end (name, iea, argi);
840 static int ir_RecordTag (IrExpArg *iea,
841 Z_RecordTag *p, const char *name, int argi)
843 if (!ir_match_start (name, p, iea, ++argi))
845 ir_StringOrNumeric (iea, p->qualifier, "qualifier", argi);
846 ir_StringOrNumeric (iea, p->tagValue, "tagValue", argi);
847 return ir_match_end (name, iea, argi);
850 static int ir_SortDetails (IrExpArg *iea,
851 Z_SortDetails *p, const char *name, int argi)
853 if (!ir_match_start (name, p, iea, ++argi))
855 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
856 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
857 ir_sequence (ir_SortKeyDetails, iea, p->sortKeys,
858 p->num_sortKeys, "sortKeys", argi);
859 return ir_match_end (name, iea, argi);
862 static int ir_SortKeyDetailsSortType (IrExpArg *iea,
863 Z_SortKeyDetailsSortType *p, const char *name, int argi)
865 static IrExpChoice sortArm [] = {
866 { "character", Z_SortKeyDetailsSortType_character,
868 { "numeric", Z_SortKeyDetailsSortType_numeric,
870 { "structured", Z_SortKeyDetailsSortType_structured,
873 return ir_choice (iea, sortArm, p->which, p->u.character, argi);
876 static int ir_SortKeyDetails (IrExpArg *iea,
877 Z_SortKeyDetails *p, const char *name, int argi)
879 static IrExpChoice sortArm [] = {
880 { "always", Z_SortKeyDetails_always,
882 { "never", Z_SortKeyDetails_never,
884 { "defaultYes", Z_SortKeyDetails_defaultYes,
886 { "defaultNo", Z_SortKeyDetails_defaultNo,
890 if (!ir_match_start (name, p, iea, ++argi))
892 ir_HumanString (iea, p->description, "description", argi);
893 ir_sequence (ir_Specification, iea, p->elementSpecifications,
894 p->num_elementSpecifications, "elementSpecifications", argi);
895 ir_AttributeCombinations (iea, p->attributeSpecifications,
896 "attributeSpecifications", argi);
897 ir_SortKeyDetailsSortType (iea, p->sortType, "sortType", argi);
899 if (p->caseSensitivity)
900 ir_choice (iea, sortArm, *p->caseSensitivity, NULL, argi);
902 return ir_match_end (name, iea, argi);
905 static int ir_ProcessingInformation (IrExpArg *iea,
906 Z_ProcessingInformation *p, const char *name, int argi)
908 IrExpChoice arm[] = {
909 { "access", Z_ProcessingInformation_access,
911 { "search", Z_ProcessingInformation_search,
913 { "retrieval", Z_ProcessingInformation_retrieval,
915 { "recordPresentation", Z_ProcessingInformation_recordPresentation,
917 { "recordHandling", Z_ProcessingInformation_recordHandling,
920 if (!ir_match_start (name, p, iea, ++argi))
922 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
923 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
925 ir_choice (iea, arm, *p->processingContext, NULL, argi);
926 ir_InternationalString (iea, p->name, "name", argi);
927 ir_oid (iea, p->oid, "oid", argi);
928 ir_HumanString (iea, p->description, "description", argi);
929 ir_External (iea, p->instructions, "instructions", argi);
930 return ir_match_end (name, iea, argi);
933 static int ir_VariantSetInfo (IrExpArg *iea,
934 Z_VariantSetInfo *p, const char *name, int argi)
936 if (!ir_match_start (name, p, iea, ++argi))
938 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
939 ir_oid (iea, p->variantSet, "variantSet", argi);
940 ir_InternationalString (iea, p->name, "name", argi);
941 ir_sequence (ir_VariantClass, iea, p->variants,
942 p->num_variants, "variants", argi);
943 return ir_match_end (name, iea, argi);
946 static int ir_VariantClass (IrExpArg *iea,
947 Z_VariantClass *p, const char *name, int argi)
949 if (!ir_match_start (name, p, iea, ++argi))
951 ir_InternationalString (iea, p->name, "name", argi);
952 ir_HumanString (iea, p->description, "description", argi);
953 ir_integer (iea, p->variantClass, "variantClass", argi);
954 ir_sequence (ir_VariantType, iea, p->variantTypes,
955 p->num_variantTypes, "variantTypes", argi);
956 return ir_match_end (name, iea, argi);
959 static int ir_VariantType (IrExpArg *iea,
960 Z_VariantType *p, const char *name, int argi)
962 if (!ir_match_start (name, p, iea, ++argi))
964 ir_InternationalString (iea, p->name, "name", argi);
965 ir_HumanString (iea, p->description, "description", argi);
966 ir_integer (iea, p->variantType, "variantType", argi);
967 ir_VariantValue (iea, p->variantValue, "variantValue", argi);
968 return ir_match_end (name, iea, argi);
971 static int ir_ValueSetEnumerated (IrExpArg *iea,
972 Z_ValueSetEnumerated *p, const char *name, int argi)
974 if (!ir_match_start (name, p, iea, ++argi))
976 ir_sequence (ir_ValueDescription, iea, p->enumerated,
977 p->num_enumerated, "enumerated", argi);
978 return ir_match_end (name, iea, argi);
981 static int ir_ValueSet (IrExpArg *iea,
982 Z_ValueSet *p, const char *name, int argi)
984 IrExpChoice arm [] = {
985 { "range", Z_ValueSet_range, ir_ValueRange },
986 { "enumerated", Z_ValueSet_enumerated, ir_ValueSetEnumerated },
988 if (!ir_match_start (name, p, iea, ++argi))
990 ir_choice (iea, arm, p->which, p->u.range, argi);
991 return ir_match_end (name, iea, argi);
994 static int ir_VariantValue (IrExpArg *iea,
995 Z_VariantValue *p, const char *name, int argi)
997 if (!ir_match_start (name, p, iea, ++argi))
999 ir_PrimitiveDataType (iea, p->dataType, "dataType", argi);
1001 ir_ValueSet (iea, p->values, "values", argi);
1002 return ir_match_end (name, iea, argi);
1005 static int ir_ValueRange (IrExpArg *iea,
1006 Z_ValueRange *p, const char *name, int argi)
1008 if (!ir_match_start (name, p, iea, ++argi))
1010 ir_ValueDescription (iea, p->lower, "lower", argi);
1011 ir_ValueDescription (iea, p->upper, "upper", argi);
1012 return ir_match_end (name, iea, argi);
1015 static int ir_ValueDescription (IrExpArg *iea,
1016 Z_ValueDescription *p, const char *name, int argi)
1018 static IrExpChoice arm [] = {
1019 { "integer", Z_ValueDescription_integer, ir_integer },
1020 { "string", Z_ValueDescription_string, ir_InternationalString},
1021 { "octets", Z_ValueDescription_octets, ir_octet},
1022 { "oid", Z_ValueDescription_oid, ir_oid},
1023 { "unit", Z_ValueDescription_unit, ir_Unit},
1024 { "valueAndUnit", Z_ValueDescription_valueAndUnit, ir_IntUnit},
1027 if (!ir_match_start (name, p, iea, ++argi))
1029 ir_choice (iea, arm, p->which, p->u.integer, argi);
1030 return ir_match_end (name, iea, argi);
1033 static int ir_UnitInfo (IrExpArg *iea,
1034 Z_UnitInfo *p, const char *name, int argi)
1036 if (!ir_match_start (name, p, iea, ++argi))
1038 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
1039 ir_InternationalString (iea, p->unitSystem, "unitSystem", argi);
1040 ir_HumanString (iea, p->description, "description", argi);
1041 ir_sequence (ir_UnitType, iea, p->units,
1042 p->num_units, "units", argi);
1043 return ir_match_end (name, iea, argi);
1046 static int ir_UnitType (IrExpArg *iea,
1047 Z_UnitType *p, const char *name, int argi)
1049 if (!ir_match_start (name, p, iea, ++argi))
1051 ir_InternationalString (iea, p->name, "name", argi);
1052 ir_HumanString (iea, p->description, "description", argi);
1053 ir_StringOrNumeric (iea, p->unitType, "unitType", argi);
1054 ir_sequence (ir_Units, iea, p->units, p->num_units, "units", argi);
1055 return ir_match_end (name, iea, argi);
1058 static int ir_Units (IrExpArg *iea,
1059 Z_Units *p, const char *name, int argi)
1061 if (!ir_match_start (name, p, iea, ++argi))
1063 ir_InternationalString (iea, p->name, "name", argi);
1064 ir_HumanString (iea, p->description, "description", argi);
1065 ir_StringOrNumeric (iea, p->unit, "unit", argi);
1066 return ir_match_end (name, iea, argi);
1069 static int ir_CategoryList (IrExpArg *iea,
1070 Z_CategoryList *p, const char *name, int argi)
1072 if (!ir_match_start (name, p, iea, ++argi))
1074 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
1075 ir_sequence (ir_CategoryInfo, iea, p->categories,
1076 p->num_categories, "categories", argi);
1077 return ir_match_end (name, iea, argi);
1080 static int ir_CategoryInfo (IrExpArg *iea,
1081 Z_CategoryInfo *p, const char *name, int argi)
1083 if (!ir_match_start (name, p, iea, ++argi))
1085 ir_InternationalString (iea, p->category, "category", argi);
1086 ir_InternationalString (iea, p->originalCategory, "originalCategory", argi);
1087 ir_HumanString (iea, p->description, "description", argi);
1088 ir_InternationalString (iea, p->asn1Module, "asn1Module", argi);
1089 return ir_match_end (name, iea, argi);
1092 static int ir_CommonInfo (IrExpArg *iea,
1093 Z_CommonInfo *p, const char *name, int argi)
1095 if (!ir_match_start (name, p, iea, ++argi))
1097 ir_GeneralizedTime (iea, p->dateAdded, "dateAdded", argi);
1098 ir_GeneralizedTime (iea, p->dateChanged, "dateChanged", argi);
1099 ir_GeneralizedTime (iea, p->expiry, "expiry", argi);
1100 ir_LanguageCode (iea, p->humanStringLanguage, "humanString-Language",
1102 ir_OtherInformation (iea, p->otherInfo, "otherInfo", argi);
1103 return ir_match_end (name, iea, argi);
1106 static int ir_HumanStringUnit (IrExpArg *iea,
1107 Z_HumanStringUnit *p, const char *name, int argi)
1109 if (!ir_match_start (name, p, iea, ++argi))
1111 ir_LanguageCode (iea, p->language, "language", argi);
1112 ir_InternationalString (iea, p->text, "text", argi);
1113 return ir_match_end (name, iea, argi);
1116 static int ir_HumanString (IrExpArg *iea,
1117 Z_HumanString *p, const char *name, int argi)
1119 if (!ir_match_start (name, p, iea, ++argi))
1121 ir_sequence (ir_HumanStringUnit, iea, p->strings,
1122 p->num_strings, "strings", argi);
1123 return ir_match_end (name, iea, argi);
1126 static int ir_IconObjectUnit (IrExpArg *iea,
1127 Z_IconObjectUnit *p, const char *name, int argi)
1129 static IrExpChoice arm [] = {
1130 { "ianaType", Z_IconObject_ianaType, ir_choice_nop },
1131 { "z3950type", Z_IconObject_z3950type, ir_choice_nop },
1132 { "otherType", Z_IconObject_otherType, ir_choice_nop },
1134 if (!ir_match_start (name, p, iea, ++argi))
1136 ir_choice (iea, arm, p->which, NULL, argi);
1137 ir_InternationalString (iea, p->bodyType, "bodyType", argi);
1138 ir_octet (iea, p->content, "content", argi);
1139 return ir_match_end (name, iea, argi);
1142 static int ir_IconObject (IrExpArg *iea,
1143 Z_IconObject *p, const char *name, int argi)
1145 if (!ir_match_start (name, p, iea, ++argi))
1147 ir_sequence (ir_IconObjectUnit, iea, p->iconUnits,
1148 p->num_iconUnits, "iconUnits", argi);
1149 return ir_match_end (name, iea, argi);
1152 static int ir_ContactInfo (IrExpArg *iea,
1153 Z_ContactInfo *p, const char *name, int argi)
1155 if (!ir_match_start (name, p, iea, ++argi))
1157 ir_InternationalString (iea, p->name, "name", argi);
1158 ir_HumanString (iea, p->description, "description", argi);
1159 ir_HumanString (iea, p->address, "address", argi);
1160 ir_InternationalString (iea, p->email, "email", argi);
1161 ir_InternationalString (iea, p->phone, "phone", argi);
1162 return ir_match_end (name, iea, argi);
1165 static int ir_NetworkAddressIA (IrExpArg *iea,
1166 Z_NetworkAddressIA *p, const char *name, int argi)
1168 if (!ir_match_start (name, p, iea, ++argi))
1170 ir_InternationalString (iea, p->hostAddress, "hostAddress", argi);
1171 ir_integer (iea, p->port, "port", argi);
1172 return ir_match_end (name, iea, argi);
1175 static int ir_NetworkAddressOPA (IrExpArg *iea,
1176 Z_NetworkAddressOPA *p, const char *name, int argi)
1178 if (!ir_match_start (name, p, iea, ++argi))
1180 ir_InternationalString (iea, p->pSel, "pSel", argi);
1181 ir_InternationalString (iea, p->sSel, "sSel", argi);
1182 ir_InternationalString (iea, p->tSel, "tSel", argi);
1183 ir_InternationalString (iea, p->nSap, "nSap", argi);
1184 return ir_match_end (name, iea, argi);
1187 static int ir_NetworkAddressOther (IrExpArg *iea,
1188 Z_NetworkAddressOther *p, const char *name, int argi)
1190 if (!ir_match_start (name, p, iea, ++argi))
1192 ir_InternationalString (iea, p->type, "type", argi);
1193 ir_InternationalString (iea, p->address, "address", argi);
1194 return ir_match_end (name, iea, argi);
1197 static int ir_NetworkAddress (IrExpArg *iea,
1198 Z_NetworkAddress *p, const char *name, int argi)
1200 IrExpChoice arm [] = {
1201 { "iA", Z_NetworkAddress_iA, ir_NetworkAddressIA },
1202 { "oPA", Z_NetworkAddress_oPA, ir_NetworkAddressOPA },
1203 { "other", Z_NetworkAddress_other, ir_NetworkAddressOther },
1205 if (!ir_match_start (name, p, iea, ++argi))
1207 ir_choice (iea, arm, p->which, p->u.internetAddress, argi);
1208 return ir_match_end (name, iea, argi);
1211 static int ir_AccessInfo (IrExpArg *iea,
1212 Z_AccessInfo *p, const char *name, int argi)
1214 if (!ir_match_start (name, p, iea, ++argi))
1216 ir_sequence (ir_QueryTypeDetails, iea, p->queryTypesSupported,
1217 p->num_queryTypesSupported, "queryTypesSupported", argi);
1218 ir_sequence (ir_oid, iea, p->diagnosticsSets,
1219 p->num_diagnosticsSets, "diagnosticsSets", argi);
1220 ir_sequence (ir_oid, iea, p->attributeSetIds,
1221 p->num_attributeSetIds, "attributeSetIds", argi);
1222 ir_sequence (ir_oid, iea, p->schemas,
1223 p->num_schemas, "schemas", argi);
1224 ir_sequence (ir_oid, iea, p->recordSyntaxes,
1225 p->num_recordSyntaxes, "recordSyntaxes", argi);
1226 ir_sequence (ir_oid, iea, p->resourceChallenges,
1227 p->num_resourceChallenges, "resourceChallenges", argi);
1228 ir_AccessRestrictions (iea, p->restrictedAccess, "restrictedAccess", argi);
1229 ir_Costs (iea, p->costInfo, "costInfo", argi);
1230 ir_sequence (ir_oid, iea, p->variantSets,
1231 p->num_variantSets, "variantSets", argi);
1232 ir_sequence (ir_ElementSetName, iea, p->elementSetNames,
1233 p->num_elementSetNames, "elementSetNames", argi);
1234 ir_sequence (ir_InternationalString, iea, p->unitSystems,
1235 p->num_unitSystems, "unitSystems", argi);
1236 return ir_match_end (name, iea, argi);
1240 static int ir_QueryTypeDetails (IrExpArg *iea,
1241 Z_QueryTypeDetails *p, const char *name, int argi)
1243 static IrExpChoice arm[] = {
1244 { "private", Z_QueryTypeDetails_private,
1245 ir_PrivateCapabilities },
1246 { "rpn", Z_QueryTypeDetails_rpn,
1247 ir_RpnCapabilities },
1248 { "iso8777", Z_QueryTypeDetails_iso8777,
1249 ir_Iso8777Capabilities },
1250 { "z3958", Z_QueryTypeDetails_z3958,
1252 { "erpn", Z_QueryTypeDetails_erpn,
1253 ir_RpnCapabilities },
1254 { "rankedList", Z_QueryTypeDetails_rankedList,
1258 if (!ir_match_start (name, p, iea, ++argi))
1260 ir_choice (iea, arm, p->which, p->u.private, argi);
1261 return ir_match_end (name, iea, argi);
1264 static int ir_PrivateCapOperator (IrExpArg *iea,
1265 Z_PrivateCapOperator *p, const char *name, int argi)
1267 if (!ir_match_start (name, p, iea, ++argi))
1269 ir_InternationalString (iea, p->roperator, "operator", argi);
1270 ir_HumanString (iea, p->description, "description", argi);
1271 return ir_match_end (name, iea, argi);
1274 static int ir_PrivateCapabilities (IrExpArg *iea,
1275 Z_PrivateCapabilities *p, const char *name, int argi)
1277 if (!ir_match_start (name, p, iea, ++argi))
1280 ir_sequence (ir_PrivateCapOperator, iea, p->operators,
1281 p->num_operators, "operators", argi);
1282 ir_sequence (ir_SearchKey, iea, p->searchKeys,
1283 p->num_searchKeys, "searchKeys", argi);
1284 ir_sequence (ir_HumanString, iea, p->description,
1285 p->num_description, "description", argi);
1286 return ir_match_end (name, iea, argi);
1289 static int ir_RpnCapabilities (IrExpArg *iea,
1290 Z_RpnCapabilities *p, const char *name, int argi)
1292 if (!ir_match_start (name, p, iea, ++argi))
1294 ir_sequence (ir_integer, iea, p->operators,
1295 p->num_operators, "operators", argi);
1296 ir_bool (iea, p->resultSetAsOperandSupported,
1297 "resultSetAsOperandSupported", argi);
1298 ir_bool (iea, p->restrictionOperandSupported,
1299 "restrictionOperandSupported", argi);
1300 ir_ProximitySupport (iea, p->proximity, "proximity", argi);
1301 return ir_match_end (name, iea, argi);
1304 static int ir_Iso8777Capabilities (IrExpArg *iea,
1305 Z_Iso8777Capabilities *p, const char *name, int argi)
1307 if (!ir_match_start (name, p, iea, ++argi))
1309 ir_sequence (ir_SearchKey, iea, p->searchKeys,
1310 p->num_searchKeys, "searchKeys", argi);
1311 ir_HumanString (iea, p->restrictions, "restrictions", argi);
1312 return ir_match_end (name, iea, argi);
1315 static int ir_ProxSupportPrivate (IrExpArg *iea,
1316 Z_ProxSupportPrivate *p, const char *name, int argi)
1318 if (!ir_match_start (name, p, iea, ++argi))
1320 ir_integer (iea, p->unit, "unit", argi);
1321 ir_HumanString (iea, p->description, "description", argi);
1322 return ir_match_end (name, iea, argi);
1325 static int ir_ProxSupportUnit (IrExpArg *iea,
1326 Z_ProxSupportUnit *p, const char *name, int argi)
1328 static IrExpChoice arm [] = {
1329 { "known", Z_ProxSupportUnit_known, ir_integer },
1330 { "private", Z_ProxSupportUnit_private, ir_ProxSupportPrivate },
1332 if (!ir_match_start (name, p, iea, ++argi))
1334 ir_choice (iea, arm, p->which, p->u.private, argi);
1335 return ir_match_end (name, iea, argi);
1338 static int ir_ProximitySupport (IrExpArg *iea,
1339 Z_ProximitySupport *p, const char *name, int argi)
1341 if (!ir_match_start (name, p, iea, ++argi))
1343 ir_bool (iea, p->anySupport, "anySupport", argi);
1344 ir_sequence (ir_ProxSupportUnit, iea, p->unitsSupported,
1345 p->num_unitsSupported, "unitsSupported", argi);
1346 return ir_match_end (name, iea, argi);
1349 static int ir_SearchKey (IrExpArg *iea,
1350 Z_SearchKey *p, const char *name, int argi)
1352 if (!ir_match_start (name, p, iea, ++argi))
1354 ir_InternationalString (iea, p->searchKey, "searchKey", argi);
1355 ir_HumanString (iea, p->description, "description", argi);
1356 return ir_match_end (name, iea, argi);
1359 static int ir_AccessRestrictionsUnit (IrExpArg *iea,
1360 Z_AccessRestrictionsUnit *p, const char *name, int argi)
1362 static IrExpChoice arm[] = {
1363 { "any", Z_AccessRestrictions_any,
1365 { "search", Z_AccessRestrictions_search,
1367 { "present", Z_AccessRestrictions_present,
1369 { "specificElements", Z_AccessRestrictions_specific_elements,
1371 { "extendedServices", Z_AccessRestrictions_extended_services,
1373 { "byDatabase", Z_AccessRestrictions_by_database,
1377 if (!ir_match_start (name, p, iea, ++argi))
1379 ir_choice (iea, arm, *p->accessType, NULL, argi);
1380 ir_HumanString (iea, p->accessText, "accessText", argi);
1381 ir_sequence (ir_oid, iea, p->accessChallenges,
1382 p->num_accessChallenges, "accessChallenges", argi);
1383 return ir_match_end (name, iea, argi);
1386 static int ir_AccessRestrictions (IrExpArg *iea,
1387 Z_AccessRestrictions *p, const char *name, int argi)
1389 if (!ir_match_start (name, p, iea, ++argi))
1391 ir_sequence (ir_AccessRestrictionsUnit, iea, p->restrictions,
1392 p->num_restrictions, "restrictions", argi);
1393 return ir_match_end (name, iea, argi);
1396 static int ir_CostsOtherCharge (IrExpArg *iea,
1397 Z_CostsOtherCharge *p, const char *name, int argi)
1399 if (!ir_match_start (name, p, iea, ++argi))
1401 ir_HumanString (iea, p->forWhat, "forWhat", argi);
1402 ir_Charge (iea, p->charge, "charge", argi);
1403 return ir_match_end (name, iea, argi);
1406 static int ir_Costs (IrExpArg *iea,
1407 Z_Costs *p, const char *name, int argi)
1409 if (!ir_match_start (name, p, iea, ++argi))
1411 ir_Charge (iea, p->connectCharge, "connectCharge", argi);
1412 ir_Charge (iea, p->connectTime, "connectTime", argi);
1413 ir_Charge (iea, p->displayCharge, "displayCharge", argi);
1414 ir_Charge (iea, p->searchCharge, "searchCharge", argi);
1415 ir_Charge (iea, p->subscriptCharge, "subscriptCharge", argi);
1417 ir_sequence (ir_CostsOtherCharge, iea, p->otherCharges,
1418 p->num_otherCharges, "otherCharges", argi);
1419 return ir_match_end (name, iea, argi);
1422 static int ir_Charge (IrExpArg *iea,
1423 Z_Charge *p, const char *name, int argi)
1425 if (!ir_match_start (name, p, iea, ++argi))
1427 ir_IntUnit (iea, p->cost, "cost", argi);
1428 ir_Unit (iea, p->perWhat, "perWhat", argi);
1429 ir_HumanString (iea, p->text, "text", argi);
1430 return ir_match_end (name, iea, argi);
1433 static int ir_DatabaseList (IrExpArg *iea,
1434 Z_DatabaseList *p, const char *name, int argi)
1436 if (!ir_match_start (name, p, iea, ++argi))
1438 ir_sequence (ir_DatabaseName, iea, p->databases,
1439 p->num_databases, "databases", argi);
1440 return ir_match_end (name, iea, argi);
1443 static int ir_AttributeCombinations (IrExpArg *iea,
1444 Z_AttributeCombinations *p, const char *name, int argi)
1446 if (!ir_match_start (name, p, iea, ++argi))
1448 ir_oid (iea, p->defaultAttributeSet, "defaultAttributeSet", argi);
1449 ir_sequence (ir_AttributeCombination, iea, p->legalCombinations,
1450 p->num_legalCombinations, "legalCombinations", argi);
1451 return ir_match_end (name, iea, argi);
1454 static int ir_AttributeCombination (IrExpArg *iea,
1455 Z_AttributeCombination *p, const char *name, int argi)
1457 if (!ir_match_start (name, p, iea, ++argi))
1459 ir_sequence (ir_AttributeOccurrence, iea, p->occurrences,
1460 p->num_occurrences, "occurrences", argi);
1461 return ir_match_end (name, iea, argi);
1464 static int ir_AttributeValueList (IrExpArg *iea,
1465 Z_AttributeValueList *p, const char *name, int argi)
1467 if (!ir_match_start (name, p, iea, ++argi))
1469 ir_sequence (ir_StringOrNumeric, iea, p->attributes,
1470 p->num_attributes, "attributes", argi);
1471 return ir_match_end (name, iea, argi);
1474 static int ir_AttributeOccurrence (IrExpArg *iea,
1475 Z_AttributeOccurrence *p, const char *name, int argi)
1477 static IrExpChoice arm [] = {
1478 { "anyOrNone", Z_AttributeOcc_anyOrNone, ir_null },
1479 { "specific", Z_AttributeOcc_specific, ir_AttributeValueList },
1480 { NULL, 0, NULL } };
1481 if (!ir_match_start (name, p, iea, ++argi))
1483 ir_oid (iea, p->attributeSet, "attributeSet", argi);
1484 ir_integer (iea, p->attributeType, "attributeType", argi);
1485 ir_null (iea, p->mustBeSupplied, "mustBeSupplied", argi);
1486 ir_choice (iea, arm, p->which, p->attributeValues->anyOrNone, argi);
1487 return ir_match_end (name, iea, argi);
1490 static int ir_AttributeValue (IrExpArg *iea,
1491 Z_AttributeValue *p, const char *name, int argi)
1493 if (!ir_match_start (name, p, iea, ++argi))
1495 ir_StringOrNumeric (iea, p->value, "value", argi);
1496 ir_HumanString (iea, p->description, "description", argi);
1497 ir_sequence (ir_StringOrNumeric, iea, p->subAttributes,
1498 p->num_subAttributes, "subAttributes", argi);
1499 ir_sequence (ir_StringOrNumeric, iea, p->superAttributes,
1500 p->num_superAttributes, "superAttributes", argi);
1501 ir_null (iea, p->partialSupport, "partialSupport", argi);
1502 return ir_match_end (name, iea, argi);
1505 static int ir_StringOrNumeric (IrExpArg *iea,
1506 Z_StringOrNumeric *p, const char *name, int argi)
1508 IrExpChoice arm[] = {
1509 { "string", Z_StringOrNumeric_string, ir_InternationalString },
1510 { "numeric", Z_StringOrNumeric_numeric, ir_integer },
1512 if (!ir_match_start (name, p, iea, ++argi))
1514 ir_choice (iea, arm, p->which, p->u.string, argi);
1515 return ir_match_end (name, iea, argi);
1518 static int ir_ElementSpec (IrExpArg *iea,
1519 Z_ElementSpec *p, const char *name, int argi)
1521 static IrExpChoice arm[] = {
1522 { "elementSetName", Z_ElementSpec_elementSetName,
1523 ir_InternationalString },
1524 { "externalSpec", Z_ElementSpec_externalSpec,
1528 if (!ir_match_start (name, p, iea, ++argi))
1530 ir_choice (iea, arm, p->which, p->u.elementSetName, argi);
1531 return ir_match_end (name, iea, argi);
1534 static int ir_Specification (IrExpArg *iea,
1535 Z_Specification *p, const char *name, int argi)
1537 if (!ir_match_start (name, p, iea, ++argi))
1539 ir_oid (iea, p->schema, "schema", argi);
1540 ir_ElementSpec (iea, p->elementSpec, "elementSpec", argi);
1541 return ir_match_end (name, iea, argi);
1544 static int ir_InfoCategory (IrExpArg *iea,
1545 Z_InfoCategory *p, const char *name, int argi)
1547 if (!ir_match_start (name, p, iea, ++argi))
1549 ir_oid (iea, p->categoryTypeId, "categoryTypeId", argi);
1550 ir_integer (iea, p->categoryValue, "categoryValue", argi);
1551 return ir_match_end (name, iea, argi);
1554 static int ir_OtherInformationUnit (IrExpArg *iea,
1555 Z_OtherInformationUnit *p, const char *name, int argi)
1557 static IrExpChoice arm[] = {
1558 { "characterInfo", Z_OtherInfo_characterInfo,
1559 ir_InternationalString },
1560 { "binaryInfo", Z_OtherInfo_binaryInfo,
1562 { "externallyDefinedInfo", Z_OtherInfo_externallyDefinedInfo,
1564 { "oid", Z_OtherInfo_oid,
1568 if (!ir_match_start (name, p, iea, ++argi))
1570 ir_InfoCategory (iea, p->category, "category", argi);
1571 ir_choice (iea, arm, p->which, p->information.characterInfo, argi);
1572 return ir_match_end (name, iea, argi);
1575 static int ir_OtherInformation (IrExpArg *iea,
1576 Z_OtherInformation *p, const char *name, int argi)
1578 if (!ir_match_start (name, p, iea, ++argi))
1580 ir_sequence (ir_OtherInformationUnit, iea, p->list,
1581 p->num_elements, "list", argi);
1582 return ir_match_end (name, iea, argi);
1585 static int ir_IntUnit (IrExpArg *iea,
1586 Z_IntUnit *p, const char *name, int argi)
1588 if (!ir_match_start (name, p, iea, ++argi))
1590 ir_integer (iea, p->value, "value", argi);
1591 ir_Unit (iea, p->unitUsed, "unitUsed", argi);
1592 return ir_match_end (name, iea, argi);
1595 static int ir_Unit (IrExpArg *iea,
1596 Z_Unit *p, const char *name, int argi)
1598 if (!ir_match_start (name, p, iea, ++argi))
1600 ir_InternationalString (iea, p->unitSystem, "unitSystem", argi);
1601 ir_StringOrNumeric (iea, p->unitType, "unitType", argi);
1602 ir_StringOrNumeric (iea, p->unit, "unit", argi);
1603 ir_integer (iea, p->scaleFactor, "scaleFactor", argi);
1604 return ir_match_end (name, iea, argi);
1607 int ir_ExplainRecord (IrExpArg *iea, Z_ExplainRecord *p, int argi)
1609 static IrExpChoice arm[] = {
1610 {"targetInfo", Z_Explain_targetInfo,
1612 {"databaseInfo", Z_Explain_databaseInfo,
1614 {"schemaInfo", Z_Explain_schemaInfo,
1616 {"tagSetInfo", Z_Explain_tagSetInfo,
1618 {"recordSyntaxInfo", Z_Explain_recordSyntaxInfo,
1619 ir_RecordSyntaxInfo},
1620 {"attributeSetInfo", Z_Explain_attributeSetInfo,
1621 ir_AttributeSetInfo},
1622 {"termListInfo", Z_Explain_termListInfo,
1624 {"extendedServicesInfo", Z_Explain_extendedServicesInfo,
1625 ir_ExtendedServicesInfo},
1626 {"attributeDetails", Z_Explain_attributeDetails,
1627 ir_AttributeDetails},
1628 {"termListDetails", Z_Explain_termListDetails,
1629 ir_TermListDetails},
1630 {"elementSetDetails", Z_Explain_elementSetDetails,
1631 ir_ElementSetDetails},
1632 {"retrievalRecordDetails", Z_Explain_retrievalRecordDetails,
1633 ir_RetrievalRecordDetails},
1634 {"sortDetails", Z_Explain_sortDetails,
1636 {"processing", Z_Explain_processing,
1637 ir_ProcessingInformation},
1638 {"variants", Z_Explain_variants,
1640 {"units", Z_Explain_units,
1642 {"categoryList", Z_Explain_categoryList,
1647 return ir_choice (iea, arm, p->which, p->u.targetInfo, argi);
1650 int ir_tcl_get_explain (Tcl_Interp *interp, Z_ExplainRecord *rec,
1651 int argc, char **argv)
1657 iea.interp = interp;
1659 return ir_ExplainRecord (&iea, rec, 2);