// @@@ START COPYRIGHT @@@
//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License.  You may obtain a copy of the License at
//
//   http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied.  See the License for the
// specific language governing permissions and limitations
// under the License.
//
// @@@ END COPYRIGHT @@@
#ifndef ODBCAS_H_
#define ODBCAS_H_
/*
 * Translation unit: ODBCAS
 * Generated by CNPGEN(TANTAU CNPGEN TANTAU_AG_PC8 20001120.103031) on Fri Jun 18 12:53:22 2004
 * C++ constructs used
 * Header file for use with the CEE
 * Server functionality included
 */
#include <stdarg.h>
#include <cee.h>
#if CEE_H_VERSION != 19991123
#error Version mismatch CEE_H_VERSION != 19991123
#endif
#include <idltype.h>
#if IDL_TYPE_H_VERSION != 19971225
#error Version mismatch IDL_TYPE_H_VERSION != 19971225
#endif
struct DATASOURCE_STATUS_t {
  SQL_IDENTIFIER_def DSName;
  char pad_to_offset_132_[3];
  DS_AUTOMATION_def DSAutomation;
  IDL_short defaultFlag;
  char pad_to_offset_140_[2];
  IDL_long DSState;
  IDL_long MaxSrvrCnt;
  IDL_long InitSrvrCnt;
  IDL_long AvailSrvrCnt;
  IDL_long StartAheadCnt;
  IDL_long CurrentSrvrRegistered;
  IDL_long CurrentSrvrConnected;
  TIME_def StateChangeTime;
};
typedef DATASOURCE_STATUS_t DATASOURCE_STATUS_def;
#define DATASOURCE_STATUS_def_cin_ ((char *) "b11+d128+h1+IFFFFFFFF")
#define DATASOURCE_STATUS_def_csz_ ((IDL_unsigned_long) 21)
struct SRVR_STATUS_t {
  IDL_long srvrType;
  IDL_OBJECT_def srvrObjRef;
  IDL_short nodeId;
  char pad_to_offset_136_[2];
  IDL_unsigned_long srvrProcessId;
  SQL_IDENTIFIER_def DSName;
  IDL_char processName[9];
  char pad_to_offset_280_[2];
  IDL_long srvrState;
  IDL_char computerName[16];
  IDL_unsigned_long clientProcessId;
  IDL_string userName;
  IDL_PTR_PAD(userName, 1)
  IDL_string windowText;
  IDL_PTR_PAD(windowText, 1)
  DIALOGUE_ID_def dialogueId;
  TIME_def lastUpdatedTime;
  VERSION_def srvrVersion;
  char pad_to_size_344_[4];
};
typedef SRVR_STATUS_t SRVR_STATUS_def;
#define SRVR_STATUS_def_cin_ ((char *) \
    "b14+Fa1+128+CIKd128+a1+9+CFa1+16+CKd0+d0+FFb4+IIIK")
#define SRVR_STATUS_def_csz_ ((IDL_unsigned_long) 50)
struct AS_CFG_STATUS_t {
  IDL_short ASNodeId;
  char pad_to_offset_4_[2];
  IDL_long ASProcessId;
  IDL_long ASSrvrState;
  IDL_char ASProcessName[9];
  IDL_OBJECT_def ASSrvrObjRef;
  char pad_to_offset_152_[3];
  TIME_def ASLastUpdatedTime;
  VERSION_def ASVersion;
  IDL_short CfgNodeId;
  char pad_to_offset_172_[2];
  IDL_long CfgProcessId;
  IDL_long CfgSrvrState;
  IDL_char CfgProcessName[9];
  IDL_OBJECT_def CfgSrvrObjRef;
  char pad_to_offset_320_[3];
  TIME_def CfgLastUpdatedTime;
  VERSION_def CfgVersion;
};
typedef AS_CFG_STATUS_t AS_CFG_STATUS_def;
#define AS_CFG_STATUS_def_cin_ ((char *) \
    "b14+IFFa1+9+Ca1+128+CFb4+IIIKIFFa1+9+Ca1+128+CFb4+IIIK")
#define AS_CFG_STATUS_def_csz_ ((IDL_unsigned_long) 54)
typedef struct DATASOURCE_STATUS_LIST_def_seq_ {
  IDL_unsigned_long _length;
  char pad_to_offset_8_[4];
  DATASOURCE_STATUS_def *_buffer;
  IDL_PTR_PAD(_buffer, 1)
} DATASOURCE_STATUS_LIST_def;
#define DATASOURCE_STATUS_LIST_def_cin_ ((char *) "c0+b11+d128+h1+IFFFFFFFF")
#define DATASOURCE_STATUS_LIST_def_csz_ ((IDL_unsigned_long) 24)
typedef struct SRVR_STATUS_LIST_def_seq_ {
  IDL_unsigned_long _length;
  char pad_to_offset_8_[4];
  SRVR_STATUS_def *_buffer;
  IDL_PTR_PAD(_buffer, 1)
} SRVR_STATUS_LIST_def;
#define SRVR_STATUS_LIST_def_cin_ ((char *) \
    "c0+b14+Fa1+128+CIKd128+a1+9+CFa1+16+CKd0+d0+FFb4+IIIK")
#define SRVR_STATUS_LIST_def_csz_ ((IDL_unsigned_long) 53)

/*******************
 * Module 'odbcas' *
 *******************/

/****************************
 * Interface 'odbcas_ASSvc' *
 ****************************/
typedef IDL_Object odbcas_ASSvc;
struct odbcas_ASSvc_ASParamError { /* Exception */ 
  IDL_string ErrorText;
  IDL_PTR_PAD(ErrorText, 1)
};
struct odbcas_ASSvc_ASTimeout { /* Exception */ 
  IDL_string ErrorText;
  IDL_PTR_PAD(ErrorText, 1)
};
/* Exception odbcas_ASSvc_ASNoSrvrHdl has no members */
struct odbcas_ASSvc_ASRejectRegistry { /* Exception */ 
  IDL_string ErrorText;
  IDL_PTR_PAD(ErrorText, 1)
};
/* Exception odbcas_ASSvc_ASRegistryFailed has no members */
/* Exception odbcas_ASSvc_ASTryAgain has no members */
struct odbcas_ASSvc_ASStateChangeError { /* Exception */ 
  IDL_string ErrorText;
  IDL_PTR_PAD(ErrorText, 1)
};
struct odbcas_ASSvc_SQLError { /* Exception */ 
  ERROR_DESC_LIST_def errorList;
};
/* Exception odbcas_ASSvc_PortNotAvailable has no members */
/* Exception odbcas_ASSvc_DSNotFound has no members */
/* Exception odbcas_ASSvc_DSAlreadyStopped has no members */
/* Exception odbcas_ASSvc_DSAlreadyStarted has no members */
/* Exception odbcas_ASSvc_DSStateChangeError has no members */
/* Exception odbcas_ASSvc_ProcessStopError has no members */
struct odbcas_ASSvc_ASNotAvailable { /* Exception */ 
  IDL_string ErrorText;
  IDL_PTR_PAD(ErrorText, 1)
};
struct odbcas_ASSvc_DSNotAvailable { /* Exception */ 
  IDL_string ErrorText;
  IDL_PTR_PAD(ErrorText, 1)
};
/* Exception odbcas_ASSvc_SrvrNotFound has no members */
/* Exception odbcas_ASSvc_SrvrInUseByAnotherClient has no members */
/* Exception odbcas_ASSvc_InvalidUser has no members */
/* Exception odbcas_ASSvc_SrvrCreateError has no members */
/* Exception odbcas_ASSvc_CfgSrvrFailed has no members */
struct odbcas_ASSvc_LogonUserFailure { /* Exception */ 
  IDL_long errorCode;
};
/* Exception odbcas_ASSvc_TraceAlreadyEnabled has no members */
/* Exception odbcas_ASSvc_TraceAlreadyDisabled has no members */
/* Exception odbcas_ASSvc_TraceEnableError has no members */
/* Exception odbcas_ASSvc_TraceDisableError has no members */

/***************************************
 * Operation 'odbcas_ASSvc_RegProcess' *
 ***************************************/

/*
 * Exception number constants for
 * operation 'odbcas_ASSvc_RegProcess'
 */
#define odbcas_ASSvc_RegProcess_ASParamError_exn_ 1
#define odbcas_ASSvc_RegProcess_ASTimeout_exn_ 2
#define odbcas_ASSvc_RegProcess_ASRegistryFailed_exn_ 3
#define odbcas_ASSvc_RegProcess_ASRejectRegistry_exn_ 4
/*
 * Exception union for
 * operation 'odbcas_ASSvc_RegProcess'
 */
struct odbcas_ASSvc_RegProcess_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbcas_ASSvc_ASParamError ASParamError;
    odbcas_ASSvc_ASTimeout ASTimeout;
    odbcas_ASSvc_ASRejectRegistry ASRejectRegistry;
  } u;
};
/*
 * Local index for operation 'odbcas_ASSvc_RegProcess'
 */
#define odbcas_ASSvc_RegProcess_ldx_ ((IDL_unsigned_long) 1)
/*
 * Operation synopsis for operation 'odbcas_ASSvc_RegProcess'
 */
#define odbcas_ASSvc_RegProcess_osy_ ((IDL_long) -671528134)
/*
 * Asynchronous method function pointer type for
 * operation 'odbcas_ASSvc_RegProcess'
 */
typedef void (*odbcas_ASSvc_RegProcess_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const VERSION_def *intfVersion
  , /* In    */ IDL_long srvrType
  , /* In    */ const IDL_char *srvrObjRef
  , /* In    */ const PROCESS_ID_def *nskProcessInfo
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbcas_ASSvc_RegProcess'
 */
extern "C" void
odbcas_ASSvc_RegProcess_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const VERSION_def *intfVersion
  , /* In    */ IDL_long srvrType
  , /* In    */ const IDL_char *srvrObjRef
  , /* In    */ const PROCESS_ID_def *nskProcessInfo
  );
/*
 * Set Asynchronous Method for
 * operation 'odbcas_ASSvc_RegProcess'
 */
extern "C" CEE_status
odbcas_ASSvc_RegProcess_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_RegProcess_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbcas_ASSvc_RegProcess'
 */
extern "C" CEE_status
odbcas_ASSvc_RegProcess_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbcas_ASSvc_RegProcess_exc_ *exception_
  , /* In    */ const SRVR_CONTEXT_def *srvrContext
  );
/*
 * Synchronous method function pointer type for
 * operation'odbcas_ASSvc_RegProcess'
 */
typedef void (*odbcas_ASSvc_RegProcess_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_RegProcess_exc_ *exception_
  , /* In    */ const VERSION_def *intfVersion
  , /* In    */ IDL_long srvrType
  , /* In    */ const IDL_char *srvrObjRef
  , /* In    */ const PROCESS_ID_def *nskProcessInfo
  , /* Out   */ SRVR_CONTEXT_def *srvrContext
  );
/*
 * Synchronous method function prototype for
 * operation 'odbcas_ASSvc_RegProcess'
 */
extern "C" void
odbcas_ASSvc_RegProcess_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_RegProcess_exc_ *exception_
  , /* In    */ const VERSION_def *intfVersion
  , /* In    */ IDL_long srvrType
  , /* In    */ const IDL_char *srvrObjRef
  , /* In    */ const PROCESS_ID_def *nskProcessInfo
  , /* Out   */ SRVR_CONTEXT_def *srvrContext
  );
/*
 * Set Synchronous method for
 * operation 'odbcas_ASSvc_RegProcess'
 */
extern "C" CEE_status
odbcas_ASSvc_RegProcess_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_RegProcess_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbcas_ASSvc_RegProcess'
 */
extern "C" CEE_status
odbcas_ASSvc_RegProcess_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_RegProcess_smt_ method_
  );

/*****************************************
 * Operation 'odbcas_ASSvc_GetObjRefHdl' *
 *****************************************/

/*
 * Exception number constants for
 * operation 'odbcas_ASSvc_GetObjRefHdl'
 */
#define odbcas_ASSvc_GetObjRefHdl_ASParamError_exn_ 1
#define odbcas_ASSvc_GetObjRefHdl_ASTimeout_exn_ 2
#define odbcas_ASSvc_GetObjRefHdl_ASNoSrvrHdl_exn_ 3
#define odbcas_ASSvc_GetObjRefHdl_ASTryAgain_exn_ 4
#define odbcas_ASSvc_GetObjRefHdl_ASNotAvailable_exn_ 5
#define odbcas_ASSvc_GetObjRefHdl_DSNotAvailable_exn_ 6
#define odbcas_ASSvc_GetObjRefHdl_PortNotAvailable_exn_ 7
#define odbcas_ASSvc_GetObjRefHdl_InvalidUser_exn_ 8
#define odbcas_ASSvc_GetObjRefHdl_LogonUserFailure_exn_ 9
/*
 * Exception union for
 * operation 'odbcas_ASSvc_GetObjRefHdl'
 */
struct odbcas_ASSvc_GetObjRefHdl_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbcas_ASSvc_ASParamError ASParamError;
    odbcas_ASSvc_ASTimeout ASTimeout;
    odbcas_ASSvc_ASNotAvailable ASNotAvailable;
    odbcas_ASSvc_DSNotAvailable DSNotAvailable;
    odbcas_ASSvc_LogonUserFailure LogonUserFailure;
  } u;
};
/*
 * Local index for operation 'odbcas_ASSvc_GetObjRefHdl'
 */
#define odbcas_ASSvc_GetObjRefHdl_ldx_ ((IDL_unsigned_long) 2)
/*
 * Operation synopsis for operation 'odbcas_ASSvc_GetObjRefHdl'
 */
#define odbcas_ASSvc_GetObjRefHdl_osy_ ((IDL_long) 2027146038)
/*
 * Asynchronous method function pointer type for
 * operation 'odbcas_ASSvc_GetObjRefHdl'
 */
