/******************************************************************************/
/* lua_c.h   - include file for SNAP-IX LUA API.                              */
/* (C) Copyright Data Connection Ltd. 1990                                    */
/******************************************************************************/

/*****************************************************************************/
/* Change History                                                            */
/*                                                                           */
/*LUA*   15/05/91  LP  This file new for LUA support                         */
/*L030*  12/09/91  LP  Check for terminated apps in Windows environment      */
/*512S*  25/11/91  LP  Extend max # sessions allowed from 16 to 512 for OS/2 */
/*L055*  13/01/92  LP  Move error codes to rui.c to keep lua_c.h like EE file*/
/*W32*   30/03/92  AD  Win32 port                                            */
/*9999   11/08/93  PP  Fix LUA_INVALID_ADAPTED and add LUA_RESPONSE_ALREADY_ */
/*                     SENT                                                  */
/*9998   15/09/93  PP  Pull substructures out                                */
/*l110   16/12/93  PP  Add RUI_INIT status messages                          */
/*10396  29/04/98  PH  Support SLI_SEND_EX (with ulong data_length)          */
/*  "    07/05/98  PH  Support SLI_RECEIVE_EX                                */
/*****************************************************************************/

#ifndef LUA_CH_INCLUDED
#pragma option push -b -a8 -pc -A- /*P_O_Push*/
#define LUA_CH_INCLUDED

#ifdef __cplusplus
extern "C" {
#endif

/*************************************************************************W32*/
/* define type conversion macros                                         *W32*/
/*************************************************************************W32*/
#define LUA_LO_UC(w)    ((unsigned char)(((unsigned short)(w)) & 0xFF)) /*W32*/
#define LUA_HI_UC(w)    ((unsigned char)(((unsigned short)(w) >> 8)  \
                            & 0xff))                                    /*W32*/
#define LUA_MAKUS(l, h) (((unsigned short)(l)) |                     \
                          ((unsigned short)(h)) << 8)                   /*W32*/
#define LUA_MAKUL(l, h) ((unsigned long)(((unsigned short)(l))|      \
                          ((unsigned long)((unsigned short)(h))) << 16))/*W32*/
#define LUA_LO_US(l)   ((unsigned short)(((unsigned long)(l)) & 0xFFFF))/*W32*/
#define LUA_HI_US(l)    ((unsigned short)(((unsigned long)(l) >> 16) \
                           & 0xffff))                                   /*W32*/
                                                                        /*W32*/
/*************************************************************************W32*/
/* IF non-Intel THEN                                                     *W32*/
/*   set flipping to nop for now                                         *W32*/
/*   reverse order of bit fields                                         *W32*/
/*************************************************************************W32*/
#ifdef NON_INTEL_BYTE_ORDER                                             /*W32*/
#define LUA_FLIPI(X)  (X)                                               /*W32*/
#define LUA_FLIPL(X)  (X)                                               /*W32*/
#define LUA_FLIPRQD                                                     /*W32*/
                                                                        /*W32*/
/*************************************************************************W32*/
/* ELSE (Intel environment)                                              *W32*/
/*   define flipping macros                                              *W32*/
/*************************************************************************W32*/
#else                                                                   /*W32*/
#define LUA_FLIPI(X) LUA_MAKUS(LUA_HI_UC(X),LUA_LO_UC(X))               /*W32*/
#define LUA_FLIPL(X) LUA_MAKUL(LUA_FLIPI(LUA_HI_US(X)),           \
                                 LUA_FLIPI(LUA_LO_US(X)))               /*W32*/
#endif                                                                  /*W32*/


/*L055************************************************************************/
/*L055* Error codes moved to rui.c - 10 #defines deleted                     */
/*L055************************************************************************/

/*W32*************************************************************************/
/*W32* Make all constant definitions hardware independent                    */
/*W32*************************************************************************/

/*****************************************************************************/
/* LUA VERB TYPES                                                            */
/*****************************************************************************/
#define LUA_VERB_RUI                      LUA_FLIPI(0x5200)
#define LUA_VERB_SLI                      LUA_FLIPI(0x5200)

/*****************************************************************************/
/* LUA OPCODES ( RUI and SLI )                                               */
/*****************************************************************************/
#define LUA_OPCODE_RUI_INIT               LUA_FLIPI(0x0180)
#define LUA_OPCODE_RUI_TERM               LUA_FLIPI(0x0280)
#define LUA_OPCODE_RUI_READ               LUA_FLIPI(0x0380)
#define LUA_OPCODE_RUI_WRITE              LUA_FLIPI(0x0480)
#define LUA_OPCODE_RUI_PURGE              LUA_FLIPI(0x0580)
#define LUA_OPCODE_RUI_BID                LUA_FLIPI(0x0680)

