diff --git a/channels.c b/channels.c index e6fe9fc..b30e92a 100644 --- a/channels.c +++ b/channels.c @@ -1685,6 +1685,10 @@ channel_handle_rfd(Channel *c, fd_set *readset, fd_set *writeset) if (c->rfd != -1 && (force || FD_ISSET(c->rfd, readset))) { errno = 0; len = read(c->rfd, buf, sizeof(buf)); + #ifdef WIN32_FIXME + if (len == 0) + return 1; // in Win32 console read, there may be no data, but is ok + #endif if (len < 0 && (errno == EINTR || ((errno == EAGAIN || errno == EWOULDBLOCK) && !force))) return 1; @@ -2395,9 +2399,7 @@ channel_output_poll(void) } } } -#ifdef WIN32_FIXME -int lftocrlf = 0; -#endif + /* -- protocol input */ /* ARGSUSED */ diff --git a/clientloop.c b/clientloop.c index ebc89ac..6b9c60d 100644 --- a/clientloop.c +++ b/clientloop.c @@ -1348,14 +1348,14 @@ process_escapes(Channel *c, Buffer *bin, Buffer *bout, Buffer *berr, * and append it to the buffer. */ last_was_cr = (ch == '\r' || ch == '\n'); - #ifdef WIN32_FIXME - extern int lftocrlf ; // defined in channels.c file's channel_input_data() function for now - if ( (lftocrlf == 1) && ( ch == '\n') ) { + //#ifdef WIN32_FIXME + //extern int lftocrlf ; // defined in channels.c file's channel_input_data() function for now + //if ( (lftocrlf == 1) && ( ch == '\n') ) { // add a \r before \n if sshd server sent us ESC[20h during initial tty mode setting - buffer_put_char(bin, '\r'); - bytes++; - } - #endif + //buffer_put_char(bin, '\r'); + //bytes++; + //} + //#endif buffer_put_char(bin, ch); bytes++; } diff --git a/contrib/win32/win32compat/Makefile.in b/contrib/win32/win32compat/Makefile.in index 4eb0b48..78de177 100644 --- a/contrib/win32/win32compat/Makefile.in +++ b/contrib/win32/win32compat/Makefile.in @@ -19,7 +19,8 @@ LDFLAGS=-L. @LDFLAGS@ -L/lib/win32api WIN32COMPATFILES = daemon.o gettimeofday.o homedirhelp.o pwd.o sfds.o \ socket.o startupneeds.o strcasecmp.o syslog.o lsalogon.o lsastring.o \ - stringhelp.o deskright.o win32auth.o kerberos.o cng_cipher.o ansiprsr.o console.o tnnet.o conio.o + stringhelp.o deskright.o win32auth.o kerberos.o cng_cipher.o ansiprsr.o \ + console.o tnnet.o conio.o tncon.o WIN32COMPATLIB=@LIBWIN32COMPAT@ diff --git a/contrib/win32/win32compat/ansiprsr.c b/contrib/win32/win32compat/ansiprsr.c index 9522cb6..4abf200 100644 --- a/contrib/win32/win32compat/ansiprsr.c +++ b/contrib/win32/win32compat/ansiprsr.c @@ -51,7 +51,7 @@ // items used from other modules int NetWriteString(char* pszString, size_t cbString); TelParams Parameters; -extern int lftocrlf; +int lftocrlf = 0; extern int ScreenX; extern int ScreenY; diff --git a/contrib/win32/win32compat/ansiprsr.h b/contrib/win32/win32compat/ansiprsr.h index ebc49da..8ce75aa 100644 --- a/contrib/win32/win32compat/ansiprsr.h +++ b/contrib/win32/win32compat/ansiprsr.h @@ -55,11 +55,28 @@ unsigned char * ParseVT52(unsigned char * pszBuffer, unsigned char * pszBufferEn typedef struct _TelParams { + int fLogging; + FILE *fplogfile; + + char *pInputFile; + + char * szDebugInputFile; + BOOL fDebugWait; + int timeOut; int fLocalEcho; int fTreatLFasCRLF; int fSendCROnly; int nReceiveCRLF; + //_crlftype nReceiveCRLF; + char sleepChar; + char menuChar; + + SOCKET Socket; + BOOL bVT100Mode; + + char *pAltKey; + } TelParams; #endif \ No newline at end of file diff --git a/contrib/win32/win32compat/socket.c b/contrib/win32/win32compat/socket.c index 27ca505..28fb8eb 100644 --- a/contrib/win32/win32compat/socket.c +++ b/contrib/win32/win32compat/socket.c @@ -54,6 +54,7 @@ extern void debug3(const char *fmt,...); extern void error(const char *fmt,...); extern void fatal(const char *fmt,...); +int glob_itissshclient = 0; // ssh client turns it to 1 static int winsock_initialized = 0; extern int logfd; @@ -1545,7 +1546,26 @@ int socketpair(int socks[2]) return SOCKET_ERROR; } +int DataAvailable ( HANDLE h ) +{ + INPUT_RECORD irec = {0}; + DWORD events_read = 0; + + int ret = PeekConsoleInput (h, &irec, 1, &events_read); + + if (!ret) + { + return 0; + } + + if (events_read) // && irec.EventType == KEY_EVENT) + { + return events_read ; + } + + return 0; +} int peekConsoleRead(int sfd) { DWORD sleep_time = 0; @@ -2391,8 +2411,9 @@ int WSHELPread(int sfd, char *dst, unsigned int max) SOCKET sock; int ret = -1; + int sfd_type = get_sfd_type(sfd); - switch(get_sfd_type(sfd)) + switch (sfd_type) { case SFD_TYPE_SOCKET: { @@ -2450,8 +2471,9 @@ int WSHELPread(int sfd, char *dst, unsigned int max) case SFD_TYPE_FD: case SFD_TYPE_PIPE: - case SFD_TYPE_CONSOLE: + //case SFD_TYPE_CONSOLE: { + ret = _read(sfd_to_fd(sfd), dst, max); if (FD_ISSET(sfd_to_fd(sfd), &debug_sfds)) @@ -2470,6 +2492,25 @@ int WSHELPread(int sfd, char *dst, unsigned int max) sfd, GetLastError()); } + break; + } + case SFD_TYPE_CONSOLE: + { + //if (sfd_type == SFD_TYPE_CONSOLE) { + // we could be send here due to ctrl-c input, so no data to read + //if ( DataAvailable (sfd_to_handle(sfd)) <=0 ) + //return 1; // no data to read + //} + ret = ReadConsoleForTermEmul( sfd_to_handle(sfd), dst, max); + + if (ret < 0) + { + error("read from pipe/console sfd [%d] failed with error code [%d]", + sfd, GetLastError()); + } + if (ret == 0) + return 0; //1; + break; } case 99: @@ -2519,7 +2560,11 @@ int WSHELPwrite(int sfd, const char *buf, unsigned int max) int ret = -1; - switch(get_sfd_type(sfd)) + int sfd_type = get_sfd_type(sfd); + if ( (glob_itissshclient) && ( sfd_type == SFD_TYPE_CONSOLE ) ) + sfd_type = SFD_TYPE_PIPE ; // client write type uses _write() in place ofn console insertion + + switch(sfd_type) { case SFD_TYPE_SOCKET: { diff --git a/contrib/win32/win32compat/tncon.c b/contrib/win32/win32compat/tncon.c new file mode 100644 index 0000000..7e4d913 --- /dev/null +++ b/contrib/win32/win32compat/tncon.c @@ -0,0 +1,762 @@ +/* + * Author: Microsoft Corp. + * + * Copyright (c) 2015 Microsoft Corp. + * All rights reserved + * + * Microsoft openssh win32 port + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +/* tncon.c + * + * Console reading calls for building an emulator over Windows Console. MS win32 port of ssh.exe client uses it. + * +*/ +#include +#include +#include +#include + +#include +#include + +#include "ansiprsr.h" +#include "tncon.h" +#include "tnnet.h" + +extern bool gbVTAppMode; + +char *glob_out = NULL ; +int glob_outlen = 0; +int glob_space = 0; + +// For our case, in NetWriteString2(), we do not use socket, but write the out going data to +// a global buffer setup by ReadConsoleForTermEmul() function below +int NetWriteString2(SOCKET sock, char* source, size_t len, int options) +{ + while ( len > 0 ) { + //printf("[%c]", *source); + if (glob_outlen >= glob_space) + return glob_outlen; // no more room to copy, this much got done + *glob_out++ = *source++ ; + len--; + glob_outlen++; + } + + return glob_outlen; +} + +TelParams Parameters; +TelParams* pParams = &Parameters ; + +void ConInputInitParams(void) +{ + memset( &Parameters, '\0', sizeof( TelParams ) ); + + // set default values + Parameters.szDebugInputFile = NULL; + Parameters.fDebugWait= FALSE; + Parameters.nReceiveCRLF = ENUM_LF; + Parameters.fSendCROnly = TRUE; //FALSE; + Parameters.sleepChar = '`'; + Parameters.menuChar = '\035'; // CTRL-] + Parameters.pAltKey = "\x01"; // default + + HANDLE hInput = GetStdHandle(STD_INPUT_HANDLE); + DWORD dwMode; + GetConsoleMode(hInput, &dwMode); + SetConsoleMode(hInput, (dwMode & ~(ENABLE_LINE_INPUT | + ENABLE_ECHO_INPUT | ENABLE_PROCESSED_INPUT | ENABLE_MOUSE_INPUT)) | ENABLE_WINDOW_INPUT ); + + extern int glob_itissshclient; + glob_itissshclient = 1; // tell our contrib/win32/win32compat/socket.c code it is for ssh client side + +} + +unsigned char NAWSSTR[] = { "\xff\xfa\x1f\x00\x00\x00\x00\xff\xf0"}; + +extern int ScreenY; +extern int ScreenX; + +extern int ScrollTop; +extern int ScrollBottom; + +int DataAvailableCount ( HANDLE h ) +{ + INPUT_RECORD irec[64]; + + DWORD events_read = 0; + + int ret = PeekConsoleInput (h, &irec, 64, &events_read); + + if (!ret) + { + return 0; + } + + if (events_read) // && irec.EventType == KEY_EVENT) + { + return events_read ; + } + + return 0; +} + +int ReadConsoleForTermEmul( HANDLE hInput, char *destin, int destinlen) +{ + //HANDLE hInput = GetStdHandle(STD_INPUT_HANDLE); + HANDLE hHandle[] = {hInput, NULL}; + DWORD nHandle = 1; + DWORD dwInput; + unsigned char szResponse[50]; + INPUT_RECORD InputRecord; + DWORD dwControlKeyState, rc; + BOOL bCapsOn, bShift; + char aChar; + unsigned char octets[20]; + + glob_out = destin ; + glob_space = destinlen ; + glob_outlen = 0; + + int dataavail = DataAvailableCount (hInput) ; + + while (dataavail > 0) + { + if (glob_outlen >= destinlen) + return glob_outlen ; // user given space is full, so return with whatever we read so far + + //rc = WaitForMultipleObjects(nHandle, hHandle, FALSE, INFINITE); + rc = WAIT_OBJECT_0 ; + switch (rc) + { + case WAIT_OBJECT_0: + { + ReadConsoleInputW(hInput, &InputRecord, 1, &dwInput); + dataavail--; + switch (InputRecord.EventType) + { + case WINDOW_BUFFER_SIZE_EVENT: + memcpy(szResponse,NAWSSTR,9); + szResponse[4] = ConScreenSizeX(); + szResponse[6] = ConWindowSizeY(); // visible window size - not buffer + ScreenX = ConScreenSizeX(); + ScreenY = ConWindowSizeY(); // visible window size - not buffer + //NetWriteString2(pParams->Socket,(char *) szResponse, 9,0); // it needs to got out to remote sshd + break; + + case FOCUS_EVENT: + case MENU_EVENT: + break; + + case KEY_EVENT: + // Remove all of the keys we don't care about + bCapsOn = (InputRecord.Event.KeyEvent.dwControlKeyState & CAPSLOCK_ON); + bShift = (InputRecord.Event.KeyEvent.dwControlKeyState & SHIFT_PRESSED); + dwControlKeyState = InputRecord.Event.KeyEvent.dwControlKeyState & ~(CAPSLOCK_ON | ENHANCED_KEY | NUMLOCK_ON | SCROLLLOCK_ON ); + if (InputRecord.Event.KeyEvent.uChar.UnicodeChar) + { + if (InputRecord.Event.KeyEvent.bKeyDown) + { + ConRestoreViewRect(); + int n = WideCharToMultiByte(GetConsoleCP(),0,&(InputRecord.Event.KeyEvent.uChar.UnicodeChar),1,(LPSTR)octets,20,NULL,NULL); + + if (pParams->fLocalEcho){ +// ConWriteCharW( InputRecord.Event.KeyEvent.uChar.UnicodeChar ); + ConWriteString((char *)octets,n); + } + if ((dwControlKeyState == LEFT_ALT_PRESSED) || + (dwControlKeyState == RIGHT_ALT_PRESSED)) + NetWriteString2(pParams->Socket, (char *)pParams->pAltKey, 1, 0); + + switch (InputRecord.Event.KeyEvent.uChar.UnicodeChar) + { + case 0xd: + if (pParams->fSendCROnly) + NetWriteString2(pParams->Socket, "\r", 1, 0); + else + NetWriteString2(pParams->Socket, "\r\n", 2, 0); + break; + + case VK_ESCAPE: + NetWriteString2(pParams->Socket, (char *)ESCAPE_KEY, 1, 0); + break; + + default: + NetWriteString2(pParams->Socket, (char *)octets, n, 0); + break; + } + } + } + else + { + //Non Unicode key + if (InputRecord.Event.KeyEvent.bKeyDown) + { + + switch(InputRecord.Event.KeyEvent.wVirtualKeyCode) + { + case VK_UP: + NetWriteString2(pParams->Socket, (char *)(gbVTAppMode?APP_UP_ARROW:UP_ARROW), 3, 0); + break; + case VK_DOWN: + NetWriteString2(pParams->Socket, (char *)(gbVTAppMode?APP_DOWN_ARROW:DOWN_ARROW), 3, 0); + break; + case VK_RIGHT: + NetWriteString2(pParams->Socket, (char *)(gbVTAppMode?APP_RIGHT_ARROW:RIGHT_ARROW), 3, 0); + break; + case VK_LEFT: + NetWriteString2(pParams->Socket, (char *)(gbVTAppMode?APP_LEFT_ARROW:LEFT_ARROW), 3, 0); + break; + case VK_F1: + if ( dwControlKeyState == 0 ) + { + if (pParams->bVT100Mode) + NetWriteString2(pParams->Socket, (char *)VT100_PF1_KEY, strlen(VT100_PF1_KEY), 0); + else + NetWriteString2(pParams->Socket, (char *)PF1_KEY, strlen(PF1_KEY), 0); + } + else if ( dwControlKeyState == SHIFT_PRESSED ) + NetWriteString2(pParams->Socket, (char *)SHIFT_PF1_KEY, strlen(SHIFT_PF1_KEY), 0); + else if ( dwControlKeyState == LEFT_CTRL_PRESSED || + dwControlKeyState == RIGHT_CTRL_PRESSED ) + NetWriteString2(pParams->Socket, (char *)CTRL_PF1_KEY, strlen(CTRL_PF1_KEY), 0); + else if ( dwControlKeyState == LEFT_ALT_PRESSED || + dwControlKeyState == RIGHT_ALT_PRESSED ) + NetWriteString2(pParams->Socket, (char *)ALT_PF1_KEY, strlen(ALT_PF1_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) ) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF1_KEY, strlen(SHIFT_ALT_CTRL_PF1_KEY), 0); + else if((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF1_KEY, strlen(ALT_CTRL_PF1_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) )) + NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF1_KEY, strlen(SHIFT_ALT_PF1_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF1_KEY, strlen(SHIFT_CTRL_PF1_KEY), 0); + break; + case VK_F2: + if ( dwControlKeyState == 0 ) + { + if (pParams->bVT100Mode) + NetWriteString2(pParams->Socket, (char *)VT100_PF2_KEY, strlen(VT100_PF2_KEY), 0); + else + NetWriteString2(pParams->Socket, (char *)PF2_KEY, strlen(PF2_KEY), 0); + } + else if ( dwControlKeyState == SHIFT_PRESSED ) + NetWriteString2(pParams->Socket, (char *)SHIFT_PF2_KEY, strlen(SHIFT_PF2_KEY), 0); + else if ( dwControlKeyState == LEFT_CTRL_PRESSED || + dwControlKeyState == RIGHT_CTRL_PRESSED ) + NetWriteString2(pParams->Socket, (char *)CTRL_PF2_KEY, strlen(CTRL_PF2_KEY), 0); + else if ( dwControlKeyState == LEFT_ALT_PRESSED || + dwControlKeyState == RIGHT_ALT_PRESSED ) + NetWriteString2(pParams->Socket, (char *)ALT_PF2_KEY, strlen(ALT_PF2_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) ) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF2_KEY, strlen(SHIFT_ALT_CTRL_PF2_KEY), 0); + else if((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF2_KEY, strlen(ALT_CTRL_PF2_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) )) + NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF2_KEY, strlen(SHIFT_ALT_PF2_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF2_KEY, strlen(SHIFT_CTRL_PF2_KEY), 0); + break; + case VK_F3: + if ( dwControlKeyState == 0 ) + { + if (pParams->bVT100Mode) + NetWriteString2(pParams->Socket, (char *)VT100_PF3_KEY, strlen(VT100_PF3_KEY), 0); + else + NetWriteString2(pParams->Socket, (char *)PF3_KEY, strlen(PF3_KEY), 0); + } + else if ( dwControlKeyState == SHIFT_PRESSED ) + NetWriteString2(pParams->Socket, (char *)SHIFT_PF3_KEY, strlen(SHIFT_PF3_KEY), 0); + else if ( dwControlKeyState == LEFT_CTRL_PRESSED || + dwControlKeyState == RIGHT_CTRL_PRESSED ) + NetWriteString2(pParams->Socket, (char *)CTRL_PF3_KEY, strlen(CTRL_PF3_KEY), 0); + else if ( dwControlKeyState == LEFT_ALT_PRESSED || + dwControlKeyState == RIGHT_ALT_PRESSED ) + NetWriteString2(pParams->Socket, (char *)ALT_PF3_KEY, strlen(ALT_PF3_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) ) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF3_KEY, strlen(SHIFT_ALT_CTRL_PF3_KEY), 0); + else if((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF3_KEY, strlen(ALT_CTRL_PF3_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) )) + NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF3_KEY, strlen(SHIFT_ALT_PF3_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF3_KEY, strlen(SHIFT_CTRL_PF3_KEY), 0); + break; + case VK_F4: + if ( dwControlKeyState == 0 ) + { + if (pParams->bVT100Mode) + NetWriteString2(pParams->Socket, (char *)VT100_PF4_KEY, strlen(VT100_PF4_KEY), 0); + else + NetWriteString2(pParams->Socket, (char *)PF4_KEY, strlen(PF4_KEY), 0); + } + else if ( dwControlKeyState == SHIFT_PRESSED ) + NetWriteString2(pParams->Socket, (char *)SHIFT_PF4_KEY, strlen(SHIFT_PF4_KEY), 0); + else if ( dwControlKeyState == LEFT_CTRL_PRESSED || + dwControlKeyState == RIGHT_CTRL_PRESSED ) + NetWriteString2(pParams->Socket, (char *)CTRL_PF4_KEY, strlen(CTRL_PF4_KEY), 0); + else if ( dwControlKeyState == LEFT_ALT_PRESSED || + dwControlKeyState == RIGHT_ALT_PRESSED ) + NetWriteString2(pParams->Socket, (char *)ALT_PF4_KEY, strlen(ALT_PF4_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) ) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF4_KEY, strlen(SHIFT_ALT_CTRL_PF4_KEY), 0); + else if((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF4_KEY, strlen(ALT_CTRL_PF4_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) )) + NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF4_KEY, strlen(SHIFT_ALT_PF4_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF4_KEY, strlen(SHIFT_CTRL_PF4_KEY), 0); + break; + case VK_F5: + if ( dwControlKeyState == 0 ) + { + NetWriteString2(pParams->Socket, (char *)PF5_KEY, strlen(PF5_KEY), 0); + } + else if ( dwControlKeyState == SHIFT_PRESSED ) + NetWriteString2(pParams->Socket, (char *)SHIFT_PF5_KEY, strlen(SHIFT_PF5_KEY), 0); + else if ( dwControlKeyState == LEFT_CTRL_PRESSED || + dwControlKeyState == RIGHT_CTRL_PRESSED ) + NetWriteString2(pParams->Socket, (char *)CTRL_PF5_KEY, strlen(CTRL_PF5_KEY), 0); + else if ( dwControlKeyState == LEFT_ALT_PRESSED || + dwControlKeyState == RIGHT_ALT_PRESSED ) + NetWriteString2(pParams->Socket, (char *)ALT_PF5_KEY, strlen(ALT_PF5_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) ) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF5_KEY, strlen(SHIFT_ALT_CTRL_PF5_KEY), 0); + else if((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF5_KEY, strlen(ALT_CTRL_PF5_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) )) + NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF5_KEY, strlen(SHIFT_ALT_PF5_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF5_KEY, strlen(SHIFT_CTRL_PF5_KEY), 0); + break; + case VK_F6: + if ( dwControlKeyState == 0 ) + NetWriteString2(pParams->Socket, (char *)PF6_KEY, strlen(PF6_KEY), 0); + else if ( dwControlKeyState == SHIFT_PRESSED ) + NetWriteString2(pParams->Socket, (char *)SHIFT_PF6_KEY, strlen(SHIFT_PF6_KEY), 0); + else if ( dwControlKeyState == LEFT_CTRL_PRESSED || + dwControlKeyState == RIGHT_CTRL_PRESSED ) + NetWriteString2(pParams->Socket, (char *)CTRL_PF6_KEY, strlen(CTRL_PF6_KEY), 0); + else if ( dwControlKeyState == LEFT_ALT_PRESSED || + dwControlKeyState == RIGHT_ALT_PRESSED ) + NetWriteString2(pParams->Socket, (char *)ALT_PF6_KEY, strlen(ALT_PF6_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) ) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF6_KEY, strlen(SHIFT_ALT_CTRL_PF6_KEY), 0); + else if((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF6_KEY, strlen(ALT_CTRL_PF6_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) )) + NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF6_KEY, strlen(SHIFT_ALT_PF6_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF6_KEY, strlen(SHIFT_CTRL_PF6_KEY), 0); + break; + case VK_F7: + if ( dwControlKeyState == 0 ) + NetWriteString2(pParams->Socket, (char *)PF7_KEY, strlen(PF7_KEY), 0); + else if ( dwControlKeyState == SHIFT_PRESSED ) + NetWriteString2(pParams->Socket, (char *)SHIFT_PF7_KEY, strlen(SHIFT_PF7_KEY), 0); + else if ( dwControlKeyState == LEFT_CTRL_PRESSED || + dwControlKeyState == RIGHT_CTRL_PRESSED ) + NetWriteString2(pParams->Socket, (char *)CTRL_PF7_KEY, strlen(CTRL_PF7_KEY), 0); + else if ( dwControlKeyState == LEFT_ALT_PRESSED || + dwControlKeyState == RIGHT_ALT_PRESSED ) + NetWriteString2(pParams->Socket, (char *)ALT_PF7_KEY, strlen(ALT_PF7_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) ) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF7_KEY, strlen(SHIFT_ALT_CTRL_PF7_KEY), 0); + else if((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF7_KEY, strlen(ALT_CTRL_PF7_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) )) + NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF7_KEY, strlen(SHIFT_ALT_PF7_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF7_KEY, strlen(SHIFT_CTRL_PF7_KEY), 0); + break; + case VK_F8: + if ( dwControlKeyState == 0 ) + NetWriteString2(pParams->Socket, (char *)PF8_KEY, strlen(PF8_KEY), 0); + else if ( dwControlKeyState == SHIFT_PRESSED ) + NetWriteString2(pParams->Socket, (char *)SHIFT_PF8_KEY, strlen(SHIFT_PF8_KEY), 0); + else if ( dwControlKeyState == LEFT_CTRL_PRESSED || + dwControlKeyState == RIGHT_CTRL_PRESSED ) + NetWriteString2(pParams->Socket, (char *)CTRL_PF8_KEY, strlen(CTRL_PF8_KEY), 0); + else if ( dwControlKeyState == LEFT_ALT_PRESSED || + dwControlKeyState == RIGHT_ALT_PRESSED ) + NetWriteString2(pParams->Socket, (char *)ALT_PF8_KEY, strlen(ALT_PF8_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) ) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF8_KEY, strlen(SHIFT_ALT_CTRL_PF8_KEY), 0); + else if((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF8_KEY, strlen(ALT_CTRL_PF8_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) )) + NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF8_KEY, strlen(SHIFT_ALT_PF8_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF8_KEY, strlen(SHIFT_CTRL_PF8_KEY), 0); + break; + case VK_F9: + if ( dwControlKeyState == 0 ) + NetWriteString2(pParams->Socket, (char *)PF9_KEY, strlen(PF9_KEY), 0); + else if ( dwControlKeyState == SHIFT_PRESSED ) + NetWriteString2(pParams->Socket, (char *)SHIFT_PF9_KEY, strlen(SHIFT_PF9_KEY), 0); + else if ( dwControlKeyState == LEFT_CTRL_PRESSED || + dwControlKeyState == RIGHT_CTRL_PRESSED ) + NetWriteString2(pParams->Socket, (char *)CTRL_PF9_KEY, strlen(CTRL_PF9_KEY), 0); + else if ( dwControlKeyState == LEFT_ALT_PRESSED || + dwControlKeyState == RIGHT_ALT_PRESSED ) + NetWriteString2(pParams->Socket, (char *)ALT_PF9_KEY, strlen(ALT_PF9_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) ) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF9_KEY, strlen(SHIFT_ALT_CTRL_PF9_KEY), 0); + else if((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF9_KEY, strlen(ALT_CTRL_PF9_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) )) + NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF9_KEY, strlen(SHIFT_ALT_PF9_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF9_KEY, strlen(SHIFT_CTRL_PF9_KEY), 0); + break; + case VK_F10: + if ( dwControlKeyState == 0 ) + NetWriteString2(pParams->Socket, (char *)PF10_KEY, strlen(PF10_KEY), 0); + else if ( dwControlKeyState == SHIFT_PRESSED ) + NetWriteString2(pParams->Socket, (char *)SHIFT_PF10_KEY, strlen(SHIFT_PF10_KEY), 0); + else if ( dwControlKeyState == LEFT_CTRL_PRESSED || + dwControlKeyState == RIGHT_CTRL_PRESSED ) + NetWriteString2(pParams->Socket, (char *)CTRL_PF10_KEY, strlen(CTRL_PF10_KEY), 0); + else if ( dwControlKeyState == LEFT_ALT_PRESSED || + dwControlKeyState == RIGHT_ALT_PRESSED ) + NetWriteString2(pParams->Socket, (char *)ALT_PF10_KEY, strlen(ALT_PF10_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) ) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF10_KEY, strlen(SHIFT_ALT_CTRL_PF10_KEY), 0); + else if((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF10_KEY, strlen(ALT_CTRL_PF10_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) )) + NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF10_KEY, strlen(SHIFT_ALT_PF10_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF10_KEY, strlen(SHIFT_CTRL_PF10_KEY), 0); + break; + case VK_F11: + if ( dwControlKeyState == 0 ) + NetWriteString2(pParams->Socket, (char *)PF11_KEY, strlen(PF11_KEY), 0); + else if ( dwControlKeyState == SHIFT_PRESSED ) + NetWriteString2(pParams->Socket, (char *)SHIFT_PF11_KEY, strlen(SHIFT_PF11_KEY), 0); + else if ( dwControlKeyState == LEFT_CTRL_PRESSED || + dwControlKeyState == RIGHT_CTRL_PRESSED ) + NetWriteString2(pParams->Socket, (char *)CTRL_PF11_KEY, strlen(CTRL_PF11_KEY), 0); + else if ( dwControlKeyState == LEFT_ALT_PRESSED || + dwControlKeyState == RIGHT_ALT_PRESSED ) + NetWriteString2(pParams->Socket, (char *)ALT_PF11_KEY, strlen(ALT_PF11_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) ) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF11_KEY, strlen(SHIFT_ALT_CTRL_PF11_KEY), 0); + else if((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF11_KEY, strlen(ALT_CTRL_PF11_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) )) + NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF11_KEY, strlen(SHIFT_ALT_PF11_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF11_KEY, strlen(SHIFT_CTRL_PF11_KEY), 0); + break; + case VK_F12: + if ( dwControlKeyState == 0 ) + NetWriteString2(pParams->Socket, (char *)PF12_KEY, strlen(PF12_KEY), 0); + else if ( dwControlKeyState == SHIFT_PRESSED ) + NetWriteString2(pParams->Socket, (char *)SHIFT_PF12_KEY, strlen(SHIFT_PF12_KEY), 0); + else if ( dwControlKeyState == LEFT_CTRL_PRESSED || + dwControlKeyState == RIGHT_CTRL_PRESSED ) + NetWriteString2(pParams->Socket, (char *)CTRL_PF12_KEY, strlen(CTRL_PF12_KEY), 0); + else if ( dwControlKeyState == LEFT_ALT_PRESSED || + dwControlKeyState == RIGHT_ALT_PRESSED ) + NetWriteString2(pParams->Socket, (char *)ALT_PF12_KEY, strlen(ALT_PF12_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) ) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF12_KEY, strlen(SHIFT_ALT_CTRL_PF12_KEY), 0); + else if((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF12_KEY, strlen(ALT_CTRL_PF12_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & RIGHT_ALT_PRESSED) || + (dwControlKeyState & LEFT_ALT_PRESSED) )) + NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF12_KEY, strlen(SHIFT_ALT_PF12_KEY), 0); + else if((dwControlKeyState & SHIFT_PRESSED) + && + ((dwControlKeyState & LEFT_CTRL_PRESSED) || + (dwControlKeyState & RIGHT_CTRL_PRESSED))) + NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF12_KEY, strlen(SHIFT_CTRL_PF12_KEY), 0); + break; + case VK_PRIOR: +#ifdef PHYS_KEY_MAP + NetWriteString2(pParams->Socket, (char *)REMOVE_KEY,4, 0); +#else + NetWriteString2(pParams->Socket, (char *)PREV_KEY, 4, 0); +#endif + break; + case VK_NEXT: + NetWriteString2(pParams->Socket, (char *)NEXT_KEY, 4, 0); + break; + case VK_END: +#ifdef PHYS_KEY_MAP + NetWriteString2(pParams->Socket, (char *)PREV_KEY,4, 0); +#else + NetWriteString2(pParams->Socket, (char *)SELECT_KEY, 4, 0); +#endif + break; + + case VK_HOME: +#ifdef PHYS_KEY_MAP + NetWriteString2(pParams->Socket, (char *)INSERT_KEY,4, 0); +#else + NetWriteString2(pParams->Socket, (char *)FIND_KEY, 4, 0); +#endif + break; + case VK_INSERT: +#ifdef PHYS_KEY_MAP + NetWriteString2(pParams->Socket, (char *)FIND_KEY,4, 0); +#else + NetWriteString2(pParams->Socket, (char *)INSERT_KEY, 4, 0); + +#endif + break; + case VK_DELETE: +#ifdef PHYS_KEY_MAP + NetWriteString2(pParams->Socket, (char *)SELECT_KEY,4, 0); +#else + NetWriteString2(pParams->Socket, (char *)REMOVE_KEY, 4, 0); +#endif + break; + case VK_TAB: + if (dwControlKeyState == SHIFT_PRESSED) + NetWriteString2(pParams->Socket, (char *)SHIFT_TAB_KEY, 3, 0); + break; + case VK_ESCAPE: + NetWriteString2(pParams->Socket, (char *)ESCAPE_KEY, 1, 0); + break; + case VK_SHIFT: + case VK_CONTROL: + case VK_CAPITAL: + // NOP on these + break; + default: + { + aChar = InputRecord.Event.KeyEvent.uChar.AsciiChar; + NetWriteString2(pParams->Socket, (char *)&aChar, 1, 0); + break; + } + + + } + + } + } + break; + } + break; + } + + default: + return glob_outlen; + } + } + + return glob_outlen ; +} + + diff --git a/ssh.c b/ssh.c index ec031eb..0ee3df2 100644 --- a/ssh.c +++ b/ssh.c @@ -1530,7 +1530,9 @@ main(int ac, char **av) #ifdef WIN32_FIXME if (tty_flag) { //AllocConsole(); - ConInit( STD_OUTPUT_HANDLE, TRUE ); + ConInputInitParams(); // init the Console input side with global parameters + HANDLE hInput = GetStdHandle(STD_INPUT_HANDLE); + ConInit( STD_OUTPUT_HANDLE, TRUE ); //init the output console surface for us to write } #endif