typedef void (*odbcas_ASSvc_GetObjRefHdl_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const CONNECTION_CONTEXT_def *inContext
  , /* In    */ const USER_DESC_def *userDesc
  , /* In    */ IDL_long srvrType
  , /* In    */ IDL_short retryCount
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbcas_ASSvc_GetObjRefHdl'
 */
extern "C" void
odbcas_ASSvc_GetObjRefHdl_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const CONNECTION_CONTEXT_def *inContext
  , /* In    */ const USER_DESC_def *userDesc
  , /* In    */ IDL_long srvrType
  , /* In    */ IDL_short retryCount
  );
/*
 * Set Asynchronous Method for
 * operation 'odbcas_ASSvc_GetObjRefHdl'
 */
extern "C" CEE_status
odbcas_ASSvc_GetObjRefHdl_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_GetObjRefHdl_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbcas_ASSvc_GetObjRefHdl'
 */
extern "C" CEE_status
odbcas_ASSvc_GetObjRefHdl_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbcas_ASSvc_GetObjRefHdl_exc_ *exception_
  , /* In    */ const IDL_char *srvrObjRef
  , /* In    */ DIALOGUE_ID_def dialogueId
  , /* In    */ const IDL_char *dataSource
  , /* In    */ const USER_SID_def *userSid
  , /* In    */ const VERSION_LIST_def *versionList
  );
/*
 * Synchronous method function pointer type for
 * operation'odbcas_ASSvc_GetObjRefHdl'
 */
typedef void (*odbcas_ASSvc_GetObjRefHdl_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_GetObjRefHdl_exc_ *exception_
  , /* In    */ const CONNECTION_CONTEXT_def *inContext
  , /* In    */ const USER_DESC_def *userDesc
  , /* In    */ IDL_long srvrType
  , /* In    */ IDL_short retryCount
  , /* Out   */ IDL_char *srvrObjRef
  , /* Out   */ DIALOGUE_ID_def *dialogueId
  , /* Out   */ IDL_char *dataSource
  , /* Out   */ USER_SID_def *userSid
  , /* Out   */ VERSION_LIST_def *versionList
  );
/*
 * Synchronous method function prototype for
 * operation 'odbcas_ASSvc_GetObjRefHdl'
 */
extern "C" void
odbcas_ASSvc_GetObjRefHdl_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_GetObjRefHdl_exc_ *exception_
  , /* In    */ const CONNECTION_CONTEXT_def *inContext
  , /* In    */ const USER_DESC_def *userDesc
  , /* In    */ IDL_long srvrType
  , /* In    */ IDL_short retryCount
  , /* Out   */ IDL_char *srvrObjRef
  , /* Out   */ DIALOGUE_ID_def *dialogueId
  , /* Out   */ IDL_char *dataSource
  , /* Out   */ USER_SID_def *userSid
  , /* Out   */ VERSION_LIST_def *versionList
  );
/*
 * Set Synchronous method for
 * operation 'odbcas_ASSvc_GetObjRefHdl'
 */
extern "C" CEE_status
odbcas_ASSvc_GetObjRefHdl_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_GetObjRefHdl_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbcas_ASSvc_GetObjRefHdl'
 */
extern "C" CEE_status
odbcas_ASSvc_GetObjRefHdl_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_GetObjRefHdl_smt_ method_
  );

/********************************************
 * Operation 'odbcas_ASSvc_UpdateSrvrState' *
 ********************************************/

/*
 * Exception number constants for
 * operation 'odbcas_ASSvc_UpdateSrvrState'
 */
#define odbcas_ASSvc_UpdateSrvrState_ASParamError_exn_ 1
#define odbcas_ASSvc_UpdateSrvrState_ASTimeout_exn_ 2
#define odbcas_ASSvc_UpdateSrvrState_ASStateChangeError_exn_ 3
/*
 * Exception union for
 * operation 'odbcas_ASSvc_UpdateSrvrState'
 */
struct odbcas_ASSvc_UpdateSrvrState_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbcas_ASSvc_ASParamError ASParamError;
    odbcas_ASSvc_ASTimeout ASTimeout;
    odbcas_ASSvc_ASStateChangeError ASStateChangeError;
  } u;
};
/*
 * Local index for operation 'odbcas_ASSvc_UpdateSrvrState'
 */
#define odbcas_ASSvc_UpdateSrvrState_ldx_ ((IDL_unsigned_long) 3)
/*
 * Operation synopsis for operation 'odbcas_ASSvc_UpdateSrvrState'
 */
#define odbcas_ASSvc_UpdateSrvrState_osy_ ((IDL_long) -1019394971)
/*
 * Asynchronous method function pointer type for
 * operation 'odbcas_ASSvc_UpdateSrvrState'
 */
typedef void (*odbcas_ASSvc_UpdateSrvrState_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ IDL_long srvrType
  , /* In    */ const IDL_char *srvrObjRef
  , /* In    */ IDL_long srvrState
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbcas_ASSvc_UpdateSrvrState'
 */
extern "C" void
odbcas_ASSvc_UpdateSrvrState_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ IDL_long srvrType
  , /* In    */ const IDL_char *srvrObjRef
  , /* In    */ IDL_long srvrState
  );
/*
 * Set Asynchronous Method for
 * operation 'odbcas_ASSvc_UpdateSrvrState'
 */
extern "C" CEE_status
odbcas_ASSvc_UpdateSrvrState_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_UpdateSrvrState_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbcas_ASSvc_UpdateSrvrState'
 */
extern "C" CEE_status
odbcas_ASSvc_UpdateSrvrState_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbcas_ASSvc_UpdateSrvrState_exc_ *exception_
  , /* In    */ IDL_long TraceType
  , /* In    */ IDL_long StatisticsType
  , /* In    */ IDL_long ContextType
  , /* In    */ const SRVR_CONTEXT_def *srvrContext
  );
/*
 * Synchronous method function pointer type for
 * operation'odbcas_ASSvc_UpdateSrvrState'
 */
typedef void (*odbcas_ASSvc_UpdateSrvrState_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_UpdateSrvrState_exc_ *exception_
  , /* In    */ IDL_long srvrType
  , /* In    */ const IDL_char *srvrObjRef
  , /* In    */ IDL_long srvrState
  , /* Out   */ IDL_long *TraceType
  , /* Out   */ IDL_long *StatisticsType
  , /* Out   */ IDL_long *ContextType
  , /* Out   */ SRVR_CONTEXT_def *srvrContext
  );
/*
 * Synchronous method function prototype for
 * operation 'odbcas_ASSvc_UpdateSrvrState'
 */
extern "C" void
odbcas_ASSvc_UpdateSrvrState_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_UpdateSrvrState_exc_ *exception_
  , /* In    */ IDL_long srvrType
  , /* In    */ const IDL_char *srvrObjRef
  , /* In    */ IDL_long srvrState
  , /* Out   */ IDL_long *TraceType
  , /* Out   */ IDL_long *StatisticsType
  , /* Out   */ IDL_long *ContextType
  , /* Out   */ SRVR_CONTEXT_def *srvrContext
  );
/*
 * Set Synchronous method for
 * operation 'odbcas_ASSvc_UpdateSrvrState'
 */
extern "C" CEE_status
odbcas_ASSvc_UpdateSrvrState_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_UpdateSrvrState_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbcas_ASSvc_UpdateSrvrState'
 */
extern "C" CEE_status
odbcas_ASSvc_UpdateSrvrState_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_UpdateSrvrState_smt_ method_
  );

/********************************************
 * Operation 'odbcas_ASSvc_SrvrMonitorCall' *
 ********************************************/
/*
 * Exception union for
 * operation 'odbcas_ASSvc_SrvrMonitorCall'
 */
struct odbcas_ASSvc_SrvrMonitorCall_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
};
/*
 * Local index for operation 'odbcas_ASSvc_SrvrMonitorCall'
 */
#define odbcas_ASSvc_SrvrMonitorCall_ldx_ ((IDL_unsigned_long) 4)
/*
 * Operation synopsis for operation 'odbcas_ASSvc_SrvrMonitorCall'
 */
#define odbcas_ASSvc_SrvrMonitorCall_osy_ ((IDL_long) -811446880)
/*
 * Asynchronous method function pointer type for
 * operation 'odbcas_ASSvc_SrvrMonitorCall'
 */
typedef void (*odbcas_ASSvc_SrvrMonitorCall_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ IDL_long srvrType
  , /* In    */ const IDL_char *srvrObjRef
  , /* In    */ IDL_long DSId
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbcas_ASSvc_SrvrMonitorCall'
 */
extern "C" void
odbcas_ASSvc_SrvrMonitorCall_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ IDL_long srvrType
  , /* In    */ const IDL_char *srvrObjRef
  , /* In    */ IDL_long DSId
  );
/*
 * Set Asynchronous Method for
 * operation 'odbcas_ASSvc_SrvrMonitorCall'
 */
extern "C" CEE_status
odbcas_ASSvc_SrvrMonitorCall_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_SrvrMonitorCall_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbcas_ASSvc_SrvrMonitorCall'
 */
extern "C" CEE_status
odbcas_ASSvc_SrvrMonitorCall_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbcas_ASSvc_SrvrMonitorCall_exc_ *exception_
  );
/*
 * Synchronous method function pointer type for
 * operation'odbcas_ASSvc_SrvrMonitorCall'
 */
typedef void (*odbcas_ASSvc_SrvrMonitorCall_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_SrvrMonitorCall_exc_ *exception_
  , /* In    */ IDL_long srvrType
  , /* In    */ const IDL_char *srvrObjRef
  , /* In    */ IDL_long DSId
  );
/*
 * Synchronous method function prototype for
 * operation 'odbcas_ASSvc_SrvrMonitorCall'
 */
extern "C" void
odbcas_ASSvc_SrvrMonitorCall_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_SrvrMonitorCall_exc_ *exception_
  , /* In    */ IDL_long srvrType
  , /* In    */ const IDL_char *srvrObjRef
  , /* In    */ IDL_long DSId
  );
/*
 * Set Synchronous method for
 * operation 'odbcas_ASSvc_SrvrMonitorCall'
 */
extern "C" CEE_status
odbcas_ASSvc_SrvrMonitorCall_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_SrvrMonitorCall_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbcas_ASSvc_SrvrMonitorCall'
 */
extern "C" CEE_status
odbcas_ASSvc_SrvrMonitorCall_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_SrvrMonitorCall_smt_ method_
  );

/************************************
 * Operation 'odbcas_ASSvc_StartAS' *
 ************************************/

/*
 * Exception number constants for
 * operation 'odbcas_ASSvc_StartAS'
 */
#define odbcas_ASSvc_StartAS_ASParamError_exn_ 1
#define odbcas_ASSvc_StartAS_DSAlreadyStarted_exn_ 2
#define odbcas_ASSvc_StartAS_DSStateChangeError_exn_ 3
#define odbcas_ASSvc_StartAS_PortNotAvailable_exn_ 4
#define odbcas_ASSvc_StartAS_SQLError_exn_ 5
#define odbcas_ASSvc_StartAS_ASTryAgain_exn_ 6
#define odbcas_ASSvc_StartAS_SrvrCreateError_exn_ 7
#define odbcas_ASSvc_StartAS_CfgSrvrFailed_exn_ 8
/*
 * Exception union for
 * operation 'odbcas_ASSvc_StartAS'
 */
struct odbcas_ASSvc_StartAS_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbcas_ASSvc_ASParamError ASParamError;
    odbcas_ASSvc_SQLError SQLError;
  } u;
};
/*
 * Local index for operation 'odbcas_ASSvc_StartAS'
 */
#define odbcas_ASSvc_StartAS_ldx_ ((IDL_unsigned_long) 5)
/*
 * Operation synopsis for operation 'odbcas_ASSvc_StartAS'
 */
#define odbcas_ASSvc_StartAS_osy_ ((IDL_long) 478578729)
/*
 * Asynchronous method function pointer type for
 * operation 'odbcas_ASSvc_StartAS'
 */
typedef void (*odbcas_ASSvc_StartAS_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbcas_ASSvc_StartAS'
 */
extern "C" void
odbcas_ASSvc_StartAS_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  );
/*
 * Set Asynchronous Method for
 * operation 'odbcas_ASSvc_StartAS'
 */
extern "C" CEE_status
odbcas_ASSvc_StartAS_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_StartAS_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbcas_ASSvc_StartAS'
 */
extern "C" CEE_status
odbcas_ASSvc_StartAS_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbcas_ASSvc_StartAS_exc_ *exception_
  , /* In    */ const ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function pointer type for
 * operation'odbcas_ASSvc_StartAS'
 */
typedef void (*odbcas_ASSvc_StartAS_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_StartAS_exc_ *exception_
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function prototype for
 * operation 'odbcas_ASSvc_StartAS'
 */
extern "C" void
odbcas_ASSvc_StartAS_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_StartAS_exc_ *exception_
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Set Synchronous method for
 * operation 'odbcas_ASSvc_StartAS'
 */
extern "C" CEE_status
odbcas_ASSvc_StartAS_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_StartAS_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbcas_ASSvc_StartAS'
 */
extern "C" CEE_status
odbcas_ASSvc_StartAS_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_StartAS_smt_ method_
  );

/***********************************
 * Operation 'odbcas_ASSvc_StopAS' *
 ***********************************/

/*
 * Exception number constants for
 * operation 'odbcas_ASSvc_StopAS'
 */
#define odbcas_ASSvc_StopAS_ASParamError_exn_ 1
#define odbcas_ASSvc_StopAS_DSStateChangeError_exn_ 2
#define odbcas_ASSvc_StopAS_ProcessStopError_exn_ 3
/*
 * Exception union for
 * operation 'odbcas_ASSvc_StopAS'
 */
struct odbcas_ASSvc_StopAS_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbcas_ASSvc_ASParamError ASParamError;
  } u;
};
/*
 * Local index for operation 'odbcas_ASSvc_StopAS'
 */
#define odbcas_ASSvc_StopAS_ldx_ ((IDL_unsigned_long) 6)
/*
 * Operation synopsis for operation 'odbcas_ASSvc_StopAS'
 */
#define odbcas_ASSvc_StopAS_osy_ ((IDL_long) 39137010)
/*
 * Asynchronous method function pointer type for
 * operation 'odbcas_ASSvc_StopAS'
 */
