Deleting this, renamed to makefile (.nothing)
[yaz-moved-to-github.git] / include / proto.h
index 23e06d6..901ec32 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, Index Data.
+ * Copyright (c) 1995-1999, Index Data.
  *
  * Permission to use, copy, modify, distribute, and sell this software and
  * its documentation, in whole or in part, for any purpose, is hereby granted,
  * OF THIS SOFTWARE.
  *
  * $Log: proto.h,v $
- * Revision 1.10  1995-05-29 08:11:34  quinn
+ * Revision 1.47  1999-04-20 09:56:48  adam
+ * Added 'name' paramter to encoder/decoder routines (typedef Odr_fun).
+ * Modified all encoders/decoders to reflect this change.
+ *
+ * Revision 1.46  1998/10/20 13:55:44  quinn
+ * Fixed Scan bug in asn and client
+ *
+ * Revision 1.45  1998/08/19 16:10:07  adam
+ * Changed som member names of DeleteResultSetRequest/Response.
+ *
+ * Revision 1.44  1998/05/18 10:14:08  adam
+ * Minor change - removed 'dead' definitions.
+ *
+ * Revision 1.43  1998/03/31 11:07:45  adam
+ * Furhter work on UNIverse resource report.
+ * Added Extended Services handling in frontend server.
+ *
+ * Revision 1.42  1998/03/20 14:46:06  adam
+ * Added UNIverse Resource Reports.
+ *
+ * Revision 1.41  1998/02/10 15:31:52  adam
+ * Implemented date and time structure. Changed the Update Extended
+ * Service.
+ *
+ * Revision 1.40  1997/09/01 08:49:50  adam
+ * New windows NT/95 port using MSV5.0. To export DLL functions the
+ * YAZ_EXPORT modifier was added. Defined in yconfig.h.
+ *
+ * Revision 1.39  1997/05/14 06:53:44  adam
+ * C++ support.
+ *
+ * Revision 1.38  1997/04/30 08:52:09  quinn
+ * Null
+ *
+ * Revision 1.37  1996/10/09  15:54:58  quinn
+ * Added SearchInfoReport
+ *
+ * Revision 1.36  1996/10/07  15:29:20  quinn
+ * Added SOIF support
+ *
+ * Revision 1.35  1996/06/10  08:57:38  quinn
+ * Added OPAC, ResourceReport
+ *
+ * Revision 1.34  1996/06/10  08:55:36  quinn
+ * Added Summary.
+ *
+ * Revision 1.33  1996/02/23  10:00:51  quinn
+ * SCAN Work
+ *
+ * Revision 1.32  1996/02/20  12:52:39  quinn
+ * Various
+ *
+ * Revision 1.31  1996/01/22  09:46:45  quinn
+ * Added Sort PDU. Moved StringList to main protocol file.
+ *
+ * Revision 1.30  1996/01/10  15:21:32  quinn
+ * Added links to access control PDUs
+ *
+ * Revision 1.29  1996/01/02  11:46:49  quinn
+ * Changed 'operator' to 'roperator' to avoid C++ conflict.
+ * Moved to pl3
+ *
+ * Revision 1.28  1996/01/02  08:57:32  quinn
+ * Changed enums in the ASN.1 .h files to #defines. Changed oident.class to oclass
+ *
+ * Revision 1.27  1995/10/12  10:34:46  quinn
+ * Added Espec-1.
+ *
+ * Revision 1.26  1995/09/29  17:12:08  quinn
+ * Smallish
+ *
+ * Revision 1.25  1995/09/27  15:02:49  quinn
+ * Modified function heads & prototypes.
+ *
+ * Revision 1.24  1995/08/29  11:17:43  quinn
+ * *** empty log message ***
+ *
+ * Revision 1.23  1995/08/21  09:10:36  quinn
+ * Smallish fixes to suppport new formats.
+ *
+ * Revision 1.22  1995/08/17  12:45:14  quinn
+ * Fixed minor problems with GRS-1. Added support in c&s.
+ *
+ * Revision 1.21  1995/08/15  12:00:11  quinn
+ * Updated External
+ *
+ * Revision 1.20  1995/08/10  08:54:35  quinn
+ * Added Explain.
+ *
+ * Revision 1.19  1995/06/19  12:38:28  quinn
+ * Reorganized include-files. Added small features.
+ *
+ * Revision 1.18  1995/06/16  13:16:05  quinn
+ * Fixed Defaultdiagformat.
+ *
+ * Revision 1.17  1995/06/15  15:42:05  quinn
+ * Fixed some v3 bugs
+ *
+ * Revision 1.16  1995/06/15  07:45:06  quinn
+ * Moving to v3.
+ *
+ * Revision 1.15  1995/06/14  15:26:43  quinn
+ * *** empty log message ***
+ *
+ * Revision 1.14  1995/06/07  14:42:34  quinn
+ * Fixed CLOSE
+ *
+ * Revision 1.13  1995/06/07  14:36:47  quinn
+ * Added CLOSE
+ *
+ * Revision 1.12  1995/06/05  10:53:13  quinn
+ * Smallish.
+ *
+ * Revision 1.11  1995/06/02  09:49:47  quinn
+ * Add access control
+ *
+ * Revision 1.10  1995/05/29  08:11:34  quinn
  * Moved oid from odr/asn to util.
  *
  * Revision 1.9  1995/05/22  11:31:25  quinn
 #ifndef PROTO_H
 #define PROTO_H
 
+#include <yconfig.h>
 #include <odr.h>
 #include <oid.h>
 #include <odr_use.h>
+#include <yaz-version.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
 
 /* ----------------- GLOBAL AUXILIARY DEFS ----------------*/
 
+struct Z_External;
+typedef struct Z_External Z_External;
+
 typedef Odr_oct Z_ReferenceId;
 typedef char Z_DatabaseName;
 typedef char Z_ResultSetId;
 typedef Odr_oct Z_ResultsetId;
-typedef Odr_external Z_UserInformationField;
 
 typedef struct Z_InfoCategory
 {
@@ -111,20 +235,18 @@ typedef struct Z_InfoCategory
 typedef struct Z_OtherInformationUnit
 {
     Z_InfoCategory *category;        /* OPTIONAL */
-    enum
-    {
-       Z_OtherInfo_characterInfo,
-       Z_OtherInfo_binaryInfo,
-       Z_OtherInfo_externallyDefinedInfo,
-       Z_OtherInfo_oid
-    } which;
+    int which;
+#define Z_OtherInfo_characterInfo 0
+#define Z_OtherInfo_binaryInfo 1
+#define Z_OtherInfo_externallyDefinedInfo 2
+#define Z_OtherInfo_oid 3
     union
     {
        char *characterInfo; 
        Odr_oct *binaryInfo;
-       Odr_external *externallyDefinedInfo;
+       Z_External *externallyDefinedInfo;
        Odr_oid *oid;
-    } u;
+    } information;
 } Z_OtherInformationUnit;
 
 typedef struct Z_OtherInformation