#define LUA_OPCODE_SLI_OPEN               LUA_FLIPI(0x0100)
#define LUA_OPCODE_SLI_CLOSE              LUA_FLIPI(0x0200)
#define LUA_OPCODE_SLI_RECEIVE            LUA_FLIPI(0x0300)
#define LUA_OPCODE_SLI_SEND               LUA_FLIPI(0x0400)
#define LUA_OPCODE_SLI_PURGE              LUA_FLIPI(0x0500)
#define LUA_OPCODE_SLI_BID                LUA_FLIPI(0x0600)
#define LUA_OPCODE_SLI_SEND_EX            LUA_FLIPI(0x0700)        /* 10396: */
#define LUA_OPCODE_SLI_RECEIVE_EX         LUA_FLIPI(0x0800)        /* 10396: */
#define LUA_OPCODE_SLI_BIND_ROUTINE       LUA_FLIPI(0x1100)
#define LUA_OPCODE_SLI_STSN_ROUTINE       LUA_FLIPI(0x1200)
#define LUA_OPCODE_SLI_CRV_ROUTINE        LUA_FLIPI(0x1300)

/*****************************************************************************/
/* LUA PRIMARY RETURN CODES                                                  */
/*****************************************************************************/
#define LUA_OK                            0x0000
#define LUA_PARAMETER_CHECK               LUA_FLIPI(0x0001)
#define LUA_STATE_CHECK                   LUA_FLIPI(0x0002)
#define LUA_SESSION_FAILURE               LUA_FLIPI(0x000F)
#define LUA_UNSUCCESSFUL                  LUA_FLIPI(0x0014)
#define LUA_NEGATIVE_RSP                  LUA_FLIPI(0x0018)
#define LUA_CANCELLED                     LUA_FLIPI(0x0021)
#define LUA_IN_PROGRESS                   LUA_FLIPI(0x0030)
#define LUA_STATUS                        LUA_FLIPI(0x0040)
#define LUA_COMM_SUBSYSTEM_ABENDED        LUA_FLIPI(0xF003)
#define LUA_COMM_SUBSYSTEM_NOT_LOADED     LUA_FLIPI(0xF004)
#define LUA_INVALID_VERB_SEGMENT          LUA_FLIPI(0xF008)
#define LUA_UNEXPECTED_DOS_ERROR          LUA_FLIPI(0xF011)
#define LUA_STACK_TOO_SMALL               LUA_FLIPI(0xF015)
#define LUA_INVALID_VERB                  0xFFFF

