2 * IR toolkit for tcl/tk
4 * See the file LICENSE for details.
5 * Sebastian Hammer, Adam Dickmeiss
8 * Revision 1.7 1997-08-28 20:17:36 adam
11 * Revision 1.6 1997/05/14 06:57:14 adam
12 * Adopted to use YAZ with C++ support.
14 * Revision 1.5 1996/08/23 11:59:47 adam
15 * Bug fix: infinite look in ir_oid.
17 * Revision 1.4 1996/08/22 13:39:31 adam
18 * More work on explain.
20 * Revision 1.3 1996/08/21 13:32:50 adam
21 * Implemented saveFile method and extended loadFile method to work with it.
23 * Revision 1.2 1996/08/20 09:27:48 adam
24 * More work on explain.
25 * Renamed tkinit.c to tkmain.c. The tcl shell uses the Tcl 7.5 interface
26 * for socket i/o instead of the handcrafted one (for Tcl 7.3 and Tcl7.4).
28 * Revision 1.1 1996/08/16 15:07:43 adam
29 * First work on Explain.
52 typedef char *Z_ElementSetName;
53 typedef Odr_oid *Z_AttributeSetId;
54 typedef char *Z_InternationalString;
55 typedef char *Z_LanguageCode;
57 static int ir_UnitType (IrExpArg *iea,
58 Z_UnitType *p, const char *name, int argi);
59 static int ir_Unit (IrExpArg *iea,
60 Z_Unit *p, const char *name, int argi);
61 static int ir_VariantType (IrExpArg *iea,
62 Z_VariantType *p, const char *name, int argi);
63 static int ir_OmittedAttributeInterpretation (IrExpArg *iea,
64 Z_OmittedAttributeInterpretation *p, const char *name, int argi);
65 static int ir_AttributeTypeDetails (IrExpArg *iea,
66 Z_AttributeTypeDetails *p, const char *name, int argi);
67 static int ir_Specification (IrExpArg *iea,
68 Z_Specification *p, const char *name, int argi);
69 static int ir_RetrievalRecordDetails (IrExpArg *iea,
70 Z_RetrievalRecordDetails *p, const char *name, int argi);
71 static int ir_ElementInfo (IrExpArg *iea,
72 Z_ElementInfo *p, const char *name, int argi);
73 static int ir_InternationalString (IrExpArg *iea,
74 char *p, const char *name, int argi);
75 static int ir_TagSetInfo (IrExpArg *iea,
76 Z_TagSetInfo *p, const char *name, int argi);
77 static int ir_DatabaseName (IrExpArg *iea,
78 char *p, const char *name, int argi);
79 static int ir_AccessInfo (IrExpArg *iea,
80 Z_AccessInfo *p, const char *name, int argi);
81 static int ir_bool (IrExpArg *iea,
82 bool_t *p, const char *name, int argi);
83 static int ir_LanguageCode (IrExpArg *iea,
84 char *p, const char *name, int argi);
85 static int ir_Units (IrExpArg *iea,
86 Z_Units *p, const char *name, int argi);
87 static int ir_SortDetails (IrExpArg *iea,
88 Z_SortDetails *p, const char *name, int argi);
89 static int ir_ElementSetDetails (IrExpArg *iea,
90 Z_ElementSetDetails *p, const char *name, int argi);
91 static int ir_TermListDetails (IrExpArg *iea,
92 Z_TermListDetails *p, const char *name, int argi);
93 static int ir_AttributeValue (IrExpArg *iea,
94 Z_AttributeValue *p, const char *name, int argi);
95 static int ir_ElementDataType (IrExpArg *iea,
96 Z_ElementDataType *p, const char *name, int argi);
97 static int ir_ProximitySupport (IrExpArg *iea,
98 Z_ProximitySupport *p, const char *name, int argi);
99 static int ir_ProcessingInformation (IrExpArg *iea,
100 Z_ProcessingInformation *p, const char *name, int argi);
101 static int ir_AttributeCombinations (IrExpArg *iea,
102 Z_AttributeCombinations *p, const char *name, int argi);
103 static int ir_AttributeSetDetails (IrExpArg *iea,
104 Z_AttributeSetDetails *p, const char *name, int argi);
105 static int ir_DatabaseInfo (IrExpArg *iea,
106 Z_DatabaseInfo *p, const char *name, int argi);
107 static int ir_IconObject (IrExpArg *iea,
108 Z_IconObject *p, const char *name, int argi);
109 static int ir_RpnCapabilities (IrExpArg *iea,
110 Z_RpnCapabilities *p, const char *name, int argi);
111 static int ir_QueryTypeDetails (IrExpArg *iea,
112 Z_QueryTypeDetails *p, const char *name, int argi);
113 static int ir_ValueDescription (IrExpArg *iea,
114 Z_ValueDescription *p, const char *name, int argi);
115 static int ir_AttributeSetInfo (IrExpArg *iea,
116 Z_AttributeSetInfo *p, const char *name, int argi);
117 static int ir_SchemaInfo (IrExpArg *iea,
118 Z_SchemaInfo *p, const char *name, int argi);
119 static int ir_AttributeOccurrence (IrExpArg *iea,
120 Z_AttributeOccurrence *p, const char *name, int argi);
121 static int ir_AttributeCombination (IrExpArg *iea,
122 Z_AttributeCombination *p, const char *name, int argi);
123 static int ir_UnitInfo (IrExpArg *iea,
124 Z_UnitInfo *p, const char *name, int argi);
125 static int ir_VariantClass (IrExpArg *iea,
126 Z_VariantClass *p, const char *name, int argi);
127 static int ir_VariantSetInfo (IrExpArg *iea,
128 Z_VariantSetInfo *p, const char *name, int argi);
129 static int ir_RecordTag (IrExpArg *iea,
130 Z_RecordTag *p, const char *name, int argi);
131 static int ir_TermListInfo (IrExpArg *iea,
132 Z_TermListInfo *p, const char *name, int argi);
133 static int ir_StringOrNumeric (IrExpArg *iea,
134 Z_StringOrNumeric *p, const char *name, int argi);
135 static int ir_CategoryInfo (IrExpArg *iea,
136 Z_CategoryInfo *p, const char *name, int argi);
137 static int ir_ValueRange (IrExpArg *iea,
138 Z_ValueRange *p, const char *name, int argi);
139 static int ir_Term (IrExpArg *iea,
140 Z_Term *p, const char *name, int argi);
141 static int ir_DatabaseList (IrExpArg *iea,
142 Z_DatabaseList *p, const char *name, int argi);
143 static int ir_HumanString (IrExpArg *iea,
144 Z_HumanString *p, const char *name, int argi);
145 static int ir_CommonInfo (IrExpArg *iea,
146 Z_CommonInfo *p, const char *name, int argi);
147 static int ir_NetworkAddress (IrExpArg *iea,
148 Z_NetworkAddress *p, const char *name, int argi);
149 static int ir_Costs (IrExpArg *iea,
150 Z_Costs *p, const char *name, int argi);
151 static int ir_RecordSyntaxInfo (IrExpArg *iea,
152 Z_RecordSyntaxInfo *p, const char *name, int argi);
153 static int ir_OtherInformation (IrExpArg *iea,
154 Z_OtherInformation *p, const char *name, int argi);
155 static int ir_CategoryList (IrExpArg *iea,
156 Z_CategoryList *p, const char *name, int argi);
157 static int ir_VariantValue (IrExpArg *iea,
158 Z_VariantValue *p, const char *name, int argi);
159 static int ir_PerElementDetails (IrExpArg *iea,
160 Z_PerElementDetails *p, const char *name, int argi);
161 static int ir_AttributeDetails (IrExpArg *iea,
162 Z_AttributeDetails *p, const char *name, int argi);
163 static int ir_ExtendedServicesInfo (IrExpArg *iea,
164 Z_ExtendedServicesInfo *p, const char *name, int argi);
165 static int ir_AttributeType (IrExpArg *iea,
166 Z_AttributeType *p, const char *name, int argi);
167 static int ir_IntUnit (IrExpArg *iea,
168 Z_IntUnit *p, const char *name, int argi);
169 static int ir_Charge (IrExpArg *iea,
170 Z_Charge *p, const char *name, int argi);
171 static int ir_PrivateCapabilities (IrExpArg *iea,
172 Z_PrivateCapabilities *p, const char *name, int argi);
173 static int ir_ValueSet (IrExpArg *iea,
174 Z_ValueSet *p, const char *name, int argi);
175 static int ir_AttributeDescription (IrExpArg *iea,
176 Z_AttributeDescription *p, const char *name, int argi);
177 static int ir_Path (IrExpArg *iea,
178 Z_Path *p, const char *name, int argi);
179 static int ir_ContactInfo (IrExpArg *iea,
180 Z_ContactInfo *p, const char *name, int argi);
181 static int ir_SearchKey (IrExpArg *iea,
182 Z_SearchKey *p, const char *name, int argi);
183 static int ir_Iso8777Capabilities (IrExpArg *iea,
184 Z_Iso8777Capabilities *p, const char *name, int argi);
185 static int ir_AccessRestrictions (IrExpArg *iea,
186 Z_AccessRestrictions *p, const char *name, int argi);
187 static int ir_SortKeyDetails (IrExpArg *iea,
188 Z_SortKeyDetails *p, const char *name, int argi);
192 ir_match_start (const char *name, void *p, IrExpArg *iea, int argi)
196 if (argi >= iea->argc)
197 Tcl_AppendResult (iea->interp, name, " ", NULL);
200 if (argi < iea->argc)
202 if (strcmp (name, iea->argv[argi]))
206 Tcl_AppendResult (iea->interp, "{", name, " ", NULL);
211 ir_match_end (const char *name, IrExpArg *iea, int argi)
213 if (argi >= iea->argc)
214 Tcl_AppendResult (iea->interp, "} ", NULL);
219 ir_choice (IrExpArg *iea, IrExpChoice *clist, int *what, void *p,
226 if (clist->id == *what)
227 return (*clist->handle)(iea, p, clist->name, argi);
231 if (argi >= iea->argc)
232 Tcl_AppendResult (iea->interp, "{} ", NULL);
236 static int ir_null (IrExpArg *iea,
237 Odr_null *p, const char *name, int argi)
239 if (!ir_match_start (name, p, iea, ++argi))
241 Tcl_AppendResult (iea->interp, "1 ", NULL);
242 return ir_match_end (name, iea, argi);
245 static int ir_CString (IrExpArg *iea,
246 char *p, const char *name, int argi)
248 if (!ir_match_start (name, p, iea, ++argi))
250 Tcl_AppendElement (iea->interp, p);
251 return ir_match_end (name, iea, argi);
254 static int ir_ElementSetName (IrExpArg *iea,
255 char *p, const char *name, int argi)
257 return ir_CString (iea, p, name, argi);
260 static int ir_DatabaseName (IrExpArg *iea,
261 char *p, const char *name, int argi)
263 return ir_CString (iea, p, name, argi);
266 static int ir_InternationalString (IrExpArg *iea,
267 char *p, const char *name, int argi)
269 return ir_CString (iea, p, name, argi);
272 static int ir_GeneralizedTime (IrExpArg *iea,
273 char *p, const char *name, int argi)
275 return ir_CString (iea, p, name, argi);
278 static int ir_oid (IrExpArg *iea,
279 Odr_oid *p, const char *name, int argi)
282 if (!ir_match_start (name, p, iea, ++argi))
288 sprintf (buf, "%c%d", first, *p);
289 Tcl_AppendResult (iea->interp, buf, NULL);
293 return ir_match_end (name, iea, argi);
296 static int ir_TagTypeMapping (IrExpArg *iea,
297 Z_TagTypeMapping **p, const char *name, int argi)
299 if (!ir_match_start (name, p, iea, ++argi))
302 return ir_match_end (name, iea, argi);
305 static int ir_PrimitiveDataType (IrExpArg *iea,
306 int *p, const char *name, int argi)
308 if (!ir_match_start (name, p, iea, ++argi))
311 return ir_match_end (name, iea, argi);
314 static int ir_octet (IrExpArg *iea,
315 Odr_oct *p, const char *name, int argi)
317 if (!ir_match_start (name, p, iea, ++argi))
320 return ir_match_end (name, iea, argi);
323 static int ir_choice_nop (IrExpArg *iea,
324 void *p, const char *name, int argi)
326 if (argi >= iea->argc)
327 Tcl_AppendResult (iea->interp, name, " ", NULL);
331 static int ir_bool (IrExpArg *iea,
332 bool_t *p, const char *name, int argi)
334 if (!ir_match_start (name, p, iea, ++argi))
336 Tcl_AppendResult (iea->interp, *p ? "1" : "0", NULL);
337 return ir_match_end (name, iea, argi);
340 static int ir_integer (IrExpArg *iea,
341 int *p, const char *name, int argi)
344 if (!ir_match_start (name, p, iea, ++argi))
346 sprintf (buf, "%d", *p);
347 Tcl_AppendResult (iea->interp, buf, NULL);
348 return ir_match_end (name, iea, argi);
351 static int ir_LanguageCode (IrExpArg *iea,
352 char *p, const char *name, int argi)
354 return ir_CString (iea, p, name, argi);
357 static int ir_External (IrExpArg *iea,
358 Z_External *p, const char *name, int argi)
360 if (!ir_match_start (name, p, iea, ++argi))
363 return ir_match_end (name, iea, argi);
366 static int ir_sequence (int (*fh)(), IrExpArg *iea, void *p, int *num,
367 const char *name, int argi)
369 void **pp = (void **) p;
372 if (!ir_match_start (name, p, iea, ++argi))
374 for (i = 0; i < *num; i++)
375 (*fh)(iea, pp[i], "", argi);
376 return ir_match_end (name, iea, argi);
379 static int ir_Term (IrExpArg *iea,
380 Z_Term *p, const char *name, int argi)
382 static IrExpChoice arm [] = {
383 { "general", Z_Term_general,
385 { "numeric", Z_Term_numeric,
387 { "characterString", Z_Term_characterString,
388 ir_InternationalString },
391 { "dateTime", Z_Term_dateTime,
392 ir_GeneralizedTime },
393 { "external", Z_Term_external,
395 { "null", Z_Term_null,
399 if (!ir_match_start (name, p, iea, ++argi))
402 ir_choice (iea, arm, &p->which, p->u.general, argi);
403 return ir_match_end (name, iea, argi);
406 static int ir_TargetInfo (IrExpArg *iea,
407 Z_TargetInfo *p, const char *name, int argi)
409 if (!ir_match_start (name, p, iea, ++argi))
411 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
412 ir_InternationalString (iea, p->name, "name", argi);
413 ir_HumanString (iea, p->recentNews, "recentNews", argi);
414 ir_IconObject (iea, p->icon, "icon", argi);
415 ir_bool (iea, p->namedResultSets, "namedResultSets", argi);
416 ir_bool (iea, p->multipleDBsearch, "multipleDBsearch", argi);
417 ir_integer (iea, p->maxResultSets, "maxResultSets", argi);
418 ir_integer (iea, p->maxResultSize, "maxResultSize", argi);
419 ir_integer (iea, p->maxTerms, "maxTerms", argi);
420 ir_IntUnit (iea, p->timeoutInterval, "timeoutInterval", argi);
421 ir_HumanString (iea, p->welcomeMessage, "welcomeMessage", argi);
422 ir_ContactInfo (iea, p->contactInfo, "contactInfo", argi);
423 ir_HumanString (iea, p->description, "description", argi);
424 ir_sequence (ir_InternationalString, iea, p->nicknames,
425 &p->num_nicknames, "nicknames", argi);
426 ir_HumanString (iea, p->usageRest, "usageRest", argi);
427 ir_HumanString (iea, p->paymentAddr, "paymentAddr", argi);
428 ir_HumanString (iea, p->hours, "hours", argi);
429 ir_sequence (ir_DatabaseList, iea, p->dbCombinations,
430 &p->num_dbCombinations, "dbCombinations", argi);
431 ir_sequence (ir_NetworkAddress, iea, p->addresses,
432 &p->num_addresses, "addresses", argi);
433 ir_AccessInfo (iea, p->commonAccessInfo, "commonAccessInfo", argi);
434 return ir_match_end (name, iea, argi);
437 static int ir_DatabaseInfo (IrExpArg *iea,
438 Z_DatabaseInfo *p, const char *name, int argi)
440 static IrExpChoice arm_recordCount [] = {
441 { "actualNumber", Z_Exp_RecordCount_actualNumber,
443 { "approxNumber", Z_Exp_RecordCount_approxNumber,
447 if (!ir_match_start (name, p, iea, ++argi))
450 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
451 ir_DatabaseName (iea, p->name, "name", argi);
452 ir_null (iea, p->explainDatabase, "explainDatabase", argi);
453 ir_sequence (ir_DatabaseName, iea, p->nicknames,
454 &p->num_nicknames, "nicknames", argi);
455 ir_IconObject (iea, p->icon, "icon", argi);
456 ir_bool (iea, p->userFee, "userFee", argi);
457 ir_bool (iea, p->available, "available", argi);
458 ir_HumanString (iea, p->titleString, "titleString", argi);
459 ir_sequence (ir_HumanString, iea, p->keywords,
460 &p->num_keywords, "keywords", argi);
461 ir_HumanString (iea, p->description, "description", argi);
462 ir_DatabaseList (iea, p->associatedDbs, "associatedDbs", argi);
463 ir_DatabaseList (iea, p->subDbs, "subDbs", argi);
464 ir_HumanString (iea, p->disclaimers, "disclaimers", argi);
465 ir_HumanString (iea, p->news, "news", argi);
467 ir_choice (iea, arm_recordCount, &p->recordCount_which,
468 p->recordCount, argi);
470 ir_HumanString (iea, p->defaultOrder, "defaultOrder", argi);
471 ir_integer (iea, p->avRecordSize, "avRecordSize", argi);
472 ir_integer (iea, p->maxRecordSize, "maxRecordSize", argi);
473 ir_HumanString (iea, p->hours, "hours", argi);
474 ir_HumanString (iea, p->bestTime, "bestTime", argi);
475 ir_GeneralizedTime (iea, p->lastUpdate, "lastUpdate", argi);
476 ir_IntUnit (iea, p->updateInterval, "updateInterval", argi);
477 ir_HumanString (iea, p->coverage, "coverage", argi);
478 ir_bool (iea, p->proprietary, "proprietary", argi);
479 ir_HumanString (iea, p->copyrightText, "copyrightText", argi);
480 ir_HumanString (iea, p->copyrightNotice, "copyrightNotice", argi);
481 ir_ContactInfo (iea, p->producerContactInfo, "producerContactInfo", argi);
482 ir_ContactInfo (iea, p->supplierContactInfo, "supplierContactInfo", argi);
483 ir_ContactInfo (iea, p->submissionContactInfo, "submissionContactInfo", argi);
484 ir_AccessInfo (iea, p->accessInfo, "accessInfo", argi);
485 return ir_match_end (name, iea, argi);
488 static int ir_SchemaInfo (IrExpArg *iea,
489 Z_SchemaInfo *p, const char *name, int argi)
491 if (!ir_match_start (name, p, iea, ++argi))
493 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
494 ir_oid (iea, p->schema, "schema", argi);
495 ir_InternationalString (iea, p->name, "name", argi);
496 ir_HumanString (iea, p->description, "description", argi);
498 ir_sequence (ir_TagTypeMapping, iea, p->tagTypeMapping,
499 &p->num_tagTypeMapping, "tagTypeMapping", argi);
500 ir_sequence (ir_ElementInfo, iea, p->recordStructure,
501 &p->num_recordStructure, "recordStructure", argi);
502 return ir_match_end (name, iea, argi);
505 static int ir_ElementDataTypePrimitive (IrExpArg *iea,
506 int *p, const char *name, int argi)
508 static IrExpChoice arm[] = {
509 {"octetString", Z_PrimitiveElement_octetString, ir_choice_nop },
510 {"numeric", Z_PrimitiveElement_numeric, ir_choice_nop },
513 if (!ir_match_start (name, p, iea, ++argi))
515 ir_choice (iea, arm, p, ODR_NULLVAL, argi);
516 return ir_match_end (name, iea, argi);
519 static int ir_ElementInfo (IrExpArg *iea,
520 Z_ElementInfo *p, const char *name, int argi)
522 if (!ir_match_start (name, p, iea, ++argi))
524 ir_InternationalString (iea, p->elementName, "elementName", argi);
525 ir_Path (iea, p->elementTagPath, "elementTagPath", argi);
526 ir_ElementDataType (iea, p->dataType, "dataType", argi);
527 ir_bool (iea, p->required, "required", argi);
528 ir_bool (iea, p->repeatable, "repeatable", argi);
529 ir_HumanString (iea, p->description, "description", argi);
530 return ir_match_end (name, iea, argi);
533 static int ir_ElementInfoList (IrExpArg *iea,
534 Z_ElementInfoList *p, const char *name, int argi)
536 if (!ir_match_start (name, p, iea, ++argi))
538 ir_sequence (ir_ElementInfo, iea, p->list,
539 &p->num, "list", argi);
540 return ir_match_end (name, iea, argi);
543 static int ir_ElementDataType (IrExpArg *iea,
544 Z_ElementDataType *p, const char *name, int argi)
546 static IrExpChoice arm[] = {
547 { "primitive", Z_ElementDataType_primitive,
548 ir_ElementDataTypePrimitive },
549 { "structured", Z_ElementDataType_structured,
550 ir_ElementInfoList },
552 if (!ir_match_start (name, p, iea, ++argi))
554 ir_choice (iea, arm, &p->which, p->u.primitive, argi);
555 return ir_match_end (name, iea, argi);
558 static int ir_PathUnit (IrExpArg *iea,
559 Z_PathUnit *p, const char *name, int argi)
561 if (!ir_match_start (name, p, iea, ++argi))
563 ir_integer (iea, p->tagType, "tagType", argi);
564 ir_StringOrNumeric (iea, p->tagValue, "tagValue", argi);
565 return ir_match_end (name, iea, argi);
568 static int ir_Path (IrExpArg *iea,
569 Z_Path *p, const char *name, int argi)
571 if (!ir_match_start (name, p, iea, ++argi))
573 ir_sequence (ir_PathUnit, iea, p->list,
574 &p->num, "list", argi);
575 return ir_match_end (name, iea, argi);
578 static int ir_TagSetInfoElements (IrExpArg *iea,
579 Z_TagSetInfoElements *p, const char *name, int argi)
581 if (!ir_match_start (name, p, iea, ++argi))
583 ir_InternationalString (iea, p->elementName, "elementname", argi);
584 ir_sequence (ir_InternationalString, iea, p->nicknames,
585 &p->num_nicknames, "nicknames", argi);
586 ir_StringOrNumeric (iea, p->elementTag, "elementTag", argi);
587 ir_HumanString (iea, p->description, "description", argi);
588 ir_PrimitiveDataType (iea, p->dataType, "dataType", argi);
589 ir_OtherInformation (iea, p->otherTagInfo, "otherTagInfo", argi);
590 return ir_match_end (name, iea, argi);
593 static int ir_TagSetInfo (IrExpArg *iea,
594 Z_TagSetInfo *p, const char *name, int argi)
596 if (!ir_match_start (name, p, iea, ++argi))
598 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
599 ir_oid (iea, p->tagSet, "tagSet", argi);
600 ir_InternationalString (iea, p->name, "name", argi);
601 ir_HumanString (iea, p->description, "description", argi);
602 ir_sequence (ir_TagSetInfoElements, iea, p->elements,
603 &p->num_elements, "elements", argi);
604 return ir_match_end (name, iea, argi);
607 static int ir_RecordSyntaxInfo (IrExpArg *iea,
608 Z_RecordSyntaxInfo *p, const char *name, int argi)
610 if (!ir_match_start (name, p, iea, ++argi))
612 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
613 ir_oid (iea, p->recordSyntax, "recordSyntax", argi);
614 ir_InternationalString (iea, p->name, "name", argi);
615 ir_sequence (ir_oid, iea, p->transferSyntaxes,
616 &p->num_transferSyntaxes, "transferSyntaxes", argi);
617 ir_HumanString (iea, p->description, "description", argi);
618 ir_InternationalString (iea, p->asn1Module, "asn1Module", argi);
619 ir_sequence (ir_ElementInfo, iea, p->abstractStructure,
620 &p->num_abstractStructure, "abstractStructure", argi);
621 return ir_match_end (name, iea, argi);
624 static int ir_AttributeType (IrExpArg *iea,
625 Z_AttributeType *p, const char *name, int argi)
627 if (!ir_match_start (name, p, iea, ++argi))
629 ir_InternationalString (iea, p->name, "name", argi);
630 ir_HumanString (iea, p->description, "description", argi);
631 ir_integer (iea, p->attributeType, "attributeType", argi);
632 ir_sequence (ir_AttributeDescription, iea, p->attributeValues,
633 &p->num_attributeValues, "attributeValues", argi);
634 return ir_match_end (name, iea, argi);
637 static int ir_AttributeSetInfo (IrExpArg *iea,
638 Z_AttributeSetInfo *p, const char *name, int argi)
640 if (!ir_match_start (name, p, iea, ++argi))
642 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
643 ir_oid (iea, p->attributeSet, "attributeSet", argi);
644 ir_InternationalString (iea, p->name, "name", argi);
645 ir_sequence (ir_AttributeType, iea, p->attributes,
646 &p->num_attributes, "attributes", argi);
647 ir_HumanString (iea, p->description, "description", argi);
648 return ir_match_end (name, iea, argi);
651 static int ir_AttributeDescription (IrExpArg *iea,
652 Z_AttributeDescription *p, const char *name, int argi)
654 if (!ir_match_start (name, p, iea, ++argi))
656 ir_InternationalString (iea, p->name, "name", argi);
657 ir_HumanString (iea, p->description, "description", argi);
658 ir_StringOrNumeric (iea, p->attributeValue, "attributeValue", argi);
659 ir_sequence (ir_StringOrNumeric,iea, p->equivalentAttributes,
660 &p->num_equivalentAttributes, "equivalentAttributes", argi);
661 return ir_match_end (name, iea, argi);
664 static int ir_TermListElement (IrExpArg *iea,
665 Z_TermListElement *p, const char *name, int argi)
667 static IrExpChoice searchCostArm [] = {
668 { "optimized", Z_TermListInfo_optimized, ir_choice_nop },
669 { "normal", Z_TermListInfo_normal, ir_choice_nop },
670 { "expensive", Z_TermListInfo_expensive, ir_choice_nop },
671 { "filter", Z_TermListInfo_filter, ir_choice_nop },
673 ir_InternationalString (iea, p->name, "name", argi);
674 ir_HumanString (iea, p->title, "title", argi);
676 ir_choice (iea, searchCostArm, p->searchCost, ODR_NULLVAL, argi);
678 ir_bool (iea, p->scanable, "scanable", argi);
679 ir_sequence (ir_InternationalString, iea, p->broader,
680 &p->num_broader, "broader", argi);
681 ir_sequence (ir_InternationalString, iea, p->narrower,
682 &p->num_narrower, "narrower", argi);
683 return ir_match_end (name, iea, argi);
686 static int ir_TermListInfo (IrExpArg *iea,
687 Z_TermListInfo *p, const char *name, int argi)
689 if (!ir_match_start (name, p, iea, ++argi))
691 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
692 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
693 ir_sequence (ir_TermListElement, iea, p->termLists,
694 &p->num_termLists, "termLists", argi);
695 return ir_match_end (name, iea, argi);
698 static int ir_ExtendedServicesInfo (IrExpArg *iea,
699 Z_ExtendedServicesInfo *p, const char *name, int argi)
701 static IrExpChoice waitActionArm [] = {
702 { "waitSupported", Z_ExtendedServicesInfo_waitSupported,
704 { "waitAlways", Z_ExtendedServicesInfo_waitAlways,
706 { "waitNotSupported", Z_ExtendedServicesInfo_waitNotSupported,
708 { "depends", Z_ExtendedServicesInfo_depends,
710 { "notSaying", Z_ExtendedServicesInfo_notSaying,
714 ir_InternationalString (iea, p->name, "name", argi);
715 if (!ir_match_start (name, p, iea, ++argi))
717 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
718 ir_oid (iea, p->type, "type", argi);
719 ir_InternationalString (iea, p->name, "name", argi);
720 ir_bool (iea, p->privateType, "privateType", argi);
721 ir_bool (iea, p->restrictionsApply, "restrictionsApply", argi);
722 ir_bool (iea, p->feeApply, "feeApply", argi);
723 ir_bool (iea, p->available, "available", argi);
724 ir_bool (iea, p->retentionSupported, "retentionSupported", argi);
726 ir_choice (iea, waitActionArm, p->waitAction, ODR_NULLVAL, argi);
728 ir_HumanString (iea, p->description, "description", argi);
729 ir_External (iea, p->specificExplain, "specificExplain", argi);
730 ir_InternationalString (iea, p->esASN, "esASN", argi);
731 return ir_match_end (name, iea, argi);
734 static int ir_AttributeDetails (IrExpArg *iea,
735 Z_AttributeDetails *p, const char *name, int argi)
737 if (!ir_match_start (name, p, iea, ++argi))
739 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
740 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
741 ir_sequence (ir_AttributeSetDetails, iea, p->attributesBySet,
742 &p->num_attributesBySet, "attributesBySet", argi);
743 ir_AttributeCombinations (iea, p->attributeCombinations,
744 "attributeCombinations", argi);
745 return ir_match_end (name, iea, argi);
748 static int ir_AttributeSetDetails (IrExpArg *iea,
749 Z_AttributeSetDetails *p, const char *name, int argi)
751 if (!ir_match_start (name, p, iea, ++argi))
753 ir_oid (iea, p->attributeSet, "attributeSet", argi);
754 ir_sequence (ir_AttributeTypeDetails, iea, p->attributesByType,
755 &p->num_attributesByType, "attributesByType", argi);
756 return ir_match_end (name, iea, argi);
759 static int ir_AttributeTypeDetails (IrExpArg *iea,
760 Z_AttributeTypeDetails *p, const char *name, int argi)
762 if (!ir_match_start (name, p, iea, ++argi))
764 ir_integer (iea, p->attributeType, "attributeType", argi);
765 ir_OmittedAttributeInterpretation (iea, p->optionalType,
766 "optionalType", argi);
767 ir_sequence (ir_AttributeValue, iea, p->attributeValues,
768 &p->num_attributeValues, "attributeValues", argi);
769 return ir_match_end (name, iea, argi);
772 static int ir_OmittedAttributeInterpretation (IrExpArg *iea,
773 Z_OmittedAttributeInterpretation *p, const char *name, int argi)
775 if (!ir_match_start (name, p, iea, ++argi))
777 ir_StringOrNumeric (iea, p->defaultValue, "defaultValue", argi);
778 ir_HumanString (iea, p->defaultDescription, "defaultDescription", argi);
779 return ir_match_end (name, iea, argi);
782 static int ir_EScanInfo (IrExpArg *iea,
783 Z_EScanInfo *p, const char *name, int argi)
785 if (!ir_match_start (name, p, iea, ++argi))
787 ir_integer (iea, p->maxStepSize, "maxStepSize", argi);
788 ir_HumanString (iea, p->collatingSequence, "collatingSequence", argi);
789 ir_bool (iea, p->increasing, "increasing", argi);
790 return ir_match_end (name, iea, argi);
793 static int ir_TermListDetails (IrExpArg *iea,
794 Z_TermListDetails *p, const char *name, int argi)
796 if (!ir_match_start (name, p, iea, ++argi))
798 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
799 ir_InternationalString (iea, p->termListName, "termListName", argi);
800 ir_HumanString (iea, p->description, "description", argi);
801 ir_AttributeCombinations (iea, p->attributes, "attributes", argi);
803 ir_EScanInfo (iea, p->scanInfo, "scanInfo", argi);
805 ir_integer (iea, p->estNumberTerms, "estNumberTerms", argi);
806 ir_sequence (ir_Term, iea, p->sampleTerms,
807 &p->num_sampleTerms, "sampleTerms", argi);
808 return ir_match_end (name, iea, argi);
811 static int ir_ElementSetDetails (IrExpArg *iea,
812 Z_ElementSetDetails *p, const char *name, int argi)
814 if (!ir_match_start (name, p, iea, ++argi))
816 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
817 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
818 ir_ElementSetName (iea, p->elementSetName, "elementSetName", argi);
819 ir_oid (iea, p->recordSyntax, "recordSyntax", argi);
820 ir_oid (iea, p->schema, "schema", argi);
821 ir_HumanString (iea, p->description, "description", argi);
822 ir_sequence (ir_PerElementDetails, iea, p->detailsPerElement,
823 &p->num_detailsPerElement, "detailsPerElement", argi);
824 return ir_match_end (name, iea, argi);
827 static int ir_RetrievalRecordDetails (IrExpArg *iea,
828 Z_RetrievalRecordDetails *p, const char *name, int argi)
830 if (!ir_match_start (name, p, iea, ++argi))
832 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
833 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
834 ir_oid (iea, p->schema, "schema", argi);
835 ir_oid (iea, p->recordSyntax, "recordSyntax", argi);
836 ir_HumanString (iea, p->description, "description", argi);
837 ir_sequence (ir_PerElementDetails, iea, p->detailsPerElement,
838 &p->num_detailsPerElement, "detailsPerElement", argi);
839 return ir_match_end (name, iea, argi);
842 static int ir_PerElementDetails (IrExpArg *iea,
843 Z_PerElementDetails *p, const char *name, int argi)
845 if (!ir_match_start (name, p, iea, ++argi))
847 ir_InternationalString (iea, p->name, "name", argi);
848 ir_RecordTag (iea, p->recordTag, "recordTag", argi);
849 ir_sequence (ir_Path, iea, p->schemaTags,
850 &p->num_schemaTags, "schemaTags", argi);
851 ir_integer (iea, p->maxSize, "maxSize", argi);
852 ir_integer (iea, p->minSize, "minSize", argi);
853 ir_integer (iea, p->avgSize, "avgSize", argi);
854 ir_integer (iea, p->fixedSize, "fixedSize", argi);
855 ir_bool (iea, p->repeatable, "repeatable", argi);
856 ir_bool (iea, p->required, "required", argi);
857 ir_HumanString (iea, p->description, "description", argi);
858 ir_HumanString (iea, p->contents, "contents", argi);
859 ir_HumanString (iea, p->billingInfo, "billingInfo", argi);
860 ir_HumanString (iea, p->restrictions, "restrictions", argi);
861 ir_sequence (ir_InternationalString, iea, p->alternateNames,
862 &p->num_alternateNames, "alternateNames", argi);
863 ir_sequence (ir_InternationalString, iea, p->genericNames,
864 &p->num_genericNames, "genericNames", argi);
865 ir_AttributeCombinations (iea, p->searchAccess, "searchAccess", argi);
866 return ir_match_end (name, iea, argi);
869 static int ir_RecordTag (IrExpArg *iea,
870 Z_RecordTag *p, const char *name, int argi)
872 if (!ir_match_start (name, p, iea, ++argi))
874 ir_StringOrNumeric (iea, p->qualifier, "qualifier", argi);
875 ir_StringOrNumeric (iea, p->tagValue, "tagValue", argi);
876 return ir_match_end (name, iea, argi);
879 static int ir_SortDetails (IrExpArg *iea,
880 Z_SortDetails *p, const char *name, int argi)
882 if (!ir_match_start (name, p, iea, ++argi))
884 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
885 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
886 ir_sequence (ir_SortKeyDetails, iea, p->sortKeys,
887 &p->num_sortKeys, "sortKeys", argi);
888 return ir_match_end (name, iea, argi);
891 static int ir_SortKeyDetailsSortType (IrExpArg *iea,
892 Z_SortKeyDetailsSortType *p, const char *name, int argi)
894 static IrExpChoice sortArm [] = {
895 { "character", Z_SortKeyDetailsSortType_character,
897 { "numeric", Z_SortKeyDetailsSortType_numeric,
899 { "structured", Z_SortKeyDetailsSortType_structured,
902 return ir_choice (iea, sortArm, &p->which, p->u.character, argi);
905 static int ir_SortKeyDetails (IrExpArg *iea,
906 Z_SortKeyDetails *p, const char *name, int argi)
908 static IrExpChoice sortArm [] = {
909 { "always", Z_SortKeyDetails_always,
911 { "never", Z_SortKeyDetails_never,
913 { "defaultYes", Z_SortKeyDetails_defaultYes,
915 { "defaultNo", Z_SortKeyDetails_defaultNo,
919 if (!ir_match_start (name, p, iea, ++argi))
921 ir_HumanString (iea, p->description, "description", argi);
922 ir_sequence (ir_Specification, iea, p->elementSpecifications,
923 &p->num_elementSpecifications, "elementSpecifications", argi);
924 ir_AttributeCombinations (iea, p->attributeSpecifications,
925 "attributeSpecifications", argi);
926 ir_SortKeyDetailsSortType (iea, p->sortType, "sortType", argi);
928 if (p->caseSensitivity)
929 ir_choice (iea, sortArm, p->caseSensitivity, ODR_NULLVAL, argi);
931 return ir_match_end (name, iea, argi);
934 static int ir_ProcessingInformation (IrExpArg *iea,
935 Z_ProcessingInformation *p, const char *name, int argi)
937 IrExpChoice arm[] = {
938 { "access", Z_ProcessingInformation_access,
940 { "search", Z_ProcessingInformation_search,
942 { "retrieval", Z_ProcessingInformation_retrieval,
944 { "recordPresentation", Z_ProcessingInformation_recordPresentation,
946 { "recordHandling", Z_ProcessingInformation_recordHandling,
949 if (!ir_match_start (name, p, iea, ++argi))
951 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
952 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
954 ir_choice (iea, arm, p->processingContext, ODR_NULLVAL, argi);
955 ir_InternationalString (iea, p->name, "name", argi);
956 ir_oid (iea, p->oid, "oid", argi);
957 ir_HumanString (iea, p->description, "description", argi);
958 ir_External (iea, p->instructions, "instructions", argi);
959 return ir_match_end (name, iea, argi);
962 static int ir_VariantSetInfo (IrExpArg *iea,
963 Z_VariantSetInfo *p, const char *name, int argi)
965 if (!ir_match_start (name, p, iea, ++argi))
967 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
968 ir_oid (iea, p->variantSet, "variantSet", argi);
969 ir_InternationalString (iea, p->name, "name", argi);
970 ir_sequence (ir_VariantClass, iea, p->variants,
971 &p->num_variants, "variants", argi);
972 return ir_match_end (name, iea, argi);
975 static int ir_VariantClass (IrExpArg *iea,
976 Z_VariantClass *p, const char *name, int argi)
978 if (!ir_match_start (name, p, iea, ++argi))
980 ir_InternationalString (iea, p->name, "name", argi);
981 ir_HumanString (iea, p->description, "description", argi);
982 ir_integer (iea, p->variantClass, "variantClass", argi);
983 ir_sequence (ir_VariantType, iea, p->variantTypes,
984 &p->num_variantTypes, "variantTypes", argi);
985 return ir_match_end (name, iea, argi);
988 static int ir_VariantType (IrExpArg *iea,
989 Z_VariantType *p, const char *name, int argi)
991 if (!ir_match_start (name, p, iea, ++argi))
993 ir_InternationalString (iea, p->name, "name", argi);
994 ir_HumanString (iea, p->description, "description", argi);
995 ir_integer (iea, p->variantType, "variantType", argi);
996 ir_VariantValue (iea, p->variantValue, "variantValue", argi);
997 return ir_match_end (name, iea, argi);
1000 static int ir_ValueSetEnumerated (IrExpArg *iea,
1001 Z_ValueSetEnumerated *p, const char *name, int argi)
1003 if (!ir_match_start (name, p, iea, ++argi))
1005 ir_sequence (ir_ValueDescription, iea, p->enumerated,
1006 &p->num_enumerated, "enumerated", argi);
1007 return ir_match_end (name, iea, argi);
1010 static int ir_ValueSet (IrExpArg *iea,
1011 Z_ValueSet *p, const char *name, int argi)
1013 IrExpChoice arm [] = {
1014 { "range", Z_ValueSet_range, ir_ValueRange },
1015 { "enumerated", Z_ValueSet_enumerated, ir_ValueSetEnumerated },
1017 if (!ir_match_start (name, p, iea, ++argi))
1019 ir_choice (iea, arm, &p->which, p->u.range, argi);
1020 return ir_match_end (name, iea, argi);
1023 static int ir_VariantValue (IrExpArg *iea,
1024 Z_VariantValue *p, const char *name, int argi)
1026 if (!ir_match_start (name, p, iea, ++argi))
1028 ir_PrimitiveDataType (iea, p->dataType, "dataType", argi);
1030 ir_ValueSet (iea, p->values, "values", argi);
1031 return ir_match_end (name, iea, argi);
1034 static int ir_ValueRange (IrExpArg *iea,
1035 Z_ValueRange *p, const char *name, int argi)
1037 if (!ir_match_start (name, p, iea, ++argi))
1039 ir_ValueDescription (iea, p->lower, "lower", argi);
1040 ir_ValueDescription (iea, p->upper, "upper", argi);
1041 return ir_match_end (name, iea, argi);
1044 static int ir_ValueDescription (IrExpArg *iea,
1045 Z_ValueDescription *p, const char *name, int argi)
1047 static IrExpChoice arm [] = {
1048 { "integer", Z_ValueDescription_integer, ir_integer },
1049 { "string", Z_ValueDescription_string, ir_InternationalString},
1050 { "octets", Z_ValueDescription_octets, ir_octet},
1051 { "oid", Z_ValueDescription_oid, ir_oid},
1052 { "unit", Z_ValueDescription_unit, ir_Unit},
1053 { "valueAndUnit", Z_ValueDescription_valueAndUnit, ir_IntUnit},
1056 if (!ir_match_start (name, p, iea, ++argi))
1058 ir_choice (iea, arm, &p->which, p->u.integer, argi);
1059 return ir_match_end (name, iea, argi);
1062 static int ir_UnitInfo (IrExpArg *iea,
1063 Z_UnitInfo *p, const char *name, int argi)
1065 if (!ir_match_start (name, p, iea, ++argi))
1067 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
1068 ir_InternationalString (iea, p->unitSystem, "unitSystem", argi);
1069 ir_HumanString (iea, p->description, "description", argi);
1070 ir_sequence (ir_UnitType, iea, p->units,
1071 &p->num_units, "units", argi);
1072 return ir_match_end (name, iea, argi);
1075 static int ir_UnitType (IrExpArg *iea,
1076 Z_UnitType *p, const char *name, int argi)
1078 if (!ir_match_start (name, p, iea, ++argi))
1080 ir_InternationalString (iea, p->name, "name", argi);
1081 ir_HumanString (iea, p->description, "description", argi);
1082 ir_StringOrNumeric (iea, p->unitType, "unitType", argi);
1083 ir_sequence (ir_Units, iea, p->units, &p->num_units, "units", argi);
1084 return ir_match_end (name, iea, argi);
1087 static int ir_Units (IrExpArg *iea,
1088 Z_Units *p, const char *name, int argi)
1090 if (!ir_match_start (name, p, iea, ++argi))
1092 ir_InternationalString (iea, p->name, "name", argi);
1093 ir_HumanString (iea, p->description, "description", argi);
1094 ir_StringOrNumeric (iea, p->unit, "unit", argi);
1095 return ir_match_end (name, iea, argi);
1098 static int ir_CategoryList (IrExpArg *iea,
1099 Z_CategoryList *p, const char *name, int argi)
1101 if (!ir_match_start (name, p, iea, ++argi))
1103 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
1104 ir_sequence (ir_CategoryInfo, iea, p->categories,
1105 &p->num_categories, "categories", argi);
1106 return ir_match_end (name, iea, argi);
1109 static int ir_CategoryInfo (IrExpArg *iea,
1110 Z_CategoryInfo *p, const char *name, int argi)
1112 if (!ir_match_start (name, p, iea, ++argi))
1114 ir_InternationalString (iea, p->category, "category", argi);
1115 ir_InternationalString (iea, p->originalCategory, "originalCategory", argi);
1116 ir_HumanString (iea, p->description, "description", argi);
1117 ir_InternationalString (iea, p->asn1Module, "asn1Module", argi);
1118 return ir_match_end (name, iea, argi);
1121 static int ir_CommonInfo (IrExpArg *iea,
1122 Z_CommonInfo *p, const char *name, int argi)
1124 if (!ir_match_start (name, p, iea, ++argi))
1126 ir_GeneralizedTime (iea, p->dateAdded, "dateAdded", argi);
1127 ir_GeneralizedTime (iea, p->dateChanged, "dateChanged", argi);
1128 ir_GeneralizedTime (iea, p->expiry, "expiry", argi);
1129 ir_LanguageCode (iea, p->humanStringLanguage, "humanString-Language",
1131 ir_OtherInformation (iea, p->otherInfo, "otherInfo", argi);
1132 return ir_match_end (name, iea, argi);
1135 static int ir_HumanStringUnit (IrExpArg *iea,
1136 Z_HumanStringUnit *p, const char *name, int argi)
1138 if (!ir_match_start (name, p, iea, ++argi))
1140 ir_LanguageCode (iea, p->language, "language", argi);
1141 ir_InternationalString (iea, p->text, "text", argi);
1142 return ir_match_end (name, iea, argi);
1145 static int ir_HumanString (IrExpArg *iea,
1146 Z_HumanString *p, const char *name, int argi)
1148 if (!ir_match_start (name, p, iea, ++argi))
1150 ir_sequence (ir_HumanStringUnit, iea, p->strings,
1151 &p->num_strings, "strings", argi);
1152 return ir_match_end (name, iea, argi);
1155 static int ir_IconObjectUnit (IrExpArg *iea,
1156 Z_IconObjectUnit *p, const char *name, int argi)
1158 static IrExpChoice arm [] = {
1159 { "ianaType", Z_IconObject_ianaType, ir_choice_nop },
1160 { "z3950type", Z_IconObject_z3950type, ir_choice_nop },
1161 { "otherType", Z_IconObject_otherType, ir_choice_nop },
1163 if (!ir_match_start (name, p, iea, ++argi))
1165 ir_choice (iea, arm, &p->which, ODR_NULLVAL, argi);
1166 ir_InternationalString (iea, p->bodyType, "bodyType", argi);
1167 ir_octet (iea, p->content, "content", argi);
1168 return ir_match_end (name, iea, argi);
1171 static int ir_IconObject (IrExpArg *iea,
1172 Z_IconObject *p, const char *name, int argi)
1174 if (!ir_match_start (name, p, iea, ++argi))
1176 ir_sequence (ir_IconObjectUnit, iea, p->iconUnits,
1177 &p->num_iconUnits, "iconUnits", argi);
1178 return ir_match_end (name, iea, argi);
1181 static int ir_ContactInfo (IrExpArg *iea,
1182 Z_ContactInfo *p, const char *name, int argi)
1184 if (!ir_match_start (name, p, iea, ++argi))
1186 ir_InternationalString (iea, p->name, "name", argi);
1187 ir_HumanString (iea, p->description, "description", argi);
1188 ir_HumanString (iea, p->address, "address", argi);
1189 ir_InternationalString (iea, p->email, "email", argi);
1190 ir_InternationalString (iea, p->phone, "phone", argi);
1191 return ir_match_end (name, iea, argi);
1194 static int ir_NetworkAddressIA (IrExpArg *iea,
1195 Z_NetworkAddressIA *p, const char *name, int argi)
1197 if (!ir_match_start (name, p, iea, ++argi))
1199 ir_InternationalString (iea, p->hostAddress, "hostAddress", argi);
1200 ir_integer (iea, p->port, "port", argi);
1201 return ir_match_end (name, iea, argi);
1204 static int ir_NetworkAddressOPA (IrExpArg *iea,
1205 Z_NetworkAddressOPA *p, const char *name, int argi)
1207 if (!ir_match_start (name, p, iea, ++argi))
1209 ir_InternationalString (iea, p->pSel, "pSel", argi);
1210 ir_InternationalString (iea, p->sSel, "sSel", argi);
1211 ir_InternationalString (iea, p->tSel, "tSel", argi);
1212 ir_InternationalString (iea, p->nSap, "nSap", argi);
1213 return ir_match_end (name, iea, argi);
1216 static int ir_NetworkAddressOther (IrExpArg *iea,
1217 Z_NetworkAddressOther *p, const char *name, int argi)
1219 if (!ir_match_start (name, p, iea, ++argi))
1221 ir_InternationalString (iea, p->type, "type", argi);
1222 ir_InternationalString (iea, p->address, "address", argi);
1223 return ir_match_end (name, iea, argi);
1226 static int ir_NetworkAddress (IrExpArg *iea,
1227 Z_NetworkAddress *p, const char *name, int argi)
1229 IrExpChoice arm [] = {
1230 { "iA", Z_NetworkAddress_iA, ir_NetworkAddressIA },
1231 { "oPA", Z_NetworkAddress_oPA, ir_NetworkAddressOPA },
1232 { "other", Z_NetworkAddress_other, ir_NetworkAddressOther },
1234 if (!ir_match_start (name, p, iea, ++argi))
1236 ir_choice (iea, arm, &p->which, p->u.internetAddress, argi);
1237 return ir_match_end (name, iea, argi);
1240 static int ir_AccessInfo (IrExpArg *iea,
1241 Z_AccessInfo *p, const char *name, int argi)
1243 if (!ir_match_start (name, p, iea, ++argi))
1245 ir_sequence (ir_QueryTypeDetails, iea, p->queryTypesSupported,
1246 &p->num_queryTypesSupported, "queryTypesSupported", argi);
1247 ir_sequence (ir_oid, iea, p->diagnosticsSets,
1248 &p->num_diagnosticsSets, "diagnosticsSets", argi);
1249 ir_sequence (ir_oid, iea, p->attributeSetIds,
1250 &p->num_attributeSetIds, "attributeSetIds", argi);
1251 ir_sequence (ir_oid, iea, p->schemas,
1252 &p->num_schemas, "schemas", argi);
1253 ir_sequence (ir_oid, iea, p->recordSyntaxes,
1254 &p->num_recordSyntaxes, "recordSyntaxes", argi);
1255 ir_sequence (ir_oid, iea, p->resourceChallenges,
1256 &p->num_resourceChallenges, "resourceChallenges", argi);
1257 ir_AccessRestrictions (iea, p->restrictedAccess, "restrictedAccess", argi);
1258 ir_Costs (iea, p->costInfo, "costInfo", argi);
1259 ir_sequence (ir_oid, iea, p->variantSets,
1260 &p->num_variantSets, "variantSets", argi);
1261 ir_sequence (ir_ElementSetName, iea, p->elementSetNames,
1262 &p->num_elementSetNames, "elementSetNames", argi);
1263 ir_sequence (ir_InternationalString, iea, p->unitSystems,
1264 &p->num_unitSystems, "unitSystems", argi);
1265 return ir_match_end (name, iea, argi);
1269 static int ir_QueryTypeDetails (IrExpArg *iea,
1270 Z_QueryTypeDetails *p, const char *name, int argi)
1272 static IrExpChoice arm[] = {
1273 { "private", Z_QueryTypeDetails_private,
1274 ir_PrivateCapabilities },
1275 { "rpn", Z_QueryTypeDetails_rpn,
1276 ir_RpnCapabilities },
1277 { "iso8777", Z_QueryTypeDetails_iso8777,
1278 ir_Iso8777Capabilities },
1279 { "z3958", Z_QueryTypeDetails_z3958,
1281 { "erpn", Z_QueryTypeDetails_erpn,
1282 ir_RpnCapabilities },
1283 { "rankedList", Z_QueryTypeDetails_rankedList,
1287 if (!ir_match_start (name, p, iea, ++argi))
1289 ir_choice (iea, arm, &p->which, p->u.zprivate, argi);
1290 return ir_match_end (name, iea, argi);
1293 static int ir_PrivateCapOperator (IrExpArg *iea,
1294 Z_PrivateCapOperator *p, const char *name, int argi)
1296 if (!ir_match_start (name, p, iea, ++argi))
1298 ir_InternationalString (iea, p->roperator, "operator", argi);
1299 ir_HumanString (iea, p->description, "description", argi);
1300 return ir_match_end (name, iea, argi);
1303 static int ir_PrivateCapabilities (IrExpArg *iea,
1304 Z_PrivateCapabilities *p, const char *name, int argi)
1306 if (!ir_match_start (name, p, iea, ++argi))
1309 ir_sequence (ir_PrivateCapOperator, iea, p->operators,
1310 &p->num_operators, "operators", argi);
1311 ir_sequence (ir_SearchKey, iea, p->searchKeys,
1312 &p->num_searchKeys, "searchKeys", argi);
1313 ir_sequence (ir_HumanString, iea, p->description,
1314 &p->num_description, "description", argi);
1315 return ir_match_end (name, iea, argi);
1318 static int ir_RpnCapabilities (IrExpArg *iea,
1319 Z_RpnCapabilities *p, const char *name, int argi)
1321 if (!ir_match_start (name, p, iea, ++argi))
1323 ir_sequence (ir_integer, iea, p->operators,
1324 &p->num_operators, "operators", argi);
1325 ir_bool (iea, p->resultSetAsOperandSupported,
1326 "resultSetAsOperandSupported", argi);
1327 ir_bool (iea, p->restrictionOperandSupported,
1328 "restrictionOperandSupported", argi);
1329 ir_ProximitySupport (iea, p->proximity, "proximity", argi);
1330 return ir_match_end (name, iea, argi);
1333 static int ir_Iso8777Capabilities (IrExpArg *iea,
1334 Z_Iso8777Capabilities *p, const char *name, int argi)
1336 if (!ir_match_start (name, p, iea, ++argi))
1338 ir_sequence (ir_SearchKey, iea, p->searchKeys,
1339 &p->num_searchKeys, "searchKeys", argi);
1340 ir_HumanString (iea, p->restrictions, "restrictions", argi);
1341 return ir_match_end (name, iea, argi);
1344 static int ir_ProxSupportPrivate (IrExpArg *iea,
1345 Z_ProxSupportPrivate *p, const char *name, int argi)
1347 if (!ir_match_start (name, p, iea, ++argi))
1349 ir_integer (iea, p->unit, "unit", argi);
1350 ir_HumanString (iea, p->description, "description", argi);
1351 return ir_match_end (name, iea, argi);
1354 static int ir_ProxSupportUnit (IrExpArg *iea,
1355 Z_ProxSupportUnit *p, const char *name, int argi)
1357 static IrExpChoice arm [] = {
1358 { "known", Z_ProxSupportUnit_known, ir_integer },
1359 { "private", Z_ProxSupportUnit_private, ir_ProxSupportPrivate },
1361 if (!ir_match_start (name, p, iea, ++argi))
1363 ir_choice (iea, arm, &p->which, p->u.zprivate, argi);
1364 return ir_match_end (name, iea, argi);
1367 static int ir_ProximitySupport (IrExpArg *iea,
1368 Z_ProximitySupport *p, const char *name, int argi)
1370 if (!ir_match_start (name, p, iea, ++argi))
1372 ir_bool (iea, p->anySupport, "anySupport", argi);
1373 ir_sequence (ir_ProxSupportUnit, iea, p->unitsSupported,
1374 &p->num_unitsSupported, "unitsSupported", argi);
1375 return ir_match_end (name, iea, argi);
1378 static int ir_SearchKey (IrExpArg *iea,
1379 Z_SearchKey *p, const char *name, int argi)
1381 if (!ir_match_start (name, p, iea, ++argi))
1383 ir_InternationalString (iea, p->searchKey, "searchKey", argi);
1384 ir_HumanString (iea, p->description, "description", argi);
1385 return ir_match_end (name, iea, argi);
1388 static int ir_AccessRestrictionsUnit (IrExpArg *iea,
1389 Z_AccessRestrictionsUnit *p, const char *name, int argi)
1391 static IrExpChoice arm[] = {
1392 { "any", Z_AccessRestrictions_any,
1394 { "search", Z_AccessRestrictions_search,
1396 { "present", Z_AccessRestrictions_present,
1398 { "specificElements", Z_AccessRestrictions_specific_elements,
1400 { "extendedServices", Z_AccessRestrictions_extended_services,
1402 { "byDatabase", Z_AccessRestrictions_by_database,
1406 if (!ir_match_start (name, p, iea, ++argi))
1408 ir_choice (iea, arm, p->accessType, ODR_NULLVAL, argi);
1409 ir_HumanString (iea, p->accessText, "accessText", argi);
1410 ir_sequence (ir_oid, iea, p->accessChallenges,
1411 &p->num_accessChallenges, "accessChallenges", argi);
1412 return ir_match_end (name, iea, argi);
1415 static int ir_AccessRestrictions (IrExpArg *iea,
1416 Z_AccessRestrictions *p, const char *name, int argi)
1418 if (!ir_match_start (name, p, iea, ++argi))
1420 ir_sequence (ir_AccessRestrictionsUnit, iea, p->restrictions,
1421 &p->num_restrictions, "restrictions", argi);
1422 return ir_match_end (name, iea, argi);
1425 static int ir_CostsOtherCharge (IrExpArg *iea,
1426 Z_CostsOtherCharge *p, const char *name, int argi)
1428 if (!ir_match_start (name, p, iea, ++argi))
1430 ir_HumanString (iea, p->forWhat, "forWhat", argi);
1431 ir_Charge (iea, p->charge, "charge", argi);
1432 return ir_match_end (name, iea, argi);
1435 static int ir_Costs (IrExpArg *iea,
1436 Z_Costs *p, const char *name, int argi)
1438 if (!ir_match_start (name, p, iea, ++argi))
1440 ir_Charge (iea, p->connectCharge, "connectCharge", argi);
1441 ir_Charge (iea, p->connectTime, "connectTime", argi);
1442 ir_Charge (iea, p->displayCharge, "displayCharge", argi);
1443 ir_Charge (iea, p->searchCharge, "searchCharge", argi);
1444 ir_Charge (iea, p->subscriptCharge, "subscriptCharge", argi);
1446 ir_sequence (ir_CostsOtherCharge, iea, p->otherCharges,
1447 &p->num_otherCharges, "otherCharges", argi);
1448 return ir_match_end (name, iea, argi);
1451 static int ir_Charge (IrExpArg *iea,
1452 Z_Charge *p, const char *name, int argi)
1454 if (!ir_match_start (name, p, iea, ++argi))
1456 ir_IntUnit (iea, p->cost, "cost", argi);
1457 ir_Unit (iea, p->perWhat, "perWhat", argi);
1458 ir_HumanString (iea, p->text, "text", argi);
1459 return ir_match_end (name, iea, argi);
1462 static int ir_DatabaseList (IrExpArg *iea,
1463 Z_DatabaseList *p, const char *name, int argi)
1465 if (!ir_match_start (name, p, iea, ++argi))
1467 ir_sequence (ir_DatabaseName, iea, p->databases,
1468 &p->num_databases, "databases", argi);
1469 return ir_match_end (name, iea, argi);
1472 static int ir_AttributeCombinations (IrExpArg *iea,
1473 Z_AttributeCombinations *p, const char *name, int argi)
1475 if (!ir_match_start (name, p, iea, ++argi))
1477 ir_oid (iea, p->defaultAttributeSet, "defaultAttributeSet", argi);
1478 ir_sequence (ir_AttributeCombination, iea, p->legalCombinations,
1479 &p->num_legalCombinations, "legalCombinations", argi);
1480 return ir_match_end (name, iea, argi);
1483 static int ir_AttributeCombination (IrExpArg *iea,
1484 Z_AttributeCombination *p, const char *name, int argi)
1486 if (!ir_match_start (name, p, iea, ++argi))
1488 ir_sequence (ir_AttributeOccurrence, iea, p->occurrences,
1489 &p->num_occurrences, "occurrences", argi);
1490 return ir_match_end (name, iea, argi);
1493 static int ir_AttributeValueList (IrExpArg *iea,
1494 Z_AttributeValueList *p, const char *name, int argi)
1496 if (!ir_match_start (name, p, iea, ++argi))
1498 ir_sequence (ir_StringOrNumeric, iea, p->attributes,
1499 &p->num_attributes, "attributes", argi);
1500 return ir_match_end (name, iea, argi);
1503 static int ir_AttributeOccurrence (IrExpArg *iea,
1504 Z_AttributeOccurrence *p, const char *name, int argi)
1506 static IrExpChoice arm [] = {
1507 { "anyOrNone", Z_AttributeOcc_anyOrNone, ir_null },
1508 { "specific", Z_AttributeOcc_specific, ir_AttributeValueList },
1509 { NULL, 0, NULL } };
1510 if (!ir_match_start (name, p, iea, ++argi))
1512 ir_oid (iea, p->attributeSet, "attributeSet", argi);
1513 ir_integer (iea, p->attributeType, "attributeType", argi);
1514 ir_null (iea, p->mustBeSupplied, "mustBeSupplied", argi);
1515 ir_choice (iea, arm, &p->which, p->attributeValues.anyOrNone, argi);
1516 return ir_match_end (name, iea, argi);
1519 static int ir_AttributeValue (IrExpArg *iea,
1520 Z_AttributeValue *p, const char *name, int argi)
1522 if (!ir_match_start (name, p, iea, ++argi))
1524 ir_StringOrNumeric (iea, p->value, "value", argi);
1525 ir_HumanString (iea, p->description, "description", argi);
1526 ir_sequence (ir_StringOrNumeric, iea, p->subAttributes,
1527 &p->num_subAttributes, "subAttributes", argi);
1528 ir_sequence (ir_StringOrNumeric, iea, p->superAttributes,
1529 &p->num_superAttributes, "superAttributes", argi);
1530 ir_null (iea, p->partialSupport, "partialSupport", argi);
1531 return ir_match_end (name, iea, argi);
1534 static int ir_StringOrNumeric (IrExpArg *iea,
1535 Z_StringOrNumeric *p, const char *name, int argi)
1537 IrExpChoice arm[] = {
1538 { "string", Z_StringOrNumeric_string, ir_InternationalString },
1539 { "numeric", Z_StringOrNumeric_numeric, ir_integer },
1541 if (!ir_match_start (name, p, iea, ++argi))
1543 ir_choice (iea, arm, &p->which, p->u.string, argi);
1544 return ir_match_end (name, iea, argi);
1547 static int ir_ElementSpec (IrExpArg *iea,
1548 Z_ElementSpec *p, const char *name, int argi)
1550 static IrExpChoice arm[] = {
1551 { "elementSetName", Z_ElementSpec_elementSetName,
1552 ir_InternationalString },
1553 { "externalSpec", Z_ElementSpec_externalSpec,
1557 if (!ir_match_start (name, p, iea, ++argi))
1559 ir_choice (iea, arm, &p->which, p->u.elementSetName, argi);
1560 return ir_match_end (name, iea, argi);
1563 static int ir_Specification (IrExpArg *iea,
1564 Z_Specification *p, const char *name, int argi)
1566 if (!ir_match_start (name, p, iea, ++argi))
1568 ir_oid (iea, p->schema, "schema", argi);
1569 ir_ElementSpec (iea, p->elementSpec, "elementSpec", argi);
1570 return ir_match_end (name, iea, argi);
1573 static int ir_InfoCategory (IrExpArg *iea,
1574 Z_InfoCategory *p, const char *name, int argi)
1576 if (!ir_match_start (name, p, iea, ++argi))
1578 ir_oid (iea, p->categoryTypeId, "categoryTypeId", argi);
1579 ir_integer (iea, p->categoryValue, "categoryValue", argi);
1580 return ir_match_end (name, iea, argi);
1583 static int ir_OtherInformationUnit (IrExpArg *iea,
1584 Z_OtherInformationUnit *p, const char *name, int argi)
1586 static IrExpChoice arm[] = {
1587 { "characterInfo", Z_OtherInfo_characterInfo,
1588 ir_InternationalString },
1589 { "binaryInfo", Z_OtherInfo_binaryInfo,
1591 { "externallyDefinedInfo", Z_OtherInfo_externallyDefinedInfo,
1593 { "oid", Z_OtherInfo_oid,
1597 if (!ir_match_start (name, p, iea, ++argi))
1599 ir_InfoCategory (iea, p->category, "category", argi);
1600 ir_choice (iea, arm, &p->which, p->information.characterInfo, argi);
1601 return ir_match_end (name, iea, argi);
1604 static int ir_OtherInformation (IrExpArg *iea,
1605 Z_OtherInformation *p, const char *name, int argi)
1607 if (!ir_match_start (name, p, iea, ++argi))
1609 ir_sequence (ir_OtherInformationUnit, iea, p->list,
1610 &p->num_elements, "list", argi);
1611 return ir_match_end (name, iea, argi);
1614 static int ir_IntUnit (IrExpArg *iea,
1615 Z_IntUnit *p, const char *name, int argi)
1617 if (!ir_match_start (name, p, iea, ++argi))
1619 ir_integer (iea, p->value, "value", argi);
1620 ir_Unit (iea, p->unitUsed, "unitUsed", argi);
1621 return ir_match_end (name, iea, argi);
1624 static int ir_Unit (IrExpArg *iea,
1625 Z_Unit *p, const char *name, int argi)
1627 if (!ir_match_start (name, p, iea, ++argi))
1629 ir_InternationalString (iea, p->unitSystem, "unitSystem", argi);
1630 ir_StringOrNumeric (iea, p->unitType, "unitType", argi);
1631 ir_StringOrNumeric (iea, p->unit, "unit", argi);
1632 ir_integer (iea, p->scaleFactor, "scaleFactor", argi);
1633 return ir_match_end (name, iea, argi);
1636 int ir_ExplainRecord (IrExpArg *iea, Z_ExplainRecord *p, int argi)
1638 static IrExpChoice arm[] = {
1639 {"targetInfo", Z_Explain_targetInfo,
1641 {"databaseInfo", Z_Explain_databaseInfo,
1643 {"schemaInfo", Z_Explain_schemaInfo,
1645 {"tagSetInfo", Z_Explain_tagSetInfo,
1647 {"recordSyntaxInfo", Z_Explain_recordSyntaxInfo,
1648 ir_RecordSyntaxInfo},
1649 {"attributeSetInfo", Z_Explain_attributeSetInfo,
1650 ir_AttributeSetInfo},
1651 {"termListInfo", Z_Explain_termListInfo,
1653 {"extendedServicesInfo", Z_Explain_extendedServicesInfo,
1654 ir_ExtendedServicesInfo},
1655 {"attributeDetails", Z_Explain_attributeDetails,
1656 ir_AttributeDetails},
1657 {"termListDetails", Z_Explain_termListDetails,
1658 ir_TermListDetails},
1659 {"elementSetDetails", Z_Explain_elementSetDetails,
1660 ir_ElementSetDetails},
1661 {"retrievalRecordDetails", Z_Explain_retrievalRecordDetails,
1662 ir_RetrievalRecordDetails},
1663 {"sortDetails", Z_Explain_sortDetails,
1665 {"processing", Z_Explain_processing,
1666 ir_ProcessingInformation},
1667 {"variants", Z_Explain_variants,
1669 {"units", Z_Explain_units,
1671 {"categoryList", Z_Explain_categoryList,
1676 return ir_choice (iea, arm, &p->which, p->u.targetInfo, argi);
1679 int ir_tcl_get_explain (Tcl_Interp *interp, Z_ExplainRecord *rec,
1680 int argc, char **argv)
1686 iea.interp = interp;
1688 return ir_ExplainRecord (&iea, rec, 2);