2 * IR toolkit for tcl/tk
4 * See the file LICENSE for details.
5 * Sebastian Hammer, Adam Dickmeiss
8 * Revision 1.3 1996-08-21 13:32:50 adam
9 * Implemented saveFile method and extended loadFile method to work with it.
11 * Revision 1.2 1996/08/20 09:27:48 adam
12 * More work on explain.
13 * Renamed tkinit.c to tkmain.c. The tcl shell uses the Tcl 7.5 interface
14 * for socket i/o instead of the handcrafted one (for Tcl 7.3 and Tcl7.4).
16 * Revision 1.1 1996/08/16 15:07:43 adam
17 * First work on Explain.
40 typedef char *Z_ElementSetName;
41 typedef Odr_oid *Z_AttributeSetId;
42 typedef char *Z_InternationalString;
43 typedef char *Z_LanguageCode;
45 static int ir_UnitType (IrExpArg *iea,
46 Z_UnitType *p, const char *name, int argi);
47 static int ir_Unit (IrExpArg *iea,
48 Z_Unit *p, const char *name, int argi);
49 static int ir_VariantType (IrExpArg *iea,
50 Z_VariantType *p, const char *name, int argi);
51 static int ir_OmittedAttributeInterpretation (IrExpArg *iea,
52 Z_OmittedAttributeInterpretation *p, const char *name, int argi);
53 static int ir_AttributeTypeDetails (IrExpArg *iea,
54 Z_AttributeTypeDetails *p, const char *name, int argi);
55 static int ir_Specification (IrExpArg *iea,
56 Z_Specification *p, const char *name, int argi);
57 static int ir_RetrievalRecordDetails (IrExpArg *iea,
58 Z_RetrievalRecordDetails *p, const char *name, int argi);
59 static int ir_ElementInfo (IrExpArg *iea,
60 Z_ElementInfo *p, const char *name, int argi);
61 static int ir_InternationalString (IrExpArg *iea,
62 char *p, const char *name, int argi);
63 static int ir_TagSetInfo (IrExpArg *iea,
64 Z_TagSetInfo *p, const char *name, int argi);
65 static int ir_DatabaseName (IrExpArg *iea,
66 char *p, const char *name, int argi);
67 static int ir_AccessInfo (IrExpArg *iea,
68 Z_AccessInfo *p, const char *name, int argi);
69 static int ir_bool (IrExpArg *iea,
70 bool_t *p, const char *name, int argi);
71 static int ir_LanguageCode (IrExpArg *iea,
72 char *p, const char *name, int argi);
73 static int ir_Units (IrExpArg *iea,
74 Z_Units *p, const char *name, int argi);
75 static int ir_SortDetails (IrExpArg *iea,
76 Z_SortDetails *p, const char *name, int argi);
77 static int ir_ElementSetDetails (IrExpArg *iea,
78 Z_ElementSetDetails *p, const char *name, int argi);
79 static int ir_TermListDetails (IrExpArg *iea,
80 Z_TermListDetails *p, const char *name, int argi);
81 static int ir_AttributeValue (IrExpArg *iea,
82 Z_AttributeValue *p, const char *name, int argi);
83 static int ir_ElementDataType (IrExpArg *iea,
84 Z_ElementDataType *p, const char *name, int argi);
85 static int ir_ProximitySupport (IrExpArg *iea,
86 Z_ProximitySupport *p, const char *name, int argi);
87 static int ir_ProcessingInformation (IrExpArg *iea,
88 Z_ProcessingInformation *p, const char *name, int argi);
89 static int ir_AttributeCombinations (IrExpArg *iea,
90 Z_AttributeCombinations *p, const char *name, int argi);
91 static int ir_AttributeSetDetails (IrExpArg *iea,
92 Z_AttributeSetDetails *p, const char *name, int argi);
93 static int ir_DatabaseInfo (IrExpArg *iea,
94 Z_DatabaseInfo *p, const char *name, int argi);
95 static int ir_IconObject (IrExpArg *iea,
96 Z_IconObject *p, const char *name, int argi);
97 static int ir_RpnCapabilities (IrExpArg *iea,
98 Z_RpnCapabilities *p, const char *name, int argi);
99 static int ir_QueryTypeDetails (IrExpArg *iea,
100 Z_QueryTypeDetails *p, const char *name, int argi);
101 static int ir_ValueDescription (IrExpArg *iea,
102 Z_ValueDescription *p, const char *name, int argi);
103 static int ir_AttributeSetInfo (IrExpArg *iea,
104 Z_AttributeSetInfo *p, const char *name, int argi);
105 static int ir_SchemaInfo (IrExpArg *iea,
106 Z_SchemaInfo *p, const char *name, int argi);
107 static int ir_AttributeOccurrence (IrExpArg *iea,
108 Z_AttributeOccurrence *p, const char *name, int argi);
109 static int ir_AttributeCombination (IrExpArg *iea,
110 Z_AttributeCombination *p, const char *name, int argi);
111 static int ir_UnitInfo (IrExpArg *iea,
112 Z_UnitInfo *p, const char *name, int argi);
113 static int ir_VariantClass (IrExpArg *iea,
114 Z_VariantClass *p, const char *name, int argi);
115 static int ir_VariantSetInfo (IrExpArg *iea,
116 Z_VariantSetInfo *p, const char *name, int argi);
117 static int ir_RecordTag (IrExpArg *iea,
118 Z_RecordTag *p, const char *name, int argi);
119 static int ir_TermListInfo (IrExpArg *iea,
120 Z_TermListInfo *p, const char *name, int argi);
121 static int ir_StringOrNumeric (IrExpArg *iea,
122 Z_StringOrNumeric *p, const char *name, int argi);
123 static int ir_CategoryInfo (IrExpArg *iea,
124 Z_CategoryInfo *p, const char *name, int argi);
125 static int ir_ValueRange (IrExpArg *iea,
126 Z_ValueRange *p, const char *name, int argi);
127 static int ir_Term (IrExpArg *iea,
128 Z_Term *p, const char *name, int argi);
129 static int ir_DatabaseList (IrExpArg *iea,
130 Z_DatabaseList *p, const char *name, int argi);
131 static int ir_HumanString (IrExpArg *iea,
132 Z_HumanString *p, const char *name, int argi);
133 static int ir_CommonInfo (IrExpArg *iea,
134 Z_CommonInfo *p, const char *name, int argi);
135 static int ir_NetworkAddress (IrExpArg *iea,
136 Z_NetworkAddress *p, const char *name, int argi);
137 static int ir_Costs (IrExpArg *iea,
138 Z_Costs *p, const char *name, int argi);
139 static int ir_RecordSyntaxInfo (IrExpArg *iea,
140 Z_RecordSyntaxInfo *p, const char *name, int argi);
141 static int ir_OtherInformation (IrExpArg *iea,
142 Z_OtherInformation *p, const char *name, int argi);
143 static int ir_CategoryList (IrExpArg *iea,
144 Z_CategoryList *p, const char *name, int argi);
145 static int ir_VariantValue (IrExpArg *iea,
146 Z_VariantValue *p, const char *name, int argi);
147 static int ir_PerElementDetails (IrExpArg *iea,
148 Z_PerElementDetails *p, const char *name, int argi);
149 static int ir_AttributeDetails (IrExpArg *iea,
150 Z_AttributeDetails *p, const char *name, int argi);
151 static int ir_ExtendedServicesInfo (IrExpArg *iea,
152 Z_ExtendedServicesInfo *p, const char *name, int argi);
153 static int ir_AttributeType (IrExpArg *iea,
154 Z_AttributeType *p, const char *name, int argi);
155 static int ir_IntUnit (IrExpArg *iea,
156 Z_IntUnit *p, const char *name, int argi);
157 static int ir_Charge (IrExpArg *iea,
158 Z_Charge *p, const char *name, int argi);
159 static int ir_PrivateCapabilities (IrExpArg *iea,
160 Z_PrivateCapabilities *p, const char *name, int argi);
161 static int ir_ValueSet (IrExpArg *iea,
162 Z_ValueSet *p, const char *name, int argi);
163 static int ir_AttributeDescription (IrExpArg *iea,
164 Z_AttributeDescription *p, const char *name, int argi);
165 static int ir_Path (IrExpArg *iea,
166 Z_Path *p, const char *name, int argi);
167 static int ir_ContactInfo (IrExpArg *iea,
168 Z_ContactInfo *p, const char *name, int argi);
169 static int ir_SearchKey (IrExpArg *iea,
170 Z_SearchKey *p, const char *name, int argi);
171 static int ir_Iso8777Capabilities (IrExpArg *iea,
172 Z_Iso8777Capabilities *p, const char *name, int argi);
173 static int ir_AccessRestrictions (IrExpArg *iea,
174 Z_AccessRestrictions *p, const char *name, int argi);
175 static int ir_SortKeyDetails (IrExpArg *iea,
176 Z_SortKeyDetails *p, const char *name, int argi);
180 ir_match_start (const char *name, void *p, IrExpArg *iea, int argi)
184 Tcl_AppendResult (iea->interp, name, " ", NULL);
187 if (argi < iea->argc)
189 if (strcmp (name, iea->argv[argi]))
192 Tcl_AppendResult (iea->interp, "{", name, " ", NULL);
197 ir_match_end (const char *name, IrExpArg *iea, int argi)
199 Tcl_AppendResult (iea->interp, "} ", NULL);
204 ir_choice (IrExpArg *iea, IrExpChoice *clist, int what, void *p, int argi)
208 if (clist->id == what)
209 return (*clist->handle)(iea, p, clist->name, argi);
215 static int ir_null (IrExpArg *iea,
216 Odr_null *p, const char *name, int argi)
218 if (!ir_match_start (name, p, iea, ++argi))
220 Tcl_AppendResult (iea->interp, "1 ", NULL);
221 return ir_match_end (name, iea, argi);
224 static int ir_CString (IrExpArg *iea,
225 char *p, const char *name, int argi)
227 if (!ir_match_start (name, p, iea, ++argi))
229 Tcl_AppendElement (iea->interp, p);
230 return ir_match_end (name, iea, argi);
233 static int ir_ElementSetName (IrExpArg *iea,
234 char *p, const char *name, int argi)
236 return ir_CString (iea, p, name, argi);
239 static int ir_DatabaseName (IrExpArg *iea,
240 char *p, const char *name, int argi)
242 return ir_CString (iea, p, name, argi);
245 static int ir_InternationalString (IrExpArg *iea,
246 char *p, const char *name, int argi)
248 return ir_CString (iea, p, name, argi);
251 static int ir_GeneralizedTime (IrExpArg *iea,
252 char *p, const char *name, int argi)
254 return ir_CString (iea, p, name, argi);
257 static int ir_oid (IrExpArg *iea,
258 Odr_oid *p, const char *name, int argi)
261 if (!ir_match_start (name, p, iea, ++argi))
267 sprintf (buf, "%c%d", first, *p);
268 Tcl_AppendResult (iea->interp, buf, NULL);
271 return ir_match_end (name, iea, argi);
274 static int ir_TagTypeMapping (IrExpArg *iea,
275 Z_TagTypeMapping **p, const char *name, int argi)
277 if (!ir_match_start (name, p, iea, ++argi))
280 return ir_match_end (name, iea, argi);
283 static int ir_PrimitiveDataType (IrExpArg *iea,
284 int *p, const char *name, int argi)
286 if (!ir_match_start (name, p, iea, ++argi))
289 return ir_match_end (name, iea, argi);
292 static int ir_octet (IrExpArg *iea,
293 Odr_oct *p, const char *name, int argi)
295 if (!ir_match_start (name, p, iea, ++argi))
298 return ir_match_end (name, iea, argi);
301 static int ir_choice_nop (IrExpArg *iea,
302 void *p, const char *name, int argi)
304 Tcl_AppendResult (iea->interp, name, " ", NULL);
308 static int ir_bool (IrExpArg *iea,
309 bool_t *p, const char *name, int argi)
311 if (!ir_match_start (name, p, iea, ++argi))
313 Tcl_AppendResult (iea->interp, *p ? "1" : "0", NULL);
314 return ir_match_end (name, iea, argi);
317 static int ir_integer (IrExpArg *iea,
318 int *p, const char *name, int argi)
321 if (!ir_match_start (name, p, iea, ++argi))
323 sprintf (buf, " %d", *p);
324 Tcl_AppendResult (iea->interp, buf, NULL);
325 return ir_match_end (name, iea, argi);
328 static int ir_LanguageCode (IrExpArg *iea,
329 char *p, const char *name, int argi)
331 return ir_CString (iea, p, name, argi);
334 static int ir_External (IrExpArg *iea,
335 Z_External *p, const char *name, int argi)
337 if (!ir_match_start (name, p, iea, ++argi))
340 return ir_match_end (name, iea, argi);
343 static int ir_sequence (int (*fh)(), IrExpArg *iea, void *p, int num,
344 const char *name, int argi)
346 void **pp = (void **) p;
349 if (!ir_match_start (name, p, iea, ++argi))
351 for (i = 0; i<num; i++)
352 (*fh)(iea, pp[i], "", argi);
353 return ir_match_end (name, iea, argi);
356 static int ir_Term (IrExpArg *iea,
357 Z_Term *p, const char *name, int argi)
359 static IrExpChoice arm [] = {
360 { "general", Z_Term_general,
362 { "numeric", Z_Term_numeric,
364 { "characterString", Z_Term_characterString,
365 ir_InternationalString },
368 { "dateTime", Z_Term_dateTime,
369 ir_GeneralizedTime },
370 { "external", Z_Term_external,
372 { "null", Z_Term_null,
376 if (!ir_match_start (name, p, iea, ++argi))
379 ir_choice (iea, arm, p->which, p->u.general, argi);
380 return ir_match_end (name, iea, argi);
383 static int ir_TargetInfo (IrExpArg *iea,
384 Z_TargetInfo *p, const char *name, int argi)
386 if (!ir_match_start (name, p, iea, ++argi))
388 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
389 ir_InternationalString (iea, p->name, "name", argi);
390 ir_HumanString (iea, p->recentNews, "recentNews", argi);
391 ir_IconObject (iea, p->icon, "icon", argi);
392 ir_bool (iea, p->namedResultSets, "namedResultSets", argi);
393 ir_bool (iea, p->multipleDBsearch, "multipleDBsearch", argi);
394 ir_integer (iea, p->maxResultSets, "maxResultSets", argi);
395 ir_integer (iea, p->maxResultSize, "maxResultSize", argi);
396 ir_integer (iea, p->maxTerms, "maxTerms", argi);
397 ir_IntUnit (iea, p->timeoutInterval, "timeoutInterval", argi);
398 ir_HumanString (iea, p->welcomeMessage, "welcomeMessage", argi);
399 ir_ContactInfo (iea, p->contactInfo, "contactInfo", argi);
400 ir_HumanString (iea, p->description, "description", argi);
401 ir_sequence (ir_InternationalString, iea, p->nicknames,
402 p->num_nicknames, "nicknames", argi);
403 ir_HumanString (iea, p->usageRest, "usageRest", argi);
404 ir_HumanString (iea, p->paymentAddr, "paymentAddr", argi);
405 ir_HumanString (iea, p->hours, "hours", argi);
406 ir_sequence (ir_DatabaseList, iea, p->dbCombinations,
407 p->num_dbCombinations, "dbCombinations", argi);
408 ir_sequence (ir_NetworkAddress, iea, p->addresses,
409 p->num_addresses, "addresses", argi);
410 ir_AccessInfo (iea, p->commonAccessInfo, "commonAccessInfo", argi);
411 return ir_match_end (name, iea, argi);
414 static int ir_DatabaseInfo (IrExpArg *iea,
415 Z_DatabaseInfo *p, const char *name, int argi)
417 static IrExpChoice arm_recordCount [] = {
418 { "actualNumber", Z_Exp_RecordCount_actualNumber,
420 { "approxNumber", Z_Exp_RecordCount_approxNumber,
424 if (!ir_match_start (name, p, iea, ++argi))
426 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
427 ir_DatabaseName (iea, p->name, "name", argi);
428 ir_null (iea, p->explainDatabase, "explainDatabase", argi);
429 ir_sequence (ir_DatabaseName, iea, p->nicknames,
430 p->num_nicknames, "nicknames", argi);
431 ir_IconObject (iea, p->icon, "icon", argi);
432 ir_bool (iea, p->userFee, "userFee", argi);
433 ir_bool (iea, p->available, "available", argi);
434 ir_HumanString (iea, p->titleString, "titleString", argi);
435 ir_sequence (ir_HumanString, iea, p->keywords,
436 p->num_keywords, "keywords", argi);
437 ir_HumanString (iea, p->description, "description", argi);
438 ir_DatabaseList (iea, p->associatedDbs, "associatedDbs", argi);
439 ir_DatabaseList (iea, p->subDbs, "subDbs", argi);
440 ir_HumanString (iea, p->disclaimers, "disclaimers", argi);
441 ir_HumanString (iea, p->news, "news", argi);
443 ir_choice (iea, arm_recordCount, p->recordCount_which,
444 p->recordCount, argi);
446 ir_HumanString (iea, p->defaultOrder, "defaultOrder", argi);
447 ir_integer (iea, p->avRecordSize, "avRecordSize", argi);
448 ir_integer (iea, p->maxRecordSize, "maxRecordSize", argi);
449 ir_HumanString (iea, p->hours, "hours", argi);
450 ir_HumanString (iea, p->bestTime, "bestTime", argi);
451 ir_GeneralizedTime (iea, p->lastUpdate, "lastUpdate", argi);
452 ir_IntUnit (iea, p->updateInterval, "updateInterval", argi);
453 ir_HumanString (iea, p->coverage, "coverage", argi);
454 ir_bool (iea, p->proprietary, "proprietary", argi);
455 ir_HumanString (iea, p->copyrightText, "copyrightText", argi);
456 ir_HumanString (iea, p->copyrightNotice, "copyrightNotice", argi);
457 ir_ContactInfo (iea, p->producerContactInfo, "producerContactInfo", argi);
458 ir_ContactInfo (iea, p->supplierContactInfo, "supplierContactInfo", argi);
459 ir_ContactInfo (iea, p->submissionContactInfo, "submissionContactInfo", argi);
460 ir_AccessInfo (iea, p->accessInfo, "accessInfo", argi);
461 return ir_match_end (name, iea, argi);
464 static int ir_SchemaInfo (IrExpArg *iea,
465 Z_SchemaInfo *p, const char *name, int argi)
467 if (!ir_match_start (name, p, iea, ++argi))
469 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
470 ir_oid (iea, p->schema, "schema", argi);
471 ir_InternationalString (iea, p->name, "name", argi);
472 ir_HumanString (iea, p->description, "description", argi);
474 ir_sequence (ir_TagTypeMapping, iea, p->tagTypeMapping,
475 p->num_tagTypeMapping, "tagTypeMapping", argi);
476 ir_sequence (ir_ElementInfo, iea, p->recordStructure,
477 p->num_recordStructure, "recordStructure", argi);
478 return ir_match_end (name, iea, argi);
481 static int ir_ElementDataTypePrimitive (IrExpArg *iea,
482 int *p, const char *name, int argi)
484 static IrExpChoice arm[] = {
485 {"octetString", Z_PrimitiveElement_octetString, ir_choice_nop },
486 {"numeric", Z_PrimitiveElement_numeric, ir_choice_nop },
489 if (!ir_match_start (name, p, iea, ++argi))
491 ir_choice (iea, arm, *p, NULL, argi);
492 return ir_match_end (name, iea, argi);
495 static int ir_ElementInfo (IrExpArg *iea,
496 Z_ElementInfo *p, const char *name, int argi)
498 if (!ir_match_start (name, p, iea, ++argi))
500 ir_InternationalString (iea, p->elementName, "elementName", argi);
501 ir_Path (iea, p->elementTagPath, "elementTagPath", argi);
502 ir_ElementDataType (iea, p->dataType, "dataType", argi);
503 ir_bool (iea, p->required, "required", argi);
504 ir_bool (iea, p->repeatable, "repeatable", argi);
505 ir_HumanString (iea, p->description, "description", argi);
506 return ir_match_end (name, iea, argi);
509 static int ir_ElementInfoList (IrExpArg *iea,
510 Z_ElementInfoList *p, const char *name, int argi)
512 if (!ir_match_start (name, p, iea, ++argi))
514 ir_sequence (ir_ElementInfo, iea, p->list,
515 p->num, "list", argi);
516 return ir_match_end (name, iea, argi);
519 static int ir_ElementDataType (IrExpArg *iea,
520 Z_ElementDataType *p, const char *name, int argi)
522 static IrExpChoice arm[] = {
523 { "primitive", Z_ElementDataType_primitive,
524 ir_ElementDataTypePrimitive },
525 { "structured", Z_ElementDataType_structured,
526 ir_ElementInfoList },
528 if (!ir_match_start (name, p, iea, ++argi))
530 ir_choice (iea, arm, p->which, p->u.primitive, argi);
531 return ir_match_end (name, iea, argi);
534 static int ir_PathUnit (IrExpArg *iea,
535 Z_PathUnit *p, const char *name, int argi)
537 if (!ir_match_start (name, p, iea, ++argi))
539 ir_integer (iea, p->tagType, "tagType", argi);
540 ir_StringOrNumeric (iea, p->tagValue, "tagValue", argi);
541 return ir_match_end (name, iea, argi);
544 static int ir_Path (IrExpArg *iea,
545 Z_Path *p, const char *name, int argi)
547 if (!ir_match_start (name, p, iea, ++argi))
549 ir_sequence (ir_PathUnit, iea, p->list,
550 p->num, "list", argi);
551 return ir_match_end (name, iea, argi);
554 static int ir_TagSetInfoElements (IrExpArg *iea,
555 Z_TagSetInfoElements *p, const char *name, int argi)
557 if (!ir_match_start (name, p, iea, ++argi))
559 ir_InternationalString (iea, p->elementName, "elementname", argi);
560 ir_sequence (ir_InternationalString, iea, p->nicknames,
561 p->num_nicknames, "nicknames", argi);
562 ir_StringOrNumeric (iea, p->elementTag, "elementTag", argi);
563 ir_HumanString (iea, p->description, "description", argi);
564 ir_PrimitiveDataType (iea, p->dataType, "dataType", argi);
565 ir_OtherInformation (iea, p->otherTagInfo, "otherTagInfo", argi);
566 return ir_match_end (name, iea, argi);
569 static int ir_TagSetInfo (IrExpArg *iea,
570 Z_TagSetInfo *p, const char *name, int argi)
573 if (!ir_match_start (name, p, iea, ++argi))
575 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
576 ir_oid (iea, p->tagSet, "tagSet", argi);
577 ir_InternationalString (iea, p->name, "name", argi);
578 ir_HumanString (iea, p->description, "description", argi);
579 for (i = 0; i<p->num_elements; i++)
580 ir_TagSetInfoElements (iea, p->elements[i], "elements", argi);
581 return ir_match_end (name, iea, argi);
584 static int ir_RecordSyntaxInfo (IrExpArg *iea,
585 Z_RecordSyntaxInfo *p, const char *name, int argi)
587 if (!ir_match_start (name, p, iea, ++argi))
589 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
590 ir_oid (iea, p->recordSyntax, "recordSyntax", argi);
591 ir_InternationalString (iea, p->name, "name", argi);
592 ir_sequence (ir_oid, iea, p->transferSyntaxes,
593 p->num_transferSyntaxes, "transferSyntaxes", argi);
594 ir_HumanString (iea, p->description, "description", argi);
595 ir_InternationalString (iea, p->asn1Module, "asn1Module", argi);
596 ir_sequence (ir_ElementInfo, iea, p->abstractStructure,
597 p->num_abstractStructure, "abstractStructure", argi);
598 return ir_match_end (name, iea, argi);
601 static int ir_AttributeType (IrExpArg *iea,
602 Z_AttributeType *p, const char *name, int argi)
604 if (!ir_match_start (name, p, iea, ++argi))
606 ir_InternationalString (iea, p->name, "name", argi);
607 ir_HumanString (iea, p->description, "description", argi);
608 ir_integer (iea, p->attributeType, "attributeType", argi);
609 ir_sequence (ir_AttributeDescription, iea, p->attributeValues,
610 p->num_attributeValues, "attributeValues", argi);
611 return ir_match_end (name, iea, argi);
614 static int ir_AttributeSetInfo (IrExpArg *iea,
615 Z_AttributeSetInfo *p, const char *name, int argi)
617 if (!ir_match_start (name, p, iea, ++argi))
619 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
620 ir_oid (iea, p->attributeSet, "attributeSet", argi);
621 ir_InternationalString (iea, p->name, "name", argi);
622 ir_sequence (ir_AttributeType, iea, p->attributes,
623 p->num_attributes, "attributes", argi);
624 ir_HumanString (iea, p->description, "description", argi);
625 return ir_match_end (name, iea, argi);
628 static int ir_AttributeDescription (IrExpArg *iea,
629 Z_AttributeDescription *p, const char *name, int argi)
631 if (!ir_match_start (name, p, iea, ++argi))
633 ir_InternationalString (iea, p->name, "name", argi);
634 ir_HumanString (iea, p->description, "description", argi);
635 ir_StringOrNumeric (iea, p->attributeValue, "attributeValue", argi);
636 ir_sequence (ir_StringOrNumeric,iea, p->equivalentAttributes,
637 p->num_equivalentAttributes, "equivalentAttributes", argi);
638 return ir_match_end (name, iea, argi);
641 static int ir_TermListElement (IrExpArg *iea,
642 Z_TermListElement *p, const char *name, int argi)
644 static IrExpChoice searchCostArm [] = {
645 { "optimized", Z_TermListInfo_optimized, ir_choice_nop },
646 { "normal", Z_TermListInfo_normal, ir_choice_nop },
647 { "expensive", Z_TermListInfo_expensive, ir_choice_nop },
648 { "filter", Z_TermListInfo_filter, ir_choice_nop },
650 ir_InternationalString (iea, p->name, "name", argi);
651 ir_HumanString (iea, p->title, "title", argi);
653 ir_choice (iea, searchCostArm, *p->searchCost, NULL, argi);
655 ir_bool (iea, p->scanable, "scanable", argi);
656 ir_sequence (ir_InternationalString, iea, p->broader,
657 p->num_broader, "broader", argi);
658 ir_sequence (ir_InternationalString, iea, p->narrower,
659 p->num_narrower, "narrower", argi);
660 return ir_match_end (name, iea, argi);
663 static int ir_TermListInfo (IrExpArg *iea,
664 Z_TermListInfo *p, const char *name, int argi)
666 if (!ir_match_start (name, p, iea, ++argi))
668 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
669 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
670 ir_sequence (ir_TermListElement, iea, p->termLists,
671 p->num_termLists, "termLists", argi);
672 return ir_match_end (name, iea, argi);
675 static int ir_ExtendedServicesInfo (IrExpArg *iea,
676 Z_ExtendedServicesInfo *p, const char *name, int argi)
678 static IrExpChoice waitActionArm [] = {
679 { "waitSupported", Z_ExtendedServicesInfo_waitSupported,
681 { "waitAlways", Z_ExtendedServicesInfo_waitAlways,
683 { "waitNotSupported", Z_ExtendedServicesInfo_waitNotSupported,
685 { "depends", Z_ExtendedServicesInfo_depends,
687 { "notSaying", Z_ExtendedServicesInfo_notSaying,
691 ir_InternationalString (iea, p->name, "name", argi);
692 if (!ir_match_start (name, p, iea, ++argi))
694 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
695 ir_oid (iea, p->type, "type", argi);
696 ir_InternationalString (iea, p->name, "name", argi);
697 ir_bool (iea, p->privateType, "privateType", argi);
698 ir_bool (iea, p->restrictionsApply, "restrictionsApply", argi);
699 ir_bool (iea, p->feeApply, "feeApply", argi);
700 ir_bool (iea, p->available, "available", argi);
701 ir_bool (iea, p->retentionSupported, "retentionSupported", argi);
703 ir_choice (iea, waitActionArm, *p->waitAction, NULL, argi);
705 ir_HumanString (iea, p->description, "description", argi);
706 ir_External (iea, p->specificExplain, "specificExplain", argi);
707 ir_InternationalString (iea, p->esASN, "esASN", argi);
708 return ir_match_end (name, iea, argi);
711 static int ir_AttributeDetails (IrExpArg *iea,
712 Z_AttributeDetails *p, const char *name, int argi)
714 if (!ir_match_start (name, p, iea, ++argi))
716 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
717 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
718 ir_sequence (ir_AttributeSetDetails, iea, p->attributesBySet,
719 p->num_attributesBySet, "attributesBySet", argi);
720 ir_AttributeCombinations (iea, p->attributeCombinations,
721 "attributeCombinations", argi);
722 return ir_match_end (name, iea, argi);
725 static int ir_AttributeSetDetails (IrExpArg *iea,
726 Z_AttributeSetDetails *p, const char *name, int argi)
728 if (!ir_match_start (name, p, iea, ++argi))
730 ir_oid (iea, p->attributeSet, "attributeSet", argi);
731 ir_sequence (ir_AttributeTypeDetails, iea, p->attributesByType,
732 p->num_attributesByType, "attributesByType", argi);
733 return ir_match_end (name, iea, argi);
736 static int ir_AttributeTypeDetails (IrExpArg *iea,
737 Z_AttributeTypeDetails *p, const char *name, int argi)
739 if (!ir_match_start (name, p, iea, ++argi))
741 ir_integer (iea, p->attributeType, "attributeType", argi);
742 ir_OmittedAttributeInterpretation (iea, p->optionalType,
743 "optionalType", argi);
744 ir_sequence (ir_AttributeValue, iea, p->attributeValues,
745 p->num_attributeValues, "attributeValues", argi);
746 return ir_match_end (name, iea, argi);
749 static int ir_OmittedAttributeInterpretation (IrExpArg *iea,
750 Z_OmittedAttributeInterpretation *p, const char *name, int argi)
752 if (!ir_match_start (name, p, iea, ++argi))
754 ir_StringOrNumeric (iea, p->defaultValue, "defaultValue", argi);
755 ir_HumanString (iea, p->defaultDescription, "defaultDescription", argi);
756 return ir_match_end (name, iea, argi);
759 static int ir_EScanInfo (IrExpArg *iea,
760 Z_EScanInfo *p, const char *name, int argi)
762 if (!ir_match_start (name, p, iea, ++argi))
764 ir_integer (iea, p->maxStepSize, "maxStepSize", argi);
765 ir_HumanString (iea, p->collatingSequence, "collatingSequence", argi);
766 ir_bool (iea, p->increasing, "increasing", argi);
767 return ir_match_end (name, iea, argi);
770 static int ir_TermListDetails (IrExpArg *iea,
771 Z_TermListDetails *p, const char *name, int argi)
773 if (!ir_match_start (name, p, iea, ++argi))
775 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
776 ir_InternationalString (iea, p->termListName, "termListName", argi);
777 ir_HumanString (iea, p->description, "description", argi);
778 ir_AttributeCombinations (iea, p->attributes, "attributes", argi);
780 ir_EScanInfo (iea, p->scanInfo, "scanInfo", argi);
782 ir_integer (iea, p->estNumberTerms, "estNumberTerms", argi);
783 ir_sequence (ir_Term, iea, p->sampleTerms,
784 p->num_sampleTerms, "sampleTerms", argi);
785 return ir_match_end (name, iea, argi);
788 static int ir_ElementSetDetails (IrExpArg *iea,
789 Z_ElementSetDetails *p, const char *name, int argi)
791 if (!ir_match_start (name, p, iea, ++argi))
793 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
794 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
795 ir_ElementSetName (iea, p->elementSetName, "elementSetName", argi);
796 ir_oid (iea, p->recordSyntax, "recordSyntax", argi);
797 ir_oid (iea, p->schema, "schema", argi);
798 ir_HumanString (iea, p->description, "description", argi);
799 ir_sequence (ir_PerElementDetails, iea, p->detailsPerElement,
800 p->num_detailsPerElement, "detailsPerElement", argi);
801 return ir_match_end (name, iea, argi);
804 static int ir_RetrievalRecordDetails (IrExpArg *iea,
805 Z_RetrievalRecordDetails *p, const char *name, int argi)
807 if (!ir_match_start (name, p, iea, ++argi))
809 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
810 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
811 ir_oid (iea, p->schema, "schema", argi);
812 ir_oid (iea, p->recordSyntax, "recordSyntax", argi);
813 ir_HumanString (iea, p->description, "description", argi);
814 ir_sequence (ir_PerElementDetails, iea, p->detailsPerElement,
815 p->num_detailsPerElement, "detailsPerElement", argi);
816 return ir_match_end (name, iea, argi);
819 static int ir_PerElementDetails (IrExpArg *iea,
820 Z_PerElementDetails *p, const char *name, int argi)
822 if (!ir_match_start (name, p, iea, ++argi))
824 ir_InternationalString (iea, p->name, "name", argi);
825 ir_RecordTag (iea, p->recordTag, "recordTag", argi);
826 ir_sequence (ir_Path, iea, p->schemaTags,
827 p->num_schemaTags, "schemaTags", argi);
828 ir_integer (iea, p->maxSize, "maxSize", argi);
829 ir_integer (iea, p->minSize, "minSize", argi);
830 ir_integer (iea, p->avgSize, "avgSize", argi);
831 ir_integer (iea, p->fixedSize, "fixedSize", argi);
832 ir_bool (iea, p->repeatable, "repeatable", argi);
833 ir_bool (iea, p->required, "required", argi);
834 ir_HumanString (iea, p->description, "description", argi);
835 ir_HumanString (iea, p->contents, "contents", argi);
836 ir_HumanString (iea, p->billingInfo, "billingInfo", argi);
837 ir_HumanString (iea, p->restrictions, "restrictions", argi);
838 ir_sequence (ir_InternationalString, iea, p->alternateNames,
839 p->num_alternateNames, "alternateNames", argi);
840 ir_sequence (ir_InternationalString, iea, p->genericNames,
841 p->num_genericNames, "genericNames", argi);
842 ir_AttributeCombinations (iea, p->searchAccess, "searchAccess", argi);
843 return ir_match_end (name, iea, argi);
846 static int ir_RecordTag (IrExpArg *iea,
847 Z_RecordTag *p, const char *name, int argi)
849 if (!ir_match_start (name, p, iea, ++argi))
851 ir_StringOrNumeric (iea, p->qualifier, "qualifier", argi);
852 ir_StringOrNumeric (iea, p->tagValue, "tagValue", argi);
853 return ir_match_end (name, iea, argi);
856 static int ir_SortDetails (IrExpArg *iea,
857 Z_SortDetails *p, const char *name, int argi)
859 if (!ir_match_start (name, p, iea, ++argi))
861 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
862 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
863 ir_sequence (ir_SortKeyDetails, iea, p->sortKeys,
864 p->num_sortKeys, "sortKeys", argi);
865 return ir_match_end (name, iea, argi);
868 static int ir_SortKeyDetailsSortType (IrExpArg *iea,
869 Z_SortKeyDetailsSortType *p, const char *name, int argi)
871 static IrExpChoice sortArm [] = {
872 { "character", Z_SortKeyDetailsSortType_character,
874 { "numeric", Z_SortKeyDetailsSortType_numeric,
876 { "structured", Z_SortKeyDetailsSortType_structured,
879 return ir_choice (iea, sortArm, p->which, p->u.character, argi);
882 static int ir_SortKeyDetails (IrExpArg *iea,
883 Z_SortKeyDetails *p, const char *name, int argi)
885 static IrExpChoice sortArm [] = {
886 { "always", Z_SortKeyDetails_always,
888 { "never", Z_SortKeyDetails_never,
890 { "defaultYes", Z_SortKeyDetails_defaultYes,
892 { "defaultNo", Z_SortKeyDetails_defaultNo,
896 if (!ir_match_start (name, p, iea, ++argi))
898 ir_HumanString (iea, p->description, "description", argi);
899 ir_sequence (ir_Specification, iea, p->elementSpecifications,
900 p->num_elementSpecifications, "elementSpecifications", argi);
901 ir_AttributeCombinations (iea, p->attributeSpecifications,
902 "attributeSpecifications", argi);
903 ir_SortKeyDetailsSortType (iea, p->sortType, "sortType", argi);
905 if (p->caseSensitivity)
906 ir_choice (iea, sortArm, *p->caseSensitivity, NULL, argi);
908 return ir_match_end (name, iea, argi);
911 static int ir_ProcessingInformation (IrExpArg *iea,
912 Z_ProcessingInformation *p, const char *name, int argi)
914 IrExpChoice arm[] = {
915 { "access", Z_ProcessingInformation_access,
917 { "search", Z_ProcessingInformation_search,
919 { "retrieval", Z_ProcessingInformation_retrieval,
921 { "recordPresentation", Z_ProcessingInformation_recordPresentation,
923 { "recordHandling", Z_ProcessingInformation_recordHandling,
926 if (!ir_match_start (name, p, iea, ++argi))
928 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
929 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
931 ir_choice (iea, arm, *p->processingContext, NULL, argi);
932 ir_InternationalString (iea, p->name, "name", argi);
933 ir_oid (iea, p->oid, "oid", argi);
934 ir_HumanString (iea, p->description, "description", argi);
935 ir_External (iea, p->instructions, "instructions", argi);
936 return ir_match_end (name, iea, argi);
939 static int ir_VariantSetInfo (IrExpArg *iea,
940 Z_VariantSetInfo *p, const char *name, int argi)
942 if (!ir_match_start (name, p, iea, ++argi))
944 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
945 ir_oid (iea, p->variantSet, "variantSet", argi);
946 ir_InternationalString (iea, p->name, "name", argi);
947 ir_sequence (ir_VariantClass, iea, p->variants,
948 p->num_variants, "variants", argi);
949 return ir_match_end (name, iea, argi);
952 static int ir_VariantClass (IrExpArg *iea,
953 Z_VariantClass *p, const char *name, int argi)
955 if (!ir_match_start (name, p, iea, ++argi))
957 ir_InternationalString (iea, p->name, "name", argi);
958 ir_HumanString (iea, p->description, "description", argi);
959 ir_integer (iea, p->variantClass, "variantClass", argi);
960 ir_sequence (ir_VariantType, iea, p->variantTypes,
961 p->num_variantTypes, "variantTypes", argi);
962 return ir_match_end (name, iea, argi);
965 static int ir_VariantType (IrExpArg *iea,
966 Z_VariantType *p, const char *name, int argi)
968 if (!ir_match_start (name, p, iea, ++argi))
970 ir_InternationalString (iea, p->name, "name", argi);
971 ir_HumanString (iea, p->description, "description", argi);
972 ir_integer (iea, p->variantType, "variantType", argi);
973 ir_VariantValue (iea, p->variantValue, "variantValue", argi);
974 return ir_match_end (name, iea, argi);
977 static int ir_ValueSetEnumerated (IrExpArg *iea,
978 Z_ValueSetEnumerated *p, const char *name, int argi)
980 if (!ir_match_start (name, p, iea, ++argi))
982 ir_sequence (ir_ValueDescription, iea, p->enumerated,
983 p->num_enumerated, "enumerated", argi);
984 return ir_match_end (name, iea, argi);
987 static int ir_ValueSet (IrExpArg *iea,
988 Z_ValueSet *p, const char *name, int argi)
990 IrExpChoice arm [] = {
991 { "range", Z_ValueSet_range, ir_ValueRange },
992 { "enumerated", Z_ValueSet_enumerated, ir_ValueSetEnumerated },
994 if (!ir_match_start (name, p, iea, ++argi))
996 ir_choice (iea, arm, p->which, p->u.range, argi);
997 return ir_match_end (name, iea, argi);
1000 static int ir_VariantValue (IrExpArg *iea,
1001 Z_VariantValue *p, const char *name, int argi)
1003 if (!ir_match_start (name, p, iea, ++argi))
1005 ir_PrimitiveDataType (iea, p->dataType, "dataType", argi);
1007 ir_ValueSet (iea, p->values, "values", argi);
1008 return ir_match_end (name, iea, argi);
1011 static int ir_ValueRange (IrExpArg *iea,
1012 Z_ValueRange *p, const char *name, int argi)
1014 if (!ir_match_start (name, p, iea, ++argi))
1016 ir_ValueDescription (iea, p->lower, "lower", argi);
1017 ir_ValueDescription (iea, p->upper, "upper", argi);
1018 return ir_match_end (name, iea, argi);
1021 static int ir_ValueDescription (IrExpArg *iea,
1022 Z_ValueDescription *p, const char *name, int argi)
1024 static IrExpChoice arm [] = {
1025 { "integer", Z_ValueDescription_integer, ir_integer },
1026 { "string", Z_ValueDescription_string, ir_InternationalString},
1027 { "octets", Z_ValueDescription_octets, ir_octet},
1028 { "oid", Z_ValueDescription_oid, ir_oid},
1029 { "unit", Z_ValueDescription_unit, ir_Unit},
1030 { "valueAndUnit", Z_ValueDescription_valueAndUnit, ir_IntUnit},
1033 if (!ir_match_start (name, p, iea, ++argi))
1035 ir_choice (iea, arm, p->which, p->u.integer, argi);
1036 return ir_match_end (name, iea, argi);
1039 static int ir_UnitInfo (IrExpArg *iea,
1040 Z_UnitInfo *p, const char *name, int argi)
1042 if (!ir_match_start (name, p, iea, ++argi))
1044 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
1045 ir_InternationalString (iea, p->unitSystem, "unitSystem", argi);
1046 ir_HumanString (iea, p->description, "description", argi);
1047 ir_sequence (ir_UnitType, iea, p->units,
1048 p->num_units, "units", argi);
1049 return ir_match_end (name, iea, argi);
1052 static int ir_UnitType (IrExpArg *iea,
1053 Z_UnitType *p, const char *name, int argi)
1055 if (!ir_match_start (name, p, iea, ++argi))
1057 ir_InternationalString (iea, p->name, "name", argi);
1058 ir_HumanString (iea, p->description, "description", argi);
1059 ir_StringOrNumeric (iea, p->unitType, "unitType", argi);
1060 ir_sequence (ir_Units, iea, p->units, p->num_units, "units", argi);
1061 return ir_match_end (name, iea, argi);
1064 static int ir_Units (IrExpArg *iea,
1065 Z_Units *p, const char *name, int argi)
1067 if (!ir_match_start (name, p, iea, ++argi))
1069 ir_InternationalString (iea, p->name, "name", argi);
1070 ir_HumanString (iea, p->description, "description", argi);
1071 ir_StringOrNumeric (iea, p->unit, "unit", argi);
1072 return ir_match_end (name, iea, argi);
1075 static int ir_CategoryList (IrExpArg *iea,
1076 Z_CategoryList *p, const char *name, int argi)
1078 if (!ir_match_start (name, p, iea, ++argi))
1080 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
1081 ir_sequence (ir_CategoryInfo, iea, p->categories,
1082 p->num_categories, "categories", argi);
1083 return ir_match_end (name, iea, argi);
1086 static int ir_CategoryInfo (IrExpArg *iea,
1087 Z_CategoryInfo *p, const char *name, int argi)
1089 if (!ir_match_start (name, p, iea, ++argi))
1091 ir_InternationalString (iea, p->category, "category", argi);
1092 ir_InternationalString (iea, p->originalCategory, "originalCategory", argi);
1093 ir_HumanString (iea, p->description, "description", argi);
1094 ir_InternationalString (iea, p->asn1Module, "asn1Module", argi);
1095 return ir_match_end (name, iea, argi);
1098 static int ir_CommonInfo (IrExpArg *iea,
1099 Z_CommonInfo *p, const char *name, int argi)
1101 if (!ir_match_start (name, p, iea, ++argi))
1103 ir_GeneralizedTime (iea, p->dateAdded, "dateAdded", argi);
1104 ir_GeneralizedTime (iea, p->dateChanged, "dateChanged", argi);
1105 ir_GeneralizedTime (iea, p->expiry, "expiry", argi);
1106 ir_LanguageCode (iea, p->humanStringLanguage, "humanString-Language",
1108 ir_OtherInformation (iea, p->otherInfo, "otherInfo", argi);
1109 return ir_match_end (name, iea, argi);
1112 static int ir_HumanStringUnit (IrExpArg *iea,
1113 Z_HumanStringUnit *p, const char *name, int argi)
1115 if (!ir_match_start (name, p, iea, ++argi))
1117 ir_LanguageCode (iea, p->language, "language", argi);
1118 ir_InternationalString (iea, p->text, "text", argi);
1119 return ir_match_end (name, iea, argi);
1122 static int ir_HumanString (IrExpArg *iea,
1123 Z_HumanString *p, const char *name, int argi)
1125 if (!ir_match_start (name, p, iea, ++argi))
1127 ir_sequence (ir_HumanStringUnit, iea, p->strings,
1128 p->num_strings, "strings", argi);
1129 return ir_match_end (name, iea, argi);
1132 static int ir_IconObjectUnit (IrExpArg *iea,
1133 Z_IconObjectUnit *p, const char *name, int argi)
1135 static IrExpChoice arm [] = {
1136 { "ianaType", Z_IconObject_ianaType, ir_choice_nop },
1137 { "z3950type", Z_IconObject_z3950type, ir_choice_nop },
1138 { "otherType", Z_IconObject_otherType, ir_choice_nop },
1140 if (!ir_match_start (name, p, iea, ++argi))
1142 ir_choice (iea, arm, p->which, NULL, argi);
1143 ir_InternationalString (iea, p->bodyType, "bodyType", argi);
1144 ir_octet (iea, p->content, "content", argi);
1145 return ir_match_end (name, iea, argi);
1148 static int ir_IconObject (IrExpArg *iea,
1149 Z_IconObject *p, const char *name, int argi)
1151 if (!ir_match_start (name, p, iea, ++argi))
1153 ir_sequence (ir_IconObjectUnit, iea, p->iconUnits,
1154 p->num_iconUnits, "iconUnits", argi);
1155 return ir_match_end (name, iea, argi);
1158 static int ir_ContactInfo (IrExpArg *iea,
1159 Z_ContactInfo *p, const char *name, int argi)
1161 if (!ir_match_start (name, p, iea, ++argi))
1163 ir_InternationalString (iea, p->name, "name", argi);
1164 ir_HumanString (iea, p->description, "description", argi);
1165 ir_HumanString (iea, p->address, "address", argi);
1166 ir_InternationalString (iea, p->email, "email", argi);
1167 ir_InternationalString (iea, p->phone, "phone", argi);
1168 return ir_match_end (name, iea, argi);
1171 static int ir_NetworkAddressIA (IrExpArg *iea,
1172 Z_NetworkAddressIA *p, const char *name, int argi)
1174 if (!ir_match_start (name, p, iea, ++argi))
1176 ir_InternationalString (iea, p->hostAddress, "hostAddress", argi);
1177 ir_integer (iea, p->port, "port", argi);
1178 return ir_match_end (name, iea, argi);
1181 static int ir_NetworkAddressOPA (IrExpArg *iea,
1182 Z_NetworkAddressOPA *p, const char *name, int argi)
1184 if (!ir_match_start (name, p, iea, ++argi))
1186 ir_InternationalString (iea, p->pSel, "pSel", argi);
1187 ir_InternationalString (iea, p->sSel, "sSel", argi);
1188 ir_InternationalString (iea, p->tSel, "tSel", argi);
1189 ir_InternationalString (iea, p->nSap, "nSap", argi);
1190 return ir_match_end (name, iea, argi);
1193 static int ir_NetworkAddressOther (IrExpArg *iea,
1194 Z_NetworkAddressOther *p, const char *name, int argi)
1196 if (!ir_match_start (name, p, iea, ++argi))
1198 ir_InternationalString (iea, p->type, "type", argi);
1199 ir_InternationalString (iea, p->address, "address", argi);
1200 return ir_match_end (name, iea, argi);
1203 static int ir_NetworkAddress (IrExpArg *iea,
1204 Z_NetworkAddress *p, const char *name, int argi)
1206 IrExpChoice arm [] = {
1207 { "iA", Z_NetworkAddress_iA, ir_NetworkAddressIA },
1208 { "oPA", Z_NetworkAddress_oPA, ir_NetworkAddressOPA },
1209 { "other", Z_NetworkAddress_other, ir_NetworkAddressOther },
1211 if (!ir_match_start (name, p, iea, ++argi))
1213 ir_choice (iea, arm, p->which, p->u.internetAddress, argi);
1214 return ir_match_end (name, iea, argi);
1217 static int ir_AccessInfo (IrExpArg *iea,
1218 Z_AccessInfo *p, const char *name, int argi)
1220 if (!ir_match_start (name, p, iea, ++argi))
1222 ir_sequence (ir_QueryTypeDetails, iea, p->queryTypesSupported,
1223 p->num_queryTypesSupported, "queryTypesSupported", argi);
1224 ir_sequence (ir_oid, iea, p->diagnosticsSets,
1225 p->num_diagnosticsSets, "diagnosticsSets", argi);
1226 ir_sequence (ir_oid, iea, p->attributeSetIds,
1227 p->num_attributeSetIds, "attributeSetIds", argi);
1228 ir_sequence (ir_oid, iea, p->schemas,
1229 p->num_schemas, "schemas", argi);
1230 ir_sequence (ir_oid, iea, p->recordSyntaxes,
1231 p->num_recordSyntaxes, "recordSyntaxes", argi);
1232 ir_sequence (ir_oid, iea, p->resourceChallenges,
1233 p->num_resourceChallenges, "resourceChallenges", argi);
1234 ir_AccessRestrictions (iea, p->restrictedAccess, "restrictedAccess", argi);
1235 ir_Costs (iea, p->costInfo, "costInfo", argi);
1236 ir_sequence (ir_oid, iea, p->variantSets,
1237 p->num_variantSets, "variantSets", argi);
1238 ir_sequence (ir_ElementSetName, iea, p->elementSetNames,
1239 p->num_elementSetNames, "elementSetNames", argi);
1240 ir_sequence (ir_InternationalString, iea, p->unitSystems,
1241 p->num_unitSystems, "unitSystems", argi);
1242 return ir_match_end (name, iea, argi);
1246 static int ir_QueryTypeDetails (IrExpArg *iea,
1247 Z_QueryTypeDetails *p, const char *name, int argi)
1249 static IrExpChoice arm[] = {
1250 { "private", Z_QueryTypeDetails_private,
1251 ir_PrivateCapabilities },
1252 { "rpn", Z_QueryTypeDetails_rpn,
1253 ir_RpnCapabilities },
1254 { "iso8777", Z_QueryTypeDetails_iso8777,
1255 ir_Iso8777Capabilities },
1256 { "z3958", Z_QueryTypeDetails_z3958,
1258 { "erpn", Z_QueryTypeDetails_erpn,
1259 ir_RpnCapabilities },
1260 { "rankedList", Z_QueryTypeDetails_rankedList,
1264 if (!ir_match_start (name, p, iea, ++argi))
1266 ir_choice (iea, arm, p->which, p->u.private, argi);
1267 return ir_match_end (name, iea, argi);
1270 static int ir_PrivateCapOperator (IrExpArg *iea,
1271 Z_PrivateCapOperator *p, const char *name, int argi)
1273 if (!ir_match_start (name, p, iea, ++argi))
1275 ir_InternationalString (iea, p->roperator, "operator", argi);
1276 ir_HumanString (iea, p->description, "description", argi);
1277 return ir_match_end (name, iea, argi);
1280 static int ir_PrivateCapabilities (IrExpArg *iea,
1281 Z_PrivateCapabilities *p, const char *name, int argi)
1283 if (!ir_match_start (name, p, iea, ++argi))
1286 ir_sequence (ir_PrivateCapOperator, iea, p->operators,
1287 p->num_operators, "operators", argi);
1288 ir_sequence (ir_SearchKey, iea, p->searchKeys,
1289 p->num_searchKeys, "searchKeys", argi);
1290 ir_sequence (ir_HumanString, iea, p->description,
1291 p->num_description, "description", argi);
1292 return ir_match_end (name, iea, argi);
1295 static int ir_RpnCapabilities (IrExpArg *iea,
1296 Z_RpnCapabilities *p, const char *name, int argi)
1298 if (!ir_match_start (name, p, iea, ++argi))
1300 ir_sequence (ir_integer, iea, p->operators,
1301 p->num_operators, "operators", argi);
1302 ir_bool (iea, p->resultSetAsOperandSupported,
1303 "resultSetAsOperandSupported", argi);
1304 ir_bool (iea, p->restrictionOperandSupported,
1305 "restrictionOperandSupported", argi);
1306 ir_ProximitySupport (iea, p->proximity, "proximity", argi);
1307 return ir_match_end (name, iea, argi);
1310 static int ir_Iso8777Capabilities (IrExpArg *iea,
1311 Z_Iso8777Capabilities *p, const char *name, int argi)
1313 if (!ir_match_start (name, p, iea, ++argi))
1315 ir_sequence (ir_SearchKey, iea, p->searchKeys,
1316 p->num_searchKeys, "searchKeys", argi);
1317 ir_HumanString (iea, p->restrictions, "restrictions", argi);
1318 return ir_match_end (name, iea, argi);
1321 static int ir_ProxSupportPrivate (IrExpArg *iea,
1322 Z_ProxSupportPrivate *p, const char *name, int argi)
1324 if (!ir_match_start (name, p, iea, ++argi))
1326 ir_integer (iea, p->unit, "unit", argi);
1327 ir_HumanString (iea, p->description, "description", argi);
1328 return ir_match_end (name, iea, argi);
1331 static int ir_ProxSupportUnit (IrExpArg *iea,
1332 Z_ProxSupportUnit *p, const char *name, int argi)
1334 static IrExpChoice arm [] = {
1335 { "known", Z_ProxSupportUnit_known, ir_integer },
1336 { "private", Z_ProxSupportUnit_private, ir_ProxSupportPrivate },
1338 if (!ir_match_start (name, p, iea, ++argi))
1340 ir_choice (iea, arm, p->which, p->u.private, argi);
1341 return ir_match_end (name, iea, argi);
1344 static int ir_ProximitySupport (IrExpArg *iea,
1345 Z_ProximitySupport *p, const char *name, int argi)
1347 if (!ir_match_start (name, p, iea, ++argi))
1349 ir_bool (iea, p->anySupport, "anySupport", argi);
1350 ir_sequence (ir_ProxSupportUnit, iea, p->unitsSupported,
1351 p->num_unitsSupported, "unitsSupported", argi);
1352 return ir_match_end (name, iea, argi);
1355 static int ir_SearchKey (IrExpArg *iea,
1356 Z_SearchKey *p, const char *name, int argi)
1358 if (!ir_match_start (name, p, iea, ++argi))
1360 ir_InternationalString (iea, p->searchKey, "searchKey", argi);
1361 ir_HumanString (iea, p->description, "description", argi);
1362 return ir_match_end (name, iea, argi);
1365 static int ir_AccessRestrictionsUnit (IrExpArg *iea,
1366 Z_AccessRestrictionsUnit *p, const char *name, int argi)
1368 static IrExpChoice arm[] = {
1369 { "any", Z_AccessRestrictions_any,
1371 { "search", Z_AccessRestrictions_search,
1373 { "present", Z_AccessRestrictions_present,
1375 { "specificElements", Z_AccessRestrictions_specific_elements,
1377 { "extendedServices", Z_AccessRestrictions_extended_services,
1379 { "byDatabase", Z_AccessRestrictions_by_database,
1383 if (!ir_match_start (name, p, iea, ++argi))
1385 ir_choice (iea, arm, *p->accessType, NULL, argi);
1386 ir_HumanString (iea, p->accessText, "accessText", argi);
1387 ir_sequence (ir_oid, iea, p->accessChallenges,
1388 p->num_accessChallenges, "accessChallenges", argi);
1389 return ir_match_end (name, iea, argi);
1392 static int ir_AccessRestrictions (IrExpArg *iea,
1393 Z_AccessRestrictions *p, const char *name, int argi)
1395 if (!ir_match_start (name, p, iea, ++argi))
1397 ir_sequence (ir_AccessRestrictionsUnit, iea, p->restrictions,
1398 p->num_restrictions, "restrictions", argi);
1399 return ir_match_end (name, iea, argi);
1402 static int ir_CostsOtherCharge (IrExpArg *iea,
1403 Z_CostsOtherCharge *p, const char *name, int argi)
1405 if (!ir_match_start (name, p, iea, ++argi))
1407 ir_HumanString (iea, p->forWhat, "forWhat", argi);
1408 ir_Charge (iea, p->charge, "charge", argi);
1409 return ir_match_end (name, iea, argi);
1412 static int ir_Costs (IrExpArg *iea,
1413 Z_Costs *p, const char *name, int argi)
1415 if (!ir_match_start (name, p, iea, ++argi))
1417 ir_Charge (iea, p->connectCharge, "connectCharge", argi);
1418 ir_Charge (iea, p->connectTime, "connectTime", argi);
1419 ir_Charge (iea, p->displayCharge, "displayCharge", argi);
1420 ir_Charge (iea, p->searchCharge, "searchCharge", argi);
1421 ir_Charge (iea, p->subscriptCharge, "subscriptCharge", argi);
1423 ir_sequence (ir_CostsOtherCharge, iea, p->otherCharges,
1424 p->num_otherCharges, "otherCharges", argi);
1425 return ir_match_end (name, iea, argi);
1428 static int ir_Charge (IrExpArg *iea,
1429 Z_Charge *p, const char *name, int argi)
1431 if (!ir_match_start (name, p, iea, ++argi))
1433 ir_IntUnit (iea, p->cost, "cost", argi);
1434 ir_Unit (iea, p->perWhat, "perWhat", argi);
1435 ir_HumanString (iea, p->text, "text", argi);
1436 return ir_match_end (name, iea, argi);
1439 static int ir_DatabaseList (IrExpArg *iea,
1440 Z_DatabaseList *p, const char *name, int argi)
1442 if (!ir_match_start (name, p, iea, ++argi))
1444 ir_sequence (ir_DatabaseName, iea, p->databases,
1445 p->num_databases, "databases", argi);
1446 return ir_match_end (name, iea, argi);
1449 static int ir_AttributeCombinations (IrExpArg *iea,
1450 Z_AttributeCombinations *p, const char *name, int argi)
1452 if (!ir_match_start (name, p, iea, ++argi))
1454 ir_oid (iea, p->defaultAttributeSet, "defaultAttributeSet", argi);
1455 ir_sequence (ir_AttributeCombination, iea, p->legalCombinations,
1456 p->num_legalCombinations, "legalCombinations", argi);
1457 return ir_match_end (name, iea, argi);
1460 static int ir_AttributeCombination (IrExpArg *iea,
1461 Z_AttributeCombination *p, const char *name, int argi)
1463 if (!ir_match_start (name, p, iea, ++argi))
1465 ir_sequence (ir_AttributeOccurrence, iea, p->occurrences,
1466 p->num_occurrences, "occurrences", argi);
1467 return ir_match_end (name, iea, argi);
1470 static int ir_AttributeValueList (IrExpArg *iea,
1471 Z_AttributeValueList *p, const char *name, int argi)
1473 if (!ir_match_start (name, p, iea, ++argi))
1475 ir_sequence (ir_StringOrNumeric, iea, p->attributes,
1476 p->num_attributes, "attributes", argi);
1477 return ir_match_end (name, iea, argi);
1480 static int ir_AttributeOccurrence (IrExpArg *iea,
1481 Z_AttributeOccurrence *p, const char *name, int argi)
1483 static IrExpChoice arm [] = {
1484 { "anyOrNone", Z_AttributeOcc_anyOrNone, ir_null },
1485 { "specific", Z_AttributeOcc_specific, ir_AttributeValueList },
1486 { NULL, 0, NULL } };
1487 if (!ir_match_start (name, p, iea, ++argi))
1489 ir_oid (iea, p->attributeSet, "attributeSet", argi);
1490 ir_integer (iea, p->attributeType, "attributeType", argi);
1491 ir_null (iea, p->mustBeSupplied, "mustBeSupplied", argi);
1492 ir_choice (iea, arm, p->which, p->attributeValues->anyOrNone, argi);
1493 return ir_match_end (name, iea, argi);
1496 static int ir_AttributeValue (IrExpArg *iea,
1497 Z_AttributeValue *p, const char *name, int argi)
1499 if (!ir_match_start (name, p, iea, ++argi))
1501 ir_StringOrNumeric (iea, p->value, "value", argi);
1502 ir_HumanString (iea, p->description, "description", argi);
1503 ir_sequence (ir_StringOrNumeric, iea, p->subAttributes,
1504 p->num_subAttributes, "subAttributes", argi);
1505 ir_sequence (ir_StringOrNumeric, iea, p->superAttributes,
1506 p->num_superAttributes, "superAttributes", argi);
1507 ir_null (iea, p->partialSupport, "partialSupport", argi);
1508 return ir_match_end (name, iea, argi);
1511 static int ir_StringOrNumeric (IrExpArg *iea,
1512 Z_StringOrNumeric *p, const char *name, int argi)
1514 IrExpChoice arm[] = {
1515 { "string", Z_StringOrNumeric_string, ir_InternationalString },
1516 { "numeric", Z_StringOrNumeric_numeric, ir_integer },
1518 if (!ir_match_start (name, p, iea, ++argi))
1520 ir_choice (iea, arm, p->which, p->u.string, argi);
1521 return ir_match_end (name, iea, argi);
1524 static int ir_ElementSpec (IrExpArg *iea,
1525 Z_ElementSpec *p, const char *name, int argi)
1527 static IrExpChoice arm[] = {
1528 { "elementSetName", Z_ElementSpec_elementSetName,
1529 ir_InternationalString },
1530 { "externalSpec", Z_ElementSpec_externalSpec,
1534 if (!ir_match_start (name, p, iea, ++argi))
1536 ir_choice (iea, arm, p->which, p->u.elementSetName, argi);
1537 return ir_match_end (name, iea, argi);
1540 static int ir_Specification (IrExpArg *iea,
1541 Z_Specification *p, const char *name, int argi)
1543 if (!ir_match_start (name, p, iea, ++argi))
1545 ir_oid (iea, p->schema, "schema", argi);
1546 ir_ElementSpec (iea, p->elementSpec, "elementSpec", argi);
1547 return ir_match_end (name, iea, argi);
1550 static int ir_InfoCategory (IrExpArg *iea,
1551 Z_InfoCategory *p, const char *name, int argi)
1553 if (!ir_match_start (name, p, iea, ++argi))
1555 ir_oid (iea, p->categoryTypeId, "categoryTypeId", argi);
1556 ir_integer (iea, p->categoryValue, "categoryValue", argi);
1557 return ir_match_end (name, iea, argi);
1560 static int ir_OtherInformationUnit (IrExpArg *iea,
1561 Z_OtherInformationUnit *p, const char *name, int argi)
1563 static IrExpChoice arm[] = {
1564 { "characterInfo", Z_OtherInfo_characterInfo,
1565 ir_InternationalString },
1566 { "binaryInfo", Z_OtherInfo_binaryInfo,
1568 { "externallyDefinedInfo", Z_OtherInfo_externallyDefinedInfo,
1570 { "oid", Z_OtherInfo_oid,
1574 if (!ir_match_start (name, p, iea, ++argi))
1576 ir_InfoCategory (iea, p->category, "category", argi);
1577 ir_choice (iea, arm, p->which, p->information.characterInfo, argi);
1578 return ir_match_end (name, iea, argi);
1581 static int ir_OtherInformation (IrExpArg *iea,
1582 Z_OtherInformation *p, const char *name, int argi)
1584 if (!ir_match_start (name, p, iea, ++argi))
1586 ir_sequence (ir_OtherInformationUnit, iea, p->list,
1587 p->num_elements, "list", argi);
1588 return ir_match_end (name, iea, argi);
1591 static int ir_IntUnit (IrExpArg *iea,
1592 Z_IntUnit *p, const char *name, int argi)
1594 if (!ir_match_start (name, p, iea, ++argi))
1596 ir_integer (iea, p->value, "value", argi);
1597 ir_Unit (iea, p->unitUsed, "unitUsed", argi);
1598 return ir_match_end (name, iea, argi);
1601 static int ir_Unit (IrExpArg *iea,
1602 Z_Unit *p, const char *name, int argi)
1604 if (!ir_match_start (name, p, iea, ++argi))
1606 ir_InternationalString (iea, p->unitSystem, "unitSystem", argi);
1607 ir_StringOrNumeric (iea, p->unitType, "unitType", argi);
1608 ir_StringOrNumeric (iea, p->unit, "unit", argi);
1609 ir_integer (iea, p->scaleFactor, "scaleFactor", argi);
1610 return ir_match_end (name, iea, argi);
1613 int ir_ExplainRecord (IrExpArg *iea, Z_ExplainRecord *p, int argi)
1615 static IrExpChoice arm[] = {
1616 {"targetInfo", Z_Explain_targetInfo,
1618 {"databaseInfo", Z_Explain_databaseInfo,
1620 {"schemaInfo", Z_Explain_schemaInfo,
1622 {"tagSetInfo", Z_Explain_tagSetInfo,
1624 {"recordSyntaxInfo", Z_Explain_recordSyntaxInfo,
1625 ir_RecordSyntaxInfo},
1626 {"attributeSetInfo", Z_Explain_attributeSetInfo,
1627 ir_AttributeSetInfo},
1628 {"termListInfo", Z_Explain_termListInfo,
1630 {"extendedServicesInfo", Z_Explain_extendedServicesInfo,
1631 ir_ExtendedServicesInfo},
1632 {"attributeDetails", Z_Explain_attributeDetails,
1633 ir_AttributeDetails},
1634 {"termListDetails", Z_Explain_termListDetails,
1635 ir_TermListDetails},
1636 {"elementSetDetails", Z_Explain_elementSetDetails,
1637 ir_ElementSetDetails},
1638 {"retrievalRecordDetails", Z_Explain_retrievalRecordDetails,
1639 ir_RetrievalRecordDetails},
1640 {"sortDetails", Z_Explain_sortDetails,
1642 {"processing", Z_Explain_processing,
1643 ir_ProcessingInformation},
1644 {"variants", Z_Explain_variants,
1646 {"units", Z_Explain_units,
1648 {"categoryList", Z_Explain_categoryList,
1653 return ir_choice (iea, arm, p->which, p->u.targetInfo, argi);
1656 int ir_tcl_get_explain (Tcl_Interp *interp, Z_ExplainRecord *rec,
1657 int argc, char **argv)
1663 iea.interp = interp;
1665 return ir_ExplainRecord (&iea, rec, 2);