/*****************************************************************************/
/* LUA SECONDARY RETURN CODES                                                */
/*****************************************************************************/
#define LUA_SEC_RC_OK                     LUA_FLIPL(0x00000000)
#define LUA_INVALID_LUNAME                LUA_FLIPL(0x00000001)
#define LUA_BAD_SESSION_ID                LUA_FLIPL(0x00000002)
#define LUA_DATA_TRUNCATED                LUA_FLIPL(0x00000003)
#define LUA_BAD_DATA_PTR                  LUA_FLIPL(0x00000004)
#define LUA_DATA_SEG_LENGTH_ERROR         LUA_FLIPL(0x00000005)
#define LUA_RESERVED_FIELD_NOT_ZERO       LUA_FLIPL(0x00000006)
#define LUA_INVALID_POST_HANDLE           LUA_FLIPL(0x00000007)
#define LUA_PURGED                        LUA_FLIPL(0x0000000C)
#define LUA_BID_VERB_SEG_ERROR            LUA_FLIPL(0x0000000F)
#define LUA_NO_PREVIOUS_BID_ENABLED       LUA_FLIPL(0x00000010)
#define LUA_NO_DATA                       LUA_FLIPL(0x00000011)
#define LUA_BID_ALREADY_ENABLED           LUA_FLIPL(0x00000012)
#define LUA_VERB_RECORD_SPANS_SEGMENTS    LUA_FLIPL(0x00000013)
#define LUA_INVALID_FLOW                  LUA_FLIPL(0x00000014)
#define LUA_NOT_ACTIVE                    LUA_FLIPL(0x00000015)
#define LUA_VERB_LENGTH_INVALID           LUA_FLIPL(0x00000016)
#define LUA_REQUIRED_FIELD_MISSING        LUA_FLIPL(0x00000019)
#define LUA_READY                         LUA_FLIPL(0x00000030)
#define LUA_NOT_READY                     LUA_FLIPL(0x00000031)
#define LUA_INIT_COMPLETE                 LUA_FLIPL(0x00000032)
#define LUA_SESSION_END_REQUESTED         LUA_FLIPL(0x00000033)
#define LUA_NO_SLI_SESSION                LUA_FLIPL(0x00000034)
#define LUA_SESSION_ALREADY_OPEN          LUA_FLIPL(0x00000035)
#define LUA_INVALID_OPEN_INIT_TYPE        LUA_FLIPL(0x00000036)
#define LUA_INVALID_OPEN_DATA             LUA_FLIPL(0x00000037)
#define LUA_UNEXPECTED_SNA_SEQUENCE       LUA_FLIPL(0x00000038)
#define LUA_NEG_RSP_FROM_BIND_ROUTINE     LUA_FLIPL(0x00000039)
#define LUA_NEG_RSP_FROM_CRV_ROUTINE      LUA_FLIPL(0x0000003A)
#define LUA_NEG_RSP_FROM_STSN_ROUTINE     LUA_FLIPL(0x0000003B)
#define LUA_CRV_ROUTINE_REQUIRED          LUA_FLIPL(0x0000003C)
#define LUA_STSN_ROUTINE_REQUIRED         LUA_FLIPL(0x0000003D)
#define LUA_INVALID_OPEN_ROUTINE_TYPE     LUA_FLIPL(0x0000003E)
#define LUA_MAX_NUMBER_OF_SENDS           LUA_FLIPL(0x0000003F)
#define LUA_SEND_ON_FLOW_PENDING          LUA_FLIPL(0x00000040)
#define LUA_INVALID_MESSAGE_TYPE          LUA_FLIPL(0x00000041)
#define LUA_RECEIVE_ON_FLOW_PENDING       LUA_FLIPL(0x00000042)
#define LUA_DATA_LENGTH_ERROR             LUA_FLIPL(0x00000043)
#define LUA_CLOSE_PENDING                 LUA_FLIPL(0x00000044)
#define LUA_NEGATIVE_RSP_CHASE            LUA_FLIPL(0x00000046)
#define LUA_NEGATIVE_RSP_SHUTC            LUA_FLIPL(0x00000047)
#define LUA_NEGATIVE_RSP_RSHUTD           LUA_FLIPL(0x00000048)
#define LUA_NO_RECEIVE_TO_PURGE           LUA_FLIPL(0x0000004A)
#define LUA_CANCEL_COMMAND_RECEIVED       LUA_FLIPL(0x0000004D)
#define LUA_RUI_WRITE_FAILURE             LUA_FLIPL(0x0000004E)
#define LUA_SLI_BID_PENDING               LUA_FLIPL(0x00000051)
#define LUA_SLI_PURGE_PENDING             LUA_FLIPL(0x00000052)
#define LUA_PROCEDURE_ERROR               LUA_FLIPL(0x00000053)
#define LUA_INVALID_SLI_ENCR_OPTION       LUA_FLIPL(0x00000054)
#define LUA_RECEIVED_UNBIND               LUA_FLIPL(0x00000055)
#define LUA_DATA_INCOMPLETE               LUA_FLIPL(0x00000060)
#define LUA_SLI_LOGIC_ERROR               LUA_FLIPL(0x0000007F)
#define LUA_TERMINATED                    LUA_FLIPL(0x00000080)
#define LUA_NO_RUI_SESSION                LUA_FLIPL(0x00000081)
#define LUA_DUPLICATE_RUI_INIT            LUA_FLIPL(0x00000082)
#define LUA_INVALID_PROCESS               LUA_FLIPL(0x00000083)
#define LUA_API_MODE_CHANGE               LUA_FLIPL(0x00000085)
#define LUA_COMMAND_COUNT_ERROR           LUA_FLIPL(0x00000087)
#define LUA_NO_READ_TO_PURGE              LUA_FLIPL(0x00000088)
#define LUA_MULTIPLE_WRITE_FLOWS          LUA_FLIPL(0x00000089)
#define LUA_DUPLICATE_READ_FLOW           LUA_FLIPL(0x0000008A)
#define LUA_DUPLICATE_WRITE_FLOW          LUA_FLIPL(0x0000008B)
#define LUA_LINK_NOT_STARTED              LUA_FLIPL(0x0000008C)
#define LUA_INVALID_ADAPTER               LUA_FLIPL(0x0000008D)
#define LUA_ENCR_DECR_LOAD_ERROR          LUA_FLIPL(0x0000008E)
#define LUA_ENCR_DECR_PROC_ERROR          LUA_FLIPL(0x0000008F)
#define LUA_NEG_NOTIFY_RSP                LUA_FLIPL(0x000000BE)
#define LUA_RUI_LOGIC_ERROR               LUA_FLIPL(0x000000BF)
#define LUA_LU_INOPERATIVE                LUA_FLIPL(0x000000FF)

/*****************************************************************************/
/* THE FOLLOWING SECONDARY RETURN CODES ARE SNA SENSE CODES                  */
/*****************************************************************************/
#define LUA_NON_UNIQ_ID                   LUA_FLIPL(0xC0001001)
#define LUA_NON_UNIQ_NAU_AD               LUA_FLIPL(0xC0001002)
#define LUA_INV_NAU_ADDR                  LUA_FLIPL(0xC0002001)
#define LUA_INV_ADPT_NUM                  LUA_FLIPL(0xC0002002)