typedef void (*odbcas_ASSvc_StopAS_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ IDL_long StopType
  , /* In    */ IDL_string ReasonText
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbcas_ASSvc_StopAS'
 */
extern "C" void
odbcas_ASSvc_StopAS_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ IDL_long StopType
  , /* In    */ IDL_string ReasonText
  );
/*
 * Set Asynchronous Method for
 * operation 'odbcas_ASSvc_StopAS'
 */
extern "C" CEE_status
odbcas_ASSvc_StopAS_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_StopAS_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbcas_ASSvc_StopAS'
 */
extern "C" CEE_status
odbcas_ASSvc_StopAS_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbcas_ASSvc_StopAS_exc_ *exception_
  );
/*
 * Synchronous method function pointer type for
 * operation'odbcas_ASSvc_StopAS'
 */
typedef void (*odbcas_ASSvc_StopAS_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_StopAS_exc_ *exception_
  , /* In    */ IDL_long StopType
  , /* In    */ IDL_string ReasonText
  );
/*
 * Synchronous method function prototype for
 * operation 'odbcas_ASSvc_StopAS'
 */
extern "C" void
odbcas_ASSvc_StopAS_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_StopAS_exc_ *exception_
  , /* In    */ IDL_long StopType
  , /* In    */ IDL_string ReasonText
  );
/*
 * Set Synchronous method for
 * operation 'odbcas_ASSvc_StopAS'
 */
extern "C" CEE_status
odbcas_ASSvc_StopAS_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_StopAS_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbcas_ASSvc_StopAS'
 */
extern "C" CEE_status
odbcas_ASSvc_StopAS_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_StopAS_smt_ method_
  );

/************************************
 * Operation 'odbcas_ASSvc_StartDS' *
 ************************************/

/*
 * Exception number constants for
 * operation 'odbcas_ASSvc_StartDS'
 */
#define odbcas_ASSvc_StartDS_ASParamError_exn_ 1
#define odbcas_ASSvc_StartDS_DSNotFound_exn_ 2
#define odbcas_ASSvc_StartDS_DSAlreadyStarted_exn_ 3
#define odbcas_ASSvc_StartDS_DSStateChangeError_exn_ 4
#define odbcas_ASSvc_StartDS_PortNotAvailable_exn_ 5
#define odbcas_ASSvc_StartDS_SQLError_exn_ 6
#define odbcas_ASSvc_StartDS_SrvrCreateError_exn_ 7
/*
 * Exception union for
 * operation 'odbcas_ASSvc_StartDS'
 */
struct odbcas_ASSvc_StartDS_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbcas_ASSvc_ASParamError ASParamError;
    odbcas_ASSvc_SQLError SQLError;
  } u;
};
/*
 * Local index for operation 'odbcas_ASSvc_StartDS'
 */
#define odbcas_ASSvc_StartDS_ldx_ ((IDL_unsigned_long) 7)
/*
 * Operation synopsis for operation 'odbcas_ASSvc_StartDS'
 */
#define odbcas_ASSvc_StartDS_osy_ ((IDL_long) -946920360)
/*
 * Asynchronous method function pointer type for
 * operation 'odbcas_ASSvc_StartDS'
 */
typedef void (*odbcas_ASSvc_StartDS_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const IDL_char *DSName
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbcas_ASSvc_StartDS'
 */
extern "C" void
odbcas_ASSvc_StartDS_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const IDL_char *DSName
  );
/*
 * Set Asynchronous Method for
 * operation 'odbcas_ASSvc_StartDS'
 */
extern "C" CEE_status
odbcas_ASSvc_StartDS_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_StartDS_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbcas_ASSvc_StartDS'
 */
extern "C" CEE_status
odbcas_ASSvc_StartDS_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbcas_ASSvc_StartDS_exc_ *exception_
  , /* In    */ const ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function pointer type for
 * operation'odbcas_ASSvc_StartDS'
 */
typedef void (*odbcas_ASSvc_StartDS_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_StartDS_exc_ *exception_
  , /* In    */ const IDL_char *DSName
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function prototype for
 * operation 'odbcas_ASSvc_StartDS'
 */
extern "C" void
odbcas_ASSvc_StartDS_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_StartDS_exc_ *exception_
  , /* In    */ const IDL_char *DSName
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Set Synchronous method for
 * operation 'odbcas_ASSvc_StartDS'
 */
extern "C" CEE_status
odbcas_ASSvc_StartDS_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_StartDS_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbcas_ASSvc_StartDS'
 */
extern "C" CEE_status
odbcas_ASSvc_StartDS_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_StartDS_smt_ method_
  );

/***********************************
 * Operation 'odbcas_ASSvc_StopDS' *
 ***********************************/

/*
 * Exception number constants for
 * operation 'odbcas_ASSvc_StopDS'
 */
#define odbcas_ASSvc_StopDS_ASParamError_exn_ 1
#define odbcas_ASSvc_StopDS_DSNotFound_exn_ 2
#define odbcas_ASSvc_StopDS_DSAlreadyStopped_exn_ 3
#define odbcas_ASSvc_StopDS_DSStateChangeError_exn_ 4
#define odbcas_ASSvc_StopDS_ProcessStopError_exn_ 5
/*
 * Exception union for
 * operation 'odbcas_ASSvc_StopDS'
 */
struct odbcas_ASSvc_StopDS_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbcas_ASSvc_ASParamError ASParamError;
  } u;
};
/*
 * Local index for operation 'odbcas_ASSvc_StopDS'
 */
#define odbcas_ASSvc_StopDS_ldx_ ((IDL_unsigned_long) 8)
/*
 * Operation synopsis for operation 'odbcas_ASSvc_StopDS'
 */
#define odbcas_ASSvc_StopDS_osy_ ((IDL_long) 1932719932)
/*
 * Asynchronous method function pointer type for
 * operation 'odbcas_ASSvc_StopDS'
 */
typedef void (*odbcas_ASSvc_StopDS_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const IDL_char *DSName
  , /* In    */ IDL_long StopType
  , /* In    */ IDL_string ReasonText
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbcas_ASSvc_StopDS'
 */
extern "C" void
odbcas_ASSvc_StopDS_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const IDL_char *DSName
  , /* In    */ IDL_long StopType
  , /* In    */ IDL_string ReasonText
  );
/*
 * Set Asynchronous Method for
 * operation 'odbcas_ASSvc_StopDS'
 */
extern "C" CEE_status
odbcas_ASSvc_StopDS_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_StopDS_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbcas_ASSvc_StopDS'
 */
extern "C" CEE_status
odbcas_ASSvc_StopDS_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbcas_ASSvc_StopDS_exc_ *exception_
  );
/*
 * Synchronous method function pointer type for
 * operation'odbcas_ASSvc_StopDS'
 */
typedef void (*odbcas_ASSvc_StopDS_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_StopDS_exc_ *exception_
  , /* In    */ const IDL_char *DSName
  , /* In    */ IDL_long StopType
  , /* In    */ IDL_string ReasonText
  );
/*
 * Synchronous method function prototype for
 * operation 'odbcas_ASSvc_StopDS'
 */
extern "C" void
odbcas_ASSvc_StopDS_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_StopDS_exc_ *exception_
  , /* In    */ const IDL_char *DSName
  , /* In    */ IDL_long StopType
  , /* In    */ IDL_string ReasonText
  );
/*
 * Set Synchronous method for
 * operation 'odbcas_ASSvc_StopDS'
 */
extern "C" CEE_status
odbcas_ASSvc_StopDS_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_StopDS_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbcas_ASSvc_StopDS'
 */
extern "C" CEE_status
odbcas_ASSvc_StopDS_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_StopDS_smt_ method_
  );

/*************************************
 * Operation 'odbcas_ASSvc_StatusAS' *
 *************************************/
/*
 * Exception union for
 * operation 'odbcas_ASSvc_StatusAS'
 */
struct odbcas_ASSvc_StatusAS_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
};
/*
 * Local index for operation 'odbcas_ASSvc_StatusAS'
 */
#define odbcas_ASSvc_StatusAS_ldx_ ((IDL_unsigned_long) 9)
/*
 * Operation synopsis for operation 'odbcas_ASSvc_StatusAS'
 */
#define odbcas_ASSvc_StatusAS_osy_ ((IDL_long) 470889124)
/*
 * Asynchronous method function pointer type for
 * operation 'odbcas_ASSvc_StatusAS'
 */
typedef void (*odbcas_ASSvc_StatusAS_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbcas_ASSvc_StatusAS'
 */
extern "C" void
odbcas_ASSvc_StatusAS_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  );
/*
 * Set Asynchronous Method for
 * operation 'odbcas_ASSvc_StatusAS'
 */
extern "C" CEE_status
odbcas_ASSvc_StatusAS_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_StatusAS_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbcas_ASSvc_StatusAS'
 */
extern "C" CEE_status
odbcas_ASSvc_StatusAS_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbcas_ASSvc_StatusAS_exc_ *exception_
  , /* In    */ const AS_CFG_STATUS_def *AsCfgStatus
  );
/*
 * Synchronous method function pointer type for
 * operation'odbcas_ASSvc_StatusAS'
 */
typedef void (*odbcas_ASSvc_StatusAS_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_StatusAS_exc_ *exception_
  , /* Out   */ AS_CFG_STATUS_def *AsCfgStatus
  );
/*
 * Synchronous method function prototype for
 * operation 'odbcas_ASSvc_StatusAS'
 */
extern "C" void
odbcas_ASSvc_StatusAS_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_StatusAS_exc_ *exception_
  , /* Out   */ AS_CFG_STATUS_def *AsCfgStatus
  );
/*
 * Set Synchronous method for
 * operation 'odbcas_ASSvc_StatusAS'
 */
extern "C" CEE_status
odbcas_ASSvc_StatusAS_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_StatusAS_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbcas_ASSvc_StatusAS'
 */
extern "C" CEE_status
odbcas_ASSvc_StatusAS_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_StatusAS_smt_ method_
  );

/*************************************
 * Operation 'odbcas_ASSvc_StatusDS' *
 *************************************/

/*
 * Exception number constants for
 * operation 'odbcas_ASSvc_StatusDS'
 */
#define odbcas_ASSvc_StatusDS_ASParamError_exn_ 1
#define odbcas_ASSvc_StatusDS_DSNotFound_exn_ 2
/*
 * Exception union for
 * operation 'odbcas_ASSvc_StatusDS'
 */
struct odbcas_ASSvc_StatusDS_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbcas_ASSvc_ASParamError ASParamError;
  } u;
};
/*
 * Local index for operation 'odbcas_ASSvc_StatusDS'
 */
#define odbcas_ASSvc_StatusDS_ldx_ ((IDL_unsigned_long) 10)
/*
 * Operation synopsis for operation 'odbcas_ASSvc_StatusDS'
 */
#define odbcas_ASSvc_StatusDS_osy_ ((IDL_long) -1871233060)
/*
 * Asynchronous method function pointer type for
 * operation 'odbcas_ASSvc_StatusDS'
 */
typedef void (*odbcas_ASSvc_StatusDS_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const IDL_char *DSName
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbcas_ASSvc_StatusDS'
 */
extern "C" void
odbcas_ASSvc_StatusDS_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const IDL_char *DSName
  );
/*
 * Set Asynchronous Method for
 * operation 'odbcas_ASSvc_StatusDS'
 */
extern "C" CEE_status
odbcas_ASSvc_StatusDS_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_StatusDS_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbcas_ASSvc_StatusDS'
 */
extern "C" CEE_status
odbcas_ASSvc_StatusDS_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbcas_ASSvc_StatusDS_exc_ *exception_
  , /* In    */ const DATASOURCE_STATUS_def *DSStatus
  );
/*
 * Synchronous method function pointer type for
 * operation'odbcas_ASSvc_StatusDS'
 */
typedef void (*odbcas_ASSvc_StatusDS_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_StatusDS_exc_ *exception_
  , /* In    */ const IDL_char *DSName
  , /* Out   */ DATASOURCE_STATUS_def *DSStatus
  );
/*
 * Synchronous method function prototype for
 * operation 'odbcas_ASSvc_StatusDS'
 */
extern "C" void
odbcas_ASSvc_StatusDS_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_StatusDS_exc_ *exception_
  , /* In    */ const IDL_char *DSName
  , /* Out   */ DATASOURCE_STATUS_def *DSStatus
  );
/*
 * Set Synchronous method for
 * operation 'odbcas_ASSvc_StatusDS'
 */
extern "C" CEE_status
odbcas_ASSvc_StatusDS_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_StatusDS_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbcas_ASSvc_StatusDS'
 */
extern "C" CEE_status
odbcas_ASSvc_StatusDS_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_StatusDS_smt_ method_
  );

/*******************************************
 * Operation 'odbcas_ASSvc_StatusDSDetail' *
 *******************************************/

/*
 * Exception number constants for
 * operation 'odbcas_ASSvc_StatusDSDetail'
 */
#define odbcas_ASSvc_StatusDSDetail_ASParamError_exn_ 1
#define odbcas_ASSvc_StatusDSDetail_DSNotFound_exn_ 2
#define odbcas_ASSvc_StatusDSDetail_ASNotAvailable_exn_ 3
#define odbcas_ASSvc_StatusDSDetail_DSNotAvailable_exn_ 4
/*
 * Exception union for
 * operation 'odbcas_ASSvc_StatusDSDetail'
 */
struct odbcas_ASSvc_StatusDSDetail_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbcas_ASSvc_ASParamError ASParamError;
    odbcas_ASSvc_ASNotAvailable ASNotAvailable;
    odbcas_ASSvc_DSNotAvailable DSNotAvailable;
  } u;
};
/*
 * Local index for operation 'odbcas_ASSvc_StatusDSDetail'
 */
#define odbcas_ASSvc_StatusDSDetail_ldx_ ((IDL_unsigned_long) 11)
/*
 * Operation synopsis for operation 'odbcas_ASSvc_StatusDSDetail'
 */
#define odbcas_ASSvc_StatusDSDetail_osy_ ((IDL_long) -1849630353)
/*
 * Asynchronous method function pointer type for
 * operation 'odbcas_ASSvc_StatusDSDetail'
 */
