/* C K O S Y N -- Kermit synchronization functions for OS/2 and NT systems */ /* Author: Jeffrey Altman (jaltman@secure-endpoints.com), Secure Endpoints Inc., New York City. Copyright (C) 1996,2004 Trustees of Columbia University in the City of New York. */ /* * =============================#includes===================================== */ #include "ckcdeb.h" /* Typedefs, debug formats, etc */ #include "ckcker.h" /* Kermit definitions */ #include "ckuusr.h" /* needed for Priority definitions */ #include #ifdef NT #include #include #include "cknalm.h" #include "ckntap.h" #include "ckocon.h" HANDLE hmtxKeyStroke[VNUM] = {(HANDLE) 0,(HANDLE) 0,(HANDLE) 0} ; HANDLE hmtxLocalEcho = (HANDLE) 0 ; HANDLE hmtxTCPIP = (HANDLE) 0 ; HANDLE hmtxComm = (HANDLE) 0; #ifdef NETCMD HANDLE hmtxNetCmd = (HANDLE) 0 ; #endif /* NETCMD */ HANDLE hmtxKeyboard = (HANDLE) 0 ; HANDLE hmtxAlarm = (HANDLE) 0 ; HANDLE hmtxScreen = (HANDLE) 0 ; HANDLE hmtxVscrn[VNUM] = { (HANDLE) 0,(HANDLE) 0, (HANDLE) 0} ; HANDLE hmtxVscrnDirty[VNUM] = { (HANDLE) 0, (HANDLE) 0, (HANDLE) 0 } ; HANDLE hmtxConnectMode = (HANDLE) 0 ; HANDLE hmtxDebug = (HANDLE) 0; HANDLE hmtxTelnet = (HANDLE) 0; HANDLE hmtxSerial = (HANDLE) 0 ; HANDLE hmtxThreadMgmt = (HANDLE) 0 ; #ifdef CK_SSL HANDLE hmtxSSL = (HANDLE) 0; #endif /* CK_SSL */ HANDLE hevEventAvail[VNUM] = {(HANDLE) 0,(HANDLE) 0,(HANDLE) 0} ; HANDLE hevLocalEchoAvail = (HANDLE) 0 ; #ifdef NETCMD HANDLE hevNetCmdAvail = (HANDLE) 0 ; #endif HANDLE hevAlarm = (HANDLE) 0 ; HANDLE hevTerminalMode = (HANDLE) 0 ; HANDLE hevCommandMode = (HANDLE) 0 ; HANDLE hevRdComWrtScrThread = (HANDLE) 0 ; HANDLE hevConKbdHandlerThread = (HANDLE) 0 ; HANDLE hevTermScrnUpdThread = (HANDLE) 0 ; HANDLE hevRdComWrtScrThreadDown = (HANDLE) 0 ; HANDLE hevConKbdHandlerThreadDown = (HANDLE) 0 ; HANDLE hevTermScrnUpdThreadDown = (HANDLE) 0 ; HANDLE hevKeyMapInit = (HANDLE) 0 ; HANDLE hevKbdThread = (HANDLE) 0 ; HANDLE hevCtrlC[4] = {(HANDLE) 0,(HANDLE) 0,(HANDLE) 0,(HANDLE) 0} ; HANDLE hevAlarmSig[4] = {(HANDLE) 0,(HANDLE) 0,(HANDLE) 0,(HANDLE) 0} ; UINT htimAlarm = (UINT) 0 ; UINT htimVscrn[VNUM] = {(UINT) 0, (UINT) 0, (UINT) 0} ; HANDLE hevVscrnTimer[VNUM] = { (HANDLE) 0, (HANDLE) 0,(HANDLE) 0 } ; HANDLE hevVscrnDirty[VNUM] = { (HANDLE) 0, (HANDLE) 0,(HANDLE) 0 } ; HANDLE hevVscrnUpdate[VNUM][2] = {{(HANDLE) NULL, (HANDLE) NULL}, {(HANDLE) NULL, (HANDLE) NULL}, {(HANDLE) NULL, (HANDLE) NULL}}; HANDLE hmuxCtrlC[4][2] = { { (HANDLE) NULL, (HANDLE) NULL }, { (HANDLE) NULL, (HANDLE) NULL }, { (HANDLE) NULL, (HANDLE) NULL }, { (HANDLE) NULL, (HANDLE) NULL } } ; HANDLE hmuxAlarmSig[4][2] = { { (HANDLE) NULL, (HANDLE) NULL }, { (HANDLE) NULL, (HANDLE) NULL }, { (HANDLE) NULL, (HANDLE) NULL }, { (HANDLE) NULL, (HANDLE) NULL } } ; HANDLE hmuxCtrlCAlarmSig[3] = { (HANDLE) NULL, (HANDLE) NULL, (HANDLE) NULL } ; #ifdef CK_TAPI HANDLE hevTAPIConnect = (HANDLE) 0 ; HANDLE hevTAPIAnswer = (HANDLE) 0 ; HANDLE hevTAPIInit = (HANDLE) 0 ; #endif /* CK_TAPI */ HANDLE hevRichEditInit = (HANDLE) 0; HANDLE hevRichEditClose = (HANDLE) 0; HANDLE hmtxRichEdit = (HANDLE) 0 ; #else /* NT */ #ifdef OS2MOUSE #define INCL_MOU #endif /* OS2MOUSE */ #define INCL_WIN #define INCL_VIO #define INCL_ERRORS #define INCL_DOSPROCESS #define INCL_DOSSEMAPHORES #define INCL_DOSDEVIOCTL #define INCL_WINCLIPBOARD #define INCL_DOSDATETIME #include #undef COMMENT /* COMMENT is defined in os2.h */ #include "ckocon.h" HMTX hmtxKeyStroke[VNUM] = {(HMTX) 0,(HMTX) 0,(HMTX) 0} ; #ifdef NETCMD HMTX hmtxNetCmd = (HMTX) 0 ; #endif HMTX hmtxLocalEcho = (HMTX) 0 ; HMTX hmtxTCPIP = (HMTX) 0 ; HMTX hmtxComm = (HMTX) 0 ; HMTX hmtxKeyboard = (HMTX) 0 ; HMTX hmtxAlarm = (HMTX) 0 ; HMTX hmtxScreen = (HMTX) 0 ; HMTX hmtxVscrn[VNUM] = { (HMTX) 0, (HMTX) 0, (HMTX) 0} ; HMTX hmtxVscrnDirty[VNUM] = { (HMTX) 0, (HMTX) 0, (HMTX) 0} ; HMTX hmtxConnectMode = (HMTX) 0 ; HMTX hmtxDebug = (HMTX) 0 ; HMTX hmtxTelnet = (HMTX) 0 ; HMTX hmtxThreadMgmt = (HMTX) 0 ; #ifdef CK_SSL HMTX hmtxSSL = (HMTX) 0; #endif /* CK_SSL */ HEV hevEventAvail[VNUM] = {(HEV) 0,(HEV) 0,(HEV) 0} ; HEV hevLocalEchoAvail = (HEV) 0 ; #ifdef NETCMD HEV hevNetCmdAvail = (HEV) 0 ; #endif HEV hevAlarm = (HEV) 0 ; HEV hevTerminalMode = (HEV) 0 ; HEV hevCommandMode = (HEV) 0 ; HEV hevRdComWrtScrThread = (HEV) 0 ; HEV hevConKbdHandlerThread = (HEV) 0 ; HEV hevTermScrnUpdThread = (HEV) 0 ; HEV hevRdComWrtScrThreadDown = (HEV) 0 ; HEV hevConKbdHandlerThreadDown = (HEV) 0 ; HEV hevTermScrnUpdThreadDown = (HEV) 0 ; HEV hevKeyMapInit = (HEV) 0 ; HEV hevKbdThread = (HEV) 0 ; HEV hevVscrnTimer[VNUM] = { (HEV) 0, (HEV) 0, (HEV) 0 } ; HEV hevVscrnDirty[VNUM] = { (HEV) 0, (HEV) 0, (HEV) 0 } ; HEV hevCtrlC[4] = { (HEV) 0,(HEV) 0,(HEV) 0,(HEV) 0 } ; HEV hevAlarmSig[4] = { (HEV) 0,(HEV) 0,(HEV) 0,(HEV) 0 } ; HTIMER htimAlarm = (HTIMER) 0 ; HTIMER htimVscrn[VNUM] = {(HTIMER) 0,(HTIMER) 0,(HTIMER) 0} ; HMUX hmuxVscrnUpdate[VNUM] = {(HMUX) 0,(HMUX) 0,(HMUX) 0} ; HMUX hmuxCtrlC[4] = { (HMUX) 0,(HMUX) 0,(HMUX) 0,(HMUX) 0 } ; HMUX hmuxAlarmSig[4] = { (HMUX) 0,(HMUX) 0,(HMUX) 0,(HMUX) 0 } ; HMUX hmuxCtrlCAlarmSig = (HMUX) 0 ; #endif /* NT */ int CtrlCCount = -1 ; #define MAXCTRLC 3 int AlarmSigCount = -1 ; #define MAXALARMSIG 3 /* Semaphore functions */ APIRET CreateKeyStrokeMutex( BOOL owned ) { int j ; for ( j=0; j