#define LUA_RESOURCE_NOT_AVAILABLE        LUA_FLIPL(0x08010000)
#define LUA_SESSION_LIMIT_EXCEEDED        LUA_FLIPL(0x08050000)
#define LUA_SLU_SESSION_LIMIT_EXCEEDED    LUA_FLIPL(0x0805000A)
#define LUA_MODE_INCONSISTENCY            LUA_FLIPL(0x08090000)
#define LUA_BRACKET_RACE_ERROR            LUA_FLIPL(0x080B0000)
#define LUA_INSUFFICIENT_RESOURCES        LUA_FLIPL(0x08120000)
#define LUA_BB_REJECT_NO_RTR              LUA_FLIPL(0x08130000)
#define LUA_BB_REJECT_RTR                 LUA_FLIPL(0x08140000)
#define LUA_RECEIVER_IN_TRANSMIT_MODE     LUA_FLIPL(0x081B0000)
#define LUA_REQUEST_NOT_EXECUTABLE        LUA_FLIPL(0x081C0000)
#define LUA_INVALID_SESSION_PARAMETERS    LUA_FLIPL(0x08210000)
#define LUA_UNIT_OF_WORK_ABORTED          LUA_FLIPL(0x08240000)
#define LUA_FM_FUNCTION_NOT_SUPPORTED     LUA_FLIPL(0x08260000)
#define LUA_LU_COMPONENT_DISCONNECTED     LUA_FLIPL(0x08310000)
#define LUA_INVALID_PARAMETER_FLAGS       LUA_FLIPL(0x08330000)
#define LUA_INVALID_PARAMETER             LUA_FLIPL(0x08350000)
#define LUA_NEGOTIABLE_BIND_ERROR         LUA_FLIPL(0x08350001)
#define LUA_BIND_FM_PROFILE_ERROR         LUA_FLIPL(0x08350002)
#define LUA_BIND_TS_PROFILE_ERROR         LUA_FLIPL(0x08350003)
#define LUA_BIND_LU_TYPE_ERROR            LUA_FLIPL(0x0835000E)
#define LUA_CRYPTOGRAPHY_INOPERATIVE      LUA_FLIPL(0x08480000)
#define LUA_REQ_RESOURCES_NOT_AVAIL       LUA_FLIPL(0x084B0000)
#define LUA_SSCP_LU_SESSION_NOT_ACTIVE    LUA_FLIPL(0x08570000)
#define LUA_SYNC_EVENT_RESPONSE           LUA_FLIPL(0x08670000)
#define LUA_REC_CORR_TABLE_FULL           LUA_FLIPL(0x08780001)
#define LUA_SEND_CORR_TABLE_FULL          LUA_FLIPL(0x08780002)
#define LUA_SESSION_SERVICE_PATH_ERROR    LUA_FLIPL(0x087D0000)

#define LUA_RU_DATA_ERROR                 LUA_FLIPL(0x10010000)
#define LUA_RU_LENGTH_ERROR               LUA_FLIPL(0x10020000)
#define LUA_FUNCTION_NOT_SUPPORTED        LUA_FLIPL(0x10030000)
#define LUA_HDX_BRACKET_STATE_ERROR       LUA_FLIPL(0x10050121)
#define LUA_RESPONSE_ALREADY_SENT         LUA_FLIPL(0x10050122)
#define LUA_EXR_SENSE_INCORRECT           LUA_FLIPL(0x10050123)
#define LUA_RESPONSE_OUT_OF_ORDER         LUA_FLIPL(0x10050124)
#define LUA_CHASE_RESPONSE_REQUIRED       LUA_FLIPL(0x10050125)
#define LUA_CATEGORY_NOT_SUPPORTED        LUA_FLIPL(0x10070000)

#define LUA_INCORRECT_SEQUENCE_NUMBER     LUA_FLIPL(0x20010000)
#define LUA_CHAINING_ERROR                LUA_FLIPL(0x20020000)
#define LUA_BRACKET                       LUA_FLIPL(0x20030000)
#define LUA_DIRECTION                     LUA_FLIPL(0x20040000)
#define LUA_DATA_TRAFFIC_RESET            LUA_FLIPL(0x20050000)
#define LUA_DATA_TRAFFIC_QUIESCED         LUA_FLIPL(0x20060000)
#define LUA_DATA_TRAFFIC_NOT_RESET        LUA_FLIPL(0x20070000)
#define LUA_NO_BEGIN_BRACKET              LUA_FLIPL(0x20080000)
#define LUA_SC_PROTOCOL_VIOLATION         LUA_FLIPL(0x20090000)
#define LUA_IMMEDIATE_REQ_MODE_ERROR      LUA_FLIPL(0x200A0000)
#define LUA_QUEUED_RESPONSE_ERROR         LUA_FLIPL(0x200B0000)
#define LUA_ERP_SYNC_EVENT_ERROR          LUA_FLIPL(0x200C0000)
#define LUA_RSP_BEFORE_SENDING_REQ        LUA_FLIPL(0x200D0000)
#define LUA_RSP_CORRELATION_ERROR         LUA_FLIPL(0x200E0000)
#define LUA_RSP_PROTOCOL_ERROR            LUA_FLIPL(0x200F0000)

#define LUA_INVALID_SC_OR_NC_RH           LUA_FLIPL(0x40010000)
#define LUA_BB_NOT_ALLOWED                LUA_FLIPL(0x40030000)
#define LUA_EB_NOT_ALLOWED                LUA_FLIPL(0x40040000)
#define LUA_EXCEPTION_RSP_NOT_ALLOWED     LUA_FLIPL(0x40060000)
#define LUA_DEFINITE_RSP_NOT_ALLOWED      LUA_FLIPL(0x40070000)
#define LUA_PACING_NOT_SUPPORTED          LUA_FLIPL(0x40080000)
#define LUA_CD_NOT_ALLOWED                LUA_FLIPL(0x40090000)
#define LUA_NO_RESPONSE_NOT_ALLOWED       LUA_FLIPL(0x400A0000)
#define LUA_CHAINING_NOT_SUPPORTED        LUA_FLIPL(0x400B0000)
#define LUA_BRACKETS_NOT_SUPPORTED        LUA_FLIPL(0x400C0000)
#define LUA_CD_NOT_SUPPORTED              LUA_FLIPL(0x400D0000)
#define LUA_INCORRECT_USE_OF_FI           LUA_FLIPL(0x400F0000)
#define LUA_ALTERNATE_CODE_NOT_SUPPORT    LUA_FLIPL(0x40100000)
#define LUA_INCORRECT_RU_CATEGORY         LUA_FLIPL(0x40110000)
#define LUA_INCORRECT_REQUEST_CODE        LUA_FLIPL(0x40120000)
#define LUA_INCORRECT_SPEC_OF_SDI_RTI     LUA_FLIPL(0x40130000)
#define LUA_INCORRECT_DR1I_DR2I_ERI       LUA_FLIPL(0x40140000)
#define LUA_INCORRECT_USE_OF_QRI          LUA_FLIPL(0x40150000)
#define LUA_INCORRECT_USE_OF_EDI          LUA_FLIPL(0x40160000)
#define LUA_INCORRECT_USE_OF_PDI          LUA_FLIPL(0x40170000)