typedef void (*odbcas_ASSvc_StatusDSDetail_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const IDL_char *DSName
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbcas_ASSvc_StatusDSDetail'
 */
extern "C" void
odbcas_ASSvc_StatusDSDetail_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const IDL_char *DSName
  );
/*
 * Set Asynchronous Method for
 * operation 'odbcas_ASSvc_StatusDSDetail'
 */
extern "C" CEE_status
odbcas_ASSvc_StatusDSDetail_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_StatusDSDetail_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbcas_ASSvc_StatusDSDetail'
 */
extern "C" CEE_status
odbcas_ASSvc_StatusDSDetail_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbcas_ASSvc_StatusDSDetail_exc_ *exception_
  , /* In    */ const SRVR_STATUS_LIST_def *srvrListStatus
  );
/*
 * Synchronous method function pointer type for
 * operation'odbcas_ASSvc_StatusDSDetail'
 */
typedef void (*odbcas_ASSvc_StatusDSDetail_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_StatusDSDetail_exc_ *exception_
  , /* In    */ const IDL_char *DSName
  , /* Out   */ SRVR_STATUS_LIST_def *srvrListStatus
  );
/*
 * Synchronous method function prototype for
 * operation 'odbcas_ASSvc_StatusDSDetail'
 */
extern "C" void
odbcas_ASSvc_StatusDSDetail_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_StatusDSDetail_exc_ *exception_
  , /* In    */ const IDL_char *DSName
  , /* Out   */ SRVR_STATUS_LIST_def *srvrListStatus
  );
/*
 * Set Synchronous method for
 * operation 'odbcas_ASSvc_StatusDSDetail'
 */
extern "C" CEE_status
odbcas_ASSvc_StatusDSDetail_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_StatusDSDetail_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbcas_ASSvc_StatusDSDetail'
 */
extern "C" CEE_status
odbcas_ASSvc_StatusDSDetail_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_StatusDSDetail_smt_ method_
  );

/******************************************
 * Operation 'odbcas_ASSvc_StatusSrvrAll' *
 ******************************************/

/*
 * Exception number constants for
 * operation 'odbcas_ASSvc_StatusSrvrAll'
 */
#define odbcas_ASSvc_StatusSrvrAll_ASParamError_exn_ 1
#define odbcas_ASSvc_StatusSrvrAll_ASNotAvailable_exn_ 2
/*
 * Exception union for
 * operation 'odbcas_ASSvc_StatusSrvrAll'
 */
struct odbcas_ASSvc_StatusSrvrAll_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbcas_ASSvc_ASParamError ASParamError;
    odbcas_ASSvc_ASNotAvailable ASNotAvailable;
  } u;
};
/*
 * Local index for operation 'odbcas_ASSvc_StatusSrvrAll'
 */
#define odbcas_ASSvc_StatusSrvrAll_ldx_ ((IDL_unsigned_long) 12)
/*
 * Operation synopsis for operation 'odbcas_ASSvc_StatusSrvrAll'
 */
#define odbcas_ASSvc_StatusSrvrAll_osy_ ((IDL_long) 58174705)
/*
 * Asynchronous method function pointer type for
 * operation 'odbcas_ASSvc_StatusSrvrAll'
 */
typedef void (*odbcas_ASSvc_StatusSrvrAll_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbcas_ASSvc_StatusSrvrAll'
 */
extern "C" void
odbcas_ASSvc_StatusSrvrAll_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  );
/*
 * Set Asynchronous Method for
 * operation 'odbcas_ASSvc_StatusSrvrAll'
 */
extern "C" CEE_status
odbcas_ASSvc_StatusSrvrAll_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_StatusSrvrAll_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbcas_ASSvc_StatusSrvrAll'
 */
extern "C" CEE_status
odbcas_ASSvc_StatusSrvrAll_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbcas_ASSvc_StatusSrvrAll_exc_ *exception_
  , /* In    */ const SRVR_STATUS_LIST_def *srvrListStatus
  );
/*
 * Synchronous method function pointer type for
 * operation'odbcas_ASSvc_StatusSrvrAll'
 */
typedef void (*odbcas_ASSvc_StatusSrvrAll_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_StatusSrvrAll_exc_ *exception_
  , /* Out   */ SRVR_STATUS_LIST_def *srvrListStatus
  );
/*
 * Synchronous method function prototype for
 * operation 'odbcas_ASSvc_StatusSrvrAll'
 */
extern "C" void
odbcas_ASSvc_StatusSrvrAll_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_StatusSrvrAll_exc_ *exception_
  , /* Out   */ SRVR_STATUS_LIST_def *srvrListStatus
  );
/*
 * Set Synchronous method for
 * operation 'odbcas_ASSvc_StatusSrvrAll'
 */
extern "C" CEE_status
odbcas_ASSvc_StatusSrvrAll_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_StatusSrvrAll_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbcas_ASSvc_StatusSrvrAll'
 */
extern "C" CEE_status
odbcas_ASSvc_StatusSrvrAll_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_StatusSrvrAll_smt_ method_
  );

/*************************************
 * Operation 'odbcas_ASSvc_StopSrvr' *
 *************************************/

/*
 * Exception number constants for
 * operation 'odbcas_ASSvc_StopSrvr'
 */
#define odbcas_ASSvc_StopSrvr_ASParamError_exn_ 1
#define odbcas_ASSvc_StopSrvr_ASNotAvailable_exn_ 2
#define odbcas_ASSvc_StopSrvr_SrvrNotFound_exn_ 3
#define odbcas_ASSvc_StopSrvr_SrvrInUseByAnotherClient_exn_ 4
#define odbcas_ASSvc_StopSrvr_ProcessStopError_exn_ 5
/*
 * Exception union for
 * operation 'odbcas_ASSvc_StopSrvr'
 */
struct odbcas_ASSvc_StopSrvr_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbcas_ASSvc_ASParamError ASParamError;
    odbcas_ASSvc_ASNotAvailable ASNotAvailable;
  } u;
};
/*
 * Local index for operation 'odbcas_ASSvc_StopSrvr'
 */
#define odbcas_ASSvc_StopSrvr_ldx_ ((IDL_unsigned_long) 13)
/*
 * Operation synopsis for operation 'odbcas_ASSvc_StopSrvr'
 */
#define odbcas_ASSvc_StopSrvr_osy_ ((IDL_long) 1728644050)
/*
 * Asynchronous method function pointer type for
 * operation 'odbcas_ASSvc_StopSrvr'
 */
typedef void (*odbcas_ASSvc_StopSrvr_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ DIALOGUE_ID_def dialogueId
  , /* In    */ IDL_long srvrType
  , /* In    */ const IDL_char *srvrObjRef
  , /* In    */ IDL_long StopType
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbcas_ASSvc_StopSrvr'
 */
extern "C" void
odbcas_ASSvc_StopSrvr_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ DIALOGUE_ID_def dialogueId
  , /* In    */ IDL_long srvrType
  , /* In    */ const IDL_char *srvrObjRef
  , /* In    */ IDL_long StopType
  );
/*
 * Set Asynchronous Method for
 * operation 'odbcas_ASSvc_StopSrvr'
 */
extern "C" CEE_status
odbcas_ASSvc_StopSrvr_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_StopSrvr_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbcas_ASSvc_StopSrvr'
 */
extern "C" CEE_status
odbcas_ASSvc_StopSrvr_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbcas_ASSvc_StopSrvr_exc_ *exception_
  );
/*
 * Synchronous method function pointer type for
 * operation'odbcas_ASSvc_StopSrvr'
 */
typedef void (*odbcas_ASSvc_StopSrvr_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_StopSrvr_exc_ *exception_
  , /* In    */ DIALOGUE_ID_def dialogueId
  , /* In    */ IDL_long srvrType
  , /* In    */ const IDL_char *srvrObjRef
  , /* In    */ IDL_long StopType
  );
/*
 * Synchronous method function prototype for
 * operation 'odbcas_ASSvc_StopSrvr'
 */
extern "C" void
odbcas_ASSvc_StopSrvr_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_StopSrvr_exc_ *exception_
  , /* In    */ DIALOGUE_ID_def dialogueId
  , /* In    */ IDL_long srvrType
  , /* In    */ const IDL_char *srvrObjRef
  , /* In    */ IDL_long StopType
  );
/*
 * Set Synchronous method for
 * operation 'odbcas_ASSvc_StopSrvr'
 */
extern "C" CEE_status
odbcas_ASSvc_StopSrvr_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_StopSrvr_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbcas_ASSvc_StopSrvr'
 */
extern "C" CEE_status
odbcas_ASSvc_StopSrvr_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_StopSrvr_smt_ method_
  );

/****************************************
 * Operation 'odbcas_ASSvc_StatusDSAll' *
 ****************************************/

/*
 * Exception number constants for
 * operation 'odbcas_ASSvc_StatusDSAll'
 */
#define odbcas_ASSvc_StatusDSAll_ASParamError_exn_ 1
/*
 * Exception union for
 * operation 'odbcas_ASSvc_StatusDSAll'
 */
struct odbcas_ASSvc_StatusDSAll_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbcas_ASSvc_ASParamError ASParamError;
  } u;
};
/*
 * Local index for operation 'odbcas_ASSvc_StatusDSAll'
 */
#define odbcas_ASSvc_StatusDSAll_ldx_ ((IDL_unsigned_long) 14)
/*
 * Operation synopsis for operation 'odbcas_ASSvc_StatusDSAll'
 */
#define odbcas_ASSvc_StatusDSAll_osy_ ((IDL_long) 412216083)
/*
 * Asynchronous method function pointer type for
 * operation 'odbcas_ASSvc_StatusDSAll'
 */
typedef void (*odbcas_ASSvc_StatusDSAll_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbcas_ASSvc_StatusDSAll'
 */
extern "C" void
odbcas_ASSvc_StatusDSAll_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  );
/*
 * Set Asynchronous Method for
 * operation 'odbcas_ASSvc_StatusDSAll'
 */
extern "C" CEE_status
odbcas_ASSvc_StatusDSAll_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_StatusDSAll_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbcas_ASSvc_StatusDSAll'
 */
extern "C" CEE_status
odbcas_ASSvc_StatusDSAll_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbcas_ASSvc_StatusDSAll_exc_ *exception_
  , /* In    */ const DATASOURCE_STATUS_LIST_def *DSListStatus
  );
/*
 * Synchronous method function pointer type for
 * operation'odbcas_ASSvc_StatusDSAll'
 */
typedef void (*odbcas_ASSvc_StatusDSAll_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_StatusDSAll_exc_ *exception_
  , /* Out   */ DATASOURCE_STATUS_LIST_def *DSListStatus
  );
/*
 * Synchronous method function prototype for
 * operation 'odbcas_ASSvc_StatusDSAll'
 */
extern "C" void
odbcas_ASSvc_StatusDSAll_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_StatusDSAll_exc_ *exception_
  , /* Out   */ DATASOURCE_STATUS_LIST_def *DSListStatus
  );
/*
 * Set Synchronous method for
 * operation 'odbcas_ASSvc_StatusDSAll'
 */
extern "C" CEE_status
odbcas_ASSvc_StatusDSAll_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_StatusDSAll_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbcas_ASSvc_StatusDSAll'
 */
extern "C" CEE_status
odbcas_ASSvc_StatusDSAll_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_StatusDSAll_smt_ method_
  );

/********************************************
 * Operation 'odbcas_ASSvc_WouldLikeToLive' *
 ********************************************/

/*
 * Exception number constants for
 * operation 'odbcas_ASSvc_WouldLikeToLive'
 */
#define odbcas_ASSvc_WouldLikeToLive_ASParamError_exn_ 1
/*
 * Exception union for
 * operation 'odbcas_ASSvc_WouldLikeToLive'
 */
struct odbcas_ASSvc_WouldLikeToLive_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbcas_ASSvc_ASParamError ASParamError;
  } u;
};
/*
 * Local index for operation 'odbcas_ASSvc_WouldLikeToLive'
 */
#define odbcas_ASSvc_WouldLikeToLive_ldx_ ((IDL_unsigned_long) 15)
/*
 * Operation synopsis for operation 'odbcas_ASSvc_WouldLikeToLive'
 */
#define odbcas_ASSvc_WouldLikeToLive_osy_ ((IDL_long) 691115433)
/*
 * Asynchronous method function pointer type for
 * operation 'odbcas_ASSvc_WouldLikeToLive'
 */
typedef void (*odbcas_ASSvc_WouldLikeToLive_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ IDL_long srvrType
  , /* In    */ const IDL_char *srvrObjRef
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbcas_ASSvc_WouldLikeToLive'
 */
extern "C" void
odbcas_ASSvc_WouldLikeToLive_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ IDL_long srvrType
  , /* In    */ const IDL_char *srvrObjRef
  );
/*
 * Set Asynchronous Method for
 * operation 'odbcas_ASSvc_WouldLikeToLive'
 */
extern "C" CEE_status
odbcas_ASSvc_WouldLikeToLive_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_WouldLikeToLive_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbcas_ASSvc_WouldLikeToLive'
 */
extern "C" CEE_status
odbcas_ASSvc_WouldLikeToLive_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbcas_ASSvc_WouldLikeToLive_exc_ *exception_
  , /* In    */ IDL_long lifePermit
  );
/*
 * Synchronous method function pointer type for
 * operation'odbcas_ASSvc_WouldLikeToLive'
 */
typedef void (*odbcas_ASSvc_WouldLikeToLive_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_WouldLikeToLive_exc_ *exception_
  , /* In    */ IDL_long srvrType
  , /* In    */ const IDL_char *srvrObjRef
  , /* Out   */ IDL_long *lifePermit
  );
/*
 * Synchronous method function prototype for
 * operation 'odbcas_ASSvc_WouldLikeToLive'
 */
extern "C" void
odbcas_ASSvc_WouldLikeToLive_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_WouldLikeToLive_exc_ *exception_
  , /* In    */ IDL_long srvrType
  , /* In    */ const IDL_char *srvrObjRef
  , /* Out   */ IDL_long *lifePermit
  );
/*
 * Set Synchronous method for
 * operation 'odbcas_ASSvc_WouldLikeToLive'
 */
extern "C" CEE_status
odbcas_ASSvc_WouldLikeToLive_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_WouldLikeToLive_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbcas_ASSvc_WouldLikeToLive'
 */
