.ad 8
.bm 8
.fm 4
.bt $Copyright by   Software AG, 1993$$Page %$
.tm 12
.hm 6
.hs 3
.tt 1 $NME$Project Distributed Database System$vos00c$
.tt 2 $$$
.tt 3 $R.Roedling$RTE common include module$1997-08-13$
***********************************************************
.nf


    ========== licence begin LGPL
    Copyright (C) 2002 SAP AG

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    ========== licence end

.fo
.nf
.sp
Module  : RTE_common_include_module
=========
.sp
Purpose :
.CM *-END-* purpose -------------------------------------
.sp
.cp 3
Define  :

.CM *-END-* define --------------------------------------
.sp;.cp 3
Use     :

.CM *-END-* use -----------------------------------------
.sp;.cp 3
Synonym :

.CM *-END-* synonym -------------------------------------
.sp;.cp 3
Author  : R.Roedling
.sp
.cp 3
Created : 1992-10-10
.sp
.cp 3
Version : 1994-01-27
.sp
.cp 3
Release :  7.0 	 Date : 1997-08-13
.br
.sp
***********************************************************
.sp
.cp 10
.fo
.oc _/1
Specification:

.CM *-END-* specification -------------------------------
.sp 2
***********************************************************
.sp
.cp 10
.fo
.oc _/1
Description:

.CM *-END-* description ---------------------------------
.sp 2
***********************************************************
.sp
.cp 10
.nf
.oc _/1
Structure:

.CM *-END-* structure -----------------------------------
.sp 2
**********************************************************
.sp
.cp 10
.nf
.oc _/1
.CM -lll-
Code    :
/*PRETTY*/

// ========================== RTE internal DEFINES ============================

//
// --- Makros for Debugging
//
#if defined ( DEBUG )
 #define     DEBUG0
 #define     DEBUG1
 #define     DEBUG2
 #define     DEBUG3
 #define     DEBUG4
 #define     DEBUG5
 #define     DEBUG6
#endif

#if defined (DEBUG0) || defined (DEBUG1) || defined (DEBUG2) ||               \
    defined (DEBUG3) || defined (DEBUG4) || defined (DEBUG5) ||               \
    defined (DEBUG6)
 #if defined(_WIN32)
  #include   <debm_api.h>
 #else
  #include   <pmmonapi.h>
 #endif
#endif
// --- Function calls
#ifdef  DEBUG0
 #define     DBGIN                                                            \
               {MON_Named_Msg0 (MF__, "--> called");}
 #define     DBGOUT                                                           \
               {MON_Named_Msg0 (MF__, "<-- returning");}
 #define     DBGPAS                                                           \
               {MON_Named_Msg0 (MF__, "-- passed -->");}
 #define     DBGIN_T(_T)                                                      \
               {MON_Named_Msg0 (MF__, "[T:0x%03u] --> called", _T);}
 #define     DBGOUT_T(_T)                                                     \
               {MON_Named_Msg0 (MF__, "[T:0x%03u] <-- returning", _T);}
 #define     DBGPAS_T(_T)                                                     \
               {MON_Named_Msg0 (MF__, "[T:0x%03u] -- passed -->", _T);}
#else
 #define     DBGIN        {;}
 #define     DBGOUT       {;}
 #define     DBGPAS       {;}
 #define     DBGIN_T(_T)  {;}
 #define     DBGOUT_T(_T) {;}
 #define     DBGPAS_T(_T) {;}
#endif

// --- Errors
#ifdef  DEBUG1
 #define     DBG1(_arg) {MON_Named_Msg1 _arg;}
#else
 #define     DBG1(_arg) {;}
#endif

// --- Buffer contents
#ifdef  DEBUG2
 #define     DBG2(_arg) {MON_Named_Buf2 _arg;}
#else
 #define     DBG2(_arg) {;}
#endif

// --- Information
#ifdef  DEBUG3
 #define     DBG3(_arg) {MON_Named_Msg3 _arg;}
#else
 #define     DBG3(_arg) {;}
#endif

// --- Dispatching
#ifdef  DEBUG4
 #define     DBG4(_arg) {MON_Named_Msg4 _arg;}
#else
 #define     DBG4(_arg) {;}
#endif

// --- Dispatching
#ifdef  DEBUG5
 #define     DBG5(_arg) {MON_Named_Msg5 _arg;}
#else
 #define     DBG5(_arg) {;}
#endif

// --- Remote communication
#ifdef  DEBUG6
 #define     DBG6(_arg) {MON_Named_Msg6 _arg;}
#else
 #define     DBG6(_arg) {;}
#endif

#define     DBGMC                       {INT Missing_Code;}



#if defined(_WIN32) && defined(_ALPHA_)
  #define MEM_SYNC(_addr)                                                     \
            _addr = sql76_mem_sync ( _addr )
#else
  #define MEM_SYNC(_addr)                                                     \
            _addr
#endif

#if defined(_WIN32) && ( defined(_ALPHA_) || defined(_MIPS_) || defined(_PPC_) )
 #if defined ( NO_DIRTY_READ )
  #define INTERLOCK(addr)                                                     \
            InterlockedExchange(addr,1)
 #else
  #define INTERLOCK(addr)                                                     \
            ((LONG volatile)*addr ? 1 : InterlockedExchange(addr,1))
 #endif
 #define CLEARLOCK(addr)                                                      \
           InterlockedExchange(addr,0)
 #define WAIT_UNTIL_ALONE(addr)                                               \
           while( INTERLOCK(addr) ) SLEEP( 0 )
#else
 #define INTERLOCK(addr)                                                      \
           sql76_interlock(addr)
 #define CLEARLOCK(addr)                                                      \
           sql76_clearlock(addr)
 #define WAIT_UNTIL_ALONE(addr)                                               \
           while( INTERLOCK(addr) ) SLEEP( 0 )
#endif

//
// --- Error output
//
#define  MSGALL(_arg)                   {sql60_msg_all           _arg;}
#define  MSGCD(_arg)                    {sql60_msg_con_diag      _arg;}
#define  MSGC(_arg)                     {sql60_msg_con           _arg;}
#define  MSGD(_arg)                     {sql60_msg_diag          _arg;}
#define  MSGBOX(_arg)                   {sql60_msg_box           _arg;}
#define  MSGEL(_arg)                    {sql60_msg_event_log     _arg;}
#define  MSGCEL(_arg)                   {sql60_msg_con_event_log _arg;}

#if defined(_WIN32)
 #define  _System
 #define  _Optlink
 #define  _CDECL                         __cdecl             // needed if -Gz
 #define  _INLINE                        __inline
#else
 #define  _CDECL
 #define  _INLINE                        _Inline
#endif

#ifdef  DEBUG
 #define STATIC
#else
 #define STATIC                          static
#endif  // DEBUG


#if !defined(INVALID_HANDLE_VALUE)
 #define INVALID_HANDLE_VALUE            (HANDLE)-1
#endif

#define MAX_SQL_PACKETS                  2
#define KB                               * 1024              // 1 Kilobyte
#define MB                               * ( 1024 * 1024 )   // 1 Megabyte
#define GB                               * ( 1024 MB )       // 1 Gigabyte
#define MAX_ALLOC_POOL_SIZE              ( 20 MB )
#define ALIGNMENT_VALUE                  16
#define SQL_PACKET_ALIGNMENT             8
#define DEFAULT_TW_TERMINATION_TIMEOUT   (60 * 20)   // -- Traceriter termination timeout value
#define MIN_TW_TERMINATION_TIMEOUT       (60 * 5)


#define KBYTE_4                          4096
#define KBYTE_64                         65536

#define NOEABUF                          0L          // - used by 'DosOpen'
#define NUL                              '\0'
#define UNDEF                            -1
#define HT_SIZE                          8
#define HT                               '\t'
#define CR                               '\r'
#define LF                               '\n'

#define FILENAMESIZE                     64
#define MAXSTRINGLENGTH                  64
#define MAXEXIT                          10

#define KERNEL_TYPE_FAST                 1
#define KERNEL_TYPE_SLOW                 2
#define KERNEL_TYPE_QUICK                3
#define KERNEL_TYPE_FAST_ORA_GW          4
#define KERNEL_TYPE_SLOW_ORA_GW          5

#define STDIN                            0
#define STDOUT                           1
#define STDERR                           2

#define POST_SEM                         0
#define DO_NOT_POST_SEM                  1

//
// - device types  - 'sql44c_get_dev_type_by_filename'
//
#define DT_UNKNOWN                       0
#define DT_CON                           1
#define DT_CONOUT                        1   // - equal to DT_CON
#define DT_CONIN                         2
#define DT_PRN                           3
#define DT_LPTx                          4
#define DT_COMx                          5
#define DT_OTHER                         6
#define DT_TAPE                          7
#define DT_DRIVE                         8
#define DT_PIPE                          9
#define DT_NUL                           10


//
// --- diag/console options
//
#define MAX_MSG_LINE_LEN                 256

#define ENABLE_CONSOLE_OUTPUT            0x01
#define ENABLE_EVENT_LOG_OUTPUT          0x02
#define ENABLE_DIAGFILE_OUTPUT           0x04

#define IERR_TYPE                        0
#define ERR_TYPE                         1
#define WRN_TYPE                         2
#define INFO_TYPE                        3

//
// --- SERVERDB start/stop options
//
#define AUTOCLOSE                        0x01
#define IGNORE_AUTORESTART               0x02

//
// --- SERVERDB service options
//
#define CREATE_ADABAS_SERVICE            1
#define REMOVE_ADABAS_SERVICE            2
#define UPDATE_ADABAS_SERVICE            3


//
// --- virtual file options
//
#define HF_MIN                           1
#define MAGIC_REC_LEN                    8

#ifdef USER
    #define HF_MAX                       8
#else
    #define HF_MAX                       3
#endif

//
// --- File types
//
#define VFT_DISK                         0
#define VFT_CHARACTER_DEVICE             1
#define VFT_PIPE                         2

//
// --- File states
//
#define HFS_UNUSED                       1
#define HFS_RESERVED                     2
#define HFS_USED                         3
#define HFS_END                          4
#define HFS_ERROR                        5
#define HFS_EOF                          6

//
// --- File attributes
//
#if defined(_WIN32)
 #define FILE_DIRECTORY                  FILE_ATTRIBUTE_DIRECTORY
 #define FILE_SYSTEM                     FILE_ATTRIBUTE_SYSTEM
 #define FILE_READONLY                   FILE_ATTRIBUTE_READONLY
 #define FILE_HIDDEN                     FILE_ATTRIBUTE_HIDDEN
 #define FILE_ARCHIVED                   FILE_ATTRIBUTE_ARCHIVE
 #define FILE_NORMAL                     FILE_ATTRIBUTE_NORMAL
 #define FILE_COMPRESSED                 FILE_ATTRIBUTE_COMPRESSED
#else
 #define FILE_COMPRESSED                 0
#endif

//
// --- Tape drive features
//
#if defined(_WIN32)
 #define TAPE_COMPRESSION                0x00001
 #define TAPE_ECC                        0x00002
 #define TAPE_SET_COMPRESSION            0x00004
 #define TAPE_SET_ECC                    0x00008
 #define TAPE_REPORT_SMKS                0x00010
 #define TAPE_SET_BLOCK_SIZE             0x00020
 #define TAPE_LOCK_UNLOCK                0x00040
 #define TAPE_LOAD_UNLOAD                0x00080
 #define TAPE_WRITE_LONG_FMKS            0x00100
 #define TAPE_WRITE_SHORT_FMKS           0x00200
 #define TAPE_WRITE_FILEMARKS            0x00400
 #define TAPE_TENSION_TAPE               0x00800
 #define TAPE_WRITE_MARK_IMMED           0x01000
 #define TAPE_LOCK_UNLOCK_IMMED          0x02000
 #define TAPE_LOAD_UNLOAD_IMMED          0x04000
 #define TAPE_REWIND_IMMED               0x08000
 #define TAPE_TENSION_TAPE_IMMED         0x10000

 #define DEFAULT_TAPE_LOAD_RETRY_TIME    120     // -- retry time (s)

