2 * IR toolkit for tcl/tk
3 * (c) Index Data 1996-1998
4 * See the file LICENSE for details.
5 * Sebastian Hammer, Adam Dickmeiss
8 * Revision 1.13 2003-02-18 10:31:38 adam
11 * Revision 1.12 2003/02/18 10:28:00 adam
12 * Fix for new schema definition
14 * Revision 1.11 1998/05/20 12:24:41 adam
15 * Fixed bug regaring missing element languages in TargetInfo.
16 * Changed code so that it works with ASN.1 compiled YAZ code.
18 * Revision 1.10 1998/04/02 14:31:08 adam
19 * This version works with compiled ASN.1 code.
21 * Revision 1.9 1997/11/24 11:34:38 adam
22 * Using odr_nullval() instead of ODR_NULLVAL when appropriate.
24 * Revision 1.8 1997/09/09 10:19:51 adam
25 * New MSV5.0 port with fewer warnings.
27 * Revision 1.7 1997/08/28 20:17:36 adam
30 * Revision 1.6 1997/05/14 06:57:14 adam
31 * Adopted to use YAZ with C++ support.
33 * Revision 1.5 1996/08/23 11:59:47 adam
34 * Bug fix: infinite look in ir_oid.
36 * Revision 1.4 1996/08/22 13:39:31 adam
37 * More work on explain.
39 * Revision 1.3 1996/08/21 13:32:50 adam
40 * Implemented saveFile method and extended loadFile method to work with it.
42 * Revision 1.2 1996/08/20 09:27:48 adam
43 * More work on explain.
44 * Renamed tkinit.c to tkmain.c. The tcl shell uses the Tcl 7.5 interface
45 * for socket i/o instead of the handcrafted one (for Tcl 7.3 and Tcl7.4).
47 * Revision 1.1 1996/08/16 15:07:43 adam
48 * First work on Explain.
73 typedef char *Z_ElementSetName;
74 typedef Odr_oid *Z_AttributeSetId;
75 typedef char *Z_InternationalString;
76 typedef char *Z_LanguageCode;
79 static int ir_UnitType (IrExpArg *iea,
80 Z_UnitType *p, const char *name, int argi);
81 static int ir_Unit (IrExpArg *iea,
82 Z_Unit *p, const char *name, int argi);
83 static int ir_VariantType (IrExpArg *iea,
84 Z_VariantType *p, const char *name, int argi);
85 static int ir_OmittedAttributeInterpretation (IrExpArg *iea,
86 Z_OmittedAttributeInterpretation *p, const char *name, int argi);
87 static int ir_AttributeTypeDetails (IrExpArg *iea,
88 Z_AttributeTypeDetails *p, const char *name, int argi);
89 static int ir_Specification (IrExpArg *iea,
90 Z_Specification *p, const char *name, int argi);
91 static int ir_RetrievalRecordDetails (IrExpArg *iea,
92 Z_RetrievalRecordDetails *p, const char *name, int argi);
93 static int ir_ElementInfo (IrExpArg *iea,
94 Z_ElementInfo *p, const char *name, int argi);
95 static int ir_InternationalString (IrExpArg *iea,
96 char *p, const char *name, int argi);
97 static int ir_TagSetInfo (IrExpArg *iea,
98 Z_TagSetInfo *p, const char *name, int argi);
99 static int ir_DatabaseName (IrExpArg *iea,
100 char *p, const char *name, int argi);
101 static int ir_AccessInfo (IrExpArg *iea,
102 Z_AccessInfo *p, const char *name, int argi);
103 static int ir_bool (IrExpArg *iea,
104 bool_t *p, const char *name, int argi);
105 static int ir_LanguageCode (IrExpArg *iea,
106 char *p, const char *name, int argi);
107 static int ir_Units (IrExpArg *iea,
108 Z_Units *p, const char *name, int argi);
109 static int ir_SortDetails (IrExpArg *iea,
110 Z_SortDetails *p, const char *name, int argi);
111 static int ir_ElementSetDetails (IrExpArg *iea,
112 Z_ElementSetDetails *p, const char *name, int argi);
113 static int ir_TermListDetails (IrExpArg *iea,
114 Z_TermListDetails *p, const char *name, int argi);
115 static int ir_AttributeValue (IrExpArg *iea,
116 Z_AttributeValue *p, const char *name, int argi);
117 static int ir_ElementDataType (IrExpArg *iea,
118 Z_ElementDataType *p, const char *name, int argi);
119 static int ir_ProximitySupport (IrExpArg *iea,
120 Z_ProximitySupport *p, const char *name, int argi);
121 static int ir_ProcessingInformation (IrExpArg *iea,
122 Z_ProcessingInformation *p, const char *name, int argi);
123 static int ir_AttributeCombinations (IrExpArg *iea,
124 Z_AttributeCombinations *p, const char *name, int argi);
125 static int ir_AttributeSetDetails (IrExpArg *iea,
126 Z_AttributeSetDetails *p, const char *name, int argi);
127 static int ir_DatabaseInfo (IrExpArg *iea,
128 Z_DatabaseInfo *p, const char *name, int argi);
129 static int ir_IconObject (IrExpArg *iea,
130 Z_IconObject *p, const char *name, int argi);
131 static int ir_RpnCapabilities (IrExpArg *iea,
132 Z_RpnCapabilities *p, const char *name, int argi);
133 static int ir_QueryTypeDetails (IrExpArg *iea,
134 Z_QueryTypeDetails *p, const char *name, int argi);
135 static int ir_ValueDescription (IrExpArg *iea,
136 Z_ValueDescription *p, const char *name, int argi);
137 static int ir_AttributeSetInfo (IrExpArg *iea,
138 Z_AttributeSetInfo *p, const char *name, int argi);
139 static int ir_SchemaInfo (IrExpArg *iea,
140 Z_SchemaInfo *p, const char *name, int argi);
141 static int ir_AttributeOccurrence (IrExpArg *iea,
142 Z_AttributeOccurrence *p, const char *name, int argi);
143 static int ir_AttributeCombination (IrExpArg *iea,
144 Z_AttributeCombination *p, const char *name, int argi);
145 static int ir_UnitInfo (IrExpArg *iea,
146 Z_UnitInfo *p, const char *name, int argi);
147 static int ir_VariantClass (IrExpArg *iea,
148 Z_VariantClass *p, const char *name, int argi);
149 static int ir_VariantSetInfo (IrExpArg *iea,
150 Z_VariantSetInfo *p, const char *name, int argi);
151 static int ir_RecordTag (IrExpArg *iea,
152 Z_RecordTag *p, const char *name, int argi);
153 static int ir_TermListInfo (IrExpArg *iea,
154 Z_TermListInfo *p, const char *name, int argi);
155 static int ir_StringOrNumeric (IrExpArg *iea,
156 Z_StringOrNumeric *p, const char *name, int argi);
157 static int ir_CategoryInfo (IrExpArg *iea,
158 Z_CategoryInfo *p, const char *name, int argi);
159 static int ir_ValueRange (IrExpArg *iea,
160 Z_ValueRange *p, const char *name, int argi);
161 static int ir_Term (IrExpArg *iea,
162 Z_Term *p, const char *name, int argi);
163 static int ir_DatabaseList (IrExpArg *iea,
164 Z_DatabaseList *p, const char *name, int argi);
165 static int ir_HumanString (IrExpArg *iea,
166 Z_HumanString *p, const char *name, int argi);
167 static int ir_CommonInfo (IrExpArg *iea,
168 Z_CommonInfo *p, const char *name, int argi);
169 static int ir_NetworkAddress (IrExpArg *iea,
170 Z_NetworkAddress *p, const char *name, int argi);
171 static int ir_Costs (IrExpArg *iea,
172 Z_Costs *p, const char *name, int argi);
173 static int ir_RecordSyntaxInfo (IrExpArg *iea,
174 Z_RecordSyntaxInfo *p, const char *name, int argi);
175 static int ir_OtherInformation (IrExpArg *iea,
176 Z_OtherInformation *p, const char *name, int argi);
177 static int ir_CategoryList (IrExpArg *iea,
178 Z_CategoryList *p, const char *name, int argi);
179 static int ir_VariantValue (IrExpArg *iea,
180 Z_VariantValue *p, const char *name, int argi);
181 static int ir_PerElementDetails (IrExpArg *iea,
182 Z_PerElementDetails *p, const char *name, int argi);
183 static int ir_AttributeDetails (IrExpArg *iea,
184 Z_AttributeDetails *p, const char *name, int argi);
185 static int ir_ExtendedServicesInfo (IrExpArg *iea,
186 Z_ExtendedServicesInfo *p, const char *name, int argi);
187 static int ir_AttributeType (IrExpArg *iea,
188 Z_AttributeType *p, const char *name, int argi);
189 static int ir_IntUnit (IrExpArg *iea,
190 Z_IntUnit *p, const char *name, int argi);
191 static int ir_Charge (IrExpArg *iea,
192 Z_Charge *p, const char *name, int argi);
193 static int ir_PrivateCapabilities (IrExpArg *iea,
194 Z_PrivateCapabilities *p, const char *name, int argi);
195 static int ir_ValueSet (IrExpArg *iea,
196 Z_ValueSet *p, const char *name, int argi);
197 static int ir_AttributeDescription (IrExpArg *iea,
198 Z_AttributeDescription *p, const char *name, int argi);
199 static int ir_Path (IrExpArg *iea,
200 Z_Path *p, const char *name, int argi);
201 static int ir_ContactInfo (IrExpArg *iea,
202 Z_ContactInfo *p, const char *name, int argi);
203 static int ir_SearchKey (IrExpArg *iea,
204 Z_SearchKey *p, const char *name, int argi);
205 static int ir_Iso8777Capabilities (IrExpArg *iea,
206 Z_Iso8777Capabilities *p, const char *name, int argi);
207 static int ir_AccessRestrictions (IrExpArg *iea,
208 Z_AccessRestrictions *p, const char *name, int argi);
209 static int ir_SortKeyDetails (IrExpArg *iea,
210 Z_SortKeyDetails *p, const char *name, int argi);
214 ir_match_start (const char *name, void *p, IrExpArg *iea, int argi)
218 if (argi >= iea->argc)
219 Tcl_AppendResult (iea->interp, name, " ", NULL);
222 if (argi < iea->argc)
224 if (strcmp (name, iea->argv[argi]))
228 Tcl_AppendResult (iea->interp, "{", name, " ", NULL);
230 Tcl_AppendResult (iea->interp, "{", NULL);
235 ir_match_end (const char *name, IrExpArg *iea, int argi)
237 if (argi >= iea->argc)
238 Tcl_AppendResult (iea->interp, "} ", NULL);
243 ir_choice (IrExpArg *iea, IrExpChoice *clist, int *what, void *p,
250 if (clist->id == *what)
251 return (*clist->handle)(iea, p, clist->name, argi);
255 if (argi >= iea->argc)
256 Tcl_AppendResult (iea->interp, "{} ", NULL);
260 static int ir_null (IrExpArg *iea,
261 Odr_null *p, const char *name, int argi)
263 if (!ir_match_start (name, p, iea, ++argi))
265 Tcl_AppendResult (iea->interp, "1 ", NULL);
266 return ir_match_end (name, iea, argi);
269 static int ir_CString (IrExpArg *iea,
270 char *p, const char *name, int argi)
272 if (!ir_match_start (name, p, iea, ++argi))
274 Tcl_AppendElement (iea->interp, p);
275 return ir_match_end (name, iea, argi);
278 static int ir_ElementSetName (IrExpArg *iea,
279 char *p, const char *name, int argi)
281 return ir_CString (iea, p, name, argi);
284 static int ir_DatabaseName (IrExpArg *iea,
285 char *p, const char *name, int argi)
287 return ir_CString (iea, p, name, argi);
290 static int ir_InternationalString (IrExpArg *iea,
291 char *p, const char *name, int argi)
293 return ir_CString (iea, p, name, argi);
296 static int ir_GeneralizedTime (IrExpArg *iea,
297 char *p, const char *name, int argi)
299 return ir_CString (iea, p, name, argi);
302 static int ir_oid (IrExpArg *iea,
303 Odr_oid *p, const char *name, int argi)
306 if (!ir_match_start (name, p, iea, ++argi))
312 sprintf (buf, "%c%d", first, *p);
313 Tcl_AppendResult (iea->interp, buf, NULL);
317 return ir_match_end (name, iea, argi);
320 static int ir_TagTypeMapping (IrExpArg *iea,
321 Z_TagTypeMapping **p, const char *name, int argi)
323 if (!ir_match_start (name, p, iea, ++argi))
326 return ir_match_end (name, iea, argi);
329 static int ir_PrimitiveDataType (IrExpArg *iea,
330 int *p, const char *name, int argi)
332 if (!ir_match_start (name, p, iea, ++argi))
335 return ir_match_end (name, iea, argi);
338 static int ir_octet (IrExpArg *iea,
339 Odr_oct *p, const char *name, int argi)
341 if (!ir_match_start (name, p, iea, ++argi))
344 return ir_match_end (name, iea, argi);
347 static int ir_choice_nop (IrExpArg *iea,
348 void *p, const char *name, int argi)
350 if (argi >= iea->argc)
351 Tcl_AppendResult (iea->interp, name, " ", NULL);
355 static int ir_bool (IrExpArg *iea,
356 bool_t *p, const char *name, int argi)
358 if (!ir_match_start (name, p, iea, ++argi))
360 Tcl_AppendResult (iea->interp, *p ? "1" : "0", NULL);
361 return ir_match_end (name, iea, argi);
364 static int ir_integer (IrExpArg *iea,
365 int *p, const char *name, int argi)
368 if (!ir_match_start (name, p, iea, ++argi))
370 sprintf (buf, "%d", *p);
371 Tcl_AppendResult (iea->interp, buf, NULL);
372 return ir_match_end (name, iea, argi);
375 static int ir_LanguageCode (IrExpArg *iea,
376 char *p, const char *name, int argi)
378 return ir_CString (iea, p, name, argi);
381 static int ir_External (IrExpArg *iea,
382 Z_External *p, const char *name, int argi)
384 if (!ir_match_start (name, p, iea, ++argi))
387 return ir_match_end (name, iea, argi);
390 static int ir_sequence (int (*fh)(), IrExpArg *iea, void *p, int *num,
391 const char *name, int argi)
393 void **pp = (void **) p;
396 if (!ir_match_start (name, p, iea, ++argi))
398 for (i = 0; i < *num; i++)
399 (*fh)(iea, pp[i], "", argi);
400 return ir_match_end (name, iea, argi);
403 static int ir_Term (IrExpArg *iea,
404 Z_Term *p, const char *name, int argi)
406 static IrExpChoice arm [] = {
407 { "general", Z_Term_general,
409 { "numeric", Z_Term_numeric,
411 { "characterString", Z_Term_characterString,
412 ir_InternationalString },
415 { "dateTime", Z_Term_dateTime,
416 ir_GeneralizedTime },
417 { "external", Z_Term_external,
419 { "null", Z_Term_null,
423 if (!ir_match_start (name, p, iea, ++argi))
426 ir_choice (iea, arm, &p->which, p->u.general, argi);
427 return ir_match_end (name, iea, argi);
430 static int ir_TargetInfo (IrExpArg *iea,
431 Z_TargetInfo *p, const char *name, int argi)
433 if (!ir_match_start (name, p, iea, ++argi))
435 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
436 ir_InternationalString (iea, p->name, "name", argi);
437 ir_HumanString (iea, p->recentNews, "recentNews", argi);
438 ir_IconObject (iea, p->icon, "icon", argi);
439 ir_bool (iea, p->namedResultSets, "namedResultSets", argi);
440 ir_bool (iea, p->multipleDBsearch, "multipleDBsearch", argi);
441 ir_integer (iea, p->maxResultSets, "maxResultSets", argi);
442 ir_integer (iea, p->maxResultSize, "maxResultSize", argi);
443 ir_integer (iea, p->maxTerms, "maxTerms", argi);
444 ir_IntUnit (iea, p->timeoutInterval, "timeoutInterval", argi);
445 ir_HumanString (iea, p->welcomeMessage, "welcomeMessage", argi);
446 ir_ContactInfo (iea, p->contactInfo, "contactInfo", argi);
447 ir_HumanString (iea, p->description, "description", argi);
448 ir_sequence (ir_InternationalString, iea, p->nicknames,
449 &p->num_nicknames, "nicknames", argi);
450 ir_HumanString (iea, p->usageRest, "usageRest", argi);
451 ir_HumanString (iea, p->paymentAddr, "paymentAddr", argi);
452 ir_HumanString (iea, p->hours, "hours", argi);
453 ir_sequence (ir_DatabaseList, iea, p->dbCombinations,
454 &p->num_dbCombinations, "dbCombinations", argi);
455 ir_sequence (ir_NetworkAddress, iea, p->addresses,
456 &p->num_addresses, "addresses", argi);
457 ir_sequence (ir_InternationalString, iea, p->languages,
458 &p->num_languages, "languages", argi);
459 ir_AccessInfo (iea, p->commonAccessInfo, "commonAccessInfo", argi);
460 return ir_match_end (name, iea, argi);
463 static int ir_DatabaseInfo (IrExpArg *iea,
464 Z_DatabaseInfo *p, const char *name, int argi)
466 static IrExpChoice arm_recordCount [] = {
467 { "actualNumber", Z_DatabaseInfo_actualNumber,
469 { "approxNumber", Z_DatabaseInfo_approxNumber,
473 if (!ir_match_start (name, p, iea, ++argi))
476 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
477 ir_DatabaseName (iea, p->name, "name", argi);
478 ir_null (iea, p->explainDatabase, "explainDatabase", argi);
479 ir_sequence (ir_DatabaseName, iea, p->nicknames,
480 &p->num_nicknames, "nicknames", argi);
481 ir_IconObject (iea, p->icon, "icon", argi);
482 ir_bool (iea, p->userFee, "userFee", argi);
483 ir_bool (iea, p->available, "available", argi);
484 ir_HumanString (iea, p->titleString, "titleString", argi);
485 ir_sequence (ir_HumanString, iea, p->keywords,
486 &p->num_keywords, "keywords", argi);
487 ir_HumanString (iea, p->description, "description", argi);
488 ir_DatabaseList (iea, p->associatedDbs, "associatedDbs", argi);
489 ir_DatabaseList (iea, p->subDbs, "subDbs", argi);
490 ir_HumanString (iea, p->disclaimers, "disclaimers", argi);
491 ir_HumanString (iea, p->news, "news", argi);
493 ir_choice (iea, arm_recordCount, &p->which,
494 p->u.actualNumber, argi);
495 ir_HumanString (iea, p->defaultOrder, "defaultOrder", argi);
496 ir_integer (iea, p->avRecordSize, "avRecordSize", argi);
497 ir_integer (iea, p->maxRecordSize, "maxRecordSize", argi);
498 ir_HumanString (iea, p->hours, "hours", argi);
499 ir_HumanString (iea, p->bestTime, "bestTime", argi);
500 ir_GeneralizedTime (iea, p->lastUpdate, "lastUpdate", argi);
501 ir_IntUnit (iea, p->updateInterval, "updateInterval", argi);
502 ir_HumanString (iea, p->coverage, "coverage", argi);
503 ir_bool (iea, p->proprietary, "proprietary", argi);
504 ir_HumanString (iea, p->copyrightText, "copyrightText", argi);
505 ir_HumanString (iea, p->copyrightNotice, "copyrightNotice", argi);
506 ir_ContactInfo (iea, p->producerContactInfo, "producerContactInfo", argi);
507 ir_ContactInfo (iea, p->supplierContactInfo, "supplierContactInfo", argi);
508 ir_ContactInfo (iea, p->submissionContactInfo, "submissionContactInfo", argi);
509 ir_AccessInfo (iea, p->accessInfo, "accessInfo", argi);
510 return ir_match_end (name, iea, argi);
513 static int ir_SchemaInfo (IrExpArg *iea,
514 Z_SchemaInfo *p, const char *name, int argi)
516 if (!ir_match_start (name, p, iea, ++argi))
518 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
519 ir_oid (iea, p->schema, "schema", argi);
520 ir_InternationalString (iea, p->name, "name", argi);
521 ir_HumanString (iea, p->description, "description", argi);
523 ir_sequence (ir_TagTypeMapping, iea, p->tagTypeMapping,
524 &p->num_tagTypeMapping, "tagTypeMapping", argi);
525 ir_sequence (ir_ElementInfo, iea, p->recordStructure,
526 &p->num_recordStructure, "recordStructure", argi);
527 return ir_match_end (name, iea, argi);
530 static int ir_ElementDataTypePrimitive (IrExpArg *iea,
531 int *p, const char *name, int argi)
533 static IrExpChoice arm[] = {
534 {"octetString", Z_PrimitiveDataType_octetString, ir_choice_nop },
535 {"numeric", Z_PrimitiveDataType_numeric, ir_choice_nop },
538 if (!ir_match_start (name, p, iea, ++argi))
540 ir_choice (iea, arm, p, odr_nullval(), argi);
541 return ir_match_end (name, iea, argi);
544 static int ir_ElementInfo (IrExpArg *iea,
545 Z_ElementInfo *p, const char *name, int argi)
547 if (!ir_match_start (name, p, iea, ++argi))
549 ir_InternationalString (iea, p->elementName, "elementName", argi);
550 ir_Path (iea, p->elementTagPath, "elementTagPath", argi);
551 ir_ElementDataType (iea, p->dataType, "dataType", argi);
552 ir_bool (iea, p->required, "required", argi);
553 ir_bool (iea, p->repeatable, "repeatable", argi);
554 ir_HumanString (iea, p->description, "description", argi);
555 return ir_match_end (name, iea, argi);
558 static int ir_ElementInfoList (IrExpArg *iea,
559 Z_ElementInfoList *p, const char *name, int argi)
561 if (!ir_match_start (name, p, iea, ++argi))
564 ir_sequence (ir_ElementInfo, iea, p->elements,
565 &p->num, "elements", argi);
567 ir_sequence (ir_ElementInfo, iea, p->list,
568 &p->num, "elements", argi);
570 return ir_match_end (name, iea, argi);
573 static int ir_ElementDataType (IrExpArg *iea,
574 Z_ElementDataType *p, const char *name, int argi)
576 static IrExpChoice arm[] = {
577 { "primitive", Z_ElementDataType_primitive,
578 ir_ElementDataTypePrimitive },
579 { "structured", Z_ElementDataType_structured,
580 ir_ElementInfoList },
582 if (!ir_match_start (name, p, iea, ++argi))
584 ir_choice (iea, arm, &p->which, p->u.primitive, argi);
585 return ir_match_end (name, iea, argi);
588 static int ir_PathUnit (IrExpArg *iea,
589 Z_PathUnit *p, const char *name, int argi)
591 if (!ir_match_start (name, p, iea, ++argi))
593 ir_integer (iea, p->tagType, "tagType", argi);
594 ir_StringOrNumeric (iea, p->tagValue, "tagValue", argi);
595 return ir_match_end (name, iea, argi);
598 static int ir_Path (IrExpArg *iea,
599 Z_Path *p, const char *name, int argi)
601 if (!ir_match_start (name, p, iea, ++argi))
604 ir_sequence (ir_PathUnit, iea, p->elements,
605 &p->num, "elements", argi);
607 ir_sequence (ir_PathUnit, iea, p->list,
608 &p->num, "elements", argi);
610 return ir_match_end (name, iea, argi);
614 static int ir_TagSetElements (IrExpArg *iea,
615 Z_TagSetElements *p, const char *name, int argi)
617 static int ir_TagSetElements (IrExpArg *iea,
618 Z_TagSetInfoElements *p, const char *name, int argi)
621 if (!ir_match_start (name, p, iea, ++argi))
623 ir_InternationalString (iea, p->elementname, "elementname", argi);
624 ir_sequence (ir_InternationalString, iea, p->nicknames,
625 &p->num_nicknames, "nicknames", argi);
626 ir_StringOrNumeric (iea, p->elementTag, "elementTag", argi);
627 ir_HumanString (iea, p->description, "description", argi);
628 ir_PrimitiveDataType (iea, p->dataType, "dataType", argi);
629 ir_OtherInformation (iea, p->otherTagInfo, "otherTagInfo", argi);
630 return ir_match_end (name, iea, argi);
633 static int ir_TagSetInfo (IrExpArg *iea,
634 Z_TagSetInfo *p, const char *name, int argi)
636 if (!ir_match_start (name, p, iea, ++argi))
638 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
639 ir_oid (iea, p->tagSet, "tagSet", argi);
640 ir_InternationalString (iea, p->name, "name", argi);
641 ir_HumanString (iea, p->description, "description", argi);
642 ir_sequence (ir_TagSetElements, iea, p->elements,
643 &p->num_elements, "elements", argi);
644 return ir_match_end (name, iea, argi);
647 static int ir_RecordSyntaxInfo (IrExpArg *iea,
648 Z_RecordSyntaxInfo *p, const char *name, int argi)
650 if (!ir_match_start (name, p, iea, ++argi))
652 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
653 ir_oid (iea, p->recordSyntax, "recordSyntax", argi);
654 ir_InternationalString (iea, p->name, "name", argi);
655 ir_sequence (ir_oid, iea, p->transferSyntaxes,
656 &p->num_transferSyntaxes, "transferSyntaxes", argi);
657 ir_HumanString (iea, p->description, "description", argi);
658 ir_InternationalString (iea, p->asn1Module, "asn1Module", argi);
659 ir_sequence (ir_ElementInfo, iea, p->abstractStructure,
660 &p->num_abstractStructure, "abstractStructure", argi);
661 return ir_match_end (name, iea, argi);
664 static int ir_AttributeType (IrExpArg *iea,
665 Z_AttributeType *p, const char *name, int argi)
667 if (!ir_match_start (name, p, iea, ++argi))
669 ir_InternationalString (iea, p->name, "name", argi);
670 ir_HumanString (iea, p->description, "description", argi);
671 ir_integer (iea, p->attributeType, "attributeType", argi);
672 ir_sequence (ir_AttributeDescription, iea, p->attributeValues,
673 &p->num_attributeValues, "attributeValues", argi);
674 return ir_match_end (name, iea, argi);
677 static int ir_AttributeSetInfo (IrExpArg *iea,
678 Z_AttributeSetInfo *p, const char *name, int argi)
680 if (!ir_match_start (name, p, iea, ++argi))
682 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
683 ir_oid (iea, p->attributeSet, "attributeSet", argi);
684 ir_InternationalString (iea, p->name, "name", argi);
685 ir_sequence (ir_AttributeType, iea, p->attributes,
686 &p->num_attributes, "attributes", argi);
687 ir_HumanString (iea, p->description, "description", argi);
688 return ir_match_end (name, iea, argi);
691 static int ir_AttributeDescription (IrExpArg *iea,
692 Z_AttributeDescription *p, const char *name, int argi)
694 if (!ir_match_start (name, p, iea, ++argi))
696 ir_InternationalString (iea, p->name, "name", argi);
697 ir_HumanString (iea, p->description, "description", argi);
698 ir_StringOrNumeric (iea, p->attributeValue, "attributeValue", argi);
699 ir_sequence (ir_StringOrNumeric,iea, p->equivalentAttributes,
700 &p->num_equivalentAttributes, "equivalentAttributes", argi);
701 return ir_match_end (name, iea, argi);
704 static int ir_TermListElement (IrExpArg *iea,
705 Z_TermListElement *p, const char *name, int argi)
707 static IrExpChoice searchCostArm [] = {
708 { "optimized", Z_TermListElement_optimized, ir_choice_nop },
709 { "normal", Z_TermListElement_normal, ir_choice_nop },
710 { "expensive", Z_TermListElement_expensive, ir_choice_nop },
711 { "filter", Z_TermListElement_filter, ir_choice_nop },
713 ir_InternationalString (iea, p->name, "name", argi);
714 ir_HumanString (iea, p->title, "title", argi);
716 ir_choice (iea, searchCostArm, p->searchCost, odr_nullval(), argi);
718 ir_bool (iea, p->scanable, "scanable", argi);
719 ir_sequence (ir_InternationalString, iea, p->broader,
720 &p->num_broader, "broader", argi);
721 ir_sequence (ir_InternationalString, iea, p->narrower,
722 &p->num_narrower, "narrower", argi);
723 return ir_match_end (name, iea, argi);
726 static int ir_TermListInfo (IrExpArg *iea,
727 Z_TermListInfo *p, const char *name, int argi)
729 if (!ir_match_start (name, p, iea, ++argi))
731 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
732 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
733 ir_sequence (ir_TermListElement, iea, p->termLists,
734 &p->num_termLists, "termLists", argi);
735 return ir_match_end (name, iea, argi);
738 static int ir_ExtendedServicesInfo (IrExpArg *iea,
739 Z_ExtendedServicesInfo *p, const char *name, int argi)
741 static IrExpChoice waitActionArm [] = {
742 { "waitSupported", Z_ExtendedServicesInfo_waitSupported,
744 { "waitAlways", Z_ExtendedServicesInfo_waitAlways,
746 { "waitNotSupported", Z_ExtendedServicesInfo_waitNotSupported,
748 { "depends", Z_ExtendedServicesInfo_depends,
750 { "notSaying", Z_ExtendedServicesInfo_notSaying,
754 ir_InternationalString (iea, p->name, "name", argi);
755 if (!ir_match_start (name, p, iea, ++argi))
757 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
758 ir_oid (iea, p->type, "type", argi);
759 ir_InternationalString (iea, p->name, "name", argi);
760 ir_bool (iea, p->privateType, "privateType", argi);
761 ir_bool (iea, p->restrictionsApply, "restrictionsApply", argi);
762 ir_bool (iea, p->feeApply, "feeApply", argi);
763 ir_bool (iea, p->available, "available", argi);
764 ir_bool (iea, p->retentionSupported, "retentionSupported", argi);
766 ir_choice (iea, waitActionArm, p->waitAction, odr_nullval(), argi);
768 ir_HumanString (iea, p->description, "description", argi);
769 ir_External (iea, p->specificExplain, "specificExplain", argi);
770 ir_InternationalString (iea, p->esASN, "esASN", argi);
771 return ir_match_end (name, iea, argi);
774 static int ir_AttributeDetails (IrExpArg *iea,
775 Z_AttributeDetails *p, const char *name, int argi)
777 if (!ir_match_start (name, p, iea, ++argi))
779 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
780 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
781 ir_sequence (ir_AttributeSetDetails, iea, p->attributesBySet,
782 &p->num_attributesBySet, "attributesBySet", argi);
783 ir_AttributeCombinations (iea, p->attributeCombinations,
784 "attributeCombinations", argi);
785 return ir_match_end (name, iea, argi);
788 static int ir_AttributeSetDetails (IrExpArg *iea,
789 Z_AttributeSetDetails *p, const char *name, int argi)
791 if (!ir_match_start (name, p, iea, ++argi))
793 ir_oid (iea, p->attributeSet, "attributeSet", argi);
794 ir_sequence (ir_AttributeTypeDetails, iea, p->attributesByType,
795 &p->num_attributesByType, "attributesByType", argi);
796 return ir_match_end (name, iea, argi);
799 static int ir_AttributeTypeDetails (IrExpArg *iea,
800 Z_AttributeTypeDetails *p, const char *name, int argi)
802 if (!ir_match_start (name, p, iea, ++argi))
804 ir_integer (iea, p->attributeType, "attributeType", argi);
805 ir_OmittedAttributeInterpretation (iea, p->defaultIfOmitted,
806 "defaultIfOmitted", argi);
807 ir_sequence (ir_AttributeValue, iea, p->attributeValues,
808 &p->num_attributeValues, "attributeValues", argi);
809 return ir_match_end (name, iea, argi);
812 static int ir_OmittedAttributeInterpretation (IrExpArg *iea,
813 Z_OmittedAttributeInterpretation *p, const char *name, int argi)
815 if (!ir_match_start (name, p, iea, ++argi))
817 ir_StringOrNumeric (iea, p->defaultValue, "defaultValue", argi);
818 ir_HumanString (iea, p->defaultDescription, "defaultDescription", argi);
819 return ir_match_end (name, iea, argi);
822 static int ir_EScanInfo (IrExpArg *iea,
823 Z_EScanInfo *p, const char *name, int argi)
825 if (!ir_match_start (name, p, iea, ++argi))
827 ir_integer (iea, p->maxStepSize, "maxStepSize", argi);
828 ir_HumanString (iea, p->collatingSequence, "collatingSequence", argi);
829 ir_bool (iea, p->increasing, "increasing", argi);
830 return ir_match_end (name, iea, argi);
833 static int ir_TermListDetails (IrExpArg *iea,
834 Z_TermListDetails *p, const char *name, int argi)
836 if (!ir_match_start (name, p, iea, ++argi))
838 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
839 ir_InternationalString (iea, p->termListName, "termListName", argi);
840 ir_HumanString (iea, p->description, "description", argi);
841 ir_AttributeCombinations (iea, p->attributes, "attributes", argi);
843 ir_EScanInfo (iea, p->scanInfo, "scanInfo", argi);
845 ir_integer (iea, p->estNumberTerms, "estNumberTerms", argi);
846 ir_sequence (ir_Term, iea, p->sampleTerms,
847 &p->num_sampleTerms, "sampleTerms", argi);
848 return ir_match_end (name, iea, argi);
851 static int ir_ElementSetDetails (IrExpArg *iea,
852 Z_ElementSetDetails *p, const char *name, int argi)
854 if (!ir_match_start (name, p, iea, ++argi))
856 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
857 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
858 ir_ElementSetName (iea, p->elementSetName, "elementSetName", argi);
859 ir_oid (iea, p->recordSyntax, "recordSyntax", argi);
860 ir_oid (iea, p->schema, "schema", argi);
861 ir_HumanString (iea, p->description, "description", argi);
862 ir_sequence (ir_PerElementDetails, iea, p->detailsPerElement,
863 &p->num_detailsPerElement, "detailsPerElement", argi);
864 return ir_match_end (name, iea, argi);
867 static int ir_RetrievalRecordDetails (IrExpArg *iea,
868 Z_RetrievalRecordDetails *p, const char *name, int argi)
870 if (!ir_match_start (name, p, iea, ++argi))
872 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
873 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
874 ir_oid (iea, p->schema, "schema", argi);
875 ir_oid (iea, p->recordSyntax, "recordSyntax", argi);
876 ir_HumanString (iea, p->description, "description", argi);
877 ir_sequence (ir_PerElementDetails, iea, p->detailsPerElement,
878 &p->num_detailsPerElement, "detailsPerElement", argi);
879 return ir_match_end (name, iea, argi);
882 static int ir_PerElementDetails (IrExpArg *iea,
883 Z_PerElementDetails *p, const char *name, int argi)
885 if (!ir_match_start (name, p, iea, ++argi))
887 ir_InternationalString (iea, p->name, "name", argi);
888 ir_RecordTag (iea, p->recordTag, "recordTag", argi);
889 ir_sequence (ir_Path, iea, p->schemaTags,
890 &p->num_schemaTags, "schemaTags", argi);
891 ir_integer (iea, p->maxSize, "maxSize", argi);
892 ir_integer (iea, p->minSize, "minSize", argi);
893 ir_integer (iea, p->avgSize, "avgSize", argi);
894 ir_integer (iea, p->fixedSize, "fixedSize", argi);
895 ir_bool (iea, p->repeatable, "repeatable", argi);
896 ir_bool (iea, p->required, "required", argi);
897 ir_HumanString (iea, p->description, "description", argi);
898 ir_HumanString (iea, p->contents, "contents", argi);
899 ir_HumanString (iea, p->billingInfo, "billingInfo", argi);
900 ir_HumanString (iea, p->restrictions, "restrictions", argi);
901 ir_sequence (ir_InternationalString, iea, p->alternateNames,
902 &p->num_alternateNames, "alternateNames", argi);
903 ir_sequence (ir_InternationalString, iea, p->genericNames,
904 &p->num_genericNames, "genericNames", argi);
905 ir_AttributeCombinations (iea, p->searchAccess, "searchAccess", argi);
906 return ir_match_end (name, iea, argi);
909 static int ir_RecordTag (IrExpArg *iea,
910 Z_RecordTag *p, const char *name, int argi)
912 if (!ir_match_start (name, p, iea, ++argi))
914 ir_StringOrNumeric (iea, p->qualifier, "qualifier", argi);
915 ir_StringOrNumeric (iea, p->tagValue, "tagValue", argi);
916 return ir_match_end (name, iea, argi);
919 static int ir_SortDetails (IrExpArg *iea,
920 Z_SortDetails *p, const char *name, int argi)
922 if (!ir_match_start (name, p, iea, ++argi))
924 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
925 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
926 ir_sequence (ir_SortKeyDetails, iea, p->sortKeys,
927 &p->num_sortKeys, "sortKeys", argi);
928 return ir_match_end (name, iea, argi);
931 static int ir_SortKeyDetails (IrExpArg *iea,
932 Z_SortKeyDetails *p, const char *name, int argi)
934 static IrExpChoice sortArm [] = {
935 { "always", Z_SortKeyDetails_always,
937 { "never", Z_SortKeyDetails_never,
939 { "defaultYes", Z_SortKeyDetails_default_yes,
941 { "defaultNo", Z_SortKeyDetails_default_no,
945 static IrExpChoice sortArm2 [] = {
946 { "character", Z_SortKeyDetails_character,
948 { "numeric", Z_SortKeyDetails_numeric,
950 { "structured", Z_SortKeyDetails_structured,
954 if (!ir_match_start (name, p, iea, ++argi))
956 ir_HumanString (iea, p->description, "description", argi);
957 ir_sequence (ir_Specification, iea, p->elementSpecifications,
958 &p->num_elementSpecifications, "elementSpecifications", argi);
959 ir_AttributeCombinations (iea, p->attributeSpecifications,
960 "attributeSpecifications", argi);
961 ir_choice (iea, sortArm2, &p->which, p->u.character, argi);
963 if (p->caseSensitivity)
964 ir_choice (iea, sortArm, p->caseSensitivity, odr_nullval(), argi);
966 return ir_match_end (name, iea, argi);
969 static int ir_ProcessingInformation (IrExpArg *iea,
970 Z_ProcessingInformation *p, const char *name, int argi)
972 IrExpChoice arm[] = {
973 { "access", Z_ProcessingInformation_access,
975 { "search", Z_ProcessingInformation_search,
977 { "retrieval", Z_ProcessingInformation_retrieval,
979 { "recordPresentation", Z_ProcessingInformation_record_presentation,
981 { "recordHandling", Z_ProcessingInformation_record_handling,
984 if (!ir_match_start (name, p, iea, ++argi))
986 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
987 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
989 ir_choice (iea, arm, p->processingContext, odr_nullval(), argi);
990 ir_InternationalString (iea, p->name, "name", argi);
991 ir_oid (iea, p->oid, "oid", argi);
992 ir_HumanString (iea, p->description, "description", argi);
993 ir_External (iea, p->instructions, "instructions", argi);
994 return ir_match_end (name, iea, argi);
997 static int ir_VariantSetInfo (IrExpArg *iea,
998 Z_VariantSetInfo *p, const char *name, int argi)
1000 if (!ir_match_start (name, p, iea, ++argi))
1002 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
1003 ir_oid (iea, p->variantSet, "variantSet", argi);
1004 ir_InternationalString (iea, p->name, "name", argi);
1005 ir_sequence (ir_VariantClass, iea, p->variants,
1006 &p->num_variants, "variants", argi);
1007 return ir_match_end (name, iea, argi);
1010 static int ir_VariantClass (IrExpArg *iea,
1011 Z_VariantClass *p, const char *name, int argi)
1013 if (!ir_match_start (name, p, iea, ++argi))
1015 ir_InternationalString (iea, p->name, "name", argi);
1016 ir_HumanString (iea, p->description, "description", argi);
1017 ir_integer (iea, p->variantClass, "variantClass", argi);
1018 ir_sequence (ir_VariantType, iea, p->variantTypes,
1019 &p->num_variantTypes, "variantTypes", argi);
1020 return ir_match_end (name, iea, argi);
1023 static int ir_VariantType (IrExpArg *iea,
1024 Z_VariantType *p, const char *name, int argi)
1026 if (!ir_match_start (name, p, iea, ++argi))
1028 ir_InternationalString (iea, p->name, "name", argi);
1029 ir_HumanString (iea, p->description, "description", argi);
1030 ir_integer (iea, p->variantType, "variantType", argi);
1031 ir_VariantValue (iea, p->variantValue, "variantValue", argi);
1032 return ir_match_end (name, iea, argi);
1035 static int ir_ValueSetEnumerated (IrExpArg *iea,
1036 Z_ValueSetEnumerated *p, const char *name, int argi)
1038 if (!ir_match_start (name, p, iea, ++argi))
1040 ir_sequence (ir_ValueDescription, iea, p->elements,
1041 &p->num, "enumerated", argi);
1042 return ir_match_end (name, iea, argi);
1045 static int ir_ValueSet (IrExpArg *iea,
1046 Z_ValueSet *p, const char *name, int argi)
1048 IrExpChoice arm [] = {
1049 { "range", Z_ValueSet_range, ir_ValueRange },
1050 { "enumerated", Z_ValueSet_enumerated, ir_ValueSetEnumerated },
1052 if (!ir_match_start (name, p, iea, ++argi))
1054 ir_choice (iea, arm, &p->which, p->u.range, argi);
1055 return ir_match_end (name, iea, argi);
1058 static int ir_VariantValue (IrExpArg *iea,
1059 Z_VariantValue *p, const char *name, int argi)
1061 if (!ir_match_start (name, p, iea, ++argi))
1063 ir_PrimitiveDataType (iea, p->dataType, "dataType", argi);
1065 ir_ValueSet (iea, p->values, "values", argi);
1066 return ir_match_end (name, iea, argi);
1069 static int ir_ValueRange (IrExpArg *iea,
1070 Z_ValueRange *p, const char *name, int argi)
1072 if (!ir_match_start (name, p, iea, ++argi))
1074 ir_ValueDescription (iea, p->lower, "lower", argi);
1075 ir_ValueDescription (iea, p->upper, "upper", argi);
1076 return ir_match_end (name, iea, argi);
1079 static int ir_ValueDescription (IrExpArg *iea,
1080 Z_ValueDescription *p, const char *name, int argi)
1082 static IrExpChoice arm [] = {
1083 { "integer", Z_ValueDescription_integer, ir_integer },
1084 { "string", Z_ValueDescription_string, ir_InternationalString},
1085 { "octets", Z_ValueDescription_octets, ir_octet},
1086 { "oid", Z_ValueDescription_oid, ir_oid},
1087 { "unit", Z_ValueDescription_unit, ir_Unit},
1088 { "valueAndUnit", Z_ValueDescription_valueAndUnit, ir_IntUnit},
1091 if (!ir_match_start (name, p, iea, ++argi))
1093 ir_choice (iea, arm, &p->which, p->u.integer, argi);
1094 return ir_match_end (name, iea, argi);
1097 static int ir_UnitInfo (IrExpArg *iea,
1098 Z_UnitInfo *p, const char *name, int argi)
1100 if (!ir_match_start (name, p, iea, ++argi))
1102 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
1103 ir_InternationalString (iea, p->unitSystem, "unitSystem", argi);
1104 ir_HumanString (iea, p->description, "description", argi);
1105 ir_sequence (ir_UnitType, iea, p->units,
1106 &p->num_units, "units", argi);
1107 return ir_match_end (name, iea, argi);
1110 static int ir_UnitType (IrExpArg *iea,
1111 Z_UnitType *p, const char *name, int argi)
1113 if (!ir_match_start (name, p, iea, ++argi))
1115 ir_InternationalString (iea, p->name, "name", argi);
1116 ir_HumanString (iea, p->description, "description", argi);
1117 ir_StringOrNumeric (iea, p->unitType, "unitType", argi);
1118 ir_sequence (ir_Units, iea, p->units, &p->num_units, "units", argi);
1119 return ir_match_end (name, iea, argi);
1122 static int ir_Units (IrExpArg *iea,
1123 Z_Units *p, const char *name, int argi)
1125 if (!ir_match_start (name, p, iea, ++argi))
1127 ir_InternationalString (iea, p->name, "name", argi);
1128 ir_HumanString (iea, p->description, "description", argi);
1129 ir_StringOrNumeric (iea, p->unit, "unit", argi);
1130 return ir_match_end (name, iea, argi);
1133 static int ir_CategoryList (IrExpArg *iea,
1134 Z_CategoryList *p, const char *name, int argi)
1136 if (!ir_match_start (name, p, iea, ++argi))
1138 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
1139 ir_sequence (ir_CategoryInfo, iea, p->categories,
1140 &p->num_categories, "categories", argi);
1141 return ir_match_end (name, iea, argi);
1144 static int ir_CategoryInfo (IrExpArg *iea,
1145 Z_CategoryInfo *p, const char *name, int argi)
1147 if (!ir_match_start (name, p, iea, ++argi))
1149 ir_InternationalString (iea, p->category, "category", argi);
1150 ir_InternationalString (iea, p->originalCategory, "originalCategory", argi);
1151 ir_HumanString (iea, p->description, "description", argi);
1152 ir_InternationalString (iea, p->asn1Module, "asn1Module", argi);
1153 return ir_match_end (name, iea, argi);
1156 static int ir_CommonInfo (IrExpArg *iea,
1157 Z_CommonInfo *p, const char *name, int argi)
1159 if (!ir_match_start (name, p, iea, ++argi))
1161 ir_GeneralizedTime (iea, p->dateAdded, "dateAdded", argi);
1162 ir_GeneralizedTime (iea, p->dateChanged, "dateChanged", argi);
1163 ir_GeneralizedTime (iea, p->expiry, "expiry", argi);
1164 ir_LanguageCode (iea, p->humanStringLanguage, "humanString-Language",
1166 ir_OtherInformation (iea, p->otherInfo, "otherInfo", argi);
1167 return ir_match_end (name, iea, argi);
1170 static int ir_HumanStringUnit (IrExpArg *iea,
1171 Z_HumanStringUnit *p, const char *name, int argi)
1173 if (!ir_match_start (name, p, iea, ++argi))
1175 ir_LanguageCode (iea, p->language, "language", argi);
1176 ir_InternationalString (iea, p->text, "text", argi);
1177 return ir_match_end (name, iea, argi);
1180 static int ir_HumanString (IrExpArg *iea,
1181 Z_HumanString *p, const char *name, int argi)
1183 if (!ir_match_start (name, p, iea, ++argi))
1185 ir_sequence (ir_HumanStringUnit, iea, p->strings,
1186 &p->num_strings, "strings", argi);
1187 return ir_match_end (name, iea, argi);
1190 static int ir_IconObjectUnit (IrExpArg *iea,
1191 Z_IconObjectUnit *p, const char *name, int argi)
1193 static IrExpChoice arm [] = {
1194 { "ianaType", Z_IconObjectUnit_ianaType, ir_InternationalString },
1195 { "z3950type", Z_IconObjectUnit_z3950type, ir_InternationalString },
1196 { "otherType", Z_IconObjectUnit_otherType, ir_InternationalString },
1198 if (!ir_match_start (name, p, iea, ++argi))
1200 ir_choice (iea, arm, &p->which, odr_nullval(), argi);
1201 ir_octet (iea, p->content, "content", argi);
1202 return ir_match_end (name, iea, argi);
1205 static int ir_IconObject (IrExpArg *iea,
1206 Z_IconObject *p, const char *name, int argi)
1208 if (!ir_match_start (name, p, iea, ++argi))
1210 ir_sequence (ir_IconObjectUnit, iea, p->elements,
1211 &p->num, "iconUnits", argi);
1212 return ir_match_end (name, iea, argi);
1215 static int ir_ContactInfo (IrExpArg *iea,
1216 Z_ContactInfo *p, const char *name, int argi)
1218 if (!ir_match_start (name, p, iea, ++argi))
1220 ir_InternationalString (iea, p->name, "name", argi);
1221 ir_HumanString (iea, p->description, "description", argi);
1222 ir_HumanString (iea, p->address, "address", argi);
1223 ir_InternationalString (iea, p->email, "email", argi);
1224 ir_InternationalString (iea, p->phone, "phone", argi);
1225 return ir_match_end (name, iea, argi);
1228 static int ir_NetworkAddressIA (IrExpArg *iea,
1229 Z_NetworkAddressIA *p, const char *name, int argi)
1231 if (!ir_match_start (name, p, iea, ++argi))
1233 ir_InternationalString (iea, p->hostAddress, "hostAddress", argi);
1234 ir_integer (iea, p->port, "port", argi);
1235 return ir_match_end (name, iea, argi);
1238 static int ir_NetworkAddressOPA (IrExpArg *iea,
1239 Z_NetworkAddressOPA *p, const char *name, int argi)
1241 if (!ir_match_start (name, p, iea, ++argi))
1243 ir_InternationalString (iea, p->pSel, "pSel", argi);
1244 ir_InternationalString (iea, p->sSel, "sSel", argi);
1245 ir_InternationalString (iea, p->tSel, "tSel", argi);
1246 ir_InternationalString (iea, p->nSap, "nSap", argi);
1247 return ir_match_end (name, iea, argi);
1250 static int ir_NetworkAddressOther (IrExpArg *iea,
1251 Z_NetworkAddressOther *p, const char *name, int argi)
1253 if (!ir_match_start (name, p, iea, ++argi))
1255 ir_InternationalString (iea, p->type, "type", argi);
1256 ir_InternationalString (iea, p->address, "address", argi);
1257 return ir_match_end (name, iea, argi);
1260 static int ir_NetworkAddress (IrExpArg *iea,
1261 Z_NetworkAddress *p, const char *name, int argi)
1263 IrExpChoice arm [] = {
1264 { "iA", Z_NetworkAddress_iA, ir_NetworkAddressIA },
1265 { "oPA", Z_NetworkAddress_oPA, ir_NetworkAddressOPA },
1266 { "other", Z_NetworkAddress_other, ir_NetworkAddressOther },
1268 if (!ir_match_start (name, p, iea, ++argi))
1270 ir_choice (iea, arm, &p->which, p->u.internetAddress, argi);
1271 return ir_match_end (name, iea, argi);
1274 static int ir_AccessInfo (IrExpArg *iea,
1275 Z_AccessInfo *p, const char *name, int argi)
1277 if (!ir_match_start (name, p, iea, ++argi))
1279 ir_sequence (ir_QueryTypeDetails, iea, p->queryTypesSupported,
1280 &p->num_queryTypesSupported, "queryTypesSupported", argi);
1281 ir_sequence (ir_oid, iea, p->diagnosticsSets,
1282 &p->num_diagnosticsSets, "diagnosticsSets", argi);
1283 ir_sequence (ir_oid, iea, p->attributeSetIds,
1284 &p->num_attributeSetIds, "attributeSetIds", argi);
1285 ir_sequence (ir_oid, iea, p->schemas,
1286 &p->num_schemas, "schemas", argi);
1287 ir_sequence (ir_oid, iea, p->recordSyntaxes,
1288 &p->num_recordSyntaxes, "recordSyntaxes", argi);
1289 ir_sequence (ir_oid, iea, p->resourceChallenges,
1290 &p->num_resourceChallenges, "resourceChallenges", argi);
1291 ir_AccessRestrictions (iea, p->restrictedAccess, "restrictedAccess", argi);
1292 ir_Costs (iea, p->costInfo, "costInfo", argi);
1293 ir_sequence (ir_oid, iea, p->variantSets,
1294 &p->num_variantSets, "variantSets", argi);
1295 ir_sequence (ir_ElementSetName, iea, p->elementSetNames,
1296 &p->num_elementSetNames, "elementSetNames", argi);
1297 ir_sequence (ir_InternationalString, iea, p->unitSystems,
1298 &p->num_unitSystems, "unitSystems", argi);
1299 return ir_match_end (name, iea, argi);
1303 static int ir_QueryTypeDetails (IrExpArg *iea,
1304 Z_QueryTypeDetails *p, const char *name, int argi)
1306 static IrExpChoice arm[] = {
1307 { "private", Z_QueryTypeDetails_private,
1308 ir_PrivateCapabilities },
1309 { "rpn", Z_QueryTypeDetails_rpn,
1310 ir_RpnCapabilities },
1311 { "iso8777", Z_QueryTypeDetails_iso8777,
1312 ir_Iso8777Capabilities },
1313 { "z39_58", Z_QueryTypeDetails_z39_58,
1315 { "erpn", Z_QueryTypeDetails_erpn,
1316 ir_RpnCapabilities },
1317 { "rankedList", Z_QueryTypeDetails_rankedList,
1321 if (!ir_match_start (name, p, iea, ++argi))
1323 ir_choice (iea, arm, &p->which, p->u.zprivate, argi);
1324 return ir_match_end (name, iea, argi);
1327 static int ir_PrivateCapOperator (IrExpArg *iea,
1328 Z_PrivateCapOperator *p, const char *name, int argi)
1330 if (!ir_match_start (name, p, iea, ++argi))
1332 ir_InternationalString (iea, p->roperator, "operator", argi);
1333 ir_HumanString (iea, p->description, "description", argi);
1334 return ir_match_end (name, iea, argi);
1337 static int ir_PrivateCapabilities (IrExpArg *iea,
1338 Z_PrivateCapabilities *p, const char *name, int argi)
1340 if (!ir_match_start (name, p, iea, ++argi))
1343 ir_sequence (ir_PrivateCapOperator, iea, p->operators,
1344 &p->num_operators, "operators", argi);
1345 ir_sequence (ir_SearchKey, iea, p->searchKeys,
1346 &p->num_searchKeys, "searchKeys", argi);
1347 ir_sequence (ir_HumanString, iea, p->description,
1348 &p->num_description, "description", argi);
1349 return ir_match_end (name, iea, argi);
1352 static int ir_RpnCapabilities (IrExpArg *iea,
1353 Z_RpnCapabilities *p, const char *name, int argi)
1355 if (!ir_match_start (name, p, iea, ++argi))
1357 ir_sequence (ir_integer, iea, p->operators,
1358 &p->num_operators, "operators", argi);
1359 ir_bool (iea, p->resultSetAsOperandSupported,
1360 "resultSetAsOperandSupported", argi);
1361 ir_bool (iea, p->restrictionOperandSupported,
1362 "restrictionOperandSupported", argi);
1363 ir_ProximitySupport (iea, p->proximity, "proximity", argi);
1364 return ir_match_end (name, iea, argi);
1367 static int ir_Iso8777Capabilities (IrExpArg *iea,
1368 Z_Iso8777Capabilities *p, const char *name, int argi)
1370 if (!ir_match_start (name, p, iea, ++argi))
1372 ir_sequence (ir_SearchKey, iea, p->searchKeys,
1373 &p->num_searchKeys, "searchKeys", argi);
1374 ir_HumanString (iea, p->restrictions, "restrictions", argi);
1375 return ir_match_end (name, iea, argi);
1378 static int ir_ProxSupportPrivate (IrExpArg *iea,
1379 Z_ProxSupportPrivate *p, const char *name, int argi)
1381 if (!ir_match_start (name, p, iea, ++argi))
1383 ir_integer (iea, p->unit, "unit", argi);
1384 ir_HumanString (iea, p->description, "description", argi);
1385 return ir_match_end (name, iea, argi);
1388 static int ir_ProxSupportUnit (IrExpArg *iea,
1389 Z_ProxSupportUnit *p, const char *name, int argi)
1391 static IrExpChoice arm [] = {
1392 { "known", Z_ProxSupportUnit_known, ir_integer },
1393 { "private", Z_ProxSupportUnit_private, ir_ProxSupportPrivate },
1395 if (!ir_match_start (name, p, iea, ++argi))
1397 ir_choice (iea, arm, &p->which, p->u.zprivate, argi);
1398 return ir_match_end (name, iea, argi);
1401 static int ir_ProximitySupport (IrExpArg *iea,
1402 Z_ProximitySupport *p, const char *name, int argi)
1404 if (!ir_match_start (name, p, iea, ++argi))
1406 ir_bool (iea, p->anySupport, "anySupport", argi);
1407 ir_sequence (ir_ProxSupportUnit, iea, p->unitsSupported,
1408 &p->num_unitsSupported, "unitsSupported", argi);
1409 return ir_match_end (name, iea, argi);
1412 static int ir_SearchKey (IrExpArg *iea,
1413 Z_SearchKey *p, const char *name, int argi)
1415 if (!ir_match_start (name, p, iea, ++argi))
1417 ir_InternationalString (iea, p->searchKey, "searchKey", argi);
1418 ir_HumanString (iea, p->description, "description", argi);
1419 return ir_match_end (name, iea, argi);
1422 static int ir_AccessRestrictionsUnit (IrExpArg *iea,
1423 Z_AccessRestrictionsUnit *p, const char *name, int argi)
1425 static IrExpChoice arm[] = {
1426 { "any", Z_AccessRestrictionsUnit_any,
1428 { "search", Z_AccessRestrictionsUnit_search,
1430 { "present", Z_AccessRestrictionsUnit_present,
1432 { "specificElements", Z_AccessRestrictionsUnit_specific_elements,
1434 { "extendedServices", Z_AccessRestrictionsUnit_extended_services,
1436 { "byDatabase", Z_AccessRestrictionsUnit_by_database,
1440 if (!ir_match_start (name, p, iea, ++argi))
1442 ir_choice (iea, arm, p->accessType, odr_nullval(), argi);
1443 ir_HumanString (iea, p->accessText, "accessText", argi);
1444 ir_sequence (ir_oid, iea, p->accessChallenges,
1445 &p->num_accessChallenges, "accessChallenges", argi);
1446 return ir_match_end (name, iea, argi);
1449 static int ir_AccessRestrictions (IrExpArg *iea,
1450 Z_AccessRestrictions *p, const char *name, int argi)
1452 if (!ir_match_start (name, p, iea, ++argi))
1454 ir_sequence (ir_AccessRestrictionsUnit, iea, p->elements,
1455 &p->num, "restrictions", argi);
1456 return ir_match_end (name, iea, argi);
1459 static int ir_CostsOtherCharge (IrExpArg *iea,
1460 Z_CostsOtherCharge *p, const char *name, int argi)
1462 if (!ir_match_start (name, p, iea, ++argi))
1464 ir_HumanString (iea, p->forWhat, "forWhat", argi);
1465 ir_Charge (iea, p->charge, "charge", argi);
1466 return ir_match_end (name, iea, argi);
1469 static int ir_Costs (IrExpArg *iea,
1470 Z_Costs *p, const char *name, int argi)
1472 if (!ir_match_start (name, p, iea, ++argi))
1474 ir_Charge (iea, p->connectCharge, "connectCharge", argi);
1475 ir_Charge (iea, p->connectTime, "connectTime", argi);
1476 ir_Charge (iea, p->displayCharge, "displayCharge", argi);
1477 ir_Charge (iea, p->searchCharge, "searchCharge", argi);
1478 ir_Charge (iea, p->subscriptCharge, "subscriptCharge", argi);
1480 ir_sequence (ir_CostsOtherCharge, iea, p->otherCharges,
1481 &p->num_otherCharges, "otherCharges", argi);
1482 return ir_match_end (name, iea, argi);
1485 static int ir_Charge (IrExpArg *iea,
1486 Z_Charge *p, const char *name, int argi)
1488 if (!ir_match_start (name, p, iea, ++argi))
1490 ir_IntUnit (iea, p->cost, "cost", argi);
1491 ir_Unit (iea, p->perWhat, "perWhat", argi);
1492 ir_HumanString (iea, p->text, "text", argi);
1493 return ir_match_end (name, iea, argi);
1496 static int ir_DatabaseList (IrExpArg *iea,
1497 Z_DatabaseList *p, const char *name, int argi)
1499 if (!ir_match_start (name, p, iea, ++argi))
1501 ir_sequence (ir_DatabaseName, iea, p->databases,
1502 &p->num_databases, "databases", argi);
1503 return ir_match_end (name, iea, argi);
1506 static int ir_AttributeCombinations (IrExpArg *iea,
1507 Z_AttributeCombinations *p, const char *name, int argi)
1509 if (!ir_match_start (name, p, iea, ++argi))
1511 ir_oid (iea, p->defaultAttributeSet, "defaultAttributeSet", argi);
1512 ir_sequence (ir_AttributeCombination, iea, p->legalCombinations,
1513 &p->num_legalCombinations, "legalCombinations", argi);
1514 return ir_match_end (name, iea, argi);
1517 static int ir_AttributeCombination (IrExpArg *iea,
1518 Z_AttributeCombination *p, const char *name, int argi)
1520 if (!ir_match_start (name, p, iea, ++argi))
1522 ir_sequence (ir_AttributeOccurrence, iea, p->occurrences,
1523 &p->num_occurrences, "occurrences", argi);
1524 return ir_match_end (name, iea, argi);
1527 static int ir_AttributeValueList (IrExpArg *iea,
1528 Z_AttributeValueList *p, const char *name, int argi)
1530 if (!ir_match_start (name, p, iea, ++argi))
1532 ir_sequence (ir_StringOrNumeric, iea, p->attributes,
1533 &p->num_attributes, "attributes", argi);
1534 return ir_match_end (name, iea, argi);
1537 static int ir_AttributeOccurrence (IrExpArg *iea,
1538 Z_AttributeOccurrence *p, const char *name, int argi)
1540 static IrExpChoice arm [] = {
1541 { "anyOrNone", Z_AttributeOcc_any_or_none, ir_null },
1542 { "specific", Z_AttributeOcc_specific,
1543 ir_AttributeValueList },
1544 { NULL, 0, NULL } };
1545 if (!ir_match_start (name, p, iea, ++argi))
1547 ir_oid (iea, p->attributeSet, "attributeSet", argi);
1548 ir_integer (iea, p->attributeType, "attributeType", argi);
1549 ir_null (iea, p->mustBeSupplied, "mustBeSupplied", argi);
1550 ir_choice (iea, arm, &p->which, p->attributeValues.any_or_none, argi);
1551 return ir_match_end (name, iea, argi);
1554 static int ir_AttributeValue (IrExpArg *iea,
1555 Z_AttributeValue *p, const char *name, int argi)
1557 if (!ir_match_start (name, p, iea, ++argi))
1559 ir_StringOrNumeric (iea, p->value, "value", argi);
1560 ir_HumanString (iea, p->description, "description", argi);
1561 ir_sequence (ir_StringOrNumeric, iea, p->subAttributes,
1562 &p->num_subAttributes, "subAttributes", argi);
1563 ir_sequence (ir_StringOrNumeric, iea, p->superAttributes,
1564 &p->num_superAttributes, "superAttributes", argi);
1565 ir_null (iea, p->partialSupport, "partialSupport", argi);
1566 return ir_match_end (name, iea, argi);
1569 static int ir_StringOrNumeric (IrExpArg *iea,
1570 Z_StringOrNumeric *p, const char *name, int argi)
1572 IrExpChoice arm[] = {
1573 { "string", Z_StringOrNumeric_string, ir_InternationalString },
1574 { "numeric", Z_StringOrNumeric_numeric, ir_integer },
1576 if (!ir_match_start (name, p, iea, ++argi))
1578 ir_choice (iea, arm, &p->which, p->u.string, argi);
1579 return ir_match_end (name, iea, argi);
1582 static int ir_ElementSpec (IrExpArg *iea,
1583 Z_ElementSpec *p, const char *name, int argi)
1585 static IrExpChoice arm[] = {
1586 { "elementSetName", Z_ElementSpec_elementSetName,
1587 ir_InternationalString },
1588 { "externalSpec", Z_ElementSpec_externalSpec,
1592 if (!ir_match_start (name, p, iea, ++argi))
1594 ir_choice (iea, arm, &p->which, p->u.elementSetName, argi);
1595 return ir_match_end (name, iea, argi);
1598 static int ir_Specification (IrExpArg *iea,
1599 Z_Specification *p, const char *name, int argi)
1601 if (!ir_match_start (name, p, iea, ++argi))
1603 #if YAZ_VERSIONL >= 0x010903L
1604 if (p->which == Z_Schema_oid)
1605 ir_oid (iea, p->schema.oid, "schema", argi);
1607 ir_oid (iea, p->schema, "schema", argi);
1609 ir_ElementSpec (iea, p->elementSpec, "elementSpec", argi);
1610 return ir_match_end (name, iea, argi);
1613 static int ir_InfoCategory (IrExpArg *iea,
1614 Z_InfoCategory *p, const char *name, int argi)
1616 if (!ir_match_start (name, p, iea, ++argi))
1618 ir_oid (iea, p->categoryTypeId, "categoryTypeId", argi);
1619 ir_integer (iea, p->categoryValue, "categoryValue", argi);
1620 return ir_match_end (name, iea, argi);
1623 static int ir_OtherInformationUnit (IrExpArg *iea,
1624 Z_OtherInformationUnit *p, const char *name, int argi)
1626 static IrExpChoice arm[] = {
1628 Z_OtherInfo_characterInfo, ir_InternationalString },
1630 Z_OtherInfo_binaryInfo, ir_octet},
1631 { "externallyDefinedInfo",
1632 Z_OtherInfo_externallyDefinedInfo,
1635 Z_OtherInfo_oid, ir_oid},
1638 if (!ir_match_start (name, p, iea, ++argi))
1640 ir_InfoCategory (iea, p->category, "category", argi);
1641 ir_choice (iea, arm, &p->which, p->information.characterInfo, argi);
1642 return ir_match_end (name, iea, argi);
1645 static int ir_OtherInformation (IrExpArg *iea,
1646 Z_OtherInformation *p, const char *name, int argi)
1648 if (!ir_match_start (name, p, iea, ++argi))
1650 ir_sequence (ir_OtherInformationUnit, iea, p->list,
1651 &p->num_elements, "list", argi);
1652 return ir_match_end (name, iea, argi);
1655 static int ir_IntUnit (IrExpArg *iea,
1656 Z_IntUnit *p, const char *name, int argi)
1658 if (!ir_match_start (name, p, iea, ++argi))
1660 ir_integer (iea, p->value, "value", argi);
1661 ir_Unit (iea, p->unitUsed, "unitUsed", argi);
1662 return ir_match_end (name, iea, argi);
1665 static int ir_Unit (IrExpArg *iea,
1666 Z_Unit *p, const char *name, int argi)
1668 if (!ir_match_start (name, p, iea, ++argi))
1670 ir_InternationalString (iea, p->unitSystem, "unitSystem", argi);
1671 ir_StringOrNumeric (iea, p->unitType, "unitType", argi);
1672 ir_StringOrNumeric (iea, p->unit, "unit", argi);
1673 ir_integer (iea, p->scaleFactor, "scaleFactor", argi);
1674 return ir_match_end (name, iea, argi);
1677 int ir_ExplainRecord (IrExpArg *iea, Z_ExplainRecord *p, int argi)
1679 static IrExpChoice arm[] = {
1680 {"targetInfo", Z_Explain_targetInfo,
1682 {"databaseInfo", Z_Explain_databaseInfo,
1684 {"schemaInfo", Z_Explain_schemaInfo,
1686 {"tagSetInfo", Z_Explain_tagSetInfo,
1688 {"recordSyntaxInfo", Z_Explain_recordSyntaxInfo,
1689 ir_RecordSyntaxInfo},
1690 {"attributeSetInfo", Z_Explain_attributeSetInfo,
1691 ir_AttributeSetInfo},
1692 {"termListInfo", Z_Explain_termListInfo,
1694 {"extendedServicesInfo", Z_Explain_extendedServicesInfo,
1695 ir_ExtendedServicesInfo},
1696 {"attributeDetails", Z_Explain_attributeDetails,
1697 ir_AttributeDetails},
1698 {"termListDetails", Z_Explain_termListDetails,
1699 ir_TermListDetails},
1700 {"elementSetDetails", Z_Explain_elementSetDetails,
1701 ir_ElementSetDetails},
1702 {"retrievalRecordDetails", Z_Explain_retrievalRecordDetails,
1703 ir_RetrievalRecordDetails},
1704 {"sortDetails", Z_Explain_sortDetails,
1706 {"processing", Z_Explain_processing,
1707 ir_ProcessingInformation},
1708 {"variants", Z_Explain_variants,
1710 {"units", Z_Explain_units,
1712 {"categoryList", Z_Explain_categoryList,
1717 return ir_choice (iea, arm, &p->which, p->u.targetInfo, argi);
1720 int ir_tcl_get_explain (Tcl_Interp *interp, Z_ExplainRecord *rec,
1721 int argc, char **argv)
1727 iea.interp = interp;
1729 return ir_ExplainRecord (&iea, rec, 2);