2 * IR toolkit for tcl/tk
4 * See the file LICENSE for details.
5 * Sebastian Hammer, Adam Dickmeiss
8 * Revision 1.5 1996-08-23 11:59:47 adam
9 * Bug fix: infinite look in ir_oid.
11 * Revision 1.4 1996/08/22 13:39:31 adam
12 * More work on explain.
14 * Revision 1.3 1996/08/21 13:32:50 adam
15 * Implemented saveFile method and extended loadFile method to work with it.
17 * Revision 1.2 1996/08/20 09:27:48 adam
18 * More work on explain.
19 * Renamed tkinit.c to tkmain.c. The tcl shell uses the Tcl 7.5 interface
20 * for socket i/o instead of the handcrafted one (for Tcl 7.3 and Tcl7.4).
22 * Revision 1.1 1996/08/16 15:07:43 adam
23 * First work on Explain.
46 typedef char *Z_ElementSetName;
47 typedef Odr_oid *Z_AttributeSetId;
48 typedef char *Z_InternationalString;
49 typedef char *Z_LanguageCode;
51 static int ir_UnitType (IrExpArg *iea,
52 Z_UnitType *p, const char *name, int argi);
53 static int ir_Unit (IrExpArg *iea,
54 Z_Unit *p, const char *name, int argi);
55 static int ir_VariantType (IrExpArg *iea,
56 Z_VariantType *p, const char *name, int argi);
57 static int ir_OmittedAttributeInterpretation (IrExpArg *iea,
58 Z_OmittedAttributeInterpretation *p, const char *name, int argi);
59 static int ir_AttributeTypeDetails (IrExpArg *iea,
60 Z_AttributeTypeDetails *p, const char *name, int argi);
61 static int ir_Specification (IrExpArg *iea,
62 Z_Specification *p, const char *name, int argi);
63 static int ir_RetrievalRecordDetails (IrExpArg *iea,
64 Z_RetrievalRecordDetails *p, const char *name, int argi);
65 static int ir_ElementInfo (IrExpArg *iea,
66 Z_ElementInfo *p, const char *name, int argi);
67 static int ir_InternationalString (IrExpArg *iea,
68 char *p, const char *name, int argi);
69 static int ir_TagSetInfo (IrExpArg *iea,
70 Z_TagSetInfo *p, const char *name, int argi);
71 static int ir_DatabaseName (IrExpArg *iea,
72 char *p, const char *name, int argi);
73 static int ir_AccessInfo (IrExpArg *iea,
74 Z_AccessInfo *p, const char *name, int argi);
75 static int ir_bool (IrExpArg *iea,
76 bool_t *p, const char *name, int argi);
77 static int ir_LanguageCode (IrExpArg *iea,
78 char *p, const char *name, int argi);
79 static int ir_Units (IrExpArg *iea,
80 Z_Units *p, const char *name, int argi);
81 static int ir_SortDetails (IrExpArg *iea,
82 Z_SortDetails *p, const char *name, int argi);
83 static int ir_ElementSetDetails (IrExpArg *iea,
84 Z_ElementSetDetails *p, const char *name, int argi);
85 static int ir_TermListDetails (IrExpArg *iea,
86 Z_TermListDetails *p, const char *name, int argi);
87 static int ir_AttributeValue (IrExpArg *iea,
88 Z_AttributeValue *p, const char *name, int argi);
89 static int ir_ElementDataType (IrExpArg *iea,
90 Z_ElementDataType *p, const char *name, int argi);
91 static int ir_ProximitySupport (IrExpArg *iea,
92 Z_ProximitySupport *p, const char *name, int argi);
93 static int ir_ProcessingInformation (IrExpArg *iea,
94 Z_ProcessingInformation *p, const char *name, int argi);
95 static int ir_AttributeCombinations (IrExpArg *iea,
96 Z_AttributeCombinations *p, const char *name, int argi);
97 static int ir_AttributeSetDetails (IrExpArg *iea,
98 Z_AttributeSetDetails *p, const char *name, int argi);
99 static int ir_DatabaseInfo (IrExpArg *iea,
100 Z_DatabaseInfo *p, const char *name, int argi);
101 static int ir_IconObject (IrExpArg *iea,
102 Z_IconObject *p, const char *name, int argi);
103 static int ir_RpnCapabilities (IrExpArg *iea,
104 Z_RpnCapabilities *p, const char *name, int argi);
105 static int ir_QueryTypeDetails (IrExpArg *iea,
106 Z_QueryTypeDetails *p, const char *name, int argi);
107 static int ir_ValueDescription (IrExpArg *iea,
108 Z_ValueDescription *p, const char *name, int argi);
109 static int ir_AttributeSetInfo (IrExpArg *iea,
110 Z_AttributeSetInfo *p, const char *name, int argi);
111 static int ir_SchemaInfo (IrExpArg *iea,
112 Z_SchemaInfo *p, const char *name, int argi);
113 static int ir_AttributeOccurrence (IrExpArg *iea,
114 Z_AttributeOccurrence *p, const char *name, int argi);
115 static int ir_AttributeCombination (IrExpArg *iea,
116 Z_AttributeCombination *p, const char *name, int argi);
117 static int ir_UnitInfo (IrExpArg *iea,
118 Z_UnitInfo *p, const char *name, int argi);
119 static int ir_VariantClass (IrExpArg *iea,
120 Z_VariantClass *p, const char *name, int argi);
121 static int ir_VariantSetInfo (IrExpArg *iea,
122 Z_VariantSetInfo *p, const char *name, int argi);
123 static int ir_RecordTag (IrExpArg *iea,
124 Z_RecordTag *p, const char *name, int argi);
125 static int ir_TermListInfo (IrExpArg *iea,
126 Z_TermListInfo *p, const char *name, int argi);
127 static int ir_StringOrNumeric (IrExpArg *iea,
128 Z_StringOrNumeric *p, const char *name, int argi);
129 static int ir_CategoryInfo (IrExpArg *iea,
130 Z_CategoryInfo *p, const char *name, int argi);
131 static int ir_ValueRange (IrExpArg *iea,
132 Z_ValueRange *p, const char *name, int argi);
133 static int ir_Term (IrExpArg *iea,
134 Z_Term *p, const char *name, int argi);
135 static int ir_DatabaseList (IrExpArg *iea,
136 Z_DatabaseList *p, const char *name, int argi);
137 static int ir_HumanString (IrExpArg *iea,
138 Z_HumanString *p, const char *name, int argi);
139 static int ir_CommonInfo (IrExpArg *iea,
140 Z_CommonInfo *p, const char *name, int argi);
141 static int ir_NetworkAddress (IrExpArg *iea,
142 Z_NetworkAddress *p, const char *name, int argi);
143 static int ir_Costs (IrExpArg *iea,
144 Z_Costs *p, const char *name, int argi);
145 static int ir_RecordSyntaxInfo (IrExpArg *iea,
146 Z_RecordSyntaxInfo *p, const char *name, int argi);
147 static int ir_OtherInformation (IrExpArg *iea,
148 Z_OtherInformation *p, const char *name, int argi);
149 static int ir_CategoryList (IrExpArg *iea,
150 Z_CategoryList *p, const char *name, int argi);
151 static int ir_VariantValue (IrExpArg *iea,
152 Z_VariantValue *p, const char *name, int argi);
153 static int ir_PerElementDetails (IrExpArg *iea,
154 Z_PerElementDetails *p, const char *name, int argi);
155 static int ir_AttributeDetails (IrExpArg *iea,
156 Z_AttributeDetails *p, const char *name, int argi);
157 static int ir_ExtendedServicesInfo (IrExpArg *iea,
158 Z_ExtendedServicesInfo *p, const char *name, int argi);
159 static int ir_AttributeType (IrExpArg *iea,
160 Z_AttributeType *p, const char *name, int argi);
161 static int ir_IntUnit (IrExpArg *iea,
162 Z_IntUnit *p, const char *name, int argi);
163 static int ir_Charge (IrExpArg *iea,
164 Z_Charge *p, const char *name, int argi);
165 static int ir_PrivateCapabilities (IrExpArg *iea,
166 Z_PrivateCapabilities *p, const char *name, int argi);
167 static int ir_ValueSet (IrExpArg *iea,
168 Z_ValueSet *p, const char *name, int argi);
169 static int ir_AttributeDescription (IrExpArg *iea,
170 Z_AttributeDescription *p, const char *name, int argi);
171 static int ir_Path (IrExpArg *iea,
172 Z_Path *p, const char *name, int argi);
173 static int ir_ContactInfo (IrExpArg *iea,
174 Z_ContactInfo *p, const char *name, int argi);
175 static int ir_SearchKey (IrExpArg *iea,
176 Z_SearchKey *p, const char *name, int argi);
177 static int ir_Iso8777Capabilities (IrExpArg *iea,
178 Z_Iso8777Capabilities *p, const char *name, int argi);
179 static int ir_AccessRestrictions (IrExpArg *iea,
180 Z_AccessRestrictions *p, const char *name, int argi);
181 static int ir_SortKeyDetails (IrExpArg *iea,
182 Z_SortKeyDetails *p, const char *name, int argi);
186 ir_match_start (const char *name, void *p, IrExpArg *iea, int argi)
190 if (argi >= iea->argc)
191 Tcl_AppendResult (iea->interp, name, " ", NULL);
194 if (argi < iea->argc)
196 if (strcmp (name, iea->argv[argi]))
200 Tcl_AppendResult (iea->interp, "{", name, " ", NULL);
205 ir_match_end (const char *name, IrExpArg *iea, int argi)
207 if (argi >= iea->argc)
208 Tcl_AppendResult (iea->interp, "} ", NULL);
213 ir_choice (IrExpArg *iea, IrExpChoice *clist, int *what, void *p,
220 if (clist->id == *what)
221 return (*clist->handle)(iea, p, clist->name, argi);
225 if (argi >= iea->argc)
226 Tcl_AppendResult (iea->interp, "{} ", NULL);
230 static int ir_null (IrExpArg *iea,
231 Odr_null *p, const char *name, int argi)
233 if (!ir_match_start (name, p, iea, ++argi))
235 Tcl_AppendResult (iea->interp, "1 ", NULL);
236 return ir_match_end (name, iea, argi);
239 static int ir_CString (IrExpArg *iea,
240 char *p, const char *name, int argi)
242 if (!ir_match_start (name, p, iea, ++argi))
244 Tcl_AppendElement (iea->interp, p);
245 return ir_match_end (name, iea, argi);
248 static int ir_ElementSetName (IrExpArg *iea,
249 char *p, const char *name, int argi)
251 return ir_CString (iea, p, name, argi);
254 static int ir_DatabaseName (IrExpArg *iea,
255 char *p, const char *name, int argi)
257 return ir_CString (iea, p, name, argi);
260 static int ir_InternationalString (IrExpArg *iea,
261 char *p, const char *name, int argi)
263 return ir_CString (iea, p, name, argi);
266 static int ir_GeneralizedTime (IrExpArg *iea,
267 char *p, const char *name, int argi)
269 return ir_CString (iea, p, name, argi);
272 static int ir_oid (IrExpArg *iea,
273 Odr_oid *p, const char *name, int argi)
276 if (!ir_match_start (name, p, iea, ++argi))
282 sprintf (buf, "%c%d", first, *p);
283 Tcl_AppendResult (iea->interp, buf, NULL);
287 return ir_match_end (name, iea, argi);
290 static int ir_TagTypeMapping (IrExpArg *iea,
291 Z_TagTypeMapping **p, const char *name, int argi)
293 if (!ir_match_start (name, p, iea, ++argi))
296 return ir_match_end (name, iea, argi);
299 static int ir_PrimitiveDataType (IrExpArg *iea,
300 int *p, const char *name, int argi)
302 if (!ir_match_start (name, p, iea, ++argi))
305 return ir_match_end (name, iea, argi);
308 static int ir_octet (IrExpArg *iea,
309 Odr_oct *p, const char *name, int argi)
311 if (!ir_match_start (name, p, iea, ++argi))
314 return ir_match_end (name, iea, argi);
317 static int ir_choice_nop (IrExpArg *iea,
318 void *p, const char *name, int argi)
320 if (argi >= iea->argc)
321 Tcl_AppendResult (iea->interp, name, " ", NULL);
325 static int ir_bool (IrExpArg *iea,
326 bool_t *p, const char *name, int argi)
328 if (!ir_match_start (name, p, iea, ++argi))
330 Tcl_AppendResult (iea->interp, *p ? "1" : "0", NULL);
331 return ir_match_end (name, iea, argi);
334 static int ir_integer (IrExpArg *iea,
335 int *p, const char *name, int argi)
338 if (!ir_match_start (name, p, iea, ++argi))
340 sprintf (buf, "%d", *p);
341 Tcl_AppendResult (iea->interp, buf, NULL);
342 return ir_match_end (name, iea, argi);
345 static int ir_LanguageCode (IrExpArg *iea,
346 char *p, const char *name, int argi)
348 return ir_CString (iea, p, name, argi);
351 static int ir_External (IrExpArg *iea,
352 Z_External *p, const char *name, int argi)
354 if (!ir_match_start (name, p, iea, ++argi))
357 return ir_match_end (name, iea, argi);
360 static int ir_sequence (int (*fh)(), IrExpArg *iea, void *p, int *num,
361 const char *name, int argi)
363 void **pp = (void **) p;
366 if (!ir_match_start (name, p, iea, ++argi))
368 for (i = 0; i < *num; i++)
369 (*fh)(iea, pp[i], "", argi);
370 return ir_match_end (name, iea, argi);
373 static int ir_Term (IrExpArg *iea,
374 Z_Term *p, const char *name, int argi)
376 static IrExpChoice arm [] = {
377 { "general", Z_Term_general,
379 { "numeric", Z_Term_numeric,
381 { "characterString", Z_Term_characterString,
382 ir_InternationalString },
385 { "dateTime", Z_Term_dateTime,
386 ir_GeneralizedTime },
387 { "external", Z_Term_external,
389 { "null", Z_Term_null,
393 if (!ir_match_start (name, p, iea, ++argi))
396 ir_choice (iea, arm, &p->which, p->u.general, argi);
397 return ir_match_end (name, iea, argi);
400 static int ir_TargetInfo (IrExpArg *iea,
401 Z_TargetInfo *p, const char *name, int argi)
403 if (!ir_match_start (name, p, iea, ++argi))
405 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
406 ir_InternationalString (iea, p->name, "name", argi);
407 ir_HumanString (iea, p->recentNews, "recentNews", argi);
408 ir_IconObject (iea, p->icon, "icon", argi);
409 ir_bool (iea, p->namedResultSets, "namedResultSets", argi);
410 ir_bool (iea, p->multipleDBsearch, "multipleDBsearch", argi);
411 ir_integer (iea, p->maxResultSets, "maxResultSets", argi);
412 ir_integer (iea, p->maxResultSize, "maxResultSize", argi);
413 ir_integer (iea, p->maxTerms, "maxTerms", argi);
414 ir_IntUnit (iea, p->timeoutInterval, "timeoutInterval", argi);
415 ir_HumanString (iea, p->welcomeMessage, "welcomeMessage", argi);
416 ir_ContactInfo (iea, p->contactInfo, "contactInfo", argi);
417 ir_HumanString (iea, p->description, "description", argi);
418 ir_sequence (ir_InternationalString, iea, p->nicknames,
419 &p->num_nicknames, "nicknames", argi);
420 ir_HumanString (iea, p->usageRest, "usageRest", argi);
421 ir_HumanString (iea, p->paymentAddr, "paymentAddr", argi);
422 ir_HumanString (iea, p->hours, "hours", argi);
423 ir_sequence (ir_DatabaseList, iea, p->dbCombinations,
424 &p->num_dbCombinations, "dbCombinations", argi);
425 ir_sequence (ir_NetworkAddress, iea, p->addresses,
426 &p->num_addresses, "addresses", argi);
427 ir_AccessInfo (iea, p->commonAccessInfo, "commonAccessInfo", argi);
428 return ir_match_end (name, iea, argi);
431 static int ir_DatabaseInfo (IrExpArg *iea,
432 Z_DatabaseInfo *p, const char *name, int argi)
434 static IrExpChoice arm_recordCount [] = {
435 { "actualNumber", Z_Exp_RecordCount_actualNumber,
437 { "approxNumber", Z_Exp_RecordCount_approxNumber,
441 if (!ir_match_start (name, p, iea, ++argi))
444 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
445 ir_DatabaseName (iea, p->name, "name", argi);
446 ir_null (iea, p->explainDatabase, "explainDatabase", argi);
447 ir_sequence (ir_DatabaseName, iea, p->nicknames,
448 &p->num_nicknames, "nicknames", argi);
449 ir_IconObject (iea, p->icon, "icon", argi);
450 ir_bool (iea, p->userFee, "userFee", argi);
451 ir_bool (iea, p->available, "available", argi);
452 ir_HumanString (iea, p->titleString, "titleString", argi);
453 ir_sequence (ir_HumanString, iea, p->keywords,
454 &p->num_keywords, "keywords", argi);
455 ir_HumanString (iea, p->description, "description", argi);
456 ir_DatabaseList (iea, p->associatedDbs, "associatedDbs", argi);
457 ir_DatabaseList (iea, p->subDbs, "subDbs", argi);
458 ir_HumanString (iea, p->disclaimers, "disclaimers", argi);
459 ir_HumanString (iea, p->news, "news", argi);
461 ir_choice (iea, arm_recordCount, &p->recordCount_which,
462 p->recordCount, argi);
464 ir_HumanString (iea, p->defaultOrder, "defaultOrder", argi);
465 ir_integer (iea, p->avRecordSize, "avRecordSize", argi);
466 ir_integer (iea, p->maxRecordSize, "maxRecordSize", argi);
467 ir_HumanString (iea, p->hours, "hours", argi);
468 ir_HumanString (iea, p->bestTime, "bestTime", argi);
469 ir_GeneralizedTime (iea, p->lastUpdate, "lastUpdate", argi);
470 ir_IntUnit (iea, p->updateInterval, "updateInterval", argi);
471 ir_HumanString (iea, p->coverage, "coverage", argi);
472 ir_bool (iea, p->proprietary, "proprietary", argi);
473 ir_HumanString (iea, p->copyrightText, "copyrightText", argi);
474 ir_HumanString (iea, p->copyrightNotice, "copyrightNotice", argi);
475 ir_ContactInfo (iea, p->producerContactInfo, "producerContactInfo", argi);
476 ir_ContactInfo (iea, p->supplierContactInfo, "supplierContactInfo", argi);
477 ir_ContactInfo (iea, p->submissionContactInfo, "submissionContactInfo", argi);
478 ir_AccessInfo (iea, p->accessInfo, "accessInfo", argi);
479 return ir_match_end (name, iea, argi);
482 static int ir_SchemaInfo (IrExpArg *iea,
483 Z_SchemaInfo *p, const char *name, int argi)
485 if (!ir_match_start (name, p, iea, ++argi))
487 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
488 ir_oid (iea, p->schema, "schema", argi);
489 ir_InternationalString (iea, p->name, "name", argi);
490 ir_HumanString (iea, p->description, "description", argi);
492 ir_sequence (ir_TagTypeMapping, iea, p->tagTypeMapping,
493 &p->num_tagTypeMapping, "tagTypeMapping", argi);
494 ir_sequence (ir_ElementInfo, iea, p->recordStructure,
495 &p->num_recordStructure, "recordStructure", argi);
496 return ir_match_end (name, iea, argi);
499 static int ir_ElementDataTypePrimitive (IrExpArg *iea,
500 int *p, const char *name, int argi)
502 static IrExpChoice arm[] = {
503 {"octetString", Z_PrimitiveElement_octetString, ir_choice_nop },
504 {"numeric", Z_PrimitiveElement_numeric, ir_choice_nop },
507 if (!ir_match_start (name, p, iea, ++argi))
509 ir_choice (iea, arm, p, ODR_NULLVAL, argi);
510 return ir_match_end (name, iea, argi);
513 static int ir_ElementInfo (IrExpArg *iea,
514 Z_ElementInfo *p, const char *name, int argi)
516 if (!ir_match_start (name, p, iea, ++argi))
518 ir_InternationalString (iea, p->elementName, "elementName", argi);
519 ir_Path (iea, p->elementTagPath, "elementTagPath", argi);
520 ir_ElementDataType (iea, p->dataType, "dataType", argi);
521 ir_bool (iea, p->required, "required", argi);
522 ir_bool (iea, p->repeatable, "repeatable", argi);
523 ir_HumanString (iea, p->description, "description", argi);
524 return ir_match_end (name, iea, argi);
527 static int ir_ElementInfoList (IrExpArg *iea,
528 Z_ElementInfoList *p, const char *name, int argi)
530 if (!ir_match_start (name, p, iea, ++argi))
532 ir_sequence (ir_ElementInfo, iea, p->list,
533 &p->num, "list", argi);
534 return ir_match_end (name, iea, argi);
537 static int ir_ElementDataType (IrExpArg *iea,
538 Z_ElementDataType *p, const char *name, int argi)
540 static IrExpChoice arm[] = {
541 { "primitive", Z_ElementDataType_primitive,
542 ir_ElementDataTypePrimitive },
543 { "structured", Z_ElementDataType_structured,
544 ir_ElementInfoList },
546 if (!ir_match_start (name, p, iea, ++argi))
548 ir_choice (iea, arm, &p->which, p->u.primitive, argi);
549 return ir_match_end (name, iea, argi);
552 static int ir_PathUnit (IrExpArg *iea,
553 Z_PathUnit *p, const char *name, int argi)
555 if (!ir_match_start (name, p, iea, ++argi))
557 ir_integer (iea, p->tagType, "tagType", argi);
558 ir_StringOrNumeric (iea, p->tagValue, "tagValue", argi);
559 return ir_match_end (name, iea, argi);
562 static int ir_Path (IrExpArg *iea,
563 Z_Path *p, const char *name, int argi)
565 if (!ir_match_start (name, p, iea, ++argi))
567 ir_sequence (ir_PathUnit, iea, p->list,
568 &p->num, "list", argi);
569 return ir_match_end (name, iea, argi);
572 static int ir_TagSetInfoElements (IrExpArg *iea,
573 Z_TagSetInfoElements *p, const char *name, int argi)
575 if (!ir_match_start (name, p, iea, ++argi))
577 ir_InternationalString (iea, p->elementName, "elementname", argi);
578 ir_sequence (ir_InternationalString, iea, p->nicknames,
579 &p->num_nicknames, "nicknames", argi);
580 ir_StringOrNumeric (iea, p->elementTag, "elementTag", argi);
581 ir_HumanString (iea, p->description, "description", argi);
582 ir_PrimitiveDataType (iea, p->dataType, "dataType", argi);
583 ir_OtherInformation (iea, p->otherTagInfo, "otherTagInfo", argi);
584 return ir_match_end (name, iea, argi);
587 static int ir_TagSetInfo (IrExpArg *iea,
588 Z_TagSetInfo *p, const char *name, int argi)
590 if (!ir_match_start (name, p, iea, ++argi))
592 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
593 ir_oid (iea, p->tagSet, "tagSet", argi);
594 ir_InternationalString (iea, p->name, "name", argi);
595 ir_HumanString (iea, p->description, "description", argi);
596 ir_sequence (ir_TagSetInfoElements, iea, p->elements,
597 &p->num_elements, "elements", argi);
598 return ir_match_end (name, iea, argi);
601 static int ir_RecordSyntaxInfo (IrExpArg *iea,
602 Z_RecordSyntaxInfo *p, const char *name, int argi)
604 if (!ir_match_start (name, p, iea, ++argi))
606 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
607 ir_oid (iea, p->recordSyntax, "recordSyntax", argi);
608 ir_InternationalString (iea, p->name, "name", argi);
609 ir_sequence (ir_oid, iea, p->transferSyntaxes,
610 &p->num_transferSyntaxes, "transferSyntaxes", argi);
611 ir_HumanString (iea, p->description, "description", argi);
612 ir_InternationalString (iea, p->asn1Module, "asn1Module", argi);
613 ir_sequence (ir_ElementInfo, iea, p->abstractStructure,
614 &p->num_abstractStructure, "abstractStructure", argi);
615 return ir_match_end (name, iea, argi);
618 static int ir_AttributeType (IrExpArg *iea,
619 Z_AttributeType *p, const char *name, int argi)
621 if (!ir_match_start (name, p, iea, ++argi))
623 ir_InternationalString (iea, p->name, "name", argi);
624 ir_HumanString (iea, p->description, "description", argi);
625 ir_integer (iea, p->attributeType, "attributeType", argi);
626 ir_sequence (ir_AttributeDescription, iea, p->attributeValues,
627 &p->num_attributeValues, "attributeValues", argi);
628 return ir_match_end (name, iea, argi);
631 static int ir_AttributeSetInfo (IrExpArg *iea,
632 Z_AttributeSetInfo *p, const char *name, int argi)
634 if (!ir_match_start (name, p, iea, ++argi))
636 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
637 ir_oid (iea, p->attributeSet, "attributeSet", argi);
638 ir_InternationalString (iea, p->name, "name", argi);
639 ir_sequence (ir_AttributeType, iea, p->attributes,
640 &p->num_attributes, "attributes", argi);
641 ir_HumanString (iea, p->description, "description", argi);
642 return ir_match_end (name, iea, argi);
645 static int ir_AttributeDescription (IrExpArg *iea,
646 Z_AttributeDescription *p, const char *name, int argi)
648 if (!ir_match_start (name, p, iea, ++argi))
650 ir_InternationalString (iea, p->name, "name", argi);
651 ir_HumanString (iea, p->description, "description", argi);
652 ir_StringOrNumeric (iea, p->attributeValue, "attributeValue", argi);
653 ir_sequence (ir_StringOrNumeric,iea, p->equivalentAttributes,
654 &p->num_equivalentAttributes, "equivalentAttributes", argi);
655 return ir_match_end (name, iea, argi);
658 static int ir_TermListElement (IrExpArg *iea,
659 Z_TermListElement *p, const char *name, int argi)
661 static IrExpChoice searchCostArm [] = {
662 { "optimized", Z_TermListInfo_optimized, ir_choice_nop },
663 { "normal", Z_TermListInfo_normal, ir_choice_nop },
664 { "expensive", Z_TermListInfo_expensive, ir_choice_nop },
665 { "filter", Z_TermListInfo_filter, ir_choice_nop },
667 ir_InternationalString (iea, p->name, "name", argi);
668 ir_HumanString (iea, p->title, "title", argi);
670 ir_choice (iea, searchCostArm, p->searchCost, ODR_NULLVAL, argi);
672 ir_bool (iea, p->scanable, "scanable", argi);
673 ir_sequence (ir_InternationalString, iea, p->broader,
674 &p->num_broader, "broader", argi);
675 ir_sequence (ir_InternationalString, iea, p->narrower,
676 &p->num_narrower, "narrower", argi);
677 return ir_match_end (name, iea, argi);
680 static int ir_TermListInfo (IrExpArg *iea,
681 Z_TermListInfo *p, const char *name, int argi)
683 if (!ir_match_start (name, p, iea, ++argi))
685 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
686 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
687 ir_sequence (ir_TermListElement, iea, p->termLists,
688 &p->num_termLists, "termLists", argi);
689 return ir_match_end (name, iea, argi);
692 static int ir_ExtendedServicesInfo (IrExpArg *iea,
693 Z_ExtendedServicesInfo *p, const char *name, int argi)
695 static IrExpChoice waitActionArm [] = {
696 { "waitSupported", Z_ExtendedServicesInfo_waitSupported,
698 { "waitAlways", Z_ExtendedServicesInfo_waitAlways,
700 { "waitNotSupported", Z_ExtendedServicesInfo_waitNotSupported,
702 { "depends", Z_ExtendedServicesInfo_depends,
704 { "notSaying", Z_ExtendedServicesInfo_notSaying,
708 ir_InternationalString (iea, p->name, "name", argi);
709 if (!ir_match_start (name, p, iea, ++argi))
711 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
712 ir_oid (iea, p->type, "type", argi);
713 ir_InternationalString (iea, p->name, "name", argi);
714 ir_bool (iea, p->privateType, "privateType", argi);
715 ir_bool (iea, p->restrictionsApply, "restrictionsApply", argi);
716 ir_bool (iea, p->feeApply, "feeApply", argi);
717 ir_bool (iea, p->available, "available", argi);
718 ir_bool (iea, p->retentionSupported, "retentionSupported", argi);
720 ir_choice (iea, waitActionArm, p->waitAction, ODR_NULLVAL, argi);
722 ir_HumanString (iea, p->description, "description", argi);
723 ir_External (iea, p->specificExplain, "specificExplain", argi);
724 ir_InternationalString (iea, p->esASN, "esASN", argi);
725 return ir_match_end (name, iea, argi);
728 static int ir_AttributeDetails (IrExpArg *iea,
729 Z_AttributeDetails *p, const char *name, int argi)
731 if (!ir_match_start (name, p, iea, ++argi))
733 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
734 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
735 ir_sequence (ir_AttributeSetDetails, iea, p->attributesBySet,
736 &p->num_attributesBySet, "attributesBySet", argi);
737 ir_AttributeCombinations (iea, p->attributeCombinations,
738 "attributeCombinations", argi);
739 return ir_match_end (name, iea, argi);
742 static int ir_AttributeSetDetails (IrExpArg *iea,
743 Z_AttributeSetDetails *p, const char *name, int argi)
745 if (!ir_match_start (name, p, iea, ++argi))
747 ir_oid (iea, p->attributeSet, "attributeSet", argi);
748 ir_sequence (ir_AttributeTypeDetails, iea, p->attributesByType,
749 &p->num_attributesByType, "attributesByType", argi);
750 return ir_match_end (name, iea, argi);
753 static int ir_AttributeTypeDetails (IrExpArg *iea,
754 Z_AttributeTypeDetails *p, const char *name, int argi)
756 if (!ir_match_start (name, p, iea, ++argi))
758 ir_integer (iea, p->attributeType, "attributeType", argi);
759 ir_OmittedAttributeInterpretation (iea, p->optionalType,
760 "optionalType", argi);
761 ir_sequence (ir_AttributeValue, iea, p->attributeValues,
762 &p->num_attributeValues, "attributeValues", argi);
763 return ir_match_end (name, iea, argi);
766 static int ir_OmittedAttributeInterpretation (IrExpArg *iea,
767 Z_OmittedAttributeInterpretation *p, const char *name, int argi)
769 if (!ir_match_start (name, p, iea, ++argi))
771 ir_StringOrNumeric (iea, p->defaultValue, "defaultValue", argi);
772 ir_HumanString (iea, p->defaultDescription, "defaultDescription", argi);
773 return ir_match_end (name, iea, argi);
776 static int ir_EScanInfo (IrExpArg *iea,
777 Z_EScanInfo *p, const char *name, int argi)
779 if (!ir_match_start (name, p, iea, ++argi))
781 ir_integer (iea, p->maxStepSize, "maxStepSize", argi);
782 ir_HumanString (iea, p->collatingSequence, "collatingSequence", argi);
783 ir_bool (iea, p->increasing, "increasing", argi);
784 return ir_match_end (name, iea, argi);
787 static int ir_TermListDetails (IrExpArg *iea,
788 Z_TermListDetails *p, const char *name, int argi)
790 if (!ir_match_start (name, p, iea, ++argi))
792 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
793 ir_InternationalString (iea, p->termListName, "termListName", argi);
794 ir_HumanString (iea, p->description, "description", argi);
795 ir_AttributeCombinations (iea, p->attributes, "attributes", argi);
797 ir_EScanInfo (iea, p->scanInfo, "scanInfo", argi);
799 ir_integer (iea, p->estNumberTerms, "estNumberTerms", argi);
800 ir_sequence (ir_Term, iea, p->sampleTerms,
801 &p->num_sampleTerms, "sampleTerms", argi);
802 return ir_match_end (name, iea, argi);
805 static int ir_ElementSetDetails (IrExpArg *iea,
806 Z_ElementSetDetails *p, const char *name, int argi)
808 if (!ir_match_start (name, p, iea, ++argi))
810 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
811 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
812 ir_ElementSetName (iea, p->elementSetName, "elementSetName", argi);
813 ir_oid (iea, p->recordSyntax, "recordSyntax", argi);
814 ir_oid (iea, p->schema, "schema", argi);
815 ir_HumanString (iea, p->description, "description", argi);
816 ir_sequence (ir_PerElementDetails, iea, p->detailsPerElement,
817 &p->num_detailsPerElement, "detailsPerElement", argi);
818 return ir_match_end (name, iea, argi);
821 static int ir_RetrievalRecordDetails (IrExpArg *iea,
822 Z_RetrievalRecordDetails *p, const char *name, int argi)
824 if (!ir_match_start (name, p, iea, ++argi))
826 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
827 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
828 ir_oid (iea, p->schema, "schema", argi);
829 ir_oid (iea, p->recordSyntax, "recordSyntax", argi);
830 ir_HumanString (iea, p->description, "description", argi);
831 ir_sequence (ir_PerElementDetails, iea, p->detailsPerElement,
832 &p->num_detailsPerElement, "detailsPerElement", argi);
833 return ir_match_end (name, iea, argi);
836 static int ir_PerElementDetails (IrExpArg *iea,
837 Z_PerElementDetails *p, const char *name, int argi)
839 if (!ir_match_start (name, p, iea, ++argi))
841 ir_InternationalString (iea, p->name, "name", argi);
842 ir_RecordTag (iea, p->recordTag, "recordTag", argi);
843 ir_sequence (ir_Path, iea, p->schemaTags,
844 &p->num_schemaTags, "schemaTags", argi);
845 ir_integer (iea, p->maxSize, "maxSize", argi);
846 ir_integer (iea, p->minSize, "minSize", argi);
847 ir_integer (iea, p->avgSize, "avgSize", argi);
848 ir_integer (iea, p->fixedSize, "fixedSize", argi);
849 ir_bool (iea, p->repeatable, "repeatable", argi);
850 ir_bool (iea, p->required, "required", argi);
851 ir_HumanString (iea, p->description, "description", argi);
852 ir_HumanString (iea, p->contents, "contents", argi);
853 ir_HumanString (iea, p->billingInfo, "billingInfo", argi);
854 ir_HumanString (iea, p->restrictions, "restrictions", argi);
855 ir_sequence (ir_InternationalString, iea, p->alternateNames,
856 &p->num_alternateNames, "alternateNames", argi);
857 ir_sequence (ir_InternationalString, iea, p->genericNames,
858 &p->num_genericNames, "genericNames", argi);
859 ir_AttributeCombinations (iea, p->searchAccess, "searchAccess", argi);
860 return ir_match_end (name, iea, argi);
863 static int ir_RecordTag (IrExpArg *iea,
864 Z_RecordTag *p, const char *name, int argi)
866 if (!ir_match_start (name, p, iea, ++argi))
868 ir_StringOrNumeric (iea, p->qualifier, "qualifier", argi);
869 ir_StringOrNumeric (iea, p->tagValue, "tagValue", argi);
870 return ir_match_end (name, iea, argi);
873 static int ir_SortDetails (IrExpArg *iea,
874 Z_SortDetails *p, const char *name, int argi)
876 if (!ir_match_start (name, p, iea, ++argi))
878 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
879 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
880 ir_sequence (ir_SortKeyDetails, iea, p->sortKeys,
881 &p->num_sortKeys, "sortKeys", argi);
882 return ir_match_end (name, iea, argi);
885 static int ir_SortKeyDetailsSortType (IrExpArg *iea,
886 Z_SortKeyDetailsSortType *p, const char *name, int argi)
888 static IrExpChoice sortArm [] = {
889 { "character", Z_SortKeyDetailsSortType_character,
891 { "numeric", Z_SortKeyDetailsSortType_numeric,
893 { "structured", Z_SortKeyDetailsSortType_structured,
896 return ir_choice (iea, sortArm, &p->which, p->u.character, argi);
899 static int ir_SortKeyDetails (IrExpArg *iea,
900 Z_SortKeyDetails *p, const char *name, int argi)
902 static IrExpChoice sortArm [] = {
903 { "always", Z_SortKeyDetails_always,
905 { "never", Z_SortKeyDetails_never,
907 { "defaultYes", Z_SortKeyDetails_defaultYes,
909 { "defaultNo", Z_SortKeyDetails_defaultNo,
913 if (!ir_match_start (name, p, iea, ++argi))
915 ir_HumanString (iea, p->description, "description", argi);
916 ir_sequence (ir_Specification, iea, p->elementSpecifications,
917 &p->num_elementSpecifications, "elementSpecifications", argi);
918 ir_AttributeCombinations (iea, p->attributeSpecifications,
919 "attributeSpecifications", argi);
920 ir_SortKeyDetailsSortType (iea, p->sortType, "sortType", argi);
922 if (p->caseSensitivity)
923 ir_choice (iea, sortArm, p->caseSensitivity, ODR_NULLVAL, argi);
925 return ir_match_end (name, iea, argi);
928 static int ir_ProcessingInformation (IrExpArg *iea,
929 Z_ProcessingInformation *p, const char *name, int argi)
931 IrExpChoice arm[] = {
932 { "access", Z_ProcessingInformation_access,
934 { "search", Z_ProcessingInformation_search,
936 { "retrieval", Z_ProcessingInformation_retrieval,
938 { "recordPresentation", Z_ProcessingInformation_recordPresentation,
940 { "recordHandling", Z_ProcessingInformation_recordHandling,
943 if (!ir_match_start (name, p, iea, ++argi))
945 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
946 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
948 ir_choice (iea, arm, p->processingContext, ODR_NULLVAL, argi);
949 ir_InternationalString (iea, p->name, "name", argi);
950 ir_oid (iea, p->oid, "oid", argi);
951 ir_HumanString (iea, p->description, "description", argi);
952 ir_External (iea, p->instructions, "instructions", argi);
953 return ir_match_end (name, iea, argi);
956 static int ir_VariantSetInfo (IrExpArg *iea,
957 Z_VariantSetInfo *p, const char *name, int argi)
959 if (!ir_match_start (name, p, iea, ++argi))
961 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
962 ir_oid (iea, p->variantSet, "variantSet", argi);
963 ir_InternationalString (iea, p->name, "name", argi);
964 ir_sequence (ir_VariantClass, iea, p->variants,
965 &p->num_variants, "variants", argi);
966 return ir_match_end (name, iea, argi);
969 static int ir_VariantClass (IrExpArg *iea,
970 Z_VariantClass *p, const char *name, int argi)
972 if (!ir_match_start (name, p, iea, ++argi))
974 ir_InternationalString (iea, p->name, "name", argi);
975 ir_HumanString (iea, p->description, "description", argi);
976 ir_integer (iea, p->variantClass, "variantClass", argi);
977 ir_sequence (ir_VariantType, iea, p->variantTypes,
978 &p->num_variantTypes, "variantTypes", argi);
979 return ir_match_end (name, iea, argi);
982 static int ir_VariantType (IrExpArg *iea,
983 Z_VariantType *p, const char *name, int argi)
985 if (!ir_match_start (name, p, iea, ++argi))
987 ir_InternationalString (iea, p->name, "name", argi);
988 ir_HumanString (iea, p->description, "description", argi);
989 ir_integer (iea, p->variantType, "variantType", argi);
990 ir_VariantValue (iea, p->variantValue, "variantValue", argi);
991 return ir_match_end (name, iea, argi);
994 static int ir_ValueSetEnumerated (IrExpArg *iea,
995 Z_ValueSetEnumerated *p, const char *name, int argi)
997 if (!ir_match_start (name, p, iea, ++argi))
999 ir_sequence (ir_ValueDescription, iea, p->enumerated,
1000 &p->num_enumerated, "enumerated", argi);
1001 return ir_match_end (name, iea, argi);
1004 static int ir_ValueSet (IrExpArg *iea,
1005 Z_ValueSet *p, const char *name, int argi)
1007 IrExpChoice arm [] = {
1008 { "range", Z_ValueSet_range, ir_ValueRange },
1009 { "enumerated", Z_ValueSet_enumerated, ir_ValueSetEnumerated },
1011 if (!ir_match_start (name, p, iea, ++argi))
1013 ir_choice (iea, arm, &p->which, p->u.range, argi);
1014 return ir_match_end (name, iea, argi);
1017 static int ir_VariantValue (IrExpArg *iea,
1018 Z_VariantValue *p, const char *name, int argi)
1020 if (!ir_match_start (name, p, iea, ++argi))
1022 ir_PrimitiveDataType (iea, p->dataType, "dataType", argi);
1024 ir_ValueSet (iea, p->values, "values", argi);
1025 return ir_match_end (name, iea, argi);
1028 static int ir_ValueRange (IrExpArg *iea,
1029 Z_ValueRange *p, const char *name, int argi)
1031 if (!ir_match_start (name, p, iea, ++argi))
1033 ir_ValueDescription (iea, p->lower, "lower", argi);
1034 ir_ValueDescription (iea, p->upper, "upper", argi);
1035 return ir_match_end (name, iea, argi);
1038 static int ir_ValueDescription (IrExpArg *iea,
1039 Z_ValueDescription *p, const char *name, int argi)
1041 static IrExpChoice arm [] = {
1042 { "integer", Z_ValueDescription_integer, ir_integer },
1043 { "string", Z_ValueDescription_string, ir_InternationalString},
1044 { "octets", Z_ValueDescription_octets, ir_octet},
1045 { "oid", Z_ValueDescription_oid, ir_oid},
1046 { "unit", Z_ValueDescription_unit, ir_Unit},
1047 { "valueAndUnit", Z_ValueDescription_valueAndUnit, ir_IntUnit},
1050 if (!ir_match_start (name, p, iea, ++argi))
1052 ir_choice (iea, arm, &p->which, p->u.integer, argi);
1053 return ir_match_end (name, iea, argi);
1056 static int ir_UnitInfo (IrExpArg *iea,
1057 Z_UnitInfo *p, const char *name, int argi)
1059 if (!ir_match_start (name, p, iea, ++argi))
1061 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
1062 ir_InternationalString (iea, p->unitSystem, "unitSystem", argi);
1063 ir_HumanString (iea, p->description, "description", argi);
1064 ir_sequence (ir_UnitType, iea, p->units,
1065 &p->num_units, "units", argi);
1066 return ir_match_end (name, iea, argi);
1069 static int ir_UnitType (IrExpArg *iea,
1070 Z_UnitType *p, const char *name, int argi)
1072 if (!ir_match_start (name, p, iea, ++argi))
1074 ir_InternationalString (iea, p->name, "name", argi);
1075 ir_HumanString (iea, p->description, "description", argi);
1076 ir_StringOrNumeric (iea, p->unitType, "unitType", argi);
1077 ir_sequence (ir_Units, iea, p->units, &p->num_units, "units", argi);
1078 return ir_match_end (name, iea, argi);
1081 static int ir_Units (IrExpArg *iea,
1082 Z_Units *p, const char *name, int argi)
1084 if (!ir_match_start (name, p, iea, ++argi))
1086 ir_InternationalString (iea, p->name, "name", argi);
1087 ir_HumanString (iea, p->description, "description", argi);
1088 ir_StringOrNumeric (iea, p->unit, "unit", argi);
1089 return ir_match_end (name, iea, argi);
1092 static int ir_CategoryList (IrExpArg *iea,
1093 Z_CategoryList *p, const char *name, int argi)
1095 if (!ir_match_start (name, p, iea, ++argi))
1097 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
1098 ir_sequence (ir_CategoryInfo, iea, p->categories,
1099 &p->num_categories, "categories", argi);
1100 return ir_match_end (name, iea, argi);
1103 static int ir_CategoryInfo (IrExpArg *iea,
1104 Z_CategoryInfo *p, const char *name, int argi)
1106 if (!ir_match_start (name, p, iea, ++argi))
1108 ir_InternationalString (iea, p->category, "category", argi);
1109 ir_InternationalString (iea, p->originalCategory, "originalCategory", argi);
1110 ir_HumanString (iea, p->description, "description", argi);
1111 ir_InternationalString (iea, p->asn1Module, "asn1Module", argi);
1112 return ir_match_end (name, iea, argi);
1115 static int ir_CommonInfo (IrExpArg *iea,
1116 Z_CommonInfo *p, const char *name, int argi)
1118 if (!ir_match_start (name, p, iea, ++argi))
1120 ir_GeneralizedTime (iea, p->dateAdded, "dateAdded", argi);
1121 ir_GeneralizedTime (iea, p->dateChanged, "dateChanged", argi);
1122 ir_GeneralizedTime (iea, p->expiry, "expiry", argi);
1123 ir_LanguageCode (iea, p->humanStringLanguage, "humanString-Language",
1125 ir_OtherInformation (iea, p->otherInfo, "otherInfo", argi);
1126 return ir_match_end (name, iea, argi);
1129 static int ir_HumanStringUnit (IrExpArg *iea,
1130 Z_HumanStringUnit *p, const char *name, int argi)
1132 if (!ir_match_start (name, p, iea, ++argi))
1134 ir_LanguageCode (iea, p->language, "language", argi);
1135 ir_InternationalString (iea, p->text, "text", argi);
1136 return ir_match_end (name, iea, argi);
1139 static int ir_HumanString (IrExpArg *iea,
1140 Z_HumanString *p, const char *name, int argi)
1142 if (!ir_match_start (name, p, iea, ++argi))
1144 ir_sequence (ir_HumanStringUnit, iea, p->strings,
1145 &p->num_strings, "strings", argi);
1146 return ir_match_end (name, iea, argi);
1149 static int ir_IconObjectUnit (IrExpArg *iea,
1150 Z_IconObjectUnit *p, const char *name, int argi)
1152 static IrExpChoice arm [] = {
1153 { "ianaType", Z_IconObject_ianaType, ir_choice_nop },
1154 { "z3950type", Z_IconObject_z3950type, ir_choice_nop },
1155 { "otherType", Z_IconObject_otherType, ir_choice_nop },
1157 if (!ir_match_start (name, p, iea, ++argi))
1159 ir_choice (iea, arm, &p->which, ODR_NULLVAL, argi);
1160 ir_InternationalString (iea, p->bodyType, "bodyType", argi);
1161 ir_octet (iea, p->content, "content", argi);
1162 return ir_match_end (name, iea, argi);
1165 static int ir_IconObject (IrExpArg *iea,
1166 Z_IconObject *p, const char *name, int argi)
1168 if (!ir_match_start (name, p, iea, ++argi))
1170 ir_sequence (ir_IconObjectUnit, iea, p->iconUnits,
1171 &p->num_iconUnits, "iconUnits", argi);
1172 return ir_match_end (name, iea, argi);
1175 static int ir_ContactInfo (IrExpArg *iea,
1176 Z_ContactInfo *p, const char *name, int argi)
1178 if (!ir_match_start (name, p, iea, ++argi))
1180 ir_InternationalString (iea, p->name, "name", argi);
1181 ir_HumanString (iea, p->description, "description", argi);
1182 ir_HumanString (iea, p->address, "address", argi);
1183 ir_InternationalString (iea, p->email, "email", argi);
1184 ir_InternationalString (iea, p->phone, "phone", argi);
1185 return ir_match_end (name, iea, argi);
1188 static int ir_NetworkAddressIA (IrExpArg *iea,
1189 Z_NetworkAddressIA *p, const char *name, int argi)
1191 if (!ir_match_start (name, p, iea, ++argi))
1193 ir_InternationalString (iea, p->hostAddress, "hostAddress", argi);
1194 ir_integer (iea, p->port, "port", argi);
1195 return ir_match_end (name, iea, argi);
1198 static int ir_NetworkAddressOPA (IrExpArg *iea,
1199 Z_NetworkAddressOPA *p, const char *name, int argi)
1201 if (!ir_match_start (name, p, iea, ++argi))
1203 ir_InternationalString (iea, p->pSel, "pSel", argi);
1204 ir_InternationalString (iea, p->sSel, "sSel", argi);
1205 ir_InternationalString (iea, p->tSel, "tSel", argi);
1206 ir_InternationalString (iea, p->nSap, "nSap", argi);
1207 return ir_match_end (name, iea, argi);
1210 static int ir_NetworkAddressOther (IrExpArg *iea,
1211 Z_NetworkAddressOther *p, const char *name, int argi)
1213 if (!ir_match_start (name, p, iea, ++argi))
1215 ir_InternationalString (iea, p->type, "type", argi);
1216 ir_InternationalString (iea, p->address, "address", argi);
1217 return ir_match_end (name, iea, argi);
1220 static int ir_NetworkAddress (IrExpArg *iea,
1221 Z_NetworkAddress *p, const char *name, int argi)
1223 IrExpChoice arm [] = {
1224 { "iA", Z_NetworkAddress_iA, ir_NetworkAddressIA },
1225 { "oPA", Z_NetworkAddress_oPA, ir_NetworkAddressOPA },
1226 { "other", Z_NetworkAddress_other, ir_NetworkAddressOther },
1228 if (!ir_match_start (name, p, iea, ++argi))
1230 ir_choice (iea, arm, &p->which, p->u.internetAddress, argi);
1231 return ir_match_end (name, iea, argi);
1234 static int ir_AccessInfo (IrExpArg *iea,
1235 Z_AccessInfo *p, const char *name, int argi)
1237 if (!ir_match_start (name, p, iea, ++argi))
1239 ir_sequence (ir_QueryTypeDetails, iea, p->queryTypesSupported,
1240 &p->num_queryTypesSupported, "queryTypesSupported", argi);
1241 ir_sequence (ir_oid, iea, p->diagnosticsSets,
1242 &p->num_diagnosticsSets, "diagnosticsSets", argi);
1243 ir_sequence (ir_oid, iea, p->attributeSetIds,
1244 &p->num_attributeSetIds, "attributeSetIds", argi);
1245 ir_sequence (ir_oid, iea, p->schemas,
1246 &p->num_schemas, "schemas", argi);
1247 ir_sequence (ir_oid, iea, p->recordSyntaxes,
1248 &p->num_recordSyntaxes, "recordSyntaxes", argi);
1249 ir_sequence (ir_oid, iea, p->resourceChallenges,
1250 &p->num_resourceChallenges, "resourceChallenges", argi);
1251 ir_AccessRestrictions (iea, p->restrictedAccess, "restrictedAccess", argi);
1252 ir_Costs (iea, p->costInfo, "costInfo", argi);
1253 ir_sequence (ir_oid, iea, p->variantSets,
1254 &p->num_variantSets, "variantSets", argi);
1255 ir_sequence (ir_ElementSetName, iea, p->elementSetNames,
1256 &p->num_elementSetNames, "elementSetNames", argi);
1257 ir_sequence (ir_InternationalString, iea, p->unitSystems,
1258 &p->num_unitSystems, "unitSystems", argi);
1259 return ir_match_end (name, iea, argi);
1263 static int ir_QueryTypeDetails (IrExpArg *iea,
1264 Z_QueryTypeDetails *p, const char *name, int argi)
1266 static IrExpChoice arm[] = {
1267 { "private", Z_QueryTypeDetails_private,
1268 ir_PrivateCapabilities },
1269 { "rpn", Z_QueryTypeDetails_rpn,
1270 ir_RpnCapabilities },
1271 { "iso8777", Z_QueryTypeDetails_iso8777,
1272 ir_Iso8777Capabilities },
1273 { "z3958", Z_QueryTypeDetails_z3958,
1275 { "erpn", Z_QueryTypeDetails_erpn,
1276 ir_RpnCapabilities },
1277 { "rankedList", Z_QueryTypeDetails_rankedList,
1281 if (!ir_match_start (name, p, iea, ++argi))
1283 ir_choice (iea, arm, &p->which, p->u.private, argi);
1284 return ir_match_end (name, iea, argi);
1287 static int ir_PrivateCapOperator (IrExpArg *iea,
1288 Z_PrivateCapOperator *p, const char *name, int argi)
1290 if (!ir_match_start (name, p, iea, ++argi))
1292 ir_InternationalString (iea, p->roperator, "operator", argi);
1293 ir_HumanString (iea, p->description, "description", argi);
1294 return ir_match_end (name, iea, argi);
1297 static int ir_PrivateCapabilities (IrExpArg *iea,
1298 Z_PrivateCapabilities *p, const char *name, int argi)
1300 if (!ir_match_start (name, p, iea, ++argi))
1303 ir_sequence (ir_PrivateCapOperator, iea, p->operators,
1304 &p->num_operators, "operators", argi);
1305 ir_sequence (ir_SearchKey, iea, p->searchKeys,
1306 &p->num_searchKeys, "searchKeys", argi);
1307 ir_sequence (ir_HumanString, iea, p->description,
1308 &p->num_description, "description", argi);
1309 return ir_match_end (name, iea, argi);
1312 static int ir_RpnCapabilities (IrExpArg *iea,
1313 Z_RpnCapabilities *p, const char *name, int argi)
1315 if (!ir_match_start (name, p, iea, ++argi))
1317 ir_sequence (ir_integer, iea, p->operators,
1318 &p->num_operators, "operators", argi);
1319 ir_bool (iea, p->resultSetAsOperandSupported,
1320 "resultSetAsOperandSupported", argi);
1321 ir_bool (iea, p->restrictionOperandSupported,
1322 "restrictionOperandSupported", argi);
1323 ir_ProximitySupport (iea, p->proximity, "proximity", argi);
1324 return ir_match_end (name, iea, argi);
1327 static int ir_Iso8777Capabilities (IrExpArg *iea,
1328 Z_Iso8777Capabilities *p, const char *name, int argi)
1330 if (!ir_match_start (name, p, iea, ++argi))
1332 ir_sequence (ir_SearchKey, iea, p->searchKeys,
1333 &p->num_searchKeys, "searchKeys", argi);
1334 ir_HumanString (iea, p->restrictions, "restrictions", argi);
1335 return ir_match_end (name, iea, argi);
1338 static int ir_ProxSupportPrivate (IrExpArg *iea,
1339 Z_ProxSupportPrivate *p, const char *name, int argi)
1341 if (!ir_match_start (name, p, iea, ++argi))
1343 ir_integer (iea, p->unit, "unit", argi);
1344 ir_HumanString (iea, p->description, "description", argi);
1345 return ir_match_end (name, iea, argi);
1348 static int ir_ProxSupportUnit (IrExpArg *iea,
1349 Z_ProxSupportUnit *p, const char *name, int argi)
1351 static IrExpChoice arm [] = {
1352 { "known", Z_ProxSupportUnit_known, ir_integer },
1353 { "private", Z_ProxSupportUnit_private, ir_ProxSupportPrivate },
1355 if (!ir_match_start (name, p, iea, ++argi))
1357 ir_choice (iea, arm, &p->which, p->u.private, argi);
1358 return ir_match_end (name, iea, argi);
1361 static int ir_ProximitySupport (IrExpArg *iea,
1362 Z_ProximitySupport *p, const char *name, int argi)
1364 if (!ir_match_start (name, p, iea, ++argi))
1366 ir_bool (iea, p->anySupport, "anySupport", argi);
1367 ir_sequence (ir_ProxSupportUnit, iea, p->unitsSupported,
1368 &p->num_unitsSupported, "unitsSupported", argi);
1369 return ir_match_end (name, iea, argi);
1372 static int ir_SearchKey (IrExpArg *iea,
1373 Z_SearchKey *p, const char *name, int argi)
1375 if (!ir_match_start (name, p, iea, ++argi))
1377 ir_InternationalString (iea, p->searchKey, "searchKey", argi);
1378 ir_HumanString (iea, p->description, "description", argi);
1379 return ir_match_end (name, iea, argi);
1382 static int ir_AccessRestrictionsUnit (IrExpArg *iea,
1383 Z_AccessRestrictionsUnit *p, const char *name, int argi)
1385 static IrExpChoice arm[] = {
1386 { "any", Z_AccessRestrictions_any,
1388 { "search", Z_AccessRestrictions_search,
1390 { "present", Z_AccessRestrictions_present,
1392 { "specificElements", Z_AccessRestrictions_specific_elements,
1394 { "extendedServices", Z_AccessRestrictions_extended_services,
1396 { "byDatabase", Z_AccessRestrictions_by_database,
1400 if (!ir_match_start (name, p, iea, ++argi))
1402 ir_choice (iea, arm, p->accessType, ODR_NULLVAL, argi);
1403 ir_HumanString (iea, p->accessText, "accessText", argi);
1404 ir_sequence (ir_oid, iea, p->accessChallenges,
1405 &p->num_accessChallenges, "accessChallenges", argi);
1406 return ir_match_end (name, iea, argi);
1409 static int ir_AccessRestrictions (IrExpArg *iea,
1410 Z_AccessRestrictions *p, const char *name, int argi)
1412 if (!ir_match_start (name, p, iea, ++argi))
1414 ir_sequence (ir_AccessRestrictionsUnit, iea, p->restrictions,
1415 &p->num_restrictions, "restrictions", argi);
1416 return ir_match_end (name, iea, argi);
1419 static int ir_CostsOtherCharge (IrExpArg *iea,
1420 Z_CostsOtherCharge *p, const char *name, int argi)
1422 if (!ir_match_start (name, p, iea, ++argi))
1424 ir_HumanString (iea, p->forWhat, "forWhat", argi);
1425 ir_Charge (iea, p->charge, "charge", argi);
1426 return ir_match_end (name, iea, argi);
1429 static int ir_Costs (IrExpArg *iea,
1430 Z_Costs *p, const char *name, int argi)
1432 if (!ir_match_start (name, p, iea, ++argi))
1434 ir_Charge (iea, p->connectCharge, "connectCharge", argi);
1435 ir_Charge (iea, p->connectTime, "connectTime", argi);
1436 ir_Charge (iea, p->displayCharge, "displayCharge", argi);
1437 ir_Charge (iea, p->searchCharge, "searchCharge", argi);
1438 ir_Charge (iea, p->subscriptCharge, "subscriptCharge", argi);
1440 ir_sequence (ir_CostsOtherCharge, iea, p->otherCharges,
1441 &p->num_otherCharges, "otherCharges", argi);
1442 return ir_match_end (name, iea, argi);
1445 static int ir_Charge (IrExpArg *iea,
1446 Z_Charge *p, const char *name, int argi)
1448 if (!ir_match_start (name, p, iea, ++argi))
1450 ir_IntUnit (iea, p->cost, "cost", argi);
1451 ir_Unit (iea, p->perWhat, "perWhat", argi);
1452 ir_HumanString (iea, p->text, "text", argi);
1453 return ir_match_end (name, iea, argi);
1456 static int ir_DatabaseList (IrExpArg *iea,
1457 Z_DatabaseList *p, const char *name, int argi)
1459 if (!ir_match_start (name, p, iea, ++argi))
1461 ir_sequence (ir_DatabaseName, iea, p->databases,
1462 &p->num_databases, "databases", argi);
1463 return ir_match_end (name, iea, argi);
1466 static int ir_AttributeCombinations (IrExpArg *iea,
1467 Z_AttributeCombinations *p, const char *name, int argi)
1469 if (!ir_match_start (name, p, iea, ++argi))
1471 ir_oid (iea, p->defaultAttributeSet, "defaultAttributeSet", argi);
1472 ir_sequence (ir_AttributeCombination, iea, p->legalCombinations,
1473 &p->num_legalCombinations, "legalCombinations", argi);
1474 return ir_match_end (name, iea, argi);
1477 static int ir_AttributeCombination (IrExpArg *iea,
1478 Z_AttributeCombination *p, const char *name, int argi)
1480 if (!ir_match_start (name, p, iea, ++argi))
1482 ir_sequence (ir_AttributeOccurrence, iea, p->occurrences,
1483 &p->num_occurrences, "occurrences", argi);
1484 return ir_match_end (name, iea, argi);
1487 static int ir_AttributeValueList (IrExpArg *iea,
1488 Z_AttributeValueList *p, const char *name, int argi)
1490 if (!ir_match_start (name, p, iea, ++argi))
1492 ir_sequence (ir_StringOrNumeric, iea, p->attributes,
1493 &p->num_attributes, "attributes", argi);
1494 return ir_match_end (name, iea, argi);
1497 static int ir_AttributeOccurrence (IrExpArg *iea,
1498 Z_AttributeOccurrence *p, const char *name, int argi)
1500 static IrExpChoice arm [] = {
1501 { "anyOrNone", Z_AttributeOcc_anyOrNone, ir_null },
1502 { "specific", Z_AttributeOcc_specific, ir_AttributeValueList },
1503 { NULL, 0, NULL } };
1504 if (!ir_match_start (name, p, iea, ++argi))
1506 ir_oid (iea, p->attributeSet, "attributeSet", argi);
1507 ir_integer (iea, p->attributeType, "attributeType", argi);
1508 ir_null (iea, p->mustBeSupplied, "mustBeSupplied", argi);
1509 ir_choice (iea, arm, &p->which, p->attributeValues->anyOrNone, argi);
1510 return ir_match_end (name, iea, argi);
1513 static int ir_AttributeValue (IrExpArg *iea,
1514 Z_AttributeValue *p, const char *name, int argi)
1516 if (!ir_match_start (name, p, iea, ++argi))
1518 ir_StringOrNumeric (iea, p->value, "value", argi);
1519 ir_HumanString (iea, p->description, "description", argi);
1520 ir_sequence (ir_StringOrNumeric, iea, p->subAttributes,
1521 &p->num_subAttributes, "subAttributes", argi);
1522 ir_sequence (ir_StringOrNumeric, iea, p->superAttributes,
1523 &p->num_superAttributes, "superAttributes", argi);
1524 ir_null (iea, p->partialSupport, "partialSupport", argi);
1525 return ir_match_end (name, iea, argi);
1528 static int ir_StringOrNumeric (IrExpArg *iea,
1529 Z_StringOrNumeric *p, const char *name, int argi)
1531 IrExpChoice arm[] = {
1532 { "string", Z_StringOrNumeric_string, ir_InternationalString },
1533 { "numeric", Z_StringOrNumeric_numeric, ir_integer },
1535 if (!ir_match_start (name, p, iea, ++argi))
1537 ir_choice (iea, arm, &p->which, p->u.string, argi);
1538 return ir_match_end (name, iea, argi);
1541 static int ir_ElementSpec (IrExpArg *iea,
1542 Z_ElementSpec *p, const char *name, int argi)
1544 static IrExpChoice arm[] = {
1545 { "elementSetName", Z_ElementSpec_elementSetName,
1546 ir_InternationalString },
1547 { "externalSpec", Z_ElementSpec_externalSpec,
1551 if (!ir_match_start (name, p, iea, ++argi))
1553 ir_choice (iea, arm, &p->which, p->u.elementSetName, argi);
1554 return ir_match_end (name, iea, argi);
1557 static int ir_Specification (IrExpArg *iea,
1558 Z_Specification *p, const char *name, int argi)
1560 if (!ir_match_start (name, p, iea, ++argi))
1562 ir_oid (iea, p->schema, "schema", argi);
1563 ir_ElementSpec (iea, p->elementSpec, "elementSpec", argi);
1564 return ir_match_end (name, iea, argi);
1567 static int ir_InfoCategory (IrExpArg *iea,
1568 Z_InfoCategory *p, const char *name, int argi)
1570 if (!ir_match_start (name, p, iea, ++argi))
1572 ir_oid (iea, p->categoryTypeId, "categoryTypeId", argi);
1573 ir_integer (iea, p->categoryValue, "categoryValue", argi);
1574 return ir_match_end (name, iea, argi);
1577 static int ir_OtherInformationUnit (IrExpArg *iea,
1578 Z_OtherInformationUnit *p, const char *name, int argi)
1580 static IrExpChoice arm[] = {
1581 { "characterInfo", Z_OtherInfo_characterInfo,
1582 ir_InternationalString },
1583 { "binaryInfo", Z_OtherInfo_binaryInfo,
1585 { "externallyDefinedInfo", Z_OtherInfo_externallyDefinedInfo,
1587 { "oid", Z_OtherInfo_oid,
1591 if (!ir_match_start (name, p, iea, ++argi))
1593 ir_InfoCategory (iea, p->category, "category", argi);
1594 ir_choice (iea, arm, &p->which, p->information.characterInfo, argi);
1595 return ir_match_end (name, iea, argi);
1598 static int ir_OtherInformation (IrExpArg *iea,
1599 Z_OtherInformation *p, const char *name, int argi)
1601 if (!ir_match_start (name, p, iea, ++argi))
1603 ir_sequence (ir_OtherInformationUnit, iea, p->list,
1604 &p->num_elements, "list", argi);
1605 return ir_match_end (name, iea, argi);
1608 static int ir_IntUnit (IrExpArg *iea,
1609 Z_IntUnit *p, const char *name, int argi)
1611 if (!ir_match_start (name, p, iea, ++argi))
1613 ir_integer (iea, p->value, "value", argi);
1614 ir_Unit (iea, p->unitUsed, "unitUsed", argi);
1615 return ir_match_end (name, iea, argi);
1618 static int ir_Unit (IrExpArg *iea,
1619 Z_Unit *p, const char *name, int argi)
1621 if (!ir_match_start (name, p, iea, ++argi))
1623 ir_InternationalString (iea, p->unitSystem, "unitSystem", argi);
1624 ir_StringOrNumeric (iea, p->unitType, "unitType", argi);
1625 ir_StringOrNumeric (iea, p->unit, "unit", argi);
1626 ir_integer (iea, p->scaleFactor, "scaleFactor", argi);
1627 return ir_match_end (name, iea, argi);
1630 int ir_ExplainRecord (IrExpArg *iea, Z_ExplainRecord *p, int argi)
1632 static IrExpChoice arm[] = {
1633 {"targetInfo", Z_Explain_targetInfo,
1635 {"databaseInfo", Z_Explain_databaseInfo,
1637 {"schemaInfo", Z_Explain_schemaInfo,
1639 {"tagSetInfo", Z_Explain_tagSetInfo,
1641 {"recordSyntaxInfo", Z_Explain_recordSyntaxInfo,
1642 ir_RecordSyntaxInfo},
1643 {"attributeSetInfo", Z_Explain_attributeSetInfo,
1644 ir_AttributeSetInfo},
1645 {"termListInfo", Z_Explain_termListInfo,
1647 {"extendedServicesInfo", Z_Explain_extendedServicesInfo,
1648 ir_ExtendedServicesInfo},
1649 {"attributeDetails", Z_Explain_attributeDetails,
1650 ir_AttributeDetails},
1651 {"termListDetails", Z_Explain_termListDetails,
1652 ir_TermListDetails},
1653 {"elementSetDetails", Z_Explain_elementSetDetails,
1654 ir_ElementSetDetails},
1655 {"retrievalRecordDetails", Z_Explain_retrievalRecordDetails,
1656 ir_RetrievalRecordDetails},
1657 {"sortDetails", Z_Explain_sortDetails,
1659 {"processing", Z_Explain_processing,
1660 ir_ProcessingInformation},
1661 {"variants", Z_Explain_variants,
1663 {"units", Z_Explain_units,
1665 {"categoryList", Z_Explain_categoryList,
1670 return ir_choice (iea, arm, &p->which, p->u.targetInfo, argi);
1673 int ir_tcl_get_explain (Tcl_Interp *interp, Z_ExplainRecord *rec,
1674 int argc, char **argv)
1680 iea.interp = interp;
1682 return ir_ExplainRecord (&iea, rec, 2);