X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=explain.c;h=539d23126e2540ff1c83d9e111efd1c26b175453;hb=d026c3e06f6e19e5ed4174ab1a504a4b5af79183;hp=8227d70415ee8cda895e8848ce3a2d3958b72e1d;hpb=d446a56fc51edc47a986b8a7e6c0b7c90065a431;p=ir-tcl-moved-to-github.git diff --git a/explain.c b/explain.c index 8227d70..539d231 100644 --- a/explain.c +++ b/explain.c @@ -1,11 +1,45 @@ /* * IR toolkit for tcl/tk - * (c) Index Data 1996 + * (c) Index Data 1996-1998 * See the file LICENSE for details. * Sebastian Hammer, Adam Dickmeiss * * $Log: explain.c,v $ - * Revision 1.2 1996-08-20 09:27:48 adam + * Revision 1.13 2003-02-18 10:31:38 adam + * Minor change + * + * Revision 1.12 2003/02/18 10:28:00 adam + * Fix for new schema definition + * + * Revision 1.11 1998/05/20 12:24:41 adam + * Fixed bug regaring missing element languages in TargetInfo. + * Changed code so that it works with ASN.1 compiled YAZ code. + * + * Revision 1.10 1998/04/02 14:31:08 adam + * This version works with compiled ASN.1 code. + * + * Revision 1.9 1997/11/24 11:34:38 adam + * Using odr_nullval() instead of ODR_NULLVAL when appropriate. + * + * Revision 1.8 1997/09/09 10:19:51 adam + * New MSV5.0 port with fewer warnings. + * + * Revision 1.7 1997/08/28 20:17:36 adam + * Fixed small bug. + * + * Revision 1.6 1997/05/14 06:57:14 adam + * Adopted to use YAZ with C++ support. + * + * Revision 1.5 1996/08/23 11:59:47 adam + * Bug fix: infinite look in ir_oid. + * + * Revision 1.4 1996/08/22 13:39:31 adam + * More work on explain. + * + * Revision 1.3 1996/08/21 13:32:50 adam + * Implemented saveFile method and extended loadFile method to work with it. + * + * Revision 1.2 1996/08/20 09:27:48 adam * More work on explain. * Renamed tkinit.c to tkmain.c. The tcl shell uses the Tcl 7.5 interface * for socket i/o instead of the handcrafted one (for Tcl 7.3 and Tcl7.4). @@ -34,10 +68,13 @@ typedef struct { int (*handle)(); } IrExpChoice; +#ifdef ASN_COMPILED +#else typedef char *Z_ElementSetName; typedef Odr_oid *Z_AttributeSetId; typedef char *Z_InternationalString; typedef char *Z_LanguageCode; +#endif static int ir_UnitType (IrExpArg *iea, Z_UnitType *p, const char *name, int argi); @@ -177,32 +214,46 @@ static int ir_match_start (const char *name, void *p, IrExpArg *iea, int argi) { if (!p) + { + if (argi >= iea->argc) + Tcl_AppendResult (iea->interp, name, " ", NULL); return 0; + } if (argi < iea->argc) { if (strcmp (name, iea->argv[argi])) return 0; } - Tcl_AppendResult (iea->interp, "{", name, " ", NULL); + else if (*name) + Tcl_AppendResult (iea->interp, "{", name, " ", NULL); + else + Tcl_AppendResult (iea->interp, "{", NULL); return 1; } static int ir_match_end (const char *name, IrExpArg *iea, int argi) { - Tcl_AppendResult (iea->interp, "} ", NULL); + if (argi >= iea->argc) + Tcl_AppendResult (iea->interp, "} ", NULL); return TCL_OK; } static int -ir_choice (IrExpArg *iea, IrExpChoice *clist, int what, void *p, int argi) +ir_choice (IrExpArg *iea, IrExpChoice *clist, int *what, void *p, + int argi) { - while (clist->name) + if (p) { - if (clist->id == what) - return (*clist->handle)(iea, p, clist->name, argi); - clist++; + while (clist->name) + { + if (clist->id == *what) + return (*clist->handle)(iea, p, clist->name, argi); + clist++; + } } + if (argi >= iea->argc) + Tcl_AppendResult (iea->interp, "{} ", NULL); return TCL_OK; } @@ -211,7 +262,7 @@ static int ir_null (IrExpArg *iea, { if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; - Tcl_AppendResult (iea->interp, "{} ", NULL); + Tcl_AppendResult (iea->interp, "1 ", NULL); return ir_match_end (name, iea, argi); } @@ -261,6 +312,7 @@ static int ir_oid (IrExpArg *iea, sprintf (buf, "%c%d", first, *p); Tcl_AppendResult (iea->interp, buf, NULL); first = '.'; + p++; } return ir_match_end (name, iea, argi); } @@ -295,7 +347,8 @@ static int ir_octet (IrExpArg *iea, static int ir_choice_nop (IrExpArg *iea, void *p, const char *name, int argi) { - Tcl_AppendResult (iea->interp, name, " ", NULL); + if (argi >= iea->argc) + Tcl_AppendResult (iea->interp, name, " ", NULL); return TCL_OK; } @@ -314,7 +367,7 @@ static int ir_integer (IrExpArg *iea, char buf[64]; if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; - sprintf (buf, " %d", *p); + sprintf (buf, "%d", *p); Tcl_AppendResult (iea->interp, buf, NULL); return ir_match_end (name, iea, argi); } @@ -334,7 +387,7 @@ static int ir_External (IrExpArg *iea, return ir_match_end (name, iea, argi); } -static int ir_sequence (int (*fh)(), IrExpArg *iea, void *p, int num, +static int ir_sequence (int (*fh)(), IrExpArg *iea, void *p, int *num, const char *name, int argi) { void **pp = (void **) p; @@ -342,7 +395,7 @@ static int ir_sequence (int (*fh)(), IrExpArg *iea, void *p, int num, if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; - for (i = 0; iwhich, p->u.general, argi); + ir_choice (iea, arm, &p->which, p->u.general, argi); return ir_match_end (name, iea, argi); } @@ -393,14 +446,16 @@ static int ir_TargetInfo (IrExpArg *iea, ir_ContactInfo (iea, p->contactInfo, "contactInfo", argi); ir_HumanString (iea, p->description, "description", argi); ir_sequence (ir_InternationalString, iea, p->nicknames, - p->num_nicknames, "nicknames", argi); + &p->num_nicknames, "nicknames", argi); ir_HumanString (iea, p->usageRest, "usageRest", argi); ir_HumanString (iea, p->paymentAddr, "paymentAddr", argi); ir_HumanString (iea, p->hours, "hours", argi); ir_sequence (ir_DatabaseList, iea, p->dbCombinations, - p->num_dbCombinations, "dbCombinations", argi); + &p->num_dbCombinations, "dbCombinations", argi); ir_sequence (ir_NetworkAddress, iea, p->addresses, - p->num_addresses, "addresses", argi); + &p->num_addresses, "addresses", argi); + ir_sequence (ir_InternationalString, iea, p->languages, + &p->num_languages, "languages", argi); ir_AccessInfo (iea, p->commonAccessInfo, "commonAccessInfo", argi); return ir_match_end (name, iea, argi); } @@ -409,34 +464,34 @@ static int ir_DatabaseInfo (IrExpArg *iea, Z_DatabaseInfo *p, const char *name, int argi) { static IrExpChoice arm_recordCount [] = { - { "actualNumber", Z_Exp_RecordCount_actualNumber, + { "actualNumber", Z_DatabaseInfo_actualNumber, ir_integer }, - { "approxNumber", Z_Exp_RecordCount_approxNumber, + { "approxNumber", Z_DatabaseInfo_approxNumber, ir_integer }, { NULL, 0, NULL }}; if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; + ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi); ir_DatabaseName (iea, p->name, "name", argi); ir_null (iea, p->explainDatabase, "explainDatabase", argi); ir_sequence (ir_DatabaseName, iea, p->nicknames, - p->num_nicknames, "nicknames", argi); + &p->num_nicknames, "nicknames", argi); ir_IconObject (iea, p->icon, "icon", argi); ir_bool (iea, p->userFee, "userFee", argi); ir_bool (iea, p->available, "available", argi); ir_HumanString (iea, p->titleString, "titleString", argi); ir_sequence (ir_HumanString, iea, p->keywords, - p->num_keywords, "keywords", argi); + &p->num_keywords, "keywords", argi); ir_HumanString (iea, p->description, "description", argi); ir_DatabaseList (iea, p->associatedDbs, "associatedDbs", argi); ir_DatabaseList (iea, p->subDbs, "subDbs", argi); ir_HumanString (iea, p->disclaimers, "disclaimers", argi); ir_HumanString (iea, p->news, "news", argi); - ir_choice (iea, arm_recordCount, p->recordCount_which, - p->recordCount, argi); - + ir_choice (iea, arm_recordCount, &p->which, + p->u.actualNumber, argi); ir_HumanString (iea, p->defaultOrder, "defaultOrder", argi); ir_integer (iea, p->avRecordSize, "avRecordSize", argi); ir_integer (iea, p->maxRecordSize, "maxRecordSize", argi); @@ -466,9 +521,9 @@ static int ir_SchemaInfo (IrExpArg *iea, ir_HumanString (iea, p->description, "description", argi); ir_sequence (ir_TagTypeMapping, iea, p->tagTypeMapping, - p->num_tagTypeMapping, "tagTypeMapping", argi); + &p->num_tagTypeMapping, "tagTypeMapping", argi); ir_sequence (ir_ElementInfo, iea, p->recordStructure, - p->num_recordStructure, "recordStructure", argi); + &p->num_recordStructure, "recordStructure", argi); return ir_match_end (name, iea, argi); } @@ -476,13 +531,13 @@ static int ir_ElementDataTypePrimitive (IrExpArg *iea, int *p, const char *name, int argi) { static IrExpChoice arm[] = { - {"octetString", Z_PrimitiveElement_octetString, ir_choice_nop }, - {"numeric", Z_PrimitiveElement_numeric, ir_choice_nop }, + {"octetString", Z_PrimitiveDataType_octetString, ir_choice_nop }, + {"numeric", Z_PrimitiveDataType_numeric, ir_choice_nop }, {NULL, 0, NULL}}; if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; - ir_choice (iea, arm, *p, NULL, argi); + ir_choice (iea, arm, p, odr_nullval(), argi); return ir_match_end (name, iea, argi); } @@ -505,8 +560,13 @@ static int ir_ElementInfoList (IrExpArg *iea, { if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; +#if ASN_COMPILED + ir_sequence (ir_ElementInfo, iea, p->elements, + &p->num, "elements", argi); +#else ir_sequence (ir_ElementInfo, iea, p->list, - p->num, "list", argi); + &p->num, "elements", argi); +#endif return ir_match_end (name, iea, argi); } @@ -521,7 +581,7 @@ static int ir_ElementDataType (IrExpArg *iea, { NULL, 0, NULL }}; if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; - ir_choice (iea, arm, p->which, p->u.primitive, argi); + ir_choice (iea, arm, &p->which, p->u.primitive, argi); return ir_match_end (name, iea, argi); } @@ -540,19 +600,29 @@ static int ir_Path (IrExpArg *iea, { if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; +#if ASN_COMPILED + ir_sequence (ir_PathUnit, iea, p->elements, + &p->num, "elements", argi); +#else ir_sequence (ir_PathUnit, iea, p->list, - p->num, "list", argi); + &p->num, "elements", argi); +#endif return ir_match_end (name, iea, argi); } -static int ir_TagSetInfoElements (IrExpArg *iea, +#if ASN_COMPILED +static int ir_TagSetElements (IrExpArg *iea, + Z_TagSetElements *p, const char *name, int argi) +#else +static int ir_TagSetElements (IrExpArg *iea, Z_TagSetInfoElements *p, const char *name, int argi) +#endif { if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; - ir_InternationalString (iea, p->elementName, "elementname", argi); + ir_InternationalString (iea, p->elementname, "elementname", argi); ir_sequence (ir_InternationalString, iea, p->nicknames, - p->num_nicknames, "nicknames", argi); + &p->num_nicknames, "nicknames", argi); ir_StringOrNumeric (iea, p->elementTag, "elementTag", argi); ir_HumanString (iea, p->description, "description", argi); ir_PrimitiveDataType (iea, p->dataType, "dataType", argi); @@ -563,15 +633,14 @@ static int ir_TagSetInfoElements (IrExpArg *iea, static int ir_TagSetInfo (IrExpArg *iea, Z_TagSetInfo *p, const char *name, int argi) { - int i; if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi); ir_oid (iea, p->tagSet, "tagSet", argi); ir_InternationalString (iea, p->name, "name", argi); ir_HumanString (iea, p->description, "description", argi); - for (i = 0; inum_elements; i++) - ir_TagSetInfoElements (iea, p->elements[i], "elements", argi); + ir_sequence (ir_TagSetElements, iea, p->elements, + &p->num_elements, "elements", argi); return ir_match_end (name, iea, argi); } @@ -584,11 +653,11 @@ static int ir_RecordSyntaxInfo (IrExpArg *iea, ir_oid (iea, p->recordSyntax, "recordSyntax", argi); ir_InternationalString (iea, p->name, "name", argi); ir_sequence (ir_oid, iea, p->transferSyntaxes, - p->num_transferSyntaxes, "transferSyntaxes", argi); + &p->num_transferSyntaxes, "transferSyntaxes", argi); ir_HumanString (iea, p->description, "description", argi); ir_InternationalString (iea, p->asn1Module, "asn1Module", argi); ir_sequence (ir_ElementInfo, iea, p->abstractStructure, - p->num_abstractStructure, "abstractStructure", argi); + &p->num_abstractStructure, "abstractStructure", argi); return ir_match_end (name, iea, argi); } @@ -601,7 +670,7 @@ static int ir_AttributeType (IrExpArg *iea, ir_HumanString (iea, p->description, "description", argi); ir_integer (iea, p->attributeType, "attributeType", argi); ir_sequence (ir_AttributeDescription, iea, p->attributeValues, - p->num_attributeValues, "attributeValues", argi); + &p->num_attributeValues, "attributeValues", argi); return ir_match_end (name, iea, argi); } @@ -614,7 +683,7 @@ static int ir_AttributeSetInfo (IrExpArg *iea, ir_oid (iea, p->attributeSet, "attributeSet", argi); ir_InternationalString (iea, p->name, "name", argi); ir_sequence (ir_AttributeType, iea, p->attributes, - p->num_attributes, "attributes", argi); + &p->num_attributes, "attributes", argi); ir_HumanString (iea, p->description, "description", argi); return ir_match_end (name, iea, argi); } @@ -628,7 +697,7 @@ static int ir_AttributeDescription (IrExpArg *iea, ir_HumanString (iea, p->description, "description", argi); ir_StringOrNumeric (iea, p->attributeValue, "attributeValue", argi); ir_sequence (ir_StringOrNumeric,iea, p->equivalentAttributes, - p->num_equivalentAttributes, "equivalentAttributes", argi); + &p->num_equivalentAttributes, "equivalentAttributes", argi); return ir_match_end (name, iea, argi); } @@ -636,21 +705,21 @@ static int ir_TermListElement (IrExpArg *iea, Z_TermListElement *p, const char *name, int argi) { static IrExpChoice searchCostArm [] = { - { "optimized", Z_TermListInfo_optimized, ir_choice_nop }, - { "normal", Z_TermListInfo_normal, ir_choice_nop }, - { "expensive", Z_TermListInfo_expensive, ir_choice_nop }, - { "filter", Z_TermListInfo_filter, ir_choice_nop }, + { "optimized", Z_TermListElement_optimized, ir_choice_nop }, + { "normal", Z_TermListElement_normal, ir_choice_nop }, + { "expensive", Z_TermListElement_expensive, ir_choice_nop }, + { "filter", Z_TermListElement_filter, ir_choice_nop }, { NULL, 0, NULL }}; ir_InternationalString (iea, p->name, "name", argi); ir_HumanString (iea, p->title, "title", argi); if (p->searchCost) - ir_choice (iea, searchCostArm, *p->searchCost, NULL, argi); + ir_choice (iea, searchCostArm, p->searchCost, odr_nullval(), argi); ir_bool (iea, p->scanable, "scanable", argi); ir_sequence (ir_InternationalString, iea, p->broader, - p->num_broader, "broader", argi); + &p->num_broader, "broader", argi); ir_sequence (ir_InternationalString, iea, p->narrower, - p->num_narrower, "narrower", argi); + &p->num_narrower, "narrower", argi); return ir_match_end (name, iea, argi); } @@ -662,7 +731,7 @@ static int ir_TermListInfo (IrExpArg *iea, ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi); ir_DatabaseName (iea, p->databaseName, "databaseName", argi); ir_sequence (ir_TermListElement, iea, p->termLists, - p->num_termLists, "termLists", argi); + &p->num_termLists, "termLists", argi); return ir_match_end (name, iea, argi); } @@ -694,7 +763,7 @@ static int ir_ExtendedServicesInfo (IrExpArg *iea, ir_bool (iea, p->available, "available", argi); ir_bool (iea, p->retentionSupported, "retentionSupported", argi); - ir_choice (iea, waitActionArm, *p->waitAction, NULL, argi); + ir_choice (iea, waitActionArm, p->waitAction, odr_nullval(), argi); ir_HumanString (iea, p->description, "description", argi); ir_External (iea, p->specificExplain, "specificExplain", argi); @@ -710,7 +779,7 @@ static int ir_AttributeDetails (IrExpArg *iea, ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi); ir_DatabaseName (iea, p->databaseName, "databaseName", argi); ir_sequence (ir_AttributeSetDetails, iea, p->attributesBySet, - p->num_attributesBySet, "attributesBySet", argi); + &p->num_attributesBySet, "attributesBySet", argi); ir_AttributeCombinations (iea, p->attributeCombinations, "attributeCombinations", argi); return ir_match_end (name, iea, argi); @@ -723,7 +792,7 @@ static int ir_AttributeSetDetails (IrExpArg *iea, return TCL_OK; ir_oid (iea, p->attributeSet, "attributeSet", argi); ir_sequence (ir_AttributeTypeDetails, iea, p->attributesByType, - p->num_attributesByType, "attributesByType", argi); + &p->num_attributesByType, "attributesByType", argi); return ir_match_end (name, iea, argi); } @@ -733,10 +802,10 @@ static int ir_AttributeTypeDetails (IrExpArg *iea, if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; ir_integer (iea, p->attributeType, "attributeType", argi); - ir_OmittedAttributeInterpretation (iea, p->optionalType, - "optionalType", argi); + ir_OmittedAttributeInterpretation (iea, p->defaultIfOmitted, + "defaultIfOmitted", argi); ir_sequence (ir_AttributeValue, iea, p->attributeValues, - p->num_attributeValues, "attributeValues", argi); + &p->num_attributeValues, "attributeValues", argi); return ir_match_end (name, iea, argi); } @@ -775,7 +844,7 @@ static int ir_TermListDetails (IrExpArg *iea, ir_integer (iea, p->estNumberTerms, "estNumberTerms", argi); ir_sequence (ir_Term, iea, p->sampleTerms, - p->num_sampleTerms, "sampleTerms", argi); + &p->num_sampleTerms, "sampleTerms", argi); return ir_match_end (name, iea, argi); } @@ -791,7 +860,7 @@ static int ir_ElementSetDetails (IrExpArg *iea, ir_oid (iea, p->schema, "schema", argi); ir_HumanString (iea, p->description, "description", argi); ir_sequence (ir_PerElementDetails, iea, p->detailsPerElement, - p->num_detailsPerElement, "detailsPerElement", argi); + &p->num_detailsPerElement, "detailsPerElement", argi); return ir_match_end (name, iea, argi); } @@ -806,7 +875,7 @@ static int ir_RetrievalRecordDetails (IrExpArg *iea, ir_oid (iea, p->recordSyntax, "recordSyntax", argi); ir_HumanString (iea, p->description, "description", argi); ir_sequence (ir_PerElementDetails, iea, p->detailsPerElement, - p->num_detailsPerElement, "detailsPerElement", argi); + &p->num_detailsPerElement, "detailsPerElement", argi); return ir_match_end (name, iea, argi); } @@ -818,7 +887,7 @@ static int ir_PerElementDetails (IrExpArg *iea, ir_InternationalString (iea, p->name, "name", argi); ir_RecordTag (iea, p->recordTag, "recordTag", argi); ir_sequence (ir_Path, iea, p->schemaTags, - p->num_schemaTags, "schemaTags", argi); + &p->num_schemaTags, "schemaTags", argi); ir_integer (iea, p->maxSize, "maxSize", argi); ir_integer (iea, p->minSize, "minSize", argi); ir_integer (iea, p->avgSize, "avgSize", argi); @@ -830,9 +899,9 @@ static int ir_PerElementDetails (IrExpArg *iea, ir_HumanString (iea, p->billingInfo, "billingInfo", argi); ir_HumanString (iea, p->restrictions, "restrictions", argi); ir_sequence (ir_InternationalString, iea, p->alternateNames, - p->num_alternateNames, "alternateNames", argi); + &p->num_alternateNames, "alternateNames", argi); ir_sequence (ir_InternationalString, iea, p->genericNames, - p->num_genericNames, "genericNames", argi); + &p->num_genericNames, "genericNames", argi); ir_AttributeCombinations (iea, p->searchAccess, "searchAccess", argi); return ir_match_end (name, iea, argi); } @@ -855,24 +924,10 @@ static int ir_SortDetails (IrExpArg *iea, ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi); ir_DatabaseName (iea, p->databaseName, "databaseName", argi); ir_sequence (ir_SortKeyDetails, iea, p->sortKeys, - p->num_sortKeys, "sortKeys", argi); + &p->num_sortKeys, "sortKeys", argi); return ir_match_end (name, iea, argi); } -static int ir_SortKeyDetailsSortType (IrExpArg *iea, - Z_SortKeyDetailsSortType *p, const char *name, int argi) -{ - static IrExpChoice sortArm [] = { - { "character", Z_SortKeyDetailsSortType_character, - ir_null }, - { "numeric", Z_SortKeyDetailsSortType_numeric, - ir_null }, - { "structured", Z_SortKeyDetailsSortType_structured, - ir_HumanString }, - { NULL, 0, NULL }}; - return ir_choice (iea, sortArm, p->which, p->u.character, argi); -} - static int ir_SortKeyDetails (IrExpArg *iea, Z_SortKeyDetails *p, const char *name, int argi) { @@ -881,23 +936,32 @@ static int ir_SortKeyDetails (IrExpArg *iea, ir_choice_nop }, { "never", Z_SortKeyDetails_never, ir_choice_nop }, - { "defaultYes", Z_SortKeyDetails_defaultYes, + { "defaultYes", Z_SortKeyDetails_default_yes, ir_choice_nop }, - { "defaultNo", Z_SortKeyDetails_defaultNo, + { "defaultNo", Z_SortKeyDetails_default_no, ir_choice_nop }, { NULL, 0, NULL }}; + static IrExpChoice sortArm2 [] = { + { "character", Z_SortKeyDetails_character, + ir_null }, + { "numeric", Z_SortKeyDetails_numeric, + ir_null }, + { "structured", Z_SortKeyDetails_structured, + ir_HumanString }, + { NULL, 0, NULL }}; + if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; ir_HumanString (iea, p->description, "description", argi); ir_sequence (ir_Specification, iea, p->elementSpecifications, - p->num_elementSpecifications, "elementSpecifications", argi); + &p->num_elementSpecifications, "elementSpecifications", argi); ir_AttributeCombinations (iea, p->attributeSpecifications, "attributeSpecifications", argi); - ir_SortKeyDetailsSortType (iea, p->sortType, "sortType", argi); - + ir_choice (iea, sortArm2, &p->which, p->u.character, argi); + if (p->caseSensitivity) - ir_choice (iea, sortArm, *p->caseSensitivity, NULL, argi); + ir_choice (iea, sortArm, p->caseSensitivity, odr_nullval(), argi); return ir_match_end (name, iea, argi); } @@ -912,9 +976,9 @@ static int ir_ProcessingInformation (IrExpArg *iea, ir_choice_nop }, { "retrieval", Z_ProcessingInformation_retrieval, ir_choice_nop }, - { "recordPresentation", Z_ProcessingInformation_recordPresentation, + { "recordPresentation", Z_ProcessingInformation_record_presentation, ir_choice_nop }, - { "recordHandling", Z_ProcessingInformation_recordHandling, + { "recordHandling", Z_ProcessingInformation_record_handling, ir_choice_nop }, { NULL, 0, NULL }}; if (!ir_match_start (name, p, iea, ++argi)) @@ -922,7 +986,7 @@ static int ir_ProcessingInformation (IrExpArg *iea, ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi); ir_DatabaseName (iea, p->databaseName, "databaseName", argi); - ir_choice (iea, arm, *p->processingContext, NULL, argi); + ir_choice (iea, arm, p->processingContext, odr_nullval(), argi); ir_InternationalString (iea, p->name, "name", argi); ir_oid (iea, p->oid, "oid", argi); ir_HumanString (iea, p->description, "description", argi); @@ -939,7 +1003,7 @@ static int ir_VariantSetInfo (IrExpArg *iea, ir_oid (iea, p->variantSet, "variantSet", argi); ir_InternationalString (iea, p->name, "name", argi); ir_sequence (ir_VariantClass, iea, p->variants, - p->num_variants, "variants", argi); + &p->num_variants, "variants", argi); return ir_match_end (name, iea, argi); } @@ -952,7 +1016,7 @@ static int ir_VariantClass (IrExpArg *iea, ir_HumanString (iea, p->description, "description", argi); ir_integer (iea, p->variantClass, "variantClass", argi); ir_sequence (ir_VariantType, iea, p->variantTypes, - p->num_variantTypes, "variantTypes", argi); + &p->num_variantTypes, "variantTypes", argi); return ir_match_end (name, iea, argi); } @@ -973,8 +1037,8 @@ static int ir_ValueSetEnumerated (IrExpArg *iea, { if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; - ir_sequence (ir_ValueDescription, iea, p->enumerated, - p->num_enumerated, "enumerated", argi); + ir_sequence (ir_ValueDescription, iea, p->elements, + &p->num, "enumerated", argi); return ir_match_end (name, iea, argi); } @@ -987,7 +1051,7 @@ static int ir_ValueSet (IrExpArg *iea, { NULL, 0, NULL }}; if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; - ir_choice (iea, arm, p->which, p->u.range, argi); + ir_choice (iea, arm, &p->which, p->u.range, argi); return ir_match_end (name, iea, argi); } @@ -1026,7 +1090,7 @@ static int ir_ValueDescription (IrExpArg *iea, if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; - ir_choice (iea, arm, p->which, p->u.integer, argi); + ir_choice (iea, arm, &p->which, p->u.integer, argi); return ir_match_end (name, iea, argi); } @@ -1039,7 +1103,7 @@ static int ir_UnitInfo (IrExpArg *iea, ir_InternationalString (iea, p->unitSystem, "unitSystem", argi); ir_HumanString (iea, p->description, "description", argi); ir_sequence (ir_UnitType, iea, p->units, - p->num_units, "units", argi); + &p->num_units, "units", argi); return ir_match_end (name, iea, argi); } @@ -1051,7 +1115,7 @@ static int ir_UnitType (IrExpArg *iea, ir_InternationalString (iea, p->name, "name", argi); ir_HumanString (iea, p->description, "description", argi); ir_StringOrNumeric (iea, p->unitType, "unitType", argi); - ir_sequence (ir_Units, iea, p->units, p->num_units, "units", argi); + ir_sequence (ir_Units, iea, p->units, &p->num_units, "units", argi); return ir_match_end (name, iea, argi); } @@ -1073,7 +1137,7 @@ static int ir_CategoryList (IrExpArg *iea, return TCL_OK; ir_CommonInfo (iea, p->commonInfo, "commonInfo", argi); ir_sequence (ir_CategoryInfo, iea, p->categories, - p->num_categories, "categories", argi); + &p->num_categories, "categories", argi); return ir_match_end (name, iea, argi); } @@ -1119,7 +1183,7 @@ static int ir_HumanString (IrExpArg *iea, if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; ir_sequence (ir_HumanStringUnit, iea, p->strings, - p->num_strings, "strings", argi); + &p->num_strings, "strings", argi); return ir_match_end (name, iea, argi); } @@ -1127,14 +1191,13 @@ static int ir_IconObjectUnit (IrExpArg *iea, Z_IconObjectUnit *p, const char *name, int argi) { static IrExpChoice arm [] = { - { "ianaType", Z_IconObject_ianaType, ir_choice_nop }, - { "z3950type", Z_IconObject_z3950type, ir_choice_nop }, - { "otherType", Z_IconObject_otherType, ir_choice_nop }, + { "ianaType", Z_IconObjectUnit_ianaType, ir_InternationalString }, + { "z3950type", Z_IconObjectUnit_z3950type, ir_InternationalString }, + { "otherType", Z_IconObjectUnit_otherType, ir_InternationalString }, { NULL, 0, NULL }}; if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; - ir_choice (iea, arm, p->which, NULL, argi); - ir_InternationalString (iea, p->bodyType, "bodyType", argi); + ir_choice (iea, arm, &p->which, odr_nullval(), argi); ir_octet (iea, p->content, "content", argi); return ir_match_end (name, iea, argi); } @@ -1144,8 +1207,8 @@ static int ir_IconObject (IrExpArg *iea, { if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; - ir_sequence (ir_IconObjectUnit, iea, p->iconUnits, - p->num_iconUnits, "iconUnits", argi); + ir_sequence (ir_IconObjectUnit, iea, p->elements, + &p->num, "iconUnits", argi); return ir_match_end (name, iea, argi); } @@ -1204,7 +1267,7 @@ static int ir_NetworkAddress (IrExpArg *iea, { NULL, 0, NULL }}; if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; - ir_choice (iea, arm, p->which, p->u.internetAddress, argi); + ir_choice (iea, arm, &p->which, p->u.internetAddress, argi); return ir_match_end (name, iea, argi); } @@ -1214,25 +1277,25 @@ static int ir_AccessInfo (IrExpArg *iea, if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; ir_sequence (ir_QueryTypeDetails, iea, p->queryTypesSupported, - p->num_queryTypesSupported, "queryTypesSupported", argi); + &p->num_queryTypesSupported, "queryTypesSupported", argi); ir_sequence (ir_oid, iea, p->diagnosticsSets, - p->num_diagnosticsSets, "diagnosticsSets", argi); + &p->num_diagnosticsSets, "diagnosticsSets", argi); ir_sequence (ir_oid, iea, p->attributeSetIds, - p->num_attributeSetIds, "attributeSetIds", argi); + &p->num_attributeSetIds, "attributeSetIds", argi); ir_sequence (ir_oid, iea, p->schemas, - p->num_schemas, "schemas", argi); + &p->num_schemas, "schemas", argi); ir_sequence (ir_oid, iea, p->recordSyntaxes, - p->num_recordSyntaxes, "recordSyntaxes", argi); + &p->num_recordSyntaxes, "recordSyntaxes", argi); ir_sequence (ir_oid, iea, p->resourceChallenges, - p->num_resourceChallenges, "resourceChallenges", argi); + &p->num_resourceChallenges, "resourceChallenges", argi); ir_AccessRestrictions (iea, p->restrictedAccess, "restrictedAccess", argi); ir_Costs (iea, p->costInfo, "costInfo", argi); ir_sequence (ir_oid, iea, p->variantSets, - p->num_variantSets, "variantSets", argi); + &p->num_variantSets, "variantSets", argi); ir_sequence (ir_ElementSetName, iea, p->elementSetNames, - p->num_elementSetNames, "elementSetNames", argi); + &p->num_elementSetNames, "elementSetNames", argi); ir_sequence (ir_InternationalString, iea, p->unitSystems, - p->num_unitSystems, "unitSystems", argi); + &p->num_unitSystems, "unitSystems", argi); return ir_match_end (name, iea, argi); } @@ -1247,7 +1310,7 @@ static int ir_QueryTypeDetails (IrExpArg *iea, ir_RpnCapabilities }, { "iso8777", Z_QueryTypeDetails_iso8777, ir_Iso8777Capabilities }, - { "z3958", Z_QueryTypeDetails_z3958, + { "z39_58", Z_QueryTypeDetails_z39_58, ir_HumanString }, { "erpn", Z_QueryTypeDetails_erpn, ir_RpnCapabilities }, @@ -1257,7 +1320,7 @@ static int ir_QueryTypeDetails (IrExpArg *iea, if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; - ir_choice (iea, arm, p->which, p->u.private, argi); + ir_choice (iea, arm, &p->which, p->u.zprivate, argi); return ir_match_end (name, iea, argi); } @@ -1278,11 +1341,11 @@ static int ir_PrivateCapabilities (IrExpArg *iea, return TCL_OK; ir_sequence (ir_PrivateCapOperator, iea, p->operators, - p->num_operators, "operators", argi); + &p->num_operators, "operators", argi); ir_sequence (ir_SearchKey, iea, p->searchKeys, - p->num_searchKeys, "searchKeys", argi); + &p->num_searchKeys, "searchKeys", argi); ir_sequence (ir_HumanString, iea, p->description, - p->num_description, "description", argi); + &p->num_description, "description", argi); return ir_match_end (name, iea, argi); } @@ -1292,7 +1355,7 @@ static int ir_RpnCapabilities (IrExpArg *iea, if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; ir_sequence (ir_integer, iea, p->operators, - p->num_operators, "operators", argi); + &p->num_operators, "operators", argi); ir_bool (iea, p->resultSetAsOperandSupported, "resultSetAsOperandSupported", argi); ir_bool (iea, p->restrictionOperandSupported, @@ -1307,7 +1370,7 @@ static int ir_Iso8777Capabilities (IrExpArg *iea, if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; ir_sequence (ir_SearchKey, iea, p->searchKeys, - p->num_searchKeys, "searchKeys", argi); + &p->num_searchKeys, "searchKeys", argi); ir_HumanString (iea, p->restrictions, "restrictions", argi); return ir_match_end (name, iea, argi); } @@ -1331,7 +1394,7 @@ static int ir_ProxSupportUnit (IrExpArg *iea, { NULL, 0, NULL }}; if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; - ir_choice (iea, arm, p->which, p->u.private, argi); + ir_choice (iea, arm, &p->which, p->u.zprivate, argi); return ir_match_end (name, iea, argi); } @@ -1342,7 +1405,7 @@ static int ir_ProximitySupport (IrExpArg *iea, return TCL_OK; ir_bool (iea, p->anySupport, "anySupport", argi); ir_sequence (ir_ProxSupportUnit, iea, p->unitsSupported, - p->num_unitsSupported, "unitsSupported", argi); + &p->num_unitsSupported, "unitsSupported", argi); return ir_match_end (name, iea, argi); } @@ -1360,26 +1423,26 @@ static int ir_AccessRestrictionsUnit (IrExpArg *iea, Z_AccessRestrictionsUnit *p, const char *name, int argi) { static IrExpChoice arm[] = { - { "any", Z_AccessRestrictions_any, + { "any", Z_AccessRestrictionsUnit_any, ir_choice_nop }, - { "search", Z_AccessRestrictions_search, + { "search", Z_AccessRestrictionsUnit_search, ir_choice_nop }, - { "present", Z_AccessRestrictions_present, + { "present", Z_AccessRestrictionsUnit_present, ir_choice_nop }, - { "specificElements", Z_AccessRestrictions_specific_elements, + { "specificElements", Z_AccessRestrictionsUnit_specific_elements, ir_choice_nop }, - { "extendedServices", Z_AccessRestrictions_extended_services, + { "extendedServices", Z_AccessRestrictionsUnit_extended_services, ir_choice_nop }, - { "byDatabase", Z_AccessRestrictions_by_database, + { "byDatabase", Z_AccessRestrictionsUnit_by_database, ir_choice_nop }, { NULL, 0, NULL }}; if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; - ir_choice (iea, arm, *p->accessType, NULL, argi); + ir_choice (iea, arm, p->accessType, odr_nullval(), argi); ir_HumanString (iea, p->accessText, "accessText", argi); ir_sequence (ir_oid, iea, p->accessChallenges, - p->num_accessChallenges, "accessChallenges", argi); + &p->num_accessChallenges, "accessChallenges", argi); return ir_match_end (name, iea, argi); } @@ -1388,8 +1451,8 @@ static int ir_AccessRestrictions (IrExpArg *iea, { if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; - ir_sequence (ir_AccessRestrictionsUnit, iea, p->restrictions, - p->num_restrictions, "restrictions", argi); + ir_sequence (ir_AccessRestrictionsUnit, iea, p->elements, + &p->num, "restrictions", argi); return ir_match_end (name, iea, argi); } @@ -1415,7 +1478,7 @@ static int ir_Costs (IrExpArg *iea, ir_Charge (iea, p->subscriptCharge, "subscriptCharge", argi); ir_sequence (ir_CostsOtherCharge, iea, p->otherCharges, - p->num_otherCharges, "otherCharges", argi); + &p->num_otherCharges, "otherCharges", argi); return ir_match_end (name, iea, argi); } @@ -1436,7 +1499,7 @@ static int ir_DatabaseList (IrExpArg *iea, if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; ir_sequence (ir_DatabaseName, iea, p->databases, - p->num_databases, "databases", argi); + &p->num_databases, "databases", argi); return ir_match_end (name, iea, argi); } @@ -1447,7 +1510,7 @@ static int ir_AttributeCombinations (IrExpArg *iea, return TCL_OK; ir_oid (iea, p->defaultAttributeSet, "defaultAttributeSet", argi); ir_sequence (ir_AttributeCombination, iea, p->legalCombinations, - p->num_legalCombinations, "legalCombinations", argi); + &p->num_legalCombinations, "legalCombinations", argi); return ir_match_end (name, iea, argi); } @@ -1457,7 +1520,7 @@ static int ir_AttributeCombination (IrExpArg *iea, if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; ir_sequence (ir_AttributeOccurrence, iea, p->occurrences, - p->num_occurrences, "occurrences", argi); + &p->num_occurrences, "occurrences", argi); return ir_match_end (name, iea, argi); } @@ -1467,7 +1530,7 @@ static int ir_AttributeValueList (IrExpArg *iea, if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; ir_sequence (ir_StringOrNumeric, iea, p->attributes, - p->num_attributes, "attributes", argi); + &p->num_attributes, "attributes", argi); return ir_match_end (name, iea, argi); } @@ -1475,15 +1538,16 @@ static int ir_AttributeOccurrence (IrExpArg *iea, Z_AttributeOccurrence *p, const char *name, int argi) { static IrExpChoice arm [] = { - { "anyOrNone", Z_AttributeOcc_anyOrNone, ir_null }, - { "specific", Z_AttributeOcc_specific, ir_AttributeValueList }, + { "anyOrNone", Z_AttributeOcc_any_or_none, ir_null }, + { "specific", Z_AttributeOcc_specific, + ir_AttributeValueList }, { NULL, 0, NULL } }; if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; ir_oid (iea, p->attributeSet, "attributeSet", argi); ir_integer (iea, p->attributeType, "attributeType", argi); ir_null (iea, p->mustBeSupplied, "mustBeSupplied", argi); - ir_choice (iea, arm, p->which, p->attributeValues->anyOrNone, argi); + ir_choice (iea, arm, &p->which, p->attributeValues.any_or_none, argi); return ir_match_end (name, iea, argi); } @@ -1495,9 +1559,9 @@ static int ir_AttributeValue (IrExpArg *iea, ir_StringOrNumeric (iea, p->value, "value", argi); ir_HumanString (iea, p->description, "description", argi); ir_sequence (ir_StringOrNumeric, iea, p->subAttributes, - p->num_subAttributes, "subAttributes", argi); + &p->num_subAttributes, "subAttributes", argi); ir_sequence (ir_StringOrNumeric, iea, p->superAttributes, - p->num_superAttributes, "superAttributes", argi); + &p->num_superAttributes, "superAttributes", argi); ir_null (iea, p->partialSupport, "partialSupport", argi); return ir_match_end (name, iea, argi); } @@ -1511,7 +1575,7 @@ static int ir_StringOrNumeric (IrExpArg *iea, { NULL, 0, NULL }}; if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; - ir_choice (iea, arm, p->which, p->u.string, argi); + ir_choice (iea, arm, &p->which, p->u.string, argi); return ir_match_end (name, iea, argi); } @@ -1527,7 +1591,7 @@ static int ir_ElementSpec (IrExpArg *iea, if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; - ir_choice (iea, arm, p->which, p->u.elementSetName, argi); + ir_choice (iea, arm, &p->which, p->u.elementSetName, argi); return ir_match_end (name, iea, argi); } @@ -1536,7 +1600,12 @@ static int ir_Specification (IrExpArg *iea, { if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; +#if YAZ_VERSIONL >= 0x010903L + if (p->which == Z_Schema_oid) + ir_oid (iea, p->schema.oid, "schema", argi); +#else ir_oid (iea, p->schema, "schema", argi); +#endif ir_ElementSpec (iea, p->elementSpec, "elementSpec", argi); return ir_match_end (name, iea, argi); } @@ -1555,20 +1624,21 @@ static int ir_OtherInformationUnit (IrExpArg *iea, Z_OtherInformationUnit *p, const char *name, int argi) { static IrExpChoice arm[] = { - { "characterInfo", Z_OtherInfo_characterInfo, - ir_InternationalString }, - { "binaryInfo", Z_OtherInfo_binaryInfo, - ir_octet}, - { "externallyDefinedInfo", Z_OtherInfo_externallyDefinedInfo, - ir_External}, - { "oid", Z_OtherInfo_oid, - ir_oid}, + { "characterInfo", + Z_OtherInfo_characterInfo, ir_InternationalString }, + { "binaryInfo", + Z_OtherInfo_binaryInfo, ir_octet}, + { "externallyDefinedInfo", + Z_OtherInfo_externallyDefinedInfo, + ir_External}, + { "oid", + Z_OtherInfo_oid, ir_oid}, { NULL, 0, NULL }}; if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; ir_InfoCategory (iea, p->category, "category", argi); - ir_choice (iea, arm, p->which, p->information.characterInfo, argi); + ir_choice (iea, arm, &p->which, p->information.characterInfo, argi); return ir_match_end (name, iea, argi); } @@ -1577,8 +1647,8 @@ static int ir_OtherInformation (IrExpArg *iea, { if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; - ir_sequence (ir_OtherInformationUnit, iea, p->list, - p->num_elements, "list", argi); + ir_sequence (ir_OtherInformationUnit, iea, p->list, + &p->num_elements, "list", argi); return ir_match_end (name, iea, argi); } @@ -1644,7 +1714,7 @@ int ir_ExplainRecord (IrExpArg *iea, Z_ExplainRecord *p, int argi) {NULL, 0, NULL }}; - return ir_choice (iea, arm, p->which, p->u.targetInfo, argi); + return ir_choice (iea, arm, &p->which, p->u.targetInfo, argi); } int ir_tcl_get_explain (Tcl_Interp *interp, Z_ExplainRecord *rec,