C and C++ Header File: EDA.H

The following are the declarations in the EDA.H header file required for a C program.

Note: On MVS, this file is the member EDACTL.DATA(EDA). On all other platforms, this file is eda.h in the etc directory of EDAHOME.

*-------------------------------------------------------------------*/
/*********************************************************************/
/* EDA.H */
/* */
/* Definitions, prototypes, and, structure definitions for the */
/* EDA API. */
/* */
/* Information Builders, Inc. */
/* New York, New York, 10001, U.S.A. */
/* All rights reserved worldwide. */
/* */
/*********************************************************************/

/*********************************************************************/
/* Protect against double inclusion */
/*********************************************************************/

#ifndef EDA_H_INCLUDED
#define EDA_H_INCLUDED

#ifdef __cplusplus
extern "C" { /* Assume C declarations for C++ */
#endif

#include "edasys.h" /* Sys dep definitions & types. */


typedef EDAPTR(void) EDAVPTR;
#ifndef EDACPTR
/* Extend the (EDASYS defined) EDAPTR type */
typedef EDAPTR(char) EDACPTR;
typedef EDAPTR(long) EDALPTR;
typedef void (EDA_COMPILER_ORDER EDA_PCALLBACK) (void);
typedef void (EDA_COMPILER_ORDER EDA_ECALLBACK) (EDAVPTR);
#endif
/*-------------------------------------------------------------*/
/* Version numbers moved from RDAVAR so can print w/EDATRACE */
/*-------------------------------------------------------------*/
#define MAJVER 5L
#define MINVER 3L
#define STPVER 0L

/**************************** Result Codes *****************************/

/* Following the execution of a function call the relevant result
code will be either zero (successful completion), negative (error) or
positive (successful with some qualification). */

#define EDA_SUCCESS 0L /* Successful function execution */

/* Warnings */

#define EDA_FIELD_NOT_FOUND 1L /* No desc found for this field */
#define EDA_NO_FIELD_INFO 2L /* No field desc for this table */
#define EDA_BREAK_OCCURRED 3L /* Process interrupt. by another thread */
#define EDA_TRUNCATED 4L /* Field truncated, too small */
#define EDA_END_OF_SET 5L /* End of set indicator */
#define EDA_TIMEOUT 6L /* Timeout */
#define EDA_END_OF_TRAN 7L /* End of transmission indicator */
#define EDA_FIELD_OVERFLOW 8L /* Server field overflowed */
#define EDA_STILL_EXECUTING 9L /* Fctn not complete in nonblock mode */
#define EDA_TRACE_INIT_FAIL 10L /* Default trace initialization failure */

/* EDA context and SCB errors */

#define EDA_INVALID_EID (-1L) /* Invalid context */
#define EDA_TOO_MANY_CONTEXTS (-2L) /* Too many EDA contexts */
#define EDA_INVALID_SID (-3L) /* Invalid sid */
#define EDA_TOO_MANY_SCBS (-4L) /* Too many scbs allocated */
#define EDA_SCB_NOT_INIT (-5L) /* The scb is not initialized */
#define EDA_SCB_INIT (-6L) /* The scb is initialized */

/* EDALINK errors */

#define EDA_INIT_EDANET_ERROR (-7L) /* Cannot initialize EDALINK */
#define EDA_CLOSE_EDANET_ERROR (-8L) /* Cannot close down EDALINK */
#define EDA_CONNECT_ERROR (-9L) /* Error connecting to server */
#define EDA_DISCONNECT_ERROR (-10L) /* Error disconnecting from server */
#define EDA_DATA_SEND_ERROR (-11L) /* Error sending data to server */
#define EDA_DATA_RECEIVE_ERROR (-12L) /* Error receiving data */
/* General errors */

#define EDA_INVALID_OPERATION (-13L) /* Operation not permitted */
#define EDA_MEMORY_OVERFLOW (-14L) /* Insufficient memory available */
#define EDA_BAD_PARM_VAL (-15L) /* Invalid parameter value */
#define EDA_TUPLE_MISALIGNED (-16L) /* Tuple alignment error */
#define EDA_ACCESS_DENIED (-17L) /* Userid/Password invalid */
#define EDA_INTERNAL_API_ERROR (-18L) /* Unexplained internal error */
#define EDA_UNAVAILABLE_FUNCTION (-19L) /* Not supported at this API level */

#define EDA_PASSWORD_EXPIRED (-20L)
#define EDA_INVALID_NEW_PASSWORD (-21L)
#define EDA_ENCRYPTION_VERSION_MISMATCH (-22L)
#define EDA_CONNECTION_NO_LONGER_VALID (-23L)
#define EDA_INVALID_CODE_PAGE (-24L)
#define EDA_EXECUTE_NOT_PREPARED (-25L)


#define EDA_INVALID_SERVER (-26L) /* EDACONNECT to unk server */
#define EDA_INVALID_STATEMENT (-27L) /* SERVER rejected statement */
#define EDA_INVALID_MSG_UOW (-28L)
#define EDA_INVALID_MSG_ATT (-29L)
#define EDA_INVALID_PROTOCOL (-30L)
#define EDA_INVALID_MSG_COMMITERR (-31L)

#define EDA_USERID_IN_USE (-32L)
#define EDA_RESOURCE_LIMIT (-33L)
#define EDA_COMM_TIMEOUT (-34L) /* communications timed out */
#define EDA_BAD_USERID (-35L) /* security violation */
#define EDA_REVOKED_USERID (-36L) /* security violation */
#define EDA_SRV_COMM_FAIL (-37L) /* server reports comm error */
#define EDA_INVALID_LICENSE (-38L) /* server reports invl. license */
#define EDA_INVALID_METADATA (-39L) /* metadata is corrupt */
#define EDA_INVALID_SERVICE (-40L) /* 46981 service at server issue */
#define EDA_API_MAX_ERROR (-40L) /* Max negative error code */
#define EDA_API_MAX_WARNING (10L) /* Max positive warning code */
/***************************** Callback types ******************************/

/*----------------------------------------------------------*/
/* callback types used to establish the callback in */
/* EDACALLBACK(), and filled into the callback block when */
/* the callback routine is called by EDA. */
/* Note: LOCK and UNLOCK do NOT have callback blocks. */
/* p26084 - add NOTIFY callback for transmission block */
/*----------------------------------------------------------*/


#define EDA_CB_TRACE 0L /* trace callback routine */
#define EDA_CB_MEMORY 1L /* memory callback routine */

#define EDA_CB_M_ALLOC 2L /* memory type to allocate */
#define EDA_CB_M_FREE 3L /* memory type to deallocate */
#define EDA_CB_M_RESIZE 4L /* memory type to request resize */

#define EDA_CB_LOCK 2L /* NOT SUPPORTED */
#define EDA_CB_UNLOCK 3L /* NOT SUPPORTED */
#define EDA_CB_MESSAGE 4L /* scan messages received */
#define EDA_CB_NOTIFY 5L /* conditions requiring poss. action */
#define EDA_CB_MASFILE 6L /* 32461 add a callback for masters */
#define EDA_CB_IOCOMPLETE 7L /* 32765 add a callback for IO msg */


/* direction codes for notify callback (0=not comm) */
#define EDA_COMMCBRECEIVE 1
#define EDA_COMMCBSEND 2

/* return codes for notify callback */
#define EDA_CBFAIL 0
#define EDA_CBCONTINUE 1
#define EDA_CBRETRY 2
/***************************** Variable codes ******************************/


/* Variable settings */

#define VAR_RESET_SLIM -1L

#define EDA_VAR_USE_NULL -3L
#define EDA_VAR_BLOB_TP -4L

#define EDA_VAR_SET 1L
#define EDA_VAR_RESET 0L

#define EDA_VAR_ON 1L
#define EDA_VAR_OFF 0L

#define EDA_VAR_ENGINE 0L
#define EDA_VAR_FORMAT 1L
#define EDA_VAR_MAJOR 2L
#define EDA_VAR_MINOR 3L
#define EDA_VAR_RESERVED04 4L
#define EDA_VAR_TRACE 5L
#define EDA_VAR_TRACE_LVL1 6L
#define EDA_VAR_TRACE_LVL2 7L
#define EDA_VAR_TRACE_LVL3 8L
#define EDA_VAR_TRACE_LVL4 9L
#define EDA_VAR_TRACE_LVL5 12272L
#define EDA_VAR_TRACE_LVL6 12273L
#define EDA_VAR_TRACE_LVL7 12274L
#define EDA_VAR_TRACE_LVL8 12275L
#define EDA_VAR_TRACE_LVL9 12276L /* unused at the moment */
#define EDA_VAR_ODIN_LVL1 12277L /* the following are ODIN trace levels */
#define EDA_VAR_ODIN_LVL2 12278L
#define EDA_VAR_ODIN_LVL3 12279L
#define EDA_VAR_ODIN_LVL4 12280L
#define EDA_VAR_ODIN_LVL5 12281L
#define EDA_VAR_TRACE_DEF 12282L /* 36219 */
#define EDA_VAR_READLIMIT 10L
#define EDA_VAR_RECLIMIT 11L
#define EDA_VAR_ALL 12L
#define EDA_VAR_SMARTMODE 13L
#define EDA_VAR_QDEPTH 14L
#define EDA_VAR_AUTOPURGE 15L
#define EDA_VAR_AUTOCOMMIT 16L
#define EDA_VAR_ACCESSMODE 17L
#define EDA_VAR_SERVERCOUNT 18L
#define EDA_VAR_QUIT_ALL 19L
#define EDA_VAR_HARD_DISCONNECT 20L
#define EDA_VAR_RESERVED21 21L
#define EDA_VAR_SLIM_VALUE 22L
#define EDA_VAR_RESERVED23 23L
#define EDA_VAR_RESERVED24 24L
#define EDA_VAR_RESERVED25 25L
#define EDA_VAR_ATT_NAME 26L
#define EDA_VAR_ATT_CLASS 27L
#define EDA_VAR_PREALLOC 28L /* for TP servers only */
#define EDA_VAR_QUIT_BREAK 29L
#define EDA_VAR_SERVER_NAME 30L
#define EDA_VAR_NODE_INFO 31L
#define EDA_VAR_HOLD_FILE 32L
#define EDA_VAR_AS_FILE 33L
#define EDA_VAR_IWAY_FOUND 34L
#define EDA_VAR_IWAY_PATH 35L
#define EDA_VAR_STEP 36L
#define EDA_VAR_MSGLIST 37L
#define EDA_VAR_ALIGN4 120L
#define EDA_VAR_ALIGN8 121L
#define EDA_VAR_XRETRIEVE 122L
#define EDA_VAR_CDNOTATION 123L
#define EDA_VAR_DBCSCHECK 124L
#define EDA_VAR_SERVEMAJOR 125L
#define EDA_VAR_SERVEMINOR 126L
#define EDA_VAR_NO_MPLEX 127L
#define EDA_VAR_FULLDUPLEX 128L
#define EDA_VAR_QUERY_ID 129L
#define EDA_VAR_SUBQUERY_ID 130L
#define EDA_VAR_RESERVED131 131L
#define EDA_VAR_NO_CATALOG 132L
#define EDA_VAR_RESERVED133 133L
#define EDA_VAR_SERVICE_NAME 134L
#define EDA_VAR_RESERVED135 135L
#define EDA_VAR_DEFAULT_ENGINE 136L
#define EDA_VAR_ENGINE_REL 137L
#define EDA_VAR_RESERVED138 138L
#define EDA_VAR_NOFILTER_MSGS 139L
#define EDA_VAR_STARTUP 140L
#define EDA_VAR_CLOSEDOWN 141L
#define EDA_VAR_COMM_ID 142L /* Internal IBI use only */
#define EDA_VAR_SESS_ID 143L /* Internal IBI use only */
#define EDA_VAR_SERVER_ID 144L /* Internal IBI use only */
#define EDA_VAR_SESSION_ID 145L /* Internal IBI use only */
#define EDA_VAR_RESERVED146 146L
#define EDA_VAR_NO_FRAGMENT 147L
#define EDA_VAR_COLINFO_PTR 148L
#define EDA_VAR_COLINFO_SIZE 149L
#define EDA_VAR_SCBTYPE 150L /* 21765 type of this scb */
#define EDA_VAR_STATE_TRACE 151L
#define EDA_VAR_NOSIGVER 152L
#define EDA_VAR_LOG 153L
#define EDA_VAR_RCVTIME 154L
#define EDA_VAR_LOGID 155L
#define EDA_VAR_LINKID 156L
#define EDA_VAR_LINKHDL 157L
#define EDA_VAR_USER_AREA 158L /* void * to user area */
#define EDA_VAR_PASSIVE 159L /* set connection passive */
#define EDA_VAR_CAN_PASSIVATE 160L /* connection allows passivating */
#define EDA_VAR_EXTENDSEC 161L /* extend security fail rpting */
#define EDA_VAR_XASWITCH 162L /* 41131 X/Open Group RM */
#define EDA_VAR_NLSCTX 163L /* 42967 ODBC requires this */
#define EDA_VAR_SWAPLL 300L /* swaps llidf.ll based on hardware */
#define EDA_VAR_ASYCTL 301L /* sets EDA_ASYCTL */
#define EDA_VAR_ASYCMNT 302L /* sets ASY comment */
#define EDA_VAR_ASYID 303L /* gets last uowid, val->char[16] */
#define EDA_VAR_NO_BLOCK 304L /* force 'sync' on prepares */
#define EDA_VAR_AUTOLOCK 305L /* thread safety support */
#define EDA_VAR_CTX 306L /* 33234 internal use only */
#define EDA_VAR_R1H 307L /* 34168 internal use only */
#define EDA_VAR_NODTRC 308L /* 34168 internal use only */
#define EDA_VAR_R1SYNC 309L /* 34700 internal use only */
#define EDA_VAR_NON_CLIENT 310L /* 38432 internal use only */
#define EDA_VAR_PK_PROD 311L /* 40107 internal use only */
#define EDA_VAR_REMOTE_GATEWAY 312L /* 42765 internal use only */
#define EDA_PK_ODBC 1L /* 40107 internal use only */
#define EDA_PK_ACTX 2L /* 40107 internal use only */
#define EDA_PK_OLEDB 3L /* 40107 internal use only */
#define EDA_VAR_PKPROD_MAX 3L /* 40107 internal use only */
#define EDA_VAR_MAX_PUSET 0xffff /* initial value */
/* Engine variable settings */
#define EDA_VAR_ENGINE_STANDARD 0L
#define EDA_VAR_ENGINE_DB2 1L
#define EDA_VAR_ENGINE_ORACLE 2L
#define EDA_VAR_ENGINE_TERADATA 3L
#define EDA_VAR_ENGINE_SQLDS 4L
#define EDA_VAR_ENGINE_SHAREBASE 5L
#define EDA_VAR_ENGINE_SQLMSS 6L
#define EDA_VAR_ENGINE_SUPRA 7L
#define EDA_VAR_ENGINE_INGRES 8L
#define EDA_VAR_ENGINE_SYBASE 9L
#define EDA_VAR_ENGINE_RDB 10L
#define EDA_VAR_ENGINE_INFORMIX 11L
#define EDA_VAR_ENGINE_UNIFY 12L
#define EDA_VAR_ENGINE_SQLEDA 13L
#define EDA_VAR_ENGINE_OS2EE 14L
#define EDA_VAR_ENGINE_SQL400 15L
#define EDA_VAR_ENGINE_NONSTOP 16L
#define EDA_VAR_ENGINE_ALLBASE 17L
#define EDA_VAR_ENGINE_PROGRESS 18L
#define EDA_VAR_ENGINE_REDBRICK 19L
#define EDA_VAR_ENGINE_UNIVERSE 20L
#define EDA_VAR_ENGINE_DATACOM 21L
#define EDA_VAR_ENGINE_INFOACC 22L
#define EDA_VAR_ENGINE_SQLIDMS 23L
#define EDA_VAR_ENGINE_STORHOUSE 24L
#define EDA_VAR_ENGINE_ODBC 25L
#define EDA_VAR_ENGINE_MSQ 26L
#define EDA_VAR_ENGINE_NUCLEUS 27L
#define EDA_VAR_ENGINE_MSACCESS 28L
#define EDA_VAR_ENGINE_MYSQL 29L
#define EDA_VAR_ENGINE_MAX 29
/* 33922 Format settings */
#define EDA_VAR_FORMAT_ALPHA 0L
#define EDA_VAR_FORMAT_DIF 1L
#define EDA_VAR_FORMAT_LOTUS 2L
#define EDA_VAR_FORMAT_SYLK 3L
#define EDA_VAR_FORMAT_IXF 4L
#define EDA_VAR_FORMAT_HTML 5L
#define EDA_VAR_FORMAT_EXCEL 6L
#define EDA_VAR_FORMAT_WP 7L
#define EDA_VAR_FORMAT_DOC 8L
#define EDA_VAR_FORMAT_BINARY 9L
#define EDA_VAR_FORMAT_POSTSC 10L
#define EDA_VAR_FORMAT_PS 11L
#define EDA_VAR_FORMAT_HTMTAB 12L
#define EDA_VAR_FORMAT_COMMA 13L
#define EDA_VAR_FORMAT_GIF 14L
#define EDA_VAR_FORMAT_BMP 15L
#define EDA_VAR_FORMAT_FXF 16L
#define EDA_VAR_FORMAT_VIEWER 17L
#define EDA_VAR_FORMAT_CLIP 18L
#define EDA_VAR_FORMAT_RTF 19L
#define EDA_VAR_FORMAT_PDF 20L
#define EDA_VAR_FORMAT_EXL4 21L
#define EDA_VAR_FORMAT_EXL2K 22L
#define EDA_VAR_FORMAT_NOTES 23L
/* ALL settings */

#define EDA_VAR_ALL_STANDARD 0L
#define EDA_VAR_ALL_ON 1L
#define EDA_VAR_ALL_PASS 2L
#define EDA_MAX_SERVER_LEN 8L


/******* maximum size for array of set values passed to EDAPINIT *******/

#define EDA_MAX_PINIT 32

/********** special setting for null-deliminated parameters *********/

#define EDA_NULL_DELIM -1L

/**************************** Other EDA types ******************************/


/* Data type codes */
#define EDA_NO_TYPE_CODE 0L
#define EDA_I_TYPE_CODE 1L
#define EDA_F_TYPE_CODE 2L
#define EDA_D_TYPE_CODE 3L
#define EDA_P_TYPE_CODE 4L
#define EDA_A_TYPE_CODE 5L
#define EDA_B_TYPE_CODE 6L
#define EDA_DATE_TYPE_CODE 7L
#define EDA_T_TYPE_CODE 8L
#define EDA_K_TYPE_CODE 9L
#define EDA_BLOB_TYPE_CODE 10L
#define EDA_CLOB_TYPE_CODE 11L
#define EDA_ULOB_TYPE_CODE 12L
#define EDA_TIME_TYPE_CODE 13L
#define EDA_TSTMP_TYPE_CODE 14L
#define EDA_V_TYPE_CODE 15L

#define EDA_MAX_TYPE_CODE 15

#define EDA_DEFAULT_BUFFERSIZE 1024L
#define EDA_UNKNOWN_BLOB_LENGTH 0L

/* EDA Fetch types */
#define EDA_BINARY 0L
#define EDA_ALPHANUM 1L
/* EDA Null types */
#define EDA_CAN_BE_NULL 1L
#define EDA_CANNOT_BE_NULL 0L

#define EDA_IS_NULL 1L
#define EDA_IS_NOT_NULL 0L

/* Using */
#define EDA_ADD_PARM 0L
#define EDA_END_PARM_LIST 1L
#define EDA_CANCEL_PARM_LIST 2L
#define EDA_CANCEL_ALL_PARMS 3L

/* Commit */

#define EDA_COMMIT 1L
#define EDA_ROLLBACK 0L
#define XAPREPARE 2L
#define XACOMMIT 3L
#define XAROLLBACK 4L
#define XARECOVER 5L

/* Internal lock controls */
#define EDA_LOCK_UNLOCK 0 /* unlock this resource */
#define EDA_LOCK_LOCK 1 /* lock this resource */
/* Value codes that can appear in colInfo follow */

#define EDA_COLINFO_AVAIL 0 /* data available, length known */
#define EDA_COLINFO_NULL EDA_IS_NULL /* data in column is NULL */
#define EDA_COLINFO_BLOB 2 /* data available, length unknown */
#define EDA_COLINFO_ERR 3 /* unable to compute Available */
#define EDA_COLINFO_OFLO EDA_FIELD_OVERFLOW /* value overflow */

/* eda connection codes (last parm on EDACONNECT()) */
#define EDA_CONNECT_DEFAULT ( 0) /* take first sync server */
#define EDA_CONNECT_SEMIPLEX (-4) /* subordinate scb */
#define EDA_CONNECT_SELF (-5) /* API/SQL as a data base */
#define EDA_CONNECT_PEER (-6) /* reverse peer server */
#define EDA_CONNECT_URL (-7) /* 34062 - on the fly */

/* scbtypes returned from inspect of EDA_VAR_SCBTYPE */
#define EDA_SCBTYPE_UNKNOWN (-1) /* CLASS is not an EDA type */
#define EDA_SCBTYPE_SYNC (1) /* synchronous server */
#define EDA_SCBTYPE_ASYNC (2) /* asynchronous server */
#define EDA_SCBTYPE_SELF (3) /* local EDABASE scb */
#define EDA_SCBTYPE_ASERV (4) /* asynchronous executor */
#define EDA_SCBTYPE_LOCAL (5) /* local server */
#define EDA_SCBTYPE_PEER (6) /* reverse channel */
#define EDA_SCBTYPE_TP (7) /* transaction processor */
#define EDA_SCBTYPE_DIST (8) /* distributor node */
#define EDA_SCBTYPE_CLUSTER (8) /* cluster control node */

/* commands to EDABROWSE */
#define EDABASE_SELECT 0 /* also if cmd=NULL */
#define EDABASE_DELETE 1


/* EDABROWSE table identifiers */
#define EDABASE_TBL_ENGINES 1
#define EDABASE_SEL_ENGINES_ALL 0 /* all engines, also if selector=NULL */
#define EDABASE_SEL_ENGINES_NAME 1
#define EDABASE_SEL_ENGINES_TYPE 2

#define EDABASE_TBL_SERVERS 2
#define EDABASE_SEL_SERVERS_NOFILTER 0
#define EDABASE_SEL_SERVERS_SYNC 1
#define EDABASE_SEL_SERVERS_ASYNC 2
#define EDABASE_SEL_SERVERS_ALL \
(EDABASE_SEL_SERVERS_SYNC | EDABASE_SEL_SERVERS_ASYNC)
#define EDABASE_SEL_SERVERS_EXACT 4
#define EDABASE_SEL_SERVERS_DEFAULT 8
#define EDABASE_SEL_SERVERS_NOINTERL 16
#define EDABASE_SEL_SERVERS_ODBC_ONLY 32
#define EDABASE_SEL_SERVERS_ALL_ODBC \
(EDABASE_SEL_SERVERS_SYNC | EDABASE_SEL_SERVERS_ASYNC | EDABASE_SEL_SERVERS_ODBC_ONLY)

#define EDABASE_TBL_ERRORS 3
#define EDABASE_SEL_ERRORS_ALL 0
#define EDABASE_SEL_ERRORS_CODE 1

#define EDABASE_TBL_MSGS 4
#define EDABASE_SEL_MSGS_ALL 0
#define EDABASE_SEL_MSGS_UOWID 1 /* action select by ID of UOW */
#define EDABASE_SEL_MSGS_HUOW 2 /* action select by handle to UOW */

#define EDABASE_TBL_TABLES 5
#define EDABASE_SEL_TABLES_ALL 0

/* EDASQL execute flags */
#define EDA_EXECUTE_BUILD 0
#define EDA_EXECUTE_EXECUTE 1
#define EDA_EXECUTE_CANCEL 2
#define EDA_EXECUTE_ALOB 4
/* order of the fields returned by browse/engines  */
#define EDA_BENG_FLD_NAME 1
#define EDA_BENG_FLD_CODE 2

/* order of the fields returned by browse/servers */
#define EDA_BSRV_FLD_NAME 1
#define EDA_BSRV_FLD_CODE 2
#define EDA_BSRV_FLD_PARTNER 3
#define EDA_BSRV_FLD_INTERNAL 4

/* order of the fields returned by browse/errors */
#define EDA_BERR_FLD_CODE 1
#define EDA_BERR_FLD_TEXT 2

/* order of the fields returned by browse/messages */
#define EDA_BMSG_FLD_UOWID 1
#define EDA_BMSG_FLD_USERID 2
#define EDA_BMSG_FLD_STATE 3
#define EDA_BMSG_FLD_ASRC 4
#define EDA_BMSG_FLD_ERRORTEXT 5
#define EDA_BMSG_FLD_ERRORBY 6
#define EDA_BMSG_FLD_SENTSTAMP 7
#define EDA_BMSG_FLD_PROCSTAMP 8
#define EDA_BMSG_FLD_MODULE 9
#define EDA_BMSG_FLD_REQUEST 10
#define EDA_BMSG_FLD_CONTENT 11 /* Result set */

/* until new messaging replaces old */
#define EDA_BMSG_FLD_ENTRY 16
#define EDA_BMSG_FLD_COMMENT 17
#define EDA_BMSG_FLD_USERDATA 18
#define EDA_BMSG_FLD_MSGID 19
#define EDA_BMSG_FLD_PRIORITY 20
#define EDA_BMSG_FLD_CLASS 21
#define EDA_BMSG_FLD_CLASSTYPE 22

/* message states */

#define EDA_UOWSTATE_CONFIRM 1
#define EDA_UOWSTATE_FAILED 2
#define EDA_UOWSTATE_INDOUBT 3
#define EDA_UOWSTATE_TIMEDOUT 4
/*  Codes in messaging MsgRC (generated by AS)              */
#define EDA_MSGRC_TIMEOUT 1
#define EDA_MSGRC_NODEM 2
#define EDA_MSGRC_NOENTRY 3
#define EDA_MSGRC_TARGET 4 /* DEM caused UOW to fail, see TargRC */
#define EDA_MSGRC_PROTOCOL 5 /* DEM caused UOW to fail, bad LLIDF */
/*  Message Component Type   */
#define EDA_MSGTYPE_QUERY 1 /* content is a CLOB with the query */
#define EDA_MSGTYPE_RESPONSE 2 /* content is an ALOB based answer set */
#define EDA_MSGTYPE_USER 256 /* base of user message types */

/*----------------------------------------------------------*/
/* message states */
/*----------------------------------------------------------*/

#define EDA_MSGSTATE_SENT 0x00
#define EDA_MSGSTATE_INDOUBT 0x01
#define EDA_MSGSTATE_EXPIRED 0x02
#define EDA_MSGSTATE_COMPLETE 0x03 /* reply received */
#define EDA_MSGSTATE_FAILED 0x04 /* reply received (ie no such DEM) */

/* EDATXCTL structure CREATE codes */
#define EDA_TX_ASYCTL 1 /* create an EDA message stream */
#define EDA_TX_ASYATTCTL 2 /* open another message stream */
#define EDA_TX_ASYRSETUP 3 /* initiate reply capability (first) */
#define EDA_TX_ASYREPLY 4 /* prepare a reply to existing UOW */
/* pStructure -> incoming huow */
#define EDA_TX_ASYDUPLICATE 5 /* exact copy an attachment */
#define EDA_TX_SYNC 9 /* do a SYNC operation */

/* EDATXCTL structure COMPLETE codes */

#define EDA_TXCTL_COMMIT 7 /* commit a new UOW */
#define EDA_TXCTL_CONFIRM 8 /* confirm a UOW reply */
#define EDA_TXCTL_ABORT 9 /* abort a UOW reply (partway done) */
#define EDA_TXCTL_FAIL 10 /* fail a UOW reply (can't do ) */
#define EDA_TXCTL_RETRY 11 /* please reschedule this UOW */

/* EDATXCTL structure POST codes */
#define EDA_TXCTL_ERROR 1 /* post an error to this UOW */

/* EDATXCTL command codes */
#define EDA_TXCTL_CREATE 1 /* creates uow or att */
#define EDA_TXCTL_COMPLETE 2 /* take final action */
#define EDA_TXCTL_POST 3 /* take general action */
#define EDA_TXCTL_CANCEL 4 /* quit from separate thread */
/********************* Structure definitions ***************************/
/* Binary return structures */

typedef struct s_estamp /* return time and timestamp to this type */
{
long year ;
long month ;
long day ;
long hour ;
long minute ;
long second ;
long fraction;
} EDA_BINARY_TIMESTAMP;
/* Asynchronous messaging information structure */

typedef struct s_edaasyx
{
long size ; /* fill with sizeof(EDA_ASYCTL) before call */
long hStream ; /* returned by EDA */
long classType ; /* MSGTYPE of this attachment */
long priority ; /* priority of this message */
long timeout ;
char szClass[36] ; /* name of this class, max 32 characters */
char szModule[36] ;
char szEntry[36] ;
char szComment[120] ; /* comment to appear in browse listings */
char abUser[128] ; /* user-specific information */
}EDA_ASYCTL;
typedef EDAPTR(struct s_edaasyx) PEDA_ASYCTL;

typedef struct s_edaasya
{
long size ; /* fill in with sizeof(EDA_ASYCTL) before call*/
long hStream ; /* returned by EDA */
long classType ; /* MSGTYPE of this attachment */
char szClass[36] ; /* name of this class 32 chars meaningful */
}EDA_ASYATTCTL;
typedef EDAPTR(struct s_edaasya) PEDA_ASYATTCTL;

#define EDA_ATT_ATTRIB_REQUEST 0x0001
#define EDA_ATT_ATTRIB_RESPONSE 0x0002 /* non-sql response */
#define EDA_ATT_ATTRIB_SQLRESP 0x0200 /* EDA SQL response answer set */
#define EDA_ATT_ATTRIB_LLIDF 0x4000 /* in llidf format */
#define EDA_ATT_ATTRIB_NOBROWSE 0x8000 /* prevent EDABROWSE from seeing */


typedef struct s_edaasyerr
{
long size ; /* fill in with sizeof(EDA_ASYCTL) before call */
long errclass ; /* which error is being posted */
/* 0 = DEM error , 1 = component error */
long code ; /* error code */
char szText[256] ; /* error message text */

}EDA_ASYERROR;
typedef EDAPTR(struct s_edaasyerr) PEDA_ASYERROR;

/* For every ECX there may correspond one or more session control blocks or
scbs. A scb represents a series of SQL operations occurring serially. */

typedef struct
{
EDA_ID eid; /* EDA context identifier */
long sid; /* Session identifier */
char command[12]; /* Most recent command executed */
long status; /* Status code */
long nbrcols; /* Column count */
long a_size; /* Tuple size (ALPHANUM) */
long b_size; /* Tuple size (BINARY) */
long count; /* Row count */
long msg_type; /* Message type code (0 = No message) */
char msg_org[8]; /* Message originator */
long msg_code; /* Message code */
char msg_text[136]; /* Text of message (null terminated) */
long msg_len; /* Length of message */
long msg_pending; /* Message pending indicator */
long msg_overflow; /* Message queue depth exceeded */
char user[8]; /* Reserved area for user */
char parm_count; /* 37323 number of prepare replacement fields */
char reserved; /* Reserved area for future use */
char xopen[6] ; /* xopen code associated with received message */

} EDA_scb, EDA_SCB; /* 17814 request for all caps */
/* A EDA_info_area contains a description of a column in an answer set. It
is initialized by a call to EDAINFO and can be used by the application pro-
gram to map the contents of a tuple returned by EDAFETCH. */

typedef struct
{
char col_name[68]; /* Column name */
long col_length; /* Length of column name string */
long col_nbr; /* Index of this column (1,2, ...) */
char alias[68]; /* Alternate column name */
long al_length; /* Length of alternate column name */
long type; /* Type of the field */
long length; /* Length of the field */
long dcml; /* # decimal places */
char options[8]; /* Edit options for the field */
long b_size; /* Size of field in binary */
long a_offset; /* Alphanumeric byte position of field in tuple */
long b_offset; /* Binary byte position of field in tuple */
long can_be_null; /* 1 => yes; 0 => no. */
char user[16]; /* Reserved for user */

} EDA_info_area, EDA_INFO_AREA;

/*----------------------------------------------------------*/
/* callback block definition; the callback block address is */
/* passed to EDA in EDACALLBACK(), and is filled in by EDA */
/* immediately before calling the application callback rtn. */
/*----------------------------------------------------------*/

struct EDA_CALLBACK_BLOCK {
long type ; /* type of callback (EDA_CB code) */
long count ; /* incremented before callback */
EDA_ID eid ; /* identifier of EDA context */
long sid ; /* identifier of scb */
long status ; /* last error status issued */
long subcode ; /* IBI use only */
char user[16] ; /* reserved for user use */
union
{
struct
{
long event ; /* event code being traced */
long reserved ;
char msg[136] ; /* trace message */
long len_msg ;
} trace;

struct
{
short type ; /* 2: allocate, 3: free, 4: resize */
short real ; /* 0: standard, 1: real */
short scope ; /* 0: local , 1: global */
short mobility ; /* 0: movable , 1: fixed */
unsigned short size; /* 25090 (up to 32K) in bytes */
short result ; /* set EDA success code here */
long reserved ;
EDAPTR(void) pStd ; /* standard address of memory */
EDAPTR(void) pReal; /* real address if applicable */
} memory;

struct
{
char cfg_name[128] ; /* store new link config name */
long cfg_rc ; /* indicate failure in user assignment */
} config ;

struct /* 14381 & 32461 add message & master file callback */
{
char msg[128] ; /* message can be up to 128 chars */
short len; /* message len */
short rc ; /* return how to handle this message */
#define EDA_MSG_KEEP 0 /* continue processing this message */
#define EDA_MSG_DELETE 1 /* message handling done, eliminate */
void *context ; /* 46308 context holder */
} message ;

struct /* 26084 add notify callback */
{
/* add parms passed from odin here */
char msg[128]; /* message can be up to 127 chars */
long status ; /* API status code for this failure */
long subcode; /* elaboration on reason */
long native; /* native (platform-specific) code */
long action; /* Fail, Retry or Continue return code */
} notify;

struct
{
/* subcodes */
#define EDA_CBK_IOCOMP_RDY 1 /* result ready to retrieve */
#define EDA_CBK_IOCOMP_SND 2 /* send to server completed */

         EDAPTR(EDA_SCB) pscb  ;
EDAVPTR user_area; /* context set via EDA_VAR_USER_AREA */
long rc;
} iocomplete;

char spacer[128];
} u;
};



typedef struct EDA_CALLBACK_BLOCK EDA_CBB;
typedef EDAPTR(struct EDA_CALLBACK_BLOCK) PEDA_CBB;
/*----------------------------------------------------------*/
/* An LLIDF is used in EDA asynchronous mode to exchange */
/* information with a specialized server */
/*----------------------------------------------------------*/
typedef struct s_llidf
{
unsigned short ll; /* length including sizeof(EDA_LLIDF) */
unsigned char id; /* user's protocol identifier */
unsigned char f; /* component format */
}EDA_LLIDF;
typedef EDAPTR(struct s_llidf) PEDA_LLIDF;

typedef struct
{
int size;
char *pszCfgName;
long lLevel;
}EDA_OPENT; /* 17814 for NT STARTUP Inspect/Set */

/*----------------------------------------------------------*/
/* p19655 - An EDA ROWINFO array describes each column of */
/* a retrieved row. The data is treated as an array of */
/* blocks, each element describing a column. The first */
/* element (0) of the array is reserved for future use. */
/* Therefore, to access the information for a column, use */
/* an index of the column number. When allocating memory */
/* for a rowinfo array, allocate for the number of */
/* columns plus 1 for the 0 column. */
/* */
/* The colInfo field holds an EDA_COLINFO_xxx value. */
/* The colAvailable field holds the number of bytes */
/* remaining to be retrieved for the column by */
/* the EDAFIELD() function. If this is 0, all of */
/* the data has been retrieved. */
/*----------------------------------------------------------*/
typedef struct
{
unsigned long colInfo;
unsigned long colAvailable;
unsigned long colRetrieved;
union
{
unsigned long data;
EDAPTR(void) ptr;
}colUser; /* reserved for application, not changed by EDA */
}EDA_COLINFO;



/********************* Prototypes for API functions ************************/

/* Initialize EDA, create an EDA context with default callbacks. */
extern EDA_APIENTRY EDAINIT(EDAPTR(EDA_ID) ecx, EDALPTR result);

/* Terminate and destroy EDA context */
extern EDA_APIENTRY EDATERM(EDAPTR(EDA_ID) ecx, EDALPTR result);

/* Establish a link with the EDA database server. */
extern EDA_APIENTRY EDACONNECT(EDAPTR(EDA_ID) ecx, EDAPTR(EDA_scb) scb,
EDACPTR uname, EDALPTR un_length,
EDACPTR password, EDALPTR pw_length,
EDAVPTR sv_name, EDALPTR sv_length);

/* Sever the link, made via EDACONNECT, with the EDA database server. */
extern EDA_APIENTRY EDAXCONNECT(EDAPTR(EDA_scb) scb);

/* control an EDA transaction */
extern EDA_APIENTRY EDATXCTL(EDAPTR(EDA_scb) scb,
EDAVPTR pStructure,
EDALPTR pType, /* EDA_TX_<type> */
EDALPTR command); /* EDA_TXCMD_<type> */

/* Submit the given SQL statement to the server for execution. */
extern EDA_APIENTRY EDASQL(EDAPTR(EDA_scb) scb,
EDACPTR statement, EDALPTR slength,
EDALPTR est1, EDALPTR est2,
EDACPTR dpassword, EDALPTR dlength,
EDALPTR execute);

/* send a command to an EDA server */
extern EDA_APIENTRY EDAFOCUS( EDAPTR(EDA_scb) pscb,
EDACPTR statement, EDALPTR pslength );

/* Send data in an eda message */
extern EDA_APIENTRY EDASEND(EDAPTR(EDA_scb) scb,
EDAVPTR pStructure,
EDAVPTR pdata, EDALPTR slength,
EDALPTR command); /* EDA_EXECUTE_<type> */

/* Execute a stored EDA procedure stored in the file system of the server. */
extern EDA_APIENTRY EDARPC(EDAPTR(EDA_scb) scb,
EDACPTR ename, EDALPTR elength,
EDACPTR pname, EDALPTR plength);

/* materialize an internal table from the EDABASE */
extern EDA_APIENTRY EDABROWSE(EDAPTR(EDA_scb) scb,
EDALPTR table,
EDALPTR selector,
EDAVPTR pselect,
EDALPTR cmd);

/* Determine the fields contained in a given file. */
extern EDA_APIENTRY EDADESCRIBE(EDAPTR(EDA_scb) scb,
EDACPTR fname, EDALPTR flength);

/* Place description of a column into INFO work area. */
extern EDA_APIENTRY EDAINFO(EDAPTR(EDA_scb) scb,
EDALPTR column_nbr, EDAPTR(EDA_info_area) work_area);

/* Access a tuple from the answer set and deliver it to the caller. */
extern EDA_APIENTRY EDAFETCH(EDAPTR(EDA_scb) scb,
EDAVPTR tuple, EDALPTR len, EDALPTR ftype);

/* Advance to the next record in the answer set. */
extern EDA_APIENTRY EDANEXT(EDAPTR(EDA_scb) scb);

/* Return the data for the field specified by 'fldno'. */
extern EDA_APIENTRY EDAFIELD(EDAPTR(EDA_scb) scb,
EDALPTR fldno, EDAVPTR field, EDALPTR length,
EDALPTR ftype);

/* Determine whether the field indicated by the column number is null. */
extern EDA_APIENTRY EDANULL(EDAPTR(EDA_scb) scb,
EDALPTR column_nbr, EDALPTR result);

/* Stop processing the result set belonging to the indicated scb */
extern EDA_APIENTRY EDAQUIT(EDAPTR(EDA_scb) scb);

/* Wait for arrival of data from server(s) */
extern EDA_APIENTRY EDAWAIT(EDAPTR(EDA_ID) ecx,
EDALPTR timeout, EDALPTR sid, EDALPTR result);
/* Interrupt the waiting for the arrival of data from the server(s) */
extern EDA_APIENTRY EDABREAK(EDAPTR(EDA_ID) ecx, EDALPTR result);

/* Determine whether or not data is immediately available from server */
extern EDA_APIENTRY EDATEST(EDAPTR(EDA_scb) scb, EDALPTR waiting);

/* Read the next message from the message queue */
extern EDA_APIENTRY EDAACCEPT(EDAPTR(EDA_scb) scb);

/* Reply in response to a 'prompt' message */
extern EDA_APIENTRY EDAREPLY(EDAPTR(EDA_scb) scb,
EDACPTR msg, EDALPTR m_length);

/* Read system or scb variables */
extern EDA_APIENTRY EDAINSPECT(EDAPTR(EDA_ID) ecx, EDAPTR(EDA_scb) scb,
EDALPTR action, EDAVPTR value, EDALPTR result);

/* Write system or scb variables */
extern EDA_APIENTRY EDASET(EDAPTR(EDA_ID) ecx, EDAPTR(EDA_scb) scb,
EDALPTR action, EDAVPTR value, EDALPTR result);

/* Return names of available servers */
extern EDA_APIENTRY EDASERVERS(EDAPTR(EDA_ID) ecx, EDACPTR buf,
EDALPTR buflen, EDALPTR result);

/* Store the given SQL statement at the server for deferred execution. */
extern EDA_APIENTRY EDAPREPARE(EDAPTR(EDA_scb) scb, EDALPTR sth,
EDACPTR statement, EDALPTR slength);

/* Delete previously stored SQL statement */
extern EDA_APIENTRY EDAXPREPARE(EDAPTR(EDA_scb) scb, EDALPTR sth);

/* Give the parameterized values for the prepared request */
extern EDA_APIENTRY EDAUSING(EDAPTR(EDA_scb) scb, EDALPTR sth,
EDALPTR parm, EDACPTR vlu, EDALPTR vlulen,
EDALPTR dtype, EDALPTR len, EDALPTR scale,
EDALPTR endparm);

/* Execute the stored request */
extern EDA_APIENTRY EDAEXECUTE(EDAPTR(EDA_scb) scb, EDALPTR sth,
EDALPTR est1, EDALPTR est2,
EDACPTR dpassword, EDALPTR dlength);

/* Commit/Rollback the transaction and remove all prepared queries */
extern EDA_APIENTRY EDACOMMIT(EDAPTR(EDA_ID) ecx, EDALPTR yn, EDALPTR status);
/* Set up callback vectors */
extern EDA_APIENTRY EDACALLBACK(EDAPTR(EDA_ID) ecx, EDALPTR type,
EDALPTR result, EDA_ECALLBACK(routine),
EDAPTR(struct EDA_CALLBACK_BLOCK) block);

/* Initialize EDA, create an EDA context with user callbacks. */
extern EDA_APIENTRY EDAPINIT(EDAPTR(EDA_ID) ecx,
EDALPTR pCount, /* number of commands */
EDALPTR pType, /* command code */
EDAPTR(EDA_ECALLBACK) pRoutine, /* addr of routine if cbk */
EDAPTR(void *) pValue, /* addr of value of SET cmd */
EDALPTR result);



/* what follows is an array table prototype */
/* to simplify dynamic calls to EDA/SQL functions */

/* EDA_COMPILER_ORDER moved to EDASYS.H */

typedef struct
{
long size; /* set to sizeof(EDA_VECTORS) */
long apiMajor;
long apiMinor;
long reserve1;
long reserve2;
long reserve3;
void (EDA_COMPILER_ORDER EXINIT) (EDAPTR(EDA_ID) ecx, EDALPTR result);
void (EDA_COMPILER_ORDER EXTERM) (EDAPTR(EDA_ID) ecx, EDALPTR result);
void (EDA_COMPILER_ORDER EXCONNECT) (EDAPTR(EDA_ID) ecx,
EDAPTR(EDA_SCB) scb,
EDACPTR uname, EDALPTR un_length,
EDACPTR password, EDALPTR pw_length,
EDACPTR sv_name, EDALPTR sv_length);
void (EDA_COMPILER_ORDER EXXCONNECT) (EDAPTR(EDA_SCB) scb);
void (EDA_COMPILER_ORDER EXSQL) (EDAPTR(EDA_SCB) scb,
EDACPTR statement, EDALPTR slength,
EDALPTR est1, EDALPTR est2,
EDACPTR dpassword, EDALPTR dlength,
EDALPTR execute);
void (EDA_COMPILER_ORDER EXRPC) (EDAPTR(EDA_SCB) scb,
EDACPTR ename, EDALPTR elength,
EDACPTR pname, EDALPTR plength);
void (EDA_COMPILER_ORDER EXDESCRIBE) (EDAPTR(EDA_SCB) scb,
EDACPTR fname, EDALPTR flength);
void (EDA_COMPILER_ORDER EXINFO) (EDAPTR(EDA_SCB) scb,
EDALPTR column_nbr,
EDAPTR(EDA_info_area) work_area);
void (EDA_COMPILER_ORDER EXNULL) (EDAPTR(EDA_SCB) scb,
EDALPTR column_nbr,
EDALPTR(result));
void (EDA_COMPILER_ORDER EXFETCH) (EDAPTR(EDA_SCB) scb,
EDACPTR tuple, EDALPTR len,
EDALPTR ftype);
void (EDA_COMPILER_ORDER EXNEXT) (EDAPTR(EDA_SCB) scb);
void (EDA_COMPILER_ORDER EXFIELD) (EDAPTR(EDA_SCB) scb,
EDALPTR fldno,
EDACPTR field, EDALPTR length,
EDALPTR ftype);
void (EDA_COMPILER_ORDER EXQUIT) (EDAPTR(EDA_SCB) scb);
void (EDA_COMPILER_ORDER EXACCEPT) (EDAPTR(EDA_SCB) scb);
void (EDA_COMPILER_ORDER EXREPLY) (EDAPTR(EDA_SCB) scb,
EDACPTR msg, EDALPTR m_length);
void (EDA_COMPILER_ORDER EXINSPECT) (EDAPTR(EDA_ID) ecx,
EDAPTR(EDA_SCB) scb,
EDALPTR action, EDAVPTR value, EDALPTR result);
void (EDA_COMPILER_ORDER EXSET) (EDAPTR(EDA_ID) ecx, EDAPTR(EDA_SCB) scb,
EDALPTR action, EDAVPTR value, EDALPTR result);
void (EDA_COMPILER_ORDER EXSERVERS) (EDAPTR(EDA_ID) ecx, EDACPTR buf,
EDALPTR buflen, EDALPTR result);
void (EDA_COMPILER_ORDER EXINTER)(EDAPTR(EDA_SCB) scb,
EDACPTR statement,
EDALPTR slength);
void (EDA_COMPILER_ORDER EXCALLBACK) (EDAPTR(EDA_ID) ecx ,
EDALPTR type,
EDALPTR result,
EDA_ECALLBACK(routine),
EDAPTR(struct EDA_CALLBACK_BLOCK) block);
void (EDA_COMPILER_ORDER EXPREPARE)(EDAPTR(EDA_SCB) scb, EDALPTR sth,
EDACPTR statement, EDALPTR slength);
void (EDA_COMPILER_ORDER EXXPREPARE)(EDAPTR(EDA_SCB) scb, EDALPTR sth);
void (EDA_COMPILER_ORDER EXUSING)(EDAPTR(EDA_SCB) scb, EDALPTR sth,
EDALPTR parm, EDACPTR vlu, EDALPTR vlulen,
EDALPTR dtype, EDALPTR len, EDALPTR scale,
EDALPTR endparm);
void (EDA_COMPILER_ORDER EXEXECUTE)(EDAPTR(EDA_SCB) scb, EDALPTR sth,
EDALPTR est1, EDALPTR est2,
EDACPTR dpassword, EDALPTR dlength);
void (EDA_COMPILER_ORDER EXWAIT) (EDAPTR(EDA_ID) ecx,
EDALPTR timeout, EDALPTR sid, EDALPTR result);
void (EDA_COMPILER_ORDER EXTEST) (EDAPTR(EDA_SCB) scb, EDALPTR waiting);
void (EDA_COMPILER_ORDER EXCOMMIT)(EDAPTR(EDA_ID) ecx,
EDALPTR yn, EDALPTR status);
void (EDA_COMPILER_ORDER EXBROWSE)(EDAPTR(EDA_scb) scb,
EDALPTR table, EDALPTR selector,
EDAVPTR pselect, EDALPTR cmd);
void (EDA_COMPILER_ORDER EXFOCUS)(EDAPTR(EDA_scb) scb,
EDAVPTR pstmt, EDALPTR lem);
void (EDA_COMPILER_ORDER EXPINIT) (EDAPTR(EDA_ID) ecx, EDALPTR pCount,
EDALPTR pType, EDAPTR(EDA_ECALLBACK) pRoutine,
EDAVPTR pValue, EDALPTR result);

} EDA_VECTORS;

#ifdef __cplusplus
}
#endif

#endif /* EDA_H_INCLUDED */

iWay Software