@@ -133,6 +255,40 @@ typedef struct Z_OtherInformation
     Z_OtherInformationUnit **list;
 } Z_OtherInformation;
 
+typedef struct Z_StringOrNumeric
+{
+    int which;
+#define Z_StringOrNumeric_string 0
+#define Z_StringOrNumeric_numeric 1
+    union
+    {
+       char *string;
+       int *numeric;
+    } u;
+} Z_StringOrNumeric;
+
+typedef struct Z_Unit
+{
+    char *unitSystem;               /* OPTIONAL */
+    Z_StringOrNumeric *unitType;    /* OPTIONAL */
+    Z_StringOrNumeric *unit;        /* OPTIONAL */
+    int *scaleFactor;               /* OPTIONAL */
+} Z_Unit;
+
+typedef struct Z_IntUnit
+{
+    int *value;
+    Z_Unit *unitUsed;
+} Z_IntUnit;
+
+typedef Odr_oct Z_SUTRS;
+
+typedef struct Z_StringList
+{
+    int num_strings;
+    char **strings;
+} Z_StringList;
+
 /* ----------------- INIT SERVICE  ----------------*/
 
 typedef struct
@@ -144,68 +300,68 @@ typedef struct
 
 typedef struct Z_IdAuthentication
 {
-    enum
-    {
-       Z_IdAuthentication_open,
-       Z_IdAuthentication_idPass,
-       Z_IdAuthentication_anonymous,
-       Z_IdAuthentication_other
-    } which;
+    int which;
+#define Z_IdAuthentication_open 0
+#define Z_IdAuthentication_idPass 1
+#define Z_IdAuthentication_anonymous 2
+#define Z_IdAuthentication_other 3
     union
     {
        char *open;
        Z_IdPass *idPass;
        Odr_null *anonymous;
-       Odr_external *other;
+       Z_External *other;
     } u;
 } Z_IdAuthentication;
 
-#define Z_ProtocolVersion_1            0
-#define Z_ProtocolVersion_2            1
-#define Z_ProtocolVersion_3            2
-
-#define Z_Options_search               0
-#define Z_Options_present              1
-#define Z_Options_delSet               2
-#define Z_Options_resourceReport       3
-#define Z_Options_triggerResourceCtrl  4
-#define Z_Options_resourceCtrl         5
-#define Z_Options_accessCtrl           6
-#define Z_Options_scan                 7
-#define Z_Options_sort                 8
-#define Z_Options_reserved             9
-#define Z_Options_extendedServices    10
-#define Z_Options_level_1Segmentation 11
-#define Z_Options_level_2Segmentation 12
-#define Z_Options_concurrentOperations 13
-#define Z_Options_namedResultSets     14
+#define Z_ProtocolVersion_1               0
+#define Z_ProtocolVersion_2               1
+#define Z_ProtocolVersion_3               2
+
+#define Z_Options_search                  0
+#define Z_Options_present                 1
+#define Z_Options_delSet                  2
+#define Z_Options_resourceReport          3
+#define Z_Options_triggerResourceCtrl     4
+#define Z_Options_resourceCtrl            5
+#define Z_Options_accessCtrl              6
+#define Z_Options_scan                    7
+#define Z_Options_sort                    8
+#define Z_Options_reserved                9
+#define Z_Options_extendedServices       10
+#define Z_Options_level_1Segmentation    11
+#define Z_Options_level_2Segmentation    12
+#define Z_Options_concurrentOperations   13
+#define Z_Options_namedResultSets        14
 
 typedef struct Z_InitRequest
 {
     Z_ReferenceId *referenceId;                   /* OPTIONAL */
-    Odr_bitmask *options;
     Odr_bitmask *protocolVersion;
+    Odr_bitmask *options;
     int *preferredMessageSize;
     int *maximumRecordSize;
     Z_IdAuthentication* idAuthentication;        /* OPTIONAL */
     char *implementationId;                      /* OPTIONAL */
     char *implementationName;                    /* OPTIONAL */
     char *implementationVersion;                 /* OPTIONAL */
-    Z_UserInformationField *userInformationField; /* OPTIONAL */
+    Z_External *userInformationField;            /* OPTIONAL */
+    Z_OtherInformation *otherInfo;               /* OPTIONAL */
 } Z_InitRequest;
 
 typedef struct Z_InitResponse
 {
     Z_ReferenceId *referenceId;    /* OPTIONAL */
-    Odr_bitmask *options;
     Odr_bitmask *protocolVersion;
+    Odr_bitmask *options;
     int *preferredMessageSize;
     int *maximumRecordSize;
     bool_t *result;
     char *implementationId;      /* OPTIONAL */
     char *implementationName;    /* OPTIONAL */
     char *implementationVersion; /* OPTIONAL */
-    Z_UserInformationField *userInformationField; /* OPTIONAL */
+    Z_External *userInformationField; /* OPTIONAL */
+    Z_OtherInformation *otherInfo;    /* OPTIONAL */
 } Z_InitResponse;
 
 typedef struct Z_NSRAuthentication
@@ -215,48 +371,13 @@ typedef struct Z_NSRAuthentication
     char *account;
 } Z_NSRAuthentication;
 
-int z_NSRAuthentication(ODR o, Z_NSRAuthentication **p, int opt);
-
-int z_StrAuthentication(ODR o, char **p, int opt);
-
-
-/* ------------------ RESOURCE CONTROL ----------------*/
-
-typedef struct Z_TriggerResourceControlRequest
-{
-    Z_ReferenceId *referenceId;    /* OPTIONAL */
-    int *requestedAction;
-#define Z_TriggerResourceCtrl_resourceReport  1
-#define Z_TriggerResourceCtrl_resourceControl 2
-#define Z_TriggerResourceCtrl_cancel          3
-    Odr_oid *prefResourceReportFormat;  /* OPTIONAL */
-    bool_t *resultSetWanted;            /* OPTIONAL */
-} Z_TriggerResourceControlRequest;
+int z_NSRAuthentication(ODR o, Z_NSRAuthentication **p, int opt,
+                       const char *name);
 