extern "C" CEE_status
odbcas_ASSvc_WouldLikeToLive_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_WouldLikeToLive_smt_ method_
  );

/*****************************************
 * Operation 'odbcas_ASSvc_SetTestPoint' *
 *****************************************/

/*
 * Exception number constants for
 * operation 'odbcas_ASSvc_SetTestPoint'
 */
#define odbcas_ASSvc_SetTestPoint_ASParamError_exn_ 1
/*
 * Exception union for
 * operation 'odbcas_ASSvc_SetTestPoint'
 */
struct odbcas_ASSvc_SetTestPoint_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbcas_ASSvc_ASParamError ASParamError;
  } u;
};
/*
 * Local index for operation 'odbcas_ASSvc_SetTestPoint'
 */
#define odbcas_ASSvc_SetTestPoint_ldx_ ((IDL_unsigned_long) 16)
/*
 * Operation synopsis for operation 'odbcas_ASSvc_SetTestPoint'
 */
#define odbcas_ASSvc_SetTestPoint_osy_ ((IDL_long) -258781373)
/*
 * Asynchronous method function pointer type for
 * operation 'odbcas_ASSvc_SetTestPoint'
 */
typedef void (*odbcas_ASSvc_SetTestPoint_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ DIALOGUE_ID_def dialogueId
  , /* In    */ IDL_short TestPoint
  , /* In    */ IDL_unsigned_long Operation
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbcas_ASSvc_SetTestPoint'
 */
extern "C" void
odbcas_ASSvc_SetTestPoint_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ DIALOGUE_ID_def dialogueId
  , /* In    */ IDL_short TestPoint
  , /* In    */ IDL_unsigned_long Operation
  );
/*
 * Set Asynchronous Method for
 * operation 'odbcas_ASSvc_SetTestPoint'
 */
extern "C" CEE_status
odbcas_ASSvc_SetTestPoint_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_SetTestPoint_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbcas_ASSvc_SetTestPoint'
 */
extern "C" CEE_status
odbcas_ASSvc_SetTestPoint_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbcas_ASSvc_SetTestPoint_exc_ *exception_
  );
/*
 * Synchronous method function pointer type for
 * operation'odbcas_ASSvc_SetTestPoint'
 */
typedef void (*odbcas_ASSvc_SetTestPoint_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_SetTestPoint_exc_ *exception_
  , /* In    */ DIALOGUE_ID_def dialogueId
  , /* In    */ IDL_short TestPoint
  , /* In    */ IDL_unsigned_long Operation
  );
/*
 * Synchronous method function prototype for
 * operation 'odbcas_ASSvc_SetTestPoint'
 */
extern "C" void
odbcas_ASSvc_SetTestPoint_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_SetTestPoint_exc_ *exception_
  , /* In    */ DIALOGUE_ID_def dialogueId
  , /* In    */ IDL_short TestPoint
  , /* In    */ IDL_unsigned_long Operation
  );
/*
 * Set Synchronous method for
 * operation 'odbcas_ASSvc_SetTestPoint'
 */
extern "C" CEE_status
odbcas_ASSvc_SetTestPoint_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_SetTestPoint_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbcas_ASSvc_SetTestPoint'
 */
extern "C" CEE_status
odbcas_ASSvc_SetTestPoint_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_SetTestPoint_smt_ method_
  );

/*******************************************
 * Operation 'odbcas_ASSvc_ClearTestPoint' *
 *******************************************/

/*
 * Exception number constants for
 * operation 'odbcas_ASSvc_ClearTestPoint'
 */
#define odbcas_ASSvc_ClearTestPoint_ASParamError_exn_ 1
/*
 * Exception union for
 * operation 'odbcas_ASSvc_ClearTestPoint'
 */
struct odbcas_ASSvc_ClearTestPoint_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbcas_ASSvc_ASParamError ASParamError;
  } u;
};
/*
 * Local index for operation 'odbcas_ASSvc_ClearTestPoint'
 */
#define odbcas_ASSvc_ClearTestPoint_ldx_ ((IDL_unsigned_long) 17)
/*
 * Operation synopsis for operation 'odbcas_ASSvc_ClearTestPoint'
 */
#define odbcas_ASSvc_ClearTestPoint_osy_ ((IDL_long) 390699907)
/*
 * Asynchronous method function pointer type for
 * operation 'odbcas_ASSvc_ClearTestPoint'
 */
typedef void (*odbcas_ASSvc_ClearTestPoint_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ DIALOGUE_ID_def dialogueId
  , /* In    */ IDL_short TestPoint
  , /* In    */ IDL_unsigned_short Operation
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbcas_ASSvc_ClearTestPoint'
 */
extern "C" void
odbcas_ASSvc_ClearTestPoint_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ DIALOGUE_ID_def dialogueId
  , /* In    */ IDL_short TestPoint
  , /* In    */ IDL_unsigned_short Operation
  );
/*
 * Set Asynchronous Method for
 * operation 'odbcas_ASSvc_ClearTestPoint'
 */
extern "C" CEE_status
odbcas_ASSvc_ClearTestPoint_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_ClearTestPoint_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbcas_ASSvc_ClearTestPoint'
 */
extern "C" CEE_status
odbcas_ASSvc_ClearTestPoint_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbcas_ASSvc_ClearTestPoint_exc_ *exception_
  );
/*
 * Synchronous method function pointer type for
 * operation'odbcas_ASSvc_ClearTestPoint'
 */
typedef void (*odbcas_ASSvc_ClearTestPoint_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_ClearTestPoint_exc_ *exception_
  , /* In    */ DIALOGUE_ID_def dialogueId
  , /* In    */ IDL_short TestPoint
  , /* In    */ IDL_unsigned_short Operation
  );
/*
 * Synchronous method function prototype for
 * operation 'odbcas_ASSvc_ClearTestPoint'
 */
extern "C" void
odbcas_ASSvc_ClearTestPoint_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_ClearTestPoint_exc_ *exception_
  , /* In    */ DIALOGUE_ID_def dialogueId
  , /* In    */ IDL_short TestPoint
  , /* In    */ IDL_unsigned_short Operation
  );
/*
 * Set Synchronous method for
 * operation 'odbcas_ASSvc_ClearTestPoint'
 */
extern "C" CEE_status
odbcas_ASSvc_ClearTestPoint_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_ClearTestPoint_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbcas_ASSvc_ClearTestPoint'
 */
extern "C" CEE_status
odbcas_ASSvc_ClearTestPoint_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_ClearTestPoint_smt_ method_
  );

/****************************************************
 * Operation 'odbcas_ASSvc_DataSourceConfigChanged' *
 ****************************************************/

/*
 * Exception number constants for
 * operation 'odbcas_ASSvc_DataSourceConfigChanged'
 */
#define odbcas_ASSvc_DataSourceConfigChanged_ASParamError_exn_ 1
/*
 * Exception union for
 * operation 'odbcas_ASSvc_DataSourceConfigChanged'
 */
struct odbcas_ASSvc_DataSourceConfigChanged_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbcas_ASSvc_ASParamError ASParamError;
  } u;
};
/*
 * Local index for operation 'odbcas_ASSvc_DataSourceConfigChanged'
 */
#define odbcas_ASSvc_DataSourceConfigChanged_ldx_ ((IDL_unsigned_long) 18)
/*
 * Operation synopsis for operation 'odbcas_ASSvc_DataSourceConfigChanged'
 */
#define odbcas_ASSvc_DataSourceConfigChanged_osy_ ((IDL_long) 1738586948)
/*
 * Asynchronous method function pointer type for
 * operation 'odbcas_ASSvc_DataSourceConfigChanged'
 */
typedef void (*odbcas_ASSvc_DataSourceConfigChanged_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const IDL_char *dataSourceName
  , /* In    */ IDL_long dataSourceOperation
  , /* In    */ IDL_long dataSourceOperationValue
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbcas_ASSvc_DataSourceConfigChanged'
 */
extern "C" void
odbcas_ASSvc_DataSourceConfigChanged_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const IDL_char *dataSourceName
  , /* In    */ IDL_long dataSourceOperation
  , /* In    */ IDL_long dataSourceOperationValue
  );
/*
 * Set Asynchronous Method for
 * operation 'odbcas_ASSvc_DataSourceConfigChanged'
 */
extern "C" CEE_status
odbcas_ASSvc_DataSourceConfigChanged_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_DataSourceConfigChanged_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbcas_ASSvc_DataSourceConfigChanged'
 */
extern "C" CEE_status
odbcas_ASSvc_DataSourceConfigChanged_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbcas_ASSvc_DataSourceConfigChanged_exc_ *exception_
  );
/*
 * Synchronous method function pointer type for
 * operation'odbcas_ASSvc_DataSourceConfigChanged'
 */
typedef void (*odbcas_ASSvc_DataSourceConfigChanged_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_DataSourceConfigChanged_exc_ *exception_
  , /* In    */ const IDL_char *dataSourceName
  , /* In    */ IDL_long dataSourceOperation
  , /* In    */ IDL_long dataSourceOperationValue
  );
/*
 * Synchronous method function prototype for
 * operation 'odbcas_ASSvc_DataSourceConfigChanged'
 */
extern "C" void
odbcas_ASSvc_DataSourceConfigChanged_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_DataSourceConfigChanged_exc_ *exception_
  , /* In    */ const IDL_char *dataSourceName
  , /* In    */ IDL_long dataSourceOperation
  , /* In    */ IDL_long dataSourceOperationValue
  );
/*
 * Set Synchronous method for
 * operation 'odbcas_ASSvc_DataSourceConfigChanged'
 */
extern "C" CEE_status
odbcas_ASSvc_DataSourceConfigChanged_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_DataSourceConfigChanged_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbcas_ASSvc_DataSourceConfigChanged'
 */
extern "C" CEE_status
odbcas_ASSvc_DataSourceConfigChanged_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_DataSourceConfigChanged_smt_ method_
  );

/*****************************************
 * Operation 'odbcas_ASSvc_GeneralParam' *
 *****************************************/

/*
 * Exception number constants for
 * operation 'odbcas_ASSvc_GeneralParam'
 */
#define odbcas_ASSvc_GeneralParam_ASParamError_exn_ 1
/*
 * Exception union for
 * operation 'odbcas_ASSvc_GeneralParam'
 */
struct odbcas_ASSvc_GeneralParam_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbcas_ASSvc_ASParamError ASParamError;
  } u;
};
/*
 * Local index for operation 'odbcas_ASSvc_GeneralParam'
 */
#define odbcas_ASSvc_GeneralParam_ldx_ ((IDL_unsigned_long) 19)
/*
 * Operation synopsis for operation 'odbcas_ASSvc_GeneralParam'
 */
#define odbcas_ASSvc_GeneralParam_osy_ ((IDL_long) 830318057)
/*
 * Asynchronous method function pointer type for
 * operation 'odbcas_ASSvc_GeneralParam'
 */
typedef void (*odbcas_ASSvc_GeneralParam_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const GEN_ParamList_def *paramList
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbcas_ASSvc_GeneralParam'
 */
extern "C" void
odbcas_ASSvc_GeneralParam_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const GEN_ParamList_def *paramList
  );
/*
 * Set Asynchronous Method for
 * operation 'odbcas_ASSvc_GeneralParam'
 */
extern "C" CEE_status
odbcas_ASSvc_GeneralParam_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_GeneralParam_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbcas_ASSvc_GeneralParam'
 */
extern "C" CEE_status
odbcas_ASSvc_GeneralParam_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbcas_ASSvc_GeneralParam_exc_ *exception_
  );
/*
 * Synchronous method function pointer type for
 * operation'odbcas_ASSvc_GeneralParam'
 */
typedef void (*odbcas_ASSvc_GeneralParam_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_GeneralParam_exc_ *exception_
  , /* In    */ const GEN_ParamList_def *paramList
  );
/*
 * Synchronous method function prototype for
 * operation 'odbcas_ASSvc_GeneralParam'
 */
extern "C" void
odbcas_ASSvc_GeneralParam_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_GeneralParam_exc_ *exception_
  , /* In    */ const GEN_ParamList_def *paramList
  );
/*
 * Set Synchronous method for
 * operation 'odbcas_ASSvc_GeneralParam'
 */
extern "C" CEE_status
odbcas_ASSvc_GeneralParam_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_GeneralParam_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbcas_ASSvc_GeneralParam'
 */
extern "C" CEE_status
odbcas_ASSvc_GeneralParam_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_GeneralParam_smt_ method_
  );

/****************************************
 * Operation 'odbcas_ASSvc_EnableTrace' *
 ****************************************/

/*
 * Exception number constants for
 * operation 'odbcas_ASSvc_EnableTrace'
 */
#define odbcas_ASSvc_EnableTrace_ASParamError_exn_ 1
#define odbcas_ASSvc_EnableTrace_DSNotFound_exn_ 2
#define odbcas_ASSvc_EnableTrace_DSAlreadyStopped_exn_ 3
#define odbcas_ASSvc_EnableTrace_TraceAlreadyEnabled_exn_ 4
#define odbcas_ASSvc_EnableTrace_TraceEnableError_exn_ 5
/*
 * Exception union for
 * operation 'odbcas_ASSvc_EnableTrace'
 */
struct odbcas_ASSvc_EnableTrace_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbcas_ASSvc_ASParamError ASParamError;
  } u;
};
/*
 * Local index for operation 'odbcas_ASSvc_EnableTrace'
 */
#define odbcas_ASSvc_EnableTrace_ldx_ ((IDL_unsigned_long) 20)
/*
 * Operation synopsis for operation 'odbcas_ASSvc_EnableTrace'
 */
#define odbcas_ASSvc_EnableTrace_osy_ ((IDL_long) 320671963)
/*
 * Asynchronous method function pointer type for
 * operation 'odbcas_ASSvc_EnableTrace'
 */
typedef void (*odbcas_ASSvc_EnableTrace_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const IDL_char *DSName
  , /* In    */ DIALOGUE_ID_def dialogueId
  , /* In    */ const IDL_char *srvrObjRef
  , /* In    */ IDL_long traceType
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbcas_ASSvc_EnableTrace'
 */
extern "C" void
odbcas_ASSvc_EnableTrace_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const IDL_char *DSName
  , /* In    */ DIALOGUE_ID_def dialogueId
  , /* In    */ const IDL_char *srvrObjRef
  , /* In    */ IDL_long traceType
  );
