Manual Merge change 3c6b77b4fdc45ada3a8b907cd4af6f73dfd70e66

3c6b77b4fdc45ada3a8b907cd4af6f73dfd70e66 Ray Hayes <rayhayes@rhbe.net>
7/28/2016 12:10:04 PM -07:00 First version with console changes.
This commit is contained in:
Manoj Ampalam 2016-09-22 17:33:17 -07:00
parent 367476c953
commit c3b785a140
20 changed files with 3407 additions and 2695 deletions

View File

@ -2442,6 +2442,8 @@ channel_input_extended_data(int type, u_int32_t seq, void *ctxt)
char *data; char *data;
u_int data_len, tcode; u_int data_len, tcode;
Channel *c; Channel *c;
char *respbuf = NULL;
size_t resplen = 0;
/* Get the channel number and verify it. */ /* Get the channel number and verify it. */
id = packet_get_int(); id = packet_get_int();
@ -2480,8 +2482,14 @@ channel_input_extended_data(int type, u_int32_t seq, void *ctxt)
#ifndef WIN32_FIXME//N #ifndef WIN32_FIXME//N
buffer_append(&c->extended, data, data_len); buffer_append(&c->extended, data, data_len);
#else #else
if ( c->client_tty ) if (c->client_tty) {
telProcessNetwork ( data, data_len ); // run it by ANSI engine if it is the ssh client if (telProcessNetwork(data, data_len, &respbuf, &resplen) > 0) // run it by ANSI engine if it is the ssh client
buffer_append(&c->extended, data, data_len);
if (respbuf != NULL) {
sshbuf_put(&c->input, respbuf, resplen);
}
}
else else
buffer_append(&c->extended, data, data_len); buffer_append(&c->extended, data, data_len);
#endif #endif

Binary file not shown.

View File

