|
|
// scraper.cpp : This file contains the
// Created: Dec '97
// History:
// Copyright (C) 1997 Microsoft Corporation
// All rights reserved.
// Microsoft Confidential
#ifndef __SCRAPER__H__
#define __SCRAPER__H__
//#define IS_CONTROL_CHAR( ucChar ) ( ( ucChar ) < 32 )
#define MAX_SOCKET_BUFFER_SIZE ( 8 * 1024 )
#define DEFAULT_SEND_BUFFER_SIZE ( 4 * 1024 )
#define SMALL_ARRAY 64
#define LNM 20
#define VT_ESC 0x1B
#define DEFAULT_TERMCAP L"termcap"
#define POLL_INTERVAL 1000 //Milli Secs
#define MIN_POLL_INTERVAL 100 //Milli Secs
#define CONVERT_TO_MILLI_SECS( dwNum ) ( dwNum ) = ( dwNum ) * 1000
#define CTRLC 0x03
#define ESC '\033'
#define VTNT "vtnt"
#define VT100 "vt100"
#define VT52 "vt52"
#define VT80 "vt80"
#define ANSI "ansi"
#define DELTA 100
#define TERMVT52 0x0001
#define TERMVT100 0x0002
#define TERMVT80 0x0004
#define TERMVTNT 0x0008
#define TERMANSI 0x0010
#define VS_O 24
#define VKEY_CTRL_BREAK 0x03
#define VS_MENU 56
#define VS_DELETE 83
#define VS_ESCAPE 1
#define VS_UP 72
#define VS_DOWN 80
#define VS_LEFT 75
#define VS_RIGHT 77
#define VS_OEM_4 26
#define VS_NEXT 81
#define VS_PRIOR 33
#define VS_END 79
#define VS_INSERT 82
#define VS_HOME 76
#define VS_PAUSE 69
#define VS_F1 59
#define VS_F2 60
#define VS_F3 61
#define VS_F4 62
#define VS_F5 63
#define VS_F6 64
#define VS_F7 65
#define VS_F8 66
#define VS_F9 67
#define VS_F10 68
#define VS_F11 87
#define VS_F12 88
#define VT302_NEXT 6
#define VT302_PRIOR 5
#define VT302_END 4
#define VT302_INSERT 2
#define VT302_HOME 1
#define VT302_PAUSE 'P'
#define VT302_F5 15
#define VT302_F6 17
#define VT302_F7 18
#define VT302_F8 19
#define VT302_F9 20
#define VT302_F10 21
#define VT302_F11 23
#define VT302_F12 24
typedef struct { UINT dwInputTimerId; HANDLE hTimerExpired; } TimerContext;
#define COMPARE_AND_UPDATE( wRows, wCols, pCurrent,pLastSeen,CSBI,LastCSBI,fDiff) \
(m_dwCurrentCodePage == 932 ||m_dwCurrentCodePage == 949 || m_dwCurrentCodePage == 950 || m_dwCurrentCodePage == 936) ? \ CompareAndUpdateVT80(wRows,wCols,pCurrent,pLastSeen,CSBI,LastCSBI,fDiff) : \ CompareAndUpdateVT100(wRows,wCols,pCurrent,pLastSeen,CSBI,LastCSBI,fDiff)
enum { IP_INIT, IP_ESC_RCVD, IP_ESC_BRACKET_RCVD, IP_ESC_O_RCVD, IP_ESC_BRACKET_DIGIT_RCVD };
#define ISSESSION_TIMEOUT_DISABLED( dwIdleSessionTimeOut ) ( dwIdleSessionTimeOut == ~0 )
class CSession;
class CScraper {
CSession *m_pSession;
PCHAR_INFO pLastSeen; PCHAR_INFO pCurrent; CONSOLE_SCREEN_BUFFER_INFO CSBI; CONSOLE_SCREEN_BUFFER_INFO LastCSBI;
DWORD m_dwCurrentCodePage; DWORD m_bCheckForScrolling; DWORD m_dwInputSequneceState; DWORD m_dwDigitInTheSeq;
bool CompareAndUpdateVT80( WORD, WORD, PCHAR_INFO, PCHAR_INFO, PCONSOLE_SCREEN_BUFFER_INFO, PCONSOLE_SCREEN_BUFFER_INFO, bool * );
bool CompareAndUpdateVT100( WORD, WORD, PCHAR_INFO, PCHAR_INFO, PCONSOLE_SCREEN_BUFFER_INFO, PCONSOLE_SCREEN_BUFFER_INFO, bool * );
bool CompareAndUpdateVTNT( WORD, WORD, PCHAR_INFO, PCHAR_INFO, PCONSOLE_SCREEN_BUFFER_INFO, PCONSOLE_SCREEN_BUFFER_INFO, bool * );
bool SendVTNTData( WORD, COORD, COORD, SMALL_RECT* , CHAR_INFO* );
void SendChar( char ); void SendString( LPSTR ); void SendFmt( LPSTR , ... ); bool ProcessEnhancedKeys( unsigned char, char*, bool ); bool GetRegistryValues( void ); void SendColorInfo( WORD ); inline void EchoCharBackToClient( UCHAR ); void EchoVtntCharToClient( INPUT_RECORD * );
void LoadStrings( void ); bool InitializeNonVtntTerms( void ); bool SetWindowInfo();
protected: DWORD m_dwPollInterval; DWORD m_dwHowLongIdle; DWORD m_dwTerm;
HANDLE m_hConBufIn; HANDLE m_hConBufOut; void Init( CSession * ); bool InitSession( void ); bool OnWaitTimeOut(); bool EmulateAndWriteToCmdConsoleInput(); DWORD WriteAKeyToCMD( WORD, WORD, CHAR, DWORD ); void Shutdown(); void DeleteCMStrings( void ); bool InitTerm( void ); void SendBytes( PUCHAR, DWORD ); bool TransmitBytes( PUCHAR, DWORD ); bool Transmit( ); bool IsSessionTimedOut( void ); bool SetCmdInfo( void ); public: void WriteMessageToCmd( WCHAR [] ); CScraper(); virtual ~CScraper(); };
void DeleteCMStrings(); void LoadStrings();
#endif __SCRAPER__H__
|