/*
 * Set Asynchronous Method for
 * operation 'odbcas_ASSvc_EnableTrace'
 */
extern "C" CEE_status
odbcas_ASSvc_EnableTrace_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_EnableTrace_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbcas_ASSvc_EnableTrace'
 */
extern "C" CEE_status
odbcas_ASSvc_EnableTrace_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbcas_ASSvc_EnableTrace_exc_ *exception_
  );
/*
 * Synchronous method function pointer type for
 * operation'odbcas_ASSvc_EnableTrace'
 */
typedef void (*odbcas_ASSvc_EnableTrace_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_EnableTrace_exc_ *exception_
  , /* In    */ const IDL_char *DSName
  , /* In    */ DIALOGUE_ID_def dialogueId
  , /* In    */ const IDL_char *srvrObjRef
  , /* In    */ IDL_long traceType
  );
/*
 * Synchronous method function prototype for
 * operation 'odbcas_ASSvc_EnableTrace'
 */
extern "C" void
odbcas_ASSvc_EnableTrace_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_EnableTrace_exc_ *exception_
  , /* In    */ const IDL_char *DSName
  , /* In    */ DIALOGUE_ID_def dialogueId
  , /* In    */ const IDL_char *srvrObjRef
  , /* In    */ IDL_long traceType
  );
/*
 * Set Synchronous method for
 * operation 'odbcas_ASSvc_EnableTrace'
 */
extern "C" CEE_status
odbcas_ASSvc_EnableTrace_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_EnableTrace_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbcas_ASSvc_EnableTrace'
 */
extern "C" CEE_status
odbcas_ASSvc_EnableTrace_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_EnableTrace_smt_ method_
  );

/*****************************************
 * Operation 'odbcas_ASSvc_DisableTrace' *
 *****************************************/

/*
 * Exception number constants for
 * operation 'odbcas_ASSvc_DisableTrace'
 */
#define odbcas_ASSvc_DisableTrace_ASParamError_exn_ 1
#define odbcas_ASSvc_DisableTrace_DSNotFound_exn_ 2
#define odbcas_ASSvc_DisableTrace_DSAlreadyStopped_exn_ 3
#define odbcas_ASSvc_DisableTrace_TraceAlreadyDisabled_exn_ 4
#define odbcas_ASSvc_DisableTrace_TraceDisableError_exn_ 5
/*
 * Exception union for
 * operation 'odbcas_ASSvc_DisableTrace'
 */
struct odbcas_ASSvc_DisableTrace_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbcas_ASSvc_ASParamError ASParamError;
  } u;
};
/*
 * Local index for operation 'odbcas_ASSvc_DisableTrace'
 */
#define odbcas_ASSvc_DisableTrace_ldx_ ((IDL_unsigned_long) 21)
/*
 * Operation synopsis for operation 'odbcas_ASSvc_DisableTrace'
 */
#define odbcas_ASSvc_DisableTrace_osy_ ((IDL_long) 135280495)
/*
 * Asynchronous method function pointer type for
 * operation 'odbcas_ASSvc_DisableTrace'
 */
typedef void (*odbcas_ASSvc_DisableTrace_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const IDL_char *DSName
  , /* In    */ DIALOGUE_ID_def dialogueId
  , /* In    */ const IDL_char *srvrObjRef
  , /* In    */ IDL_long traceType
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbcas_ASSvc_DisableTrace'
 */
extern "C" void
odbcas_ASSvc_DisableTrace_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const IDL_char *DSName
  , /* In    */ DIALOGUE_ID_def dialogueId
  , /* In    */ const IDL_char *srvrObjRef
  , /* In    */ IDL_long traceType
  );
/*
 * Set Asynchronous Method for
 * operation 'odbcas_ASSvc_DisableTrace'
 */
extern "C" CEE_status
odbcas_ASSvc_DisableTrace_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_DisableTrace_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbcas_ASSvc_DisableTrace'
 */
extern "C" CEE_status
odbcas_ASSvc_DisableTrace_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbcas_ASSvc_DisableTrace_exc_ *exception_
  );
/*
 * Synchronous method function pointer type for
 * operation'odbcas_ASSvc_DisableTrace'
 */
typedef void (*odbcas_ASSvc_DisableTrace_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_DisableTrace_exc_ *exception_
  , /* In    */ const IDL_char *DSName
  , /* In    */ DIALOGUE_ID_def dialogueId
  , /* In    */ const IDL_char *srvrObjRef
  , /* In    */ IDL_long traceType
  );
/*
 * Synchronous method function prototype for
 * operation 'odbcas_ASSvc_DisableTrace'
 */
extern "C" void
odbcas_ASSvc_DisableTrace_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_DisableTrace_exc_ *exception_
  , /* In    */ const IDL_char *DSName
  , /* In    */ DIALOGUE_ID_def dialogueId
  , /* In    */ const IDL_char *srvrObjRef
  , /* In    */ IDL_long traceType
  );
/*
 * Set Synchronous method for
 * operation 'odbcas_ASSvc_DisableTrace'
 */
extern "C" CEE_status
odbcas_ASSvc_DisableTrace_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_DisableTrace_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbcas_ASSvc_DisableTrace'
 */
extern "C" CEE_status
odbcas_ASSvc_DisableTrace_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_DisableTrace_smt_ method_
  );

/*****************************************
 * Operation 'odbcas_ASSvc_GetVersionAS' *
 *****************************************/
/*
 * Exception union for
 * operation 'odbcas_ASSvc_GetVersionAS'
 */
struct odbcas_ASSvc_GetVersionAS_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
};
/*
 * Local index for operation 'odbcas_ASSvc_GetVersionAS'
 */
#define odbcas_ASSvc_GetVersionAS_ldx_ ((IDL_unsigned_long) 22)
/*
 * Operation synopsis for operation 'odbcas_ASSvc_GetVersionAS'
 */
#define odbcas_ASSvc_GetVersionAS_osy_ ((IDL_long) 1913697932)
/*
 * Asynchronous method function pointer type for
 * operation 'odbcas_ASSvc_GetVersionAS'
 */
typedef void (*odbcas_ASSvc_GetVersionAS_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbcas_ASSvc_GetVersionAS'
 */
extern "C" void
odbcas_ASSvc_GetVersionAS_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  );
/*
 * Set Asynchronous Method for
 * operation 'odbcas_ASSvc_GetVersionAS'
 */
extern "C" CEE_status
odbcas_ASSvc_GetVersionAS_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_GetVersionAS_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbcas_ASSvc_GetVersionAS'
 */
extern "C" CEE_status
odbcas_ASSvc_GetVersionAS_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbcas_ASSvc_GetVersionAS_exc_ *exception_
  , /* In    */ const IDL_char *ASVersion
  );
/*
 * Synchronous method function pointer type for
 * operation'odbcas_ASSvc_GetVersionAS'
 */
typedef void (*odbcas_ASSvc_GetVersionAS_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_GetVersionAS_exc_ *exception_
  , /* Out   */ IDL_char *ASVersion
  );
/*
 * Synchronous method function prototype for
 * operation 'odbcas_ASSvc_GetVersionAS'
 */
extern "C" void
odbcas_ASSvc_GetVersionAS_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbcas_ASSvc_GetVersionAS_exc_ *exception_
  , /* Out   */ IDL_char *ASVersion
  );
/*
 * Set Synchronous method for
 * operation 'odbcas_ASSvc_GetVersionAS'
 */
extern "C" CEE_status
odbcas_ASSvc_GetVersionAS_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_GetVersionAS_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbcas_ASSvc_GetVersionAS'
 */
extern "C" CEE_status
odbcas_ASSvc_GetVersionAS_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbcas_ASSvc_GetVersionAS_smt_ method_
  );

/*
 * CIN description of interface 'odbcas_ASSvc'
 */