#endif


//
// --- some object creation options
//
#if defined(_WIN32)
 #define  CREATE_THRD_SUSPENDED         CREATE_SUSPENDED
 #define  CREATE_EVENT_SEM_SHARED       1
#else
 #define  CREATE_THRD_SUSPENDED         0x1
 #define  CREATE_EVENT_SEM_SHARED       DC_SEM_SHARED
#endif


//
// --- thread priority
//
#if defined(_WIN32)
 #define SERVER_THRD_PRIO                THREAD_PRIORITY_HIGHEST
 #define SERVER_LOOP_THRD_PRIO           THREAD_PRIORITY_HIGHEST
 #define SERVER_REQUESTOR                THREAD_PRIORITY_HIGHEST

 #define DEFAULT_UKT_THRD_PRIO           THREAD_PRIORITY_ABOVE_NORMAL
 #define NETWORK_THRD_PRIO               THREAD_PRIORITY_ABOVE_NORMAL
 #define CLOCK_THRD_PRIO                 THREAD_PRIORITY_NORMAL
 #define REQUESTOR_THRD_PRIO             THREAD_PRIORITY_HIGHEST
 #define DEV0_THRD_PRIO                  THREAD_PRIORITY_NORMAL
 #define DEVI_THRD_PRIO                  THREAD_PRIORITY_HIGHEST
 #define ASYNC0_THRD_PRIO                THREAD_PRIORITY_NORMAL
 #define ASYNCI_THRD_PRIO                THREAD_PRIORITY_HIGHEST
 #define DCOM0_THRD_PRIO                 THREAD_PRIORITY_NORMAL
 #define DCOMI_THRD_PRIO                 THREAD_PRIORITY_NORMAL 
 #define COORDINATOR_THRD_PRIO           THREAD_PRIORITY_NORMAL
 #define TIMER_THRD_PRIO                 THREAD_PRIORITY_NORMAL
 #define CONSOLE_THRD_PRIO               THREAD_PRIORITY_ABOVE_NORMAL
 #define DEV_WORKER_THRD_PRIO            THREAD_PRIORITY_HIGHEST
#else
 #define SERVER_THRD_PRIO                (PRTYC_REGULAR * 100)      + 31
 #define SERVER_LOOP_THRD_PRIO           (PRTYC_TIMECRITICAL * 100) + 0
 #define SERVER_REQUESTOR                (PRTYC_REGULAR * 100)      + 20

 #define DEFAULT_UKT_THRD_PRIO           (PRTYC_REGULAR * 100)      + 31
 #define NETWORK_THRD_PRIO               (PRTYC_REGULAR * 100)      + 31
 #define CLOCK_THRD_PRIO                 (PRTYC_REGULAR * 100)      + 0
 #define REQUESTOR_THRD_PRIO             (PRTYC_REGULAR * 100)      + 20
 #define DEV0_THRD_PRIO                  (PRTYC_REGULAR * 100)      + 0
 #define DEVI_THRD_PRIO                  (PRTYC_REGULAR * 100)      + 20
 #define ASYNC0_THRD_PRIO                (PRTYC_REGULAR * 100)      + 0
 #define ASYNCI_THRD_PRIO                (PRTYC_REGULAR * 100)      + 20
 #define COORDINATOR_THRD_PRIO           (PRTYC_REGULAR * 100)      + 0
 #define TIMER_THRD_PRIO                 (PRTYC_REGULAR * 100)      + 0
 #define CONSOLE_THRD_PRIO               (PRTYC_REGULAR * 100)      + 20
#endif

//
// --- special Windows NT definitions (registry, service, ...)
//
#define DATABASE_OPERATOR_GROUP          "ADABAS Operators"
#define L_DATABASE_OPERATOR_GROUP        L"ADABAS Operators"
#define DOMAIN_DATABASE_OPERATOR_GROUP   "Domain ADABAS Oper."
#define L_DOMAIN_DATABASE_OPERATOR_GROUP L"Domain ADABAS Oper."
#define L_DATABASE_OPERATOR_GROUP_DESC   L"Members can administer existing databases"

#define SYSTEM_GUEST_NAME                "GUEST"
#define DR_WATSON_EXENAME                "DRWTSN32"
#define SERVICE_ID                       "ADABAS-"
#define SERVICE_DISPLAY_STR              "ADABAS:  "
#define SERVICE_ID_GW                    "ADABAS GW-"
#define SERVICE_DISPLAY_STR_GW           "ADABAS Gateway:  "
#define SERVICE_QUICK_EXT                " (quick)"
#define SERVICE_SLOW_EXT                 " (slow)"

#define REG_SK_BASE                      "Software\\Software AG"
#define REG_SK_APPLIC                    "ADABAS D"
#define REG_SK_SERVICE_PARAM             "Parameters"
#define REG_SK_DLLS                      "DLLs"
#define REG_SK_SERVICE                   "SYSTEM\\CurrentControlSet\\Services"
#define REG_SK_EVENT_LOG                 "EventLog\\Application"
#define REG_SK_AEDEBUG                   "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug"

#define REG_VN_AEDEBUG                   "Debugger"
#define REG_VN_DUMP_ENABLED              "sqladump"
#define REG_VN_XUSER                     "UData"
#define REG_VN_DBROOT                    "DBRoot"
#define REG_VN_VERSION                   "Version"
#define REG_VN_VERSION_ID                "VersionID"
#define REG_VN_KERNEL_VERSION            "KernelVersion"
#define REG_VN_MAX_CON                   "MaxConnections"
#define REG_VN_MSG_FILE                  "EventMessageFile"
#define REG_VN_EV_TYPES                  "TypesSupported"
#define REG_VN_DIAG_NAME                 "ApplDiagFileName"
#define REG_VN_DIAG_ENABLED              "ApplDiagEnabled"
#define REG_VN_CHAR_SET_ENABLED          "DBCharSetEnabled"
#define REG_VN_CHAR_SET_NAME             "DBCharSet"
#define REG_VN_TAPE_LOAD_RETRY_TIME      "MaxTapeLoadTime"
#define REG_VN_SQLOPT_ENABLED            "SQLOptEnabled"
#define REG_VN_SQLOPT                    "SQLOpt"
#define REG_VN_TAPE_COMPRESS             "TapeCompression"
#define REG_VN_TW_TERM_TIMEOUT           "TWTermTimeout"
#define REG_DBLOCALE_SQLOPT              "DBLocale"
#define REG_VN_TCPIP_DLL                 "TCPIP"
#define REG_VN_USER                      "User"
#define REG_VN_USE_XUDATA_POS            "UDataPos"
#define REG_VN_DEBUG_BREAK               "DebugBreak"
#define REG_VN_SERVICE_TYPE              "Type"
#define REG_VN_DEV_WORKERS               "IOWorkers"
#define REG_VN_CONCURRENT_DEV_WORKERS    "ConcurrentIOWorkers"
#define REG_VN_CONFIG_PATH               "ConfigPath"
#define REG_VN_WRK_PATH                  "WorkPath"

#define REG_MSG_FILE                     "sqlmsg.dll"

// --- service types
#define SV_TYPE_ADABAS                   0x18800000

//
// --- titles and program names
//
#define XSERV_TITLE                      "XServer"
#define XSTOP_TITLE                      "XStop"
#define XSTART_TITLE                     "XStart"
#define XSHOW_TITLE                      "XShow"
#define DB_TITLE                         "ADABAS"
#define COMMON_DIAG_ID                   "ADABAS D"
#define KERNEL_DIAG_ID                   COMMON_DIAG_ID
#define XSERVER_DIAG_ID                  "ADABAS D - XServer"
#define KERNEL_APPLIC_NAME               "ADABAS D - "     // - OS2 PM-Console
#define KERNEL_APPLIC_CLASS              "ADABAS D Kernel" // - OS2 PM-Console

//
// --- path and file names
//
#define DEFAULT_TCPIP_DLL                "sqltcp.dll"
#define CMD_FILENAME                     "cmd.exe"
#define CMD_COMMAND_PARAMETER            "/C"
#define USER_DIAGFILE_NAME               "appldiag"
#define FULL_USER_DIAGFILE_NAME          "%DBROOT%\\wrk\\appldiag"
#define BATCH_DIAGFILE_NAME              "batdiag"
#define FULL_BATCH_DIAGFILE_NAME         "%DBROOT%\\wrk\\batdiag"
#define KERN_ERR_FILE_NAME               "kernel.err"
#define SERV_ERR_FILE_NAME               "serv.err"
#define SERVER_TYPE_FILENAME             "config\\server.typ"
#define DB_XSERVER_FILE_NAME             "pgm\\serv.exe"
#define DB_FAST_KERN_FILE_NAME           "pgm\\kernel.exe"
#define DB_QUICK_KERN_FILE_NAME          "pgm\\quickknl.exe"
#define DB_SLOW_KERN_FILE_NAME           "pgm\\slowknl.exe"
#define DB_FAST_ORA_GATEWAY_FILE_NAME    "pgm\\fstgwora.exe"
#define DB_SLOW_ORA_GATEWAY_FILE_NAME    "pgm\\slwgwora.exe"
#define DB_KERN_ICON_NAME                "pgm\\kernel.ico"
#define DB_ICON_FILE_NAME                "pgm\\adabas.ico"
#define XSERV_DIAGNAME                   "%DBROOT%\\wrk\\xserver.prt"
#if defined(_WIN32)
 #define XUSER_BEF_62_DEFAULT_PATH_NAME  "%HOMEDRIVE%%HOMEPATH%\\xuser.dat"
 #define XUSER_DEFAULT_PATH_NAME         "%HOMEDRIVE%%HOMEPATH%\\xuser62.dat"
#else
 #define XUSER_BEF_62_DEFAULT_PATH_NAME  "%DBROOT%\\config\\xuser.dat"
 #define XUSER_DEFAULT_PATH_NAME         "%DBROOT%\\config\\xuser62.dat"
#endif

//
// --- environment variables
//
#define BATCH_DIAG_FILE_ENV_VAR          "BATCHDIAGFILE"  // - SQLEXEC
#define DBTERM_ENV_VAR                   "DBTERM"
#define TAPE_COMPRESS_ENV_VAR            "TAPECOMPRESS"   // - 'OFF' - no comp.
#define DBNAME_ENV_VAR                   "DBNAME"
#define SERVERDB_ENV_VAR                 "SERVERDB"
#define HOSTNAME_ENV_VAR                 "HOSTNAME"
#define DBROOT_ENV_VAR                   "DBROOT"
#define USERDIAG_ENV_VAR                 "DIAGFILE"       // - 'YES' diag. on
#define CHAR_SET_ENV_VAR                 "DBCHARSET"
#define DBLOCALE_ENV_VAR                 "DBLOCALE"