@ -49,7 +49,6 @@
#define TS_SEND 1 #define TS_SEND 1
// items used from other modules // items used from other modules
int NetWriteString(char* pszString, size_t cbString);
TelParams Parameters; TelParams Parameters;
extern int ScreenX; extern int ScreenX;
@ -65,7 +64,6 @@ unsigned char VT_ST[] = { 0x1b, '/', '\0' };
static int AutoWrap = 1; static int AutoWrap = 1;
int marginTop, marginBottom;
BOOL bAtEOLN = FALSE; BOOL bAtEOLN = FALSE;
static int term_mode; static int term_mode;
@ -89,6 +87,7 @@ BOOL InPrintMode = FALSE;
BOOL fPcMode = FALSE; BOOL fPcMode = FALSE;
char printErr[] = "Unable to Print: Printer not assigned. Press any key to continue..."; char printErr[] = "Unable to Print: Printer not assigned. Press any key to continue...";
char cursor_report[255];
#define MODE_CURSORAPP 0x0001 #define MODE_CURSORAPP 0x0001
#define MODE_ANSIVT52 0x0002 #define MODE_ANSIVT52 0x0002
@ -117,12 +116,27 @@ int VTMode = 0;
char *GetTerminalId() char *GetTerminalId()
{ {
return "\033[?1;2c"; return TERMINAL_ID;
} }
char * GetStatusReport() char * GetStatusReport()
{ {
return "\033[2;5R"; return STATUS_REPORT;
}
char * GetCursorPositionReport()
{
DWORD wr = 0;
DWORD out = 0;
out = _snprintf_s(cursor_report, sizeof(cursor_report), _TRUNCATE,
CURSOR_REPORT_FORMAT_STRING, ConGetCursorY() + 1, ConGetCursorX() + 1);
if (out > 0) {
return cursor_report;
}
return NULL;
} }
void BufConvertToG2(char * pszBuffer, int length) void BufConvertToG2(char * pszBuffer, int length)
@ -147,12 +161,11 @@ void GoToNextLine()
bAtEOLN = FALSE; bAtEOLN = FALSE;
} }
unsigned char* ParseBuffer(unsigned char* pszBuffer, unsigned char* pszBufferEnd) unsigned char* ParseBuffer(unsigned char* pszBuffer, unsigned char* pszBufferEnd, unsigned char **respbuf, size_t *resplen)
{ {
int CurrentX; int CurrentX;
int CurrentY; int CurrentY;
int rc = 0, bufLen, cmpLen, i; int bufLen, cmpLen, i;
if (!fcompletion) if (!fcompletion)
{ {
@ -163,13 +176,14 @@ unsigned char* ParseBuffer(unsigned char* pszBuffer, unsigned char* pszBufferEnd
if (term_mode == TERM_ANSI) if (term_mode == TERM_ANSI)
{ {
pszNewCurrent = ParseANSI(pszCurrent, pszBufferEnd); pszNewCurrent = ParseANSI(pszCurrent, pszBufferEnd, respbuf, resplen);
} }
else if (term_mode == TERM_VT52) else if (term_mode == TERM_VT52)
{ {
pszNewCurrent = ParseVT52(pszCurrent, pszBufferEnd); pszNewCurrent = ParseVT52(pszCurrent, pszBufferEnd, respbuf, resplen);
} }
if ( pszCurrent == pszNewCurrent ) // didn't move inside Parsefunction
if (pszCurrent == pszNewCurrent) // Pointer didn't move inside Parse function
{ {
pszNewCurrent += ConWriteString( (char *)pszCurrent, 1); pszNewCurrent += ConWriteString( (char *)pszCurrent, 1);
return pszBuffer + 1; return pszBuffer + 1;
@ -178,6 +192,9 @@ unsigned char* ParseBuffer(unsigned char* pszBuffer, unsigned char* pszBufferEnd
pszBuffer = pszNewCurrent; pszBuffer = pszNewCurrent;
} }
} }
// This is handling special characters including locating the ESC which starts a
// terminal control sequence.
switch ((unsigned char) (*pszBuffer)) switch ((unsigned char) (*pszBuffer))
{ {
case 0: case 0:
@ -205,7 +222,6 @@ unsigned char* ParseBuffer(unsigned char* pszBuffer, unsigned char* pszBufferEnd
{ {
ConMoveCursorPosition(ScreenX-1,-1); ConMoveCursorPosition(ScreenX-1,-1);
ConWriteString(" ",1); ConWriteString(" ",1);
// ConMoveCursorPosition(-1,0);
} }
else else
{ {
@ -214,9 +230,6 @@ unsigned char* ParseBuffer(unsigned char* pszBuffer, unsigned char* pszBufferEnd
} }
} }
bAtEOLN = FALSE; bAtEOLN = FALSE;
//ConWriteString( " ", 1 );
//ConMoveCursorPosition( -1, 0 );
break; break;
case 9: case 9:
@ -233,28 +246,9 @@ unsigned char* ParseBuffer(unsigned char* pszBuffer, unsigned char* pszBufferEnd
break; break;
case 10: case 10:
pszBuffer++; pszBuffer++;
CurrentY = ConGetCursorY();
if (CurrentY >= marginBottom )
{
if (VTMode & MODE_APPMODE)
ConScrollDown(marginTop,marginBottom);
else
printf("\n");
ConMoveCursorPosition(-ConGetCursorX(),0);
}
else
{
ConMoveCursorPosition(0,1);
}
if ( Parameters.nReceiveCRLF == ENUM_LF )
ConMoveCursorPosition(-ConGetCursorX(),0);
AutoWrap = 1; AutoWrap = 1;
bAtEOLN = FALSE; bAtEOLN = TRUE;
break; break;
case 12: case 12:
@ -267,7 +261,6 @@ unsigned char* ParseBuffer(unsigned char* pszBuffer, unsigned char* pszBufferEnd
case 13: case 13:
pszBuffer++; pszBuffer++;
ConMoveCursorPosition(-ConGetCursorX(),0);
AutoWrap = 1; AutoWrap = 1;
bAtEOLN = FALSE; bAtEOLN = FALSE;
break; break;
@ -297,11 +290,11 @@ unsigned char* ParseBuffer(unsigned char* pszBuffer, unsigned char* pszBufferEnd
{ {
if (term_mode == TERM_ANSI) if (term_mode == TERM_ANSI)
{ {
pszNewCurrent = ParseANSI(pszCurrent, pszBufferEnd); pszNewCurrent = ParseANSI(pszCurrent, pszBufferEnd, respbuf, resplen);
} }
else if (term_mode == TERM_VT52) else if (term_mode == TERM_VT52)
{ {
pszNewCurrent = ParseVT52(pszCurrent, pszBufferEnd); pszNewCurrent = ParseVT52(pszCurrent, pszBufferEnd, respbuf, resplen);
} }
} }
if (pszNewCurrent > pszCurrent) if (pszNewCurrent > pszCurrent)
@ -319,9 +312,6 @@ unsigned char* ParseBuffer(unsigned char* pszBuffer, unsigned char* pszBufferEnd
while ((pszCurrent < pszBufferEnd) && (*pszCurrent != (unsigned char)27) while ((pszCurrent < pszBufferEnd) && (*pszCurrent != (unsigned char)27)
&& (*pszCurrent > (unsigned char)15) && (*pszCurrent != (unsigned char)255) && (*pszCurrent > (unsigned char)15) && (*pszCurrent != (unsigned char)255)
&& (CurrentX++ < ScreenX)) && (CurrentX++ < ScreenX))
// (*pszCurrent != (char)15) && (*pszCurrent != (char)14) &&
// (*pszCurrent != (char)12) && (*pszCurrent != (char)13) && (*pszCurrent != (char)8) &&
// (*pszCurrent != (char)9))
pszCurrent++; pszCurrent++;
if (fShiftOut) if (fShiftOut)
@ -333,9 +323,8 @@ unsigned char* ParseBuffer(unsigned char* pszBuffer, unsigned char* pszBufferEnd
{ {
bAtEOLN = TRUE; bAtEOLN = TRUE;
} }
break;
} }
break;
} }
return pszBuffer; return pszBuffer;
@ -435,26 +424,25 @@ void ConSetExtendedMode(int iFunction, BOOL bEnable)
#define DIGI_MASK (MODE_CS0 | MODE_CS1 | MODE_CS2 | MODE_CS3 | MODE_CHAR) #define DIGI_MASK (MODE_CS0 | MODE_CS1 | MODE_CS2 | MODE_CS3 | MODE_CHAR)
unsigned char * ParseANSI(unsigned char * pszBuffer, unsigned char * pszBufferEnd) unsigned char * ParseANSI(unsigned char * pszBuffer, unsigned char * pszBufferEnd, unsigned char **respbuf, size_t *resplen)
{ {
unsigned char * pszCurrent = pszBuffer;
const int nParam = 10; // Maximum number of parameters const int nParam = 10; // Maximum number of parameters
int rc = 0;
static int SavedX = 0; static int SavedX = 0;
static int SavedY = 0; static int SavedY = 0;
SCREEN_HANDLE hScreen = NULL;
char anyKey[2] = " "; unsigned char * pszCurrent = pszBuffer;
WORD BytesRead;
char pszServerPort[10]; if (pszCurrent == NULL || pszBufferEnd == NULL)
int indx; return NULL;
char jobName[40];
fcompletion = 0; fcompletion = 0;
do do
{ {
switch ((unsigned char) *pszCurrent) switch ((unsigned char) *pszCurrent)
{ {
case ';': // delimiter // Delimiter
case ';':
bDelimiter = TRUE; bDelimiter = TRUE;
break; break;
// Modifiers // Modifiers
@ -489,7 +477,7 @@ unsigned char * ParseANSI(unsigned char * pszBuffer, unsigned char * pszBufferEn
fcompletion = 1; fcompletion = 1;
break; break;
case '<': // character set case '<': // Character set
fcompletion = 1; fcompletion = 1;
break; break;
@ -500,69 +488,63 @@ unsigned char * ParseANSI(unsigned char * pszBuffer, unsigned char * pszBufferEn
case '~': case '~':
fcompletion = 1; fcompletion = 1;
break; break;
case '^': // private message pszCurrent++;
while (_strnicmp((const char *)pszCurrent, (const char *)VT_ST, strlen((const char *)VT_ST) ) )// while not stop case '^': // Private message
while (pszCurrent && pszCurrent < pszBufferEnd &&
_strnicmp((const char *)pszCurrent, (const char *)VT_ST, strlen((const char *)VT_ST) ) ) // while not stop
{ {
if (_strnicmp((const char *)pszCurrent, (const char *)VT_ST, strlen((const char *)VT_ST) ) ) if (pszCurrent && pszCurrent < pszBufferEnd &&
_strnicmp((const char *)pszCurrent, (const char *)VT_ST, strlen((const char *)VT_ST) ) )
pszCurrent++; pszCurrent++;
} }
pszCurrent += strlen((const char *)VT_ST) - 1; pszCurrent += strlen((const char *)VT_ST) - 1;
fcompletion = 1; fcompletion = 1;
break; break;
case 'A': // British Character Set or Cursor Up case 'A': // Character Set change or Cursor Up
if (bMode & MODE_CHAR) if (bMode & MODE_CHAR)
{ {
// Britsh Character Set
} }
else if (bMode & MODE_BRK) else if (bMode & MODE_BRK)
{ {
// Cursor UP // Cursor UP
if (iCurrentParam < 1)
iParam[0] = 1;
ConMoveCursorPosition(0, -iParam[0]); ConMoveCursorPosition(0, -iParam[0]);
// AutoWrap = 0;
} }
fcompletion = 1; fcompletion = 1;
break; break;
case 'B': // US ASCII or Cursor down
case 'B': // Character set change or Cursor down
if (bMode & MODE_CHAR) if (bMode & MODE_CHAR)
{ {
// US ASCII Character Set // Character Set
} }
else if (bMode & MODE_BRK) else if (bMode & MODE_BRK)
{ {
// Cursor DOWN // Cursor DOWN
if (iCurrentParam < 1)
iParam[0] = 1;
ConMoveCursorPosition(0, iParam[0]); ConMoveCursorPosition(0, iParam[0]);
// AutoWrap = 0;
} }
fcompletion = 1; fcompletion = 1;
break; break;
case 'C': // Finish Character Set or Cursor right
case 'C': // Character Set change or Cursor right
if (bMode & MODE_CHAR) if (bMode & MODE_CHAR)
{ {
// Britsh Character Set // Character Set
} }
else if (bMode & MODE_BRK) else if (bMode & MODE_BRK)
{ {
// Cursor right // Cursor right
if (iCurrentParam < 1)
iParam[0] = 1;
ConMoveCursorPosition(iParam[0], 0); ConMoveCursorPosition(iParam[0], 0);
// AutoWrap = 0;
} }
fcompletion = 1; fcompletion = 1;
break; break;
case 'D': // Cursor left case 'D': // Cursor left
if (bMode & MODE_BRK) if (bMode & MODE_BRK)
{ {
// Cursor left // Cursor left
if (iCurrentParam < 1)
iParam[0] = 1;
ConMoveCursorPosition(-iParam[0], 0); ConMoveCursorPosition(-iParam[0], 0);
// AutoWrap = 0;
} }
else if (bMode == 0) else if (bMode == 0)
{ {
@ -573,20 +555,20 @@ unsigned char * ParseANSI(unsigned char * pszBuffer, unsigned char * pszBufferEn
bAtEOLN = FALSE; bAtEOLN = FALSE;
break; break;
case '=': // Application mode
case '=': // application mode
VTMode |= MODE_APPMODE; VTMode |= MODE_APPMODE;
fcompletion = 1; fcompletion = 1;
break; break;
case '>': // numeric mode
case '>': // Numeric mode
VTMode &= ~MODE_APPMODE; VTMode &= ~MODE_APPMODE;
fcompletion = 1; fcompletion = 1;
break; break;
case '%': // character set definitions case '%': // Character set definitions
fcompletion = 1; fcompletion = 1;
break; break;
case 'h': case 'h':
case 'l': // ^[?25h case 'l': // ^[?25h
if (bMode & MODE_EXT) if (bMode & MODE_EXT)
@ -594,14 +576,12 @@ unsigned char * ParseANSI(unsigned char * pszBuffer, unsigned char * pszBufferEn
if (iParam[0] == 4) { if (iParam[0] == 4) {
VTMode |= MODE_IRM_INSERT; VTMode |= MODE_IRM_INSERT;
} }
// iParam[0] = atoi( (pszCurrent - iCurrentParam) );
int i; int i;
for ( i = 0; i < iCurrentParam; i++ ) for ( i = 0; i < iCurrentParam; i++ )
ConSetExtendedMode(iParam[i], *pszCurrent=='h' ? 1 : 0); ConSetExtendedMode(iParam[i], *pszCurrent=='h' ? 1 : 0);
} }
else if (bMode & MODE_BRK) else if (bMode & MODE_BRK)
{ {
// Possible set Line feed (option 20)
// Possible set Line feed (option 20) // Possible set Line feed (option 20)
if (iParam[0] == 20) if (iParam[0] == 20)
ConSetExtendedMode(iParam[0], *pszCurrent=='h' ? 1 : 0); ConSetExtendedMode(iParam[0], *pszCurrent=='h' ? 1 : 0);
@ -629,31 +609,25 @@ unsigned char * ParseANSI(unsigned char * pszBuffer, unsigned char * pszBufferEn
fcompletion = 1; fcompletion = 1;
bAtEOLN = FALSE; bAtEOLN = FALSE;
break; break;
case 'N': case 'N':
case 'O': case 'O':
fcompletion =1; fcompletion =1;
break; break;
case 'm': case 'm':
if (iCurrentParam < 1)
iParam[0] = 0;
ConSetAttribute(iParam, iCurrentParam); ConSetAttribute(iParam, iCurrentParam);
fcompletion = 1; fcompletion = 1;
break; break;
case 'r': case 'r':
marginTop = (iParam[0] > 0) ? iParam[0] - 1 : 0;
marginBottom = (iParam[1] > 0) ? iParam[1] - 1 : 0;
fcompletion = 1; fcompletion = 1;
break; break;
case 'H': case 'H':
case 'f': case 'f':
if (bMode & MODE_BRK) if (bMode & MODE_BRK)
{ {
if ((iParam[0]-1) > ConWindowSizeY())
ConSetScreenRect(ConWindowSizeX(), iParam[0]-1);
ConSetCursorPosition((iParam[1] > 0) ? iParam[1] - 1 : 0, (iParam[0] > 0) ? iParam[0] - 1 : 0); ConSetCursorPosition((iParam[1] > 0) ? iParam[1] - 1 : 0, (iParam[0] > 0) ? iParam[0] - 1 : 0);
//AutoWrap = 0;
} }
else if (bMode == 0) else if (bMode == 0)
{ {
@ -668,35 +642,37 @@ unsigned char * ParseANSI(unsigned char * pszBuffer, unsigned char * pszBufferEn
{ {
int i ; int i ;
for (i=0; i<iParam[0]; i++) for (i=0; i<iParam[0]; i++)
ConScrollUp(ConGetCursorY(),ScrollTop + marginBottom - ConGetCursorY()); ConScrollUp(ConGetCursorY(), ScrollTop - ConGetCursorY());
} }
else else
{ {
if (ConGetCursorY() <= ScrollTop + ConWindowSizeY() - 2) if (ConGetCursorY() <= ScrollTop + ConWindowSizeY() - 2)
{ {
ConScrollUp(ConGetCursorY(),ScrollTop + marginBottom - ConGetCursorY()); ConScrollUp(ConGetCursorY(), ScrollTop - ConGetCursorY());
} }
} }
fcompletion = 1; fcompletion = 1;
bAtEOLN = FALSE; bAtEOLN = FALSE;
break; break;
case 'E': case 'E':
case 'G':
case 'g': case 'g':
fcompletion = 1; fcompletion = 1;
break; break;
case 'i': // ANSI or VTXXX Print case 'i': // ANSI or VTXXX Print
fcompletion = 1;//
if ( iParam[0] == 5 ) if ( iParam[0] == 5 )
{ {
} }
else if ( iParam[0] == 4 ) else if ( iParam[0] == 4 )
InPrintMode = FALSE; InPrintMode = FALSE;
fcompletion = 1;
break; break;
case 'K': case 'K':
if (bMode & MODE_BRK) if (bMode & MODE_BRK)
{ {
if (iCurrentParam < 1)
iParam[0] = 0;
switch (iParam[0]) switch (iParam[0])
{ {
case 0: case 0:
@ -719,8 +695,6 @@ unsigned char * ParseANSI(unsigned char * pszBuffer, unsigned char * pszBufferEn
break; break;
case 'J': case 'J':
if (iCurrentParam < 1)
iParam[0] = 0;
switch (iParam[0]) switch (iParam[0])
{ {
case 0: case 0:
@ -737,32 +711,54 @@ unsigned char * ParseANSI(unsigned char * pszBuffer, unsigned char * pszBufferEn
break; break;
case 'n': case 'n':
if (iCurrentParam < 1) if (iCurrentParam == 1)
{ {
if (iParam[0] == 5) if (iParam[0] == 5)
{ {
char * szStatus = GetStatusReport(); char * szStatus = GetStatusReport();
NetWriteString(szStatus, strlen(szStatus)); if (respbuf != NULL)
{
*respbuf = szStatus;
if (resplen != NULL)
{
*resplen = strlen(szStatus);
}
}
} }
else if ( iParam[0] == 6 ) else if ( iParam[0] == 6 )
{ {
char * szStatus = GetStatusReport(); char * szStatus = GetCursorPositionReport();
NetWriteString(szStatus, strlen(szStatus)); if (respbuf != NULL)
{
*respbuf = szStatus;
if (resplen != NULL)
{
*resplen = strlen(szStatus);
}
}
} }
} }
fcompletion = 1; fcompletion = 1;
break; break;
case 'c': case 'c':
if (bMode == (MODE_BRK & MODE_EXT)) if (bMode == (MODE_BRK & MODE_EXT))
{ {
// What are you response // What is your response?
} }
else if (bMode == MODE_BRK) else if (bMode == MODE_BRK)
{ {
char* szTerminalId = GetTerminalId(); char* szTerminalId = GetTerminalId();
NetWriteString(szTerminalId, strlen(szTerminalId)); if (szTerminalId) {
if (respbuf != NULL)
{
*respbuf = szTerminalId;
if (resplen != NULL)
{
*resplen = strlen(szTerminalId);
}
}
}
} }
fcompletion = 1; fcompletion = 1;
break; break;
@ -775,7 +771,13 @@ unsigned char * ParseANSI(unsigned char * pszBuffer, unsigned char * pszBufferEn
case 'Z': // Identify - This is really a VT52 command case 'Z': // Identify - This is really a VT52 command
{ {
char* szTerminalId = GetTerminalId(); char* szTerminalId = GetTerminalId();
NetWriteString(szTerminalId, strlen(szTerminalId)); if (szTerminalId) {
*respbuf = szTerminalId;
if (resplen != NULL)
{
*resplen = strlen(szTerminalId);
}
}
} }
fcompletion = 1; fcompletion = 1;
break; break;
@ -783,13 +785,13 @@ unsigned char * ParseANSI(unsigned char * pszBuffer, unsigned char * pszBufferEn
case 'P': case 'P':
ConDeleteChars(iParam[0]); ConDeleteChars(iParam[0]);
fcompletion = 1; fcompletion = 1;
break; break;
default: default:
// pszHead should point to digit now. Otherwise we got bad escape // pszHead should point to digit now. Otherwise we got a bad escape
// sequence, so we just get out of here! // sequence, so we just get out of here!
if(*pszCurrent) {
if (!isdigit(*pszCurrent)) if (!isdigit(*pszCurrent))
{ {
pszCurrent = pszBuffer; pszCurrent = pszBuffer;
@ -821,6 +823,11 @@ unsigned char * ParseANSI(unsigned char * pszBuffer, unsigned char * pszBufferEn
} }
fcompletion = 1; fcompletion = 1;
} }
}
else {
pszCurrent = pszBuffer;
return pszCurrent;
}
break; break;
} }
@ -833,7 +840,6 @@ unsigned char * ParseANSI(unsigned char * pszBuffer, unsigned char * pszBufferEn
iCurrentParam = 0; iCurrentParam = 0;
bDelimiter = 0; bDelimiter = 0;
bMode = 0; bMode = 0;
// fcompletion = 0;
bExtMode = 0; bExtMode = 0;
bCS0 = 0; bCS0 = 0;
bCS1 = 0; bCS1 = 0;
@ -845,7 +851,7 @@ unsigned char * ParseANSI(unsigned char * pszBuffer, unsigned char * pszBufferEn
return pszBuffer; return pszBuffer;
} }
unsigned char * ParseVT52(unsigned char * pszBuffer, unsigned char * pszBufferEnd) unsigned char * ParseVT52(unsigned char * pszBuffer, unsigned char * pszBufferEnd, unsigned char **respbuf, size_t *resplen)
{ {
unsigned char * pszCurrent = pszBuffer; unsigned char * pszCurrent = pszBuffer;
int iLine; int iLine;
@ -853,7 +859,6 @@ unsigned char * ParseVT52(unsigned char * pszBuffer, unsigned char * pszBufferEn
switch ((unsigned char) *pszCurrent) switch ((unsigned char) *pszCurrent)
{ {
case 'A': // Cursor Up case 'A': // Cursor Up
ConMoveCursorPosition(0, -1); ConMoveCursorPosition(0, -1);
pszCurrent++; pszCurrent++;
@ -865,21 +870,24 @@ unsigned char * ParseVT52(unsigned char * pszBuffer, unsigned char * pszBufferEn
pszCurrent++; pszCurrent++;
bAtEOLN = FALSE; bAtEOLN = FALSE;
break; break;
case 'C': // Cursor Right case 'C': // Cursor Right
ConMoveCursorPosition(1, 0); ConMoveCursorPosition(1, 0);
pszCurrent++; pszCurrent++;
break; break;
case 'D': // Cursor Left case 'D': // Cursor Left
ConMoveCursorPosition(-1, 0); ConMoveCursorPosition(-1, 0);
pszCurrent++; pszCurrent++;
bAtEOLN = FALSE; bAtEOLN = FALSE;
break; break;
case 'F': // Special Graphics Character Set case 'F': // Special Graphics Character Set
case 'G': // ASCII Character Set case 'G': // ASCII Character Set
pszCurrent++; pszCurrent++;
break; break;
case 'H': // Cursor Home
case 'H': // Cursor Home
ConSetCursorPosition(1, 1); ConSetCursorPosition(1, 1);
pszCurrent++; pszCurrent++;
bAtEOLN = FALSE; bAtEOLN = FALSE;
@ -887,14 +895,17 @@ unsigned char * ParseVT52(unsigned char * pszBuffer, unsigned char * pszBufferEn
case 'I': // Reverse Line Feed case 'I': // Reverse Line Feed
pszCurrent++; pszCurrent++;
break; break;
case 'J': // Erase to End of Screen case 'J': // Erase to End of Screen
ConClearEOScreen(); ConClearEOScreen();
pszCurrent++; pszCurrent++;
break; break;
case 'K': // Erase to End of Line case 'K': // Erase to End of Line
ConClearEOLine(); ConClearEOLine();
pszCurrent++; pszCurrent++;
break; break;
case 'Y': // Direct Cursor Addressing case 'Y': // Direct Cursor Addressing
pszCurrent = GetNextChar(pszCurrent, pszBufferEnd); pszCurrent = GetNextChar(pszCurrent, pszBufferEnd);
if (pszCurrent != NULL) if (pszCurrent != NULL)
@ -916,21 +927,29 @@ unsigned char * ParseVT52(unsigned char * pszBuffer, unsigned char * pszBufferEn
break; break;
case 'Z': // Identify case 'Z': // Identify
NetWriteString("\033/Z",3); *respbuf = VT52_TERMINAL_ID;
if (resplen != NULL)
{
*resplen = 3;
}
pszCurrent++; pszCurrent++;
break; break;
case '=': // Enter Alt Keypad mode case '=': // Enter Alt Keypad mode
case '>': // Exit Alt Keypad mode case '>': // Exit Alt Keypad mode
case '1': // Graphics processor on case '1': // Graphics processor on
case '2': // Graphics processor off case '2': // Graphics processor off
pszCurrent++; pszCurrent++;
break; break;
case '<': // Enter ANSI mode case '<': // Enter ANSI mode
term_mode = TERM_ANSI; term_mode = TERM_ANSI;
pszCurrent++; pszCurrent++;
break; break;
default: default:
pszCurrent++; pszCurrent++;
break;
} }
return pszCurrent; return pszCurrent;

View File

@ -39,16 +39,15 @@
#define TERM_ANSI 0 #define TERM_ANSI 0
#define TERM_VT52 1 #define TERM_VT52 1
unsigned char * ParseBuffer(unsigned char* pszBuffer, unsigned char* pszBufferEnd); unsigned char * ParseBuffer(unsigned char* pszBuffer, unsigned char* pszBufferEnd, unsigned char **respbuf, size_t *resplen);
unsigned char * GetNextChar(unsigned char * pszBuffer, unsigned char *pszBufferEnd); unsigned char * GetNextChar(unsigned char * pszBuffer, unsigned char *pszBufferEnd);
unsigned char * ParseANSI(unsigned char * pszBuffer, unsigned char * pszBufferEnd); unsigned char * ParseANSI(unsigned char * pszBuffer, unsigned char * pszBufferEnd, unsigned char **respbuf, size_t *resplen);
unsigned char * ParseVT52(unsigned char * pszBuffer, unsigned char * pszBufferEnd); unsigned char * ParseVT52(unsigned char * pszBuffer, unsigned char * pszBufferEnd, unsigned char **respbuf, size_t *resplen);
#define true TRUE #define true TRUE
#define false FALSE #define false FALSE
#define bool BOOL #define bool BOOL
//typedef enum _crlftype { CRLF = 0, LF, CR } CRLFType;
#define ENUM_CRLF 0 #define ENUM_CRLF 0
#define ENUM_LF 1 #define ENUM_LF 1
#define ENUM_CR 2 #define ENUM_CR 2
@ -68,7 +67,7 @@ typedef struct _TelParams
int fTreatLFasCRLF; int fTreatLFasCRLF;
int fSendCROnly; int fSendCROnly;
int nReceiveCRLF; int nReceiveCRLF;
//_crlftype nReceiveCRLF;
char sleepChar; char sleepChar;
char menuChar; char menuChar;

File diff suppressed because it is too large Load Diff

View File

@ -58,6 +58,7 @@
#define ANSI_FOREGROUND_MAGENTA 35 #define ANSI_FOREGROUND_MAGENTA 35
#define ANSI_FOREGROUND_CYAN 36 #define ANSI_FOREGROUND_CYAN 36
#define ANSI_FOREGROUND_WHITE 37 #define ANSI_FOREGROUND_WHITE 37
#define ANSI_DEFAULT_FOREGROUND 39
#define ANSI_BACKGROUND_BLACK 40 #define ANSI_BACKGROUND_BLACK 40
#define ANSI_BACKGROUND_RED 41 #define ANSI_BACKGROUND_RED 41
#define ANSI_BACKGROUND_GREEN 42 #define ANSI_BACKGROUND_GREEN 42
@ -66,6 +67,7 @@
#define ANSI_BACKGROUND_MAGENTA 45 #define ANSI_BACKGROUND_MAGENTA 45
#define ANSI_BACKGROUND_CYAN 46 #define ANSI_BACKGROUND_CYAN 46
#define ANSI_BACKGROUND_WHITE 47 #define ANSI_BACKGROUND_WHITE 47
#define ANSI_DEFAULT_BACKGROUND 49
#define ANSI_BACKGROUND_BRIGHT 128 #define ANSI_BACKGROUND_BRIGHT 128
#define TAB_LENGTH 4 #define TAB_LENGTH 4
@ -81,14 +83,14 @@ typedef void * SCREEN_HANDLE;
int ConInit( DWORD OutputHandle, BOOL fSmartInit); int ConInit( DWORD OutputHandle, BOOL fSmartInit);
int ConUnInitWithRestore( void ); int ConUnInitWithRestore( void );
int ConUnInit( void ); int ConUnInit( void );
//void ConHideConsole(void); BOOL ConIsRedirected(HANDLE hInput);
HANDLE GetConsoleOutputHandle();
HANDLE GetConsoleInputHandle();
BOOL ConSetScreenRect( int xSize, int ySize ); BOOL ConSetScreenRect( int xSize, int ySize );
BOOL ConSetScreenSize( int X, int Y ); BOOL ConSetScreenSize( int X, int Y );
BOOL ConRestoreScreen( void ); BOOL ConRestoreScreen( void );
BOOL ConSaveScreen( void ); BOOL ConSaveScreen( void );
DWORD ConRedrawScreen( void );
void ConSetAttribute( int *iParam, int iParamCount ); void ConSetAttribute( int *iParam, int iParamCount );
void ConSetScrollRegion( int Top, int Bottom );
int ConScreenSizeX(); int ConScreenSizeX();
int ConSetScreenX(); int ConSetScreenX();
int ConScreenSizeY(); int ConScreenSizeY();
@ -97,7 +99,6 @@ int ConWindowSizeY();
int ConSetScreenY(); int ConSetScreenY();
void ConFillToEndOfLine(); void ConFillToEndOfLine();
int ConWriteString(char* pszString, int cbString); int ConWriteString(char* pszString, int cbString);
int ConWriteMenu(char* pszString, int cbString);
BOOL ConWriteChar( CHAR ch ); BOOL ConWriteChar( CHAR ch );
int ConWriteConsole( char *pData, int NumChars ); int ConWriteConsole( char *pData, int NumChars );
PCHAR ConDisplayData(char* pData, int NumLines); PCHAR ConDisplayData(char* pData, int NumLines);
@ -131,6 +132,7 @@ void ConDeleteScreenHandle( SCREEN_HANDLE hScreen );
void ConSaveViewRect( void ); void ConSaveViewRect( void );
void ConRestoreViewRect( void ); void ConRestoreViewRect( void );
void ConDeleteChars(int n); void ConDeleteChars(int n);
void ConSaveWindowsState(void);
#endif #endif

View File

@ -170,7 +170,7 @@ static int
createFile_flags_setup(int flags, int mode, struct createFile_flags* cf_flags) { createFile_flags_setup(int flags, int mode, struct createFile_flags* cf_flags) {
/* check flags */ /* check flags */
int rwflags = flags & 0xf; int rwflags = flags & 0x3;
int c_s_flags = flags & 0xfffffff0; int c_s_flags = flags & 0xfffffff0;
/* /*

File diff suppressed because it is too large Load Diff

View File

@ -43,29 +43,9 @@
#define SocketErrorStringSize 1024 #define SocketErrorStringSize 1024
char * strerror_win32(int error)
{
static char SocketErrorString[2 * SocketErrorStringSize] = { 0 };
DWORD error_win32 = WSAGetLastError();
if (FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, error_win32, MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL),
(LPTSTR) SocketErrorString, SocketErrorStringSize,
NULL ) != 0)
{
return SocketErrorString;
}
else
{
return "Unknown error";
}
}
/* /*
* Convert string encoding from one 8-bit CP to another 8-bit CP. * Convert string encoding from one 8-bit CP to another 8-bit CP.
* WARNING: Returned strong MUST be free by caller. * WARNING: Returned string MUST be freed by caller.
* *
* src - source string (IN). * src - source string (IN).
* srcSize - size of src string in bytes or -1 if zero terminated (IN). * srcSize - size of src string in bytes or -1 if zero terminated (IN).
@ -77,8 +57,7 @@ char * strerror_win32(int error)
* or NULL if error. * or NULL if error.
* *
*/ */
void *ConvertCodePage(const char *src, int srcSize,
void *CovertCodePage(const char *src, int srcSize,
DWORD srcCP, DWORD dstCP, int *retSize) DWORD srcCP, DWORD dstCP, int *retSize)
{ {
int exitCode = -1; int exitCode = -1;
@ -188,7 +167,7 @@ void *CovertCodePage(const char *src, int srcSize,
} }
/* /*
* Covert string from UTF8 to CP used by current thread (Local8). * Convert string from UTF8 to CP used by current thread (Local8).
* *
* utf8 - string in UTF8 (IN). * utf8 - string in UTF8 (IN).
* utf8Size - size of utf8 string in bytes or -1 if zero terminated (IN). * utf8Size - size of utf8 string in bytes or -1 if zero terminated (IN).
@ -197,13 +176,13 @@ void *CovertCodePage(const char *src, int srcSize,
* RETURNS: Pointer to new allocated Local8 string or NULL if error. * RETURNS: Pointer to new allocated Local8 string or NULL if error.
*/ */
void *CovertUtf8ToLocal8(const char *utf8, int utf8Size, int *bytesReturned) void *ConvertUtf8ToLocal8(const char *utf8, int utf8Size, int *bytesReturned)
{ {
return CovertCodePage(utf8, utf8Size, CP_UTF8, GetACP(), bytesReturned); return ConvertCodePage(utf8, utf8Size, CP_UTF8, GetACP(), bytesReturned);
} }
/* /*
* Covert string from CP used by current thread (Local8) to UTF8. * Convert string from CP used by current thread (Local8) to UTF8.
* *
* local8 - string in Local8 CP (IN). * local8 - string in Local8 CP (IN).
* local8Size - size of local8 string in bytes or -1 if zero terminated (IN). * local8Size - size of local8 string in bytes or -1 if zero terminated (IN).
@ -214,6 +193,6 @@ void *CovertUtf8ToLocal8(const char *utf8, int utf8Size, int *bytesReturned)
void *ConvertLocal8ToUtf8(const char *local8, int local8Size, int *bytesReturned) void *ConvertLocal8ToUtf8(const char *local8, int local8Size, int *bytesReturned)
{ {
return CovertCodePage(local8, local8Size, return ConvertCodePage(local8, local8Size,
GetACP(), CP_UTF8, bytesReturned); GetACP(), CP_UTF8, bytesReturned);
} }

View File

@ -32,15 +32,14 @@
#ifndef StringHelp_H #ifndef StringHelp_H
#define StringHelp_H 1 #define StringHelp_H 1
#include <windows.h>
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
char * strerror_win32(int); void *ConvertCodePage(const char *src, int srcSize, DWORD srcCP, DWORD dstCP, int *retSize);
void *ConvertUtf8ToLocal8(const char *utf8, int utf8Size, int *bytesReturned);
void *CovertCodePage(const char *src, DWORD srcCP, DWORD dstCP, int *retSize);
void *CovertUtf8ToLocal8(const char *utf8, int utf8Size, int *bytesReturned);
void *CovertLocal8ToUtf8(const char *local8, int local8Size, int *bytesReturned);
#ifdef __cplusplus #ifdef __cplusplus
}; };

View File

@ -1,5 +1,6 @@
#include <Windows.h> #include <Windows.h>
#include "w32fd.h" #include "w32fd.h"
#include "tncon.h"
#include "inc/defs.h" #include "inc/defs.h"
#define TERM_IO_BUF_SIZE 2048 #define TERM_IO_BUF_SIZE 2048
@ -48,6 +49,33 @@ static DWORD WINAPI ReadThread(
return 0; return 0;
} }
static DWORD WINAPI ReadConsoleThread(
_In_ LPVOID lpParameter
) {
int nBytesReturned = 0;
struct w32_io* pio = (struct w32_io*)lpParameter;
debug3("TermRead thread, io:%p", pio);
memset(&read_status, 0, sizeof(read_status));
while (nBytesReturned == 0) {
nBytesReturned = ReadConsoleForTermEmul(WINHANDLE(pio),
pio->read_details.buf, pio->read_details.buf_size);
}
read_status.transferred = nBytesReturned;
if (0 == QueueUserAPC(ReadAPCProc, main_thread, (ULONG_PTR)pio)) {
debug("TermRead thread - ERROR QueueUserAPC failed %d, io:%p", GetLastError(), pio);
pio->read_details.pending = FALSE;
pio->read_details.error = GetLastError();
DebugBreak();
}
return 0;
}
int int
termio_initiate_read(struct w32_io* pio) { termio_initiate_read(struct w32_io* pio) {
HANDLE read_thread; HANDLE read_thread;
@ -63,7 +91,7 @@ termio_initiate_read(struct w32_io* pio) {
pio->read_details.buf_size = TERM_IO_BUF_SIZE; pio->read_details.buf_size = TERM_IO_BUF_SIZE;
} }
read_thread = CreateThread(NULL, 0, ReadThread, pio, 0, NULL); read_thread = CreateThread(NULL, 0, ReadConsoleThread, pio, 0, NULL);
if (read_thread == NULL) { if (read_thread == NULL) {
errno = errno_from_Win32Error(GetLastError()); errno = errno_from_Win32Error(GetLastError());
debug("TermRead initiate - ERROR CreateThread %d, io:%p", GetLastError(), pio); debug("TermRead initiate - ERROR CreateThread %d, io:%p", GetLastError(), pio);
@ -136,9 +164,9 @@ int termio_close(struct w32_io* pio) {
HANDLE h; HANDLE h;
CancelIoEx(WINHANDLE(pio), NULL); CancelIoEx(WINHANDLE(pio), NULL);
/* If io is pending, let worker threads exit*/ /* If io is pending, let write worker threads exit. The read thread is blocked so terminate it.*/
if (pio->read_details.pending) if (pio->read_details.pending)
WaitForSingleObject(pio->read_overlapped.hEvent, INFINITE); TerminateThread(pio->read_overlapped.hEvent, 0);
if (pio->write_details.pending) if (pio->write_details.pending)
WaitForSingleObject(pio->write_overlapped.hEvent, INFINITE); WaitForSingleObject(pio->write_overlapped.hEvent, INFINITE);
/* drain queued APCs */ /* drain queued APCs */

View File

@ -50,49 +50,6 @@ char *glob_out = NULL ;
int glob_outlen = 0; int glob_outlen = 0;
int glob_space = 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" }; unsigned char NAWSSTR[] = { "\xff\xfa\x1f\x00\x00\x00\x00\xff\xf0" };
extern int ScreenY; extern int ScreenY;
@ -101,68 +58,101 @@ extern int ScreenX;
extern int ScrollTop; extern int ScrollTop;
extern int ScrollBottom; extern int ScrollBottom;
int DataAvailableCount ( HANDLE h ) TelParams Parameters;
{ TelParams* pParams = &Parameters;
INPUT_RECORD irec[64];
// 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) {
if (glob_outlen >= glob_space)
return glob_outlen;
*glob_out++ = *source++ ;
len--;
glob_outlen++;
}
return glob_outlen;
}
void ConInputInitParams(void)
{
DWORD dwMode = 0;
memset(&Parameters, '\0', sizeof(TelParams));
// Default values
Parameters.szDebugInputFile = NULL;
Parameters.fDebugWait = FALSE;
Parameters.nReceiveCRLF = ENUM_LF;
Parameters.sleepChar = '`';
Parameters.menuChar = '\035'; // CTRL-]
Parameters.pAltKey = "\x01"; // default
HANDLE hInput = GetStdHandle(STD_INPUT_HANDLE);
if (hInput && hInput != INVALID_HANDLE_VALUE) {
GetConsoleMode(hInput, &dwMode);
SetConsoleMode(hInput, (dwMode & ~(ENABLE_LINE_INPUT |
ENABLE_ECHO_INPUT | ENABLE_PROCESSED_INPUT | ENABLE_MOUSE_INPUT)) | ENABLE_WINDOW_INPUT);
}
}
BOOL DataAvailable(HANDLE h)
{
INPUT_RECORD irec;
DWORD events_read = 0; DWORD events_read = 0;
int ret = PeekConsoleInput (h, &irec, 64, &events_read); if (!PeekConsoleInput(h, &irec, 1, &events_read)) {
return FALSE;
if (!ret)
{
return 0;
} }
if (events_read) // && irec.EventType == KEY_EVENT) if (events_read) {
{ return TRUE;
return events_read ;
} }
return 0; return FALSE;
} }
int ReadConsoleForTermEmul(HANDLE hInput, char *destin, int destinlen) int ReadConsoleForTermEmul(HANDLE hInput, char *destin, int destinlen)
{ {
//HANDLE hInput = GetStdHandle(STD_INPUT_HANDLE);
HANDLE hHandle[] = { hInput, NULL }; HANDLE hHandle[] = { hInput, NULL };
DWORD nHandle = 1; DWORD nHandle = 1;
DWORD dwInput; DWORD dwInput = 0;
DWORD dwControlKeyState = 0;
DWORD rc = 0;
unsigned char szResponse[50]; unsigned char szResponse[50];
INPUT_RECORD InputRecord;
DWORD dwControlKeyState, rc;
BOOL bCapsOn, bShift;
char aChar;
unsigned char octets[20]; unsigned char octets[20];
char aChar = 0;
INPUT_RECORD InputRecord;
BOOL bCapsOn = FALSE;
BOOL bShift = FALSE;
glob_out = destin; glob_out = destin;
glob_space = destinlen; glob_space = destinlen;
glob_outlen = 0; glob_outlen = 0;
int dataavail = DataAvailableCount (hInput) ; while (DataAvailable(hInput))
while (dataavail > 0)
{ {
if (glob_outlen >= destinlen) if (glob_outlen >= destinlen)
return glob_outlen ; // user given space is full, so return with whatever we read so far return glob_outlen;
ReadConsoleInput(hInput, &InputRecord, 1, &dwInput);
//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) switch (InputRecord.EventType)
{ {
case WINDOW_BUFFER_SIZE_EVENT: case WINDOW_BUFFER_SIZE_EVENT:
memcpy(szResponse, NAWSSTR, 9); memcpy(szResponse, NAWSSTR, 9);
szResponse[4] = ConScreenSizeX(); szResponse[4] = ConScreenSizeX();
szResponse[6] = ConWindowSizeY(); // visible window size - not buffer szResponse[6] = ConWindowSizeY();
ScreenX = ConScreenSizeX(); ScreenX = ConScreenSizeX();
ScreenY = ConWindowSizeY(); // visible window size - not buffer ScreenY = ConWindowSizeY();
//NetWriteString2(pParams->Socket,(char *) szResponse, 9,0); // it needs to got out to remote sshd
break; break;
case FOCUS_EVENT: case FOCUS_EVENT:
@ -170,23 +160,31 @@ int ReadConsoleForTermEmul( HANDLE hInput, char *destin, int destinlen)
break; break;
case KEY_EVENT: case KEY_EVENT:
// Remove all of the keys we don't care about
bCapsOn = (InputRecord.Event.KeyEvent.dwControlKeyState & CAPSLOCK_ON); bCapsOn = (InputRecord.Event.KeyEvent.dwControlKeyState & CAPSLOCK_ON);
bShift = (InputRecord.Event.KeyEvent.dwControlKeyState & SHIFT_PRESSED); bShift = (InputRecord.Event.KeyEvent.dwControlKeyState & SHIFT_PRESSED);
dwControlKeyState = InputRecord.Event.KeyEvent.dwControlKeyState & ~(CAPSLOCK_ON | ENHANCED_KEY | NUMLOCK_ON | SCROLLLOCK_ON ); dwControlKeyState = InputRecord.Event.KeyEvent.dwControlKeyState &
~(CAPSLOCK_ON | ENHANCED_KEY | NUMLOCK_ON | SCROLLLOCK_ON);
if (InputRecord.Event.KeyEvent.uChar.UnicodeChar) if (InputRecord.Event.KeyEvent.uChar.UnicodeChar)
{ {
if (InputRecord.Event.KeyEvent.bKeyDown) if (InputRecord.Event.KeyEvent.bKeyDown)
{ {
ConRestoreViewRect(); int n = WideCharToMultiByte(
int n = WideCharToMultiByte(GetConsoleCP(),0,&(InputRecord.Event.KeyEvent.uChar.UnicodeChar),1,(LPSTR)octets,20,NULL,NULL); GetConsoleCP(),
0,
&(InputRecord.Event.KeyEvent.uChar.UnicodeChar),
1,
(LPSTR)octets,
20,
NULL,
NULL);
if (pParams->fLocalEcho) { if (pParams->fLocalEcho) {
// ConWriteCharW( InputRecord.Event.KeyEvent.uChar.UnicodeChar );
ConWriteString((char *)octets, n); ConWriteString((char *)octets, n);
} }
if ((dwControlKeyState == LEFT_ALT_PRESSED) ||
(dwControlKeyState == RIGHT_ALT_PRESSED)) if (dwControlKeyState == LEFT_ALT_PRESSED ||
dwControlKeyState == RIGHT_ALT_PRESSED)
NetWriteString2(pParams->Socket, (char *)pParams->pAltKey, 1, 0); NetWriteString2(pParams->Socket, (char *)pParams->pAltKey, 1, 0);
switch (InputRecord.Event.KeyEvent.uChar.UnicodeChar) switch (InputRecord.Event.KeyEvent.uChar.UnicodeChar)
@ -210,10 +208,8 @@ int ReadConsoleForTermEmul( HANDLE hInput, char *destin, int destinlen)
} }
else else
{ {
//Non Unicode key
if (InputRecord.Event.KeyEvent.bKeyDown) if (InputRecord.Event.KeyEvent.bKeyDown)
{ {
switch (InputRecord.Event.KeyEvent.wVirtualKeyCode) switch (InputRecord.Event.KeyEvent.wVirtualKeyCode)
{ {
case VK_UP: case VK_UP:
@ -244,27 +240,22 @@ int ReadConsoleForTermEmul( HANDLE hInput, char *destin, int destinlen)
else if (dwControlKeyState == LEFT_ALT_PRESSED || else if (dwControlKeyState == LEFT_ALT_PRESSED ||
dwControlKeyState == RIGHT_ALT_PRESSED) dwControlKeyState == RIGHT_ALT_PRESSED)
NetWriteString2(pParams->Socket, (char *)ALT_PF1_KEY, strlen(ALT_PF1_KEY), 0); NetWriteString2(pParams->Socket, (char *)ALT_PF1_KEY, strlen(ALT_PF1_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & RIGHT_ALT_PRESSED) || ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED) ) (dwControlKeyState & LEFT_ALT_PRESSED)) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF1_KEY, strlen(SHIFT_ALT_CTRL_PF1_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF1_KEY, strlen(SHIFT_ALT_CTRL_PF1_KEY), 0);
else if ((dwControlKeyState & RIGHT_ALT_PRESSED) || else if ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED) (dwControlKeyState & LEFT_ALT_PRESSED) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF1_KEY, strlen(ALT_CTRL_PF1_KEY), 0); NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF1_KEY, strlen(ALT_CTRL_PF1_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & RIGHT_ALT_PRESSED) || ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED))) (dwControlKeyState & LEFT_ALT_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF1_KEY, strlen(SHIFT_ALT_PF1_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF1_KEY, strlen(SHIFT_ALT_PF1_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF1_KEY, strlen(SHIFT_CTRL_PF1_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF1_KEY, strlen(SHIFT_CTRL_PF1_KEY), 0);
@ -285,27 +276,22 @@ int ReadConsoleForTermEmul( HANDLE hInput, char *destin, int destinlen)
else if (dwControlKeyState == LEFT_ALT_PRESSED || else if (dwControlKeyState == LEFT_ALT_PRESSED ||
dwControlKeyState == RIGHT_ALT_PRESSED) dwControlKeyState == RIGHT_ALT_PRESSED)
NetWriteString2(pParams->Socket, (char *)ALT_PF2_KEY, strlen(ALT_PF2_KEY), 0); NetWriteString2(pParams->Socket, (char *)ALT_PF2_KEY, strlen(ALT_PF2_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & RIGHT_ALT_PRESSED) || ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED) ) (dwControlKeyState & LEFT_ALT_PRESSED)) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF2_KEY, strlen(SHIFT_ALT_CTRL_PF2_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF2_KEY, strlen(SHIFT_ALT_CTRL_PF2_KEY), 0);
else if ((dwControlKeyState & RIGHT_ALT_PRESSED) || else if ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED) (dwControlKeyState & LEFT_ALT_PRESSED) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF2_KEY, strlen(ALT_CTRL_PF2_KEY), 0); NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF2_KEY, strlen(ALT_CTRL_PF2_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & RIGHT_ALT_PRESSED) || ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED))) (dwControlKeyState & LEFT_ALT_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF2_KEY, strlen(SHIFT_ALT_PF2_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF2_KEY, strlen(SHIFT_ALT_PF2_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF2_KEY, strlen(SHIFT_CTRL_PF2_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF2_KEY, strlen(SHIFT_CTRL_PF2_KEY), 0);
@ -326,27 +312,22 @@ int ReadConsoleForTermEmul( HANDLE hInput, char *destin, int destinlen)
else if (dwControlKeyState == LEFT_ALT_PRESSED || else if (dwControlKeyState == LEFT_ALT_PRESSED ||
dwControlKeyState == RIGHT_ALT_PRESSED) dwControlKeyState == RIGHT_ALT_PRESSED)
NetWriteString2(pParams->Socket, (char *)ALT_PF3_KEY, strlen(ALT_PF3_KEY), 0); NetWriteString2(pParams->Socket, (char *)ALT_PF3_KEY, strlen(ALT_PF3_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & RIGHT_ALT_PRESSED) || ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED) ) (dwControlKeyState & LEFT_ALT_PRESSED)) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF3_KEY, strlen(SHIFT_ALT_CTRL_PF3_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF3_KEY, strlen(SHIFT_ALT_CTRL_PF3_KEY), 0);
else if ((dwControlKeyState & RIGHT_ALT_PRESSED) || else if ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED) (dwControlKeyState & LEFT_ALT_PRESSED) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF3_KEY, strlen(ALT_CTRL_PF3_KEY), 0); NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF3_KEY, strlen(ALT_CTRL_PF3_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & RIGHT_ALT_PRESSED) || ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED))) (dwControlKeyState & LEFT_ALT_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF3_KEY, strlen(SHIFT_ALT_PF3_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF3_KEY, strlen(SHIFT_ALT_PF3_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF3_KEY, strlen(SHIFT_CTRL_PF3_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF3_KEY, strlen(SHIFT_CTRL_PF3_KEY), 0);
@ -367,27 +348,22 @@ int ReadConsoleForTermEmul( HANDLE hInput, char *destin, int destinlen)
else if (dwControlKeyState == LEFT_ALT_PRESSED || else if (dwControlKeyState == LEFT_ALT_PRESSED ||
dwControlKeyState == RIGHT_ALT_PRESSED) dwControlKeyState == RIGHT_ALT_PRESSED)
NetWriteString2(pParams->Socket, (char *)ALT_PF4_KEY, strlen(ALT_PF4_KEY), 0); NetWriteString2(pParams->Socket, (char *)ALT_PF4_KEY, strlen(ALT_PF4_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & RIGHT_ALT_PRESSED) || ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED) ) (dwControlKeyState & LEFT_ALT_PRESSED)) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF4_KEY, strlen(SHIFT_ALT_CTRL_PF4_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF4_KEY, strlen(SHIFT_ALT_CTRL_PF4_KEY), 0);
else if ((dwControlKeyState & RIGHT_ALT_PRESSED) || else if ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED) (dwControlKeyState & LEFT_ALT_PRESSED) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF4_KEY, strlen(ALT_CTRL_PF4_KEY), 0); NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF4_KEY, strlen(ALT_CTRL_PF4_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & RIGHT_ALT_PRESSED) || ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED))) (dwControlKeyState & LEFT_ALT_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF4_KEY, strlen(SHIFT_ALT_PF4_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF4_KEY, strlen(SHIFT_ALT_PF4_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF4_KEY, strlen(SHIFT_CTRL_PF4_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF4_KEY, strlen(SHIFT_CTRL_PF4_KEY), 0);
@ -405,27 +381,22 @@ int ReadConsoleForTermEmul( HANDLE hInput, char *destin, int destinlen)
else if (dwControlKeyState == LEFT_ALT_PRESSED || else if (dwControlKeyState == LEFT_ALT_PRESSED ||
dwControlKeyState == RIGHT_ALT_PRESSED) dwControlKeyState == RIGHT_ALT_PRESSED)
NetWriteString2(pParams->Socket, (char *)ALT_PF5_KEY, strlen(ALT_PF5_KEY), 0); NetWriteString2(pParams->Socket, (char *)ALT_PF5_KEY, strlen(ALT_PF5_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & RIGHT_ALT_PRESSED) || ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED) ) (dwControlKeyState & LEFT_ALT_PRESSED)) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF5_KEY, strlen(SHIFT_ALT_CTRL_PF5_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF5_KEY, strlen(SHIFT_ALT_CTRL_PF5_KEY), 0);
else if ((dwControlKeyState & RIGHT_ALT_PRESSED) || else if ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED) (dwControlKeyState & LEFT_ALT_PRESSED) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF5_KEY, strlen(ALT_CTRL_PF5_KEY), 0); NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF5_KEY, strlen(ALT_CTRL_PF5_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & RIGHT_ALT_PRESSED) || ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED))) (dwControlKeyState & LEFT_ALT_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF5_KEY, strlen(SHIFT_ALT_PF5_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF5_KEY, strlen(SHIFT_ALT_PF5_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF5_KEY, strlen(SHIFT_CTRL_PF5_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF5_KEY, strlen(SHIFT_CTRL_PF5_KEY), 0);
@ -441,27 +412,22 @@ int ReadConsoleForTermEmul( HANDLE hInput, char *destin, int destinlen)
else if (dwControlKeyState == LEFT_ALT_PRESSED || else if (dwControlKeyState == LEFT_ALT_PRESSED ||
dwControlKeyState == RIGHT_ALT_PRESSED) dwControlKeyState == RIGHT_ALT_PRESSED)
NetWriteString2(pParams->Socket, (char *)ALT_PF6_KEY, strlen(ALT_PF6_KEY), 0); NetWriteString2(pParams->Socket, (char *)ALT_PF6_KEY, strlen(ALT_PF6_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & RIGHT_ALT_PRESSED) || ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED) ) (dwControlKeyState & LEFT_ALT_PRESSED)) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF6_KEY, strlen(SHIFT_ALT_CTRL_PF6_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF6_KEY, strlen(SHIFT_ALT_CTRL_PF6_KEY), 0);
else if ((dwControlKeyState & RIGHT_ALT_PRESSED) || else if ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED) (dwControlKeyState & LEFT_ALT_PRESSED) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF6_KEY, strlen(ALT_CTRL_PF6_KEY), 0); NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF6_KEY, strlen(ALT_CTRL_PF6_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & RIGHT_ALT_PRESSED) || ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED))) (dwControlKeyState & LEFT_ALT_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF6_KEY, strlen(SHIFT_ALT_PF6_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF6_KEY, strlen(SHIFT_ALT_PF6_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF6_KEY, strlen(SHIFT_CTRL_PF6_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF6_KEY, strlen(SHIFT_CTRL_PF6_KEY), 0);
@ -477,27 +443,22 @@ int ReadConsoleForTermEmul( HANDLE hInput, char *destin, int destinlen)
else if (dwControlKeyState == LEFT_ALT_PRESSED || else if (dwControlKeyState == LEFT_ALT_PRESSED ||
dwControlKeyState == RIGHT_ALT_PRESSED) dwControlKeyState == RIGHT_ALT_PRESSED)
NetWriteString2(pParams->Socket, (char *)ALT_PF7_KEY, strlen(ALT_PF7_KEY), 0); NetWriteString2(pParams->Socket, (char *)ALT_PF7_KEY, strlen(ALT_PF7_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & RIGHT_ALT_PRESSED) || ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED) ) (dwControlKeyState & LEFT_ALT_PRESSED)) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF7_KEY, strlen(SHIFT_ALT_CTRL_PF7_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF7_KEY, strlen(SHIFT_ALT_CTRL_PF7_KEY), 0);
else if ((dwControlKeyState & RIGHT_ALT_PRESSED) || else if ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED) (dwControlKeyState & LEFT_ALT_PRESSED) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF7_KEY, strlen(ALT_CTRL_PF7_KEY), 0); NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF7_KEY, strlen(ALT_CTRL_PF7_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & RIGHT_ALT_PRESSED) || ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED))) (dwControlKeyState & LEFT_ALT_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF7_KEY, strlen(SHIFT_ALT_PF7_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF7_KEY, strlen(SHIFT_ALT_PF7_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF7_KEY, strlen(SHIFT_CTRL_PF7_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF7_KEY, strlen(SHIFT_CTRL_PF7_KEY), 0);
@ -513,27 +474,22 @@ int ReadConsoleForTermEmul( HANDLE hInput, char *destin, int destinlen)
else if (dwControlKeyState == LEFT_ALT_PRESSED || else if (dwControlKeyState == LEFT_ALT_PRESSED ||
dwControlKeyState == RIGHT_ALT_PRESSED) dwControlKeyState == RIGHT_ALT_PRESSED)
NetWriteString2(pParams->Socket, (char *)ALT_PF8_KEY, strlen(ALT_PF8_KEY), 0); NetWriteString2(pParams->Socket, (char *)ALT_PF8_KEY, strlen(ALT_PF8_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & RIGHT_ALT_PRESSED) || ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED) ) (dwControlKeyState & LEFT_ALT_PRESSED)) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF8_KEY, strlen(SHIFT_ALT_CTRL_PF8_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF8_KEY, strlen(SHIFT_ALT_CTRL_PF8_KEY), 0);
else if ((dwControlKeyState & RIGHT_ALT_PRESSED) || else if ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED) (dwControlKeyState & LEFT_ALT_PRESSED) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF8_KEY, strlen(ALT_CTRL_PF8_KEY), 0); NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF8_KEY, strlen(ALT_CTRL_PF8_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & RIGHT_ALT_PRESSED) || ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED))) (dwControlKeyState & LEFT_ALT_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF8_KEY, strlen(SHIFT_ALT_PF8_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF8_KEY, strlen(SHIFT_ALT_PF8_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF8_KEY, strlen(SHIFT_CTRL_PF8_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF8_KEY, strlen(SHIFT_CTRL_PF8_KEY), 0);
@ -549,27 +505,22 @@ int ReadConsoleForTermEmul( HANDLE hInput, char *destin, int destinlen)
else if (dwControlKeyState == LEFT_ALT_PRESSED || else if (dwControlKeyState == LEFT_ALT_PRESSED ||
dwControlKeyState == RIGHT_ALT_PRESSED) dwControlKeyState == RIGHT_ALT_PRESSED)
NetWriteString2(pParams->Socket, (char *)ALT_PF9_KEY, strlen(ALT_PF9_KEY), 0); NetWriteString2(pParams->Socket, (char *)ALT_PF9_KEY, strlen(ALT_PF9_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & RIGHT_ALT_PRESSED) || ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED) ) (dwControlKeyState & LEFT_ALT_PRESSED)) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF9_KEY, strlen(SHIFT_ALT_CTRL_PF9_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF9_KEY, strlen(SHIFT_ALT_CTRL_PF9_KEY), 0);
else if ((dwControlKeyState & RIGHT_ALT_PRESSED) || else if ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED) (dwControlKeyState & LEFT_ALT_PRESSED) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF9_KEY, strlen(ALT_CTRL_PF9_KEY), 0); NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF9_KEY, strlen(ALT_CTRL_PF9_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & RIGHT_ALT_PRESSED) || ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED))) (dwControlKeyState & LEFT_ALT_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF9_KEY, strlen(SHIFT_ALT_PF9_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF9_KEY, strlen(SHIFT_ALT_PF9_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF9_KEY, strlen(SHIFT_CTRL_PF9_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF9_KEY, strlen(SHIFT_CTRL_PF9_KEY), 0);
@ -585,27 +536,22 @@ int ReadConsoleForTermEmul( HANDLE hInput, char *destin, int destinlen)
else if (dwControlKeyState == LEFT_ALT_PRESSED || else if (dwControlKeyState == LEFT_ALT_PRESSED ||
dwControlKeyState == RIGHT_ALT_PRESSED) dwControlKeyState == RIGHT_ALT_PRESSED)
NetWriteString2(pParams->Socket, (char *)ALT_PF10_KEY, strlen(ALT_PF10_KEY), 0); NetWriteString2(pParams->Socket, (char *)ALT_PF10_KEY, strlen(ALT_PF10_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & RIGHT_ALT_PRESSED) || ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED) ) (dwControlKeyState & LEFT_ALT_PRESSED)) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF10_KEY, strlen(SHIFT_ALT_CTRL_PF10_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF10_KEY, strlen(SHIFT_ALT_CTRL_PF10_KEY), 0);
else if ((dwControlKeyState & RIGHT_ALT_PRESSED) || else if ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED) (dwControlKeyState & LEFT_ALT_PRESSED) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF10_KEY, strlen(ALT_CTRL_PF10_KEY), 0); NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF10_KEY, strlen(ALT_CTRL_PF10_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & RIGHT_ALT_PRESSED) || ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED))) (dwControlKeyState & LEFT_ALT_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF10_KEY, strlen(SHIFT_ALT_PF10_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF10_KEY, strlen(SHIFT_ALT_PF10_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF10_KEY, strlen(SHIFT_CTRL_PF10_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF10_KEY, strlen(SHIFT_CTRL_PF10_KEY), 0);
@ -621,27 +567,22 @@ int ReadConsoleForTermEmul( HANDLE hInput, char *destin, int destinlen)
else if (dwControlKeyState == LEFT_ALT_PRESSED || else if (dwControlKeyState == LEFT_ALT_PRESSED ||
dwControlKeyState == RIGHT_ALT_PRESSED) dwControlKeyState == RIGHT_ALT_PRESSED)
NetWriteString2(pParams->Socket, (char *)ALT_PF11_KEY, strlen(ALT_PF11_KEY), 0); NetWriteString2(pParams->Socket, (char *)ALT_PF11_KEY, strlen(ALT_PF11_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & RIGHT_ALT_PRESSED) || ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED) ) (dwControlKeyState & LEFT_ALT_PRESSED)) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF11_KEY, strlen(SHIFT_ALT_CTRL_PF11_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF11_KEY, strlen(SHIFT_ALT_CTRL_PF11_KEY), 0);
else if ((dwControlKeyState & RIGHT_ALT_PRESSED) || else if ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED) (dwControlKeyState & LEFT_ALT_PRESSED) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF11_KEY, strlen(ALT_CTRL_PF11_KEY), 0); NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF11_KEY, strlen(ALT_CTRL_PF11_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & RIGHT_ALT_PRESSED) || ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED))) (dwControlKeyState & LEFT_ALT_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF11_KEY, strlen(SHIFT_ALT_PF11_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF11_KEY, strlen(SHIFT_ALT_PF11_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF11_KEY, strlen(SHIFT_CTRL_PF11_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF11_KEY, strlen(SHIFT_CTRL_PF11_KEY), 0);
@ -657,27 +598,22 @@ int ReadConsoleForTermEmul( HANDLE hInput, char *destin, int destinlen)
else if (dwControlKeyState == LEFT_ALT_PRESSED || else if (dwControlKeyState == LEFT_ALT_PRESSED ||
dwControlKeyState == RIGHT_ALT_PRESSED) dwControlKeyState == RIGHT_ALT_PRESSED)
NetWriteString2(pParams->Socket, (char *)ALT_PF12_KEY, strlen(ALT_PF12_KEY), 0); NetWriteString2(pParams->Socket, (char *)ALT_PF12_KEY, strlen(ALT_PF12_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & RIGHT_ALT_PRESSED) || ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED) ) (dwControlKeyState & LEFT_ALT_PRESSED)) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF12_KEY, strlen(SHIFT_ALT_CTRL_PF12_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF12_KEY, strlen(SHIFT_ALT_CTRL_PF12_KEY), 0);
else if ((dwControlKeyState & RIGHT_ALT_PRESSED) || else if ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED) (dwControlKeyState & LEFT_ALT_PRESSED) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF12_KEY, strlen(ALT_CTRL_PF12_KEY), 0); NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF12_KEY, strlen(ALT_CTRL_PF12_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & RIGHT_ALT_PRESSED) || ((dwControlKeyState & RIGHT_ALT_PRESSED) ||
(dwControlKeyState & LEFT_ALT_PRESSED))) (dwControlKeyState & LEFT_ALT_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF12_KEY, strlen(SHIFT_ALT_PF12_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF12_KEY, strlen(SHIFT_ALT_PF12_KEY), 0);
else if((dwControlKeyState & SHIFT_PRESSED) else if ((dwControlKeyState & SHIFT_PRESSED) &&
&&
((dwControlKeyState & LEFT_CTRL_PRESSED) || ((dwControlKeyState & LEFT_CTRL_PRESSED) ||
(dwControlKeyState & RIGHT_CTRL_PRESSED))) (dwControlKeyState & RIGHT_CTRL_PRESSED)))
NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF12_KEY, strlen(SHIFT_CTRL_PF12_KEY), 0); NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF12_KEY, strlen(SHIFT_CTRL_PF12_KEY), 0);
@ -740,10 +676,7 @@ int ReadConsoleForTermEmul( HANDLE hInput, char *destin, int destinlen)
NetWriteString2(pParams->Socket, (char *)&aChar, 1, 0); NetWriteString2(pParams->Socket, (char *)&aChar, 1, 0);
break; break;
} }
} }
} }
} }
break; break;
@ -751,11 +684,6 @@ int ReadConsoleForTermEmul( HANDLE hInput, char *destin, int destinlen)
break; break;
} }
default:
return glob_outlen;
}
}
return glob_outlen ; return glob_outlen ;
} }

