2 * IR toolkit for tcl/tk
4 * See the file LICENSE for details.
5 * Sebastian Hammer, Adam Dickmeiss
8 * Revision 1.4 1996-08-22 13:39:31 adam
9 * More work on explain.
11 * Revision 1.3 1996/08/21 13:32:50 adam
12 * Implemented saveFile method and extended loadFile method to work with it.
14 * Revision 1.2 1996/08/20 09:27:48 adam
15 * More work on explain.
16 * Renamed tkinit.c to tkmain.c. The tcl shell uses the Tcl 7.5 interface
17 * for socket i/o instead of the handcrafted one (for Tcl 7.3 and Tcl7.4).
19 * Revision 1.1 1996/08/16 15:07:43 adam
20 * First work on Explain.
43 typedef char *Z_ElementSetName;
44 typedef Odr_oid *Z_AttributeSetId;
45 typedef char *Z_InternationalString;
46 typedef char *Z_LanguageCode;
48 static int ir_UnitType (IrExpArg *iea,
49 Z_UnitType *p, const char *name, int argi);
50 static int ir_Unit (IrExpArg *iea,
51 Z_Unit *p, const char *name, int argi);
52 static int ir_VariantType (IrExpArg *iea,
53 Z_VariantType *p, const char *name, int argi);
54 static int ir_OmittedAttributeInterpretation (IrExpArg *iea,
55 Z_OmittedAttributeInterpretation *p, const char *name, int argi);
56 static int ir_AttributeTypeDetails (IrExpArg *iea,
57 Z_AttributeTypeDetails *p, const char *name, int argi);
58 static int ir_Specification (IrExpArg *iea,
59 Z_Specification *p, const char *name, int argi);
60 static int ir_RetrievalRecordDetails (IrExpArg *iea,
61 Z_RetrievalRecordDetails *p, const char *name, int argi);
62 static int ir_ElementInfo (IrExpArg *iea,
63 Z_ElementInfo *p, const char *name, int argi);
64 static int ir_InternationalString (IrExpArg *iea,
65 char *p, const char *name, int argi);
66 static int ir_TagSetInfo (IrExpArg *iea,
67 Z_TagSetInfo *p, const char *name, int argi);
68 static int ir_DatabaseName (IrExpArg *iea,
69 char *p, const char *name, int argi);
70 static int ir_AccessInfo (IrExpArg *iea,
71 Z_AccessInfo *p, const char *name, int argi);
72 static int ir_bool (IrExpArg *iea,
73 bool_t *p, const char *name, int argi);
74 static int ir_LanguageCode (IrExpArg *iea,
75 char *p, const char *name, int argi);
76 static int ir_Units (IrExpArg *iea,
77 Z_Units *p, const char *name, int argi);
78 static int ir_SortDetails (IrExpArg *iea,
79 Z_SortDetails *p, const char *name, int argi);
80 static int ir_ElementSetDetails (IrExpArg *iea,
81 Z_ElementSetDetails *p, const char *name, int argi);
82 static int ir_TermListDetails (IrExpArg *iea,
83 Z_TermListDetails *p, const char *name, int argi);
84 static int ir_AttributeValue (IrExpArg *iea,
85 Z_AttributeValue *p, const char *name, int argi);
86 static int ir_ElementDataType (IrExpArg *iea,
87 Z_ElementDataType *p, const char *name, int argi);
88 static int ir_ProximitySupport (IrExpArg *iea,
89 Z_ProximitySupport *p, const char *name, int argi);
90 static int ir_ProcessingInformation (IrExpArg *iea,
91 Z_ProcessingInformation *p, const char *name, int argi);
92 static int ir_AttributeCombinations (IrExpArg *iea,
93 Z_AttributeCombinations *p, const char *name, int argi);
94 static int ir_AttributeSetDetails (IrExpArg *iea,
95 Z_AttributeSetDetails *p, const char *name, int argi);
96 static int ir_DatabaseInfo (IrExpArg *iea,
97 Z_DatabaseInfo *p, const char *name, int argi);
98 static int ir_IconObject (IrExpArg *iea,
99 Z_IconObject *p, const char *name, int argi);
100 static int ir_RpnCapabilities (IrExpArg *iea,
101 Z_RpnCapabilities *p, const char *name, int argi);
102 static int ir_QueryTypeDetails (IrExpArg *iea,
103 Z_QueryTypeDetails *p, const char *name, int argi);
104 static int ir_ValueDescription (IrExpArg *iea,
105 Z_ValueDescription *p, const char *name, int argi);
106 static int ir_AttributeSetInfo (IrExpArg *iea,
107 Z_AttributeSetInfo *p, const char *name, int argi);
108 static int ir_SchemaInfo (IrExpArg *iea,
109 Z_SchemaInfo *p, const char *name, int argi);
110 static int ir_AttributeOccurrence (IrExpArg *iea,
111 Z_AttributeOccurrence *p, const char *name, int argi);
112 static int ir_AttributeCombination (IrExpArg *iea,
113 Z_AttributeCombination *p, const char *name, int argi);
114 static int ir_UnitInfo (IrExpArg *iea,
115 Z_UnitInfo *p, const char *name, int argi);
116 static int ir_VariantClass (IrExpArg *iea,
117 Z_VariantClass *p, const char *name, int argi);
118 static int ir_VariantSetInfo (IrExpArg *iea,
119 Z_VariantSetInfo *p, const char *name, int argi);
120 static int ir_RecordTag (IrExpArg *iea,
121 Z_RecordTag *p, const char *name, int argi);
122 static int ir_TermListInfo (IrExpArg *iea,
123 Z_TermListInfo *p, const char *name, int argi);
124 static int ir_StringOrNumeric (IrExpArg *iea,
125 Z_StringOrNumeric *p, const char *name, int argi);
126 static int ir_CategoryInfo (IrExpArg *iea,
127 Z_CategoryInfo *p, const char *name, int argi);
128 static int ir_ValueRange (IrExpArg *iea,
129 Z_ValueRange *p, const char *name, int argi);
130 static int ir_Term (IrExpArg *iea,
131 Z_Term *p, const char *name, int argi);
132 static int ir_DatabaseList (IrExpArg *iea,
133 Z_DatabaseList *p, const char *name, int argi);
134 static int ir_HumanString (IrExpArg *iea,
135 Z_HumanString *p, const char *name, int argi);
136 static int ir_CommonInfo (IrExpArg *iea,
137 Z_CommonInfo *p, const char *name, int argi);
138 static int ir_NetworkAddress (IrExpArg *iea,
139 Z_NetworkAddress *p, const char *name, int argi);
140 static int ir_Costs (IrExpArg *iea,
141 Z_Costs *p, const char *name, int argi);
142 static int ir_RecordSyntaxInfo (IrExpArg *iea,
143 Z_RecordSyntaxInfo *p, const char *name, int argi);
144 static int ir_OtherInformation (IrExpArg *iea,
145 Z_OtherInformation *p, const char *name, int argi);
146 static int ir_CategoryList (IrExpArg *iea,
147 Z_CategoryList *p, const char *name, int argi);
148 static int ir_VariantValue (IrExpArg *iea,
149 Z_VariantValue *p, const char *name, int argi);
150 static int ir_PerElementDetails (IrExpArg *iea,
151 Z_PerElementDetails *p, const char *name, int argi);
152 static int ir_AttributeDetails (IrExpArg *iea,
153 Z_AttributeDetails *p, const char *name, int argi);
154 static int ir_ExtendedServicesInfo (IrExpArg *iea,
155 Z_ExtendedServicesInfo *p, const char *name, int argi);
156 static int ir_AttributeType (IrExpArg *iea,
157 Z_AttributeType *p, const char *name, int argi);
158 static int ir_IntUnit (IrExpArg *iea,
159 Z_IntUnit *p, const char *name, int argi);
160 static int ir_Charge (IrExpArg *iea,
161 Z_Charge *p, const char *name, int argi);
162 static int ir_PrivateCapabilities (IrExpArg *iea,
163 Z_PrivateCapabilities *p, const char *name, int argi);
164 static int ir_ValueSet (IrExpArg *iea,
165 Z_ValueSet *p, const char *name, int argi);
166 static int ir_AttributeDescription (IrExpArg *iea,
167 Z_AttributeDescription *p, const char *name, int argi);
168 static int ir_Path (IrExpArg *iea,
169 Z_Path *p, const char *name, int argi);
170 static int ir_ContactInfo (IrExpArg *iea,
171 Z_ContactInfo *p, const char *name, int argi);
172 static int ir_SearchKey (IrExpArg *iea,
173 Z_SearchKey *p, const char *name, int argi);
174 static int ir_Iso8777Capabilities (IrExpArg *iea,
175 Z_Iso8777Capabilities *p, const char *name, int argi);
176 static int ir_AccessRestrictions (IrExpArg *iea,
177 Z_AccessRestrictions *p, const char *name, int argi);
178 static int ir_SortKeyDetails (IrExpArg *iea,
179 Z_SortKeyDetails *p, const char *name, int argi);
183 ir_match_start (const char *name, void *p, IrExpArg *iea, int argi)
187 if (argi >= iea->argc)
188 Tcl_AppendResult (iea->interp, name, " ", NULL);
191 if (argi < iea->argc)
193 if (strcmp (name, iea->argv[argi]))
197 Tcl_AppendResult (iea->interp, "{", name, " ", NULL);
202 ir_match_end (const char *name, IrExpArg *iea, int argi)
204 if (argi >= iea->argc)
205 Tcl_AppendResult (iea->interp, "} ", NULL);
210 ir_choice (IrExpArg *iea, IrExpChoice *clist, int *what, void *p,
217 if (clist->id == *what)
218 return (*clist->handle)(iea, p, clist->name, argi);
222 if (argi >= iea->argc)
223 Tcl_AppendResult (iea->interp, "{} ", NULL);
227 static int ir_null (IrExpArg *iea,
228 Odr_null *p, const char *name, int argi)
230 if (!ir_match_start (name, p, iea, ++argi))
232 Tcl_AppendResult (iea->interp, "1 ", NULL);
233 return ir_match_end (name, iea, argi);
236 static int ir_CString (IrExpArg *iea,
237 char *p, const char *name, int argi)
239 if (!ir_match_start (name, p, iea, ++argi))
241 Tcl_AppendElement (iea->interp, p);
242 return ir_match_end (name, iea, argi);
245 static int ir_ElementSetName (IrExpArg *iea,
246 char *p, const char *name, int argi)
248 return ir_CString (iea, p, name, argi);
251 static int ir_DatabaseName (IrExpArg *iea,
252 char *p, const char *name, int argi)
254 return ir_CString (iea, p, name, argi);
257 static int ir_InternationalString (IrExpArg *iea,
258 char *p, const char *name, int argi)
260 return ir_CString (iea, p, name, argi);
263 static int ir_GeneralizedTime (IrExpArg *iea,
264 char *p, const char *name, int argi)
266 return ir_CString (iea, p, name, argi);
269 static int ir_oid (IrExpArg *iea,
270 Odr_oid *p, const char *name, int argi)
273 if (!ir_match_start (name, p, iea, ++argi))
279 sprintf (buf, "%c%d", first, *p);
280 Tcl_AppendResult (iea->interp, buf, NULL);
283 return ir_match_end (name, iea, argi);
286 static int ir_TagTypeMapping (IrExpArg *iea,
287 Z_TagTypeMapping **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_PrimitiveDataType (IrExpArg *iea,
296 int *p, const char *name, int argi)
298 if (!ir_match_start (name, p, iea, ++argi))
301 return ir_match_end (name, iea, argi);
304 static int ir_octet (IrExpArg *iea,
305 Odr_oct *p, const char *name, int argi)
307 if (!ir_match_start (name, p, iea, ++argi))
310 return ir_match_end (name, iea, argi);
313 static int ir_choice_nop (IrExpArg *iea,
314 void *p, const char *name, int argi)
316 if (argi >= iea->argc)
317 Tcl_AppendResult (iea->interp, name, " ", NULL);
321 static int ir_bool (IrExpArg *iea,
322 bool_t *p, const char *name, int argi)
324 if (!ir_match_start (name, p, iea, ++argi))
326 Tcl_AppendResult (iea->interp, *p ? "1" : "0", NULL);
327 return ir_match_end (name, iea, argi);
330 static int ir_integer (IrExpArg *iea,
331 int *p, const char *name, int argi)
334 if (!ir_match_start (name, p, iea, ++argi))
336 sprintf (buf, "%d", *p);
337 Tcl_AppendResult (iea->interp, buf, NULL);
338 return ir_match_end (name, iea, argi);
341 static int ir_LanguageCode (IrExpArg *iea,
342 char *p, const char *name, int argi)
344 return ir_CString (iea, p, name, argi);
347 static int ir_External (IrExpArg *iea,
348 Z_External *p, const char *name, int argi)
350 if (!ir_match_start (name, p, iea, ++argi))
353 return ir_match_end (name, iea, argi);
356 static int ir_sequence (int (*fh)(), IrExpArg *iea, void *p, int *num,
357 const char *name, int argi)
359 void **pp = (void **) p;
362 if (!ir_match_start (name, p, iea, ++argi))
364 for (i = 0; i < *num; i++)
365 (*fh)(iea, pp[i], "", argi);
366 return ir_match_end (name, iea, argi);
369 static int ir_Term (IrExpArg *iea,
370 Z_Term *p, const char *name, int argi)
372 static IrExpChoice arm [] = {
373 { "general", Z_Term_general,
375 { "numeric", Z_Term_numeric,
377 { "characterString", Z_Term_characterString,
378 ir_InternationalString },
381 { "dateTime", Z_Term_dateTime,
382 ir_GeneralizedTime },
383 { "external", Z_Term_external,
385 { "null", Z_Term_null,
389 if (!ir_match_start (name, p, iea, ++argi))
392 ir_choice (iea, arm, &p->which, p->u.general, argi);
393 return ir_match_end (name, iea, argi);
396 static int ir_TargetInfo (IrExpArg *iea,
397 Z_TargetInfo *p, const char *name, int argi)
399 if (!ir_match_start (name, p, iea, ++argi))
401 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
402 ir_InternationalString (iea, p->name, "name", argi);
403 ir_HumanString (iea, p->recentNews, "recentNews", argi);
404 ir_IconObject (iea, p->icon, "icon", argi);
405 ir_bool (iea, p->namedResultSets, "namedResultSets", argi);
406 ir_bool (iea, p->multipleDBsearch, "multipleDBsearch", argi);
407 ir_integer (iea, p->maxResultSets, "maxResultSets", argi);
408 ir_integer (iea, p->maxResultSize, "maxResultSize", argi);
409 ir_integer (iea, p->maxTerms, "maxTerms", argi);
410 ir_IntUnit (iea, p->timeoutInterval, "timeoutInterval", argi);
411 ir_HumanString (iea, p->welcomeMessage, "welcomeMessage", argi);
412 ir_ContactInfo (iea, p->contactInfo, "contactInfo", argi);
413 ir_HumanString (iea, p->description, "description", argi);
414 ir_sequence (ir_InternationalString, iea, p->nicknames,
415 &p->num_nicknames, "nicknames", argi);
416 ir_HumanString (iea, p->usageRest, "usageRest", argi);
417 ir_HumanString (iea, p->paymentAddr, "paymentAddr", argi);
418 ir_HumanString (iea, p->hours, "hours", argi);
419 ir_sequence (ir_DatabaseList, iea, p->dbCombinations,
420 &p->num_dbCombinations, "dbCombinations", argi);
421 ir_sequence (ir_NetworkAddress, iea, p->addresses,
422 &p->num_addresses, "addresses", argi);
423 ir_AccessInfo (iea, p->commonAccessInfo, "commonAccessInfo", argi);
424 return ir_match_end (name, iea, argi);
427 static int ir_DatabaseInfo (IrExpArg *iea,
428 Z_DatabaseInfo *p, const char *name, int argi)
430 static IrExpChoice arm_recordCount [] = {
431 { "actualNumber", Z_Exp_RecordCount_actualNumber,
433 { "approxNumber", Z_Exp_RecordCount_approxNumber,
437 if (!ir_match_start (name, p, iea, ++argi))
440 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
441 ir_DatabaseName (iea, p->name, "name", argi);
442 ir_null (iea, p->explainDatabase, "explainDatabase", argi);
443 ir_sequence (ir_DatabaseName, iea, p->nicknames,
444 &p->num_nicknames, "nicknames", argi);
445 ir_IconObject (iea, p->icon, "icon", argi);
446 ir_bool (iea, p->userFee, "userFee", argi);
447 ir_bool (iea, p->available, "available", argi);
448 ir_HumanString (iea, p->titleString, "titleString", argi);
449 ir_sequence (ir_HumanString, iea, p->keywords,
450 &p->num_keywords, "keywords", argi);
451 ir_HumanString (iea, p->description, "description", argi);
452 ir_DatabaseList (iea, p->associatedDbs, "associatedDbs", argi);
453 ir_DatabaseList (iea, p->subDbs, "subDbs", argi);
454 ir_HumanString (iea, p->disclaimers, "disclaimers", argi);
455 ir_HumanString (iea, p->news, "news", argi);
457 ir_choice (iea, arm_recordCount, &p->recordCount_which,
458 p->recordCount, argi);
460 ir_HumanString (iea, p->defaultOrder, "defaultOrder", argi);
461 ir_integer (iea, p->avRecordSize, "avRecordSize", argi);
462 ir_integer (iea, p->maxRecordSize, "maxRecordSize", argi);
463 ir_HumanString (iea, p->hours, "hours", argi);
464 ir_HumanString (iea, p->bestTime, "bestTime", argi);
465 ir_GeneralizedTime (iea, p->lastUpdate, "lastUpdate", argi);
466 ir_IntUnit (iea, p->updateInterval, "updateInterval", argi);
467 ir_HumanString (iea, p->coverage, "coverage", argi);
468 ir_bool (iea, p->proprietary, "proprietary", argi);
469 ir_HumanString (iea, p->copyrightText, "copyrightText", argi);
470 ir_HumanString (iea, p->copyrightNotice, "copyrightNotice", argi);
471 ir_ContactInfo (iea, p->producerContactInfo, "producerContactInfo", argi);
472 ir_ContactInfo (iea, p->supplierContactInfo, "supplierContactInfo", argi);
473 ir_ContactInfo (iea, p->submissionContactInfo, "submissionContactInfo", argi);
474 ir_AccessInfo (iea, p->accessInfo, "accessInfo", argi);
475 return ir_match_end (name, iea, argi);
478 static int ir_SchemaInfo (IrExpArg *iea,
479 Z_SchemaInfo *p, const char *name, int argi)
481 if (!ir_match_start (name, p, iea, ++argi))
483 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
484 ir_oid (iea, p->schema, "schema", argi);
485 ir_InternationalString (iea, p->name, "name", argi);
486 ir_HumanString (iea, p->description, "description", argi);
488 ir_sequence (ir_TagTypeMapping, iea, p->tagTypeMapping,
489 &p->num_tagTypeMapping, "tagTypeMapping", argi);
490 ir_sequence (ir_ElementInfo, iea, p->recordStructure,
491 &p->num_recordStructure, "recordStructure", argi);
492 return ir_match_end (name, iea, argi);
495 static int ir_ElementDataTypePrimitive (IrExpArg *iea,
496 int *p, const char *name, int argi)
498 static IrExpChoice arm[] = {
499 {"octetString", Z_PrimitiveElement_octetString, ir_choice_nop },
500 {"numeric", Z_PrimitiveElement_numeric, ir_choice_nop },
503 if (!ir_match_start (name, p, iea, ++argi))
505 ir_choice (iea, arm, p, ODR_NULLVAL, argi);
506 return ir_match_end (name, iea, argi);
509 static int ir_ElementInfo (IrExpArg *iea,
510 Z_ElementInfo *p, const char *name, int argi)
512 if (!ir_match_start (name, p, iea, ++argi))
514 ir_InternationalString (iea, p->elementName, "elementName", argi);
515 ir_Path (iea, p->elementTagPath, "elementTagPath", argi);
516 ir_ElementDataType (iea, p->dataType, "dataType", argi);
517 ir_bool (iea, p->required, "required", argi);
518 ir_bool (iea, p->repeatable, "repeatable", argi);
519 ir_HumanString (iea, p->description, "description", argi);
520 return ir_match_end (name, iea, argi);
523 static int ir_ElementInfoList (IrExpArg *iea,
524 Z_ElementInfoList *p, const char *name, int argi)
526 if (!ir_match_start (name, p, iea, ++argi))
528 ir_sequence (ir_ElementInfo, iea, p->list,
529 &p->num, "list", argi);
530 return ir_match_end (name, iea, argi);
533 static int ir_ElementDataType (IrExpArg *iea,
534 Z_ElementDataType *p, const char *name, int argi)
536 static IrExpChoice arm[] = {
537 { "primitive", Z_ElementDataType_primitive,
538 ir_ElementDataTypePrimitive },
539 { "structured", Z_ElementDataType_structured,
540 ir_ElementInfoList },
542 if (!ir_match_start (name, p, iea, ++argi))
544 ir_choice (iea, arm, &p->which, p->u.primitive, argi);
545 return ir_match_end (name, iea, argi);
548 static int ir_PathUnit (IrExpArg *iea,
549 Z_PathUnit *p, const char *name, int argi)
551 if (!ir_match_start (name, p, iea, ++argi))
553 ir_integer (iea, p->tagType, "tagType", argi);
554 ir_StringOrNumeric (iea, p->tagValue, "tagValue", argi);
555 return ir_match_end (name, iea, argi);
558 static int ir_Path (IrExpArg *iea,
559 Z_Path *p, const char *name, int argi)
561 if (!ir_match_start (name, p, iea, ++argi))
563 ir_sequence (ir_PathUnit, iea, p->list,
564 &p->num, "list", argi);
565 return ir_match_end (name, iea, argi);
568 static int ir_TagSetInfoElements (IrExpArg *iea,
569 Z_TagSetInfoElements *p, const char *name, int argi)
571 if (!ir_match_start (name, p, iea, ++argi))
573 ir_InternationalString (iea, p->elementName, "elementname", argi);
574 ir_sequence (ir_InternationalString, iea, p->nicknames,
575 &p->num_nicknames, "nicknames", argi);
576 ir_StringOrNumeric (iea, p->elementTag, "elementTag", argi);
577 ir_HumanString (iea, p->description, "description", argi);
578 ir_PrimitiveDataType (iea, p->dataType, "dataType", argi);
579 ir_OtherInformation (iea, p->otherTagInfo, "otherTagInfo", argi);
580 return ir_match_end (name, iea, argi);
583 static int ir_TagSetInfo (IrExpArg *iea,
584 Z_TagSetInfo *p, const char *name, int argi)
586 if (!ir_match_start (name, p, iea, ++argi))
588 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
589 ir_oid (iea, p->tagSet, "tagSet", argi);
590 ir_InternationalString (iea, p->name, "name", argi);
591 ir_HumanString (iea, p->description, "description", argi);
592 ir_sequence (ir_TagSetInfoElements, iea, p->elements,
593 &p->num_elements, "elements", argi);
594 return ir_match_end (name, iea, argi);
597 static int ir_RecordSyntaxInfo (IrExpArg *iea,
598 Z_RecordSyntaxInfo *p, const char *name, int argi)
600 if (!ir_match_start (name, p, iea, ++argi))
602 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
603 ir_oid (iea, p->recordSyntax, "recordSyntax", argi);
604 ir_InternationalString (iea, p->name, "name", argi);
605 ir_sequence (ir_oid, iea, p->transferSyntaxes,
606 &p->num_transferSyntaxes, "transferSyntaxes", argi);
607 ir_HumanString (iea, p->description, "description", argi);
608 ir_InternationalString (iea, p->asn1Module, "asn1Module", argi);
609 ir_sequence (ir_ElementInfo, iea, p->abstractStructure,
610 &p->num_abstractStructure, "abstractStructure", argi);
611 return ir_match_end (name, iea, argi);
614 static int ir_AttributeType (IrExpArg *iea,
615 Z_AttributeType *p, const char *name, int argi)
617 if (!ir_match_start (name, p, iea, ++argi))
619 ir_InternationalString (iea, p->name, "name", argi);
620 ir_HumanString (iea, p->description, "description", argi);
621 ir_integer (iea, p->attributeType, "attributeType", argi);
622 ir_sequence (ir_AttributeDescription, iea, p->attributeValues,
623 &p->num_attributeValues, "attributeValues", argi);
624 return ir_match_end (name, iea, argi);
627 static int ir_AttributeSetInfo (IrExpArg *iea,
628 Z_AttributeSetInfo *p, const char *name, int argi)
630 if (!ir_match_start (name, p, iea, ++argi))
632 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
633 ir_oid (iea, p->attributeSet, "attributeSet", argi);
634 ir_InternationalString (iea, p->name, "name", argi);
635 ir_sequence (ir_AttributeType, iea, p->attributes,
636 &p->num_attributes, "attributes", argi);
637 ir_HumanString (iea, p->description, "description", argi);
638 return ir_match_end (name, iea, argi);
641 static int ir_AttributeDescription (IrExpArg *iea,
642 Z_AttributeDescription *p, const char *name, int argi)
644 if (!ir_match_start (name, p, iea, ++argi))
646 ir_InternationalString (iea, p->name, "name", argi);
647 ir_HumanString (iea, p->description, "description", argi);
648 ir_StringOrNumeric (iea, p->attributeValue, "attributeValue", argi);
649 ir_sequence (ir_StringOrNumeric,iea, p->equivalentAttributes,
650 &p->num_equivalentAttributes, "equivalentAttributes", argi);
651 return ir_match_end (name, iea, argi);
654 static int ir_TermListElement (IrExpArg *iea,
655 Z_TermListElement *p, const char *name, int argi)
657 static IrExpChoice searchCostArm [] = {
658 { "optimized", Z_TermListInfo_optimized, ir_choice_nop },
659 { "normal", Z_TermListInfo_normal, ir_choice_nop },
660 { "expensive", Z_TermListInfo_expensive, ir_choice_nop },
661 { "filter", Z_TermListInfo_filter, ir_choice_nop },
663 ir_InternationalString (iea, p->name, "name", argi);
664 ir_HumanString (iea, p->title, "title", argi);
666 ir_choice (iea, searchCostArm, p->searchCost, ODR_NULLVAL, argi);
668 ir_bool (iea, p->scanable, "scanable", argi);
669 ir_sequence (ir_InternationalString, iea, p->broader,
670 &p->num_broader, "broader", argi);
671 ir_sequence (ir_InternationalString, iea, p->narrower,
672 &p->num_narrower, "narrower", argi);
673 return ir_match_end (name, iea, argi);
676 static int ir_TermListInfo (IrExpArg *iea,
677 Z_TermListInfo *p, const char *name, int argi)
679 if (!ir_match_start (name, p, iea, ++argi))
681 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
682 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
683 ir_sequence (ir_TermListElement, iea, p->termLists,
684 &p->num_termLists, "termLists", argi);
685 return ir_match_end (name, iea, argi);
688 static int ir_ExtendedServicesInfo (IrExpArg *iea,
689 Z_ExtendedServicesInfo *p, const char *name, int argi)
691 static IrExpChoice waitActionArm [] = {
692 { "waitSupported", Z_ExtendedServicesInfo_waitSupported,
694 { "waitAlways", Z_ExtendedServicesInfo_waitAlways,
696 { "waitNotSupported", Z_ExtendedServicesInfo_waitNotSupported,
698 { "depends", Z_ExtendedServicesInfo_depends,
700 { "notSaying", Z_ExtendedServicesInfo_notSaying,
704 ir_InternationalString (iea, p->name, "name", argi);
705 if (!ir_match_start (name, p, iea, ++argi))
707 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
708 ir_oid (iea, p->type, "type", argi);
709 ir_InternationalString (iea, p->name, "name", argi);
710 ir_bool (iea, p->privateType, "privateType", argi);
711 ir_bool (iea, p->restrictionsApply, "restrictionsApply", argi);
712 ir_bool (iea, p->feeApply, "feeApply", argi);
713 ir_bool (iea, p->available, "available", argi);
714 ir_bool (iea, p->retentionSupported, "retentionSupported", argi);
716 ir_choice (iea, waitActionArm, p->waitAction, ODR_NULLVAL, argi);
718 ir_HumanString (iea, p->description, "description", argi);
719 ir_External (iea, p->specificExplain, "specificExplain", argi);
720 ir_InternationalString (iea, p->esASN, "esASN", argi);
721 return ir_match_end (name, iea, argi);
724 static int ir_AttributeDetails (IrExpArg *iea,
725 Z_AttributeDetails *p, const char *name, int argi)
727 if (!ir_match_start (name, p, iea, ++argi))
729 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
730 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
731 ir_sequence (ir_AttributeSetDetails, iea, p->attributesBySet,
732 &p->num_attributesBySet, "attributesBySet", argi);
733 ir_AttributeCombinations (iea, p->attributeCombinations,
734 "attributeCombinations", argi);
735 return ir_match_end (name, iea, argi);
738 static int ir_AttributeSetDetails (IrExpArg *iea,
739 Z_AttributeSetDetails *p, const char *name, int argi)
741 if (!ir_match_start (name, p, iea, ++argi))
743 ir_oid (iea, p->attributeSet, "attributeSet", argi);
744 ir_sequence (ir_AttributeTypeDetails, iea, p->attributesByType,
745 &p->num_attributesByType, "attributesByType", argi);
746 return ir_match_end (name, iea, argi);
749 static int ir_AttributeTypeDetails (IrExpArg *iea,
750 Z_AttributeTypeDetails *p, const char *name, int argi)
752 if (!ir_match_start (name, p, iea, ++argi))
754 ir_integer (iea, p->attributeType, "attributeType", argi);
755 ir_OmittedAttributeInterpretation (iea, p->optionalType,
756 "optionalType", argi);
757 ir_sequence (ir_AttributeValue, iea, p->attributeValues,
758 &p->num_attributeValues, "attributeValues", argi);
759 return ir_match_end (name, iea, argi);
762 static int ir_OmittedAttributeInterpretation (IrExpArg *iea,
763 Z_OmittedAttributeInterpretation *p, const char *name, int argi)
765 if (!ir_match_start (name, p, iea, ++argi))
767 ir_StringOrNumeric (iea, p->defaultValue, "defaultValue", argi);
768 ir_HumanString (iea, p->defaultDescription, "defaultDescription", argi);
769 return ir_match_end (name, iea, argi);
772 static int ir_EScanInfo (IrExpArg *iea,
773 Z_EScanInfo *p, const char *name, int argi)
775 if (!ir_match_start (name, p, iea, ++argi))
777 ir_integer (iea, p->maxStepSize, "maxStepSize", argi);
778 ir_HumanString (iea, p->collatingSequence, "collatingSequence", argi);
779 ir_bool (iea, p->increasing, "increasing", argi);
780 return ir_match_end (name, iea, argi);
783 static int ir_TermListDetails (IrExpArg *iea,
784 Z_TermListDetails *p, const char *name, int argi)
786 if (!ir_match_start (name, p, iea, ++argi))
788 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
789 ir_InternationalString (iea, p->termListName, "termListName", argi);
790 ir_HumanString (iea, p->description, "description", argi);
791 ir_AttributeCombinations (iea, p->attributes, "attributes", argi);
793 ir_EScanInfo (iea, p->scanInfo, "scanInfo", argi);
795 ir_integer (iea, p->estNumberTerms, "estNumberTerms", argi);
796 ir_sequence (ir_Term, iea, p->sampleTerms,
797 &p->num_sampleTerms, "sampleTerms", argi);
798 return ir_match_end (name, iea, argi);
801 static int ir_ElementSetDetails (IrExpArg *iea,
802 Z_ElementSetDetails *p, const char *name, int argi)
804 if (!ir_match_start (name, p, iea, ++argi))
806 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
807 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
808 ir_ElementSetName (iea, p->elementSetName, "elementSetName", argi);
809 ir_oid (iea, p->recordSyntax, "recordSyntax", argi);
810 ir_oid (iea, p->schema, "schema", argi);
811 ir_HumanString (iea, p->description, "description", argi);
812 ir_sequence (ir_PerElementDetails, iea, p->detailsPerElement,
813 &p->num_detailsPerElement, "detailsPerElement", argi);
814 return ir_match_end (name, iea, argi);
817 static int ir_RetrievalRecordDetails (IrExpArg *iea,
818 Z_RetrievalRecordDetails *p, const char *name, int argi)
820 if (!ir_match_start (name, p, iea, ++argi))
822 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
823 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
824 ir_oid (iea, p->schema, "schema", argi);
825 ir_oid (iea, p->recordSyntax, "recordSyntax", argi);
826 ir_HumanString (iea, p->description, "description", argi);
827 ir_sequence (ir_PerElementDetails, iea, p->detailsPerElement,
828 &p->num_detailsPerElement, "detailsPerElement", argi);
829 return ir_match_end (name, iea, argi);
832 static int ir_PerElementDetails (IrExpArg *iea,
833 Z_PerElementDetails *p, const char *name, int argi)
835 if (!ir_match_start (name, p, iea, ++argi))
837 ir_InternationalString (iea, p->name, "name", argi);
838 ir_RecordTag (iea, p->recordTag, "recordTag", argi);
839 ir_sequence (ir_Path, iea, p->schemaTags,
840 &p->num_schemaTags, "schemaTags", argi);
841 ir_integer (iea, p->maxSize, "maxSize", argi);
842 ir_integer (iea, p->minSize, "minSize", argi);
843 ir_integer (iea, p->avgSize, "avgSize", argi);
844 ir_integer (iea, p->fixedSize, "fixedSize", argi);
845 ir_bool (iea, p->repeatable, "repeatable", argi);
846 ir_bool (iea, p->required, "required", argi);
847 ir_HumanString (iea, p->description, "description", argi);
848 ir_HumanString (iea, p->contents, "contents", argi);
849 ir_HumanString (iea, p->billingInfo, "billingInfo", argi);
850 ir_HumanString (iea, p->restrictions, "restrictions", argi);
851 ir_sequence (ir_InternationalString, iea, p->alternateNames,
852 &p->num_alternateNames, "alternateNames", argi);
853 ir_sequence (ir_InternationalString, iea, p->genericNames,
854 &p->num_genericNames, "genericNames", argi);
855 ir_AttributeCombinations (iea, p->searchAccess, "searchAccess", argi);
856 return ir_match_end (name, iea, argi);
859 static int ir_RecordTag (IrExpArg *iea,
860 Z_RecordTag *p, const char *name, int argi)
862 if (!ir_match_start (name, p, iea, ++argi))
864 ir_StringOrNumeric (iea, p->qualifier, "qualifier", argi);
865 ir_StringOrNumeric (iea, p->tagValue, "tagValue", argi);
866 return ir_match_end (name, iea, argi);
869 static int ir_SortDetails (IrExpArg *iea,
870 Z_SortDetails *p, const char *name, int argi)
872 if (!ir_match_start (name, p, iea, ++argi))
874 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
875 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
876 ir_sequence (ir_SortKeyDetails, iea, p->sortKeys,
877 &p->num_sortKeys, "sortKeys", argi);
878 return ir_match_end (name, iea, argi);
881 static int ir_SortKeyDetailsSortType (IrExpArg *iea,
882 Z_SortKeyDetailsSortType *p, const char *name, int argi)
884 static IrExpChoice sortArm [] = {
885 { "character", Z_SortKeyDetailsSortType_character,
887 { "numeric", Z_SortKeyDetailsSortType_numeric,
889 { "structured", Z_SortKeyDetailsSortType_structured,
892 return ir_choice (iea, sortArm, &p->which, p->u.character, argi);
895 static int ir_SortKeyDetails (IrExpArg *iea,
896 Z_SortKeyDetails *p, const char *name, int argi)
898 static IrExpChoice sortArm [] = {
899 { "always", Z_SortKeyDetails_always,
901 { "never", Z_SortKeyDetails_never,
903 { "defaultYes", Z_SortKeyDetails_defaultYes,
905 { "defaultNo", Z_SortKeyDetails_defaultNo,
909 if (!ir_match_start (name, p, iea, ++argi))
911 ir_HumanString (iea, p->description, "description", argi);
912 ir_sequence (ir_Specification, iea, p->elementSpecifications,
913 &p->num_elementSpecifications, "elementSpecifications", argi);
914 ir_AttributeCombinations (iea, p->attributeSpecifications,
915 "attributeSpecifications", argi);
916 ir_SortKeyDetailsSortType (iea, p->sortType, "sortType", argi);
918 if (p->caseSensitivity)
919 ir_choice (iea, sortArm, p->caseSensitivity, ODR_NULLVAL, argi);
921 return ir_match_end (name, iea, argi);
924 static int ir_ProcessingInformation (IrExpArg *iea,
925 Z_ProcessingInformation *p, const char *name, int argi)
927 IrExpChoice arm[] = {
928 { "access", Z_ProcessingInformation_access,
930 { "search", Z_ProcessingInformation_search,
932 { "retrieval", Z_ProcessingInformation_retrieval,
934 { "recordPresentation", Z_ProcessingInformation_recordPresentation,
936 { "recordHandling", Z_ProcessingInformation_recordHandling,
939 if (!ir_match_start (name, p, iea, ++argi))
941 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
942 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
944 ir_choice (iea, arm, p->processingContext, ODR_NULLVAL, argi);
945 ir_InternationalString (iea, p->name, "name", argi);
946 ir_oid (iea, p->oid, "oid", argi);
947 ir_HumanString (iea, p->description, "description", argi);
948 ir_External (iea, p->instructions, "instructions", argi);
949 return ir_match_end (name, iea, argi);
952 static int ir_VariantSetInfo (IrExpArg *iea,
953 Z_VariantSetInfo *p, const char *name, int argi)
955 if (!ir_match_start (name, p, iea, ++argi))
957 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
958 ir_oid (iea, p->variantSet, "variantSet", argi);
959 ir_InternationalString (iea, p->name, "name", argi);
960 ir_sequence (ir_VariantClass, iea, p->variants,
961 &p->num_variants, "variants", argi);
962 return ir_match_end (name, iea, argi);
965 static int ir_VariantClass (IrExpArg *iea,
966 Z_VariantClass *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->variantClass, "variantClass", argi);
973 ir_sequence (ir_VariantType, iea, p->variantTypes,
974 &p->num_variantTypes, "variantTypes", argi);
975 return ir_match_end (name, iea, argi);
978 static int ir_VariantType (IrExpArg *iea,
979 Z_VariantType *p, const char *name, int argi)
981 if (!ir_match_start (name, p, iea, ++argi))
983 ir_InternationalString (iea, p->name, "name", argi);
984 ir_HumanString (iea, p->description, "description", argi);
985 ir_integer (iea, p->variantType, "variantType", argi);
986 ir_VariantValue (iea, p->variantValue, "variantValue", argi);
987 return ir_match_end (name, iea, argi);
990 static int ir_ValueSetEnumerated (IrExpArg *iea,
991 Z_ValueSetEnumerated *p, const char *name, int argi)
993 if (!ir_match_start (name, p, iea, ++argi))
995 ir_sequence (ir_ValueDescription, iea, p->enumerated,
996 &p->num_enumerated, "enumerated", argi);
997 return ir_match_end (name, iea, argi);
1000 static int ir_ValueSet (IrExpArg *iea,
1001 Z_ValueSet *p, const char *name, int argi)
1003 IrExpChoice arm [] = {
1004 { "range", Z_ValueSet_range, ir_ValueRange },
1005 { "enumerated", Z_ValueSet_enumerated, ir_ValueSetEnumerated },
1007 if (!ir_match_start (name, p, iea, ++argi))
1009 ir_choice (iea, arm, &p->which, p->u.range, argi);
1010 return ir_match_end (name, iea, argi);
1013 static int ir_VariantValue (IrExpArg *iea,
1014 Z_VariantValue *p, const char *name, int argi)
1016 if (!ir_match_start (name, p, iea, ++argi))
1018 ir_PrimitiveDataType (iea, p->dataType, "dataType", argi);
1020 ir_ValueSet (iea, p->values, "values", argi);
1021 return ir_match_end (name, iea, argi);
1024 static int ir_ValueRange (IrExpArg *iea,
1025 Z_ValueRange *p, const char *name, int argi)
1027 if (!ir_match_start (name, p, iea, ++argi))
1029 ir_ValueDescription (iea, p->lower, "lower", argi);
1030 ir_ValueDescription (iea, p->upper, "upper", argi);
1031 return ir_match_end (name, iea, argi);
1034 static int ir_ValueDescription (IrExpArg *iea,
1035 Z_ValueDescription *p, const char *name, int argi)
1037 static IrExpChoice arm [] = {
1038 { "integer", Z_ValueDescription_integer, ir_integer },
1039 { "string", Z_ValueDescription_string, ir_InternationalString},
1040 { "octets", Z_ValueDescription_octets, ir_octet},
1041 { "oid", Z_ValueDescription_oid, ir_oid},
1042 { "unit", Z_ValueDescription_unit, ir_Unit},
1043 { "valueAndUnit", Z_ValueDescription_valueAndUnit, ir_IntUnit},
1046 if (!ir_match_start (name, p, iea, ++argi))
1048 ir_choice (iea, arm, &p->which, p->u.integer, argi);
1049 return ir_match_end (name, iea, argi);
1052 static int ir_UnitInfo (IrExpArg *iea,
1053 Z_UnitInfo *p, const char *name, int argi)
1055 if (!ir_match_start (name, p, iea, ++argi))
1057 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
1058 ir_InternationalString (iea, p->unitSystem, "unitSystem", argi);
1059 ir_HumanString (iea, p->description, "description", argi);
1060 ir_sequence (ir_UnitType, iea, p->units,
1061 &p->num_units, "units", argi);
1062 return ir_match_end (name, iea, argi);
1065 static int ir_UnitType (IrExpArg *iea,
1066 Z_UnitType *p, const char *name, int argi)
1068 if (!ir_match_start (name, p, iea, ++argi))
1070 ir_InternationalString (iea, p->name, "name", argi);
1071 ir_HumanString (iea, p->description, "description", argi);
1072 ir_StringOrNumeric (iea, p->unitType, "unitType", argi);
1073 ir_sequence (ir_Units, iea, p->units, &p->num_units, "units", argi);
1074 return ir_match_end (name, iea, argi);
1077 static int ir_Units (IrExpArg *iea,
1078 Z_Units *p, const char *name, int argi)
1080 if (!ir_match_start (name, p, iea, ++argi))
1082 ir_InternationalString (iea, p->name, "name", argi);
1083 ir_HumanString (iea, p->description, "description", argi);
1084 ir_StringOrNumeric (iea, p->unit, "unit", argi);
1085 return ir_match_end (name, iea, argi);
1088 static int ir_CategoryList (IrExpArg *iea,
1089 Z_CategoryList *p, const char *name, int argi)
1091 if (!ir_match_start (name, p, iea, ++argi))
1093 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
1094 ir_sequence (ir_CategoryInfo, iea, p->categories,
1095 &p->num_categories, "categories", argi);
1096 return ir_match_end (name, iea, argi);
1099 static int ir_CategoryInfo (IrExpArg *iea,
1100 Z_CategoryInfo *p, const char *name, int argi)
1102 if (!ir_match_start (name, p, iea, ++argi))
1104 ir_InternationalString (iea, p->category, "category", argi);
1105 ir_InternationalString (iea, p->originalCategory, "originalCategory", argi);
1106 ir_HumanString (iea, p->description, "description", argi);
1107 ir_InternationalString (iea, p->asn1Module, "asn1Module", argi);
1108 return ir_match_end (name, iea, argi);
1111 static int ir_CommonInfo (IrExpArg *iea,
1112 Z_CommonInfo *p, const char *name, int argi)
1114 if (!ir_match_start (name, p, iea, ++argi))
1116 ir_GeneralizedTime (iea, p->dateAdded, "dateAdded", argi);
1117 ir_GeneralizedTime (iea, p->dateChanged, "dateChanged", argi);
1118 ir_GeneralizedTime (iea, p->expiry, "expiry", argi);
1119 ir_LanguageCode (iea, p->humanStringLanguage, "humanString-Language",
1121 ir_OtherInformation (iea, p->otherInfo, "otherInfo", argi);
1122 return ir_match_end (name, iea, argi);
1125 static int ir_HumanStringUnit (IrExpArg *iea,
1126 Z_HumanStringUnit *p, const char *name, int argi)
1128 if (!ir_match_start (name, p, iea, ++argi))
1130 ir_LanguageCode (iea, p->language, "language", argi);
1131 ir_InternationalString (iea, p->text, "text", argi);
1132 return ir_match_end (name, iea, argi);
1135 static int ir_HumanString (IrExpArg *iea,
1136 Z_HumanString *p, const char *name, int argi)
1138 if (!ir_match_start (name, p, iea, ++argi))
1140 ir_sequence (ir_HumanStringUnit, iea, p->strings,
1141 &p->num_strings, "strings", argi);
1142 return ir_match_end (name, iea, argi);
1145 static int ir_IconObjectUnit (IrExpArg *iea,
1146 Z_IconObjectUnit *p, const char *name, int argi)
1148 static IrExpChoice arm [] = {
1149 { "ianaType", Z_IconObject_ianaType, ir_choice_nop },
1150 { "z3950type", Z_IconObject_z3950type, ir_choice_nop },
1151 { "otherType", Z_IconObject_otherType, ir_choice_nop },
1153 if (!ir_match_start (name, p, iea, ++argi))
1155 ir_choice (iea, arm, &p->which, ODR_NULLVAL, argi);
1156 ir_InternationalString (iea, p->bodyType, "bodyType", argi);
1157 ir_octet (iea, p->content, "content", argi);
1158 return ir_match_end (name, iea, argi);
1161 static int ir_IconObject (IrExpArg *iea,
1162 Z_IconObject *p, const char *name, int argi)
1164 if (!ir_match_start (name, p, iea, ++argi))
1166 ir_sequence (ir_IconObjectUnit, iea, p->iconUnits,
1167 &p->num_iconUnits, "iconUnits", argi);
1168 return ir_match_end (name, iea, argi);
1171 static int ir_ContactInfo (IrExpArg *iea,
1172 Z_ContactInfo *p, const char *name, int argi)
1174 if (!ir_match_start (name, p, iea, ++argi))
1176 ir_InternationalString (iea, p->name, "name", argi);
1177 ir_HumanString (iea, p->description, "description", argi);
1178 ir_HumanString (iea, p->address, "address", argi);
1179 ir_InternationalString (iea, p->email, "email", argi);
1180 ir_InternationalString (iea, p->phone, "phone", argi);
1181 return ir_match_end (name, iea, argi);
1184 static int ir_NetworkAddressIA (IrExpArg *iea,
1185 Z_NetworkAddressIA *p, const char *name, int argi)
1187 if (!ir_match_start (name, p, iea, ++argi))
1189 ir_InternationalString (iea, p->hostAddress, "hostAddress", argi);
1190 ir_integer (iea, p->port, "port", argi);
1191 return ir_match_end (name, iea, argi);
1194 static int ir_NetworkAddressOPA (IrExpArg *iea,
1195 Z_NetworkAddressOPA *p, const char *name, int argi)
1197 if (!ir_match_start (name, p, iea, ++argi))
1199 ir_InternationalString (iea, p->pSel, "pSel", argi);
1200 ir_InternationalString (iea, p->sSel, "sSel", argi);
1201 ir_InternationalString (iea, p->tSel, "tSel", argi);
1202 ir_InternationalString (iea, p->nSap, "nSap", argi);
1203 return ir_match_end (name, iea, argi);
1206 static int ir_NetworkAddressOther (IrExpArg *iea,
1207 Z_NetworkAddressOther *p, const char *name, int argi)
1209 if (!ir_match_start (name, p, iea, ++argi))
1211 ir_InternationalString (iea, p->type, "type", argi);
1212 ir_InternationalString (iea, p->address, "address", argi);
1213 return ir_match_end (name, iea, argi);
1216 static int ir_NetworkAddress (IrExpArg *iea,
1217 Z_NetworkAddress *p, const char *name, int argi)
1219 IrExpChoice arm [] = {
1220 { "iA", Z_NetworkAddress_iA, ir_NetworkAddressIA },
1221 { "oPA", Z_NetworkAddress_oPA, ir_NetworkAddressOPA },
1222 { "other", Z_NetworkAddress_other, ir_NetworkAddressOther },
1224 if (!ir_match_start (name, p, iea, ++argi))
1226 ir_choice (iea, arm, &p->which, p->u.internetAddress, argi);
1227 return ir_match_end (name, iea, argi);
1230 static int ir_AccessInfo (IrExpArg *iea,
1231 Z_AccessInfo *p, const char *name, int argi)
1233 if (!ir_match_start (name, p, iea, ++argi))
1235 ir_sequence (ir_QueryTypeDetails, iea, p->queryTypesSupported,
1236 &p->num_queryTypesSupported, "queryTypesSupported", argi);
1237 ir_sequence (ir_oid, iea, p->diagnosticsSets,
1238 &p->num_diagnosticsSets, "diagnosticsSets", argi);
1239 ir_sequence (ir_oid, iea, p->attributeSetIds,
1240 &p->num_attributeSetIds, "attributeSetIds", argi);
1241 ir_sequence (ir_oid, iea, p->schemas,
1242 &p->num_schemas, "schemas", argi);
1243 ir_sequence (ir_oid, iea, p->recordSyntaxes,
1244 &p->num_recordSyntaxes, "recordSyntaxes", argi);
1245 ir_sequence (ir_oid, iea, p->resourceChallenges,
1246 &p->num_resourceChallenges, "resourceChallenges", argi);
1247 ir_AccessRestrictions (iea, p->restrictedAccess, "restrictedAccess", argi);
1248 ir_Costs (iea, p->costInfo, "costInfo", argi);
1249 ir_sequence (ir_oid, iea, p->variantSets,
1250 &p->num_variantSets, "variantSets", argi);
1251 ir_sequence (ir_ElementSetName, iea, p->elementSetNames,
1252 &p->num_elementSetNames, "elementSetNames", argi);
1253 ir_sequence (ir_InternationalString, iea, p->unitSystems,
1254 &p->num_unitSystems, "unitSystems", argi);
1255 return ir_match_end (name, iea, argi);
1259 static int ir_QueryTypeDetails (IrExpArg *iea,
1260 Z_QueryTypeDetails *p, const char *name, int argi)
1262 static IrExpChoice arm[] = {
1263 { "private", Z_QueryTypeDetails_private,
1264 ir_PrivateCapabilities },
1265 { "rpn", Z_QueryTypeDetails_rpn,
1266 ir_RpnCapabilities },
1267 { "iso8777", Z_QueryTypeDetails_iso8777,
1268 ir_Iso8777Capabilities },
1269 { "z3958", Z_QueryTypeDetails_z3958,
1271 { "erpn", Z_QueryTypeDetails_erpn,
1272 ir_RpnCapabilities },
1273 { "rankedList", Z_QueryTypeDetails_rankedList,
1277 if (!ir_match_start (name, p, iea, ++argi))
1279 ir_choice (iea, arm, &p->which, p->u.private, argi);
1280 return ir_match_end (name, iea, argi);
1283 static int ir_PrivateCapOperator (IrExpArg *iea,
1284 Z_PrivateCapOperator *p, const char *name, int argi)
1286 if (!ir_match_start (name, p, iea, ++argi))
1288 ir_InternationalString (iea, p->roperator, "operator", argi);
1289 ir_HumanString (iea, p->description, "description", argi);
1290 return ir_match_end (name, iea, argi);
1293 static int ir_PrivateCapabilities (IrExpArg *iea,
1294 Z_PrivateCapabilities *p, const char *name, int argi)
1296 if (!ir_match_start (name, p, iea, ++argi))
1299 ir_sequence (ir_PrivateCapOperator, iea, p->operators,
1300 &p->num_operators, "operators", argi);
1301 ir_sequence (ir_SearchKey, iea, p->searchKeys,
1302 &p->num_searchKeys, "searchKeys", argi);
1303 ir_sequence (ir_HumanString, iea, p->description,
1304 &p->num_description, "description", argi);
1305 return ir_match_end (name, iea, argi);
1308 static int ir_RpnCapabilities (IrExpArg *iea,
1309 Z_RpnCapabilities *p, const char *name, int argi)
1311 if (!ir_match_start (name, p, iea, ++argi))
1313 ir_sequence (ir_integer, iea, p->operators,
1314 &p->num_operators, "operators", argi);
1315 ir_bool (iea, p->resultSetAsOperandSupported,
1316 "resultSetAsOperandSupported", argi);
1317 ir_bool (iea, p->restrictionOperandSupported,
1318 "restrictionOperandSupported", argi);
1319 ir_ProximitySupport (iea, p->proximity, "proximity", argi);
1320 return ir_match_end (name, iea, argi);
1323 static int ir_Iso8777Capabilities (IrExpArg *iea,
1324 Z_Iso8777Capabilities *p, const char *name, int argi)
1326 if (!ir_match_start (name, p, iea, ++argi))
1328 ir_sequence (ir_SearchKey, iea, p->searchKeys,
1329 &p->num_searchKeys, "searchKeys", argi);
1330 ir_HumanString (iea, p->restrictions, "restrictions", argi);
1331 return ir_match_end (name, iea, argi);
1334 static int ir_ProxSupportPrivate (IrExpArg *iea,
1335 Z_ProxSupportPrivate *p, const char *name, int argi)
1337 if (!ir_match_start (name, p, iea, ++argi))
1339 ir_integer (iea, p->unit, "unit", argi);
1340 ir_HumanString (iea, p->description, "description", argi);
1341 return ir_match_end (name, iea, argi);
1344 static int ir_ProxSupportUnit (IrExpArg *iea,
1345 Z_ProxSupportUnit *p, const char *name, int argi)
1347 static IrExpChoice arm [] = {
1348 { "known", Z_ProxSupportUnit_known, ir_integer },
1349 { "private", Z_ProxSupportUnit_private, ir_ProxSupportPrivate },
1351 if (!ir_match_start (name, p, iea, ++argi))
1353 ir_choice (iea, arm, &p->which, p->u.private, argi);
1354 return ir_match_end (name, iea, argi);
1357 static int ir_ProximitySupport (IrExpArg *iea,
1358 Z_ProximitySupport *p, const char *name, int argi)
1360 if (!ir_match_start (name, p, iea, ++argi))
1362 ir_bool (iea, p->anySupport, "anySupport", argi);
1363 ir_sequence (ir_ProxSupportUnit, iea, p->unitsSupported,
1364 &p->num_unitsSupported, "unitsSupported", argi);
1365 return ir_match_end (name, iea, argi);
1368 static int ir_SearchKey (IrExpArg *iea,
1369 Z_SearchKey *p, const char *name, int argi)
1371 if (!ir_match_start (name, p, iea, ++argi))
1373 ir_InternationalString (iea, p->searchKey, "searchKey", argi);
1374 ir_HumanString (iea, p->description, "description", argi);
1375 return ir_match_end (name, iea, argi);
1378 static int ir_AccessRestrictionsUnit (IrExpArg *iea,
1379 Z_AccessRestrictionsUnit *p, const char *name, int argi)
1381 static IrExpChoice arm[] = {
1382 { "any", Z_AccessRestrictions_any,
1384 { "search", Z_AccessRestrictions_search,
1386 { "present", Z_AccessRestrictions_present,
1388 { "specificElements", Z_AccessRestrictions_specific_elements,
1390 { "extendedServices", Z_AccessRestrictions_extended_services,
1392 { "byDatabase", Z_AccessRestrictions_by_database,
1396 if (!ir_match_start (name, p, iea, ++argi))
1398 ir_choice (iea, arm, p->accessType, ODR_NULLVAL, argi);
1399 ir_HumanString (iea, p->accessText, "accessText", argi);
1400 ir_sequence (ir_oid, iea, p->accessChallenges,
1401 &p->num_accessChallenges, "accessChallenges", argi);
1402 return ir_match_end (name, iea, argi);
1405 static int ir_AccessRestrictions (IrExpArg *iea,
1406 Z_AccessRestrictions *p, const char *name, int argi)
1408 if (!ir_match_start (name, p, iea, ++argi))
1410 ir_sequence (ir_AccessRestrictionsUnit, iea, p->restrictions,
1411 &p->num_restrictions, "restrictions", argi);
1412 return ir_match_end (name, iea, argi);
1415 static int ir_CostsOtherCharge (IrExpArg *iea,
1416 Z_CostsOtherCharge *p, const char *name, int argi)
1418 if (!ir_match_start (name, p, iea, ++argi))
1420 ir_HumanString (iea, p->forWhat, "forWhat", argi);
1421 ir_Charge (iea, p->charge, "charge", argi);
1422 return ir_match_end (name, iea, argi);
1425 static int ir_Costs (IrExpArg *iea,
1426 Z_Costs *p, const char *name, int argi)
1428 if (!ir_match_start (name, p, iea, ++argi))
1430 ir_Charge (iea, p->connectCharge, "connectCharge", argi);
1431 ir_Charge (iea, p->connectTime, "connectTime", argi);
1432 ir_Charge (iea, p->displayCharge, "displayCharge", argi);
1433 ir_Charge (iea, p->searchCharge, "searchCharge", argi);
1434 ir_Charge (iea, p->subscriptCharge, "subscriptCharge", argi);
1436 ir_sequence (ir_CostsOtherCharge, iea, p->otherCharges,
1437 &p->num_otherCharges, "otherCharges", argi);
1438 return ir_match_end (name, iea, argi);
1441 static int ir_Charge (IrExpArg *iea,
1442 Z_Charge *p, const char *name, int argi)
1444 if (!ir_match_start (name, p, iea, ++argi))
1446 ir_IntUnit (iea, p->cost, "cost", argi);
1447 ir_Unit (iea, p->perWhat, "perWhat", argi);
1448 ir_HumanString (iea, p->text, "text", argi);
1449 return ir_match_end (name, iea, argi);
1452 static int ir_DatabaseList (IrExpArg *iea,
1453 Z_DatabaseList *p, const char *name, int argi)
1455 if (!ir_match_start (name, p, iea, ++argi))
1457 ir_sequence (ir_DatabaseName, iea, p->databases,
1458 &p->num_databases, "databases", argi);
1459 return ir_match_end (name, iea, argi);
1462 static int ir_AttributeCombinations (IrExpArg *iea,
1463 Z_AttributeCombinations *p, const char *name, int argi)
1465 if (!ir_match_start (name, p, iea, ++argi))
1467 ir_oid (iea, p->defaultAttributeSet, "defaultAttributeSet", argi);
1468 ir_sequence (ir_AttributeCombination, iea, p->legalCombinations,
1469 &p->num_legalCombinations, "legalCombinations", argi);
1470 return ir_match_end (name, iea, argi);
1473 static int ir_AttributeCombination (IrExpArg *iea,
1474 Z_AttributeCombination *p, const char *name, int argi)
1476 if (!ir_match_start (name, p, iea, ++argi))
1478 ir_sequence (ir_AttributeOccurrence, iea, p->occurrences,
1479 &p->num_occurrences, "occurrences", argi);
1480 return ir_match_end (name, iea, argi);
1483 static int ir_AttributeValueList (IrExpArg *iea,
1484 Z_AttributeValueList *p, const char *name, int argi)
1486 if (!ir_match_start (name, p, iea, ++argi))
1488 ir_sequence (ir_StringOrNumeric, iea, p->attributes,
1489 &p->num_attributes, "attributes", argi);
1490 return ir_match_end (name, iea, argi);
1493 static int ir_AttributeOccurrence (IrExpArg *iea,
1494 Z_AttributeOccurrence *p, const char *name, int argi)
1496 static IrExpChoice arm [] = {
1497 { "anyOrNone", Z_AttributeOcc_anyOrNone, ir_null },
1498 { "specific", Z_AttributeOcc_specific, ir_AttributeValueList },
1499 { NULL, 0, NULL } };
1500 if (!ir_match_start (name, p, iea, ++argi))
1502 ir_oid (iea, p->attributeSet, "attributeSet", argi);
1503 ir_integer (iea, p->attributeType, "attributeType", argi);
1504 ir_null (iea, p->mustBeSupplied, "mustBeSupplied", argi);
1505 ir_choice (iea, arm, &p->which, p->attributeValues->anyOrNone, argi);
1506 return ir_match_end (name, iea, argi);
1509 static int ir_AttributeValue (IrExpArg *iea,
1510 Z_AttributeValue *p, const char *name, int argi)
1512 if (!ir_match_start (name, p, iea, ++argi))
1514 ir_StringOrNumeric (iea, p->value, "value", argi);
1515 ir_HumanString (iea, p->description, "description", argi);
1516 ir_sequence (ir_StringOrNumeric, iea, p->subAttributes,
1517 &p->num_subAttributes, "subAttributes", argi);
1518 ir_sequence (ir_StringOrNumeric, iea, p->superAttributes,
1519 &p->num_superAttributes, "superAttributes", argi);
1520 ir_null (iea, p->partialSupport, "partialSupport", argi);
1521 return ir_match_end (name, iea, argi);
1524 static int ir_StringOrNumeric (IrExpArg *iea,
1525 Z_StringOrNumeric *p, const char *name, int argi)
1527 IrExpChoice arm[] = {
1528 { "string", Z_StringOrNumeric_string, ir_InternationalString },
1529 { "numeric", Z_StringOrNumeric_numeric, ir_integer },
1531 if (!ir_match_start (name, p, iea, ++argi))
1533 ir_choice (iea, arm, &p->which, p->u.string, argi);
1534 return ir_match_end (name, iea, argi);
1537 static int ir_ElementSpec (IrExpArg *iea,
1538 Z_ElementSpec *p, const char *name, int argi)
1540 static IrExpChoice arm[] = {
1541 { "elementSetName", Z_ElementSpec_elementSetName,
1542 ir_InternationalString },
1543 { "externalSpec", Z_ElementSpec_externalSpec,
1547 if (!ir_match_start (name, p, iea, ++argi))
1549 ir_choice (iea, arm, &p->which, p->u.elementSetName, argi);
1550 return ir_match_end (name, iea, argi);
1553 static int ir_Specification (IrExpArg *iea,
1554 Z_Specification *p, const char *name, int argi)
1556 if (!ir_match_start (name, p, iea, ++argi))
1558 ir_oid (iea, p->schema, "schema", argi);
1559 ir_ElementSpec (iea, p->elementSpec, "elementSpec", argi);
1560 return ir_match_end (name, iea, argi);
1563 static int ir_InfoCategory (IrExpArg *iea,
1564 Z_InfoCategory *p, const char *name, int argi)
1566 if (!ir_match_start (name, p, iea, ++argi))
1568 ir_oid (iea, p->categoryTypeId, "categoryTypeId", argi);
1569 ir_integer (iea, p->categoryValue, "categoryValue", argi);
1570 return ir_match_end (name, iea, argi);
1573 static int ir_OtherInformationUnit (IrExpArg *iea,
1574 Z_OtherInformationUnit *p, const char *name, int argi)
1576 static IrExpChoice arm[] = {
1577 { "characterInfo", Z_OtherInfo_characterInfo,
1578 ir_InternationalString },
1579 { "binaryInfo", Z_OtherInfo_binaryInfo,
1581 { "externallyDefinedInfo", Z_OtherInfo_externallyDefinedInfo,
1583 { "oid", Z_OtherInfo_oid,
1587 if (!ir_match_start (name, p, iea, ++argi))
1589 ir_InfoCategory (iea, p->category, "category", argi);
1590 ir_choice (iea, arm, &p->which, p->information.characterInfo, argi);
1591 return ir_match_end (name, iea, argi);
1594 static int ir_OtherInformation (IrExpArg *iea,
1595 Z_OtherInformation *p, const char *name, int argi)
1597 if (!ir_match_start (name, p, iea, ++argi))
1599 ir_sequence (ir_OtherInformationUnit, iea, p->list,
1600 &p->num_elements, "list", argi);
1601 return ir_match_end (name, iea, argi);
1604 static int ir_IntUnit (IrExpArg *iea,
1605 Z_IntUnit *p, const char *name, int argi)
1607 if (!ir_match_start (name, p, iea, ++argi))
1609 ir_integer (iea, p->value, "value", argi);
1610 ir_Unit (iea, p->unitUsed, "unitUsed", argi);
1611 return ir_match_end (name, iea, argi);
1614 static int ir_Unit (IrExpArg *iea,
1615 Z_Unit *p, const char *name, int argi)
1617 if (!ir_match_start (name, p, iea, ++argi))
1619 ir_InternationalString (iea, p->unitSystem, "unitSystem", argi);
1620 ir_StringOrNumeric (iea, p->unitType, "unitType", argi);
1621 ir_StringOrNumeric (iea, p->unit, "unit", argi);
1622 ir_integer (iea, p->scaleFactor, "scaleFactor", argi);
1623 return ir_match_end (name, iea, argi);
1626 int ir_ExplainRecord (IrExpArg *iea, Z_ExplainRecord *p, int argi)
1628 static IrExpChoice arm[] = {
1629 {"targetInfo", Z_Explain_targetInfo,
1631 {"databaseInfo", Z_Explain_databaseInfo,
1633 {"schemaInfo", Z_Explain_schemaInfo,
1635 {"tagSetInfo", Z_Explain_tagSetInfo,
1637 {"recordSyntaxInfo", Z_Explain_recordSyntaxInfo,
1638 ir_RecordSyntaxInfo},
1639 {"attributeSetInfo", Z_Explain_attributeSetInfo,
1640 ir_AttributeSetInfo},
1641 {"termListInfo", Z_Explain_termListInfo,
1643 {"extendedServicesInfo", Z_Explain_extendedServicesInfo,
1644 ir_ExtendedServicesInfo},
1645 {"attributeDetails", Z_Explain_attributeDetails,
1646 ir_AttributeDetails},
1647 {"termListDetails", Z_Explain_termListDetails,
1648 ir_TermListDetails},
1649 {"elementSetDetails", Z_Explain_elementSetDetails,
1650 ir_ElementSetDetails},
1651 {"retrievalRecordDetails", Z_Explain_retrievalRecordDetails,
1652 ir_RetrievalRecordDetails},
1653 {"sortDetails", Z_Explain_sortDetails,
1655 {"processing", Z_Explain_processing,
1656 ir_ProcessingInformation},
1657 {"variants", Z_Explain_variants,
1659 {"units", Z_Explain_units,
1661 {"categoryList", Z_Explain_categoryList,
1666 return ir_choice (iea, arm, &p->which, p->u.targetInfo, argi);
1669 int ir_tcl_get_explain (Tcl_Interp *interp, Z_ExplainRecord *rec,
1670 int argc, char **argv)
1676 iea.interp = interp;
1678 return ir_ExplainRecord (&iea, rec, 2);