-typedef struct Z_ResourceControlRequest
-{
-    Z_ReferenceId *referenceId;    /* OPTIONAL */
-    bool_t *suspendedFlag;         /* OPTIONAL */
-    Odr_external *resourceReport; /* OPTIONAL */
-    int *partialResultsAvailable;  /* OPTIONAL */
-#define Z_ResourceControlRequest_subset    1
-#define Z_ResourceControlRequest_interim   2
-#define Z_ResourceControlRequest_none      3
-    bool_t *responseRequired;
-    bool_t *triggeredRequestFlag;  /* OPTIONAL */
-} Z_ResourceControlRequest;
-
-typedef struct Z_ResourceControlResponse
-{
-    Z_ReferenceId *referenceId;    /* OPTIONAL */
-    bool_t *continueFlag;
-    bool_t *resultSetWanted;       /* OPTIONAL */
-} Z_ResourceControlResponse;
+int z_StrAuthentication(ODR o, char **p, int opt, const char *name);
 
 /* ------------------ SEARCH SERVICE ----------------*/
 
-typedef Odr_oid Z_PreferredRecordSyntax;
-
 typedef struct Z_DatabaseSpecificUnit
 {
     char *databaseName;
@@ -283,28 +404,39 @@ typedef struct Z_ElementSetNames
 
 /* ---------------------- RPN QUERY --------------------------- */
 
+typedef struct Z_ComplexAttribute
+{
+    int num_list;
+    Z_StringOrNumeric **list;
+    int num_semanticAction;
+    int **semanticAction;           /* OPTIONAL */
+} Z_ComplexAttribute;
+
 typedef struct Z_AttributeElement
 {
+    Odr_oid *attributeSet;           /* OPTIONAL - v3 only */
     int *attributeType;
-    int *attributeValue;
+    int which;
+#define Z_AttributeValue_numeric 0
+#define Z_AttributeValue_complex 1
+    union
+    {
+       int *numeric;
+       Z_ComplexAttribute *complex;
+    } value;
 } Z_AttributeElement;
 
-#define Z_V3
-#ifdef Z_V3
-
 typedef struct Z_Term 
 {
-    enum
-    {
-       Z_Term_general,
-       Z_Term_numeric,
-       Z_Term_characterString,
-       Z_Term_oid,
-       Z_Term_dateTime,
-       Z_Term_external,
-       Z_Term_integerAndUnit,
-       Z_Term_null
-    } which;
+    int which;
+#define Z_Term_general 0
+#define Z_Term_numeric 1
+#define Z_Term_characterString 2
+#define Z_Term_oid 3
+#define Z_Term_dateTime 4
+#define Z_Term_external 5
+#define Z_Term_integerAndUnit 6
+#define Z_Term_null 7
     union
     {
        Odr_oct *general; /* this is required for v2 */
@@ -312,25 +444,26 @@ typedef struct Z_Term
        char *characterString;
        Odr_oid *oid;
        char *dateTime;
-       Odr_external *external;
+       Z_External *external;
        /* Z_IntUnit *integerAndUnit; */
        Odr_null *null;
     } u;
 } Z_Term;
 
-#endif
-
 typedef struct Z_AttributesPlusTerm
 {
     int num_attributes;
     Z_AttributeElement **attributeList;
-#ifdef Z_V3
     Z_Term *term;
-#else
-    Odr_oct *term;
-#endif
 } Z_AttributesPlusTerm;
 
+typedef struct Z_ResultSetPlusAttributes
+{
+    char *resultSet;
+    int num_attributes;
+    Z_AttributeElement **attributeList;
+} Z_ResultSetPlusAttributes;
+
 typedef struct Z_ProximityOperator
 {
     bool_t *exclusion;          /* OPTIONAL */
@@ -343,11 +476,9 @@ typedef struct Z_ProximityOperator
 #define Z_Prox_greaterThanOrEqual 4
 #define Z_Prox_greaterThan        5
 #define Z_Prox_notEqual           6
-    enum
-    {
-       Z_ProxCode_known,
-       Z_ProxCode_private
-    } which;
+    int which;
+#define Z_ProxCode_known 0
+#define Z_ProxCode_private 1
     int *proximityUnitCode;
 #define Z_ProxUnit_character       1
 #define Z_ProxUnit_word            2
@@ -364,13 +495,11 @@ typedef struct Z_ProximityOperator
 
 typedef struct Z_Operator
 {
-    enum
-    {
-       Z_Operator_and,
-       Z_Operator_or,
-       Z_Operator_and_not,
-       Z_Operator_prox
-    } which;
+    int which;
+#define Z_Operator_and 0
+#define Z_Operator_or 1
+#define Z_Operator_and_not 2
+#define Z_Operator_prox 3
     union
     {
        Odr_null *and;          /* these guys are nulls. */
@@ -385,10 +514,12 @@ typedef struct Z_Operand
     int which;
 #define Z_Operand_APT 0
 #define Z_Operand_resultSetId 1
+#define Z_Operand_resultAttr             /* v3 only */ 2
     union
     {
        Z_AttributesPlusTerm *attributesPlusTerm;
        Z_ResultSetId *resultSetId;
+       Z_ResultSetPlusAttributes *resultAttr;
     } u;
 } Z_Operand;
 
@@ -396,7 +527,7 @@ typedef struct Z_Complex
 {
     struct Z_RPNStructure *s1;
     struct Z_RPNStructure *s2;
-    Z_Operator *operator;
+    Z_Operator *roperator;
 } Z_Complex;
 
 typedef struct Z_RPNStructure
@@ -424,10 +555,12 @@ typedef struct Z_Query
     int which;
 #define Z_Query_type_1 1
 #define Z_Query_type_2 2
+#define Z_Query_type_101 3
     union
     {
        Z_RPNQuery *type_1;
        Odr_oct *type_2;
+       Z_RPNQuery *type_101;
     } u;
 } Z_Query;
 
@@ -443,21 +576,46 @@ typedef struct Z_SearchRequest
     char **databaseNames;
     Z_ElementSetNames *smallSetElementSetNames;    /* OPTIONAL */
     Z_ElementSetNames *mediumSetElementSetNames;    /* OPTIONAL */
-    Z_PreferredRecordSyntax *preferredRecordSyntax;  /* OPTIONAL */
+    Odr_oid *preferredRecordSyntax;  /* OPTIONAL */
     Z_Query *query;
+    Z_OtherInformation *additionalSearchInfo;       /* OPTIONAL */
+    Z_OtherInformation *otherInfo;                  /* OPTIONAL */
 } Z_SearchRequest;
 
 /* ------------------------ RECORD -------------------------- */
 
-typedef Odr_external Z_DatabaseRecord;
+typedef Z_External Z_DatabaseRecord;
 
-typedef struct Z_DiagRec
+typedef struct Z_DefaultDiagFormat
 {
-    Odr_oid *diagnosticSetId;
+    Odr_oid *diagnosticSetId; /* This is opt'l to interwork with bad targets */
     int *condition;
+    /* until the whole character set issue becomes more definite,
+     * you can probably ignore this on input. */
+    int which;
+#define Z_DiagForm_v2AddInfo 0
+#define Z_DiagForm_v3AddInfo 1
     char *addinfo;
+} Z_DefaultDiagFormat;
+
+typedef struct Z_DiagRec
+{
+    int which;
+#define Z_DiagRec_defaultFormat 0
+#define Z_DiagRec_externallyDefined 1
+    union
+    {
+       Z_DefaultDiagFormat *defaultFormat;
+       Z_External *externallyDefined;
+    } u;
 } Z_DiagRec;
 
+typedef struct Z_DiagRecs
+{
+    int num_diagRecs;
+    Z_DiagRec **diagRecs;
+} Z_DiagRecs;
+
 typedef struct Z_NamePlusRecord
 {
     char *databaseName;      /* OPTIONAL */
@@ -482,50 +640,186 @@ typedef struct Z_Records
     int which;
 #define Z_Records_DBOSD 0
 #define Z_Records_NSD 1
+#define Z_Records_multipleNSD 2
     union
     {
        Z_NamePlusRecordList *databaseOrSurDiagnostics;
        Z_DiagRec *nonSurrogateDiagnostic;
+       Z_DiagRecs *multipleNonSurDiagnostics;
     } u;
 } Z_Records;
 
+/* ------------------------ SEARCHRESPONSE ------------------ */
+
+typedef struct Z_SearchResponse
+{
+    Z_ReferenceId *referenceId;       /* OPTIONAL */
+    int *resultCount;
+    int *numberOfRecordsReturned;
+    int *nextResultSetPosition;
+    bool_t *searchStatus;
+    int *resultSetStatus;              /* OPTIONAL */
+#define Z_RES_SUBSET        1
+#define Z_RES_INTERIM       2
+#define Z_RES_NONE          3
+    int *presentStatus;                /* OPTIONAL */
+#define Z_PRES_SUCCESS      0
+#define Z_PRES_PARTIAL_1    1
+#define Z_PRES_PARTIAL_2    2
+#define Z_PRES_PARTIAL_3    3
+#define Z_PRES_PARTIAL_4    4
+#define Z_PRES_FAILURE      5
+    Z_Records *records;                  /* OPTIONAL */
+    Z_OtherInformation *additionalSearchInfo;
+    Z_OtherInformation *otherInfo;
+} Z_SearchResponse;
+
+/* ------------------------- PRESENT SERVICE -----------------*/
+
+typedef struct Z_ElementSpec
+{
+    int which;
+#define Z_ElementSpec_elementSetName 0
+#define Z_ElementSpec_externalSpec 1
+    union
+    {
+       char *elementSetName;
+       Z_External *externalSpec;
+    } u;
+} Z_ElementSpec;
+
+typedef struct Z_Specification
+{
+    Odr_oid *schema;                  /* OPTIONAL */
+    Z_ElementSpec *elementSpec;       /* OPTIONAL */
+} Z_Specification;
+
+typedef struct Z_DbSpecific
+{
+    char *databaseName;
+    Z_Specification *spec;
+} Z_DbSpecific;
+
+typedef struct Z_CompSpec
+{
+    bool_t *selectAlternativeSyntax;
+    Z_Specification *generic;            /* OPTIONAL */
+    int num_dbSpecific;
+    Z_DbSpecific **dbSpecific;           /* OPTIONAL */
+    int num_recordSyntax;
+    Odr_oid **recordSyntax;              /* OPTIONAL */
+} Z_CompSpec;
+
+typedef struct Z_RecordComposition
+{
+    int which;
+#define Z_RecordComp_simple 0
+#define Z_RecordComp_complex 1
+    union
+    {
+       Z_ElementSetNames *simple;
+       Z_CompSpec *complex;
+    } u;
+} Z_RecordComposition;
+
+typedef struct Z_Range
+{
+    int *startingPosition;
+    int *numberOfRecords;
+} Z_Range;
+
+typedef struct Z_PresentRequest
+{
+    Z_ReferenceId *referenceId;              /* OPTIONAL */
+    Z_ResultSetId *resultSetId;
+    int *resultSetStartPoint;
+    int *numberOfRecordsRequested;
+    int num_ranges;
+    Z_Range **additionalRanges;              /* OPTIONAL */
+    Z_RecordComposition *recordComposition;  /* OPTIONAL */
+    Odr_oid *preferredRecordSyntax;  /* OPTIONAL */
+    int *maxSegmentCount;                 /* OPTIONAL */
+    int *maxRecordSize;                   /* OPTIONAL */
+    int *maxSegmentSize;                  /* OPTIONAL */
+    Z_OtherInformation *otherInfo;        /* OPTIONAL */
+} Z_PresentRequest;
+
+typedef struct Z_PresentResponse
+{
+    Z_ReferenceId *referenceId;        /* OPTIONAL */
+    int *numberOfRecordsReturned;
+    int *nextResultSetPosition;
+    int *presentStatus;
+    Z_Records *records;
+    Z_OtherInformation *otherInfo;     /* OPTIONAL */
+} Z_PresentResponse;
+
+/* ------------------ RESOURCE CONTROL ----------------*/
+
+typedef struct Z_TriggerResourceControlRequest
+{
+    Z_ReferenceId *referenceId;    /* OPTIONAL */
+    int *requestedAction;
+#define Z_TriggerResourceCtrl_resourceReport  1
+#define Z_TriggerResourceCtrl_resourceControl 2
+#define Z_TriggerResourceCtrl_cancel          3
+    Odr_oid *prefResourceReportFormat;  /* OPTIONAL */
+    bool_t *resultSetWanted;            /* OPTIONAL */
+    Z_OtherInformation *otherInfo;
+} Z_TriggerResourceControlRequest;
+
+typedef struct Z_ResourceControlRequest
+{
+    Z_ReferenceId *referenceId;    /* OPTIONAL */
+    bool_t *suspendedFlag;         /* OPTIONAL */
+    Z_External *resourceReport; /* OPTIONAL */
+    int *partialResultsAvailable;  /* OPTIONAL */
+#define Z_ResourceControlRequest_subset    1
+#define Z_ResourceControlRequest_interim   2
+#define Z_ResourceControlRequest_none      3
+    bool_t *responseRequired;
+    bool_t *triggeredRequestFlag;  /* OPTIONAL */
+    Z_OtherInformation *otherInfo;
+} Z_ResourceControlRequest;
+
+typedef struct Z_ResourceControlResponse
+{
+    Z_ReferenceId *referenceId;    /* OPTIONAL */
+    bool_t *continueFlag;
+    bool_t *resultSetWanted;       /* OPTIONAL */
+    Z_OtherInformation *otherInfo;
+} Z_ResourceControlResponse;
+
+
 /* ------------------ ACCESS CTRL SERVICE ----------------*/
 
 typedef struct Z_AccessControlRequest
 {
     Z_ReferenceId *referenceId;           /* OPTIONAL */
-    enum
-    {
-       Z_AccessRequest_simpleForm,
-       Z_AccessRequest_externallyDefined
-    } which;
+    int which;
+#define Z_AccessRequest_simpleForm 0
+#define Z_AccessRequest_externallyDefined 1
     union
     {
        Odr_oct *simpleForm;
-       Odr_external *externallyDefined;
+       Z_External *externallyDefined;
     } u;
-#ifdef Z_OTHERINFO
     Z_OtherInformation *otherInfo;           /* OPTIONAL */
-#endif
 } Z_AccessControlRequest;
 
 typedef struct Z_AccessControlResponse
 {
     Z_ReferenceId *referenceId;              /* OPTIONAL */
-    enum
-    {
-       Z_AccessResponse_simpleForm,
-       Z_AccessResponse_externallyDefined
-    } which;
+    int which;
+#define Z_AccessResponse_simpleForm 0
+#define Z_AccessResponse_externallyDefined 1
     union
     {
        Odr_oct *simpleForm;
-       Odr_external *externallyDefined;
+       Z_External *externallyDefined;
     } u;
     Z_DiagRec *diagnostic;                   /* OPTIONAL */
-#ifdef Z_OTHERINFO
     Z_OtherInformation *otherInfo;           /* OPTIONAL */
-#endif
 } Z_AccessControlResponse;
 
 /* ------------------------ SCAN SERVICE -------------------- */
@@ -542,41 +836,61 @@ typedef struct Z_AlternativeTerm
     Z_AttributesPlusTerm **terms;
 } Z_AlternativeTerm;
 