//
// --- named object identifier
//
#if defined(_WIN32)
 #define SEM_XSTART                      "ADABAS-XSTART-"
 #define SEM_XSTART_CRASH                "ADABAS-CRASH-"
 #define SEM_XSTOP                       "ADABAS-XSTOP-"
 #define SEM_XSERVER                     "ADABAS-XSERVER-"
 #define SEM_COORD                       "ADABAS-COORD-"
 #define SEM_USR                         "ADABAS-USR-"
 #define SEM_UKT                         "ADABAS-UKT-"
 #define SHM_COMMSEG                     "ADABAS-COMMSEG-"
 #define SHM_KSS                         "ADABAS-KSS-"
 #define SHM_FCS                         "ADABAS-FCS-"
 #define SHM_CONSREC                     "ADABAS-CONSREC-"
 #define MAIL_REQ                        "\\\\.\\mailslot\\ADABAS\\REQ\\"
 #define MAIL_CONS                       "\\\\.\\mailslot\\ADABAS\\CONS\\"
 #define XSERVER_OBJ_NAME                "XSERVER"
#else
 #define SEM_XSTART                      "\\SEM32\\ADABAS\\XSTART\\"
 #define SEM_XSTART_CRASH                "\\SEM32\\ADABAS\\CRASH\\"
 #define SEM_XSTOP                       "\\SEM32\\ADABAS\\XSTOP\\"
 #define SEM_XSERVER                     "\\SEM32\\ADABAS\\XSERVER"
 #define SEM_COORD                       "\\SEM32\\ADABAS\\COORD\\"
 #define SHM_KSS                         "\\SHAREMEM\\ADABAS\\KSS\\"
 #define SHM_FCS                         "\\SHAREMEM\\ADABAS\\FCS\\"
 #define QUE_CONS                        "\\QUEUES\\ADABAS\\CONS\\"
 #define QUE_REQ                         "\\QUEUES\\ADABAS\\REQ\\"
 #define XSERVER_OBJ_NAME                "XSERVER"
#endif

//
// --- additional error codes
//
#if defined(_WIN32)
 #define ERROR_DUPLICATE_NAME            ERROR_ALREADY_EXISTS
 #define ERROR_ALREADY_POSTED            NO_ERROR

 #if !defined(ERROR_TIMEOUT)
  #define ERROR_TIMEOUT                  1460
 #endif
#else
 #define ERROR_FILEMARK_DETECTED         ERROR_HANDLE_EOF
 #define ERROR_END_OF_MEDIA              ERROR_HANDLE_EOF
 #define ERROR_NO_DATA_DETECTED          ERROR_HANDLE_EOF
#endif

//
// --- socket - communication
//
#define SOCKET_PROTOCOL                  "tcp"
#define SOCKET_SERVICE_SQL30             "sql30"
#define SOCKET_SERVICE_SQL6              "sql6"
#define INET_ADDR_SIZE                   4


#if defined(_WIN32)
 #define SOCENOBUFS                      WSAENOBUFS
 #define SOCEBADF                        WSAEBADF
 #define SOCEADDRINUSE                   WSAEADDRINUSE
 #define SOCENOTSOCK                     WSAENOTSOCK
 #define SOCECONNREFUSED                 WSAECONNREFUSED
 #else
 #define INVALID_SOCKET                  -1
#endif

//
// --- exception handling
//
#define XCPT_ABORT_EXCEPTION            0xE000AFFE  // -- Exception number for 'abort'
#define XCPT_ABORT_EXCEPTION_CRASH_DUMP 0xE000AAAA  // -- Exception number for 'crash dump'

#if defined(_WIN32)
 #ifndef try
  #define try                            __try
 #endif
 #ifndef except
  #define except                         __except
 #endif
 #ifndef finally
  #define finally                        __finally
 #endif
 #ifndef leave
  #define leave                          __leave
 #endif
#endif

#if defined(_WIN32)
 #define PEXCEPTIONREPORTRECORD        EXCEPTION_RECORD*

 #define ExceptionNum                  ExceptionCode
 #define cParameters                   NumberParameters
 #define ExceptionInfo                 ExceptionInformation

 #define XCPT_IN_PAGE_ERROR            STATUS_IN_PAGE_ERROR
 #define XCPT_NONCONTINUABLE_EXCEPTION STATUS_NONCONTINUABLE_EXCEPTION
 #define XCPT_INVALID_DISPOSITION      STATUS_INVALID_DISPOSITION
 #define XCPT_ACCESS_VIOLATION         STATUS_ACCESS_VIOLATION
 #define XCPT_INTEGER_DIVIDE_BY_ZERO   STATUS_INTEGER_DIVIDE_BY_ZERO
 #define XCPT_FLOAT_DIVIDE_BY_ZERO     STATUS_FLOAT_DIVIDE_BY_ZERO
 #define XCPT_FLOAT_INVALID_OPERATION  STATUS_FLOAT_INVALID_OPERATION
 #define XCPT_ILLEGAL_INSTRUCTION      STATUS_ILLEGAL_INSTRUCTION
 #define XCPT_PRIVILEGED_INSTRUCTION   STATUS_PRIVILEGED_INSTRUCTION
 #define XCPT_INTEGER_OVERFLOW         STATUS_INTEGER_OVERFLOW
 #define XCPT_FLOAT_OVERFLOW           STATUS_FLOAT_OVERFLOW
 #define XCPT_FLOAT_UNDERFLOW          STATUS_FLOAT_UNDERFLOW
 #define XCPT_FLOAT_DENORMAL_OPERAND   STATUS_FLOAT_DENORMAL_OPERAND
 #define XCPT_FLOAT_INEXACT_RESULT     STATUS_FLOAT_INEXACT_RESULT
 #define XCPT_FLOAT_STACK_CHECK        STATUS_FLOAT_STACK_CHECK
 #define XCPT_DATATYPE_MISALIGNMENT    STATUS_DATATYPE_MISALIGNMENT
 #define XCPT_INVALID_LOCK_SEQUENCE
 #define XCPT_ARRAY_BOUNDS_EXCEEDED    STATUS_ARRAY_BOUNDS_EXCEEDED
 #define XCPT_BAD_STACK                STATUS_STACK_OVERFLOW
 #define XCPT_INVALID_UNWIND_TARGET

 #define XCPT_SIGNAL                   STATUS_CONTROL_C_EXIT
 #define XCPT_SIGNAL_INTR              CTRL_C_EVENT
 #define XCPT_SIGNAL_BREAK             CTRL_BREAK_EVENT

 #define XCPT_CONTINUE_EXECUTION       (ULONG)EXCEPTION_CONTINUE_EXECUTION
 #define XCPT_CONTINUE_SEARCH          (ULONG)EXCEPTION_CONTINUE_SEARCH
#endif




// ========================== RTE internal MACROS =============================

//
// --- memory allocation
//

#if defined (KERNEL)
 #define  ALLOC_MEM(_p,_s)                                                     \
            sql57k_pmalloc(__LINE__,__FILE__,_p,_s)

 #define  FREE_MEM(_p)                                                         \
            sql57k_pfree(__LINE__,__FILE__,_p)
#else
 #define  ALLOC_MEM(_p,_s)                                                     \
            sql57c_malloc(__LINE__,__FILE__,_p,_s)

 #define  FREE_MEM(_p)                                                         \
            sql57c_free(__LINE__,__FILE__,_p)
#endif


#define  ALIGN(_val,_alignment)                                               \
           ((((_val) - 1) / (_alignment) + 1 ) * (_alignment))
#define  BLANKS_ONLY( _psz )                                                  \
           (strlen( _psz) == strspn( _psz, " " ))
#define  ARRAY_SIZE(_A)                                                       \
           (sizeof(_A) / sizeof((_A)[0]))


#if defined(_WIN32)
 #define  THREADID                                                            \
            GetCurrentThreadId()

 #define  GETPROCESSID(ppid)                                                  \
            (*ppid = GetCurrentProcessId())

 #define  EXITTHREAD(_rc, _handle)                                            \
            { HANDLE _H = _handle;      /* use vaiable to suppress warning */ \
              if (_H != INVALID_HANDLE_VALUE)                                 \
                CloseHandle(_H);                                              \
              ExitThread( (UINT)_rc );                                        \
            }

 #define  EXITPROCESS(_rc)                                                    \
            ExitProcess( (UINT)_rc );

 #define  SLEEP(_msec)                                                        \
            SleepEx(_msec, FALSE)

 #define  BEEP(_Freq, _Dur)                                                   \
            Beep(_Freq, _Dur)

 #define  GETENV(_pKey, _pVal)                                                \
            (!(*_pVal = getenv(_pKey)) ? ERROR_ENVVAR_NOT_FOUND : NO_ERROR)

 #define  DELETE_FILE(_file)                                                  \
            (DeleteFile(_file) ? NO_ERROR : GetLastError())

 #define  MOVE_FILE(_NewFile, _OldFile)                                       \
            (MoveFile(_NewFile, _OldFile) ? NO_ERROR : GetLastError())

 #define  CLOSE_FILE(_hdl)                                                    \
            (CloseHandle((HANDLE)_hdl) ? NO_ERROR : GetLastError())

 #define  SET_FILE_PTR(_hdl, _size, _typ, _plpos, _phpos)                     \
            ((*_plpos=SetFilePointer((HANDLE)_hdl,_size,_phpos,_typ)) != -1 ? \
              NO_ERROR : GetLastError())

 #define  WRITE_FILE(_hdl, _buf, _size, _written)                             \
            (WriteFile((HANDLE)_hdl, _buf, _size, _written, NULL) ?           \
              NO_ERROR : GetLastError())

 #define  READ_FILE(_hdl, _buf, _size, _read)                                 \
            (ReadFile((HANDLE)_hdl, _buf, _size, _read, NULL) ?               \
              NO_ERROR : GetLastError())

 #define  WRITE_FILE_OL(_hdl, _buf, _size, _written, _ol)                     \
            (WriteFile((HANDLE)_hdl, _buf, _size, _written, _ol) ?            \
              NO_ERROR : GetLastError())

 #define  READ_FILE_OL(_hdl, _buf, _size, _read, _ol)                         \
            (ReadFile((HANDLE)_hdl, _buf, _size, _read, _ol) ?                \
              NO_ERROR : GetLastError())


 #define  CREATE_THREAD(_pTid, _pHandle, _pFunc, _Arg, _Options, _StackSize ) \
            ((*_pHandle = CreateThread(NULL, _StackSize,                      \
                                       (LPTHREAD_START_ROUTINE)_pFunc,        \
                                       (LPVOID)_Arg, _Options, _pTid )) ?     \
               NO_ERROR : (*_pHandle = INVALID_HANDLE_VALUE, GetLastError()))

 #define  RESUME_THREAD(_Tid, _Handle )                                       \
            ((ResumeThread(_Handle) != (DWORD)-1) ? NO_ERROR : GetLastError())

 #define  WAIT_THREAD(_pTid, _Handle, _WaitMSec)                              \
            WaitForSingleObject( _Handle, _WaitMSec );

 #define  KILL_THREAD( _Tid, _Handle )                                        \
            (TerminateThread(_Handle, 1) ?                                    \
                            (CloseHandle(_Handle), NO_ERROR) : GetLastError())

 #define  SET_THREAD_PRIO( _Prio, _Tid, _Handle )                             \
            (SetThreadPriority(_Handle, _Prio ) ? NO_ERROR : GetLastError())

