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.12 2003-02-18 10:28:00 adam
9 * Fix for new schema definition
11 * Revision 1.11 1998/05/20 12:24:41 adam
12 * Fixed bug regaring missing element languages in TargetInfo.
13 * Changed code so that it works with ASN.1 compiled YAZ code.
15 * Revision 1.10 1998/04/02 14:31:08 adam
16 * This version works with compiled ASN.1 code.
18 * Revision 1.9 1997/11/24 11:34:38 adam
19 * Using odr_nullval() instead of ODR_NULLVAL when appropriate.
21 * Revision 1.8 1997/09/09 10:19:51 adam
22 * New MSV5.0 port with fewer warnings.
24 * Revision 1.7 1997/08/28 20:17:36 adam
27 * Revision 1.6 1997/05/14 06:57:14 adam
28 * Adopted to use YAZ with C++ support.
30 * Revision 1.5 1996/08/23 11:59:47 adam
31 * Bug fix: infinite look in ir_oid.
33 * Revision 1.4 1996/08/22 13:39:31 adam
34 * More work on explain.
36 * Revision 1.3 1996/08/21 13:32:50 adam
37 * Implemented saveFile method and extended loadFile method to work with it.
39 * Revision 1.2 1996/08/20 09:27:48 adam
40 * More work on explain.
41 * Renamed tkinit.c to tkmain.c. The tcl shell uses the Tcl 7.5 interface
42 * for socket i/o instead of the handcrafted one (for Tcl 7.3 and Tcl7.4).
44 * Revision 1.1 1996/08/16 15:07:43 adam
45 * First work on Explain.
70 typedef char *Z_ElementSetName;
71 typedef Odr_oid *Z_AttributeSetId;
72 typedef char *Z_InternationalString;
73 typedef char *Z_LanguageCode;
76 static int ir_UnitType (IrExpArg *iea,
77 Z_UnitType *p, const char *name, int argi);
78 static int ir_Unit (IrExpArg *iea,
79 Z_Unit *p, const char *name, int argi);
80 static int ir_VariantType (IrExpArg *iea,
81 Z_VariantType *p, const char *name, int argi);
82 static int ir_OmittedAttributeInterpretation (IrExpArg *iea,
83 Z_OmittedAttributeInterpretation *p, const char *name, int argi);
84 static int ir_AttributeTypeDetails (IrExpArg *iea,
85 Z_AttributeTypeDetails *p, const char *name, int argi);
86 static int ir_Specification (IrExpArg *iea,
87 Z_Specification *p, const char *name, int argi);
88 static int ir_RetrievalRecordDetails (IrExpArg *iea,
89 Z_RetrievalRecordDetails *p, const char *name, int argi);
90 static int ir_ElementInfo (IrExpArg *iea,
91 Z_ElementInfo *p, const char *name, int argi);
92 static int ir_InternationalString (IrExpArg *iea,
93 char *p, const char *name, int argi);
94 static int ir_TagSetInfo (IrExpArg *iea,
95 Z_TagSetInfo *p, const char *name, int argi);
96 static int ir_DatabaseName (IrExpArg *iea,
97 char *p, const char *name, int argi);
98 static int ir_AccessInfo (IrExpArg *iea,
99 Z_AccessInfo *p, const char *name, int argi);
100 static int ir_bool (IrExpArg *iea,
101 bool_t *p, const char *name, int argi);
102 static int ir_LanguageCode (IrExpArg *iea,
103 char *p, const char *name, int argi);
104 static int ir_Units (IrExpArg *iea,
105 Z_Units *p, const char *name, int argi);
106 static int ir_SortDetails (IrExpArg *iea,
107 Z_SortDetails *p, const char *name, int argi);
108 static int ir_ElementSetDetails (IrExpArg *iea,
109 Z_ElementSetDetails *p, const char *name, int argi);
110 static int ir_TermListDetails (IrExpArg *iea,
111 Z_TermListDetails *p, const char *name, int argi);
112 static int ir_AttributeValue (IrExpArg *iea,
113 Z_AttributeValue *p, const char *name, int argi);
114 static int ir_ElementDataType (IrExpArg *iea,
115 Z_ElementDataType *p, const char *name, int argi);
116 static int ir_ProximitySupport (IrExpArg *iea,
117 Z_ProximitySupport *p, const char *name, int argi);
118 static int ir_ProcessingInformation (IrExpArg *iea,
119 Z_ProcessingInformation *p, const char *name, int argi);
120 static int ir_AttributeCombinations (IrExpArg *iea,
121 Z_AttributeCombinations *p, const char *name, int argi);
122 static int ir_AttributeSetDetails (IrExpArg *iea,
123 Z_AttributeSetDetails *p, const char *name, int argi);
124 static int ir_DatabaseInfo (IrExpArg *iea,
125 Z_DatabaseInfo *p, const char *name, int argi);
126 static int ir_IconObject (IrExpArg *iea,
127 Z_IconObject *p, const char *name, int argi);
128 static int ir_RpnCapabilities (IrExpArg *iea,
129 Z_RpnCapabilities *p, const char *name, int argi);
130 static int ir_QueryTypeDetails (IrExpArg *iea,
131 Z_QueryTypeDetails *p, const char *name, int argi);
132 static int ir_ValueDescription (IrExpArg *iea,
133 Z_ValueDescription *p, const char *name, int argi);
134 static int ir_AttributeSetInfo (IrExpArg *iea,
135 Z_AttributeSetInfo *p, const char *name, int argi);
136 static int ir_SchemaInfo (IrExpArg *iea,
137 Z_SchemaInfo *p, const char *name, int argi);
138 static int ir_AttributeOccurrence (IrExpArg *iea,
139 Z_AttributeOccurrence *p, const char *name, int argi);
140 static int ir_AttributeCombination (IrExpArg *iea,
141 Z_AttributeCombination *p, const char *name, int argi);
142 static int ir_UnitInfo (IrExpArg *iea,
143 Z_UnitInfo *p, const char *name, int argi);
144 static int ir_VariantClass (IrExpArg *iea,
145 Z_VariantClass *p, const char *name, int argi);
146 static int ir_VariantSetInfo (IrExpArg *iea,
147 Z_VariantSetInfo *p, const char *name, int argi);
148 static int ir_RecordTag (IrExpArg *iea,
149 Z_RecordTag *p, const char *name, int argi);
150 static int ir_TermListInfo (IrExpArg *iea,
151 Z_TermListInfo *p, const char *name, int argi);
152 static int ir_StringOrNumeric (IrExpArg *iea,
153 Z_StringOrNumeric *p, const char *name, int argi);
154 static int ir_CategoryInfo (IrExpArg *iea,
155 Z_CategoryInfo *p, const char *name, int argi);
156 static int ir_ValueRange (IrExpArg *iea,
157 Z_ValueRange *p, const char *name, int argi);
158 static int ir_Term (IrExpArg *iea,
159 Z_Term *p, const char *name, int argi);
160 static int ir_DatabaseList (IrExpArg *iea,
161 Z_DatabaseList *p, const char *name, int argi);
162 static int ir_HumanString (IrExpArg *iea,
163 Z_HumanString *p, const char *name, int argi);
164 static int ir_CommonInfo (IrExpArg *iea,
165 Z_CommonInfo *p, const char *name, int argi);
166 static int ir_NetworkAddress (IrExpArg *iea,
167 Z_NetworkAddress *p, const char *name, int argi);
168 static int ir_Costs (IrExpArg *iea,
169 Z_Costs *p, const char *name, int argi);
170 static int ir_RecordSyntaxInfo (IrExpArg *iea,
171 Z_RecordSyntaxInfo *p, const char *name, int argi);
172 static int ir_OtherInformation (IrExpArg *iea,
173 Z_OtherInformation *p, const char *name, int argi);
174 static int ir_CategoryList (IrExpArg *iea,
175 Z_CategoryList *p, const char *name, int argi);
176 static int ir_VariantValue (IrExpArg *iea,
177 Z_VariantValue *p, const char *name, int argi);
178 static int ir_PerElementDetails (IrExpArg *iea,
179 Z_PerElementDetails *p, const char *name, int argi);
180 static int ir_AttributeDetails (IrExpArg *iea,
181 Z_AttributeDetails *p, const char *name, int argi);
182 static int ir_ExtendedServicesInfo (IrExpArg *iea,
183 Z_ExtendedServicesInfo *p, const char *name, int argi);
184 static int ir_AttributeType (IrExpArg *iea,
185 Z_AttributeType *p, const char *name, int argi);
186 static int ir_IntUnit (IrExpArg *iea,
187 Z_IntUnit *p, const char *name, int argi);
188 static int ir_Charge (IrExpArg *iea,
189 Z_Charge *p, const char *name, int argi);
190 static int ir_PrivateCapabilities (IrExpArg *iea,
191 Z_PrivateCapabilities *p, const char *name, int argi);
192 static int ir_ValueSet (IrExpArg *iea,
193 Z_ValueSet *p, const char *name, int argi);
194 static int ir_AttributeDescription (IrExpArg *iea,
195 Z_AttributeDescription *p, const char *name, int argi);
196 static int ir_Path (IrExpArg *iea,
197 Z_Path *p, const char *name, int argi);
198 static int ir_ContactInfo (IrExpArg *iea,
199 Z_ContactInfo *p, const char *name, int argi);
200 static int ir_SearchKey (IrExpArg *iea,
201 Z_SearchKey *p, const char *name, int argi);
202 static int ir_Iso8777Capabilities (IrExpArg *iea,
203 Z_Iso8777Capabilities *p, const char *name, int argi);
204 static int ir_AccessRestrictions (IrExpArg *iea,
205 Z_AccessRestrictions *p, const char *name, int argi);
206 static int ir_SortKeyDetails (IrExpArg *iea,
207 Z_SortKeyDetails *p, const char *name, int argi);
211 ir_match_start (const char *name, void *p, IrExpArg *iea, int argi)
215 if (argi >= iea->argc)
216 Tcl_AppendResult (iea->interp, name, " ", NULL);
219 if (argi < iea->argc)
221 if (strcmp (name, iea->argv[argi]))
225 Tcl_AppendResult (iea->interp, "{", name, " ", NULL);
227 Tcl_AppendResult (iea->interp, "{", NULL);
232 ir_match_end (const char *name, IrExpArg *iea, int argi)
234 if (argi >= iea->argc)
235 Tcl_AppendResult (iea->interp, "} ", NULL);
240 ir_choice (IrExpArg *iea, IrExpChoice *clist, int *what, void *p,
247 if (clist->id == *what)
248 return (*clist->handle)(iea, p, clist->name, argi);
252 if (argi >= iea->argc)
253 Tcl_AppendResult (iea->interp, "{} ", NULL);
257 static int ir_null (IrExpArg *iea,
258 Odr_null *p, const char *name, int argi)
260 if (!ir_match_start (name, p, iea, ++argi))
262 Tcl_AppendResult (iea->interp, "1 ", NULL);
263 return ir_match_end (name, iea, argi);
266 static int ir_CString (IrExpArg *iea,
267 char *p, const char *name, int argi)
269 if (!ir_match_start (name, p, iea, ++argi))
271 Tcl_AppendElement (iea->interp, p);
272 return ir_match_end (name, iea, argi);
275 static int ir_ElementSetName (IrExpArg *iea,
276 char *p, const char *name, int argi)
278 return ir_CString (iea, p, name, argi);
281 static int ir_DatabaseName (IrExpArg *iea,
282 char *p, const char *name, int argi)
284 return ir_CString (iea, p, name, argi);
287 static int ir_InternationalString (IrExpArg *iea,
288 char *p, const char *name, int argi)
290 return ir_CString (iea, p, name, argi);
293 static int ir_GeneralizedTime (IrExpArg *iea,
294 char *p, const char *name, int argi)
296 return ir_CString (iea, p, name, argi);
299 static int ir_oid (IrExpArg *iea,
300 Odr_oid *p, const char *name, int argi)
303 if (!ir_match_start (name, p, iea, ++argi))
309 sprintf (buf, "%c%d", first, *p);
310 Tcl_AppendResult (iea->interp, buf, NULL);
314 return ir_match_end (name, iea, argi);
317 static int ir_TagTypeMapping (IrExpArg *iea,
318 Z_TagTypeMapping **p, const char *name, int argi)
320 if (!ir_match_start (name, p, iea, ++argi))
323 return ir_match_end (name, iea, argi);
326 static int ir_PrimitiveDataType (IrExpArg *iea,
327 int *p, const char *name, int argi)
329 if (!ir_match_start (name, p, iea, ++argi))
332 return ir_match_end (name, iea, argi);
335 static int ir_octet (IrExpArg *iea,
336 Odr_oct *p, const char *name, int argi)
338 if (!ir_match_start (name, p, iea, ++argi))
341 return ir_match_end (name, iea, argi);
344 static int ir_choice_nop (IrExpArg *iea,
345 void *p, const char *name, int argi)
347 if (argi >= iea->argc)
348 Tcl_AppendResult (iea->interp, name, " ", NULL);
352 static int ir_bool (IrExpArg *iea,
353 bool_t *p, const char *name, int argi)
355 if (!ir_match_start (name, p, iea, ++argi))
357 Tcl_AppendResult (iea->interp, *p ? "1" : "0", NULL);
358 return ir_match_end (name, iea, argi);
361 static int ir_integer (IrExpArg *iea,
362 int *p, const char *name, int argi)
365 if (!ir_match_start (name, p, iea, ++argi))
367 sprintf (buf, "%d", *p);
368 Tcl_AppendResult (iea->interp, buf, NULL);
369 return ir_match_end (name, iea, argi);
372 static int ir_LanguageCode (IrExpArg *iea,
373 char *p, const char *name, int argi)
375 return ir_CString (iea, p, name, argi);
378 static int ir_External (IrExpArg *iea,
379 Z_External *p, const char *name, int argi)
381 if (!ir_match_start (name, p, iea, ++argi))
384 return ir_match_end (name, iea, argi);
387 static int ir_sequence (int (*fh)(), IrExpArg *iea, void *p, int *num,
388 const char *name, int argi)
390 void **pp = (void **) p;
393 if (!ir_match_start (name, p, iea, ++argi))
395 for (i = 0; i < *num; i++)
396 (*fh)(iea, pp[i], "", argi);
397 return ir_match_end (name, iea, argi);
400 static int ir_Term (IrExpArg *iea,
401 Z_Term *p, const char *name, int argi)
403 static IrExpChoice arm [] = {
404 { "general", Z_Term_general,
406 { "numeric", Z_Term_numeric,
408 { "characterString", Z_Term_characterString,
409 ir_InternationalString },
412 { "dateTime", Z_Term_dateTime,
413 ir_GeneralizedTime },
414 { "external", Z_Term_external,
416 { "null", Z_Term_null,
420 if (!ir_match_start (name, p, iea, ++argi))
423 ir_choice (iea, arm, &p->which, p->u.general, argi);
424 return ir_match_end (name, iea, argi);
427 static int ir_TargetInfo (IrExpArg *iea,
428 Z_TargetInfo *p, const char *name, int argi)
430 if (!ir_match_start (name, p, iea, ++argi))
432 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
433 ir_InternationalString (iea, p->name, "name", argi);
434 ir_HumanString (iea, p->recentNews, "recentNews", argi);
435 ir_IconObject (iea, p->icon, "icon", argi);
436 ir_bool (iea, p->namedResultSets, "namedResultSets", argi);
437 ir_bool (iea, p->multipleDBsearch, "multipleDBsearch", argi);
438 ir_integer (iea, p->maxResultSets, "maxResultSets", argi);
439 ir_integer (iea, p->maxResultSize, "maxResultSize", argi);
440 ir_integer (iea, p->maxTerms, "maxTerms", argi);
441 ir_IntUnit (iea, p->timeoutInterval, "timeoutInterval", argi);
442 ir_HumanString (iea, p->welcomeMessage, "welcomeMessage", argi);
443 ir_ContactInfo (iea, p->contactInfo, "contactInfo", argi);
444 ir_HumanString (iea, p->description, "description", argi);
445 ir_sequence (ir_InternationalString, iea, p->nicknames,
446 &p->num_nicknames, "nicknames", argi);
447 ir_HumanString (iea, p->usageRest, "usageRest", argi);
448 ir_HumanString (iea, p->paymentAddr, "paymentAddr", argi);
449 ir_HumanString (iea, p->hours, "hours", argi);
450 ir_sequence (ir_DatabaseList, iea, p->dbCombinations,
451 &p->num_dbCombinations, "dbCombinations", argi);
452 ir_sequence (ir_NetworkAddress, iea, p->addresses,
453 &p->num_addresses, "addresses", argi);
454 ir_sequence (ir_InternationalString, iea, p->languages,
455 &p->num_languages, "languages", argi);
456 ir_AccessInfo (iea, p->commonAccessInfo, "commonAccessInfo", argi);
457 return ir_match_end (name, iea, argi);
460 static int ir_DatabaseInfo (IrExpArg *iea,
461 Z_DatabaseInfo *p, const char *name, int argi)
463 static IrExpChoice arm_recordCount [] = {
464 { "actualNumber", Z_DatabaseInfo_actualNumber,
466 { "approxNumber", Z_DatabaseInfo_approxNumber,
470 if (!ir_match_start (name, p, iea, ++argi))
473 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
474 ir_DatabaseName (iea, p->name, "name", argi);
475 ir_null (iea, p->explainDatabase, "explainDatabase", argi);
476 ir_sequence (ir_DatabaseName, iea, p->nicknames,
477 &p->num_nicknames, "nicknames", argi);
478 ir_IconObject (iea, p->icon, "icon", argi);
479 ir_bool (iea, p->userFee, "userFee", argi);
480 ir_bool (iea, p->available, "available", argi);
481 ir_HumanString (iea, p->titleString, "titleString", argi);
482 ir_sequence (ir_HumanString, iea, p->keywords,
483 &p->num_keywords, "keywords", argi);
484 ir_HumanString (iea, p->description, "description", argi);
485 ir_DatabaseList (iea, p->associatedDbs, "associatedDbs", argi);
486 ir_DatabaseList (iea, p->subDbs, "subDbs", argi);
487 ir_HumanString (iea, p->disclaimers, "disclaimers", argi);
488 ir_HumanString (iea, p->news, "news", argi);
490 ir_choice (iea, arm_recordCount, &p->which,
491 p->u.actualNumber, argi);
492 ir_HumanString (iea, p->defaultOrder, "defaultOrder", argi);
493 ir_integer (iea, p->avRecordSize, "avRecordSize", argi);
494 ir_integer (iea, p->maxRecordSize, "maxRecordSize", argi);
495 ir_HumanString (iea, p->hours, "hours", argi);
496 ir_HumanString (iea, p->bestTime, "bestTime", argi);
497 ir_GeneralizedTime (iea, p->lastUpdate, "lastUpdate", argi);
498 ir_IntUnit (iea, p->updateInterval, "updateInterval", argi);
499 ir_HumanString (iea, p->coverage, "coverage", argi);
500 ir_bool (iea, p->proprietary, "proprietary", argi);
501 ir_HumanString (iea, p->copyrightText, "copyrightText", argi);
502 ir_HumanString (iea, p->copyrightNotice, "copyrightNotice", argi);
503 ir_ContactInfo (iea, p->producerContactInfo, "producerContactInfo", argi);
504 ir_ContactInfo (iea, p->supplierContactInfo, "supplierContactInfo", argi);
505 ir_ContactInfo (iea, p->submissionContactInfo, "submissionContactInfo", argi);
506 ir_AccessInfo (iea, p->accessInfo, "accessInfo", argi);
507 return ir_match_end (name, iea, argi);
510 static int ir_SchemaInfo (IrExpArg *iea,
511 Z_SchemaInfo *p, const char *name, int argi)
513 if (!ir_match_start (name, p, iea, ++argi))
515 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
516 ir_oid (iea, p->schema, "schema", argi);
517 ir_InternationalString (iea, p->name, "name", argi);
518 ir_HumanString (iea, p->description, "description", argi);
520 ir_sequence (ir_TagTypeMapping, iea, p->tagTypeMapping,
521 &p->num_tagTypeMapping, "tagTypeMapping", argi);
522 ir_sequence (ir_ElementInfo, iea, p->recordStructure,
523 &p->num_recordStructure, "recordStructure", argi);
524 return ir_match_end (name, iea, argi);
527 static int ir_ElementDataTypePrimitive (IrExpArg *iea,
528 int *p, const char *name, int argi)
530 static IrExpChoice arm[] = {
531 {"octetString", Z_PrimitiveDataType_octetString, ir_choice_nop },
532 {"numeric", Z_PrimitiveDataType_numeric, ir_choice_nop },
535 if (!ir_match_start (name, p, iea, ++argi))
537 ir_choice (iea, arm, p, odr_nullval(), argi);
538 return ir_match_end (name, iea, argi);
541 static int ir_ElementInfo (IrExpArg *iea,
542 Z_ElementInfo *p, const char *name, int argi)
544 if (!ir_match_start (name, p, iea, ++argi))
546 ir_InternationalString (iea, p->elementName, "elementName", argi);
547 ir_Path (iea, p->elementTagPath, "elementTagPath", argi);
548 ir_ElementDataType (iea, p->dataType, "dataType", argi);
549 ir_bool (iea, p->required, "required", argi);
550 ir_bool (iea, p->repeatable, "repeatable", argi);
551 ir_HumanString (iea, p->description, "description", argi);
552 return ir_match_end (name, iea, argi);
555 static int ir_ElementInfoList (IrExpArg *iea,
556 Z_ElementInfoList *p, const char *name, int argi)
558 if (!ir_match_start (name, p, iea, ++argi))
561 ir_sequence (ir_ElementInfo, iea, p->elements,
562 &p->num, "elements", argi);
564 ir_sequence (ir_ElementInfo, iea, p->list,
565 &p->num, "elements", argi);
567 return ir_match_end (name, iea, argi);
570 static int ir_ElementDataType (IrExpArg *iea,
571 Z_ElementDataType *p, const char *name, int argi)
573 static IrExpChoice arm[] = {
574 { "primitive", Z_ElementDataType_primitive,
575 ir_ElementDataTypePrimitive },
576 { "structured", Z_ElementDataType_structured,
577 ir_ElementInfoList },
579 if (!ir_match_start (name, p, iea, ++argi))
581 ir_choice (iea, arm, &p->which, p->u.primitive, argi);
582 return ir_match_end (name, iea, argi);
585 static int ir_PathUnit (IrExpArg *iea,
586 Z_PathUnit *p, const char *name, int argi)
588 if (!ir_match_start (name, p, iea, ++argi))
590 ir_integer (iea, p->tagType, "tagType", argi);
591 ir_StringOrNumeric (iea, p->tagValue, "tagValue", argi);
592 return ir_match_end (name, iea, argi);
595 static int ir_Path (IrExpArg *iea,
596 Z_Path *p, const char *name, int argi)
598 if (!ir_match_start (name, p, iea, ++argi))
601 ir_sequence (ir_PathUnit, iea, p->elements,
602 &p->num, "elements", argi);
604 ir_sequence (ir_PathUnit, iea, p->list,
605 &p->num, "elements", argi);
607 return ir_match_end (name, iea, argi);
611 static int ir_TagSetElements (IrExpArg *iea,
612 Z_TagSetElements *p, const char *name, int argi)
614 static int ir_TagSetElements (IrExpArg *iea,
615 Z_TagSetInfoElements *p, const char *name, int argi)
618 if (!ir_match_start (name, p, iea, ++argi))
620 ir_InternationalString (iea, p->elementname, "elementname", argi);
621 ir_sequence (ir_InternationalString, iea, p->nicknames,
622 &p->num_nicknames, "nicknames", argi);
623 ir_StringOrNumeric (iea, p->elementTag, "elementTag", argi);
624 ir_HumanString (iea, p->description, "description", argi);
625 ir_PrimitiveDataType (iea, p->dataType, "dataType", argi);
626 ir_OtherInformation (iea, p->otherTagInfo, "otherTagInfo", argi);
627 return ir_match_end (name, iea, argi);
630 static int ir_TagSetInfo (IrExpArg *iea,
631 Z_TagSetInfo *p, const char *name, int argi)
633 if (!ir_match_start (name, p, iea, ++argi))
635 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
636 ir_oid (iea, p->tagSet, "tagSet", argi);
637 ir_InternationalString (iea, p->name, "name", argi);
638 ir_HumanString (iea, p->description, "description", argi);
639 ir_sequence (ir_TagSetElements, iea, p->elements,
640 &p->num_elements, "elements", argi);
641 return ir_match_end (name, iea, argi);
644 static int ir_RecordSyntaxInfo (IrExpArg *iea,
645 Z_RecordSyntaxInfo *p, const char *name, int argi)
647 if (!ir_match_start (name, p, iea, ++argi))
649 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
650 ir_oid (iea, p->recordSyntax, "recordSyntax", argi);
651 ir_InternationalString (iea, p->name, "name", argi);
652 ir_sequence (ir_oid, iea, p->transferSyntaxes,
653 &p->num_transferSyntaxes, "transferSyntaxes", argi);
654 ir_HumanString (iea, p->description, "description", argi);
655 ir_InternationalString (iea, p->asn1Module, "asn1Module", argi);
656 ir_sequence (ir_ElementInfo, iea, p->abstractStructure,
657 &p->num_abstractStructure, "abstractStructure", argi);
658 return ir_match_end (name, iea, argi);
661 static int ir_AttributeType (IrExpArg *iea,
662 Z_AttributeType *p, const char *name, int argi)
664 if (!ir_match_start (name, p, iea, ++argi))
666 ir_InternationalString (iea, p->name, "name", argi);
667 ir_HumanString (iea, p->description, "description", argi);
668 ir_integer (iea, p->attributeType, "attributeType", argi);
669 ir_sequence (ir_AttributeDescription, iea, p->attributeValues,
670 &p->num_attributeValues, "attributeValues", argi);
671 return ir_match_end (name, iea, argi);
674 static int ir_AttributeSetInfo (IrExpArg *iea,
675 Z_AttributeSetInfo *p, const char *name, int argi)
677 if (!ir_match_start (name, p, iea, ++argi))
679 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
680 ir_oid (iea, p->attributeSet, "attributeSet", argi);
681 ir_InternationalString (iea, p->name, "name", argi);
682 ir_sequence (ir_AttributeType, iea, p->attributes,
683 &p->num_attributes, "attributes", argi);
684 ir_HumanString (iea, p->description, "description", argi);
685 return ir_match_end (name, iea, argi);
688 static int ir_AttributeDescription (IrExpArg *iea,
689 Z_AttributeDescription *p, const char *name, int argi)
691 if (!ir_match_start (name, p, iea, ++argi))
693 ir_InternationalString (iea, p->name, "name", argi);
694 ir_HumanString (iea, p->description, "description", argi);
695 ir_StringOrNumeric (iea, p->attributeValue, "attributeValue", argi);
696 ir_sequence (ir_StringOrNumeric,iea, p->equivalentAttributes,
697 &p->num_equivalentAttributes, "equivalentAttributes", argi);
698 return ir_match_end (name, iea, argi);
701 static int ir_TermListElement (IrExpArg *iea,
702 Z_TermListElement *p, const char *name, int argi)
704 static IrExpChoice searchCostArm [] = {
705 { "optimized", Z_TermListElement_optimized, ir_choice_nop },
706 { "normal", Z_TermListElement_normal, ir_choice_nop },
707 { "expensive", Z_TermListElement_expensive, ir_choice_nop },
708 { "filter", Z_TermListElement_filter, ir_choice_nop },
710 ir_InternationalString (iea, p->name, "name", argi);
711 ir_HumanString (iea, p->title, "title", argi);
713 ir_choice (iea, searchCostArm, p->searchCost, odr_nullval(), argi);
715 ir_bool (iea, p->scanable, "scanable", argi);
716 ir_sequence (ir_InternationalString, iea, p->broader,
717 &p->num_broader, "broader", argi);
718 ir_sequence (ir_InternationalString, iea, p->narrower,
719 &p->num_narrower, "narrower", argi);
720 return ir_match_end (name, iea, argi);
723 static int ir_TermListInfo (IrExpArg *iea,
724 Z_TermListInfo *p, const char *name, int argi)
726 if (!ir_match_start (name, p, iea, ++argi))
728 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
729 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
730 ir_sequence (ir_TermListElement, iea, p->termLists,
731 &p->num_termLists, "termLists", argi);
732 return ir_match_end (name, iea, argi);
735 static int ir_ExtendedServicesInfo (IrExpArg *iea,
736 Z_ExtendedServicesInfo *p, const char *name, int argi)
738 static IrExpChoice waitActionArm [] = {
739 { "waitSupported", Z_ExtendedServicesInfo_waitSupported,
741 { "waitAlways", Z_ExtendedServicesInfo_waitAlways,
743 { "waitNotSupported", Z_ExtendedServicesInfo_waitNotSupported,
745 { "depends", Z_ExtendedServicesInfo_depends,
747 { "notSaying", Z_ExtendedServicesInfo_notSaying,
751 ir_InternationalString (iea, p->name, "name", argi);
752 if (!ir_match_start (name, p, iea, ++argi))
754 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
755 ir_oid (iea, p->type, "type", argi);
756 ir_InternationalString (iea, p->name, "name", argi);
757 ir_bool (iea, p->privateType, "privateType", argi);
758 ir_bool (iea, p->restrictionsApply, "restrictionsApply", argi);
759 ir_bool (iea, p->feeApply, "feeApply", argi);
760 ir_bool (iea, p->available, "available", argi);
761 ir_bool (iea, p->retentionSupported, "retentionSupported", argi);
763 ir_choice (iea, waitActionArm, p->waitAction, odr_nullval(), argi);
765 ir_HumanString (iea, p->description, "description", argi);
766 ir_External (iea, p->specificExplain, "specificExplain", argi);
767 ir_InternationalString (iea, p->esASN, "esASN", argi);
768 return ir_match_end (name, iea, argi);
771 static int ir_AttributeDetails (IrExpArg *iea,
772 Z_AttributeDetails *p, const char *name, int argi)
774 if (!ir_match_start (name, p, iea, ++argi))
776 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
777 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
778 ir_sequence (ir_AttributeSetDetails, iea, p->attributesBySet,
779 &p->num_attributesBySet, "attributesBySet", argi);
780 ir_AttributeCombinations (iea, p->attributeCombinations,
781 "attributeCombinations", argi);
782 return ir_match_end (name, iea, argi);
785 static int ir_AttributeSetDetails (IrExpArg *iea,
786 Z_AttributeSetDetails *p, const char *name, int argi)
788 if (!ir_match_start (name, p, iea, ++argi))
790 ir_oid (iea, p->attributeSet, "attributeSet", argi);
791 ir_sequence (ir_AttributeTypeDetails, iea, p->attributesByType,
792 &p->num_attributesByType, "attributesByType", argi);
793 return ir_match_end (name, iea, argi);
796 static int ir_AttributeTypeDetails (IrExpArg *iea,
797 Z_AttributeTypeDetails *p, const char *name, int argi)
799 if (!ir_match_start (name, p, iea, ++argi))
801 ir_integer (iea, p->attributeType, "attributeType", argi);
802 ir_OmittedAttributeInterpretation (iea, p->defaultIfOmitted,
803 "defaultIfOmitted", argi);
804 ir_sequence (ir_AttributeValue, iea, p->attributeValues,
805 &p->num_attributeValues, "attributeValues", argi);
806 return ir_match_end (name, iea, argi);
809 static int ir_OmittedAttributeInterpretation (IrExpArg *iea,
810 Z_OmittedAttributeInterpretation *p, const char *name, int argi)
812 if (!ir_match_start (name, p, iea, ++argi))
814 ir_StringOrNumeric (iea, p->defaultValue, "defaultValue", argi);
815 ir_HumanString (iea, p->defaultDescription, "defaultDescription", argi);
816 return ir_match_end (name, iea, argi);
819 static int ir_EScanInfo (IrExpArg *iea,
820 Z_EScanInfo *p, const char *name, int argi)
822 if (!ir_match_start (name, p, iea, ++argi))
824 ir_integer (iea, p->maxStepSize, "maxStepSize", argi);
825 ir_HumanString (iea, p->collatingSequence, "collatingSequence", argi);
826 ir_bool (iea, p->increasing, "increasing", argi);
827 return ir_match_end (name, iea, argi);
830 static int ir_TermListDetails (IrExpArg *iea,
831 Z_TermListDetails *p, const char *name, int argi)
833 if (!ir_match_start (name, p, iea, ++argi))
835 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
836 ir_InternationalString (iea, p->termListName, "termListName", argi);
837 ir_HumanString (iea, p->description, "description", argi);
838 ir_AttributeCombinations (iea, p->attributes, "attributes", argi);
840 ir_EScanInfo (iea, p->scanInfo, "scanInfo", argi);
842 ir_integer (iea, p->estNumberTerms, "estNumberTerms", argi);
843 ir_sequence (ir_Term, iea, p->sampleTerms,
844 &p->num_sampleTerms, "sampleTerms", argi);
845 return ir_match_end (name, iea, argi);
848 static int ir_ElementSetDetails (IrExpArg *iea,
849 Z_ElementSetDetails *p, const char *name, int argi)
851 if (!ir_match_start (name, p, iea, ++argi))
853 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
854 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
855 ir_ElementSetName (iea, p->elementSetName, "elementSetName", argi);
856 ir_oid (iea, p->recordSyntax, "recordSyntax", argi);
857 ir_oid (iea, p->schema, "schema", argi);
858 ir_HumanString (iea, p->description, "description", argi);
859 ir_sequence (ir_PerElementDetails, iea, p->detailsPerElement,
860 &p->num_detailsPerElement, "detailsPerElement", argi);
861 return ir_match_end (name, iea, argi);
864 static int ir_RetrievalRecordDetails (IrExpArg *iea,
865 Z_RetrievalRecordDetails *p, const char *name, int argi)
867 if (!ir_match_start (name, p, iea, ++argi))
869 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
870 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
871 ir_oid (iea, p->schema, "schema", argi);
872 ir_oid (iea, p->recordSyntax, "recordSyntax", argi);
873 ir_HumanString (iea, p->description, "description", argi);
874 ir_sequence (ir_PerElementDetails, iea, p->detailsPerElement,
875 &p->num_detailsPerElement, "detailsPerElement", argi);
876 return ir_match_end (name, iea, argi);
879 static int ir_PerElementDetails (IrExpArg *iea,
880 Z_PerElementDetails *p, const char *name, int argi)
882 if (!ir_match_start (name, p, iea, ++argi))
884 ir_InternationalString (iea, p->name, "name", argi);
885 ir_RecordTag (iea, p->recordTag, "recordTag", argi);
886 ir_sequence (ir_Path, iea, p->schemaTags,
887 &p->num_schemaTags, "schemaTags", argi);
888 ir_integer (iea, p->maxSize, "maxSize", argi);
889 ir_integer (iea, p->minSize, "minSize", argi);
890 ir_integer (iea, p->avgSize, "avgSize", argi);
891 ir_integer (iea, p->fixedSize, "fixedSize", argi);
892 ir_bool (iea, p->repeatable, "repeatable", argi);
893 ir_bool (iea, p->required, "required", argi);
894 ir_HumanString (iea, p->description, "description", argi);
895 ir_HumanString (iea, p->contents, "contents", argi);
896 ir_HumanString (iea, p->billingInfo, "billingInfo", argi);
897 ir_HumanString (iea, p->restrictions, "restrictions", argi);
898 ir_sequence (ir_InternationalString, iea, p->alternateNames,
899 &p->num_alternateNames, "alternateNames", argi);
900 ir_sequence (ir_InternationalString, iea, p->genericNames,
901 &p->num_genericNames, "genericNames", argi);
902 ir_AttributeCombinations (iea, p->searchAccess, "searchAccess", argi);
903 return ir_match_end (name, iea, argi);
906 static int ir_RecordTag (IrExpArg *iea,
907 Z_RecordTag *p, const char *name, int argi)
909 if (!ir_match_start (name, p, iea, ++argi))
911 ir_StringOrNumeric (iea, p->qualifier, "qualifier", argi);
912 ir_StringOrNumeric (iea, p->tagValue, "tagValue", argi);
913 return ir_match_end (name, iea, argi);
916 static int ir_SortDetails (IrExpArg *iea,
917 Z_SortDetails *p, const char *name, int argi)
919 if (!ir_match_start (name, p, iea, ++argi))
921 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
922 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
923 ir_sequence (ir_SortKeyDetails, iea, p->sortKeys,
924 &p->num_sortKeys, "sortKeys", argi);
925 return ir_match_end (name, iea, argi);
928 static int ir_SortKeyDetails (IrExpArg *iea,
929 Z_SortKeyDetails *p, const char *name, int argi)
931 static IrExpChoice sortArm [] = {
932 { "always", Z_SortKeyDetails_always,
934 { "never", Z_SortKeyDetails_never,
936 { "defaultYes", Z_SortKeyDetails_default_yes,
938 { "defaultNo", Z_SortKeyDetails_default_no,
942 static IrExpChoice sortArm2 [] = {
943 { "character", Z_SortKeyDetails_character,
945 { "numeric", Z_SortKeyDetails_numeric,
947 { "structured", Z_SortKeyDetails_structured,
951 if (!ir_match_start (name, p, iea, ++argi))
953 ir_HumanString (iea, p->description, "description", argi);
954 ir_sequence (ir_Specification, iea, p->elementSpecifications,
955 &p->num_elementSpecifications, "elementSpecifications", argi);
956 ir_AttributeCombinations (iea, p->attributeSpecifications,
957 "attributeSpecifications", argi);
958 ir_choice (iea, sortArm2, &p->which, p->u.character, argi);
960 if (p->caseSensitivity)
961 ir_choice (iea, sortArm, p->caseSensitivity, odr_nullval(), argi);
963 return ir_match_end (name, iea, argi);
966 static int ir_ProcessingInformation (IrExpArg *iea,
967 Z_ProcessingInformation *p, const char *name, int argi)
969 IrExpChoice arm[] = {
970 { "access", Z_ProcessingInformation_access,
972 { "search", Z_ProcessingInformation_search,
974 { "retrieval", Z_ProcessingInformation_retrieval,
976 { "recordPresentation", Z_ProcessingInformation_record_presentation,
978 { "recordHandling", Z_ProcessingInformation_record_handling,
981 if (!ir_match_start (name, p, iea, ++argi))
983 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
984 ir_DatabaseName (iea, p->databaseName, "databaseName", argi);
986 ir_choice (iea, arm, p->processingContext, odr_nullval(), argi);
987 ir_InternationalString (iea, p->name, "name", argi);
988 ir_oid (iea, p->oid, "oid", argi);
989 ir_HumanString (iea, p->description, "description", argi);
990 ir_External (iea, p->instructions, "instructions", argi);
991 return ir_match_end (name, iea, argi);
994 static int ir_VariantSetInfo (IrExpArg *iea,
995 Z_VariantSetInfo *p, const char *name, int argi)
997 if (!ir_match_start (name, p, iea, ++argi))
999 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
1000 ir_oid (iea, p->variantSet, "variantSet", argi);
1001 ir_InternationalString (iea, p->name, "name", argi);
1002 ir_sequence (ir_VariantClass, iea, p->variants,
1003 &p->num_variants, "variants", argi);
1004 return ir_match_end (name, iea, argi);
1007 static int ir_VariantClass (IrExpArg *iea,
1008 Z_VariantClass *p, const char *name, int argi)
1010 if (!ir_match_start (name, p, iea, ++argi))
1012 ir_InternationalString (iea, p->name, "name", argi);
1013 ir_HumanString (iea, p->description, "description", argi);
1014 ir_integer (iea, p->variantClass, "variantClass", argi);
1015 ir_sequence (ir_VariantType, iea, p->variantTypes,
1016 &p->num_variantTypes, "variantTypes", argi);
1017 return ir_match_end (name, iea, argi);
1020 static int ir_VariantType (IrExpArg *iea,
1021 Z_VariantType *p, const char *name, int argi)
1023 if (!ir_match_start (name, p, iea, ++argi))
1025 ir_InternationalString (iea, p->name, "name", argi);
1026 ir_HumanString (iea, p->description, "description", argi);
1027 ir_integer (iea, p->variantType, "variantType", argi);
1028 ir_VariantValue (iea, p->variantValue, "variantValue", argi);
1029 return ir_match_end (name, iea, argi);
1032 static int ir_ValueSetEnumerated (IrExpArg *iea,
1033 Z_ValueSetEnumerated *p, const char *name, int argi)
1035 if (!ir_match_start (name, p, iea, ++argi))
1037 ir_sequence (ir_ValueDescription, iea, p->elements,
1038 &p->num, "enumerated", argi);
1039 return ir_match_end (name, iea, argi);
1042 static int ir_ValueSet (IrExpArg *iea,
1043 Z_ValueSet *p, const char *name, int argi)
1045 IrExpChoice arm [] = {
1046 { "range", Z_ValueSet_range, ir_ValueRange },
1047 { "enumerated", Z_ValueSet_enumerated, ir_ValueSetEnumerated },
1049 if (!ir_match_start (name, p, iea, ++argi))
1051 ir_choice (iea, arm, &p->which, p->u.range, argi);
1052 return ir_match_end (name, iea, argi);
1055 static int ir_VariantValue (IrExpArg *iea,
1056 Z_VariantValue *p, const char *name, int argi)
1058 if (!ir_match_start (name, p, iea, ++argi))
1060 ir_PrimitiveDataType (iea, p->dataType, "dataType", argi);
1062 ir_ValueSet (iea, p->values, "values", argi);
1063 return ir_match_end (name, iea, argi);
1066 static int ir_ValueRange (IrExpArg *iea,
1067 Z_ValueRange *p, const char *name, int argi)
1069 if (!ir_match_start (name, p, iea, ++argi))
1071 ir_ValueDescription (iea, p->lower, "lower", argi);
1072 ir_ValueDescription (iea, p->upper, "upper", argi);
1073 return ir_match_end (name, iea, argi);
1076 static int ir_ValueDescription (IrExpArg *iea,
1077 Z_ValueDescription *p, const char *name, int argi)
1079 static IrExpChoice arm [] = {
1080 { "integer", Z_ValueDescription_integer, ir_integer },
1081 { "string", Z_ValueDescription_string, ir_InternationalString},
1082 { "octets", Z_ValueDescription_octets, ir_octet},
1083 { "oid", Z_ValueDescription_oid, ir_oid},
1084 { "unit", Z_ValueDescription_unit, ir_Unit},
1085 { "valueAndUnit", Z_ValueDescription_valueAndUnit, ir_IntUnit},
1088 if (!ir_match_start (name, p, iea, ++argi))
1090 ir_choice (iea, arm, &p->which, p->u.integer, argi);
1091 return ir_match_end (name, iea, argi);
1094 static int ir_UnitInfo (IrExpArg *iea,
1095 Z_UnitInfo *p, const char *name, int argi)
1097 if (!ir_match_start (name, p, iea, ++argi))
1099 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
1100 ir_InternationalString (iea, p->unitSystem, "unitSystem", argi);
1101 ir_HumanString (iea, p->description, "description", argi);
1102 ir_sequence (ir_UnitType, iea, p->units,
1103 &p->num_units, "units", argi);
1104 return ir_match_end (name, iea, argi);
1107 static int ir_UnitType (IrExpArg *iea,
1108 Z_UnitType *p, const char *name, int argi)
1110 if (!ir_match_start (name, p, iea, ++argi))
1112 ir_InternationalString (iea, p->name, "name", argi);
1113 ir_HumanString (iea, p->description, "description", argi);
1114 ir_StringOrNumeric (iea, p->unitType, "unitType", argi);
1115 ir_sequence (ir_Units, iea, p->units, &p->num_units, "units", argi);
1116 return ir_match_end (name, iea, argi);
1119 static int ir_Units (IrExpArg *iea,
1120 Z_Units *p, const char *name, int argi)
1122 if (!ir_match_start (name, p, iea, ++argi))
1124 ir_InternationalString (iea, p->name, "name", argi);
1125 ir_HumanString (iea, p->description, "description", argi);
1126 ir_StringOrNumeric (iea, p->unit, "unit", argi);
1127 return ir_match_end (name, iea, argi);
1130 static int ir_CategoryList (IrExpArg *iea,
1131 Z_CategoryList *p, const char *name, int argi)
1133 if (!ir_match_start (name, p, iea, ++argi))
1135 ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi);
1136 ir_sequence (ir_CategoryInfo, iea, p->categories,
1137 &p->num_categories, "categories", argi);
1138 return ir_match_end (name, iea, argi);
1141 static int ir_CategoryInfo (IrExpArg *iea,
1142 Z_CategoryInfo *p, const char *name, int argi)
1144 if (!ir_match_start (name, p, iea, ++argi))
1146 ir_InternationalString (iea, p->category, "category", argi);
1147 ir_InternationalString (iea, p->originalCategory, "originalCategory", argi);
1148 ir_HumanString (iea, p->description, "description", argi);
1149 ir_InternationalString (iea, p->asn1Module, "asn1Module", argi);
1150 return ir_match_end (name, iea, argi);
1153 static int ir_CommonInfo (IrExpArg *iea,
1154 Z_CommonInfo *p, const char *name, int argi)
1156 if (!ir_match_start (name, p, iea, ++argi))
1158 ir_GeneralizedTime (iea, p->dateAdded, "dateAdded", argi);
1159 ir_GeneralizedTime (iea, p->dateChanged, "dateChanged", argi);
1160 ir_GeneralizedTime (iea, p->expiry, "expiry", argi);
1161 ir_LanguageCode (iea, p->humanStringLanguage, "humanString-Language",
1163 ir_OtherInformation (iea, p->otherInfo, "otherInfo", argi);
1164 return ir_match_end (name, iea, argi);
1167 static int ir_HumanStringUnit (IrExpArg *iea,
1168 Z_HumanStringUnit *p, const char *name, int argi)
1170 if (!ir_match_start (name, p, iea, ++argi))
1172 ir_LanguageCode (iea, p->language, "language", argi);
1173 ir_InternationalString (iea, p->text, "text", argi);
1174 return ir_match_end (name, iea, argi);
1177 static int ir_HumanString (IrExpArg *iea,
1178 Z_HumanString *p, const char *name, int argi)
1180 if (!ir_match_start (name, p, iea, ++argi))
1182 ir_sequence (ir_HumanStringUnit, iea, p->strings,
1183 &p->num_strings, "strings", argi);
1184 return ir_match_end (name, iea, argi);
1187 static int ir_IconObjectUnit (IrExpArg *iea,
1188 Z_IconObjectUnit *p, const char *name, int argi)
1190 static IrExpChoice arm [] = {
1191 { "ianaType", Z_IconObjectUnit_ianaType, ir_InternationalString },
1192 { "z3950type", Z_IconObjectUnit_z3950type, ir_InternationalString },
1193 { "otherType", Z_IconObjectUnit_otherType, ir_InternationalString },
1195 if (!ir_match_start (name, p, iea, ++argi))
1197 ir_choice (iea, arm, &p->which, odr_nullval(), argi);
1198 ir_octet (iea, p->content, "content", argi);
1199 return ir_match_end (name, iea, argi);
1202 static int ir_IconObject (IrExpArg *iea,
1203 Z_IconObject *p, const char *name, int argi)
1205 if (!ir_match_start (name, p, iea, ++argi))
1207 ir_sequence (ir_IconObjectUnit, iea, p->elements,
1208 &p->num, "iconUnits", argi);
1209 return ir_match_end (name, iea, argi);
1212 static int ir_ContactInfo (IrExpArg *iea,
1213 Z_ContactInfo *p, const char *name, int argi)
1215 if (!ir_match_start (name, p, iea, ++argi))
1217 ir_InternationalString (iea, p->name, "name", argi);
1218 ir_HumanString (iea, p->description, "description", argi);
1219 ir_HumanString (iea, p->address, "address", argi);
1220 ir_InternationalString (iea, p->email, "email", argi);
1221 ir_InternationalString (iea, p->phone, "phone", argi);
1222 return ir_match_end (name, iea, argi);
1225 static int ir_NetworkAddressIA (IrExpArg *iea,
1226 Z_NetworkAddressIA *p, const char *name, int argi)
1228 if (!ir_match_start (name, p, iea, ++argi))
1230 ir_InternationalString (iea, p->hostAddress, "hostAddress", argi);
1231 ir_integer (iea, p->port, "port", argi);
1232 return ir_match_end (name, iea, argi);
1235 static int ir_NetworkAddressOPA (IrExpArg *iea,
1236 Z_NetworkAddressOPA *p, const char *name, int argi)
1238 if (!ir_match_start (name, p, iea, ++argi))
1240 ir_InternationalString (iea, p->pSel, "pSel", argi);
1241 ir_InternationalString (iea, p->sSel, "sSel", argi);
1242 ir_InternationalString (iea, p->tSel, "tSel", argi);
1243 ir_InternationalString (iea, p->nSap, "nSap", argi);
1244 return ir_match_end (name, iea, argi);
1247 static int ir_NetworkAddressOther (IrExpArg *iea,
1248 Z_NetworkAddressOther *p, const char *name, int argi)
1250 if (!ir_match_start (name, p, iea, ++argi))
1252 ir_InternationalString (iea, p->type, "type", argi);
1253 ir_InternationalString (iea, p->address, "address", argi);
1254 return ir_match_end (name, iea, argi);
1257 static int ir_NetworkAddress (IrExpArg *iea,
1258 Z_NetworkAddress *p, const char *name, int argi)
1260 IrExpChoice arm [] = {
1261 { "iA", Z_NetworkAddress_iA, ir_NetworkAddressIA },
1262 { "oPA", Z_NetworkAddress_oPA, ir_NetworkAddressOPA },
1263 { "other", Z_NetworkAddress_other, ir_NetworkAddressOther },
1265 if (!ir_match_start (name, p, iea, ++argi))
1267 ir_choice (iea, arm, &p->which, p->u.internetAddress, argi);
1268 return ir_match_end (name, iea, argi);
1271 static int ir_AccessInfo (IrExpArg *iea,
1272 Z_AccessInfo *p, const char *name, int argi)
1274 if (!ir_match_start (name, p, iea, ++argi))
1276 ir_sequence (ir_QueryTypeDetails, iea, p->queryTypesSupported,
1277 &p->num_queryTypesSupported, "queryTypesSupported", argi);
1278 ir_sequence (ir_oid, iea, p->diagnosticsSets,
1279 &p->num_diagnosticsSets, "diagnosticsSets", argi);
1280 ir_sequence (ir_oid, iea, p->attributeSetIds,
1281 &p->num_attributeSetIds, "attributeSetIds", argi);
1282 ir_sequence (ir_oid, iea, p->schemas,
1283 &p->num_schemas, "schemas", argi);
1284 ir_sequence (ir_oid, iea, p->recordSyntaxes,
1285 &p->num_recordSyntaxes, "recordSyntaxes", argi);
1286 ir_sequence (ir_oid, iea, p->resourceChallenges,
1287 &p->num_resourceChallenges, "resourceChallenges", argi);
1288 ir_AccessRestrictions (iea, p->restrictedAccess, "restrictedAccess", argi);
1289 ir_Costs (iea, p->costInfo, "costInfo", argi);
1290 ir_sequence (ir_oid, iea, p->variantSets,
1291 &p->num_variantSets, "variantSets", argi);
1292 ir_sequence (ir_ElementSetName, iea, p->elementSetNames,
1293 &p->num_elementSetNames, "elementSetNames", argi);
1294 ir_sequence (ir_InternationalString, iea, p->unitSystems,
1295 &p->num_unitSystems, "unitSystems", argi);
1296 return ir_match_end (name, iea, argi);
1300 static int ir_QueryTypeDetails (IrExpArg *iea,
1301 Z_QueryTypeDetails *p, const char *name, int argi)
1303 static IrExpChoice arm[] = {
1304 { "private", Z_QueryTypeDetails_private,
1305 ir_PrivateCapabilities },
1306 { "rpn", Z_QueryTypeDetails_rpn,
1307 ir_RpnCapabilities },
1308 { "iso8777", Z_QueryTypeDetails_iso8777,
1309 ir_Iso8777Capabilities },
1310 { "z39_58", Z_QueryTypeDetails_z39_58,
1312 { "erpn", Z_QueryTypeDetails_erpn,
1313 ir_RpnCapabilities },
1314 { "rankedList", Z_QueryTypeDetails_rankedList,
1318 if (!ir_match_start (name, p, iea, ++argi))
1320 ir_choice (iea, arm, &p->which, p->u.zprivate, argi);
1321 return ir_match_end (name, iea, argi);
1324 static int ir_PrivateCapOperator (IrExpArg *iea,
1325 Z_PrivateCapOperator *p, const char *name, int argi)
1327 if (!ir_match_start (name, p, iea, ++argi))
1329 ir_InternationalString (iea, p->roperator, "operator", argi);
1330 ir_HumanString (iea, p->description, "description", argi);
1331 return ir_match_end (name, iea, argi);
1334 static int ir_PrivateCapabilities (IrExpArg *iea,
1335 Z_PrivateCapabilities *p, const char *name, int argi)
1337 if (!ir_match_start (name, p, iea, ++argi))
1340 ir_sequence (ir_PrivateCapOperator, iea, p->operators,
1341 &p->num_operators, "operators", argi);
1342 ir_sequence (ir_SearchKey, iea, p->searchKeys,
1343 &p->num_searchKeys, "searchKeys", argi);
1344 ir_sequence (ir_HumanString, iea, p->description,
1345 &p->num_description, "description", argi);
1346 return ir_match_end (name, iea, argi);
1349 static int ir_RpnCapabilities (IrExpArg *iea,
1350 Z_RpnCapabilities *p, const char *name, int argi)
1352 if (!ir_match_start (name, p, iea, ++argi))
1354 ir_sequence (ir_integer, iea, p->operators,
1355 &p->num_operators, "operators", argi);
1356 ir_bool (iea, p->resultSetAsOperandSupported,
1357 "resultSetAsOperandSupported", argi);
1358 ir_bool (iea, p->restrictionOperandSupported,
1359 "restrictionOperandSupported", argi);
1360 ir_ProximitySupport (iea, p->proximity, "proximity", argi);
1361 return ir_match_end (name, iea, argi);
1364 static int ir_Iso8777Capabilities (IrExpArg *iea,
1365 Z_Iso8777Capabilities *p, const char *name, int argi)
1367 if (!ir_match_start (name, p, iea, ++argi))
1369 ir_sequence (ir_SearchKey, iea, p->searchKeys,
1370 &p->num_searchKeys, "searchKeys", argi);
1371 ir_HumanString (iea, p->restrictions, "restrictions", argi);
1372 return ir_match_end (name, iea, argi);
1375 static int ir_ProxSupportPrivate (IrExpArg *iea,
1376 Z_ProxSupportPrivate *p, const char *name, int argi)
1378 if (!ir_match_start (name, p, iea, ++argi))
1380 ir_integer (iea, p->unit, "unit", argi);
1381 ir_HumanString (iea, p->description, "description", argi);
1382 return ir_match_end (name, iea, argi);
1385 static int ir_ProxSupportUnit (IrExpArg *iea,
1386 Z_ProxSupportUnit *p, const char *name, int argi)
1388 static IrExpChoice arm [] = {
1389 { "known", Z_ProxSupportUnit_known, ir_integer },
1390 { "private", Z_ProxSupportUnit_private, ir_ProxSupportPrivate },
1392 if (!ir_match_start (name, p, iea, ++argi))
1394 ir_choice (iea, arm, &p->which, p->u.zprivate, argi);
1395 return ir_match_end (name, iea, argi);
1398 static int ir_ProximitySupport (IrExpArg *iea,
1399 Z_ProximitySupport *p, const char *name, int argi)
1401 if (!ir_match_start (name, p, iea, ++argi))
1403 ir_bool (iea, p->anySupport, "anySupport", argi);
1404 ir_sequence (ir_ProxSupportUnit, iea, p->unitsSupported,
1405 &p->num_unitsSupported, "unitsSupported", argi);
1406 return ir_match_end (name, iea, argi);
1409 static int ir_SearchKey (IrExpArg *iea,
1410 Z_SearchKey *p, const char *name, int argi)
1412 if (!ir_match_start (name, p, iea, ++argi))
1414 ir_InternationalString (iea, p->searchKey, "searchKey", argi);
1415 ir_HumanString (iea, p->description, "description", argi);
1416 return ir_match_end (name, iea, argi);
1419 static int ir_AccessRestrictionsUnit (IrExpArg *iea,
1420 Z_AccessRestrictionsUnit *p, const char *name, int argi)
1422 static IrExpChoice arm[] = {
1423 { "any", Z_AccessRestrictionsUnit_any,
1425 { "search", Z_AccessRestrictionsUnit_search,
1427 { "present", Z_AccessRestrictionsUnit_present,
1429 { "specificElements", Z_AccessRestrictionsUnit_specific_elements,
1431 { "extendedServices", Z_AccessRestrictionsUnit_extended_services,
1433 { "byDatabase", Z_AccessRestrictionsUnit_by_database,
1437 if (!ir_match_start (name, p, iea, ++argi))
1439 ir_choice (iea, arm, p->accessType, odr_nullval(), argi);
1440 ir_HumanString (iea, p->accessText, "accessText", argi);
1441 ir_sequence (ir_oid, iea, p->accessChallenges,
1442 &p->num_accessChallenges, "accessChallenges", argi);
1443 return ir_match_end (name, iea, argi);
1446 static int ir_AccessRestrictions (IrExpArg *iea,
1447 Z_AccessRestrictions *p, const char *name, int argi)
1449 if (!ir_match_start (name, p, iea, ++argi))
1451 ir_sequence (ir_AccessRestrictionsUnit, iea, p->elements,
1452 &p->num, "restrictions", argi);
1453 return ir_match_end (name, iea, argi);
1456 static int ir_CostsOtherCharge (IrExpArg *iea,
1457 Z_CostsOtherCharge *p, const char *name, int argi)
1459 if (!ir_match_start (name, p, iea, ++argi))
1461 ir_HumanString (iea, p->forWhat, "forWhat", argi);
1462 ir_Charge (iea, p->charge, "charge", argi);
1463 return ir_match_end (name, iea, argi);
1466 static int ir_Costs (IrExpArg *iea,
1467 Z_Costs *p, const char *name, int argi)
1469 if (!ir_match_start (name, p, iea, ++argi))
1471 ir_Charge (iea, p->connectCharge, "connectCharge", argi);
1472 ir_Charge (iea, p->connectTime, "connectTime", argi);
1473 ir_Charge (iea, p->displayCharge, "displayCharge", argi);
1474 ir_Charge (iea, p->searchCharge, "searchCharge", argi);
1475 ir_Charge (iea, p->subscriptCharge, "subscriptCharge", argi);
1477 ir_sequence (ir_CostsOtherCharge, iea, p->otherCharges,
1478 &p->num_otherCharges, "otherCharges", argi);
1479 return ir_match_end (name, iea, argi);
1482 static int ir_Charge (IrExpArg *iea,
1483 Z_Charge *p, const char *name, int argi)
1485 if (!ir_match_start (name, p, iea, ++argi))
1487 ir_IntUnit (iea, p->cost, "cost", argi);
1488 ir_Unit (iea, p->perWhat, "perWhat", argi);
1489 ir_HumanString (iea, p->text, "text", argi);
1490 return ir_match_end (name, iea, argi);
1493 static int ir_DatabaseList (IrExpArg *iea,
1494 Z_DatabaseList *p, const char *name, int argi)
1496 if (!ir_match_start (name, p, iea, ++argi))
1498 ir_sequence (ir_DatabaseName, iea, p->databases,
1499 &p->num_databases, "databases", argi);
1500 return ir_match_end (name, iea, argi);
1503 static int ir_AttributeCombinations (IrExpArg *iea,
1504 Z_AttributeCombinations *p, const char *name, int argi)
1506 if (!ir_match_start (name, p, iea, ++argi))
1508 ir_oid (iea, p->defaultAttributeSet, "defaultAttributeSet", argi);
1509 ir_sequence (ir_AttributeCombination, iea, p->legalCombinations,
1510 &p->num_legalCombinations, "legalCombinations", argi);
1511 return ir_match_end (name, iea, argi);
1514 static int ir_AttributeCombination (IrExpArg *iea,
1515 Z_AttributeCombination *p, const char *name, int argi)
1517 if (!ir_match_start (name, p, iea, ++argi))
1519 ir_sequence (ir_AttributeOccurrence, iea, p->occurrences,
1520 &p->num_occurrences, "occurrences", argi);
1521 return ir_match_end (name, iea, argi);
1524 static int ir_AttributeValueList (IrExpArg *iea,
1525 Z_AttributeValueList *p, const char *name, int argi)
1527 if (!ir_match_start (name, p, iea, ++argi))
1529 ir_sequence (ir_StringOrNumeric, iea, p->attributes,
1530 &p->num_attributes, "attributes", argi);
1531 return ir_match_end (name, iea, argi);
1534 static int ir_AttributeOccurrence (IrExpArg *iea,
1535 Z_AttributeOccurrence *p, const char *name, int argi)
1537 static IrExpChoice arm [] = {
1538 { "anyOrNone", Z_AttributeOcc_any_or_none, ir_null },
1539 { "specific", Z_AttributeOcc_specific,
1540 ir_AttributeValueList },
1541 { NULL, 0, NULL } };
1542 if (!ir_match_start (name, p, iea, ++argi))
1544 ir_oid (iea, p->attributeSet, "attributeSet", argi);
1545 ir_integer (iea, p->attributeType, "attributeType", argi);
1546 ir_null (iea, p->mustBeSupplied, "mustBeSupplied", argi);
1547 ir_choice (iea, arm, &p->which, p->attributeValues.any_or_none, argi);
1548 return ir_match_end (name, iea, argi);
1551 static int ir_AttributeValue (IrExpArg *iea,
1552 Z_AttributeValue *p, const char *name, int argi)
1554 if (!ir_match_start (name, p, iea, ++argi))
1556 ir_StringOrNumeric (iea, p->value, "value", argi);
1557 ir_HumanString (iea, p->description, "description", argi);
1558 ir_sequence (ir_StringOrNumeric, iea, p->subAttributes,
1559 &p->num_subAttributes, "subAttributes", argi);
1560 ir_sequence (ir_StringOrNumeric, iea, p->superAttributes,
1561 &p->num_superAttributes, "superAttributes", argi);
1562 ir_null (iea, p->partialSupport, "partialSupport", argi);
1563 return ir_match_end (name, iea, argi);
1566 static int ir_StringOrNumeric (IrExpArg *iea,
1567 Z_StringOrNumeric *p, const char *name, int argi)
1569 IrExpChoice arm[] = {
1570 { "string", Z_StringOrNumeric_string, ir_InternationalString },
1571 { "numeric", Z_StringOrNumeric_numeric, ir_integer },
1573 if (!ir_match_start (name, p, iea, ++argi))
1575 ir_choice (iea, arm, &p->which, p->u.string, argi);
1576 return ir_match_end (name, iea, argi);
1579 static int ir_ElementSpec (IrExpArg *iea,
1580 Z_ElementSpec *p, const char *name, int argi)
1582 static IrExpChoice arm[] = {
1583 { "elementSetName", Z_ElementSpec_elementSetName,
1584 ir_InternationalString },
1585 { "externalSpec", Z_ElementSpec_externalSpec,
1589 if (!ir_match_start (name, p, iea, ++argi))
1591 ir_choice (iea, arm, &p->which, p->u.elementSetName, argi);
1592 return ir_match_end (name, iea, argi);
1595 static int ir_Specification (IrExpArg *iea,
1596 Z_Specification *p, const char *name, int argi)
1598 if (!ir_match_start (name, p, iea, ++argi))
1600 #if YAZ_VERSIONL >= 0x010903
1601 if (p->which == Z_Schema_oid)
1602 ir_oid (iea, p->schema.oid, "schema", argi);
1604 ir_oid (iea, p->schema, "schema", argi);
1606 ir_ElementSpec (iea, p->elementSpec, "elementSpec", argi);
1607 return ir_match_end (name, iea, argi);
1610 static int ir_InfoCategory (IrExpArg *iea,
1611 Z_InfoCategory *p, const char *name, int argi)
1613 if (!ir_match_start (name, p, iea, ++argi))
1615 ir_oid (iea, p->categoryTypeId, "categoryTypeId", argi);
1616 ir_integer (iea, p->categoryValue, "categoryValue", argi);
1617 return ir_match_end (name, iea, argi);
1620 static int ir_OtherInformationUnit (IrExpArg *iea,
1621 Z_OtherInformationUnit *p, const char *name, int argi)
1623 static IrExpChoice arm[] = {
1625 Z_OtherInfo_characterInfo, ir_InternationalString },
1627 Z_OtherInfo_binaryInfo, ir_octet},
1628 { "externallyDefinedInfo",
1629 Z_OtherInfo_externallyDefinedInfo,
1632 Z_OtherInfo_oid, ir_oid},
1635 if (!ir_match_start (name, p, iea, ++argi))
1637 ir_InfoCategory (iea, p->category, "category", argi);
1638 ir_choice (iea, arm, &p->which, p->information.characterInfo, argi);
1639 return ir_match_end (name, iea, argi);
1642 static int ir_OtherInformation (IrExpArg *iea,
1643 Z_OtherInformation *p, const char *name, int argi)
1645 if (!ir_match_start (name, p, iea, ++argi))
1647 ir_sequence (ir_OtherInformationUnit, iea, p->list,
1648 &p->num_elements, "list", argi);
1649 return ir_match_end (name, iea, argi);
1652 static int ir_IntUnit (IrExpArg *iea,
1653 Z_IntUnit *p, const char *name, int argi)
1655 if (!ir_match_start (name, p, iea, ++argi))
1657 ir_integer (iea, p->value, "value", argi);
1658 ir_Unit (iea, p->unitUsed, "unitUsed", argi);
1659 return ir_match_end (name, iea, argi);
1662 static int ir_Unit (IrExpArg *iea,
1663 Z_Unit *p, const char *name, int argi)
1665 if (!ir_match_start (name, p, iea, ++argi))
1667 ir_InternationalString (iea, p->unitSystem, "unitSystem", argi);
1668 ir_StringOrNumeric (iea, p->unitType, "unitType", argi);
1669 ir_StringOrNumeric (iea, p->unit, "unit", argi);
1670 ir_integer (iea, p->scaleFactor, "scaleFactor", argi);
1671 return ir_match_end (name, iea, argi);
1674 int ir_ExplainRecord (IrExpArg *iea, Z_ExplainRecord *p, int argi)
1676 static IrExpChoice arm[] = {
1677 {"targetInfo", Z_Explain_targetInfo,
1679 {"databaseInfo", Z_Explain_databaseInfo,
1681 {"schemaInfo", Z_Explain_schemaInfo,
1683 {"tagSetInfo", Z_Explain_tagSetInfo,
1685 {"recordSyntaxInfo", Z_Explain_recordSyntaxInfo,
1686 ir_RecordSyntaxInfo},
1687 {"attributeSetInfo", Z_Explain_attributeSetInfo,
1688 ir_AttributeSetInfo},
1689 {"termListInfo", Z_Explain_termListInfo,
1691 {"extendedServicesInfo", Z_Explain_extendedServicesInfo,
1692 ir_ExtendedServicesInfo},
1693 {"attributeDetails", Z_Explain_attributeDetails,
1694 ir_AttributeDetails},
1695 {"termListDetails", Z_Explain_termListDetails,
1696 ir_TermListDetails},
1697 {"elementSetDetails", Z_Explain_elementSetDetails,
1698 ir_ElementSetDetails},
1699 {"retrievalRecordDetails", Z_Explain_retrievalRecordDetails,
1700 ir_RetrievalRecordDetails},
1701 {"sortDetails", Z_Explain_sortDetails,
1703 {"processing", Z_Explain_processing,
1704 ir_ProcessingInformation},
1705 {"variants", Z_Explain_variants,
1707 {"units", Z_Explain_units,
1709 {"categoryList", Z_Explain_categoryList,
1714 return ir_choice (iea, arm, &p->which, p->u.targetInfo, argi);
1717 int ir_tcl_get_explain (Tcl_Interp *interp, Z_ExplainRecord *rec,
1718 int argc, char **argv)
1724 iea.interp = interp;
1726 return ir_ExplainRecord (&iea, rec, 2);