-typedef struct Z_OccurrenceByAttributes
+typedef struct Z_ByDatabase
 {
-    Z_AttributeList *attributes;
-#if 0
-    enum
-    {
-       Z_OByAtt_global,
-       Z_ObyAtt_byDatabase
-    } which;
+    char *db;
+    int *num;                           /* OPTIONAL */
+    Z_OtherInformation *otherDbInfo;    /* OPTIONAL */
+} Z_ByDatabase;
+
+typedef struct Z_ByDatabaseList
+{
+    int num_elements;
+    Z_ByDatabase **elements;
+} Z_ByDatabaseList;
+
+typedef struct Z_ScanOccurrences
+{
+    int which;
+#define Z_ScanOccurrences_global         0
+#define Z_ScanOccurrences_byDatabase     1
     union
     {
-#endif
-       int *global;
-#if 0
-       /* Z_ByDatabase *byDatabase; */
+       int *global;
+       Z_ByDatabaseList *byDatabase;
     } u;
-#endif
+
+} Z_ScanOccurrences;
+
+typedef struct Z_OccurrenceByAttributesElem
+{
+    Z_AttributeList *attributes;
+    Z_ScanOccurrences *occurrences;         /* OPTIONAL */
+    Z_OtherInformation *otherOccurInfo;      /* OPTIONAL */
+} Z_OccurrenceByAttributesElem;
+
+typedef struct Z_OccurrenceByAttributes
+{
+    int num_elements;
+    Z_OccurrenceByAttributesElem **elements;
 } Z_OccurrenceByAttributes;
 
 typedef struct Z_TermInfo
 {
     Z_Term *term;
+    char *displayTerm;                     /* OPTIONAL */
     Z_AttributeList *suggestedAttributes;  /* OPTIONAL */
     Z_AlternativeTerm *alternativeTerm;    /* OPTIONAL */
     int *globalOccurrences;                /* OPTIONAL */
     Z_OccurrenceByAttributes *byAttributes; /* OPTIONAL */
+    Z_OtherInformation *otherTermInfo;      /* OPTIONAL */
 } Z_TermInfo;
 
 typedef struct Z_Entry
 {
-    enum
-    {
-       Z_Entry_termInfo,
-       Z_Entry_surrogateDiagnostic
-    } which;
+    int which;
+#define Z_Entry_termInfo 0
+#define Z_Entry_surrogateDiagnostic 1
     union
     {
        Z_TermInfo *termInfo;
@@ -584,25 +898,19 @@ typedef struct Z_Entry
     } u;
 } Z_Entry;
 