#else
 #define  THREADID                                                            \
            (*_threadid)

 #define  GETPROCESSID(_ppid)                                                 \
            { PPIB   _pPib; PTIB   _pTib; APIRET _rc;                         \
              _rc   = DosGetInfoBlocks (&_pTib, &_pPib);                      \
              *_ppid= (_rc==NO_ERROR) ? _pPib->pib_ulpid :0; }

 #define  EXITTHREAD(_rc, _Handle)                                            \
            DosExit (EXIT_THREAD, _rc);                                       \
            /* --- SUPPRESS WARNING (EDC0801) --- */                          \
            { HANDLE _X=0; if (_Handle == _X) {;}}

 #define  EXITPROCESS(_rc)                                                    \
            DosExit (EXIT_PROCESS, _rc)

 #define  SLEEP(_msec)                                                        \
            DosSleep(_msec)

 #define  BEEP(_Freq, _Dur)                                                   \
            DosBeep(_Freq, _Dur)

 #define  GETENV(_pKey, _pVal)                                                \
            DosScanEnv(_pKey, _pVal)

 #define  DELETE_FILE(_file)                                                  \
            DosDelete(_file)

 #define  MOVE_FILE(_NewFile, _OldFile)                                       \
            DosMove(_NewFile, _OldFile)

 #define  CLOSE_FILE(_hdl)                                                    \
            DosClose(_hdl)

 #define  SET_FILE_PTR(_hdl, _size, _typ, _plpos, _phpos)                     \
            DosSetFilePtr(_hdl, _size, _typ, _plpos);                         \
            /* --- SUPPRESS WARNING (EDC0801) --- */                          \
            { ULONG _X=0; if (_phpos == &_X) {;}}

 #define  WRITE_FILE(_hdl, _buf, _size, _written, _ol)                        \
            DosWrite(_hdl, _buf, _size, _written)

 #define  READ_FILE(_hdl, _buf, _size, _read, _ol)                            \
            DosRead(_hdl, _buf, _size, _read)

 #define  WRITE_FILE(_hdl, _buf, _size, _written)                             \
            DosWrite(_hdl, _buf, _size, _written)

 #define  READ_FILE(_hdl, _buf, _size, _read )                                \
            DosRead(_hdl, _buf, _size, _read)

 #define  CREATE_THREAD(_pTid, _pHandle, _pFunc, _Arg, _Options, _StackSize ) \
            DosCreateThread((PTID)_pTid, (PFNTHREAD) _pFunc, _Arg, _Options,  \
                            _StackSize )

 #define  RESUME_THREAD(_Tid, _Handle )                                       \
            DosResumeThread( _Tid )

 #define  WAIT_THREAD(_pTid, _Handle, _WaitMSec)                              \
            { LONG _lRc, _lWaitCnt;                                           \
              for (_lWaitCnt = (_WaitMSec + 99) / 50; _lWaitCnt; _lWaitCnt--) \
                {                                                             \
                _lRc = DosWaitThread(_pTid, DCWW_NOWAIT);                     \
                if (( _lRc  == ERROR_THREAD_NOT_TERMINATED ) ||               \
                    ( _lRc  == ERROR_INTERRUPT ))                             \
                  SLEEP( 50 );                                                \
                else                                                          \
                  break;                                                      \
                }                                                             \
              /* --- SUPPRESS WARNING (EDC0801) --- */                        \
              { HANDLE _X=0; if (_Handle == _X) {;}}                          \
            }

 #define  KILL_THREAD(_Tid, _Handle )                                         \
            DosKillThread (_Tid)

 #define  SET_THREAD_PRIO( _Prio, _Tid, _Handle )                             \
            DosSetPriority( PRTYS_THREAD, (_Prio) / 100, (_Prio) % 100, _Tid)
#endif

//
// --- ABORT
//
#if defined (SERVER)
 #define  ABORT_NO_CRASH_DUMP()                                               \
            sql96c_abort ();

 #define  ABORT()                                                             \
            sql96c_abort ();
#elif defined (USER)
 #define  ABORT_NO_CRASH_DUMP()                                               \
            sqlabort()

 #define  ABORT()                                                             \
            sqlabort()
#elif defined (KERNEL)
 #define  ABORT_NO_CRASH_DUMP()                                               \
            sql50k_rte_abort( FALSE, __LINE__, __FILE__ )

 #define  ABORT()                                                             \
            sql50k_rte_abort( TRUE, __LINE__, __FILE__ )
#else
 #define  ABORT_NO_CRASH_DUMP()                                               \
            EXITPROCESS( (ULONG)-1)

 #define  ABORT()                                                             \
            EXITPROCESS( (ULONG)-1)
#endif

#define RTE_ASSERT(_as, _err)                                                 \
            if ( _as ) {                                                      \
              MSGCD(_err);                                                    \
              ABORT(); }



// ========================== RTE internal TYPES ==============================

#if defined(_WIN32)
 typedef DWORD                         APIRET;
 typedef PVOID                         *PPVOID;
 typedef DWORD                         TID, *PTID;
 typedef DWORD                         PID, *PPID;
 typedef HFILE                         *PHFILE;
 typedef HANDLE                        HEV, *PHEV;
 typedef VOID                          ( __cdecl * SIGNALFUNCTYPE )( INT SigType );
 typedef VOID _System                  (*PFNEXITLIST)(ULONG);
 typedef CHAR                          IPC_BASE_OBJ_NAME[70];
 typedef IPC_BASE_OBJ_NAME             PIPC_BASE_OBJ_NAME;
 typedef EXCEPTION_RECORD              EXCEPTION_REC;
 typedef EXCEPTION_RECORD              EXCEPTION_REPORT_REC;
 typedef CHAR                          PATHNAME[MAX_PATH + 1];
 typedef CHAR                          SERVICE_DISPLAY_NAME[MAX_PATH + 1];
 typedef DWORD                         QWORD[2];
#else
 typedef VOID                          (* SIGNALFUNCTYPE )( INT SigType );
 typedef ULONG                         SECURITY_ATTRIBUTES;
 typedef PULONG                        PSECURITY_ATTRIBUTES;
 typedef LHANDLE                       HANDLE;
 typedef HANDLE                        *PHANDLE;
 typedef EXCEPTIONREGISTRATIONRECORD   EXCEPTION_REC;
 typedef EXCEPTIONREPORTRECORD         EXCEPTION_REPORT_REC;
 typedef CHAR                          PATHNAME[CCHMAXPATH + 1];
#endif

typedef LONG                           ( *PMSGFUNCTYPE )( PSZ MessageString );
typedef EXCEPTION_REC                  *PEXCEPTION_REC;
typedef EXCEPTION_REPORT_REC           *PEXCEPTION_REPORT_REC;
typedef ULONG                          COMMHANDLE;
typedef COMMHANDLE                     *PCOMMHANDLE;


typedef struct rte_version_id
  {
  UCHAR                             ucMajorVersion;
  UCHAR                             ucMinorVersion;
  UCHAR                             ucCorrLevel;
  UCHAR                             ucPatchLevel;
  } RTE_VERSION_ID;

typedef RTE_VERSION_ID              *PRTE_VERSION_ID;

//
// --- kernel shared section
//
typedef struct kernel_shared_seg
  {
  C40C                              RTEVersion;
  C40C                              KernelVersion;
  BOOLEAN                           fDump;                 // - set by XSTOP
  PID                               KernelPid;
  BOOL                              fIsGateway;

  ULONG                             ulConsoleShmSize;
  } KERNEL_SHARED_SEG;


/*
 *  - Structure of the kernel communication segment
 *
 *       +------------------------------------+
 *    +--|     flag_comm_seg                  |--+
 *    |  +------------------------------------+  |
 *    +->|     CommFlag 0                     |  |
 *       |        .     .                     |  |
 *       |        .     .                     |  |
 *       |     CommFlag n                     |  |
 *       +------------------------------------+  |
 *       |     SemaFlag 0                     |<-+
 *       |        .     .                     |
 *       |        .     .                     |
 *       |     SemaFlag n                     |
 *       +------------------------------------+
 */
typedef struct flag_comm_seg
  {
  ULONG                             ulPacketSize;
  ULONG                             ulMinReplySize;

  ULONG                             ulNumOfCommFlags; // - Flags are behind
  ULONG                             ulCommFlagOffset; //   this segment!
  ULONG                             ulNumOfSemaFlags; // - Flags are behind
  ULONG                             ulSemaFlagOffset; //   this segment!
  } FLAG_COMM_SEG;


typedef  FLAG_COMM_SEG             *PFLAG_COMM_SEG;

//
// --- connection parameter  ( sql33c_connect, sql23c_connect )
//
typedef struct connect_param_record
  {
  // - input
  PSZ                               pszServerDB;
  PSZ                               pszServerNode;
  PSZ                               pszServerDBRoot;  // control server only
  PSZ                               pszServerPgm;     // control server only
  ULONG                             ulServiceType;
  ULONG                             ulPacketCnt;
  ULONG                             ulClientRef;
  PID                               pidClientPID;
  PSZ                               pszClientNode;    // comm. xserver/kernel only
  ULONG                             ulConnTimeout;    // shm comm. only
  PSECURITY_ATTRIBUTES              pWorldSA;         // shm comm. only
  PSECURITY_ATTRIBUTES              pLockSA;          // shm comm. only

  HEV                               hevClientSem;     // distrib. only
  PSZ                               pszClientSemPath; // distrib. only
  PSZ                               pszClientSemName; // distrib. only
  ULONG                             ulCommFlagNo;     // distrib. only

  // - input/output
  ULONG                             ulPacketSize;
  ULONG                             ulMaxDataLen;
  BOOL                              fAcknowledge;

  // - output
  ULONG                             ulServerRef;
  ULONG                             ulMinReplySize;
  struct comm_packet_record         *pCommPacketList[MAX_SQL_PACKETS];
  } CONNECT_PARAM_REC;

typedef CONNECT_PARAM_REC           *PCONNECT_PARAM_REC;


//
// --- VOS33C INTERNAL USE ONLY!
//
typedef struct shm_connect_info_record
  {
  PID                               pidClientPID;
  SQL_NODEIDC                       szClientNode;
  SQL_DBNAMEC                       szServerDB;
  SQL_NODEIDC                       szServerNode;
  ULONG                             ulServerRef;
  ULONG                             ulClientRef;
  ULONG                             ulServiceType;

  ULONG                             ulCurrentPacket;
  ULONG                             ulCmdDataLen;
  ULONG                             ulPacketCnt;
  struct comm_packet_record         *pCommPacketList[MAX_SQL_PACKETS];

  ULONG                             ulPacketSize;
  ULONG                             ulMaxDataLen;
  ULONG                             ulMinReplySize;

  HANDLE                            hCS;             // - NT only
  struct comm_seg_header_record     *pCSHeader;
  ULONG                             ulCSSize;
  HANDLE                            hFCS;
  PFLAG_COMM_SEG                    pFCS;
  HANDLE                            hQueMailSlot;
  HEV                               hevClientSem;
  HEV                               hevServerSem;

  ULONG                             ulCommFlagNo;
  PULONG                            pulCommFlag;
  PULONG                            pulSemaFlag;
  } SHM_CONNECT_INFO_REC;

typedef SHM_CONNECT_INFO_REC        *PSHM_CONNECT_INFO_REC;


//
// --- VOS23C INTERNAL USE ONLY!
//
typedef struct tcpip_connect_info_record
  {
  PID                               pidClientPID;
  SQL_DBNAMEC                       szServerDB;
  SQL_NODEIDC                       szServerNode;
  ULONG                             ulServerRef;
  ULONG                             ulClientRef;
  ULONG                             ulServiceType;

  ULONG                             ulCurrentPacket;
  ULONG                             ulCmdDataLen;
  ULONG                             ulPacketCnt;
  struct comm_packet_record         *pCommPacketList[MAX_SQL_PACKETS];

  ULONG                             ulPacketSize;
  ULONG                             ulMaxDataLen;
  ULONG                             ulMinReplySize;

  INT                               sd;
  INT                               SwapType;
  UCHAR                             ucName[12];
  USHORT                            usServicePort;
  ULONG                             ulSwapType;
  ULONG                             ulMinSegmentSize;
  ULONG                             ulMaxSegmentSize;
  } TCPIP_CONNECT_INFO_REC;