static char odbcas_ASSvc_ici_[]  = {
    '!','2','0','+','I','D','L',':','o','d','b','c','a','s','/','A',
    'S','S','v','c',':','1','.','0','2','2','+','6','7','1','5','2',
    '8','1','3','4','-','1','0','+','R','e','g','P','r','o','c','e',
    's','s','(','5','+','1','1','+','i','n','t','f','V','e','r','s',
    'i','o','n','>','b','4','+','I','I','I','K','8','+','s','r','v',
    'r','T','y','p','e','>','F','1','0','+','s','r','v','r','O','b',
    'j','R','e','f','>','a','1','+','1','2','8','+','C','1','4','+',
    'n','s','k','P','r','o','c','e','s','s','I','n','f','o','>','b',
    '3','+','I','F','a','1','+','1','0','+','I','1','1','+','s','r',
    'v','r','C','o','n','t','e','x','t','<','b','4','+','G','G','c',
    '0','+','b','4','+','d','1','2','8','+','G','d','0','+','F','c',
    '0','+','b','3','+','F','F','d','0','+','4','+','3','3','+','I',
    'D','L',':','o','d','b','c','a','s','/','A','S','S','v','c','/',
    'A','S','P','a','r','a','m','E','r','r','o','r',':','1','.','0',
    'g','1','+','d','0','+','3','0','+','I','D','L',':','o','d','b',
    'c','a','s','/','A','S','S','v','c','/','A','S','T','i','m','e',
    'o','u','t',':','1','.','0','g','1','+','d','0','+','3','7','+',
    'I','D','L',':','o','d','b','c','a','s','/','A','S','S','v','c',
    '/','A','S','R','e','g','i','s','t','r','y','F','a','i','l','e',
    'd',':','1','.','0','g','0','+','3','7','+','I','D','L',':','o',
    'd','b','c','a','s','/','A','S','S','v','c','/','A','S','R','e',
    'j','e','c','t','R','e','g','i','s','t','r','y',':','1','.','0',
    'g','1','+','d','0','+','0','+','2','0','2','7','1','4','6','0',
    '3','8','+','1','2','+','G','e','t','O','b','j','R','e','f','H',
    'd','l','(','9','+','9','+','i','n','C','o','n','t','e','x','t',
    '>','b','2','1','+','d','1','2','8','+','d','1','2','8','+','d',
    '1','2','8','+','d','1','2','8','+','d','1','2','8','+','I','I',
    'I','I','I','I','I','F','K','a','1','+','1','6','+','C','d','0',
    '+','K','K','K','I','c','0','+','b','4','+','I','I','I','K','8',
    '+','u','s','e','r','D','e','s','c','>','b','5','+','h','5','+',
    'c','0','+','H','d','0','+','d','0','+','c','0','+','H','8','+',
    's','r','v','r','T','y','p','e','>','F','1','0','+','r','e','t',
    'r','y','C','o','u','n','t','>','I','1','0','+','s','r','v','r',
    'O','b','j','R','e','f','<','a','1','+','1','2','8','+','C','1',
    '0','+','d','i','a','l','o','g','u','e','I','d','<','F','1','0',
    '+','d','a','t','a','S','o','u','r','c','e','<','d','1','2','8',
    '+','7','+','u','s','e','r','S','i','d','<','c','0','+','H','1',
    '1','+','v','e','r','s','i','o','n','L','i','s','t','<','c','0',
    '+','b','4','+','I','I','I','K','9','+','3','3','+','I','D','L',
    ':','o','d','b','c','a','s','/','A','S','S','v','c','/','A','S',
    'P','a','r','a','m','E','r','r','o','r',':','1','.','0','g','1',
    '+','d','0','+','3','0','+','I','D','L',':','o','d','b','c','a',
    's','/','A','S','S','v','c','/','A','S','T','i','m','e','o','u',
    't',':','1','.','0','g','1','+','d','0','+','3','2','+','I','D',
    'L',':','o','d','b','c','a','s','/','A','S','S','v','c','/','A',
    'S','N','o','S','r','v','r','H','d','l',':','1','.','0','g','0',
    '+','3','1','+','I','D','L',':','o','d','b','c','a','s','/','A',
    'S','S','v','c','/','A','S','T','r','y','A','g','a','i','n',':',
    '1','.','0','g','0','+','3','5','+','I','D','L',':','o','d','b',
    'c','a','s','/','A','S','S','v','c','/','A','S','N','o','t','A',
    'v','a','i','l','a','b','l','e',':','1','.','0','g','1','+','d',
    '0','+','3','5','+','I','D','L',':','o','d','b','c','a','s','/',
    'A','S','S','v','c','/','D','S','N','o','t','A','v','a','i','l',
    'a','b','l','e',':','1','.','0','g','1','+','d','0','+','3','7',
    '+','I','D','L',':','o','d','b','c','a','s','/','A','S','S','v',
    'c','/','P','o','r','t','N','o','t','A','v','a','i','l','a','b',
    'l','e',':','1','.','0','g','0','+','3','2','+','I','D','L',':',
    'o','d','b','c','a','s','/','A','S','S','v','c','/','I','n','v',
    'a','l','i','d','U','s','e','r',':','1','.','0','g','0','+','3',
    '7','+','I','D','L',':','o','d','b','c','a','s','/','A','S','S',
    'v','c','/','L','o','g','o','n','U','s','e','r','F','a','i','l',
    'u','r','e',':','1','.','0','g','1','+','F','0','+','1','0','1',
    '9','3','9','4','9','7','1','-','1','5','+','U','p','d','a','t',
    'e','S','r','v','r','S','t','a','t','e','(','7','+','8','+','s',
    'r','v','r','T','y','p','e','>','F','1','0','+','s','r','v','r',
    'O','b','j','R','e','f','>','a','1','+','1','2','8','+','C','9',
    '+','s','r','v','r','S','t','a','t','e','>','F','9','+','T','r',
    'a','c','e','T','y','p','e','<','F','1','4','+','S','t','a','t',
    'i','s','t','i','c','s','T','y','p','e','<','F','1','1','+','C',
    'o','n','t','e','x','t','T','y','p','e','<','F','1','1','+','s',
    'r','v','r','C','o','n','t','e','x','t','<','b','4','+','G','G',
    'c','0','+','b','4','+','d','1','2','8','+','G','d','0','+','F',
    'c','0','+','b','3','+','F','F','d','0','+','3','+','3','3','+',
    'I','D','L',':','o','d','b','c','a','s','/','A','S','S','v','c',
    '/','A','S','P','a','r','a','m','E','r','r','o','r',':','1','.',
    '0','g','1','+','d','0','+','3','0','+','I','D','L',':','o','d',
    'b','c','a','s','/','A','S','S','v','c','/','A','S','T','i','m',
    'e','o','u','t',':','1','.','0','g','1','+','d','0','+','3','9',
    '+','I','D','L',':','o','d','b','c','a','s','/','A','S','S','v',
    'c','/','A','S','S','t','a','t','e','C','h','a','n','g','e','E',
    'r','r','o','r',':','1','.','0','g','1','+','d','0','+','0','+',
    '8','1','1','4','4','6','8','8','0','-','1','5','+','S','r','v',
    'r','M','o','n','i','t','o','r','C','a','l','l','(','3','+','8',
    '+','s','r','v','r','T','y','p','e','>','F','1','0','+','s','r',
    'v','r','O','b','j','R','e','f','>','a','1','+','1','2','8','+',
    'C','4','+','D','S','I','d','>','F','0','+','0','+','4','7','8',
    '5','7','8','7','2','9','+','7','+','S','t','a','r','t','A','S',
    '(','1','+','1','0','+','s','q','l','W','a','r','n','i','n','g',
    '<','c','0','+','b','1','4','+','F','F','F','d','5','+','d','0',
    '+','F','F','d','0','+','d','0','+','d','0','+','d','0','+','d',
    '0','+','d','0','+','d','0','+','8','+','3','3','+','I','D','L',
    ':','o','d','b','c','a','s','/','A','S','S','v','c','/','A','S',
    'P','a','r','a','m','E','r','r','o','r',':','1','.','0','g','1',
    '+','d','0','+','3','7','+','I','D','L',':','o','d','b','c','a',
    's','/','A','S','S','v','c','/','D','S','A','l','r','e','a','d',
    'y','S','t','a','r','t','e','d',':','1','.','0','g','0','+','3',
    '9','+','I','D','L',':','o','d','b','c','a','s','/','A','S','S',
    'v','c','/','D','S','S','t','a','t','e','C','h','a','n','g','e',
    'E','r','r','o','r',':','1','.','0','g','0','+','3','7','+','I',
    'D','L',':','o','d','b','c','a','s','/','A','S','S','v','c','/',
    'P','o','r','t','N','o','t','A','v','a','i','l','a','b','l','e',
    ':','1','.','0','g','0','+','2','9','+','I','D','L',':','o','d',
    'b','c','a','s','/','A','S','S','v','c','/','S','Q','L','E','r',
    'r','o','r',':','1','.','0','g','1','+','c','0','+','b','1','4',
    '+','F','F','F','d','5','+','d','0','+','F','F','d','0','+','d',
    '0','+','d','0','+','d','0','+','d','0','+','d','0','+','d','0',
    '+','3','1','+','I','D','L',':','o','d','b','c','a','s','/','A',
    'S','S','v','c','/','A','S','T','r','y','A','g','a','i','n',':',
    '1','.','0','g','0','+','3','6','+','I','D','L',':','o','d','b',
    'c','a','s','/','A','S','S','v','c','/','S','r','v','r','C','r',
    'e','a','t','e','E','r','r','o','r',':','1','.','0','g','0','+',
    '3','4','+','I','D','L',':','o','d','b','c','a','s','/','A','S',
    'S','v','c','/','C','f','g','S','r','v','r','F','a','i','l','e',
    'd',':','1','.','0','g','0','+','0','+','3','9','1','3','7','0',
    '1','0','+','6','+','S','t','o','p','A','S','(','2','+','8','+',
    'S','t','o','p','T','y','p','e','>','F','1','0','+','R','e','a',
    's','o','n','T','e','x','t','>','d','0','+','3','+','3','3','+',
    'I','D','L',':','o','d','b','c','a','s','/','A','S','S','v','c',
    '/','A','S','P','a','r','a','m','E','r','r','o','r',':','1','.',
    '0','g','1','+','d','0','+','3','9','+','I','D','L',':','o','d',
    'b','c','a','s','/','A','S','S','v','c','/','D','S','S','t','a',
    't','e','C','h','a','n','g','e','E','r','r','o','r',':','1','.',
    '0','g','0','+','3','7','+','I','D','L',':','o','d','b','c','a',
    's','/','A','S','S','v','c','/','P','r','o','c','e','s','s','S',
    't','o','p','E','r','r','o','r',':','1','.','0','g','0','+','0',
    '+','9','4','6','9','2','0','3','6','0','-','7','+','S','t','a',
    'r','t','D','S','(','2','+','6','+','D','S','N','a','m','e','>',
    'd','1','2','8','+','1','0','+','s','q','l','W','a','r','n','i',
    'n','g','<','c','0','+','b','1','4','+','F','F','F','d','5','+',
    'd','0','+','F','F','d','0','+','d','0','+','d','0','+','d','0',
    '+','d','0','+','d','0','+','d','0','+','7','+','3','3','+','I',
    'D','L',':','o','d','b','c','a','s','/','A','S','S','v','c','/',
    'A','S','P','a','r','a','m','E','r','r','o','r',':','1','.','0',
    'g','1','+','d','0','+','3','1','+','I','D','L',':','o','d','b',
    'c','a','s','/','A','S','S','v','c','/','D','S','N','o','t','F',
    'o','u','n','d',':','1','.','0','g','0','+','3','7','+','I','D',
    'L',':','o','d','b','c','a','s','/','A','S','S','v','c','/','D',
    'S','A','l','r','e','a','d','y','S','t','a','r','t','e','d',':',
    '1','.','0','g','0','+','3','9','+','I','D','L',':','o','d','b',
    'c','a','s','/','A','S','S','v','c','/','D','S','S','t','a','t',
    'e','C','h','a','n','g','e','E','r','r','o','r',':','1','.','0',
    'g','0','+','3','7','+','I','D','L',':','o','d','b','c','a','s',
    '/','A','S','S','v','c','/','P','o','r','t','N','o','t','A','v',
    'a','i','l','a','b','l','e',':','1','.','0','g','0','+','2','9',
    '+','I','D','L',':','o','d','b','c','a','s','/','A','S','S','v',
    'c','/','S','Q','L','E','r','r','o','r',':','1','.','0','g','1',
    '+','c','0','+','b','1','4','+','F','F','F','d','5','+','d','0',
    '+','F','F','d','0','+','d','0','+','d','0','+','d','0','+','d',
    '0','+','d','0','+','d','0','+','3','6','+','I','D','L',':','o',
    'd','b','c','a','s','/','A','S','S','v','c','/','S','r','v','r',
    'C','r','e','a','t','e','E','r','r','o','r',':','1','.','0','g',
    '0','+','0','+','1','9','3','2','7','1','9','9','3','2','+','6',
    '+','S','t','o','p','D','S','(','3','+','6','+','D','S','N','a',
    'm','e','>','d','1','2','8','+','8','+','S','t','o','p','T','y',
    'p','e','>','F','1','0','+','R','e','a','s','o','n','T','e','x',
    't','>','d','0','+','5','+','3','3','+','I','D','L',':','o','d',
    'b','c','a','s','/','A','S','S','v','c','/','A','S','P','a','r',
    'a','m','E','r','r','o','r',':','1','.','0','g','1','+','d','0',
    '+','3','1','+','I','D','L',':','o','d','b','c','a','s','/','A',
    'S','S','v','c','/','D','S','N','o','t','F','o','u','n','d',':',
    '1','.','0','g','0','+','3','7','+','I','D','L',':','o','d','b',
    'c','a','s','/','A','S','S','v','c','/','D','S','A','l','r','e',
    'a','d','y','S','t','o','p','p','e','d',':','1','.','0','g','0',
    '+','3','9','+','I','D','L',':','o','d','b','c','a','s','/','A',
    'S','S','v','c','/','D','S','S','t','a','t','e','C','h','a','n',
    'g','e','E','r','r','o','r',':','1','.','0','g','0','+','3','7',
    '+','I','D','L',':','o','d','b','c','a','s','/','A','S','S','v',
    'c','/','P','r','o','c','e','s','s','S','t','o','p','E','r','r',
    'o','r',':','1','.','0','g','0','+','0','+','4','7','0','8','8',
    '9','1','2','4','+','8','+','S','t','a','t','u','s','A','S','(',
    '1','+','1','1','+','A','s','C','f','g','S','t','a','t','u','s',
    '<','b','1','4','+','I','F','F','a','1','+','9','+','C','a','1',
    '+','1','2','8','+','C','F','b','4','+','I','I','I','K','I','F',
    'F','a','1','+','9','+','C','a','1','+','1','2','8','+','C','F',
    'b','4','+','I','I','I','K','0','+','0','+','1','8','7','1','2',
    '3','3','0','6','0','-','8','+','S','t','a','t','u','s','D','S',
    '(','2','+','6','+','D','S','N','a','m','e','>','d','1','2','8',
    '+','8','+','D','S','S','t','a','t','u','s','<','b','1','1','+',
    'd','1','2','8','+','h','1','+','I','F','F','F','F','F','F','F',
    'F','2','+','3','3','+','I','D','L',':','o','d','b','c','a','s',
    '/','A','S','S','v','c','/','A','S','P','a','r','a','m','E','r',
    'r','o','r',':','1','.','0','g','1','+','d','0','+','3','1','+',
    'I','D','L',':','o','d','b','c','a','s','/','A','S','S','v','c',
    '/','D','S','N','o','t','F','o','u','n','d',':','1','.','0','g',
    '0','+','0','+','1','8','4','9','6','3','0','3','5','3','-','1',
    '4','+','S','t','a','t','u','s','D','S','D','e','t','a','i','l',
    '(','2','+','6','+','D','S','N','a','m','e','>','d','1','2','8',
    '+','1','4','+','s','r','v','r','L','i','s','t','S','t','a','t',
    'u','s','<','c','0','+','b','1','4','+','F','a','1','+','1','2',
    '8','+','C','I','K','d','1','2','8','+','a','1','+','9','+','C',
    'F','a','1','+','1','6','+','C','K','d','0','+','d','0','+','F',
    'F','b','4','+','I','I','I','K','4','+','3','3','+','I','D','L',
    ':','o','d','b','c','a','s','/','A','S','S','v','c','/','A','S',
    'P','a','r','a','m','E','r','r','o','r',':','1','.','0','g','1',
    '+','d','0','+','3','1','+','I','D','L',':','o','d','b','c','a',
    's','/','A','S','S','v','c','/','D','S','N','o','t','F','o','u',
    'n','d',':','1','.','0','g','0','+','3','5','+','I','D','L',':',
    'o','d','b','c','a','s','/','A','S','S','v','c','/','A','S','N',
    'o','t','A','v','a','i','l','a','b','l','e',':','1','.','0','g',
    '1','+','d','0','+','3','5','+','I','D','L',':','o','d','b','c',
    'a','s','/','A','S','S','v','c','/','D','S','N','o','t','A','v',
    'a','i','l','a','b','l','e',':','1','.','0','g','1','+','d','0',
    '+','0','+','5','8','1','7','4','7','0','5','+','1','3','+','S',
    't','a','t','u','s','S','r','v','r','A','l','l','(','1','+','1',
    '4','+','s','r','v','r','L','i','s','t','S','t','a','t','u','s',
    '<','c','0','+','b','1','4','+','F','a','1','+','1','2','8','+',
    'C','I','K','d','1','2','8','+','a','1','+','9','+','C','F','a',
    '1','+','1','6','+','C','K','d','0','+','d','0','+','F','F','b',
    '4','+','I','I','I','K','2','+','3','3','+','I','D','L',':','o',
    'd','b','c','a','s','/','A','S','S','v','c','/','A','S','P','a',
    'r','a','m','E','r','r','o','r',':','1','.','0','g','1','+','d',
    '0','+','3','5','+','I','D','L',':','o','d','b','c','a','s','/',
    'A','S','S','v','c','/','A','S','N','o','t','A','v','a','i','l',
    'a','b','l','e',':','1','.','0','g','1','+','d','0','+','0','+',
    '1','7','2','8','6','4','4','0','5','0','+','8','+','S','t','o',
    'p','S','r','v','r','(','4','+','1','0','+','d','i','a','l','o',
    'g','u','e','I','d','>','F','8','+','s','r','v','r','T','y','p',
    'e','>','F','1','0','+','s','r','v','r','O','b','j','R','e','f',
    '>','a','1','+','1','2','8','+','C','8','+','S','t','o','p','T',
    'y','p','e','>','F','5','+','3','3','+','I','D','L',':','o','d',
    'b','c','a','s','/','A','S','S','v','c','/','A','S','P','a','r',
    'a','m','E','r','r','o','r',':','1','.','0','g','1','+','d','0',
    '+','3','5','+','I','D','L',':','o','d','b','c','a','s','/','A',
    'S','S','v','c','/','A','S','N','o','t','A','v','a','i','l','a',
    'b','l','e',':','1','.','0','g','1','+','d','0','+','3','3','+',
    'I','D','L',':','o','d','b','c','a','s','/','A','S','S','v','c',
    '/','S','r','v','r','N','o','t','F','o','u','n','d',':','1','.',
    '0','g','0','+','4','5','+','I','D','L',':','o','d','b','c','a',
    's','/','A','S','S','v','c','/','S','r','v','r','I','n','U','s',
    'e','B','y','A','n','o','t','h','e','r','C','l','i','e','n','t',
    ':','1','.','0','g','0','+','3','7','+','I','D','L',':','o','d',
    'b','c','a','s','/','A','S','S','v','c','/','P','r','o','c','e',
    's','s','S','t','o','p','E','r','r','o','r',':','1','.','0','g',
    '0','+','0','+','4','1','2','2','1','6','0','8','3','+','1','1',
    '+','S','t','a','t','u','s','D','S','A','l','l','(','1','+','1',
    '2','+','D','S','L','i','s','t','S','t','a','t','u','s','<','c',
    '0','+','b','1','1','+','d','1','2','8','+','h','1','+','I','F',
    'F','F','F','F','F','F','F','1','+','3','3','+','I','D','L',':',
    'o','d','b','c','a','s','/','A','S','S','v','c','/','A','S','P',
    'a','r','a','m','E','r','r','o','r',':','1','.','0','g','1','+',
    'd','0','+','0','+','6','9','1','1','1','5','4','3','3','+','1',
    '5','+','W','o','u','l','d','L','i','k','e','T','o','L','i','v',
    'e','(','3','+','8','+','s','r','v','r','T','y','p','e','>','F',
    '1','0','+','s','r','v','r','O','b','j','R','e','f','>','a','1',
    '+','1','2','8','+','C','1','0','+','l','i','f','e','P','e','r',
    'm','i','t','<','F','1','+','3','3','+','I','D','L',':','o','d',
    'b','c','a','s','/','A','S','S','v','c','/','A','S','P','a','r',
    'a','m','E','r','r','o','r',':','1','.','0','g','1','+','d','0',
    '+','0','+','2','5','8','7','8','1','3','7','3','-','1','2','+',
    'S','e','t','T','e','s','t','P','o','i','n','t','(','3','+','1',
    '0','+','d','i','a','l','o','g','u','e','I','d','>','F','9','+',
    'T','e','s','t','P','o','i','n','t','>','I','9','+','O','p','e',
    'r','a','t','i','o','n','>','K','1','+','3','3','+','I','D','L',
    ':','o','d','b','c','a','s','/','A','S','S','v','c','/','A','S',
    'P','a','r','a','m','E','r','r','o','r',':','1','.','0','g','1',
    '+','d','0','+','0','+','3','9','0','6','9','9','9','0','7','+',
    '1','4','+','C','l','e','a','r','T','e','s','t','P','o','i','n',
    't','(','3','+','1','0','+','d','i','a','l','o','g','u','e','I',
    'd','>','F','9','+','T','e','s','t','P','o','i','n','t','>','I',
    '9','+','O','p','e','r','a','t','i','o','n','>','J','1','+','3',
    '3','+','I','D','L',':','o','d','b','c','a','s','/','A','S','S',
    'v','c','/','A','S','P','a','r','a','m','E','r','r','o','r',':',
    '1','.','0','g','1','+','d','0','+','0','+','1','7','3','8','5',
    '8','6','9','4','8','+','2','3','+','D','a','t','a','S','o','u',
    'r','c','e','C','o','n','f','i','g','C','h','a','n','g','e','d',
    '(','3','+','1','4','+','d','a','t','a','S','o','u','r','c','e',
    'N','a','m','e','>','a','1','+','1','2','8','+','C','1','9','+',
    'd','a','t','a','S','o','u','r','c','e','O','p','e','r','a','t',
    'i','o','n','>','F','2','4','+','d','a','t','a','S','o','u','r',
    'c','e','O','p','e','r','a','t','i','o','n','V','a','l','u','e',
    '>','F','1','+','3','3','+','I','D','L',':','o','d','b','c','a',
    's','/','A','S','S','v','c','/','A','S','P','a','r','a','m','E',
    'r','r','o','r',':','1','.','0','g','1','+','d','0','+','0','+',
    '8','3','0','3','1','8','0','5','7','+','1','2','+','G','e','n',
    'e','r','a','l','P','a','r','a','m','(','1','+','9','+','p','a',
    'r','a','m','L','i','s','t','>','c','0','+','b','3','+','I','I',
    'c','0','+','H','1','+','3','3','+','I','D','L',':','o','d','b',
    'c','a','s','/','A','S','S','v','c','/','A','S','P','a','r','a',
    'm','E','r','r','o','r',':','1','.','0','g','1','+','d','0','+',
    '0','+','3','2','0','6','7','1','9','6','3','+','1','1','+','E',
    'n','a','b','l','e','T','r','a','c','e','(','4','+','6','+','D',
    'S','N','a','m','e','>','d','1','2','8','+','1','0','+','d','i',
    'a','l','o','g','u','e','I','d','>','F','1','0','+','s','r','v',
    'r','O','b','j','R','e','f','>','a','1','+','1','2','8','+','C',
    '9','+','t','r','a','c','e','T','y','p','e','>','F','5','+','3',
    '3','+','I','D','L',':','o','d','b','c','a','s','/','A','S','S',
    'v','c','/','A','S','P','a','r','a','m','E','r','r','o','r',':',
    '1','.','0','g','1','+','d','0','+','3','1','+','I','D','L',':',
    'o','d','b','c','a','s','/','A','S','S','v','c','/','D','S','N',
    'o','t','F','o','u','n','d',':','1','.','0','g','0','+','3','7',
    '+','I','D','L',':','o','d','b','c','a','s','/','A','S','S','v',
    'c','/','D','S','A','l','r','e','a','d','y','S','t','o','p','p',
    'e','d',':','1','.','0','g','0','+','4','0','+','I','D','L',':',
    'o','d','b','c','a','s','/','A','S','S','v','c','/','T','r','a',
    'c','e','A','l','r','e','a','d','y','E','n','a','b','l','e','d',
    ':','1','.','0','g','0','+','3','7','+','I','D','L',':','o','d',
    'b','c','a','s','/','A','S','S','v','c','/','T','r','a','c','e',
    'E','n','a','b','l','e','E','r','r','o','r',':','1','.','0','g',
    '0','+','0','+','1','3','5','2','8','0','4','9','5','+','1','2',
    '+','D','i','s','a','b','l','e','T','r','a','c','e','(','4','+',
    '6','+','D','S','N','a','m','e','>','d','1','2','8','+','1','0',
    '+','d','i','a','l','o','g','u','e','I','d','>','F','1','0','+',
    's','r','v','r','O','b','j','R','e','f','>','a','1','+','1','2',
    '8','+','C','9','+','t','r','a','c','e','T','y','p','e','>','F',
    '5','+','3','3','+','I','D','L',':','o','d','b','c','a','s','/',
    'A','S','S','v','c','/','A','S','P','a','r','a','m','E','r','r',
    'o','r',':','1','.','0','g','1','+','d','0','+','3','1','+','I',
    'D','L',':','o','d','b','c','a','s','/','A','S','S','v','c','/',
    'D','S','N','o','t','F','o','u','n','d',':','1','.','0','g','0',
    '+','3','7','+','I','D','L',':','o','d','b','c','a','s','/','A',
    'S','S','v','c','/','D','S','A','l','r','e','a','d','y','S','t',
    'o','p','p','e','d',':','1','.','0','g','0','+','4','1','+','I',
    'D','L',':','o','d','b','c','a','s','/','A','S','S','v','c','/',
    'T','r','a','c','e','A','l','r','e','a','d','y','D','i','s','a',
    'b','l','e','d',':','1','.','0','g','0','+','3','8','+','I','D',
    'L',':','o','d','b','c','a','s','/','A','S','S','v','c','/','T',
    'r','a','c','e','D','i','s','a','b','l','e','E','r','r','o','r',
    ':','1','.','0','g','0','+','0','+','1','9','1','3','6','9','7',
    '9','3','2','+','1','2','+','G','e','t','V','e','r','s','i','o',
    'n','A','S','(','1','+','9','+','A','S','V','e','r','s','i','o',
    'n','<','d','3','2','+','0','+','0','+', 0};