+#ifdef BUGGY_LISTENTRIES
+
 typedef struct Z_Entries
 {
     int num_entries;
     Z_Entry **entries;
 } Z_Entries;
 
-typedef struct Z_DiagRecs
-{
-    int num_diagRecs;
-    Z_DiagRec **diagRecs;
-} Z_DiagRecs;
-
 typedef struct Z_ListEntries
 {
-    enum
-    {
-       Z_ListEntries_entries,
-       Z_ListEntries_nonSurrogateDiagnostics
-    } which;
+    int which;
+#define Z_ListEntries_entries 0
+#define Z_ListEntries_nonSurrogateDiagnostics 1
     union
     {
        Z_Entries *entries;
@@ -610,17 +918,26 @@ typedef struct Z_ListEntries
     } u;
 } Z_ListEntries;
 
+#endif
+
+typedef struct Z_ListEntries {
+       int num_entries;
+       Z_Entry **entries; /* OPT */
+       int num_nonsurrogateDiagnostics;
+       Z_DiagRec **nonsurrogateDiagnostics; /* OPT */
+} Z_ListEntries;
+
 typedef struct Z_ScanRequest
 {
     Z_ReferenceId *referenceId;       /* OPTIONAL */
     int num_databaseNames;
     char **databaseNames;
     Odr_oid *attributeSet;          /* OPTIONAL */
-    Odr_any *eatme1;
     Z_AttributesPlusTerm *termListAndStartPoint;
     int *stepSize;                    /* OPTIONAL */
     int *numberOfTermsRequested;
     int *preferredPositionInResponse;   /* OPTIONAL */
+    Z_OtherInformation *otherInfo;
 } Z_ScanRequest;
 
 typedef struct Z_ScanResponse
@@ -639,51 +956,9 @@ typedef struct Z_ScanResponse
     int *positionOfTerm;              /* OPTIONAL */
     Z_ListEntries *entries;           /* OPTIONAL */
     Odr_oid *attributeSet;            /* OPTIONAL */