typedef TCPIP_CONNECT_INFO_REC      *PTCPIP_CONNECT_INFO_REC;


typedef struct conpkt_param_record
  {
  INT                             sd;
  ULONG                           ulMessClass;
  ULONG                           ulSenderRef;
  ULONG                           ulReceiverRef;
  ULONG                           ulServiceType;
  ULONG                           ulMaxSegmentSize;
  ULONG                           ulPacketSize;
  ULONG                           ulMaxDataLen;
  ULONG                           ulMinReplySize;
  ULONG                           ulSwapType;
  SQL_DBNAMEC                     szSenderServerDB;
  SQL_DBNAMEC                     szReceiverServerDB;
  PID                             pidSenderPID;
  USHORT                          usServicePort;
  ULONG                           ulCommState;
  BOOL                            fAcknowledge;
  PATHNAME                        szServerDBRoot;
  PATHNAME                        szServerPgm;
  } CONPKT_PARAM_REC;

typedef CONPKT_PARAM_REC            *PCONPKT_PARAM_REC;

//
// --- virtual file control record
//
typedef struct hostfile_ctrl_record
  {
  HFILE           hfFileHandle;       // - OS/2 file handle

  VF_FILENAMEC    szFileName;         // - null-terminated
  OPCODES         Direction;          // - opcode from vfopen()
  BOOLEAN         fReadOracleData;    // - reading oracle data?
  VF_RESOURCE     Resource;           // - stack, buffer pool
  VF_FORMAT       FileFormat;         // - stream, record, plaintext, unknown
  LONG            lRecordLength;      // - fixed record length,
                                      //   or 0 == variable
  LONG            lHeaderLength;      // - page 0 / magic record size
  ULONG           ulState;            // - SEE ABOVE
  LONG            lMaxFilePos;        // - highest byte number in file
  LONG            lReadCount;         // - seek: count of bytes to read
  ULONG           ulFileType;         // - 0-Disk file, 1-Character device,
                                      //   2-Pipe.
  BOOLEAN         fBlocked;           // - only for ASCII files: blocked?
  VF_FORMAT       ulEffFileFormat;    // - only for reading, stream overlays
                                      //
  PUCHAR          pBuffer;            // - pointer to this file's buffer
  LONG            lEndOfBuffer;       // - current end of this file's buffer
  LONG            lPos;               // - last pos read or to write, 0 - x
  LONG            lMaxPos;            // - highest usable position in pBuffer
  LONG            lFilePos;           // - abs. file pos of data in pBuffer
                                      //
  PUCHAR          pFirstBlock;        // - start pointer a block area for
                                      //   file i/o
  LONG            lSizeOfBlocks;      // - size of the block area

  LONG            lDevType;           // - device type

  #if defined _WIN32
   ULONG          ulTapeFeatures;     // - features of the tape drive
   ULONG          ulMaxTapeBlkSize;   // - Max. tape block size
   BOOL           fECC;
   BOOL           fCompression;
   BOOL           fDataPadding;
   BOOL           fNxtInAutoLoader;   // - only for autoloader ( tape close )
   LONG           lNxtInAutoLoaderError; // - return value , for autoloader only
  #endif
  }  HOSTFILE_CTRL_REC;

typedef HOSTFILE_CTRL_REC*      PHOSTFILE_CTRL_REC;
typedef PHOSTFILE_CTRL_REC*     PPHOSTFILE_CTRL_REC;


typedef struct stat             VF_FILEDATA;

//
// --- console request record
//
#if defined(_WIN32)
 typedef struct cons_request_record
   {
   ULONG                            ulReqType;
   ULONG                            ulConsoleRecLen;
   IPC_BASE_OBJ_NAME                szClientObjName;
   } CONS_REQUEST_REC;
#else
 typedef ULONG                      CONS_REQUEST_REC;
#endif

//
// --- Windows NT / registry handling
//
#if defined(_WIN32)
 typedef struct reg_entry_record
   {
   PSZ                              pszValueName;
   PVOID                            pValue;
   ULONG                            ulValueSize;
   ULONG                            ulValueType;
   ULONG                            rc;
   } REG_ENTRY_REC;

 typedef REG_ENTRY_REC      *PREG_ENTRY_REC;

 typedef struct user_access_rights_record
   {
   ULONG                  ulAccess;
   ULONG                  ulAceFlags;
   ULONG                  ulInheritAccess;
   ULONG                  ulInheritAceFlags;
   } USER_ACCESS_RIGHTS_REC;

 typedef USER_ACCESS_RIGHTS_REC  *PUSER_ACCESS_RIGHTS_REC;

 typedef struct access_rights_record
   {
   BOOL                   fDescOwnerIsAdmin;
   BOOL                   fAddDefaultDACL;

   USER_ACCESS_RIGHTS_REC User;
   USER_ACCESS_RIGHTS_REC Creator;
   USER_ACCESS_RIGHTS_REC Admin;
   USER_ACCESS_RIGHTS_REC System;
   USER_ACCESS_RIGHTS_REC AdabasOp;
   USER_ACCESS_RIGHTS_REC DomAdabasOp;
   USER_ACCESS_RIGHTS_REC World;
   USER_ACCESS_RIGHTS_REC BackupOp;
   } ACCESS_RIGHTS_REC;

 typedef ACCESS_RIGHTS_REC  *PACCESS_RIGHTS_REC;
#endif

// ========================== RTE internal PROTOTYPES =========================

// --- VOS01C ----------------------------------------------------------------

BOOL            sql01c_get_dbroot         ( PSZ         *ppszDBRoot );
BOOL            sql01c_get_serverdb       ( PSZ         *ppszServerDB );
BOOL            sql01c_get_dblang         ( PSZ         *ppszDBLang );
VOID            sql01c_build_pgm_path     ( PSZ         pszDBRoot ,
                                            PSZ         pszPgmPath );
VOID            sql01c_build_config_path  ( PSZ         pszDBRoot ,
                                            PSZ         pszConfigPath );
VOID            sql01c_get_config_path    ( PSZ         *ppszConfigPath );
LONG            sql01c_set_config_path    ( PSZ         pszConfigPath );
VOID            sql01c_get_wrk_path       ( PSZ         *ppszWrkPath );
LONG            sql01c_set_wrk_path       ( PSZ         pszWrkPath );
BOOL            sql01c_set_symbol_path    ( PSZ         pszDBRoot );


// --- VOS02C ----------------------------------------------------------------

ULONG           sql02_get_platform_id          ( VOID );
VOID            sql02_get_os_version           ( PULONG          pulMajorVersion,
                                                 PULONG          pulMinorVersion );
PSZ             sql02_get_RTE_version_string   ( VOID );
VOID            sql02_get_RTE_version          ( PRTE_VERSION_ID pRTEVersion );
BOOL            sql02_this_RTE_version_is_older( PRTE_VERSION_ID pRTEVersion );
BOOL            sql02_this_RTE_version_is_newer( PRTE_VERSION_ID pRTEVersion );
BOOL            sql02_RTE_versions_are_equal   ( PRTE_VERSION_ID pRTEVersion );
VOID            sql02_build_version_id_string  ( PRTE_VERSION_ID pRTEVersion,
                                                 C40C            szVersion );

// --- VOS02C ----------------------------------------------------------------

APIRET          sql03c_add_ADABAS_operators_group ( VOID );
APIRET          sql03c_get_domain_name            ( PSZ pszDomainName );

// --- VOS06C - ( Virtual file ) ---------------------------------------------

VOID            sql06c_finit            (  INT2                buf_pool_size,
                                           INT4*               poolptr,
                                           PBOOLEAN            pbFirstCall,
                                           PHOSTFILE_CTRL_REC  arcFileCtrlTab,
                                           PVOID*              ppBufPool,
                                           BOOLEAN*            ok );

LONG            sql06c_alloc_buffer_pool ( ULONG               ulNumOfBlocks,
                                           PPVOID              ppBufPool);

LONG            sql06c_reserve_buffer    ( PHOSTFILE_CTRL_REC  pHF,
                                           PVOID               pBufPool,
                                           VF_RESOURCE         Resource,
                                           INT2                BufCount,
                                           VF_BUFFERADDRESS    * Block,
                                           PCHAR               pcErrText );

LONG            sql06c_free_buffer       ( PHOSTFILE_CTRL_REC  pHF,
                                           PVOID               pBufPool,
                                           INT2                BufCount,
                                           PCHAR               pcErrText );

LONG            sql06c_search            ( PSZ                 pszHostFileName,
                                           PHOSTFILE_CTRL_REC  arcFileCtrlTab,
                                           INT4                * pHostFileNo,
                                           PHOSTFILE_CTRL_REC  *ppHF,
                                           PCHAR               pcErrText );

LONG            sql06c_tape_open         ( PSZ                 pszTapeName,
                                           PHOSTFILE_CTRL_REC  pHF,
                                           PCHAR               pcErrText,
                                           BOOL                fTapeRead );

LONG            sql06c_write_open        ( PSZ                 pszHostFileName,
                                           PHOSTFILE_CTRL_REC  pHF,
                                           PCHAR               pcErrText );

LONG            sql06c_con_open          ( PHOSTFILE_CTRL_REC  pHF,
                                           PCHAR               pcErrText );

LONG            sql06c_overwrite_open    ( PSZ                 pszHostFileName,
                                           PHOSTFILE_CTRL_REC  pHF,
                                           PCHAR               pcErrText );

LONG            sql06c_read_open         ( PSZ                 pszHostFileName,
                                           PHOSTFILE_CTRL_REC  pHF,
                                           PCHAR               pcErrText );

LONG            sql06c_append_open       ( PSZ                 pszHostFileName,
                                           PHOSTFILE_CTRL_REC  pHF,
                                           PCHAR               pcErrText );

LONG            sql06c_pipe_write_open   ( PSZ                 pszHostFileName,
                                           PHOSTFILE_CTRL_REC  pHF,
                                           PCHAR               pcErrText );

LONG            sql06c_pipe_read_open    ( PSZ                 pszHostFileName,
                                           PHOSTFILE_CTRL_REC  pHF,
                                           PCHAR               pcErrText );

LONG            sql06c_close             ( PHOSTFILE_CTRL_REC  pHF,
                                           BOOL                fErase,
                                           PCHAR               pcErrText);

LONG            sql06c_status            ( PHOSTFILE_CTRL_REC  pHF,
                                           PCHAR               pcErrText );

LONG            sql06c_read_asc_var      ( PHOSTFILE_CTRL_REC  pHF,
                                           VF_BUFFERADDRESS    block,
                                           INT4                * length,
                                           PCHAR               pcErrText );

LONG            sql06c_read_bin_var      ( PHOSTFILE_CTRL_REC  pHF,
                                           VF_BUFFERADDRESS    block,
                                           INT4                * length,
                                           PCHAR               pcErrText );

LONG            sql06c_read_bin_fix      ( PHOSTFILE_CTRL_REC  pHF,
                                           VF_BUFFERADDRESS    block,
                                           INT4                * length,
                                           PCHAR               pcErrText );

LONG            sql06c_write_asc_var     ( PHOSTFILE_CTRL_REC  pHF,
                                           VF_BUFFERADDRESS    block,
                                           INT4                length,
                                           PCHAR               pcErrText );

LONG            sql06c_write_bin_var     ( PHOSTFILE_CTRL_REC  pHF,
                                           VF_BUFFERADDRESS    block,
                                           INT4                length,
                                           PCHAR               pcErrText );