View File

@ -37,141 +37,147 @@
#include "console.h" #include "console.h"
#define UP_ARROW "\033[A" #define UP_ARROW "\x1b[A"
#define DOWN_ARROW "\033[B" #define DOWN_ARROW "\x1b[B"
#define RIGHT_ARROW "\033[C" #define RIGHT_ARROW "\x1b[C"
#define LEFT_ARROW "\033[D" #define LEFT_ARROW "\x1b[D"
#define APP_UP_ARROW "\033OA" #define APP_UP_ARROW "\x1bOA"
#define APP_DOWN_ARROW "\033OB" #define APP_DOWN_ARROW "\x1bOB"
#define APP_RIGHT_ARROW "\033OC" #define APP_RIGHT_ARROW "\x1bOC"
#define APP_LEFT_ARROW "\033OD" #define APP_LEFT_ARROW "\x1bOD"
// VT100 Function Key's // VT100 Function Key's
#define VT100_PF1_KEY "\x1b\x4f\x50" #define VT100_PF1_KEY "\x1bO2"
#define VT100_PF2_KEY "\x1b\x4f\x51" #define VT100_PF2_KEY "\x1bO3"
#define VT100_PF3_KEY "\x1b\x4f\x52" #define VT100_PF3_KEY "\x1bO4"
#define VT100_PF4_KEY "\x1b\x4f\x53" #define VT100_PF4_KEY "\x1bO5"
#define VT100_PF5_KEY "\x1b\x4f\x54" #define VT100_PF5_KEY "\x1bO6"
#define VT100_PF6_KEY "\x1b\x4f\x55" #define VT100_PF6_KEY "\x1bO7"
#define VT100_PF7_KEY "\x1b\x4f\x56" #define VT100_PF7_KEY "\x1bO8"
#define VT100_PF8_KEY "\x1b\x4f\x57" #define VT100_PF8_KEY "\x1bO9"
#define VT100_PF9_KEY "\x1b\x4f\x58" #define VT100_PF9_KEY "\x1bO:"
#define VT100_PF10_KEY "\x1b\x4f\x59" #define VT100_PF10_KEY "\x1bO;"
// VT420 Key's // VT420 Key's
#define PF1_KEY "\033[11~" #define PF1_KEY "\x1b[11~"
#define PF2_KEY "\033[12~" #define PF2_KEY "\x1b[12~"
#define PF3_KEY "\033[13~" #define PF3_KEY "\x1b[13~"
#define PF4_KEY "\033[14~" #define PF4_KEY "\x1b[14~"
#define PF5_KEY "\033[15~" #define PF5_KEY "\x1b[15~"
#define PF6_KEY "\033[17~" #define PF6_KEY "\x1b[17~"
#define PF7_KEY "\033[18~" #define PF7_KEY "\x1b[18~"
#define PF8_KEY "\033[19~" #define PF8_KEY "\x1b[19~"
#define PF9_KEY "\033[20~" #define PF9_KEY "\x1b[20~"
#define PF10_KEY "\033[21~" #define PF10_KEY "\x1b[21~"
#define PF11_KEY "\033[23~" #define PF11_KEY "\x1b[23~"
#define PF12_KEY "\033[24~" #define PF12_KEY "\x1b[24~"
#define SHIFT_PF1_KEY "\033[11;2~" #define SHIFT_PF1_KEY "\x1b[11;2~"
#define SHIFT_PF2_KEY "\033[12;2~" #define SHIFT_PF2_KEY "\x1b[12;2~"
#define SHIFT_PF3_KEY "\033[13;2~" #define SHIFT_PF3_KEY "\x1b[13;2~"
#define SHIFT_PF4_KEY "\033[14;2~" #define SHIFT_PF4_KEY "\x1b[14;2~"
#define SHIFT_PF5_KEY "\033[15;2~" #define SHIFT_PF5_KEY "\x1b[15;2~"
#define SHIFT_PF6_KEY "\033[17;2~" #define SHIFT_PF6_KEY "\x1b[17;2~"
#define SHIFT_PF7_KEY "\033[18;2~" #define SHIFT_PF7_KEY "\x1b[18;2~"
#define SHIFT_PF8_KEY "\033[19;2~" #define SHIFT_PF8_KEY "\x1b[19;2~"
#define SHIFT_PF9_KEY "\033[20;2~" #define SHIFT_PF9_KEY "\x1b[20;2~"
#define SHIFT_PF10_KEY "\033[21;2~" #define SHIFT_PF10_KEY "\x1b[21;2~"
#define SHIFT_PF11_KEY "\033[24;2~" #define SHIFT_PF11_KEY "\x1b[24;2~"
#define SHIFT_PF12_KEY "\033[25;2~" #define SHIFT_PF12_KEY "\x1b[25;2~"
#define ALT_PF1_KEY "\033[11;3~" #define ALT_PF1_KEY "\x1b[11;3~"
#define ALT_PF2_KEY "\033[12;3~" #define ALT_PF2_KEY "\x1b[12;3~"
#define ALT_PF3_KEY "\033[13;3~" #define ALT_PF3_KEY "\x1b[13;3~"
#define ALT_PF4_KEY "\033[14;3~" #define ALT_PF4_KEY "\x1b[14;3~"
#define ALT_PF5_KEY "\033[15;3~" #define ALT_PF5_KEY "\x1b[15;3~"
#define ALT_PF6_KEY "\033[17;3~" #define ALT_PF6_KEY "\x1b[17;3~"
#define ALT_PF7_KEY "\033[18;3~" #define ALT_PF7_KEY "\x1b[18;3~"
#define ALT_PF8_KEY "\033[19;3~" #define ALT_PF8_KEY "\x1b[19;3~"
#define ALT_PF9_KEY "\033[20;3~" #define ALT_PF9_KEY "\x1b[20;3~"
#define ALT_PF10_KEY "\033[21;3~" #define ALT_PF10_KEY "\x1b[21;3~"
#define ALT_PF11_KEY "\033[24;3~" #define ALT_PF11_KEY "\x1b[24;3~"
#define ALT_PF12_KEY "\033[25;3~" #define ALT_PF12_KEY "\x1b[25;3~"
#define CTRL_PF1_KEY "\033[11;4~" #define CTRL_PF1_KEY "\x1b[11;4~"
#define CTRL_PF2_KEY "\033[12;4~" #define CTRL_PF2_KEY "\x1b[12;4~"
#define CTRL_PF3_KEY "\033[13;4~" #define CTRL_PF3_KEY "\x1b[13;4~"
#define CTRL_PF4_KEY "\033[14;4~" #define CTRL_PF4_KEY "\x1b[14;4~"
#define CTRL_PF5_KEY "\033[15;4~" #define CTRL_PF5_KEY "\x1b[15;4~"
#define CTRL_PF6_KEY "\033[17;4~" #define CTRL_PF6_KEY "\x1b[17;4~"
#define CTRL_PF7_KEY "\033[18;4~" #define CTRL_PF7_KEY "\x1b[18;4~"
#define CTRL_PF8_KEY "\033[19;4~" #define CTRL_PF8_KEY "\x1b[19;4~"
#define CTRL_PF9_KEY "\033[20;4~" #define CTRL_PF9_KEY "\x1b[20;4~"
#define CTRL_PF10_KEY "\033[21;4~" #define CTRL_PF10_KEY "\x1b[21;4~"
#define CTRL_PF11_KEY "\033[24;4~" #define CTRL_PF11_KEY "\x1b[24;4~"
#define CTRL_PF12_KEY "\033[25;4~" #define CTRL_PF12_KEY "\x1b[25;4~"
#define SHIFT_CTRL_PF1_KEY "\033[11;6~" #define SHIFT_CTRL_PF1_KEY "\x1b[11;6~"
#define SHIFT_CTRL_PF2_KEY "\033[12;6~" #define SHIFT_CTRL_PF2_KEY "\x1b[12;6~"
#define SHIFT_CTRL_PF3_KEY "\033[13;6~" #define SHIFT_CTRL_PF3_KEY "\x1b[13;6~"
#define SHIFT_CTRL_PF4_KEY "\033[14;6~" #define SHIFT_CTRL_PF4_KEY "\x1b[14;6~"
#define SHIFT_CTRL_PF5_KEY "\033[15;6~" #define SHIFT_CTRL_PF5_KEY "\x1b[15;6~"
#define SHIFT_CTRL_PF6_KEY "\033[17;6~" #define SHIFT_CTRL_PF6_KEY "\x1b[17;6~"
#define SHIFT_CTRL_PF7_KEY "\033[18;6~" #define SHIFT_CTRL_PF7_KEY "\x1b[18;6~"
#define SHIFT_CTRL_PF8_KEY "\033[19;6~" #define SHIFT_CTRL_PF8_KEY "\x1b[19;6~"
#define SHIFT_CTRL_PF9_KEY "\033[20;6~" #define SHIFT_CTRL_PF9_KEY "\x1b[20;6~"
#define SHIFT_CTRL_PF10_KEY "\033[21;6~" #define SHIFT_CTRL_PF10_KEY "\x1b[21;6~"
#define SHIFT_CTRL_PF11_KEY "\033[24;6~" #define SHIFT_CTRL_PF11_KEY "\x1b[24;6~"
#define SHIFT_CTRL_PF12_KEY "\033[25;6~" #define SHIFT_CTRL_PF12_KEY "\x1b[25;6~"
#define SHIFT_ALT_PF1_KEY "\033[11;5~" #define SHIFT_ALT_PF1_KEY "\x1b[11;5~"
#define SHIFT_ALT_PF2_KEY "\033[12;5~" #define SHIFT_ALT_PF2_KEY "\x1b[12;5~"
#define SHIFT_ALT_PF3_KEY "\033[13;5~" #define SHIFT_ALT_PF3_KEY "\x1b[13;5~"
#define SHIFT_ALT_PF4_KEY "\033[14;5~" #define SHIFT_ALT_PF4_KEY "\x1b[14;5~"
#define SHIFT_ALT_PF5_KEY "\033[15;5~" #define SHIFT_ALT_PF5_KEY "\x1b[15;5~"
#define SHIFT_ALT_PF6_KEY "\033[17;5~" #define SHIFT_ALT_PF6_KEY "\x1b[17;5~"
#define SHIFT_ALT_PF7_KEY "\033[18;5~" #define SHIFT_ALT_PF7_KEY "\x1b[18;5~"
#define SHIFT_ALT_PF8_KEY "\033[19;5~" #define SHIFT_ALT_PF8_KEY "\x1b[19;5~"
#define SHIFT_ALT_PF9_KEY "\033[20;5~" #define SHIFT_ALT_PF9_KEY "\x1b[20;5~"
#define SHIFT_ALT_PF10_KEY "\033[21;5~" #define SHIFT_ALT_PF10_KEY "\x1b[21;5~"
#define SHIFT_ALT_PF11_KEY "\033[24;5~" #define SHIFT_ALT_PF11_KEY "\x1b[24;5~"
#define SHIFT_ALT_PF12_KEY "\033[25;5~" #define SHIFT_ALT_PF12_KEY "\x1b[25;5~"
#define ALT_CTRL_PF1_KEY "\033[11;7~" #define ALT_CTRL_PF1_KEY "\x1b[11;7~"
#define ALT_CTRL_PF2_KEY "\033[12;7~" #define ALT_CTRL_PF2_KEY "\x1b[12;7~"
#define ALT_CTRL_PF3_KEY "\033[13;7~" #define ALT_CTRL_PF3_KEY "\x1b[13;7~"
#define ALT_CTRL_PF4_KEY "\033[14;7~" #define ALT_CTRL_PF4_KEY "\x1b[14;7~"
#define ALT_CTRL_PF5_KEY "\033[15;7~" #define ALT_CTRL_PF5_KEY "\x1b[15;7~"
#define ALT_CTRL_PF6_KEY "\033[17;7~" #define ALT_CTRL_PF6_KEY "\x1b[17;7~"
#define ALT_CTRL_PF7_KEY "\033[18;7~" #define ALT_CTRL_PF7_KEY "\x1b[18;7~"
#define ALT_CTRL_PF8_KEY "\033[19;7~" #define ALT_CTRL_PF8_KEY "\x1b[19;7~"
#define ALT_CTRL_PF9_KEY "\033[20;7~" #define ALT_CTRL_PF9_KEY "\x1b[20;7~"
#define ALT_CTRL_PF10_KEY "\033[21;7~" #define ALT_CTRL_PF10_KEY "\x1b[21;7~"
#define ALT_CTRL_PF11_KEY "\033[24;7~" #define ALT_CTRL_PF11_KEY "\x1b[24;7~"
#define ALT_CTRL_PF12_KEY "\033[25;7~" #define ALT_CTRL_PF12_KEY "\x1b[25;7~"
#define SHIFT_ALT_CTRL_PF1_KEY "\033[11;8~" #define SHIFT_ALT_CTRL_PF1_KEY "\x1b[11;8~"
#define SHIFT_ALT_CTRL_PF2_KEY "\033[12;8~" #define SHIFT_ALT_CTRL_PF2_KEY "\x1b[12;8~"
#define SHIFT_ALT_CTRL_PF3_KEY "\033[13;8~" #define SHIFT_ALT_CTRL_PF3_KEY "\x1b[13;8~"
#define SHIFT_ALT_CTRL_PF4_KEY "\033[14;8~" #define SHIFT_ALT_CTRL_PF4_KEY "\x1b[14;8~"
#define SHIFT_ALT_CTRL_PF5_KEY "\033[15;8~" #define SHIFT_ALT_CTRL_PF5_KEY "\x1b[15;8~"
#define SHIFT_ALT_CTRL_PF6_KEY "\033[17;8~" #define SHIFT_ALT_CTRL_PF6_KEY "\x1b[17;8~"
#define SHIFT_ALT_CTRL_PF7_KEY "\033[18;8~" #define SHIFT_ALT_CTRL_PF7_KEY "\x1b[18;8~"
#define SHIFT_ALT_CTRL_PF8_KEY "\033[19;8~" #define SHIFT_ALT_CTRL_PF8_KEY "\x1b[19;8~"
#define SHIFT_ALT_CTRL_PF9_KEY "\033[20;8~" #define SHIFT_ALT_CTRL_PF9_KEY "\x1b[20;8~"
#define SHIFT_ALT_CTRL_PF10_KEY "\033[21;8~" #define SHIFT_ALT_CTRL_PF10_KEY "\x1b[21;8~"
#define SHIFT_ALT_CTRL_PF11_KEY "\033[24;8~" #define SHIFT_ALT_CTRL_PF11_KEY "\x1b[24;8~"
#define SHIFT_ALT_CTRL_PF12_KEY "\033[25;8~" #define SHIFT_ALT_CTRL_PF12_KEY "\x1b[25;8~"
#define FIND_KEY "\x1b\x5b\x31\x7e" #define FIND_KEY "\x1b[1~"
#define INSERT_KEY "\x1b\x5b\x32\x7e" #define INSERT_KEY "\x1b[2~"
#define REMOVE_KEY "\x1b\x5b\x33\x7e" #define REMOVE_KEY "\x1b[3~"
#define SELECT_KEY "\x1b\x5b\x34\x7e" #define SELECT_KEY "\x1b[4~"
#define PREV_KEY "\x1b\x5b\x35\x7e" #define PREV_KEY "\x1b[5~"
#define NEXT_KEY "\x1b\x5b\x36\x7e" #define NEXT_KEY "\x1b[6~"
#define SHIFT_TAB_KEY "\x1b\x5b\x5A" #define SHIFT_TAB_KEY "\x1b[~"
#define ESCAPE_KEY "\x1b" #define ESCAPE_KEY "\x1b"
#define TERMINAL_ID "\x1b[?1;2c"
#define STATUS_REPORT "\x1b[2;5R"
#define CURSOR_REPORT_FORMAT_STRING "\x1b[%d;%dR"
#define VT52_TERMINAL_ID "\x1b/Z"
int ReadConsoleForTermEmul(HANDLE hInput, char *destin, int destinlen);
#endif #endif