+    Z_OtherInformation *otherInfo;
 } Z_ScanResponse; 
 
-/* ------------------------ SEARCHRESPONSE ------------------ */
-
-typedef struct Z_SearchResponse
-{
-    Z_ReferenceId *referenceId;       /* OPTIONAL */
-    int *resultCount;
-    int *numberOfRecordsReturned;
-    int *nextResultSetPosition;
-    bool_t *searchStatus;
-    int *resultSetStatus;              /* OPTIONAL */
-#define Z_RES_SUBSET        1
-#define Z_RES_INTERIM       2
-#define Z_RES_NONE          3
-    int *presentStatus;                /* OPTIONAL */
-#define Z_PRES_SUCCESS      0
-#define Z_PRES_PARTIAL_1    1
-#define Z_PRES_PARTIAL_2    2
-#define Z_PRES_PARTIAL_3    3
-#define Z_PRES_PARTIAL_4    4
-#define Z_PRES_FAILURE      5
-    Z_Records *records;                  /* OPTIONAL */
-} Z_SearchResponse;
-
-/* ------------------------- PRESENT SERVICE -----------------*/
-
-typedef struct Z_PresentRequest
-{
-    Z_ReferenceId *referenceId;          /* OPTIONAL */
-    Z_ResultSetId *resultSetId;
-    int *resultSetStartPoint;
-    int *numberOfRecordsRequested;
-    Z_ElementSetNames *elementSetNames;  /* OPTIONAL */
-    Z_PreferredRecordSyntax *preferredRecordSyntax;  /* OPTIONAL */
-} Z_PresentRequest;
-
-typedef struct Z_PresentResponse
-{
-    Z_ReferenceId *referenceId;        /* OPTIONAL */
-    int *numberOfRecordsReturned;
-    int *nextResultSetPosition;
-    int *presentStatus;
-    Z_Records *records;
-} Z_PresentResponse;
 
 /* ------------------------ DELETE -------------------------- */
 
@@ -711,48 +986,269 @@ typedef struct Z_DeleteResultSetRequest
     int *deleteFunction;
 #define Z_DeleteRequest_list    0
 #define Z_DeleteRequest_all     1
-    int num_ids;
+    int num_resultSetList;
     Z_ResultSetId **resultSetList;      /* OPTIONAL */
-#ifdef Z_OTHERINFO
     Z_OtherInformation *otherInfo;
-#endif
 } Z_DeleteResultSetRequest;
 
+typedef struct Z_ListStatuses {
+    int num;
+    Z_ListStatus **elements;
+} Z_ListStatuses;
+
 typedef struct Z_DeleteResultSetResponse
 {
     Z_ReferenceId *referenceId;        /* OPTIONAL */
     int *deleteOperationStatus;
-    int num_statuses;
-    Z_ListStatus *deleteListStatuses;  /* OPTIONAL */
+    Z_ListStatuses *deleteListStatuses;/* OPTIONAL */
     int *numberNotDeleted;             /* OPTIONAL */
-    int num_bulkStatuses;
-    Z_ListStatus *bulkStatuses;        /* OPTIONAL */
+    Z_ListStatuses *bulkStatuses;      /* OPTIONAL */
     char *deleteMessage;               /* OPTIONAL */
-#ifdef Z_OTHERINFO
     Z_OtherInformation *otherInfo;
-#endif
 } Z_DeleteResultSetResponse;
 