#define LUA_NAU_INOPERATIVE               LUA_FLIPL(0x80030000)
#define LUA_NO_SESSION                    LUA_FLIPL(0x80050000)

/*****************************************************************************/
/* LUA_RH.RUC masks                                                          */
/*****************************************************************************/
#define  LUA_RH_FMD                       0
#define  LUA_RH_NC                        1
#define  LUA_RH_DFC                       2
#define  LUA_RH_SC                        3

/*****************************************************************************/
/* LUA MESSAGE TYPES                                                         */
/*****************************************************************************/
#define LUA_MESSAGE_TYPE_LU_DATA          0x01
#define LUA_MESSAGE_TYPE_SSCP_DATA        0x11
#define LUA_MESSAGE_TYPE_RSP              0x02
#define LUA_MESSAGE_TYPE_BID              0xC8
#define LUA_MESSAGE_TYPE_BIND             0x31
#define LUA_MESSAGE_TYPE_BIS              0x70
#define LUA_MESSAGE_TYPE_CANCEL           0x83
#define LUA_MESSAGE_TYPE_CHASE            0x84
#define LUA_MESSAGE_TYPE_CLEAR            0xA1
#define LUA_MESSAGE_TYPE_CRV              0xD0
#define LUA_MESSAGE_TYPE_LUSTAT_LU        0x04
#define LUA_MESSAGE_TYPE_LUSTAT_SSCP      0x14
#define LUA_MESSAGE_TYPE_QC               0x81
#define LUA_MESSAGE_TYPE_QEC              0x80
#define LUA_MESSAGE_TYPE_RELQ             0x82
#define LUA_MESSAGE_TYPE_RQR              0xA3
#define LUA_MESSAGE_TYPE_RTR              0x05
#define LUA_MESSAGE_TYPE_SBI              0x71
#define LUA_MESSAGE_TYPE_SHUTD            0xC0
#define LUA_MESSAGE_TYPE_SIGNAL           0xC9
#define LUA_MESSAGE_TYPE_SDT              0xA0
#define LUA_MESSAGE_TYPE_STSN             0xA2
#define LUA_MESSAGE_TYPE_UNBIND           0x32

/*****************************************************************************/
/* LUA INIT TYPES (Used for SLI only)                                        */
/*****************************************************************************/
#define LUA_INIT_TYPE_SEC_IS              0x01
#define LUA_INIT_TYPE_SEC_LOG             0x02
#define LUA_INIT_TYPE_PRIM                0x03
#define LUA_INIT_TYPE_PRIM_SSCP           0x04

/*****************************************************************************/
/* LUA SLI_OPEN EXTENSION ROUTINE TYPES                                      */
/*****************************************************************************/
#define LUA_ROUTINE_TYPE_BIND             0x01
#define LUA_ROUTINE_TYPE_CRV              0x02
#define LUA_ROUTINE_TYPE_STSN             0x03
#define LUA_ROUTINE_TYPE_END              0x00

/*****************************************************************************/
/* LUA VERB RECORD STRUCTURES                                                */
/*****************************************************************************/


/*************************************************************************W32*/
/* If Win32 environment then ensure that packing is correct              *W32*/
/*************************************************************************W32*/
#ifdef WIN32                                                            /*W32*/
#pragma pack(4)                                                         /*W32*/
#endif                                                                  /*W32*/


/*****************************************************************************/
/* Transmission header structure                                             */
/*****************************************************************************/
struct LUA_TH
      {
#ifdef LUA_FLIPRQD                                                      /*W32*/
      unsigned char    flags_fid  : 4;        /* Format Identification Type 2*/
      unsigned char    flags_mpf  : 2;        /* Segmenting Mapping Field    */
      unsigned char    flags_odai : 1;        /* OAF-DAF Assignor Indicator  */
      unsigned char    flags_efi  : 1;        /* Expedited Flow Indicator    */
#else                                                                   /*W32*/
      unsigned char    flags_efi  : 1;        /* Expedited Flow Indicator    */
      unsigned char    flags_odai : 1;        /* OAF-DAF Assignor Indicator  */
      unsigned char    flags_mpf  : 2;        /* Segmenting Mapping Field    */
      unsigned char    flags_fid  : 4;        /* Format Identification Type 2*/
#endif                                                                  /*W32*/
      unsigned char               : 8;        /* Reserved Field              */
      unsigned char    daf;                   /* Destination Address Field   */
      unsigned char    oaf;                   /* Originating Address Field   */
      unsigned char    snf[2];                /* Sequence Number Field       */
      };

