Bump version to 1.4.3
[ir-tcl-moved-to-github.git] / explain.c
index be59d5f..539d231 100644 (file)
--- 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);
 }