View File

@ -37,60 +37,58 @@
#include <stdio.h> #include <stdio.h>
#include <ctype.h> #include <ctype.h>
#include <string.h> #include <string.h>
#include <windows.h> #include <windows.h>
#include "ansiprsr.h" #include <ansiprsr.h>
#include "tncon.h"
#define dwBuffer 4096 #define dwBuffer 4096
int NetWriteString( char* pszString, size_t cbString) // Server will always be returning a sequence of ANSI control characters which the client
{ // protocol can either passthru directly to the console or transform based on an output terminal
//return send_output_to_remote_client( sock, pszString, (int)cbString, 0 ); // type. We're not using termcap so we're only supporting the ANSI (vt100) sequences that
return (int)cbString ; // are hardcoded in the server and will be transformed to Windows Console commands.
}
size_t telProcessNetwork ( char *buf, size_t len ) size_t telProcessNetwork(char *buf, size_t len, unsigned char **respbuf, size_t *resplen)
{ {
unsigned char szBuffer[dwBuffer + 8]; unsigned char szBuffer[dwBuffer + 8];
unsigned char* pszHead = szBuffer;
unsigned char* pszTail = szBuffer;
size_t Result;
unsigned char* pszNewHead;
unsigned char* pszNewHead = NULL;
unsigned char* pszHead = NULL;
unsigned char* pszTail = NULL;
char *term = NULL;
if (len == 0)
return len;
term = getenv("TERM");
if (term != NULL && _stricmp(term, "passthru") == 0)
return len;
// Transform a single carriage return into a single linefeed before
// continuing.
if ((len == 1) && (buf[0] == 13)) if ((len == 1) && (buf[0] == 13))
buf[0] = 10; buf[0] = 10;
if (1)
{
Result = len ;
pszTail = (unsigned char *)buf; pszTail = (unsigned char *)buf;
pszHead = (unsigned char *)buf; pszHead = (unsigned char *)buf;
pszTail += Result; pszTail += len;
pszNewHead = pszHead; pszNewHead = pszHead;
do // Loop through the network buffer transforming characters as necessary.
{ // The buffer will be empty after the transformation
// process since the buffer will contain only commands that are handled by the console API.
do {
pszHead = pszNewHead; pszHead = pszNewHead;
pszNewHead = ParseBuffer(pszHead, pszTail); pszNewHead = ParseBuffer(pszHead, pszTail, respbuf, resplen);
} while ((pszNewHead != pszHead) && (pszNewHead < pszTail));
if ( pszNewHead >= pszTail ) } while ((pszNewHead != pszHead) && (pszNewHead < pszTail) && (resplen == NULL || (resplen != NULL && *resplen == 0)));
{
// Everything is okay and we will reset variables and continue len = 0;
pszTail = pszHead = szBuffer;
}
else
{
MoveMemory(szBuffer, pszNewHead, pszTail - pszNewHead);
pszTail = szBuffer + (pszTail - pszNewHead);
pszHead = szBuffer;
}
}
return len; return len;
} }