/*****************************************************************************/
/* Request/Response unit header strcuture                                    */
/*****************************************************************************/
struct LUA_RH
      {
#ifdef LUA_FLIPRQD                                                      /*W32*/
      unsigned char    rri  : 1;              /* Request-Response Indicator  */
      unsigned char    ruc  : 2;              /* RU Category                 */
      unsigned char         : 1;              /* Reserved Field              */
      unsigned char    fi   : 1;              /* Format Indicator            */
      unsigned char    sdi  : 1;              /* Sense Data Included Ind     */
      unsigned char    bci  : 1;              /* Begin Chain Indicator       */
      unsigned char    eci  : 1;              /* End Chain Indicator         */
#else                                                                   /*W32*/
      unsigned char    eci  : 1;              /* End Chain Indicator         */
      unsigned char    bci  : 1;              /* Begin Chain Indicator       */
      unsigned char    sdi  : 1;              /* Sense Data Included Ind     */
      unsigned char    fi   : 1;              /* Format Indicator            */
      unsigned char         : 1;              /* Reserved Field              */
      unsigned char    ruc  : 2;              /* RU Category                 */
      unsigned char    rri  : 1;              /* Request-Response Indicator  */
#endif                                                                  /*W32*/

#ifdef LUA_FLIPRQD                                                      /*W32*/
      unsigned char    dr1i : 1;              /* DR 1 Indicator              */
      unsigned char         : 1;              /* Reserved Field              */
      unsigned char    dr2i : 1;              /* DR 2 Indicator              */
      unsigned char    ri   : 1;              /* Response Indicator          */
      unsigned char         : 2;              /* Reserved Field              */
      unsigned char    qri  : 1;              /* Queued Response Indicator   */
      unsigned char    pi   : 1;              /* Pacing Indicator            */
#else                                                                   /*W32*/
      unsigned char    pi   : 1;              /* Pacing Indicator            */
      unsigned char    qri  : 1;              /* Queued Response Indicator   */
      unsigned char         : 2;              /* Reserved Field              */
      unsigned char    ri   : 1;              /* Response Indicator          */
      unsigned char    dr2i : 1;              /* DR 2 Indicator              */
      unsigned char         : 1;              /* Reserved Field              */
      unsigned char    dr1i : 1;              /* DR 1 Indicator              */
#endif                                                                  /*W32*/

#ifdef LUA_FLIPRQD                                                      /*W32*/
      unsigned char    bbi  : 1;              /* Begin Bracket Indicator     */
      unsigned char    ebi  : 1;              /* End Bracket Indicator       */
      unsigned char    cdi  : 1;              /* Change Direction Indicator  */
      unsigned char         : 1;              /* Reserved Field              */
      unsigned char    csi  : 1;              /* Code Selection Indicator    */
      unsigned char    edi  : 1;              /* Enciphered Data Indicator   */
      unsigned char    pdi  : 1;              /* Padded Data Indicator       */
      unsigned char         : 1;              /* Reserved Field              */
#else                                                                   /*W32*/
      unsigned char         : 1;              /* Reserved Field              */
      unsigned char    pdi  : 1;              /* Padded Data Indicator       */
      unsigned char    edi  : 1;              /* Enciphered Data Indicator   */
      unsigned char    csi  : 1;              /* Code Selection Indicator    */
      unsigned char         : 1;              /* Reserved Field              */
      unsigned char    cdi  : 1;              /* Change Direction Indicator  */
      unsigned char    ebi  : 1;              /* End Bracket Indicator       */
      unsigned char    bbi  : 1;              /* Begin Bracket Indicator     */
#endif                                                                  /*W32*/
      };

/*****************************************************************************/
/* Structure for LUA_FLAG1                                                   */
/*****************************************************************************/
struct LUA_FLAG1                              /* LUA_FLAG1                   */
      {
#ifdef LUA_FLIPRQD                                                      /*W32*/
      unsigned char  bid_enable  : 1;         /* Bid Enabled Indicator       */
      unsigned char  reserv1     : 1;         /* reserved                    */
      unsigned char  close_abend : 1;         /* Close Immediate Flag        */
      unsigned char  nowait      : 1;         /* Don't Wait for Data Flag    */
      unsigned char  sscp_exp    : 1;         /* SSCP expedited flow         */
      unsigned char  sscp_norm   : 1;         /* SSCP normal flow            */
      unsigned char  lu_exp      : 1;         /* LU expedited flow           */
      unsigned char  lu_norm     : 1;         /* lu normal flow              */
#else                                                                   /*W32*/
      unsigned char  lu_norm     : 1;         /* lu normal flow              */
      unsigned char  lu_exp      : 1;         /* LU expedited flow           */
      unsigned char  sscp_norm   : 1;         /* SSCP normal flow            */
      unsigned char  sscp_exp    : 1;         /* SSCP expedited flow         */
      unsigned char  nowait      : 1;         /* Don't Wait for Data Flag    */
      unsigned char  close_abend : 1;         /* Close Immediate Flag        */
      unsigned char  reserv1     : 1;         /* reserved                    */
      unsigned char  bid_enable  : 1;         /* Bid Enabled Indicator       */
#endif                                                                  /*W32*/
      };