+/* ------------------------ CLOSE SERVICE ------------------- */
+
+typedef struct Z_Close
+{
+    Z_ReferenceId *referenceId;         /* OPTIONAL */
+    int *closeReason;
+#define Z_Close_finished           0
+#define Z_Close_shutdown           1
+#define Z_Close_systemProblem      2
+#define Z_Close_costLimit          3
+#define Z_Close_resources          4
+#define Z_Close_securityViolation  5
+#define Z_Close_protocolError      6
+#define Z_Close_lackOfActivity     7
+#define Z_Close_peerAbort          8
+#define Z_Close_unspecified        9
+    char *diagnosticInformation;          /* OPTIONAL */
+    Odr_oid *resourceReportFormat;        /* OPTIONAL */
+    Z_External *resourceReport;         /* OPTIONAL */
+    Z_OtherInformation *otherInfo;        /* OPTIONAL */
+} Z_Close;
+
+/* ------------------------ SEGMENTATION -------------------- */
+
+typedef struct Z_Segment
+{
+    Z_ReferenceId *referenceId;   /* OPTIONAL */
+    int *numberOfRecordsReturned;
+    int num_segmentRecords;
+    Z_NamePlusRecord **segmentRecords;
+    Z_OtherInformation *otherInfo;  /* OPTIONAL */
+} Z_Segment;
+
+/* ----------------------- Extended Services ---------------- */
+
+typedef struct Z_Permissions
+{
+    char *userId;                         
+    int num_allowableFunctions;
+    int **allowableFunctions;             
+#define Z_Permissions_delete              1
+#define Z_Permissions_modifyContents      2
+#define Z_Permissions_modifyPermissions   3
+#define Z_Permissions_present             4
+#define Z_Permissions_invoke              5
+} Z_Permissions;
+
+typedef struct Z_ExtendedServicesRequest
+{
+    Z_ReferenceId *referenceId;             /* OPTIONAL */
+    int *function;                        
+#define Z_ExtendedServicesRequest_create              1
+#define Z_ExtendedServicesRequest_delete              2
+#define Z_ExtendedServicesRequest_modify              3
+    Odr_oid *packageType;                 
+    char *packageName;                      /* OPTIONAL */
+    char *userId;                           /* OPTIONAL */
+    Z_IntUnit *retentionTime;               /* OPTIONAL */
+    Z_Permissions *permissions;             /* OPTIONAL */
+    char *description;                      /* OPTIONAL */
+    Z_External *taskSpecificParameters;     /* OPTIONAL */
+    int *waitAction;                      
+#define Z_ExtendedServicesRequest_wait                1
+#define Z_ExtendedServicesRequest_waitIfPossible      2
+#define Z_ExtendedServicesRequest_dontWait            3
+#define Z_ExtendedServicesRequest_dontReturnPackage   4
+    char *elements;             /* OPTIONAL */
+    Z_OtherInformation *otherInfo;          /* OPTIONAL */
+} Z_ExtendedServicesRequest;
+
+typedef struct Z_ExtendedServicesResponse
+{
+    Z_ReferenceId *referenceId;             /* OPTIONAL */
+    int *operationStatus;                 
+#define Z_ExtendedServicesResponse_done                1
+#define Z_ExtendedServicesResponse_accepted            2
+#define Z_ExtendedServicesResponse_failure             3
+    int num_diagnostics;
+    Z_DiagRec **diagnostics;                /* OPTIONAL */
+    Z_External *taskPackage;                /* OPTIONAL */
+    Z_OtherInformation *otherInfo;          /* OPTIONAL */
+} Z_ExtendedServicesResponse;
+
+/* ------------------------ Sort --------------------------- */
+
+typedef struct Z_SortAttributes
+{
+    Odr_oid *id;
+    Z_AttributeList *list;
+} Z_SortAttributes;
+
+typedef struct Z_SortKey
+{
+    int which;
+#define Z_SortKey_sortField             0
+#define Z_SortKey_elementSpec           1
+#define Z_SortKey_sortAttributes        2
+    union
+    {
+       char *sortField;
+       Z_Specification *elementSpec;
+       Z_SortAttributes *sortAttributes;
+    } u;
+} Z_SortKey;
+
+typedef struct Z_SortDbSpecific
+{
+    char *databaseName;
+    Z_SortKey *dbSort;
+} Z_SortDbSpecific;
+
+typedef struct Z_SortDbSpecificList
+{
+    int num_dbSpecific;
+    Z_SortDbSpecific **dbSpecific;
+} Z_SortDbSpecificList;
+
+typedef struct Z_SortElement
+{
+    int which;
+#define Z_SortElement_generic               0
+#define Z_SortElement_databaseSpecific      1
+    union
+    {
+       Z_SortKey *generic;
+       Z_SortDbSpecificList *databaseSpecific;
+    } u;
+} Z_SortElement;
+
+typedef struct Z_SortMissingValueAction
+{
+    int which;
+#define Z_SortMissingValAct_abort           0
+#define Z_SortMissingValAct_null            1
+#define Z_SortMissingValAct_valData         2
+    union
+    {
+       Odr_null *abort;
+       Odr_null *null;
+       Odr_oct *valData;
+    } u;
+} Z_SortMissingValueAction;
+
+typedef struct Z_SortKeySpec
+{
+    Z_SortElement *sortElement;
+    int *sortRelation;
+#define Z_SortRelation_ascending            0
+#define Z_SortRelation_descending           1
+#define Z_SortRelation_ascendingByFreq      3
+#define Z_SortRelation_descendingByFreq     4
+    int *caseSensitivity;
+#define Z_SortCase_caseSensitive            0
+#define Z_SortCase_caseInsensitive          1
+    Z_SortMissingValueAction *missingValueAction;  /* OPTIONAL */
+} Z_SortKeySpec;
+
+typedef struct Z_SortResponse
+{
+    Z_ReferenceId *referenceId;             /* OPTIONAL */
+    int *sortStatus;
+#define Z_SortStatus_success              0
+#define Z_SortStatus_partial_1            1
+#define Z_SortStatus_failure              2
+    int *resultSetStatus;                   /* OPTIONAL */
+#define Z_SortResultSetStatus_empty       1
+#define Z_SortResultSetStatus_interim     2
+#define Z_SortResultSetStatus_unchanged   3
+#define Z_SortResultSetStatus_none        4
+    Z_DiagRecs *diagnostics;                /* OPTIONAL */
+    Z_OtherInformation *otherInfo;          /* OPTIONAL */
+} Z_SortResponse;
+
+typedef struct Z_SortKeySpecList
+{
+    int num_specs;
+    Z_SortKeySpec **specs;
+} Z_SortKeySpecList;
+
+typedef struct Z_SortRequest
+{
+    Z_ReferenceId *referenceId;             /* OPTIONAL */
+    Z_StringList *inputResultSetNames;
+    char *sortedResultSetName;
+    Z_SortKeySpecList *sortSequence;
+    Z_OtherInformation *otherInfo;          /* OPTIONAL */
+} Z_SortRequest;
+
+/* ----------------------- Resource Report ------------------ */
+
+typedef struct Z_ResourceReportRequest
+{
+    Z_ReferenceId *referenceId;             /* OPTIONAL */
+    Z_ReferenceId *opId;                    /* OPTIONAL */
+    Odr_oid *prefResourceReportFormat;      /* OPTIONAL */
+    Z_OtherInformation *otherInfo;          /* OPTIONAL */
+} Z_ResourceReportRequest;
+
+typedef struct Z_ResourceReportResponse
+{
+    Z_ReferenceId *referenceId;             /* OPTIONAL */
+    int *resourceReportStatus;
+#define Z_ResourceReportStatus_success   0
+#define Z_ResourceReportStatus_partial   1
+#define Z_ResourceReportStatus_failure_1 2
+#define Z_ResourceReportStatus_failure_2 3
+#define Z_ResourceReportStatus_failure_3 4
+#define Z_ResourceReportStatus_failure_4 5
+#define Z_ResourceReportStatus_failure_5 6
+#define Z_ResourceReportStatus_failure_6 7
+    Z_External *resourceReport;             /* OPTIONAL */
+    Z_OtherInformation *otherInfo;          /* OPTIONAL */
+} Z_ResourceReportResponse;
+
 /* ------------------------ APDU ---------------------------- */
 
 typedef struct Z_APDU
 {    
-    enum Z_APDU_which
-    {
-       Z_APDU_initRequest,
-       Z_APDU_initResponse,
-       Z_APDU_searchRequest,
-       Z_APDU_searchResponse,
-       Z_APDU_presentRequest,
-       Z_APDU_presentResponse,
-       Z_APDU_deleteResultSetRequest,
-       Z_APDU_deleteResultSetResponse,
-       Z_APDU_resourceControlRequest,
-       Z_APDU_resourceControlResponse,
-       Z_APDU_triggerResourceControlRequest,
-       Z_APDU_scanRequest,
-       Z_APDU_scanResponse
-    } which;
+    int which;
+#define Z_APDU_initRequest 0
+#define Z_APDU_initResponse 1
+#define Z_APDU_searchRequest 2
+#define Z_APDU_searchResponse 3
+#define Z_APDU_presentRequest 4
+#define Z_APDU_presentResponse 5
+#define Z_APDU_deleteResultSetRequest 6
+#define Z_APDU_deleteResultSetResponse 7
+#define Z_APDU_resourceControlRequest 8
+#define Z_APDU_resourceControlResponse 9
+#define Z_APDU_triggerResourceControlRequest 10
+#define Z_APDU_scanRequest 11
+#define Z_APDU_scanResponse 12
+#define Z_APDU_segmentRequest 13
+#define Z_APDU_extendedServicesRequest 14
+#define Z_APDU_extendedServicesResponse 15
+#define Z_APDU_close 16
+#define Z_APDU_accessControlRequest 17
+#define Z_APDU_accessControlResponse 18
+#define Z_APDU_sortRequest 20
+#define Z_APDU_sortResponse 21
+#define Z_APDU_resourceReportRequest 22
+#define Z_APDU_resourceReportResponse 23
     union
     {
        Z_InitRequest  *initRequest;
@@ -763,29 +1259,86 @@ typedef struct Z_APDU
        Z_PresentResponse *presentResponse;
        Z_DeleteResultSetRequest *deleteResultSetRequest;
        Z_DeleteResultSetResponse *deleteResultSetResponse;
+       Z_AccessControlRequest *accessControlRequest;
+       Z_AccessControlResponse *accessControlResponse;
        Z_ResourceControlRequest *resourceControlRequest;
        Z_ResourceControlResponse *resourceControlResponse;
        Z_TriggerResourceControlRequest *triggerResourceControlRequest;
+       Z_ResourceReportRequest *resourceReportRequest;
+       Z_ResourceReportResponse *resourceReportResponse;
        Z_ScanRequest *scanRequest;
        Z_ScanResponse *scanResponse;
+       Z_SortRequest *sortRequest;
+       Z_SortResponse *sortResponse;
+       Z_Segment *segmentRequest;
+       Z_ExtendedServicesRequest *extendedServicesRequest;
+       Z_ExtendedServicesResponse *extendedServicesResponse;
+       Z_Close *close;
     } u;
 } Z_APDU;
 