#define odbcas_ASSvc_ics_ ((IDL_unsigned_long) 5130)

/*
 * Interface creation function for 'odbcas_ASSvc'
 */
extern "C" CEE_status
odbcas_ASSvc_ifc_(
  /* Out */ CEE_handle_def *interface_handle);

/*
 * Synchronous implementation creation function for interface 'odbcas_ASSvc'
 * Should only be be called via the ODBCAS_ASSVC_SIM_ macro.
 */
extern "C" CEE_status
odbcas_ASSvc_sim_(
  /* Out */ CEE_handle_def *implementation_handle,
  /* In  */ ...);

/*
 * Synchronous implementation creation macro for interface 'odbcas_ASSvc'
 */
#define ODBCAS_ASSVC_SIM_(impl_) odbcas_ASSvc_sim_((impl_) \
    , odbcas_ASSvc_RegProcess_sme_ \
    , odbcas_ASSvc_GetObjRefHdl_sme_ \
    , odbcas_ASSvc_UpdateSrvrState_sme_ \
    , odbcas_ASSvc_SrvrMonitorCall_sme_ \
    , odbcas_ASSvc_StartAS_sme_ \
    , odbcas_ASSvc_StopAS_sme_ \
    , odbcas_ASSvc_StartDS_sme_ \
    , odbcas_ASSvc_StopDS_sme_ \
    , odbcas_ASSvc_StatusAS_sme_ \
    , odbcas_ASSvc_StatusDS_sme_ \
    , odbcas_ASSvc_StatusDSDetail_sme_ \
    , odbcas_ASSvc_StatusSrvrAll_sme_ \
    , odbcas_ASSvc_StopSrvr_sme_ \
    , odbcas_ASSvc_StatusDSAll_sme_ \
    , odbcas_ASSvc_WouldLikeToLive_sme_ \
    , odbcas_ASSvc_SetTestPoint_sme_ \
    , odbcas_ASSvc_ClearTestPoint_sme_ \
    , odbcas_ASSvc_DataSourceConfigChanged_sme_ \
    , odbcas_ASSvc_GeneralParam_sme_ \
    , odbcas_ASSvc_EnableTrace_sme_ \
    , odbcas_ASSvc_DisableTrace_sme_ \
    , odbcas_ASSvc_GetVersionAS_sme_ )

/*
 * Asynchronous implementation creation function for interface 'odbcas_ASSvc'
 * Should only be be called via the ODBCAS_ASSVC_AIM_ macro.
 */
extern "C" CEE_status
odbcas_ASSvc_aim_(
  /* Out */ CEE_handle_def *implementation_handle,
  /* In  */ ...);

/*
 * Asynchronous implementation creation macro for interface 'odbcas_ASSvc'
 */
#define ODBCAS_ASSVC_AIM_(impl_) odbcas_ASSvc_aim_((impl_) \
    , odbcas_ASSvc_RegProcess_ame_ \
    , odbcas_ASSvc_GetObjRefHdl_ame_ \
    , odbcas_ASSvc_UpdateSrvrState_ame_ \
    , odbcas_ASSvc_SrvrMonitorCall_ame_ \
    , odbcas_ASSvc_StartAS_ame_ \
    , odbcas_ASSvc_StopAS_ame_ \
    , odbcas_ASSvc_StartDS_ame_ \
    , odbcas_ASSvc_StopDS_ame_ \
    , odbcas_ASSvc_StatusAS_ame_ \
    , odbcas_ASSvc_StatusDS_ame_ \
    , odbcas_ASSvc_StatusDSDetail_ame_ \
    , odbcas_ASSvc_StatusSrvrAll_ame_ \
    , odbcas_ASSvc_StopSrvr_ame_ \
    , odbcas_ASSvc_StatusDSAll_ame_ \
    , odbcas_ASSvc_WouldLikeToLive_ame_ \
    , odbcas_ASSvc_SetTestPoint_ame_ \
    , odbcas_ASSvc_ClearTestPoint_ame_ \
    , odbcas_ASSvc_DataSourceConfigChanged_ame_ \
    , odbcas_ASSvc_GeneralParam_ame_ \
    , odbcas_ASSvc_EnableTrace_ame_ \
    , odbcas_ASSvc_DisableTrace_ame_ \
    , odbcas_ASSvc_GetVersionAS_ame_ )

/*
 * Synchronous Multi Threaded implementation creation function for interface 'odbcas_ASSvc'
 * Should only be be called via the ODBCAS_ASSVC_MSIM_ macro.
 */
extern "C" CEE_status
odbcas_ASSvc_msim_(
  /* Out */ CEE_handle_def *implementation_handle,
  /* In  */ ...);

/*
 * Synchronous Multi Threaded implementation creation macro for interface 'odbcas_ASSvc'
 */
#define ODBCAS_ASSVC_MSIM_(impl_) odbcas_ASSvc_msim_((impl_) \
    , odbcas_ASSvc_RegProcess_sme_ \
    , odbcas_ASSvc_GetObjRefHdl_sme_ \
    , odbcas_ASSvc_UpdateSrvrState_sme_ \
    , odbcas_ASSvc_SrvrMonitorCall_sme_ \
    , odbcas_ASSvc_StartAS_sme_ \
    , odbcas_ASSvc_StopAS_sme_ \
    , odbcas_ASSvc_StartDS_sme_ \
    , odbcas_ASSvc_StopDS_sme_ \
    , odbcas_ASSvc_StatusAS_sme_ \
    , odbcas_ASSvc_StatusDS_sme_ \
    , odbcas_ASSvc_StatusDSDetail_sme_ \
    , odbcas_ASSvc_StatusSrvrAll_sme_ \
    , odbcas_ASSvc_StopSrvr_sme_ \
    , odbcas_ASSvc_StatusDSAll_sme_ \
    , odbcas_ASSvc_WouldLikeToLive_sme_ \
    , odbcas_ASSvc_SetTestPoint_sme_ \
    , odbcas_ASSvc_ClearTestPoint_sme_ \
    , odbcas_ASSvc_DataSourceConfigChanged_sme_ \
    , odbcas_ASSvc_GeneralParam_sme_ \
    , odbcas_ASSvc_EnableTrace_sme_ \
    , odbcas_ASSvc_DisableTrace_sme_ \
    , odbcas_ASSvc_GetVersionAS_sme_ )

/*
 * Configured Object initialization function
 * for interface 'odbcas_ASSvc'
 */
extern "C" void
odbcas_ASSvc_coi_(
  /* In  */ const CEE_handle_def  *object_handle,
  /* In  */ const char            *param,
  /* In  */ long                  param_len,
  /* Out */ CEE_status            *sts,
  /* Out */ CEE_tag_def           *obj_tag,
  /* Out */ CEE_handle_def        *implementation_handle);

/********************************
 * End interface 'odbcas_ASSvc' *
 ********************************/
/* End module: odbcas */
/*
 * End translation unit: ODBCAS
 */
#endif /* ODBCAS_H_ */