/*****************************************************************************/
/* Structure for LUA_FLAG2                                                   */
/*****************************************************************************/
struct LUA_FLAG2                              /* LUA_FLAG2                   */
      {
#ifdef LUA_FLIPRQD                                                      /*W32*/
      unsigned char  bid_enable  : 1;         /* Bid Enabled Indicator       */
      unsigned char  async       : 1;         /* flags asynchronous verb
                                                 completion                  */
      unsigned char              : 2;         /* reserved                    */
      unsigned char  sscp_exp    : 1;         /* SSCP expedited flow         */
      unsigned char  sscp_norm   : 1;         /* SSCP normal flow            */
      unsigned char  lu_exp      : 1;         /* LU expedited flow           */
      unsigned char  lu_norm     : 1;         /* lu normal flow              */
#else                                                                   /*W32*/
      unsigned char  lu_norm     : 1;         /* lu normal flow              */
      unsigned char  lu_exp      : 1;         /* LU expedited flow           */
      unsigned char  sscp_norm   : 1;         /* SSCP normal flow            */
      unsigned char  sscp_exp    : 1;         /* SSCP expedited flow         */
      unsigned char              : 2;         /* reserved                    */
      unsigned char  async       : 1;         /* flags asynchronous verb
                                                 completion                  */
      unsigned char  bid_enable  : 1;         /* Bid Enabled Indicator       */
#endif                                                                  /*W32*/
      };

/*****************************************************************************/
/* Structure for common verb header                                          */
/*****************************************************************************/
   struct LUA_COMMON
     {
    unsigned short lua_verb;                   /* Verb Code                  */
    unsigned short lua_verb_length;            /* Length of Verb Record      */
    unsigned short lua_prim_rc;                /* Primary Return Code        */
    unsigned long  lua_sec_rc;                 /* Secondary Return Code      */
    unsigned short lua_opcode;                 /* Verb Operation Code        */
    unsigned long  lua_correlator;             /* User Correlation Field     */
    unsigned char  lua_luname[8];              /* Local LU Name              */
    unsigned short lua_extension_list_offset;  /* Offset of DLL Extention Lis*/
    unsigned short lua_cobol_offset;           /* Offset of Cobol Extension  */
    unsigned long  lua_sid;                    /* Session ID                 */
    unsigned short lua_max_length;             /* Receive Buffer Length      */
    unsigned short lua_data_length;            /* Data Length                */
    char far       *lua_data_ptr;              /* Data Buffer Pointer        */
    unsigned long  lua_post_handle;            /* Posting handle             */

    struct LUA_TH  lua_th;                     /* LUA TH Fields              */

    struct LUA_RH  lua_rh;                     /* LUA RH Fields              */

    struct LUA_FLAG1 lua_flag1;                /* LUA_FLAG1                  */

    unsigned char lua_message_type;            /* sna message command type   */

    struct LUA_FLAG2 lua_flag2;                /* LUA_FLAG2                  */

    unsigned char lua_resv56[7];               /* Reserved Field             */
    unsigned char lua_encr_decr_option;        /* Cryptography Option        */
     } ;


/******************* COMMAND SPECIFIC VERB DEFINITIONS ***************/

/*****************************************************************************/
/* Structure for extension routines                                          */
/*****************************************************************************/
struct LUA_EXT_ENTRY
       {
        unsigned char lua_routine_type;       /* Extension Routine Type      */
        unsigned char lua_module_name[9];     /* Extension Module Name       */
        unsigned char lua_procedure_name[33]; /* Extension Procedure Name    */
       } ;

/*****************************************************************************/
/* LUA SPECIFIC FIELDS FOR THE SLI_OPEN VERB                                 */
/*****************************************************************************/
   struct SLI_OPEN
     {
     unsigned char  lua_init_type;            /* Type of Session Initiation  */
     unsigned char  lua_resv65;               /* Reserved Field              */
     unsigned short lua_wait;                 /* Secondary Retry Wait Time   */

     struct LUA_EXT_ENTRY  lua_open_extension[3];

     unsigned char lua_ending_delim;          /* Extension List Delimiter    */
     } ;

/*****************************************************************************/
/* 10396: LUA Specific fields for the SLI_SEND, SLI_SEND_EX verbs            */
/* LUA SPECIFIC FIELDS FOR THE SLI_OPEN, SLI_SEND, RUI_BID AND SLI_BID VERBS */
/*                                                                           */
/* !!!NOTE!!! - MUST Keep lua_sequence_number[2] the first field in the      */
/*              SLI_SEND_EX_SPECIFIC structure                               */
/*                                                                           */
/* To support backward compatibility for Applications, the                   */
/* lua_sequence_number array is included both in the union itself and as the */
/* FIRST element of the SLI_SEND_EX_SPECIFIC structure (thus it refers to    */
/* exactly the same variable in both cases.)                                 */
/*****************************************************************************/
   struct SLI_SEND_EX_SPECIFIC
   {
     unsigned char  lua_sequence_number[2]; /* This field **MUST** be first  */
     unsigned long  lua_data_length_ex; /* data length field for SLI_SEND_EX */
   } ;
  
   struct SLI_RECEIVE_EX_SPECIFIC
   {
     unsigned long  lua_max_length_ex;     /*  max buffer for SLI_RECEIVE_EX */
     unsigned long  lua_data_length_ex;    /* data length for SLI_RECEIVE_EX */
   } ;
  

   union LUA_SPECIFIC
     {
     struct   SLI_OPEN       open;
     unsigned char           lua_sequence_number[2];     /* sequence number */
     struct   SLI_SEND_EX_SPECIFIC     send;          /* extra length fields */       
     struct   SLI_RECEIVE_EX_SPECIFIC  receive;       /* extra length fields */
     unsigned char           lua_peek_data[12];          /* Data Pending    */
     } ;