LONG            sql06c_write_bin_fix     ( PHOSTFILE_CTRL_REC  pHF,
                                           VF_BUFFERADDRESS    block,
                                           INT4                length,
                                           PCHAR               pcErrText );

LONG            sql06c_get_desc          ( PHOSTFILE_CTRL_REC  pHF,
                                           PCHAR               pcErrText );

LONG            sql06c_put_desc          ( PHOSTFILE_CTRL_REC  pHF,
                                           PCHAR               pcErrText );

LONG            sql06c_putbuffer         ( PHOSTFILE_CTRL_REC  pHF,
                                           PCHAR               pcErrText );

LONG            sql06c_getbuffer         ( PHOSTFILE_CTRL_REC  pHF,
                                           PCHAR               pcErrText );

LONG            sql06c_get_xk_buffer     ( PHOSTFILE_CTRL_REC  pHF,
                                           VF_BUFFERADDRESS    block,
                                           INT4                * length,
                                           PCHAR               pcErrText );

LONG            sql06c_put_xk_buffer     ( PHOSTFILE_CTRL_REC  pHF,
                                           VF_BUFFERADDRESS    block,
                                           INT4                length,
                                           PCHAR               pcErrText );

LONG            sql06c_posbuffer         ( PHOSTFILE_CTRL_REC  pHF,
                                           LONG                lDistance,
                                           ULONG               ulMoveType,
                                           PULONG              pNewPointer,
                                           PCHAR               pcErrText );

BOOLEAN         sql06c_valid_fileno      ( INT4                HostFileNo,
                                           PHOSTFILE_CTRL_REC  arcFileCtrlTab );

VOID            sql06c_init_file_ctrl    ( PHOSTFILE_CTRL_REC  pHF );

BOOLEAN         sql06c_blocked_file      ( VF_FILENAMEC        TempFilename,
                                           ULONG               FileFormat,
                                           INT4                RecordLength );

// --- VOS09C ----------------------------------------------------------------

BOOL            sql09c_init_handle_dir   ( PVOID               *ppHandles,
                                           ULONG               ulMaxHandles );
BOOL            sql09c_reserve_handle    ( PVOID               pHandles,
                                           PULONG              pulHandle );
BOOL            sql09c_get_handle_data   ( PVOID               pHandles,
                                           ULONG               ulHandle,
                                           PVOID               *ppData,
                                           PULONG              pulHType,
                                           PULONG              pulID );
BOOL            sql09c_put_handle_data   ( PVOID               pHandles,
                                           ULONG               ulHandle,
                                           PVOID               pData,
                                           ULONG               ulHType,
                                           ULONG               ulID );
BOOL            sql09c_find_next_handle  ( PVOID               pHandles,
                                           PULONG              pulHandle );
BOOL            sql09c_free_handle       ( PVOID               pHandles,
                                           ULONG               ulHandle );
BOOL            sql09c_find_handle_by_id ( PVOID               pHandles,
                                           ULONG               ulID,
                                           PULONG              pulHandle );
BOOL            sql09c_lock_handle       ( PVOID               pHandles,
                                           ULONG               ulHandle );
BOOL            sql09c_unlock_handle     ( PVOID               pHandles,
                                           ULONG               ulHandle );

// --- VOS11C - ( xparam handling ) ------------------------------------------

VOID            sql11c_OpenXParam       (   PSZ         pszDBRootPath,
                                            SQL_DBNAME  acServerDB,
                                            XP_PHFILE   plXParamFd,
                                            ERRORTEXT   acErrorText,
                                            tsp_int1    OpenMode,
                                            PBOOLEAN    pbOk                    );

VOID            sql11c_CloseXParam      (   XP_HFILE    lXParamFd,
                                            BOOLEAN     fFlush,
                                            ERRORTEXT   acErrorText,
                                            PBOOLEAN    pbOk                    );
VOID            sql11c_FsizeXParam      (   PSZ         pszDBRootPath,
                                            SQL_DBNAME  acServerDB,
                                            tsp_int4    *Fsize,
                                            ERRORTEXT   acErrorText,
                                            PBOOLEAN    pbOk );

XP_HFILE        sql11c_InitXparamStruc (    char     *XparamData,
                                            tsp_int4  XparamSize );

VOID            sql11c_FreeXparamStruc  (   XP_HFILE        lXParamFd );
VOID            sql11c_RenameXParam     (   XP_HFILE        lXParamFd,
                                            XP_KEY_TYPEC    acXParamOldKeyC,
                                            XP_KEY_TYPEC    acXParamNewKeyC,
                                            ERRORTEXT       acErrorText,
                                            XP_PRETURNCODE  pucXParamReturnCode);

VOID            sql11c_PutXParam        (   XP_HFILE        lXParamFd,
                                            XP_KEY_TYPE     acXParamKey,
                                            XP_PVALUE_REC   prcXParamValue,
                                            ERRORTEXT       acErrorText,
                                            XP_PRETURNCODE  pucXParamReturnCode );

VOID            sql11c_GetXParam        (   XP_HFILE        lXParamFd,
                                            XP_KEY_TYPE     acXParamKey,
                                            XP_PVALUE_REC   prcXParamValue,
                                            ERRORTEXT       acErrorText,
                                            XP_PRETURNCODE  pucXParamReturnCode );

VOID            sql11c_GetNextXParam    (   XP_HFILE        lXParamFd,
                                            XP_KEY_TYPE     acXParamKey,
                                            XP_KEY_TYPE     acXParamNextKey,
                                            XP_PVALUE_REC   prcXParamValue,
                                            ERRORTEXT       acErrorText,
                                            XP_PRETURNCODE  pucXParamReturnCode );

VOID            sql11c_SeqNextXParam    (   XP_HFILE        lXParamFd,
                                            XP_KEY_TYPE     acXParamKey,
                                            XP_PVALUE_REC   prcXParamValue,
                                            ERRORTEXT       acErrorText,
                                            XP_PRETURNCODE  pucXParamReturnCode );

VOID            sql11c_DeleteXParam     (   XP_HFILE        lXParamFd,
                                            XP_KEY_TYPE     acXParamKey,
                                            ERRORTEXT       acErrorText,
                                            XP_PRETURNCODE  pucXParamReturnCode );

VOID            sql11c_SeqBinReadXParam (   XP_HFILE        lXParamFd,
                                            char           *Buf ,
                                            ULONG           ulBytesToRead ,
                                            ULONG          *pulBytesRead,
                                            ERRORTEXT       acErrorText,
                                            XP_PRETURNCODE  pucXParamReturnCode );

VOID            sql11c_SeqBinWriteXParam (  XP_HFILE        lXParamFd,
                                            char           *Buf ,
                                            ULONG           ulBytesToWrite ,
                                            ULONG          *pulBytesWritten,
                                            ERRORTEXT       acErrorText,
                                            XP_PRETURNCODE  pucXParamReturnCode );

// --- VOS23C - ( TCPIP communication ) ---------------------------------------

ULONG           sql23c_connect       ( PCONNECT_PARAM_REC        pConnParam,
                                       PTCPIP_CONNECT_INFO_REC   pTCPIPConnInfo,
                                       ERRORTEXT                 pErrText );

ULONG           sql23c_request       ( PTCPIP_CONNECT_INFO_REC   pTCPIPConnInfo,
                                       ULONG                     ulCmdPacket,
                                       ULONG                     ulCmdDataLen,
                                       ERRORTEXT                 pErrText );

ULONG           sql23c_replyavailable ( PTCPIP_CONNECT_INFO_REC  pTCPIPConnInfo,
                                        ERRORTEXT                pErrText );

ULONG           sql23c_receive       ( PTCPIP_CONNECT_INFO_REC   pTCPIPConnInfo,
                                       struct comm_packet_record **ppResPacket,
                                       PULONG                    pulResDataLen,
                                       ERRORTEXT                 pErrText );

ULONG           sql23c_receive_ackn  ( PTCPIP_CONNECT_INFO_REC   pTCPIPConnInfo,
                                       ERRORTEXT                 pErrText );

ULONG           sql23c_cancel_dump   ( PTCPIP_CONNECT_INFO_REC   pTCPIPConnInfo,
                                       ULONG                     ulReqType,
                                       ERRORTEXT                 pErrText );

ULONG           sql23c_release       ( PTCPIP_CONNECT_INFO_REC   pTCPIPConnInfo,
                                       ERRORTEXT                 pErrText );

// --- VOS33C - ( Local communication ) --------------------------------------

ULONG           sql33c_info_request   ( PSZ                       pszServerDB,
                                        ULONG                     ulServiceType,
                                        ULONG                     ulPacketCnt,
                                        PULONG                    pulPacketSize,
                                        PULONG                    pulMaxDataLen,
                                        PULONG                    pulMinReplySize,
                                        ERRORTEXT                 pErrText );
ULONG           sql33c_connect        ( PCONNECT_PARAM_REC        pConnParam,
                                        PSHM_CONNECT_INFO_REC     pShmConnInfo,
                                        ERRORTEXT                 pErrText );
ULONG           sql33c_connect_xserver( PCONNECT_PARAM_REC        pConnParam,
                                        PSHM_CONNECT_INFO_REC     pShmConnInfo,
                                        ERRORTEXT                 pErrText );
ULONG           sql33c_request        ( PSHM_CONNECT_INFO_REC     pShmConnInfo,
                                        ULONG                     ulCmdPacket,
                                        ULONG                     ulCmdPacketLen,
                                        ERRORTEXT                 pErrText );
ULONG           sql33c_replyavailable ( PSHM_CONNECT_INFO_REC     pShmConnInfo,
                                        ERRORTEXT                 pErrText );
ULONG           sql33c_receive        ( PSHM_CONNECT_INFO_REC     pShmConnInfo,
                                        struct comm_packet_record **ppResPacket,
                                        PULONG                    pulResPacketLen,
                                        ERRORTEXT                 pErrText );
ULONG           sql33c_cancel_dump    ( PSHM_CONNECT_INFO_REC     pShmConnInfo,
                                        ULONG                     ulReqType,
                                        ERRORTEXT                 pErrText );
ULONG           sql33c_release        ( PSHM_CONNECT_INFO_REC     pShmConnInfo,
                                        ERRORTEXT                 pErrText );
#if defined (KERNEL)
 ULONG          sql33c_crash_cleanup  ( PSHM_CONNECT_INFO_REC     pShmConnInfo,
                                        ERRORTEXT                 pErrText );
 ULONG          sql33c_reply          ( PSHM_CONNECT_INFO_REC     pShmConnInfo,
                                        struct  task_ctrl_record  *pTaskCtrl,
                                        ERRORTEXT                 pErrText );
#endif

// --- VOS40C.C --------------------------------------------------------------

ULONG           sql40c_get_dll_version      ( PRTE_VERSION_ID pRTEVersion );

INT             sql40c_sock_init            ( VOID );

INT             sql40c_get_sock_version     ( UCHAR       *pcMajorSockVersion,
                                              UCHAR       *pcMinorSockVersion );

INT             sql40c_sock_cleanup         ( VOID );

INT             sql40c_getservbyname        ( PCHAR       pszService,
                                              PUSHORT     pusServicePort );
INT             sql40c_gethostbyname        ( PSZ         pszHostName,
                                              PUCHAR      pucAddr,
                                              PINT        pAddrLen );
INT             sql40c_gethostbyaddr        ( PSZ         pszHostName,
                                              PUCHAR      pucAddr,
                                              LONG        lAddrLen );
