/**********************************************************************
// @@@ 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 Mon Jan 31 11:14:09 2011
 * 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_516_[3];
  DS_AUTOMATION_def DSAutomation;
  IDL_short defaultFlag;
  char pad_to_offset_524_[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+d512+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[128];
  char pad_to_offset_784_[3];
  IDL_long srvrState;
  IDL_char computerName[61];
  char pad_to_offset_852_[3];
  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_896_[4];
};
typedef SRVR_STATUS_t SRVR_STATUS_def;
#define SRVR_STATUS_def_cin_ ((char *) \
    "b14+Fa1+128+CIKd512+a1+128+CFa1+61+CKd0+d0+FFb4+IIIK")
#define SRVR_STATUS_def_csz_ ((IDL_unsigned_long) 52)
struct AS_CFG_STATUS_t {
  IDL_short ASNodeId;
  char pad_to_offset_4_[2];
  IDL_long ASProcessId;
  IDL_long ASSrvrState;
  IDL_char ASProcessName[128];
  IDL_OBJECT_def ASSrvrObjRef;
  TIME_def ASLastUpdatedTime;
  VERSION_def ASVersion;
  IDL_short CfgNodeId;
  char pad_to_offset_288_[2];
  IDL_long CfgProcessId;
  IDL_long CfgSrvrState;
  IDL_char CfgProcessName[128];
  IDL_OBJECT_def CfgSrvrObjRef;
  TIME_def CfgLastUpdatedTime;
  VERSION_def CfgVersion;
};
typedef AS_CFG_STATUS_t AS_CFG_STATUS_def;
#define AS_CFG_STATUS_def_cin_ ((char *) \
    "b14+IFFa1+128+Ca1+128+CFb4+IIIKIFFa1+128+Ca1+128+CFb4+IIIK")
#define AS_CFG_STATUS_def_csz_ ((IDL_unsigned_long) 58)
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+d512+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+CIKd512+a1+128+CFa1+61+CKd0+d0+FFb4+IIIK")
#define SRVR_STATUS_LIST_def_csz_ ((IDL_unsigned_long) 55)

/*******************
 * 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) 475686096)
/*
 * 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) 1470657504)
/*
 * 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
  , /* In    */ IDL_long isoMapping
  , /* In    */ IDL_short srvrNodeId
  , /* In    */ IDL_short srvrProcessId
  , /* In    */ IDL_long_long timestamp
  );
/*
 * 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
  , /* Out   */ IDL_long *isoMapping
  , /* Out   */ IDL_short *srvrNodeId
  , /* Out   */ IDL_short *srvrProcessId
  , /* Out   */ IDL_long_long *timestamp
  );
/*
 * 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
  , /* Out   */ IDL_long *isoMapping
  , /* Out   */ IDL_short *srvrNodeId
  , /* Out   */ IDL_short *srvrProcessId
  , /* Out   */ IDL_long_long *timestamp
  );
/*
 * 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' *
 ********************************************/
typedef IDL_char ary_[187];

/*
 * 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) -1433654685)
/*
 * 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
  , /* In    */ IDL_long userID
  , /* In    */ const IDL_char *userSID
  );
/*
 * 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
  , /* In    */ IDL_long userID
  , /* In    */ const IDL_char *userSID
  );
/*
 * 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
  , /* In    */ IDL_long userID
  , /* In    */ const IDL_char *userSID
  , /* 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
  , /* In    */ IDL_long userID
  , /* In    */ const IDL_char *userSID
  , /* 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) -1705706154)
/*
 * 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) 1955443217)
/*
 * 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) 880751925)
/*
 * 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) 1804082803)
/*
 * 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) 774555330)
/*
 * 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) -868628610)
/*
 * 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) -2050635981)
/*
 * 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) -1210001052)
/*
 * 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) -1980408847)
/*
 * 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','+','4','7','5','6','8',
    '6','0','9','6','+','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','5','1','2','+','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','+','1','4','7','0','6','5','7','5',
    '0','4','+','1','2','+','G','e','t','O','b','j','R','e','f','H',
    'd','l','(','1','3','+','9','+','i','n','C','o','n','t','e','x',
    't','>','b','2','9','+','d','5','1','2','+','d','5','1','2','+',
    'd','5','1','2','+','d','5','1','2','+','d','5','1','2','+','I',
    'I','K','K','K','I','I','F','K','a','1','+','6','1','+','C','d',
    '0','+','K','K','K','I','I','I','a','1','+','5','1','+','C','d',
    '0','+','c','0','+','b','4','+','I','I','I','K','K','K','a','1',
    '+','1','0','1','+','C','d','0','+','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','5','1','2','+','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','1','0','+','i','s','o','M','a','p','p','i','n','g','<',
    'F','1','0','+','s','r','v','r','N','o','d','e','I','d','<','I',
    '1','3','+','s','r','v','r','P','r','o','c','e','s','s','I','d',
    '<','I','9','+','t','i','m','e','s','t','a','m','p','<','G','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','4','3','3','6','5','4','6','8','5','-','1',
    '5','+','U','p','d','a','t','e','S','r','v','r','S','t','a','t',
    'e','(','9','+','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','6','+','u','s','e','r','I','D','>','F','7','+','u',
    's','e','r','S','I','D','>','a','1','+','1','8','7','+','C','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','5','1','2','+','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','+','1','7','0','5','7','0','6','1','5','4','-','7',
    '+','S','t','a','r','t','D','S','(','2','+','6','+','D','S','N',
    'a','m','e','>','d','5','1','2','+','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','5','5','4','4','3','2',
    '1','7','+','6','+','S','t','o','p','D','S','(','3','+','6','+',
    'D','S','N','a','m','e','>','d','5','1','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','+','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','+','8',
    '8','0','7','5','1','9','2','5','+','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','+','1',
    '2','8','+','C','a','1','+','1','2','8','+','C','F','b','4','+',
    'I','I','I','K','I','F','F','a','1','+','1','2','8','+','C','a',
    '1','+','1','2','8','+','C','F','b','4','+','I','I','I','K','0',
    '+','0','+','1','8','0','4','0','8','2','8','0','3','+','8','+',
    'S','t','a','t','u','s','D','S','(','2','+','6','+','D','S','N',
    'a','m','e','>','d','5','1','2','+','8','+','D','S','S','t','a',
    't','u','s','<','b','1','1','+','d','5','1','2','+','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','+','7','7','4','5',
    '5','5','3','3','0','+','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','5','1','2','+','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','5','1','2',
    '+','a','1','+','1','2','8','+','C','F','a','1','+','6','1','+',
    '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','+','8','6','8','6',
    '2','8','6','1','0','-','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','5','1',
    '2','+','a','1','+','1','2','8','+','C','F','a','1','+','6','1',
    '+','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','+',
    '2','0','5','0','6','3','5','9','8','1','-','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','5','1','2','+','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','+','1',
    '2','1','0','0','0','1','0','5','2','-','1','1','+','E','n','a',
    'b','l','e','T','r','a','c','e','(','4','+','6','+','D','S','N',
    'a','m','e','>','d','5','1','2','+','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','9','8','0','4','0','8','8','4','7','-','1','2','+',
    'D','i','s','a','b','l','e','T','r','a','c','e','(','4','+','6',
    '+','D','S','N','a','m','e','>','d','5','1','2','+','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) 5257)

/*
 * 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_ */