-int z_APDU(ODR o, Z_APDU **p, int opt);
-
-Z_InitRequest *zget_InitRequest(ODR o);
-Z_InitResponse *zget_InitResponse(ODR o);
-Z_SearchRequest *zget_SearchRequest(ODR o);
-Z_SearchResponse *zget_SearchResponse(ODR o);
-Z_PresentRequest *zget_PresentRequest(ODR o);
-Z_PresentResponse *zget_PresentResponse(ODR o);
-Z_DeleteResultSetRequest *zget_DeleteResultSetRequest(ODR o);
-Z_DeleteResultSetResponse *zget_DeleteResultSetResponse(ODR o);
-Z_ScanRequest *zget_ScanRequest(ODR o);
-Z_ScanResponse *zget_ScanResponse(ODR o);
-Z_TriggerResourceControlRequest *zget_TriggerResourceControlRequest(ODR o);
-Z_ResourceControlRequest *zget_ResourceControlRequest(ODR o);
-Z_ResourceControlResponse *zget_ResourceControlResponse(ODR o);
-Z_APDU *zget_APDU(ODR o, enum Z_APDU_which which);
+YAZ_EXPORT int z_APDU(ODR o, Z_APDU **p, int opt, const char *name);
+YAZ_EXPORT int z_SUTRS(ODR o, Odr_oct **p, int opt, const char *name);
+
+YAZ_EXPORT Z_InitRequest *zget_InitRequest(ODR o);
+YAZ_EXPORT Z_InitResponse *zget_InitResponse(ODR o);
+YAZ_EXPORT Z_SearchRequest *zget_SearchRequest(ODR o);
+YAZ_EXPORT Z_SearchResponse *zget_SearchResponse(ODR o);
+YAZ_EXPORT Z_PresentRequest *zget_PresentRequest(ODR o);
+YAZ_EXPORT Z_PresentResponse *zget_PresentResponse(ODR o);
+YAZ_EXPORT Z_DeleteResultSetRequest *zget_DeleteResultSetRequest(ODR o);
+YAZ_EXPORT Z_DeleteResultSetResponse *zget_DeleteResultSetResponse(ODR o);
+YAZ_EXPORT Z_ScanRequest *zget_ScanRequest(ODR o);
+YAZ_EXPORT Z_ScanResponse *zget_ScanResponse(ODR o);
+YAZ_EXPORT Z_TriggerResourceControlRequest *zget_TriggerResourceControlRequest(ODR o);
+YAZ_EXPORT Z_ResourceControlRequest *zget_ResourceControlRequest(ODR o);
+YAZ_EXPORT Z_ResourceControlResponse *zget_ResourceControlResponse(ODR o);
+YAZ_EXPORT Z_Close *zget_Close(ODR o);
+YAZ_EXPORT int z_StringList(ODR o, Z_StringList **p, int opt,
+                           const char *name);
+YAZ_EXPORT int z_InternationalString(ODR o, char **p, int opt,
+                                    const char *name);
+YAZ_EXPORT int z_OtherInformation(ODR o, Z_OtherInformation **p, int opt,
+                                 const char *naem);
+YAZ_EXPORT int z_ElementSetName(ODR o, char **p, int opt, const char *name);
+YAZ_EXPORT int z_IntUnit(ODR o, Z_IntUnit **p, int opt, const char *name);
+YAZ_EXPORT int z_Unit(ODR o, Z_Unit **p, int opt, const char *name);
+YAZ_EXPORT int z_DatabaseName(ODR o, Z_DatabaseName **p, int opt,
+                             const char *name);
+YAZ_EXPORT int z_StringOrNumeric(ODR o, Z_StringOrNumeric **p, int opt,
+                                const char *name);
+YAZ_EXPORT int z_OtherInformationUnit(ODR o, Z_OtherInformationUnit **p,
+                                     int opt, const char *name);
+YAZ_EXPORT int z_Term(ODR o, Z_Term **p, int opt, const char *name);
+YAZ_EXPORT int z_Specification(ODR o, Z_Specification **p, int opt,
+                              const char *name);
+YAZ_EXPORT int z_Permissions(ODR o, Z_Permissions **p, int opt,
+                            const char *name);
+YAZ_EXPORT int z_DiagRec(ODR o, Z_DiagRec **p, int opt, const char *name);
+YAZ_EXPORT int z_DiagRecs(ODR o, Z_DiagRecs **p, int opt, const char *name);
+YAZ_EXPORT int z_AttributeList(ODR o, Z_AttributeList **p, int opt,
+                              const char *name);
+YAZ_EXPORT int z_DefaultDiagFormat(ODR o, Z_DefaultDiagFormat **p, int opt,
+                                  const char *name);
+YAZ_EXPORT Z_APDU *zget_APDU(ODR o, int which);
+YAZ_EXPORT int z_Query(ODR o, Z_Query **p, int opt, const char *name);
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <prt-rsc.h>
+#include <prt-acc.h>
+#include <prt-exp.h>
+#include <prt-grs.h>
+#include <prt-arc.h>
+#include <prt-exd.h>
+#include <prt-dia.h>
+#include <prt-esp.h>
+#include <prt-add.h>
+
+#include <prt-dat.h>
+#include <prt-univ.h>
+#include <prt-ext.h>
 
 #endif