/*****************************************************************************/
/* GENERIC LUA VERB RECORD TYPEDEF DECLARATION                               */
/*****************************************************************************/
   typedef struct
    {
    struct LUA_COMMON       common;    /* common verb header command         */
    union  LUA_SPECIFIC     specific;  /* command specific portion of record */
    }  LUA_VERB_RECORD;



#if (defined WINDOWS) || (defined WIN32)

#ifdef WIN32
// The callback routine registered by the TN3270 Service
typedef BOOL (__stdcall *TN3270SERVICECALLBACK)(unsigned long);
#endif // #ifdef WIN32

/*****************************************************************************/
/*WLUA* Return codes from WinLUAStartup                                      */
/*****************************************************************************/
#define WLUASYSNOTREADY                 1
#define WLUAVERNOTSUPPORTED             2
#define WLUAINVALID                     3
#define WLUAFAILURE                     4
#define WLUAINITREJECT                  5

#define WLUADESCRIPTION_LEN             40

typedef struct
{
  WORD wVersion;
  char szDescription[WLUADESCRIPTION_LEN + 1];
} LUADATA;

/*****************************************************************************/
/*WLUA* Return codes from WinLUA                                             */
/*****************************************************************************/
#define WLUAINVALIDHANDLE               10
#define WLUASTARTUPNOTCALLED            11
/*l110************************************************************************/
/*l110* New codes for RUI_INIT status messages                               */
/*l110************************************************************************/
#define WLUALINKINACTIVE                12
#define WLUALINKACTIVATING              13
#define WLUAPUINACTIVE                  14
#define WLUAPUACTIVE                    15
#define WLUAPUREACTIVATED               16
#define WLUALUINACTIVE                  17
#define WLUALUACTIVE                    18
#define WLUALUREACTIVATED               19
#define WLUASIDINVALID                  20
#define WLUASIDZERO                     21
#define WLUAALREADYACTIVE               22
#define WLUANTFYINVALID                 23
#define WLUAGLOBALHANDLER               24
#define WLUAGETLU                       25
#define WLUAUNKNOWN                     255


#define WLUA_NTFY_EVENT                  1
#define WLUA_NTFY_MSG_CORRELATOR         2
#define WLUA_NTFY_MSG_SID                3
/*l110************************************************************************/
/*l110* End changes                                                          */
/*l110************************************************************************/


#endif

/*WLUA************************************************************************/
/*WLUA* Function prototypes                                                  */
/*WLUA************************************************************************/
#ifdef WIN32
  #define LOADDS
#else
  #define LOADDS _loadds
#endif
#if (defined WINDOWS) || (defined WIN32)

int  WINAPI LOADDS WinRUI        (HWND, LUA_VERB_RECORD FAR *);
int  WINAPI LOADDS WinSLI        (HWND, LUA_VERB_RECORD FAR *);
BOOL WINAPI LOADDS WinRUICleanup (void);
BOOL WINAPI LOADDS WinSLICleanup (void);
int  WINAPI LOADDS WinRUIStartup (WORD, LUADATA FAR *);
int  WINAPI LOADDS WinSLIStartup (WORD, LUADATA FAR *);
void WINAPI LOADDS RUI           (LUA_VERB_RECORD FAR *);
void WINAPI LOADDS RUI_CALL      (LUA_VERB_RECORD FAR *);
void WINAPI LOADDS SLI           (LUA_VERB_RECORD FAR *);

int WINAPI LOADDS WinRUIGetLastInitStatus (DWORD  dwSid,               /*l110*/
                                    HANDLE hStatusHandle,              /*l110*/
                                    DWORD  dwNotifyType,               /*l110*/
                                    BOOL   bClearPrevious);            /*l110*/
int WINAPI GetLuaReturnCode      (struct LUA_COMMON FAR *, UINT, unsigned char FAR *);

#else
void pascal far _loadds RUI      (LUA_VERB_RECORD FAR *);
#endif


/*************************************************************************W32*/
/* If Win32 environment then restore original packing format             *W32*/
/*************************************************************************W32*/
#ifdef WIN32                                                            /*W32*/
#pragma pack()                                                          /*W32*/
#endif                                                                  /*W32*/

/*****************************************************************************/
/* RUI ENTRY POINT DECLARATION                                               */
/*PORT* Remove prototype defintions since EE header file does not have any   */
/*****************************************************************************/

#ifdef __cplusplus
}
#endif

#pragma option pop /*P_O_Pop*/
#endif