INT             sql40c_stream_socket        ( PINT        psd );
INT             sql40c_socket_close         ( INT         sd );
INT             sql40c_accept_conn_request  ( INT         sd,
                                              PINT        psdClient,
                                              PVOID       pSockAddr,
                                              PINT        pLen );
INT             sql40c_keep_alive           ( INT         sd );
INT             sql40c_linger               ( INT         sd,
                                              BOOL        fLinger,
                                              INT         iSeconds );
INT             sql40c_bind                 ( INT         sd,
                                              USHORT      usServicePort );
INT             sql40c_listen               ( INT         sd,
                                              INT         Count );
INT             sql40c_set_send_buffer_size ( INT         sd,
                                              PINT        pMaxSize,
                                              INT         MinSize );
INT             sql40c_set_recv_buffer_size ( INT         sd,
                                              PINT        pMaxSize,
                                              INT         MinSize );
INT             sql40c_connect              ( INT         sd,
                                              USHORT      usServicePort,
                                              PUCHAR      pucName,
                                              INT         NameLen );
INT             sql40c_send_packet          ( INT         sd,
                                              PCHAR       pPacket,
                                              INT         SendLen,
                                              PINT        pBytesSend );
INT             sql40c_recv_packet          ( INT         sd,
                                              PCHAR       pPacket,
                                              INT         ReceiveLen,
                                              PINT        pBytesReceived );
INT             sql40c_select               ( PINT        pSDCount,
                                              PVOID       pReadSDMask,
                                              PVOID       pWriteSDMask,
                                              PVOID       pExceptSDMask,
                                              USHORT      usTimeOut );
INT             sql40c_get_serviceport      ( INT         sd,
                                              PUSHORT     pusServicePort );

LONG            sql40c_set_tcpip_dll_path   ( PSZ         pszTCPIPDLLName );
ULONG           sql40c_get_tcpip_dll_path   ( PSZ         *ppszTCPIPDLLName );


// --- VOS41C.C --------------------------------------------------------------

LONG            sql41c_create_event_sem     ( PHEV       phevSysSem,
                                              PSZ        pszSemPath,
                                              PSZ        pszName,
                                              ULONG      flAttr,
                                              BOOL       fState,
                                              PSECURITY_ATTRIBUTES pSA );
LONG            sql41c_wait_event_sem       ( HEV        hevSysSem,
                                              ULONG      ulTimeout,
                                              PSZ        pszSemDesc );
LONG            sql41c_post_event_sem       ( HEV        hevSysSem,
                                              PSZ        pszSemDesc );
LONG            sql41c_close_event_sem      ( HEV        hevSysSem,
                                              PSZ        pszSemDesc );
LONG            sql41c_open_event_sem       ( PHEV       phevSysSem,
                                              PSZ        pszName,
                                              PSZ        pszSemPath,
                                              ULONG      ulNoMsgRc );
LONG            sql41c_create_shrd_mem      ( PPVOID     ppMemBase,
                                              ULONG      ulMemSize,
                                              PSZ        pszShrdMemPath,
                                              PSZ        pszName,
                                              PSECURITY_ATTRIBUTES pSA,
                                              HANDLE     *phShrdMem );
LONG            sql41c_get_named_shrd_mem   ( PPVOID     ppMemBase,
                                              PSZ        pszShrdMemPath,
                                              PSZ        pszName,
                                              HANDLE     *phShrdMem);
LONG            sql41c_give_shrd_mem        ( PVOID      pMemBase,
                                              PID        pidDest,
                                              HANDLE     hShrdMem,
                                              HANDLE     *phDestShrdMem );
LONG            sql41c_free_shrd_mem        ( PVOID      pMemBase,
                                              HANDLE     hShrdMem );
LONG            sql41c_create_queue_mailslot( PHANDLE    phHandle,
                                              PSZ        pszPath,
                                              PSZ        pszName,
                                              ULONG      ulReqLen,
                                              PSECURITY_ATTRIBUTES pSA);
LONG            sql41c_open_queue_mailslot  ( PPID       ppidOwner,
                                              PHANDLE    phHandle,
                                              PSZ        pszPath,
                                              PSZ        pszName );
LONG            sql41c_write_queue_mailslot ( HANDLE     hHandle,
                                              PVOID      pRequest,
                                              ULONG      ulReqLen,
                                              ULONG      ulDataLen,
                                              PVOID      pData );
LONG            sql41c_read_queue_mailslot  ( HANDLE     hHandle,
                                              PVOID      pRequest,
                                              ULONG      ulReqLen,
                                              PULONG     pulDataLen,
                                              PPVOID     ppData );
LONG            sql41c_close_queue_mailslot ( HANDLE     hHandle );

VOID            sql41c_build_unique_obj_name( PIPC_BASE_OBJ_NAME pszClientObjName );


// --- VOS42C.C --------------------------------------------------------------

ULONG           sql42c_send_conpkt( PCONPKT_PARAM_REC         pConPktParamRec,
                                    ERRORTEXT                 pErrText );

ULONG           sql42c_recv_conpkt( PCONPKT_PARAM_REC         pConPktParamRec,
                                    ERRORTEXT                 pErrText );

ULONG           sql42c_pipe_send_conpkt( PCONPKT_PARAM_REC         pConPktParamRec,
                                         HANDLE                    hWritePipe,
                                         ERRORTEXT                 pErrText );

ULONG           sql42c_pipe_recv_conpkt( PCONPKT_PARAM_REC         pConPktParamRec,
                                         HANDLE                    hReadPipe,
                                         ERRORTEXT                 pErrText );

ULONG           sql42c_send_header( INT                       sd,
                                    ULONG                     ulSenderRef,
                                    ULONG                     ulReceiverRef,
                                    ULONG                     ulMessClass,
                                    ULONG                     ulCommState,
                                    ERRORTEXT                 pErrText );

ULONG           sql42c_recv_header( INT                       sd,
                                    ULONG                     ulSwapType,
                                    PULONG                    pulSenderRef,
                                    PULONG                    pulReceiverRef,
                                    PULONG                    pulMessClass,
                                    ERRORTEXT                 pErrText );


ULONG           sql42c_send_packet( INT                       sd,
                                    ULONG                     ulMaxSegmentSize,
                                    struct comm_packet_record *pCommPacket,
                                    ULONG                     ulDataLen,
                                    ULONG                     ulClientRef,
                                    ULONG                     ulServerRef,
                                    ULONG                     ulMessClass,
                                    ULONG                     ulCommState,
                                    ERRORTEXT                 pErrText );

ULONG           sql42c_recv_packet( INT                       sd,
                                    ULONG                     ulSwapType,
                                    struct comm_packet_record *pCommPacket,
                                    ULONG                     ulMaxDataLen,
                                    PULONG                    pulDataLen,
                                    PULONG                    pulSenderRef,
                                    PULONG                    pulReceiverRef,
                                    PULONG                    pulMessClass,
                                    ERRORTEXT                 pErrText );

ULONG           sql42c_send_relpkt( INT                       sd,
                                    ULONG                     ulSenderRef,
                                    ULONG                     ulReceiverRef,
                                    ULONG                     ulMessClass,
                                    ULONG                     ulCommState );

// --- VOS43C.C --------------------------------------------------------------

BOOL             sql43c_tcpip_init              ( PRTE_VERSION_ID pTCPIPRTEVersion );
VOID             sql43c_tcpip_cleanup           ( VOID );
LONG             sql43c_get_official_node_name  ( PCHAR           pszHostName,
                                                  PCHAR           psNodeName,
                                                  INT             Size );
LONG             sql43c_get_my_host_name        ( PCHAR           pszHostName,
                                                  INT             Size );
LONG             sql43c_get_service_by_name     ( PCHAR           pszService,
                                                  PUSHORT         pusServicePort );
LONG             sql43c_get_host_by_name        ( PCHAR           pszHostName,
                                                  PUCHAR          pucAddr,
                                                  INT             Size );
LONG             sql43c_get_host_by_address     ( PUCHAR          pucAddr,
                                                  PCHAR           pszHostName,
                                                  INT             Size );

// --- VOS44C.C --------------------------------------------------------------

LONG             sql44c_get_dev_type_by_filename ( PSZ    pszName );
BOOL             sql44c_subst_log_parts          ( PSZ    pszOutName,
                                                   PSZ    pszInName );
LONG             sql44c_get_file_info            ( PCHAR  pszFName,
                                                   PLONG  plAtt,
                                                   ULONG  *pFSizeLow,
                                                   ULONG  *pFSizeHigh);

// --- VOS46C.C --------------------------------------------------------------

VOID             sql46c_build_error_string       ( PCHAR  pcPascalErrText,
                                                   PSZ    pszErrText,
                                                   APIRET rc );

// --- VOS47C.C --------------------------------------------------------------

VOID             sql47c_ptoc ( PSZ    pszTarget,
                               PCHAR  psSource,
                               SHORT  cbSource );
VOID             sql47c_ctop ( PCHAR  psTarget,
                               PSZ    pszSource,
                               SHORT  cbTarget );

// --- VOS49C.C --------------------------------------------------------------
#if defined (_WIN32)
 LONG            sql49c_user_privilege_check     ( BOOL                  *pfIsOk );

 LONG            sql49c_get_token_information    ( PTOKEN_USER           *ppTU,
                                                   PTOKEN_GROUPS         *ppTG,
                                                   PTOKEN_DEFAULT_DACL   *ppTDacl );
 LONG            sql49c_set_sync_access          ( VOID );
 LONG            sql49c_get_kernel_obj_SD        ( PSECURITY_DESCRIPTOR  *ppSD,
                                                   HANDLE                hObject );
 LONG            sql49c_set_kernel_obj_sec       ( PSECURITY_DESCRIPTOR  pSD,
                                                   HANDLE                hObject );
 LONG            sql49c_alloc_and_init_SD        ( PACCESS_RIGHTS_REC    pAccess,
                                                   PSECURITY_DESCRIPTOR  *ppSD );
 LONG            sql49c_alloc_and_init_service_SD( PSECURITY_DESCRIPTOR  *ppSD,
                                                   SC_HANDLE             schService );
 LONG            sql49c_get_user_info            ( PSZ                   *ppszLogonName,
                                                   PSZ                   *ppszRefDomain );
 LONG            sql49c_user_is_admin            ( BOOL                  *pfIsAdmin );
 LONG            sql49c_get_own_textual_SID      ( PSZ                   *ppszSIDStringName );
 LONG            sql49c_set_file_security        ( PSZ                   pszFileName,
                                                   PSECURITY_DESCRIPTOR  pSD );
 LONG            sql49c_add_ADABAS_admin_group   ( VOID );
#endif