View File

@ -36,8 +36,7 @@
#ifndef __TNNET_H #ifndef __TNNET_H
#define __TNNET_H #define __TNNET_H
int NetWriteString( char* pszString, size_t cbString); size_t telProcessNetwork (char *buf, size_t len, unsigned char **respbuf, size_t *resplen);
size_t telProcessNetwork ( char *buf, size_t len );
#endif #endif

View File

@ -362,6 +362,8 @@ fail:
debug("ERROR. Cannot setup TOKEN_PRIVILEGES (err=%u, ntStat=%x).", debug("ERROR. Cannot setup TOKEN_PRIVILEGES (err=%u, ntStat=%x).",
GetLastError(), ntStat); GetLastError(), ntStat);
} }
return exitCode;
} }

5
mux.c
View File

@ -1846,7 +1846,10 @@ mux_client_request_session(int fd)
} }
term = getenv("TERM"); term = getenv("TERM");
#ifdef WIN32_FIXME
if (term != NULL && _stricmp(term, "passthru") == 0)
term = "ansi";
#endif
buffer_init(&m); buffer_init(&m);
buffer_put_int(&m, MUX_C_NEW_SESSION); buffer_put_int(&m, MUX_C_NEW_SESSION);
buffer_put_int(&m, muxclient_request_id); buffer_put_int(&m, muxclient_request_id);

