X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=explain.c;h=539d23126e2540ff1c83d9e111efd1c26b175453;hb=d026c3e06f6e19e5ed4174ab1a504a4b5af79183;hp=be59d5f62bb46e89869731c4832ac0022ed2b438;hpb=ccb0e753628e08a767b808487e5702f919edd351;p=ir-tcl-moved-to-github.git diff --git a/explain.c b/explain.c index be59d5f..539d231 100644 --- a/explain.c +++ b/explain.c @@ -1,11 +1,36 @@ /* * 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.5 1996-08-23 11:59:47 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 @@ -43,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); @@ -196,8 +224,10 @@ ir_match_start (const char *name, void *p, IrExpArg *iea, int argi) if (strcmp (name, iea->argv[argi])) return 0; } - else + else if (*name) Tcl_AppendResult (iea->interp, "{", name, " ", NULL); + else + Tcl_AppendResult (iea->interp, "{", NULL); return 1; } @@ -424,6 +454,8 @@ static int ir_TargetInfo (IrExpArg *iea, &p->num_dbCombinations, "dbCombinations", argi); ir_sequence (ir_NetworkAddress, iea, p->addresses, &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); } @@ -432,9 +464,9 @@ 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 }}; @@ -458,9 +490,8 @@ static int ir_DatabaseInfo (IrExpArg *iea, 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); @@ -500,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, ODR_NULLVAL, argi); + ir_choice (iea, arm, p, odr_nullval(), argi); return ir_match_end (name, iea, argi); } @@ -529,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); } @@ -564,17 +600,27 @@ 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); ir_StringOrNumeric (iea, p->elementTag, "elementTag", argi); @@ -593,7 +639,7 @@ static int ir_TagSetInfo (IrExpArg *iea, ir_oid (iea, p->tagSet, "tagSet", argi); ir_InternationalString (iea, p->name, "name", argi); ir_HumanString (iea, p->description, "description", argi); - ir_sequence (ir_TagSetInfoElements, iea, p->elements, + ir_sequence (ir_TagSetElements, iea, p->elements, &p->num_elements, "elements", argi); return ir_match_end (name, iea, argi); } @@ -659,15 +705,15 @@ 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, ODR_NULLVAL, argi); + ir_choice (iea, searchCostArm, p->searchCost, odr_nullval(), argi); ir_bool (iea, p->scanable, "scanable", argi); ir_sequence (ir_InternationalString, iea, p->broader, @@ -717,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, ODR_NULLVAL, argi); + ir_choice (iea, waitActionArm, p->waitAction, odr_nullval(), argi); ir_HumanString (iea, p->description, "description", argi); ir_External (iea, p->specificExplain, "specificExplain", argi); @@ -756,8 +802,8 @@ 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); return ir_match_end (name, iea, argi); @@ -882,20 +928,6 @@ static int ir_SortDetails (IrExpArg *iea, 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) { @@ -904,12 +936,21 @@ 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); @@ -917,10 +958,10 @@ static int ir_SortKeyDetails (IrExpArg *iea, &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, ODR_NULLVAL, argi); + ir_choice (iea, sortArm, p->caseSensitivity, odr_nullval(), argi); return ir_match_end (name, iea, argi); } @@ -935,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)) @@ -945,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, ODR_NULLVAL, 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); @@ -996,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); } @@ -1150,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, ODR_NULLVAL, 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); } @@ -1167,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); } @@ -1270,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 }, @@ -1280,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); } @@ -1354,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); } @@ -1383,23 +1423,23 @@ 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, ODR_NULLVAL, 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); @@ -1411,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); } @@ -1498,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); } @@ -1559,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); } @@ -1578,14 +1624,15 @@ 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)) @@ -1600,7 +1647,7 @@ static int ir_OtherInformation (IrExpArg *iea, { if (!ir_match_start (name, p, iea, ++argi)) return TCL_OK; - ir_sequence (ir_OtherInformationUnit, iea, p->list, + ir_sequence (ir_OtherInformationUnit, iea, p->list, &p->num_elements, "list", argi); return ir_match_end (name, iea, argi); }