2 * IR toolkit for tcl/tk
4 * See the file LICENSE for details.
5 * Sebastian Hammer, Adam Dickmeiss
8 * Revision 1.6 1997-05-14 06:57:14 adam
9 * Adopted to use YAZ with C++ support.
11 * Revision 1.5 1996/08/23 11:59:47 adam
12 * Bug fix: infinite look in ir_oid.
14 * Revision 1.4 1996/08/22 13:39:31 adam
15 * More work on explain.
17 * Revision 1.3 1996/08/21 13:32:50 adam
18 * Implemented saveFile method and extended loadFile method to work with it.
20 * Revision 1.2 1996/08/20 09:27:48 adam
21 * More work on explain.
22 * Renamed tkinit.c to tkmain.c. The tcl shell uses the Tcl 7.5 interface
23 * for socket i/o instead of the handcrafted one (for Tcl 7.3 and Tcl7.4).
25 * Revision 1.1 1996/08/16 15:07:43 adam
26 * First work on Explain.
49 typedef char *Z_ElementSetName;
50 typedef Odr_oid *Z_AttributeSetId;
51 typedef char *Z_InternationalString;
52 typedef char *Z_LanguageCode;
54 static int ir_UnitType (IrExpArg *iea,
55 Z_UnitType *p, const char *name, int argi);
56 static int ir_Unit (IrExpArg *iea,
57 Z_Unit *p, const char *name, int argi);
58 static int ir_VariantType (IrExpArg *iea,
59 Z_VariantType *p, const char *name, int argi);
60 static int ir_OmittedAttributeInterpretation (IrExpArg *iea,
61 Z_OmittedAttributeInterpretation *p, const char *name, int argi);
62 static int ir_AttributeTypeDetails (IrExpArg *iea,
63 Z_AttributeTypeDetails *p, const char *name, int argi);
64 static int ir_Specification (IrExpArg *iea,
65 Z_Specification *p, const char *name, int argi);
66 static int ir_RetrievalRecordDetails (IrExpArg *iea,
67 Z_RetrievalRecordDetails *p, const char *name, int argi);
68 static int ir_ElementInfo (IrExpArg *iea,
69 Z_ElementInfo *p, const char *name, int argi);
70 static int ir_InternationalString (IrExpArg *iea,
71 char *p, const char *name, int argi);
72 static int ir_TagSetInfo (IrExpArg *iea,
73 Z_TagSetInfo *p, const char *name, int argi);
74 static int ir_DatabaseName (IrExpArg *iea,
75 char *p, const char *name, int argi);
76 static int ir_AccessInfo (IrExpArg *iea,
77 Z_AccessInfo *p, const char *name, int argi);
78 static int ir_bool (IrExpArg *iea,
79 bool_t *p, const char *name, int argi);
80 static int ir_LanguageCode (IrExpArg *iea,
81 char *p, const char *name, int argi);
82 static int ir_Units (IrExpArg *iea,
83 Z_Units *p, const char *name, int argi);
84 static int ir_SortDetails (IrExpArg *iea,
85 Z_SortDetails *p, const char *name, int argi);
86 static int ir_ElementSetDetails (IrExpArg *iea,
87 Z_ElementSetDetails *p, const char *name, int argi);
88 static int ir_TermListDetails (IrExpArg *iea,
89 Z_TermListDetails *p, const char *name, int argi);
90 static int ir_AttributeValue (IrExpArg *iea,
91 Z_AttributeValue *p, const char *name, int argi);
92 static int ir_ElementDataType (IrExpArg *iea,
93 Z_ElementDataType *p, const char *name, int argi);
94 static int ir_ProximitySupport (IrExpArg *iea,
95 Z_ProximitySupport *p, const char *name, int argi);
96 static int ir_ProcessingInformation (IrExpArg *iea,
97 Z_ProcessingInformation *p, const char *name, int argi);
98 static int ir_AttributeCombinations (IrExpArg *iea,
99 Z_AttributeCombinations *p, const char *name, int argi);
100 static int ir_AttributeSetDetails (IrExpArg *iea,
101 Z_AttributeSetDetails *p, const char *name, int argi);
102 static int ir_DatabaseInfo (IrExpArg *iea,
103 Z_DatabaseInfo *p, const char *name, int argi);
104 static int ir_IconObject (IrExpArg *iea,
105 Z_IconObject *p, const char *name, int argi);
106 static int ir_RpnCapabilities (IrExpArg *iea,
107 Z_RpnCapabilities *p, const char *name, int argi);
108 static int ir_QueryTypeDetails (IrExpArg *iea,
109 Z_QueryTypeDetails *p, const char *name, int argi);
110 static int ir_ValueDescription (IrExpArg *iea,
111 Z_ValueDescription *p, const char *name, int argi);
112 static int ir_AttributeSetInfo (IrExpArg *iea,
113 Z_AttributeSetInfo *p, const char *name, int argi);
114 static int ir_SchemaInfo (IrExpArg *iea,
115 Z_SchemaInfo *p, const char *name, int argi);
116 static int ir_AttributeOccurrence (IrExpArg *iea,
117 Z_AttributeOccurrence *p, const char *name, int argi);
118 static int ir_AttributeCombination (IrExpArg *iea,
119 Z_AttributeCombination *p, const char *name, int argi);
120 static int ir_UnitInfo (IrExpArg *iea,
121 Z_UnitInfo *p, const char *name, int argi);
122 static int ir_VariantClass (IrExpArg *iea,
123 Z_VariantClass *p, const char *name, int argi);
124 static int ir_VariantSetInfo (IrExpArg *iea,
125 Z_VariantSetInfo *p, const char *name, int argi);
126 static int ir_RecordTag (IrExpArg *iea,
127 Z_RecordTag *p, const char *name, int argi);
128 static int ir_TermListInfo (IrExpArg *iea,
129 Z_TermListInfo *p, const char *name, int argi);
130 static int ir_StringOrNumeric (IrExpArg *iea,
131 Z_StringOrNumeric *p, const char *name, int argi);
132 static int ir_CategoryInfo (IrExpArg *iea,
133 Z_CategoryInfo *p, const char *name, int argi);
134 static int ir_ValueRange (IrExpArg *iea,
135 Z_ValueRange *p, const char *name, int argi);
136 static int ir_Term (IrExpArg *iea,
137 Z_Term *p, const char *name, int argi);
138 static int ir_DatabaseList (IrExpArg *iea,
139 Z_DatabaseList *p, const char *name, int argi);
140 static int ir_HumanString (IrExpArg *iea,
141 Z_HumanString *p, const char *name, int argi);
142 static int ir_CommonInfo (IrExpArg *iea,
143 Z_CommonInfo *p, const char *name, int argi);
144 static int ir_NetworkAddress (IrExpArg *iea,
145 Z_NetworkAddress *p, const char *name, int argi);
146 static int ir_Costs (IrExpArg *iea,
147 Z_Costs *p, const char *name, int argi);
148 static int ir_RecordSyntaxInfo (IrExpArg *iea,
149 Z_RecordSyntaxInfo *p, const char *name, int argi);
150 static int ir_OtherInformation (IrExpArg *iea,
151 Z_OtherInformation *p, const char *name, int argi);
152 static int ir_CategoryList (IrExpArg *iea,
153 Z_CategoryList *p, const char *name, int argi);
154 static int ir_VariantValue (IrExpArg *iea,
155 Z_VariantValue *p, const char *name, int argi);
156 static int ir_PerElementDetails (IrExpArg *iea,
157 Z_PerElementDetails *p, const char *name, int argi);
158 static int ir_AttributeDetails (IrExpArg *iea,
159 Z_AttributeDetails *p, const char *name, int argi);
160 static int ir_ExtendedServicesInfo (IrExpArg *iea,
161 Z_ExtendedServicesInfo *p, const char *name, int argi);
162 static int ir_AttributeType (IrExpArg *iea,
163 Z_AttributeType *p, const char *name, int argi);
164 static int ir_IntUnit (IrExpArg *iea,
165 Z_IntUnit *p, const char *name, int argi);
166 static int ir_Charge (IrExpArg *iea,
167 Z_Charge *p, const char *name, int argi);
168 static int ir_PrivateCapabilities (IrExpArg *iea,
169 Z_PrivateCapabilities *p, const char *name, int argi);
170 static int ir_ValueSet (IrExpArg *iea,
171 Z_ValueSet *p, const char *name, int argi);
172 static int ir_AttributeDescription (IrExpArg *iea,
173 Z_AttributeDescription *p, const char *name, int argi);
174 static int ir_Path (IrExpArg *iea,
175 Z_Path *p, const char *name, int argi);
176 static int ir_ContactInfo (IrExpArg *iea,
177 Z_ContactInfo *p, const char *name, int argi);
178 static int ir_SearchKey (IrExpArg *iea,
179 Z_SearchKey *p, const char *name, int argi);
180 static int ir_Iso8777Capabilities (IrExpArg *iea,
181 Z_Iso8777Capabilities *p, const char *name, int argi);
182 static int ir_AccessRestrictions (IrExpArg *iea,
183 Z_AccessRestrictions *p, const char *name, int argi);
184 static int ir_SortKeyDetails (IrExpArg *iea,
185 Z_SortKeyDetails *p, const char *name, int argi);
189 ir_match_start (const char *name, void *p, IrExpArg *iea, int argi)
193 if (argi >= iea->argc)
194 Tcl_AppendResult (iea->interp, name, " ", NULL);
197 if (argi < iea->argc)
199 if (strcmp (name, iea->argv[argi]))
203 Tcl_AppendResult (iea->interp, "{", name, " ", NULL);
208 ir_match_end (const char *name, IrExpArg *iea, int argi)
210 if (argi >= iea->argc)
211 Tcl_AppendResult (iea->interp, "} ", NULL);
216 ir_choice (IrExpArg *iea, IrExpChoice *clist, int *what, void *p,
223 if (clist->id == *what)
224 return (*clist->handle)(iea, p, clist->name, argi);
228 if (argi >= iea->argc)
229 Tcl_AppendResult (iea->interp, "{} ", NULL);
233 static int ir_null (IrExpArg *iea,
234 Odr_null *p, const char *name, int argi)
236 if (!ir_match_start (name, p, iea, ++argi))
238 Tcl_AppendResult (iea->interp, "1 ", NULL);
239 return ir_match_end (name, iea, argi);
242 static int ir_CString (IrExpArg *iea,
243 char *p, const char *name, int argi)
245 if (!ir_match_start (name, p, iea, ++argi))
247 Tcl_AppendElement (iea->interp, p);
248 return ir_match_end (name, iea, argi);
251 static int ir_ElementSetName (IrExpArg *iea,
252 char *p, const char *name, int argi)
254 return ir_CString (iea, p, name, argi);
257 static int ir_DatabaseName (IrExpArg *iea,
258 char *p, const char *name, int argi)
260 return ir_CString (iea, p, name, argi);
263 static int ir_InternationalString (IrExpArg *iea,
264 char *p, const char *name, int argi)
266 return ir_CString (iea, p, name, argi);
269 static int ir_GeneralizedTime (IrExpArg *iea,
270 char *p, const char *name, int argi)
272 return ir_CString (iea, p, name, argi);
275 static int ir_oid (IrExpArg *iea,
276 Odr_oid *p, const char *name, int argi)
279 if (!ir_match_start (name, p, iea, ++argi))
285 sprintf (buf, "%c%d", first, *p);
286 Tcl_AppendResult (iea->interp, buf, NULL);
290 return ir_match_end (name, iea, argi);
293 static int ir_TagTypeMapping (IrExpArg *iea,
294 Z_TagTypeMapping **p, const char *name, int argi)
296 if (!ir_match_start (name, p, iea, ++argi))
299 return ir_match_end (name, iea, argi);
302 static int ir_PrimitiveDataType (IrExpArg *iea,
303 int *p, const char *name, int argi)
305 if (!ir_match_start (name, p, iea, ++argi))
308 return ir_match_end (name, iea, argi);
311 static int ir_octet (IrExpArg *iea,
312 Odr_oct *p, const char *name, int argi)
314 if (!ir_match_start (name, p, iea, ++argi))
317 return ir_match_end (name, iea, argi);
320 static int ir_choice_nop (IrExpArg *iea,
321 void *p, const char *name, int argi)
323 if (argi >= iea->argc)
324 Tcl_AppendResult (iea->interp, name, " ", NULL);
328 static int ir_bool (IrExpArg *iea,
329 bool_t *p, const char *name, int argi)
331 if (!ir_match_start (name, p, iea, ++argi))
333 Tcl_AppendResult (iea->interp, *p ? "1" : "0", NULL);
334 return ir_match_end (name, iea, argi);
337 static int ir_integer (IrExpArg *iea,
338 int *p, const char *name, int argi)
341 if (!ir_match_start (name, p, iea, ++argi))
343 sprintf (buf, "%d", *p);
344 Tcl_AppendResult (iea->interp, buf, NULL);
345 return ir_match_end (name, iea, argi);
348 static int ir_LanguageCode (IrExpArg *iea,
349 char *p, const char *name, int argi)
351 return ir_CString (iea, p, name, argi);
354 static int ir_External (IrExpArg *iea,
355 Z_External *p, const char *name, int argi)
357 if (!ir_match_start (name, p, iea, ++argi))
360 return ir_match_end (name, iea, argi);
363 static int ir_sequence (int (*fh)(), IrExpArg *iea, void *p, int *num,
364 const char *name, int argi)
366 void **pp = (void **) p;
369 if (!ir_match_start (name, p, iea, ++argi))
371 for (i = 0; i < *num; i++)
372 (*fh)(iea, pp[i], "", argi);
373 return ir_match_end (name, iea, argi);
376 static int ir_Term (IrExpArg *iea,
377 Z_Term *p, const char *name, int argi)
379 static IrExpChoice arm [] = {
380 { "general", Z_Term_general,
382 { "numeric", Z_Term_numeric,
384 { "characterString", Z_Term_characterString,
385 ir_InternationalString },
388 { "dateTime", Z_Term_dateTime,
389 ir_GeneralizedTime },
390 { "external", Z_Term_external,
392 { "null", Z_Term_null,
396 if (!ir_match_start (name, p, iea, ++argi))
399 ir_choice (iea, arm, &p->which, p->u.general, argi);
400 return ir_match_end (name, iea, argi);
403 static int ir_TargetInfo (IrExpArg *iea,
404 Z_TargetInfo *p, const char *name, int argi)
406 if (!ir_match_start (name, p, iea, ++argi))
408 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
409 ir_InternationalString (iea, p->name, "name", argi);
410 ir_HumanString (iea, p->recentNews, "recentNews", argi);
411 ir_IconObject (iea, p->icon, "icon", argi);
412 ir_bool (iea, p->namedResultSets, "namedResultSets", argi);
413 ir_bool (iea, p->multipleDBsearch, "multipleDBsearch", argi);
414 ir_integer (iea, p->maxResultSets, "maxResultSets", argi);
415 ir_integer (iea, p->maxResultSize, "maxResultSize", argi);
416 ir_integer (iea, p->maxTerms, "maxTerms", argi);
417 ir_IntUnit (iea, p->timeoutInterval, "timeoutInterval", argi);
418 ir_HumanString (iea, p->welcomeMessage, "welcomeMessage", argi);
419 ir_ContactInfo (iea, p->contactInfo, "contactInfo", argi);
420 ir_HumanString (iea, p->description, "description", argi);
421 ir_sequence (ir_InternationalString, iea, p->nicknames,
422 &p->num_nicknames, "nicknames", argi);
423 ir_HumanString (iea, p->usageRest, "usageRest", argi);
424 ir_HumanString (iea, p->paymentAddr, "paymentAddr", argi);
425 ir_HumanString (iea, p->hours, "hours", argi);
426 ir_sequence (ir_DatabaseList, iea, p->dbCombinations,
427 &p->num_dbCombinations, "dbCombinations", argi);
428 ir_sequence (ir_NetworkAddress, iea, p->addresses,
429 &p->num_addresses, "addresses", argi);
430 ir_AccessInfo (iea, p->commonAccessInfo, "commonAccessInfo", argi);
431 return ir_match_end (name, iea, argi);
434 static int ir_DatabaseInfo (IrExpArg *iea,
435 Z_DatabaseInfo *p, const char *name, int argi)
437 static IrExpChoice arm_recordCount [] = {
438 { "actualNumber", Z_Exp_RecordCount_actualNumber,
440 { "approxNumber", Z_Exp_RecordCount_approxNumber,
444 if (!ir_match_start (name, p, iea, ++argi))
447 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
448 ir_DatabaseName (iea, p->name, "name", argi);
449 ir_null (iea, p->explainDatabase, "explainDatabase", argi);
450 ir_sequence (ir_DatabaseName, iea, p->nicknames,
451 &p->num_nicknames, "nicknames", argi);
452 ir_IconObject (iea, p->icon, "icon", argi);
453 ir_bool (iea, p->userFee, "userFee", argi);
454 ir_bool (iea, p->available, "available", argi);
455 ir_HumanString (iea, p->titleString, "titleString", argi);
456 ir_sequence (ir_HumanString, iea, p->keywords,
457 &p->num_keywords, "keywords", argi);
458 ir_HumanString (iea, p->description, "description", argi);
459 ir_DatabaseList (iea, p->associatedDbs, "associatedDbs", argi);
460 ir_DatabaseList (iea, p->subDbs, "subDbs", argi);
461 ir_HumanString (iea, p->disclaimers, "disclaimers", argi);
462 ir_HumanString (iea, p->news, "news", argi);
464 ir_choice (iea, arm_recordCount, &p->recordCount_which,
465 p->recordCount, argi);
467 ir_HumanString (iea, p->defaultOrder, "defaultOrder", argi);
468 ir_integer (iea, p->avRecordSize, "avRecordSize", argi);
469 ir_integer (iea, p->maxRecordSize, "maxRecordSize", argi);
470 ir_HumanString (iea, p->hours, "hours", argi);
471 ir_HumanString (iea, p->bestTime, "bestTime", argi);
472 ir_GeneralizedTime (iea, p->lastUpdate, "lastUpdate", argi);
473 ir_IntUnit (iea, p->updateInterval, "updateInterval", argi);
474 ir_HumanString (iea, p->coverage, "coverage", argi);
475 ir_bool (iea, p->proprietary, "proprietary", argi);
476 ir_HumanString (iea, p->copyrightText, "copyrightText", argi);
477 ir_HumanString (iea, p->copyrightNotice, "copyrightNotice", argi);
478 ir_ContactInfo (iea, p->producerContactInfo, "producerContactInfo", argi);
479 ir_ContactInfo (iea, p->supplierContactInfo, "supplierContactInfo", argi);
480 ir_ContactInfo (iea, p->submissionContactInfo, "submissionContactInfo", argi);
481 ir_AccessInfo (iea, p->accessInfo, "accessInfo", argi);
482 return ir_match_end (name, iea, argi);
485 static int ir_SchemaInfo (IrExpArg *iea,
486 Z_SchemaInfo *p, const char *name, int argi)
488 if (!ir_match_start (name, p, iea, ++argi))
490 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
491 ir_oid (iea, p->schema, "schema", argi);
492 ir_InternationalString (iea, p->name, "name", argi);
493 ir_HumanString (iea, p->description, "description", argi);
495 ir_sequence (ir_TagTypeMapping, iea, p->tagTypeMapping,
496 &p->num_tagTypeMapping, "tagTypeMapping", argi);
497 ir_sequence (ir_ElementInfo, iea, p->recordStructure,
498 &p->num_recordStructure, "recordStructure", argi);
499 return ir_match_end (name, iea, argi);
502 static int ir_ElementDataTypePrimitive (IrExpArg *iea,
503 int *p, const char *name, int argi)
505 static IrExpChoice arm[] = {
506 {"octetString", Z_PrimitiveElement_octetString, ir_choice_nop },
507 {"numeric", Z_PrimitiveElement_numeric, ir_choice_nop },
510 if (!ir_match_start (name, p, iea, ++argi))
512 ir_choice (iea, arm, p, ODR_NULLVAL, argi);
513 return ir_match_end (name, iea, argi);
516 static int ir_ElementInfo (IrExpArg *iea,
517 Z_ElementInfo *p, const char *name, int argi)
519 if (!ir_match_start (name, p, iea, ++argi))
521 ir_InternationalString (iea, p->elementName, "elementName", argi);
522 ir_Path (iea, p->elementTagPath, "elementTagPath", argi);
523 ir_ElementDataType (iea, p->dataType, "dataType", argi);
524 ir_bool (iea, p->required, "required", argi);
525 ir_bool (iea, p->repeatable, "repeatable", argi);
526 ir_HumanString (iea, p->description, "description", argi);
527 return ir_match_end (name, iea, argi);
530 static int ir_ElementInfoList (IrExpArg *iea,
531 Z_ElementInfoList *p, const char *name, int argi)
533 if (!ir_match_start (name, p, iea, ++argi))
535 ir_sequence (ir_ElementInfo, iea, p->list,
536 &p->num, "list", argi);
537 return ir_match_end (name, iea, argi);
540 static int ir_ElementDataType (IrExpArg *iea,
541 Z_ElementDataType *p, const char *name, int argi)
543 static IrExpChoice arm[] = {
544 { "primitive", Z_ElementDataType_primitive,
545 ir_ElementDataTypePrimitive },
546 { "structured", Z_ElementDataType_structured,
547 ir_ElementInfoList },
549 if (!ir_match_start (name, p, iea, ++argi))
551 ir_choice (iea, arm, &p->which, p->u.primitive, argi);
552 return ir_match_end (name, iea, argi);
555 static int ir_PathUnit (IrExpArg *iea,
556 Z_PathUnit *p, const char *name, int argi)
558 if (!ir_match_start (name, p, iea, ++argi))
560 ir_integer (iea, p->tagType, "tagType", argi);
561 ir_StringOrNumeric (iea, p->tagValue, "tagValue", argi);
562 return ir_match_end (name, iea, argi);
565 static int ir_Path (IrExpArg *iea,
566 Z_Path *p, const char *name, int argi)
568 if (!ir_match_start (name, p, iea, ++argi))
570 ir_sequence (ir_PathUnit, iea, p->list,
571 &p->num, "list", argi);
572 return ir_match_end (name, iea, argi);
575 static int ir_TagSetInfoElements (IrExpArg *iea,
576 Z_TagSetInfoElements *p, const char *name, int argi)
578 if (!ir_match_start (name, p, iea, ++argi))
580 ir_InternationalString (iea, p->elementName, "elementname", argi);
581 ir_sequence (ir_InternationalString, iea, p->nicknames,
582 &p->num_nicknames, "nicknames", argi);
583 ir_StringOrNumeric (iea, p->elementTag, "elementTag", argi);
584 ir_HumanString (iea, p->description, "description", argi);
585 ir_PrimitiveDataType (iea, p->dataType, "dataType", argi);
586 ir_OtherInformation (iea, p->otherTagInfo, "otherTagInfo", argi);
587 return ir_match_end (name, iea, argi);
590 static int ir_TagSetInfo (IrExpArg *iea,
591 Z_TagSetInfo *p, const char *name, int argi)
593 if (!ir_match_start (name, p, iea, ++argi))
595 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
596 ir_oid (iea, p->tagSet, "tagSet", argi);
597 ir_InternationalString (iea, p->name, "name", argi);
598 ir_HumanString (iea, p->description, "description", argi);
599 ir_sequence (ir_TagSetInfoElements, iea, p->elements,
600 &p->num_elements, "elements", argi);
601 return ir_match_end (name, iea, argi);
604 static int ir_RecordSyntaxInfo (IrExpArg *iea,
605 Z_RecordSyntaxInfo *p, const char *name, int argi)
607 if (!ir_match_start (name, p, iea, ++argi))
609 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
610 ir_oid (iea, p->recordSyntax, "recordSyntax", argi);
611 ir_InternationalString (iea, p->name, "name", argi);
612 ir_sequence (ir_oid, iea, p->transferSyntaxes,
613 &p->num_transferSyntaxes, "transferSyntaxes", argi);
614 ir_HumanString (iea, p->description, "description", argi);
615 ir_InternationalString (iea, p->asn1Module, "asn1Module", argi);
616 ir_sequence (ir_ElementInfo, iea, p->abstractStructure,
617 &p->num_abstractStructure, "abstractStructure", argi);
618 return ir_match_end (name, iea, argi);
621 static int ir_AttributeType (IrExpArg *iea,
622 Z_AttributeType *p, const char *name, int argi)
624 if (!ir_match_start (name, p, iea, ++argi))
626 ir_InternationalString (iea, p->name, "name", argi);
627 ir_HumanString (iea, p->description, "description", argi);
628 ir_integer (iea, p->attributeType, "attributeType", argi);
629 ir_sequence (ir_AttributeDescription, iea, p->attributeValues,
630 &p->num_attributeValues, "attributeValues", argi);
631 return ir_match_end (name, iea, argi);
634 static int ir_AttributeSetInfo (IrExpArg *iea,
635 Z_AttributeSetInfo *p, const char *name, int argi)
637 if (!ir_match_start (name, p, iea, ++argi))
639 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
640 ir_oid (iea, p->attributeSet, "attributeSet", argi);
641 ir_InternationalString (iea, p->name, "name", argi);
642 ir_sequence (ir_AttributeType, iea, p->attributes,
643 &p->num_attributes, "attributes", argi);
644 ir_HumanString (iea, p->description, "description", argi);
645 return ir_match_end (name, iea, argi);
648 static int ir_AttributeDescription (IrExpArg *iea,
649 Z_AttributeDescription *p, const char *name, int argi)
651 if (!ir_match_start (name, p, iea, ++argi))
653 ir_InternationalString (iea, p->name, "name", argi);
654 ir_HumanString (iea, p->description, "description", argi);
655 ir_StringOrNumeric (iea, p->attributeValue, "attributeValue", argi);
656 ir_sequence (ir_StringOrNumeric,iea, p->equivalentAttributes,
657 &p->num_equivalentAttributes, "equivalentAttributes", argi);
658 return ir_match_end (name, iea, argi);
661 static int ir_TermListElement (IrExpArg *iea,
662 Z_TermListElement *p, const char *name, int argi)
664 static IrExpChoice searchCostArm [] = {
665 { "optimized", Z_TermListInfo_optimized, ir_choice_nop },
666 { "normal", Z_TermListInfo_normal, ir_choice_nop },
667 { "expensive", Z_TermListInfo_expensive, ir_choice_nop },
668 { "filter", Z_TermListInfo_filter, ir_choice_nop },
670 ir_InternationalString (iea, p->name, "name", argi);
671 ir_HumanString (iea, p->title, "title", argi);
673 ir_choice (iea, searchCostArm, p->searchCost, ODR_NULLVAL, argi);
675 ir_bool (iea, p->scanable, "scanable", argi);
676 ir_sequence (ir_InternationalString, iea, p->broader,
677 &p->num_broader, "broader", argi);
678 ir_sequence (ir_InternationalString, iea, p->narrower,
679 &p->num_narrower, "narrower", argi);
680 return ir_match_end (name, iea, argi);
683 static int ir_TermListInfo (IrExpArg *iea,
684 Z_TermListInfo *p, const char *name, int argi)
686 if (!ir_match_start (name, p, iea, ++argi))
688 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
689 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
690 ir_sequence (ir_TermListElement, iea, p->termLists,
691 &p->num_termLists, "termLists", argi);
692 return ir_match_end (name, iea, argi);
695 static int ir_ExtendedServicesInfo (IrExpArg *iea,
696 Z_ExtendedServicesInfo *p, const char *name, int argi)
698 static IrExpChoice waitActionArm [] = {
699 { "waitSupported", Z_ExtendedServicesInfo_waitSupported,
701 { "waitAlways", Z_ExtendedServicesInfo_waitAlways,
703 { "waitNotSupported", Z_ExtendedServicesInfo_waitNotSupported,
705 { "depends", Z_ExtendedServicesInfo_depends,
707 { "notSaying", Z_ExtendedServicesInfo_notSaying,
711 ir_InternationalString (iea, p->name, "name", argi);
712 if (!ir_match_start (name, p, iea, ++argi))
714 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
715 ir_oid (iea, p->type, "type", argi);
716 ir_InternationalString (iea, p->name, "name", argi);
717 ir_bool (iea, p->privateType, "privateType", argi);
718 ir_bool (iea, p->restrictionsApply, "restrictionsApply", argi);
719 ir_bool (iea, p->feeApply, "feeApply", argi);
720 ir_bool (iea, p->available, "available", argi);
721 ir_bool (iea, p->retentionSupported, "retentionSupported", argi);
723 ir_choice (iea, waitActionArm, p->waitAction, ODR_NULLVAL, argi);
725 ir_HumanString (iea, p->description, "description", argi);
726 ir_External (iea, p->specificExplain, "specificExplain", argi);
727 ir_InternationalString (iea, p->esASN, "esASN", argi);
728 return ir_match_end (name, iea, argi);
731 static int ir_AttributeDetails (IrExpArg *iea,
732 Z_AttributeDetails *p, const char *name, int argi)
734 if (!ir_match_start (name, p, iea, ++argi))
736 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
737 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
738 ir_sequence (ir_AttributeSetDetails, iea, p->attributesBySet,
739 &p->num_attributesBySet, "attributesBySet", argi);
740 ir_AttributeCombinations (iea, p->attributeCombinations,
741 "attributeCombinations", argi);
742 return ir_match_end (name, iea, argi);
745 static int ir_AttributeSetDetails (IrExpArg *iea,
746 Z_AttributeSetDetails *p, const char *name, int argi)
748 if (!ir_match_start (name, p, iea, ++argi))
750 ir_oid (iea, p->attributeSet, "attributeSet", argi);
751 ir_sequence (ir_AttributeTypeDetails, iea, p->attributesByType,
752 &p->num_attributesByType, "attributesByType", argi);
753 return ir_match_end (name, iea, argi);
756 static int ir_AttributeTypeDetails (IrExpArg *iea,
757 Z_AttributeTypeDetails *p, const char *name, int argi)
759 if (!ir_match_start (name, p, iea, ++argi))
761 ir_integer (iea, p->attributeType, "attributeType", argi);
762 ir_OmittedAttributeInterpretation (iea, p->optionalType,
763 "optionalType", argi);
764 ir_sequence (ir_AttributeValue, iea, p->attributeValues,
765 &p->num_attributeValues, "attributeValues", argi);
766 return ir_match_end (name, iea, argi);
769 static int ir_OmittedAttributeInterpretation (IrExpArg *iea,
770 Z_OmittedAttributeInterpretation *p, const char *name, int argi)
772 if (!ir_match_start (name, p, iea, ++argi))
774 ir_StringOrNumeric (iea, p->defaultValue, "defaultValue", argi);
775 ir_HumanString (iea, p->defaultDescription, "defaultDescription", argi);
776 return ir_match_end (name, iea, argi);
779 static int ir_EScanInfo (IrExpArg *iea,
780 Z_EScanInfo *p, const char *name, int argi)
782 if (!ir_match_start (name, p, iea, ++argi))
784 ir_integer (iea, p->maxStepSize, "maxStepSize", argi);
785 ir_HumanString (iea, p->collatingSequence, "collatingSequence", argi);
786 ir_bool (iea, p->increasing, "increasing", argi);
787 return ir_match_end (name, iea, argi);
790 static int ir_TermListDetails (IrExpArg *iea,
791 Z_TermListDetails *p, const char *name, int argi)
793 if (!ir_match_start (name, p, iea, ++argi))
795 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
796 ir_InternationalString (iea, p->termListName, "termListName", argi);
797 ir_HumanString (iea, p->description, "description", argi);
798 ir_AttributeCombinations (iea, p->attributes, "attributes", argi);
800 ir_EScanInfo (iea, p->scanInfo, "scanInfo", argi);
802 ir_integer (iea, p->estNumberTerms, "estNumberTerms", argi);
803 ir_sequence (ir_Term, iea, p->sampleTerms,
804 &p->num_sampleTerms, "sampleTerms", argi);
805 return ir_match_end (name, iea, argi);
808 static int ir_ElementSetDetails (IrExpArg *iea,
809 Z_ElementSetDetails *p, const char *name, int argi)
811 if (!ir_match_start (name, p, iea, ++argi))
813 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
814 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
815 ir_ElementSetName (iea, p->elementSetName, "elementSetName", argi);
816 ir_oid (iea, p->recordSyntax, "recordSyntax", argi);
817 ir_oid (iea, p->schema, "schema", argi);
818 ir_HumanString (iea, p->description, "description", argi);
819 ir_sequence (ir_PerElementDetails, iea, p->detailsPerElement,
820 &p->num_detailsPerElement, "detailsPerElement", argi);
821 return ir_match_end (name, iea, argi);
824 static int ir_RetrievalRecordDetails (IrExpArg *iea,
825 Z_RetrievalRecordDetails *p, const char *name, int argi)
827 if (!ir_match_start (name, p, iea, ++argi))
829 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
830 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
831 ir_oid (iea, p->schema, "schema", argi);
832 ir_oid (iea, p->recordSyntax, "recordSyntax", argi);
833 ir_HumanString (iea, p->description, "description", argi);
834 ir_sequence (ir_PerElementDetails, iea, p->detailsPerElement,
835 &p->num_detailsPerElement, "detailsPerElement", argi);
836 return ir_match_end (name, iea, argi);
839 static int ir_PerElementDetails (IrExpArg *iea,
840 Z_PerElementDetails *p, const char *name, int argi)
842 if (!ir_match_start (name, p, iea, ++argi))
844 ir_InternationalString (iea, p->name, "name", argi);
845 ir_RecordTag (iea, p->recordTag, "recordTag", argi);
846 ir_sequence (ir_Path, iea, p->schemaTags,
847 &p->num_schemaTags, "schemaTags", argi);
848 ir_integer (iea, p->maxSize, "maxSize", argi);
849 ir_integer (iea, p->minSize, "minSize", argi);
850 ir_integer (iea, p->avgSize, "avgSize", argi);
851 ir_integer (iea, p->fixedSize, "fixedSize", argi);
852 ir_bool (iea, p->repeatable, "repeatable", argi);
853 ir_bool (iea, p->required, "required", argi);
854 ir_HumanString (iea, p->description, "description", argi);
855 ir_HumanString (iea, p->contents, "contents", argi);
856 ir_HumanString (iea, p->billingInfo, "billingInfo", argi);
857 ir_HumanString (iea, p->restrictions, "restrictions", argi);
858 ir_sequence (ir_InternationalString, iea, p->alternateNames,
859 &p->num_alternateNames, "alternateNames", argi);
860 ir_sequence (ir_InternationalString, iea, p->genericNames,
861 &p->num_genericNames, "genericNames", argi);
862 ir_AttributeCombinations (iea, p->searchAccess, "searchAccess", argi);
863 return ir_match_end (name, iea, argi);
866 static int ir_RecordTag (IrExpArg *iea,
867 Z_RecordTag *p, const char *name, int argi)
869 if (!ir_match_start (name, p, iea, ++argi))
871 ir_StringOrNumeric (iea, p->qualifier, "qualifier", argi);
872 ir_StringOrNumeric (iea, p->tagValue, "tagValue", argi);
873 return ir_match_end (name, iea, argi);
876 static int ir_SortDetails (IrExpArg *iea,
877 Z_SortDetails *p, const char *name, int argi)
879 if (!ir_match_start (name, p, iea, ++argi))
881 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
882 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
883 ir_sequence (ir_SortKeyDetails, iea, p->sortKeys,
884 &p->num_sortKeys, "sortKeys", argi);
885 return ir_match_end (name, iea, argi);
888 static int ir_SortKeyDetailsSortType (IrExpArg *iea,
889 Z_SortKeyDetailsSortType *p, const char *name, int argi)
891 static IrExpChoice sortArm [] = {
892 { "character", Z_SortKeyDetailsSortType_character,
894 { "numeric", Z_SortKeyDetailsSortType_numeric,
896 { "structured", Z_SortKeyDetailsSortType_structured,
899 return ir_choice (iea, sortArm, &p->which, p->u.character, argi);
902 static int ir_SortKeyDetails (IrExpArg *iea,
903 Z_SortKeyDetails *p, const char *name, int argi)
905 static IrExpChoice sortArm [] = {
906 { "always", Z_SortKeyDetails_always,
908 { "never", Z_SortKeyDetails_never,
910 { "defaultYes", Z_SortKeyDetails_defaultYes,
912 { "defaultNo", Z_SortKeyDetails_defaultNo,
916 if (!ir_match_start (name, p, iea, ++argi))
918 ir_HumanString (iea, p->description, "description", argi);
919 ir_sequence (ir_Specification, iea, p->elementSpecifications,
920 &p->num_elementSpecifications, "elementSpecifications", argi);
921 ir_AttributeCombinations (iea, p->attributeSpecifications,
922 "attributeSpecifications", argi);
923 ir_SortKeyDetailsSortType (iea, p->sortType, "sortType", argi);
925 if (p->caseSensitivity)
926 ir_choice (iea, sortArm, p->caseSensitivity, ODR_NULLVAL, argi);
928 return ir_match_end (name, iea, argi);
931 static int ir_ProcessingInformation (IrExpArg *iea,
932 Z_ProcessingInformation *p, const char *name, int argi)
934 IrExpChoice arm[] = {
935 { "access", Z_ProcessingInformation_access,
937 { "search", Z_ProcessingInformation_search,
939 { "retrieval", Z_ProcessingInformation_retrieval,
941 { "recordPresentation", Z_ProcessingInformation_recordPresentation,
943 { "recordHandling", Z_ProcessingInformation_recordHandling,
946 if (!ir_match_start (name, p, iea, ++argi))
948 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
949 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
951 ir_choice (iea, arm, p->processingContext, ODR_NULLVAL, argi);
952 ir_InternationalString (iea, p->name, "name", argi);
953 ir_oid (iea, p->oid, "oid", argi);
954 ir_HumanString (iea, p->description, "description", argi);
955 ir_External (iea, p->instructions, "instructions", argi);
956 return ir_match_end (name, iea, argi);
959 static int ir_VariantSetInfo (IrExpArg *iea,
960 Z_VariantSetInfo *p, const char *name, int argi)
962 if (!ir_match_start (name, p, iea, ++argi))
964 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
965 ir_oid (iea, p->variantSet, "variantSet", argi);
966 ir_InternationalString (iea, p->name, "name", argi);
967 ir_sequence (ir_VariantClass, iea, p->variants,
968 &p->num_variants, "variants", argi);
969 return ir_match_end (name, iea, argi);
972 static int ir_VariantClass (IrExpArg *iea,
973 Z_VariantClass *p, const char *name, int argi)
975 if (!ir_match_start (name, p, iea, ++argi))
977 ir_InternationalString (iea, p->name, "name", argi);
978 ir_HumanString (iea, p->description, "description", argi);
979 ir_integer (iea, p->variantClass, "variantClass", argi);
980 ir_sequence (ir_VariantType, iea, p->variantTypes,
981 &p->num_variantTypes, "variantTypes", argi);
982 return ir_match_end (name, iea, argi);
985 static int ir_VariantType (IrExpArg *iea,
986 Z_VariantType *p, const char *name, int argi)
988 if (!ir_match_start (name, p, iea, ++argi))
990 ir_InternationalString (iea, p->name, "name", argi);
991 ir_HumanString (iea, p->description, "description", argi);
992 ir_integer (iea, p->variantType, "variantType", argi);
993 ir_VariantValue (iea, p->variantValue, "variantValue", argi);
994 return ir_match_end (name, iea, argi);
997 static int ir_ValueSetEnumerated (IrExpArg *iea,
998 Z_ValueSetEnumerated *p, const char *name, int argi)
1000 if (!ir_match_start (name, p, iea, ++argi))
1002 ir_sequence (ir_ValueDescription, iea, p->enumerated,
1003 &p->num_enumerated, "enumerated", argi);
1004 return ir_match_end (name, iea, argi);
1007 static int ir_ValueSet (IrExpArg *iea,
1008 Z_ValueSet *p, const char *name, int argi)
1010 IrExpChoice arm [] = {
1011 { "range", Z_ValueSet_range, ir_ValueRange },
1012 { "enumerated", Z_ValueSet_enumerated, ir_ValueSetEnumerated },
1014 if (!ir_match_start (name, p, iea, ++argi))
1016 ir_choice (iea, arm, &p->which, p->u.range, argi);
1017 return ir_match_end (name, iea, argi);
1020 static int ir_VariantValue (IrExpArg *iea,
1021 Z_VariantValue *p, const char *name, int argi)
1023 if (!ir_match_start (name, p, iea, ++argi))
1025 ir_PrimitiveDataType (iea, p->dataType, "dataType", argi);
1027 ir_ValueSet (iea, p->values, "values", argi);
1028 return ir_match_end (name, iea, argi);
1031 static int ir_ValueRange (IrExpArg *iea,
1032 Z_ValueRange *p, const char *name, int argi)
1034 if (!ir_match_start (name, p, iea, ++argi))
1036 ir_ValueDescription (iea, p->lower, "lower", argi);
1037 ir_ValueDescription (iea, p->upper, "upper", argi);
1038 return ir_match_end (name, iea, argi);
1041 static int ir_ValueDescription (IrExpArg *iea,
1042 Z_ValueDescription *p, const char *name, int argi)
1044 static IrExpChoice arm [] = {
1045 { "integer", Z_ValueDescription_integer, ir_integer },
1046 { "string", Z_ValueDescription_string, ir_InternationalString},
1047 { "octets", Z_ValueDescription_octets, ir_octet},
1048 { "oid", Z_ValueDescription_oid, ir_oid},
1049 { "unit", Z_ValueDescription_unit, ir_Unit},
1050 { "valueAndUnit", Z_ValueDescription_valueAndUnit, ir_IntUnit},
1053 if (!ir_match_start (name, p, iea, ++argi))
1055 ir_choice (iea, arm, &p->which, p->u.integer, argi);
1056 return ir_match_end (name, iea, argi);
1059 static int ir_UnitInfo (IrExpArg *iea,
1060 Z_UnitInfo *p, const char *name, int argi)
1062 if (!ir_match_start (name, p, iea, ++argi))
1064 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
1065 ir_InternationalString (iea, p->unitSystem, "unitSystem", argi);
1066 ir_HumanString (iea, p->description, "description", argi);
1067 ir_sequence (ir_UnitType, iea, p->units,
1068 &p->num_units, "units", argi);
1069 return ir_match_end (name, iea, argi);
1072 static int ir_UnitType (IrExpArg *iea,
1073 Z_UnitType *p, const char *name, int argi)
1075 if (!ir_match_start (name, p, iea, ++argi))
1077 ir_InternationalString (iea, p->name, "name", argi);
1078 ir_HumanString (iea, p->description, "description", argi);
1079 ir_StringOrNumeric (iea, p->unitType, "unitType", argi);
1080 ir_sequence (ir_Units, iea, p->units, &p->num_units, "units", argi);
1081 return ir_match_end (name, iea, argi);
1084 static int ir_Units (IrExpArg *iea,
1085 Z_Units *p, const char *name, int argi)
1087 if (!ir_match_start (name, p, iea, ++argi))
1089 ir_InternationalString (iea, p->name, "name", argi);
1090 ir_HumanString (iea, p->description, "description", argi);
1091 ir_StringOrNumeric (iea, p->unit, "unit", argi);
1092 return ir_match_end (name, iea, argi);
1095 static int ir_CategoryList (IrExpArg *iea,
1096 Z_CategoryList *p, const char *name, int argi)
1098 if (!ir_match_start (name, p, iea, ++argi))
1100 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
1101 ir_sequence (ir_CategoryInfo, iea, p->categories,
1102 &p->num_categories, "categories", argi);
1103 return ir_match_end (name, iea, argi);
1106 static int ir_CategoryInfo (IrExpArg *iea,
1107 Z_CategoryInfo *p, const char *name, int argi)
1109 if (!ir_match_start (name, p, iea, ++argi))
1111 ir_InternationalString (iea, p->category, "category", argi);
1112 ir_InternationalString (iea, p->originalCategory, "originalCategory", argi);
1113 ir_HumanString (iea, p->description, "description", argi);
1114 ir_InternationalString (iea, p->asn1Module, "asn1Module", argi);
1115 return ir_match_end (name, iea, argi);
1118 static int ir_CommonInfo (IrExpArg *iea,
1119 Z_CommonInfo *p, const char *name, int argi)
1121 if (!ir_match_start (name, p, iea, ++argi))
1123 ir_GeneralizedTime (iea, p->dateAdded, "dateAdded", argi);
1124 ir_GeneralizedTime (iea, p->dateChanged, "dateChanged", argi);
1125 ir_GeneralizedTime (iea, p->expiry, "expiry", argi);
1126 ir_LanguageCode (iea, p->humanStringLanguage, "humanString-Language",
1128 ir_OtherInformation (iea, p->otherInfo, "otherInfo", argi);
1129 return ir_match_end (name, iea, argi);
1132 static int ir_HumanStringUnit (IrExpArg *iea,
1133 Z_HumanStringUnit *p, const char *name, int argi)
1135 if (!ir_match_start (name, p, iea, ++argi))
1137 ir_LanguageCode (iea, p->language, "language", argi);
1138 ir_InternationalString (iea, p->text, "text", argi);
1139 return ir_match_end (name, iea, argi);
1142 static int ir_HumanString (IrExpArg *iea,
1143 Z_HumanString *p, const char *name, int argi)
1145 if (!ir_match_start (name, p, iea, ++argi))
1147 ir_sequence (ir_HumanStringUnit, iea, p->strings,
1148 &p->num_strings, "strings", argi);
1149 return ir_match_end (name, iea, argi);
1152 static int ir_IconObjectUnit (IrExpArg *iea,
1153 Z_IconObjectUnit *p, const char *name, int argi)
1155 static IrExpChoice arm [] = {
1156 { "ianaType", Z_IconObject_ianaType, ir_choice_nop },
1157 { "z3950type", Z_IconObject_z3950type, ir_choice_nop },
1158 { "otherType", Z_IconObject_otherType, ir_choice_nop },
1160 if (!ir_match_start (name, p, iea, ++argi))
1162 ir_choice (iea, arm, &p->which, ODR_NULLVAL, argi);
1163 ir_InternationalString (iea, p->bodyType, "bodyType", argi);
1164 ir_octet (iea, p->content, "content", argi);
1165 return ir_match_end (name, iea, argi);
1168 static int ir_IconObject (IrExpArg *iea,
1169 Z_IconObject *p, const char *name, int argi)
1171 if (!ir_match_start (name, p, iea, ++argi))
1173 ir_sequence (ir_IconObjectUnit, iea, p->iconUnits,
1174 &p->num_iconUnits, "iconUnits", argi);
1175 return ir_match_end (name, iea, argi);
1178 static int ir_ContactInfo (IrExpArg *iea,
1179 Z_ContactInfo *p, const char *name, int argi)
1181 if (!ir_match_start (name, p, iea, ++argi))
1183 ir_InternationalString (iea, p->name, "name", argi);
1184 ir_HumanString (iea, p->description, "description", argi);
1185 ir_HumanString (iea, p->address, "address", argi);
1186 ir_InternationalString (iea, p->email, "email", argi);
1187 ir_InternationalString (iea, p->phone, "phone", argi);
1188 return ir_match_end (name, iea, argi);
1191 static int ir_NetworkAddressIA (IrExpArg *iea,
1192 Z_NetworkAddressIA *p, const char *name, int argi)
1194 if (!ir_match_start (name, p, iea, ++argi))
1196 ir_InternationalString (iea, p->hostAddress, "hostAddress", argi);
1197 ir_integer (iea, p->port, "port", argi);
1198 return ir_match_end (name, iea, argi);
1201 static int ir_NetworkAddressOPA (IrExpArg *iea,
1202 Z_NetworkAddressOPA *p, const char *name, int argi)
1204 if (!ir_match_start (name, p, iea, ++argi))
1206 ir_InternationalString (iea, p->pSel, "pSel", argi);
1207 ir_InternationalString (iea, p->sSel, "sSel", argi);
1208 ir_InternationalString (iea, p->tSel, "tSel", argi);
1209 ir_InternationalString (iea, p->nSap, "nSap", argi);
1210 return ir_match_end (name, iea, argi);
1213 static int ir_NetworkAddressOther (IrExpArg *iea,
1214 Z_NetworkAddressOther *p, const char *name, int argi)
1216 if (!ir_match_start (name, p, iea, ++argi))
1218 ir_InternationalString (iea, p->type, "type", argi);
1219 ir_InternationalString (iea, p->address, "address", argi);
1220 return ir_match_end (name, iea, argi);
1223 static int ir_NetworkAddress (IrExpArg *iea,
1224 Z_NetworkAddress *p, const char *name, int argi)
1226 IrExpChoice arm [] = {
1227 { "iA", Z_NetworkAddress_iA, ir_NetworkAddressIA },
1228 { "oPA", Z_NetworkAddress_oPA, ir_NetworkAddressOPA },
1229 { "other", Z_NetworkAddress_other, ir_NetworkAddressOther },
1231 if (!ir_match_start (name, p, iea, ++argi))
1233 ir_choice (iea, arm, &p->which, p->u.internetAddress, argi);
1234 return ir_match_end (name, iea, argi);
1237 static int ir_AccessInfo (IrExpArg *iea,
1238 Z_AccessInfo *p, const char *name, int argi)
1240 if (!ir_match_start (name, p, iea, ++argi))
1242 ir_sequence (ir_QueryTypeDetails, iea, p->queryTypesSupported,
1243 &p->num_queryTypesSupported, "queryTypesSupported", argi);
1244 ir_sequence (ir_oid, iea, p->diagnosticsSets,
1245 &p->num_diagnosticsSets, "diagnosticsSets", argi);
1246 ir_sequence (ir_oid, iea, p->attributeSetIds,
1247 &p->num_attributeSetIds, "attributeSetIds", argi);
1248 ir_sequence (ir_oid, iea, p->schemas,
1249 &p->num_schemas, "schemas", argi);
1250 ir_sequence (ir_oid, iea, p->recordSyntaxes,
1251 &p->num_recordSyntaxes, "recordSyntaxes", argi);
1252 ir_sequence (ir_oid, iea, p->resourceChallenges,
1253 &p->num_resourceChallenges, "resourceChallenges", argi);
1254 ir_AccessRestrictions (iea, p->restrictedAccess, "restrictedAccess", argi);
1255 ir_Costs (iea, p->costInfo, "costInfo", argi);
1256 ir_sequence (ir_oid, iea, p->variantSets,
1257 &p->num_variantSets, "variantSets", argi);
1258 ir_sequence (ir_ElementSetName, iea, p->elementSetNames,
1259 &p->num_elementSetNames, "elementSetNames", argi);
1260 ir_sequence (ir_InternationalString, iea, p->unitSystems,
1261 &p->num_unitSystems, "unitSystems", argi);
1262 return ir_match_end (name, iea, argi);
1266 static int ir_QueryTypeDetails (IrExpArg *iea,
1267 Z_QueryTypeDetails *p, const char *name, int argi)
1269 static IrExpChoice arm[] = {
1270 { "private", Z_QueryTypeDetails_private,
1271 ir_PrivateCapabilities },
1272 { "rpn", Z_QueryTypeDetails_rpn,
1273 ir_RpnCapabilities },
1274 { "iso8777", Z_QueryTypeDetails_iso8777,
1275 ir_Iso8777Capabilities },
1276 { "z3958", Z_QueryTypeDetails_z3958,
1278 { "erpn", Z_QueryTypeDetails_erpn,
1279 ir_RpnCapabilities },
1280 { "rankedList", Z_QueryTypeDetails_rankedList,
1284 if (!ir_match_start (name, p, iea, ++argi))
1286 ir_choice (iea, arm, &p->which, p->u.zprivate, argi);
1287 return ir_match_end (name, iea, argi);
1290 static int ir_PrivateCapOperator (IrExpArg *iea,
1291 Z_PrivateCapOperator *p, const char *name, int argi)
1293 if (!ir_match_start (name, p, iea, ++argi))
1295 ir_InternationalString (iea, p->roperator, "operator", argi);
1296 ir_HumanString (iea, p->description, "description", argi);
1297 return ir_match_end (name, iea, argi);
1300 static int ir_PrivateCapabilities (IrExpArg *iea,
1301 Z_PrivateCapabilities *p, const char *name, int argi)
1303 if (!ir_match_start (name, p, iea, ++argi))
1306 ir_sequence (ir_PrivateCapOperator, iea, p->operators,
1307 &p->num_operators, "operators", argi);
1308 ir_sequence (ir_SearchKey, iea, p->searchKeys,
1309 &p->num_searchKeys, "searchKeys", argi);
1310 ir_sequence (ir_HumanString, iea, p->description,
1311 &p->num_description, "description", argi);
1312 return ir_match_end (name, iea, argi);
1315 static int ir_RpnCapabilities (IrExpArg *iea,
1316 Z_RpnCapabilities *p, const char *name, int argi)
1318 if (!ir_match_start (name, p, iea, ++argi))
1320 ir_sequence (ir_integer, iea, p->operators,
1321 &p->num_operators, "operators", argi);
1322 ir_bool (iea, p->resultSetAsOperandSupported,
1323 "resultSetAsOperandSupported", argi);
1324 ir_bool (iea, p->restrictionOperandSupported,
1325 "restrictionOperandSupported", argi);
1326 ir_ProximitySupport (iea, p->proximity, "proximity", argi);
1327 return ir_match_end (name, iea, argi);
1330 static int ir_Iso8777Capabilities (IrExpArg *iea,
1331 Z_Iso8777Capabilities *p, const char *name, int argi)
1333 if (!ir_match_start (name, p, iea, ++argi))
1335 ir_sequence (ir_SearchKey, iea, p->searchKeys,
1336 &p->num_searchKeys, "searchKeys", argi);
1337 ir_HumanString (iea, p->restrictions, "restrictions", argi);
1338 return ir_match_end (name, iea, argi);
1341 static int ir_ProxSupportPrivate (IrExpArg *iea,
1342 Z_ProxSupportPrivate *p, const char *name, int argi)
1344 if (!ir_match_start (name, p, iea, ++argi))
1346 ir_integer (iea, p->unit, "unit", argi);
1347 ir_HumanString (iea, p->description, "description", argi);
1348 return ir_match_end (name, iea, argi);
1351 static int ir_ProxSupportUnit (IrExpArg *iea,
1352 Z_ProxSupportUnit *p, const char *name, int argi)
1354 static IrExpChoice arm [] = {
1355 { "known", Z_ProxSupportUnit_known, ir_integer },
1356 { "private", Z_ProxSupportUnit_private, ir_ProxSupportPrivate },
1358 if (!ir_match_start (name, p, iea, ++argi))
1360 ir_choice (iea, arm, &p->which, p->u.zprivate, argi);
1361 return ir_match_end (name, iea, argi);
1364 static int ir_ProximitySupport (IrExpArg *iea,
1365 Z_ProximitySupport *p, const char *name, int argi)
1367 if (!ir_match_start (name, p, iea, ++argi))
1369 ir_bool (iea, p->anySupport, "anySupport", argi);
1370 ir_sequence (ir_ProxSupportUnit, iea, p->unitsSupported,
1371 &p->num_unitsSupported, "unitsSupported", argi);
1372 return ir_match_end (name, iea, argi);
1375 static int ir_SearchKey (IrExpArg *iea,
1376 Z_SearchKey *p, const char *name, int argi)
1378 if (!ir_match_start (name, p, iea, ++argi))
1380 ir_InternationalString (iea, p->searchKey, "searchKey", argi);
1381 ir_HumanString (iea, p->description, "description", argi);
1382 return ir_match_end (name, iea, argi);
1385 static int ir_AccessRestrictionsUnit (IrExpArg *iea,
1386 Z_AccessRestrictionsUnit *p, const char *name, int argi)
1388 static IrExpChoice arm[] = {
1389 { "any", Z_AccessRestrictions_any,
1391 { "search", Z_AccessRestrictions_search,
1393 { "present", Z_AccessRestrictions_present,
1395 { "specificElements", Z_AccessRestrictions_specific_elements,
1397 { "extendedServices", Z_AccessRestrictions_extended_services,
1399 { "byDatabase", Z_AccessRestrictions_by_database,
1403 if (!ir_match_start (name, p, iea, ++argi))
1405 ir_choice (iea, arm, p->accessType, ODR_NULLVAL, argi);
1406 ir_HumanString (iea, p->accessText, "accessText", argi);
1407 ir_sequence (ir_oid, iea, p->accessChallenges,
1408 &p->num_accessChallenges, "accessChallenges", argi);
1409 return ir_match_end (name, iea, argi);
1412 static int ir_AccessRestrictions (IrExpArg *iea,
1413 Z_AccessRestrictions *p, const char *name, int argi)
1415 if (!ir_match_start (name, p, iea, ++argi))
1417 ir_sequence (ir_AccessRestrictionsUnit, iea, p->restrictions,
1418 &p->num_restrictions, "restrictions", argi);
1419 return ir_match_end (name, iea, argi);
1422 static int ir_CostsOtherCharge (IrExpArg *iea,
1423 Z_CostsOtherCharge *p, const char *name, int argi)
1425 if (!ir_match_start (name, p, iea, ++argi))
1427 ir_HumanString (iea, p->forWhat, "forWhat", argi);
1428 ir_Charge (iea, p->charge, "charge", argi);
1429 return ir_match_end (name, iea, argi);
1432 static int ir_Costs (IrExpArg *iea,
1433 Z_Costs *p, const char *name, int argi)
1435 if (!ir_match_start (name, p, iea, ++argi))
1437 ir_Charge (iea, p->connectCharge, "connectCharge", argi);
1438 ir_Charge (iea, p->connectTime, "connectTime", argi);
1439 ir_Charge (iea, p->displayCharge, "displayCharge", argi);
1440 ir_Charge (iea, p->searchCharge, "searchCharge", argi);
1441 ir_Charge (iea, p->subscriptCharge, "subscriptCharge", argi);
1443 ir_sequence (ir_CostsOtherCharge, iea, p->otherCharges,
1444 &p->num_otherCharges, "otherCharges", argi);
1445 return ir_match_end (name, iea, argi);
1448 static int ir_Charge (IrExpArg *iea,
1449 Z_Charge *p, const char *name, int argi)
1451 if (!ir_match_start (name, p, iea, ++argi))
1453 ir_IntUnit (iea, p->cost, "cost", argi);
1454 ir_Unit (iea, p->perWhat, "perWhat", argi);
1455 ir_HumanString (iea, p->text, "text", argi);
1456 return ir_match_end (name, iea, argi);
1459 static int ir_DatabaseList (IrExpArg *iea,
1460 Z_DatabaseList *p, const char *name, int argi)
1462 if (!ir_match_start (name, p, iea, ++argi))
1464 ir_sequence (ir_DatabaseName, iea, p->databases,
1465 &p->num_databases, "databases", argi);
1466 return ir_match_end (name, iea, argi);
1469 static int ir_AttributeCombinations (IrExpArg *iea,
1470 Z_AttributeCombinations *p, const char *name, int argi)
1472 if (!ir_match_start (name, p, iea, ++argi))
1474 ir_oid (iea, p->defaultAttributeSet, "defaultAttributeSet", argi);
1475 ir_sequence (ir_AttributeCombination, iea, p->legalCombinations,
1476 &p->num_legalCombinations, "legalCombinations", argi);
1477 return ir_match_end (name, iea, argi);
1480 static int ir_AttributeCombination (IrExpArg *iea,
1481 Z_AttributeCombination *p, const char *name, int argi)
1483 if (!ir_match_start (name, p, iea, ++argi))
1485 ir_sequence (ir_AttributeOccurrence, iea, p->occurrences,
1486 &p->num_occurrences, "occurrences", argi);
1487 return ir_match_end (name, iea, argi);
1490 static int ir_AttributeValueList (IrExpArg *iea,
1491 Z_AttributeValueList *p, const char *name, int argi)
1493 if (!ir_match_start (name, p, iea, ++argi))
1495 ir_sequence (ir_StringOrNumeric, iea, p->attributes,
1496 &p->num_attributes, "attributes", argi);
1497 return ir_match_end (name, iea, argi);
1500 static int ir_AttributeOccurrence (IrExpArg *iea,
1501 Z_AttributeOccurrence *p, const char *name, int argi)
1503 static IrExpChoice arm [] = {
1504 { "anyOrNone", Z_AttributeOcc_anyOrNone, ir_null },
1505 { "specific", Z_AttributeOcc_specific, ir_AttributeValueList },
1506 { NULL, 0, NULL } };
1507 if (!ir_match_start (name, p, iea, ++argi))
1509 ir_oid (iea, p->attributeSet, "attributeSet", argi);
1510 ir_integer (iea, p->attributeType, "attributeType", argi);
1511 ir_null (iea, p->mustBeSupplied, "mustBeSupplied", argi);
1512 ir_choice (iea, arm, &p->which, p->attributeValues->anyOrNone, argi);
1513 return ir_match_end (name, iea, argi);
1516 static int ir_AttributeValue (IrExpArg *iea,
1517 Z_AttributeValue *p, const char *name, int argi)
1519 if (!ir_match_start (name, p, iea, ++argi))
1521 ir_StringOrNumeric (iea, p->value, "value", argi);
1522 ir_HumanString (iea, p->description, "description", argi);
1523 ir_sequence (ir_StringOrNumeric, iea, p->subAttributes,
1524 &p->num_subAttributes, "subAttributes", argi);
1525 ir_sequence (ir_StringOrNumeric, iea, p->superAttributes,
1526 &p->num_superAttributes, "superAttributes", argi);
1527 ir_null (iea, p->partialSupport, "partialSupport", argi);
1528 return ir_match_end (name, iea, argi);
1531 static int ir_StringOrNumeric (IrExpArg *iea,
1532 Z_StringOrNumeric *p, const char *name, int argi)
1534 IrExpChoice arm[] = {
1535 { "string", Z_StringOrNumeric_string, ir_InternationalString },
1536 { "numeric", Z_StringOrNumeric_numeric, ir_integer },
1538 if (!ir_match_start (name, p, iea, ++argi))
1540 ir_choice (iea, arm, &p->which, p->u.string, argi);
1541 return ir_match_end (name, iea, argi);
1544 static int ir_ElementSpec (IrExpArg *iea,
1545 Z_ElementSpec *p, const char *name, int argi)
1547 static IrExpChoice arm[] = {
1548 { "elementSetName", Z_ElementSpec_elementSetName,
1549 ir_InternationalString },
1550 { "externalSpec", Z_ElementSpec_externalSpec,
1554 if (!ir_match_start (name, p, iea, ++argi))
1556 ir_choice (iea, arm, &p->which, p->u.elementSetName, argi);
1557 return ir_match_end (name, iea, argi);
1560 static int ir_Specification (IrExpArg *iea,
1561 Z_Specification *p, const char *name, int argi)
1563 if (!ir_match_start (name, p, iea, ++argi))
1565 ir_oid (iea, p->schema, "schema", argi);
1566 ir_ElementSpec (iea, p->elementSpec, "elementSpec", argi);
1567 return ir_match_end (name, iea, argi);
1570 static int ir_InfoCategory (IrExpArg *iea,
1571 Z_InfoCategory *p, const char *name, int argi)
1573 if (!ir_match_start (name, p, iea, ++argi))
1575 ir_oid (iea, p->categoryTypeId, "categoryTypeId", argi);
1576 ir_integer (iea, p->categoryValue, "categoryValue", argi);
1577 return ir_match_end (name, iea, argi);
1580 static int ir_OtherInformationUnit (IrExpArg *iea,
1581 Z_OtherInformationUnit *p, const char *name, int argi)
1583 static IrExpChoice arm[] = {
1584 { "characterInfo", Z_OtherInfo_characterInfo,
1585 ir_InternationalString },
1586 { "binaryInfo", Z_OtherInfo_binaryInfo,
1588 { "externallyDefinedInfo", Z_OtherInfo_externallyDefinedInfo,
1590 { "oid", Z_OtherInfo_oid,
1594 if (!ir_match_start (name, p, iea, ++argi))
1596 ir_InfoCategory (iea, p->category, "category", argi);
1597 ir_choice (iea, arm, &p->which, p->information.characterInfo, argi);
1598 return ir_match_end (name, iea, argi);
1601 static int ir_OtherInformation (IrExpArg *iea,
1602 Z_OtherInformation *p, const char *name, int argi)
1604 if (!ir_match_start (name, p, iea, ++argi))
1606 ir_sequence (ir_OtherInformationUnit, iea, p->list,
1607 &p->num_elements, "list", argi);
1608 return ir_match_end (name, iea, argi);
1611 static int ir_IntUnit (IrExpArg *iea,
1612 Z_IntUnit *p, const char *name, int argi)
1614 if (!ir_match_start (name, p, iea, ++argi))
1616 ir_integer (iea, p->value, "value", argi);
1617 ir_Unit (iea, p->unitUsed, "unitUsed", argi);
1618 return ir_match_end (name, iea, argi);
1621 static int ir_Unit (IrExpArg *iea,
1622 Z_Unit *p, const char *name, int argi)
1624 if (!ir_match_start (name, p, iea, ++argi))
1626 ir_InternationalString (iea, p->unitSystem, "unitSystem", argi);
1627 ir_StringOrNumeric (iea, p->unitType, "unitType", argi);
1628 ir_StringOrNumeric (iea, p->unit, "unit", argi);
1629 ir_integer (iea, p->scaleFactor, "scaleFactor", argi);
1630 return ir_match_end (name, iea, argi);
1633 int ir_ExplainRecord (IrExpArg *iea, Z_ExplainRecord *p, int argi)
1635 static IrExpChoice arm[] = {
1636 {"targetInfo", Z_Explain_targetInfo,
1638 {"databaseInfo", Z_Explain_databaseInfo,
1640 {"schemaInfo", Z_Explain_schemaInfo,
1642 {"tagSetInfo", Z_Explain_tagSetInfo,
1644 {"recordSyntaxInfo", Z_Explain_recordSyntaxInfo,
1645 ir_RecordSyntaxInfo},
1646 {"attributeSetInfo", Z_Explain_attributeSetInfo,
1647 ir_AttributeSetInfo},
1648 {"termListInfo", Z_Explain_termListInfo,
1650 {"extendedServicesInfo", Z_Explain_extendedServicesInfo,
1651 ir_ExtendedServicesInfo},
1652 {"attributeDetails", Z_Explain_attributeDetails,
1653 ir_AttributeDetails},
1654 {"termListDetails", Z_Explain_termListDetails,
1655 ir_TermListDetails},
1656 {"elementSetDetails", Z_Explain_elementSetDetails,
1657 ir_ElementSetDetails},
1658 {"retrievalRecordDetails", Z_Explain_retrievalRecordDetails,
1659 ir_RetrievalRecordDetails},
1660 {"sortDetails", Z_Explain_sortDetails,
1662 {"processing", Z_Explain_processing,
1663 ir_ProcessingInformation},
1664 {"variants", Z_Explain_variants,
1666 {"units", Z_Explain_units,
1668 {"categoryList", Z_Explain_categoryList,
1673 return ir_choice (iea, arm, &p->which, p->u.targetInfo, argi);
1676 int ir_tcl_get_explain (Tcl_Interp *interp, Z_ExplainRecord *rec,
1677 int argc, char **argv)
1683 iea.interp = interp;
1685 return ir_ExplainRecord (&iea, rec, 2);