View File

@ -97,6 +97,9 @@
#include "kex.h" #include "kex.h"
#include "monitor_wrap.h" #include "monitor_wrap.h"
#include "sftp.h" #include "sftp.h"
#ifdef WIN32_FIXME
#include "console.h"
#endif
#ifdef WIN32_FIXME #ifdef WIN32_FIXME
@ -581,7 +584,6 @@ do_exec_no_pty(Session *s, const char *command)
* Create three socket pairs for stdin, stdout and stderr * Create three socket pairs for stdin, stdout and stderr
*/ */
pipe(pipein); pipe(pipein);
pipe(pipeout); pipe(pipeout);
pipe(pipeerr); pipe(pipeerr);
@ -590,8 +592,10 @@ do_exec_no_pty(Session *s, const char *command)
{ {
prot_scr_width = s->col; prot_scr_width = s->col;
prot_scr_height = s->row; prot_scr_height = s->row;
extern HANDLE hConsole ; extern HANDLE hInputConsole;
hConsole = GetStdHandle (STD_OUTPUT_HANDLE); extern HANDLE hOutputConsole ;
hInputConsole = GetConsoleInputHandle();
hOutputConsole = GetConsoleOutputHandle();
ConSetScreenSize( s->col, s->row ); ConSetScreenSize( s->col, s->row );
s->ptyfd = pipein[1]; // hConsole; // the pty is the Windows console output handle in our Win32 port s->ptyfd = pipein[1]; // hConsole; // the pty is the Windows console output handle in our Win32 port
} }
@ -616,12 +620,12 @@ do_exec_no_pty(Session *s, const char *command)
si.lpTitle = NULL; /* NULL means use exe name as title */ si.lpTitle = NULL; /* NULL means use exe name as title */
si.dwX = 0; si.dwX = 0;
si.dwY = 0; si.dwY = 0;
si.dwXSize = prot_scr_width; si.dwXSize = 640;
si.dwYSize = prot_scr_height; si.dwYSize = 480;
si.dwXCountChars = prot_scr_width; si.dwXCountChars = prot_scr_width;
si.dwYCountChars = prot_scr_height; si.dwYCountChars = prot_scr_height;
si.dwFillAttribute = 0; si.dwFillAttribute = 0;
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESIZE | STARTF_USECOUNTCHARS; // | STARTF_USESHOWWINDOW ; si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESIZE | STARTF_USECOUNTCHARS;
si.wShowWindow = 0; // FALSE ; si.wShowWindow = 0; // FALSE ;
si.cbReserved2 = 0; si.cbReserved2 = 0;
si.lpReserved2 = 0; si.lpReserved2 = 0;
@ -629,11 +633,7 @@ do_exec_no_pty(Session *s, const char *command)
si.hStdInput = (HANDLE) sfd_to_handle(pipein[0]); si.hStdInput = (HANDLE) sfd_to_handle(pipein[0]);
si.hStdOutput = (HANDLE) sfd_to_handle(pipeout[1]); si.hStdOutput = (HANDLE) sfd_to_handle(pipeout[1]);
si.hStdError = (HANDLE) sfd_to_handle(pipeerr[1]); si.hStdError = (HANDLE) sfd_to_handle(pipeerr[1]);
si.lpDesktop = NULL; //L"winsta0\\default"; si.lpDesktop = NULL;
//si.wShowWindow = SW_HIDE;
//si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
SetEnvironmentVariable("USER", s->pw->pw_name); SetEnvironmentVariable("USER", s->pw->pw_name);
SetEnvironmentVariable("USERNAME", s->pw->pw_name); SetEnvironmentVariable("USERNAME", s->pw->pw_name);
@ -694,7 +694,6 @@ do_exec_no_pty(Session *s, const char *command)
* token using CreateUserToken for non-password auth mechanisms. * token using CreateUserToken for non-password auth mechanisms.
*/ */
hToken = s -> authctxt -> methoddata; hToken = s -> authctxt -> methoddata;
@ -761,6 +760,7 @@ do_exec_no_pty(Session *s, const char *command)
if (original_command) if (original_command)
SetEnvironmentVariable("SSH_ORIGINAL_COMMAND", original_command); SetEnvironmentVariable("SSH_ORIGINAL_COMMAND", original_command);
// set better prompt for Windows cmd shell // set better prompt for Windows cmd shell
if (!s -> is_subsystem) { if (!s -> is_subsystem) {
snprintf(buf,sizeof buf, "%s@%s $P$G", s->pw->pw_name, getenv("COMPUTERNAME")); snprintf(buf,sizeof buf, "%s@%s $P$G", s->pw->pw_name, getenv("COMPUTERNAME"));
@ -779,22 +779,6 @@ do_exec_no_pty(Session *s, const char *command)
GetUserName(name, &size); GetUserName(name, &size);
//#ifndef WIN32_PRAGMA_REMCON
// if ( (!s -> is_subsystem) && (s ->ttyfd != -1)) {
// // Send to the remote client ANSI/VT Sequence so that they send us CRLF in place of LF
// char *inittermseq = "\033[20h\033[?7h\0" ; // LFtoCRLF AUTOWRAPON
// Channel *c=channel_by_id ( s->chanid );
// buffer_append(&c->input, inittermseq, strlen(inittermseq));
// channel_output_poll();
// }
//#endif
//if (s ->ttyfd != -1) {
// set the channel to tty interactive type
// Channel *c=channel_by_id ( s->chanid );
// c->isatty = 1;
//}
if ( (s->term) && (s->term[0]) ) if ( (s->term) && (s->term[0]) )
SetEnvironmentVariable("TERM", s->term); SetEnvironmentVariable("TERM", s->term);
/* /*
@ -898,7 +882,7 @@ do_exec_no_pty(Session *s, const char *command)
if ( s->ttyfd == -1) if ( s->ttyfd == -1)
session_set_fds(s, pipein[1], pipeout[0], pipeerr[0], s -> is_subsystem, 0); session_set_fds(s, pipein[1], pipeout[0], pipeerr[0], s -> is_subsystem, 0);
else else
session_set_fds(s, pipein[1], pipeout[0], pipeerr[0], s -> is_subsystem, 1); // tty interctive session session_set_fds(s, pipein[1], pipeout[0], pipeerr[0], s -> is_subsystem, 1); // tty interactive session
} }
else else
{ {
@ -2630,9 +2614,7 @@ session_pty_req(Session *s)
pty_setowner(s->pw, s->tty); pty_setowner(s->pw, s->tty);
/* Set window size from the packet. */ /* Set window size from the packet. */
#ifndef WIN32_FIXME
pty_change_window_size(s->ptyfd, s->row, s->col, s->xpixel, s->ypixel); pty_change_window_size(s->ptyfd, s->row, s->col, s->xpixel, s->ypixel);
#endif
#ifndef WIN32_PRAGMA_REMCON #ifndef WIN32_PRAGMA_REMCON
packet_check_eom(); packet_check_eom();
@ -2874,7 +2856,7 @@ session_pty_cleanup2(Session *s)
* Send exit signal to child 'cmd.exe' process. * Send exit signal to child 'cmd.exe' process.
*/ */
if (s -> pid != NULL) if (s -> pid != 0)
{ {
debug("Sending exit signal to child process [pid = %u]...", s -> pid); debug("Sending exit signal to child process [pid = %u]...", s -> pid);
@ -2969,7 +2951,7 @@ session_close_single_x11(int id, void *arg)
* Send exit signal to child 'cmd.exe' process. * Send exit signal to child 'cmd.exe' process.
*/ */
if (s -> pid != NULL) if (s && s -> pid != 0)
{ {
debug("Sending exit signal to child process [pid = %u]...", s -> pid); debug("Sending exit signal to child process [pid = %u]...", s -> pid);

21
ssh.c
View File

@ -115,10 +115,10 @@
#endif #endif
#ifdef WIN32_FIXME #ifdef WIN32_FIXME
#include <sys/stat.h> #include <sys/stat.h>
char dotsshdir[MAX_PATH]; char dotsshdir[MAX_PATH];
extern HANDLE hInputConsole;
#endif /* WIN32_FIXME */ #endif /* WIN32_FIXME */
@ -1462,8 +1462,9 @@ main(int ac, char **av)
if (tty_flag) { if (tty_flag) {
//AllocConsole(); //AllocConsole();
ConInputInitParams(); // init the Console input side with global parameters ConInputInitParams(); // init the Console input side with global parameters
HANDLE hInput = GetStdHandle(STD_INPUT_HANDLE); hInputConsole = GetStdHandle(STD_INPUT_HANDLE);
ConInit(STD_OUTPUT_HANDLE, TRUE); //init the output console surface for us to write ConInit(STD_OUTPUT_HANDLE, TRUE); //init the output console surface for us to write
ConClearScreen();
} }
else { else {
//extern int glob_itissshclient; //extern int glob_itissshclient;
@ -1484,7 +1485,7 @@ main(int ac, char **av)
#ifdef WIN32_FIXME #ifdef WIN32_FIXME
if (tty_flag) if (tty_flag)
ConUnInitWithRestore(); // restore terminal to previous settings if it was a tty session ConUnInit(); // restore terminal to previous settings if it was a tty session
#endif #endif
/* Kill ProxyCommand if it is running. */ /* Kill ProxyCommand if it is running. */
@ -1772,6 +1773,10 @@ ssh_session(void)
cp = getenv("TERM"); cp = getenv("TERM");
if (!cp) if (!cp)
cp = ""; cp = "";
#ifdef WIN32_FIXME
if (cp != NULL && _stricmp(cp, "passthru") == 0)
cp = "ansi";
#endif
packet_put_cstring(cp); packet_put_cstring(cp);
/* Store window size in the packet. */ /* Store window size in the packet. */
@ -1945,8 +1950,18 @@ ssh_session2_setup(int id, int success, void *arg)
packet_set_interactive(interactive, packet_set_interactive(interactive,
options.ip_qos_interactive, options.ip_qos_bulk); options.ip_qos_interactive, options.ip_qos_bulk);
#ifdef WIN32_FIXME
char *term = getenv("TERM");
if (term != NULL && _stricmp(term, "passthru") == 0)
term = "ansi";
client_session2_setup(id, tty_flag, subsystem_flag, term,
NULL, fileno(stdin), &command, environ);
#else
client_session2_setup(id, tty_flag, subsystem_flag, getenv("TERM"), client_session2_setup(id, tty_flag, subsystem_flag, getenv("TERM"),
NULL, fileno(stdin), &command, environ); NULL, fileno(stdin), &command, environ);
#endif
} }
/* open new channel for a session */ /* open new channel for a session */

View File

@ -239,10 +239,14 @@ pty_change_window_size(int ptyfd, u_int row, u_int col,
w.ws_ypixel = ypixel; w.ws_ypixel = ypixel;
(void) ioctl(ptyfd, TIOCSWINSZ, &w); (void) ioctl(ptyfd, TIOCSWINSZ, &w);
#else #else
extern HANDLE hConsole ; extern HANDLE hOutputConsole ;
hConsole = ptyfd; if (ptyfd != 0) {
hOutputConsole = (HANDLE)ptyfd;
}
#ifndef WIN32_PRAGMA_REMCON #ifndef WIN32_PRAGMA_REMCON
if (hOutputConsole != NULL) {
ConSetScreenSize(col, row); ConSetScreenSize(col, row);
}
#else #else
if (ptyfd > 0 ) if (ptyfd > 0 )
pty_change_window_size_oob(ptyfd, row, col, xpixel, ypixel); pty_change_window_size_oob(ptyfd, row, col, xpixel, ypixel);