// --- VOS50C.C --------------------------------------------------------------
#if defined (_WIN32)
 LONG sql50_reg_del_service_value  ( PSZ                    pszNodeName,
                                     PSZ                    pszSubKey,
                                     PSZ                    pszValueName );
 LONG sql50_reg_del_service_key    ( PSZ                    pszNodeName,
                                     PSZ                    pszSubKey );
 LONG sql50_reg_get_service_values ( PSZ                    pszNodeName,
                                     PSZ                    pszSubKey,
                                     ULONG                  ulNumOfEntries,
                                     PREG_ENTRY_REC         pEntyArray );
 LONG sql50_reg_put_service_values ( PSZ                    pszNodeName,
                                     PSZ                    pszSubKey,
                                     ULONG                  ulNumOfEntries,
                                     PREG_ENTRY_REC         pEntyArray );
 LONG  sql50_reg_applic_key_exists ( PSZ                    pszNodeName,
                                     HKEY                   hKey,
                                     PSZ                    pszSubKey );
 LONG sql50_reg_del_applic_value   ( PSZ                    pszNodeName,
                                     HKEY                   hKey,
                                     PSZ                    pszSubKey,
                                     PSZ                    pszValueName );
 LONG sql50_reg_del_applic_key     ( PSZ                    pszNodeName,
                                     HKEY                   hKey,
                                     PSZ                    pszSubKey );
 LONG sql50_reg_get_applic_values  ( PSZ                    pszNodeName,
                                     HKEY                   hKey,
                                     PSZ                    pszSubKey,
                                     ULONG                  ulNumOfEntries,
                                     PREG_ENTRY_REC         pEntyArray );
 LONG sql50_reg_put_applic_values  ( PSZ                    pszNodeName,
                                     HKEY                   hKey,
                                     PSZ                    pszSubKey,
                                     PSZ                    pszPrivateSubKey,
                                     ULONG                  ulNumOfEntries,
                                     PREG_ENTRY_REC         pEntyArray );
 LONG sql50_reg_key_exists         ( PSZ                    pszNodeName,
                                     HKEY                   hKey,
                                     PSZ                    pszSubKey );
 LONG sql50_reg_del_value          ( PSZ                    pszNodeName,
                                     HKEY                   hKey,
                                     PSZ                    pszSubKey,
                                     PSZ                    pszValueName );

 LONG sql50_reg_del_key            ( PSZ                    pszNodeName,
                                     HKEY                   hKey,
                                     PSZ                    pszSubKey );
 LONG sql50_reg_get_values         ( PSZ                    pszNodeName,
                                     HKEY                   hKey,
                                     PSZ                    pszSubKey,
                                     ULONG                  ulEntries,
                                     PREG_ENTRY_REC         pEntyArray );
 LONG sql50_reg_put_values         ( PSZ                    pszNodeName,
                                     HKEY                   hKey,
                                     PSZ                    pszSubKey,
                                     ULONG                  ulEntries,
                                     PREG_ENTRY_REC         pEntyArray,
                                     PSECURITY_ATTRIBUTES   pSA );
 LONG sql50_create_reg_key         ( PSZ                    pszNodeName,
                                     HKEY                   hKey,
                                     PSZ                    pszSubKey,
                                     PSECURITY_ATTRIBUTES   pSA );
#endif

// --- VOS57C.C --------------------------------------------------------------

APIRET  sql57c_malloc                        ( ULONG   ulLine,
                                               PSZ     pszModuleName,
                                               PPVOID  ppvMemBlock,
                                               ULONG   ulSize      );
APIRET  sql57c_free                          ( ULONG   ulLine,
                                               PSZ     pszModuleName,
                                               PVOID   pvMemBlock  );
APIRET  sql57c_realloc                       ( ULONG   ulLine,
                                               PSZ     pszModuleName,
                                               PPVOID  ppvMemBlock,
                                               ULONG   ulSize      );
VOID    sql57c_heap_destroy                  ( VOID );



// --- VOS60C.C --------------------------------------------------------------

LONG          sql60_open_event_log         ( PSZ          pszEventLogTitle,
                                             PSZ          pszEventLogSource );
VOID          sql60_set_event_log_title    ( PSZ          pszEventLogTitle  );
VOID          sql60_get_diag_filename      ( PSZ          *ppszPhysDiagFileName );
VOID          sql60_enable_GUI_console     ( PMSGFUNCTYPE pMessageFunc );
VOID          sql60_enable_default_device  ( VOID );
VOID          sql60_enable_console         ( VOID );
VOID          sql60_enable_message_box     ( VOID );
VOID          sql60_enable_message_output  ( VOID );
VOID          sql60_close_event_log        ( VOID );
VOID          sql60_close_diag_file        ( VOID );
VOID          sql60_close_error_diag_file  ( VOID );
VOID          sql60_disable_GUI_console    ( VOID );
VOID          sql60_disable_message_box    ( VOID );
VOID          sql60_disable_console        ( VOID );
VOID          sql60_disable_default_device ( VOID );
VOID          sql60_disable_message_output ( VOID );

VOID _System  sql60_int_err_msg_prio7      ( PSZ       pszFormatStr,
                                             ... );
VOID          sql60_strt_msg_wrt_cycle     ( VOID );
VOID _System  sql60_msg_prio_x             ( ULONG     ulPrio,
                                             LONG      lMsgID,
                                             PSZ       pszLabel,
                                             PSZ       pszMsg,
                                             ULONG     ulEventType );
VOID _System  sql60_msg_all                ( LONG      lMsgID,
                                             ULONG     ulEventType,
                                             PSZ       pszFormatStr,
                                             ... );
VOID _System  sql60_msg_con_diag           ( LONG      lMsgID,
                                             ULONG     ulEventType,
                                             PSZ       pszFormatStr,
                                             ... );
VOID _System  sql60_msg_diag               ( LONG      lMsgID,
                                             ULONG     ulEventType,
                                             PSZ       pszFormatStr,
                                             ... );
VOID _System  sql60_msg_box                ( LONG      lMsgID,
                                             ULONG     ulEventType,
                                             PSZ       pszFormatStr,
                                             ... );
VOID _System  sql60_msg_con                ( LONG      lMsgID,
                                             ULONG     ulEventType,
                                             PSZ       pszFormatStr,
                                             ... );
VOID _System  sql60_msg_event_log          ( LONG      lMsgID,
                                             ULONG     ulEventType,
                                             PSZ       pszFormatStr,
                                             ... );
VOID _System sql60_msg_con_event_log       ( LONG      lMsgID,
                                             ULONG     ulEventType,
                                             PSZ       pszLabel,
                                             PSZ       pszFormatStr,
                                             ...);

VOID          sql60_reset_crit_section     ( VOID );

LONG          sql60_open_diag_file         ( PSZ                  pszDiagFileName,
                                             ULONG                ulDiagSize,
                                             PSECURITY_ATTRIBUTES pSA );
LONG          sql60_open_error_diag_file   ( PSZ                  pszDiagFileName,
                                             PSECURITY_ATTRIBUTES pSA );

LONG          sql60_open_util_diag_file    ( PSZ                  pszUtilDiagFileName,
                                             ULONG                ulDiagSize,
                                             PSECURITY_ATTRIBUTES pSA );
LONG          sql60_write_to_util_diag     ( PSZ                  pszMsg,
                                             ULONG                ulMsgLen );
VOID          sql60_close_util_diag_file   ( VOID );


// --- VOS76C -----------------------------------------------------------------

BOOL _Optlink sql76_interlock              ( LONG                 *plLockAddr );
VOID _Optlink sql76_clearlock              ( LONG                 *plLockAddr );

#if defined(_WIN32) && defined(_ALPHA_)
 PVOID        sql76_mem_sync               ( PVOID                pArg );
#endif

// --- VOS80C - ( getopt ) ----------------------------------------------------

INT             sql80_GetOpt               ( int       nArgc,
                                             char**    apszArgv,
                                             char*     pszOptString  );

// --- VOS90C ----------------------------------------------------------------

APIRET          sql90_start_db_gw_service    ( PSZ     pszNodeName,
                                               PSZ     pszServerDB,
                                               ULONG   ulOptions,
                                               ULONG   ulKernelType );
APIRET          sql90_stop_db_gw_service     ( PSZ     pszNodeName,
                                               PSZ     pszServerDB );
APIRET          sql90_start_serverdb         ( PSZ     pszServerDB,
                                               PSZ     pszDBRoot,
                                               ULONG   ulOptions,
                                               ULONG   ulKernelType );
APIRET          sql90_stop_serverdb          ( PSZ     pszServerDB,
                                               BOOL    fDump );


// --- VOS94C ----------------------------------------------------------------

APIRET          sql94_service_entry          ( ULONG           ulRequest,
                                               ULONG           ulKernelType,
                                               BOOL            fAutoStart,
                                               PSZ             pszNodeName,
                                               PSZ             pszDBRoot,
                                               PSZ             pszServerDB,
                                               struct tsp9_rte_xerror *xerror);

// --- VOS96C ----------------------------------------------------------------

APIRET          sql96_start_service        ( PSZ       pszNodeName );
APIRET          sql96_stop_service         ( PSZ       pszNodeName );
APIRET          sql96_start_server         ( PSZ       pszCmdLine,
                                             BOOL      fSuppressActiveMsg );
APIRET          sql96_stop_server          ( VOID );
INT             sql96_install_service      ( PSZ       pszNodeName,
                                             PSZ       pszDBRoot );
INT             sql96_update_service       ( PSZ       pszNodeName,
                                             PSZ       pszDBRoot );
INT             sql96_remove_service       ( PSZ       pszNodeName );

// --- VOS96CC ----------------------------------------------------------------

VOID            sql96c_abort ( VOID );

// --- VOS96TC ----------------------------------------------------------------

VOID _System    sql96t_TCPIP_coordinator   ( VOID );

// --- VOS96TRC ---------------------------------------------------------------

VOID _System    sql96tr_requestor   ( VOID );

// --- VOS97C ----------------------------------------------------------------

APIRET           sql97_update              ( PSZ       pszNodeName );

APIRET           sql97_first_db_gw_state   ( BOOL      fGateways,
                                             PSZ       pszServerDB,
                                             PBOOL     pfActive );

APIRET           sql97_next_db_gw_state    ( PSZ       pszServerDB,
                                             PBOOL     pfActive );

APIRET           sql97_xserver_state       ( PSZ       pszNodeName,
                                             PBOOL     pfActive );

// --- VOS97CC ---------------------------------------------------------------

BOOL             sql97cc_findControlServer ( PSZ    pszExecutable,   // OUT
                                             PSZ    pszServerDB,     // IN
                                             PSZ    pszServerPgm,    // IN
                                             PSZ    pszDBRoot);      // IN/OUT
#if defined (USER)
// ===================== USER PROTOTYPES ======================================

// --- VWS07PC - ( Windows Terminal Initialization ) --------------------------

VOID           win07p_init        ( C64                      acComponent,
                                    PBOOLEAN                 pbCancelAddress );

VOID           win07p_finish      ( BOOLEAN                  bTerminate     );

VOID           win07p_abort       ( VOID );


// --- VOS02UC - ( exit handling ) --------------------------------------------

APIRET         sql02u_add_exit_list  ( PFNEXITLIST pExitFunc );
APIRET         sql02u_next_exit_func ( VOID );
VOID           sql02u_run_exit_func  ( VOID );


// --- VOS03UC - ( Communication ) --------------------------------------------

VOID           sql03u_init        ( VOID );

VOID           sql03u_finish      ( VOID );


// --- VOS04UC - ( Virtual Terminal ) -----------------------------------------

VOID           sql04u_vt_crash_cleanup ( VOID );

// --- VOS13UC - ( Xuser ) ----------------------------------------------------

LONG   sql13u_getuser                  ( tsp4_xuser_record  *prcUserParams,
                                         ERRORTEXT           acErrorText );

APIRET sql13u_get_options_char_set_map ( PBOOL               fEnabled,
                                         PSZ                 pszCharSetName,
                                         LONG                lMxCharSetName );

APIRET sql13u_get_options_sqlopt       ( PBOOL               pfEnabled,
                                         PSZ                 pszSQLOpt,
                                         LONG                lMxSQLOpt );


// --- VOS17UC ----------------------------------------------------------------

VOID            sql17u_split_dbname( SQL_DBNAMEC             acServerDB,
                                     SQL_NODEIDC             acServerNode   );
#endif
//
// ================================= ENDE =====================================
//
.CM *-END-* code ----------------------------------------
.SP 2
***********************************************************
