extern long PASCAL ScreenWndProc(HWND,UINT,WPARAM,LPARAM);
#define SCR_isbold(x) (x & 0x01)
#define SCR_isundl(x) (x & 0x08)
#define SCR_isblnk(x) (x & 0x10)
#define SCR_isrev(x) (x & 0x40)
#define SCR_setrev(x) (x ^= 0x40)
#define SCR_isgrph(x) (x & 0x80)
#define SCR_inattr(x) (x & 0xd9)
#define SCR_graph(x) (x | 0x80)
#define SCR_notgraph(x) (x & 0x7F)
#define SCREEN_HANDLE 0
#define WM_MYSCREENCHAR (WM_USER+1)
#define WM_MYSCREENBLOCK (WM_USER+2)
#define WM_MYSYSCHAR (WM_USER+3)
#define WM_MYSCREENCLOSE (WM_USER+4)
#define WM_MYSCREENCHANGEBKSP (WM_USER+5)
#define WM_MYSCREENSIZE (WM_USER+6)
#define WM_NETWORKEVENT (WM_USER+7)
#define WM_HOSTNAMEFOUND (WM_USER+8)
#define WM_MYCURSORKEY (WM_USER+9)
#define FRAME_HEIGHT ((2* GetSystemMetrics(SM_CYFRAME))+GetSystemMetrics(SM_CYCAPTION)+GetSystemMetrics(SM_CYMENU)+3)
#define FRAME_WIDTH (2*GetSystemMetrics(SM_CXFRAME)+GetSystemMetrics(SM_CXVSCROLL))
#define TAB_SPACES 8
#define SPACE 32
#define ALERT 0x21
#define MAX_LINE_WIDTH 512
typedef struct SCREENLINE {
struct SCREENLINE *next;
struct SCREENLINE *prev;
int width;
char *text;
char *attrib;
char buffer[0];
} SCREENLINE;
typedef struct SCREEN {
LPSTR title;
HWND hWnd;
HWND hwndTel;
SCREENLINE *screen_top;
SCREENLINE *screen_bottom;
SCREENLINE *buffer_top;
SCREENLINE *buffer_bottom;
int ID;
int type;
int width;
int height;
int maxlines;
int numlines;
int savelines;
int ESscroll;
int attrib;
int x;
int y;
int Oldx;
int Oldy;
int Px;
int Py;
int Pattrib;
int VSIDC;
int DECAWM;
BOOL bWrapPending;
int DECCKM;
int DECPAM;
int IRM;
int escflg;
int top;
int bottom;
int parmptr;
int cxChar;
int cyChar;
BOOL bAlert;
int parms[6];
LOGFONT lf;
HFONT hSelectedFont;
HFONT hSelectedULFont;
char tabs[MAX_LINE_WIDTH];
struct SCREEN *next;
struct SCREEN *prev;
} SCREEN;
typedef struct CONFIG {
LPSTR title;
HWND hwndTel;
int ID;
int type;
int height;
int width;
int maxlines;
int backspace;
int ESscroll;
int VSIDC;
int DECAWM;
int IRM;
} CONFIG;
#define TELNET_SCREEN 0
#define CONSOLE_SCREEN 1
#define IDM_FONT 100
#define IDM_BACKSPACE 101
#define IDM_DELETE 102
#define IDM_ABOUT 103
#define IDM_HELP_INDEX 104
#define IDM_EXIT 105
#define HELP_FILE "ktelnet.hlp"
#define IDM_COPY 200
#define IDM_PASTE 201
#define IDM_DEBUG 202
#define TIMER_TRIPLECLICK 1000
#define IDC_ALLOCFAIL 1
#define IDC_LOCKFAIL 2
#define IDC_LOADSTRINGFAIL 3
#define IDC_FONT 6
#define DESIREDPOINTSIZE 12
void NEAR InitializeStruct(
WORD wCommDlgType,
LPSTR lpStruct,
HWND hWnd);
void ScreenInit(
HINSTANCE hInstance);
void SetScreenInstance(
HINSTANCE hInstance);
SCREENLINE *ScreenNewLine();
void ScreenBell(
SCREEN *pScr);
void ScreenBackspace(
SCREEN *pScr);
void ScreenTab(
SCREEN *pScr);
void ScreenCarriageFeed(
SCREEN *pScr);
int ScreenScroll(
SCREEN *pScr);
void DeleteTopLine(
SCREEN *pScr);
void ScreenEm(
LPSTR c,
int len,
SCREEN *pScr);
SCREENLINE *GetScreenLineFromY(
SCREEN *pScr,
int y);
SCREENLINE *ScreenClearLine(
SCREEN *pScr,
SCREENLINE *pScrLine);
void ScreenUnscroll(
SCREEN *pScr);
void ScreenELO(
SCREEN *pScr,
int s);
void ScreenEraseScreen(
SCREEN *pScr);
void ScreenTabClear(
SCREEN *pScr);
void ScreenTabInit(
SCREEN *pScr);
void ScreenReset(
SCREEN *pScr);
void ScreenIndex(
SCREEN *pScr);
void ScreenWrapNow(
SCREEN *pScr,
int *xp,
int *yp);
void ScreenEraseToEOL(
SCREEN *pScr);
void ScreenEraseToBOL(
SCREEN *pScr);
void ScreenEraseLine(
SCREEN *pScr,
int s);
void ScreenEraseToEndOfScreen(
SCREEN *pScr);
void ScreenRange(
SCREEN *pScr);
void ScreenAlign(
SCREEN *pScr);
void ScreenApClear(
SCREEN *pScr);
void ScreenSetOption(
SCREEN *pScr,
int toggle);
BOOL ScreenInsChar(
SCREEN *pScr,
int x);
void ScreenSaveCursor(
SCREEN *pScr);
void ScreenRestoreCursor(
SCREEN *pScr);
void ScreenDraw(
SCREEN *pScr,
int x,
int y,
int a,
int len,
char *c);
void ScreenCursorOff(
SCREEN *pScr);
void ScreenCursorOn(
SCREEN *pScr);
void ScreenDelChars(
SCREEN *pScr,
int n);
void ScreenRevIndex(
SCREEN *pScr);
void ScreenDelLines(
SCREEN *pScr,
int n,
int s);
void ScreenInsLines(
SCREEN *pScr,
int n,
int s);
#if ! defined(NDEBUG)
BOOL CheckScreen(
SCREEN *pScr);
#endif
void ProcessFontChange(
HWND hWnd);
void Edit_LbuttonDown(
HWND hWnd,
LPARAM lParam);
void Edit_LbuttonDblclk(
HWND hWnd,
LPARAM lParam);
void Edit_LbuttonUp(
HWND hWnd,
LPARAM lParam);
void Edit_TripleClick(
HWND hWnd,
LPARAM lParam);
void Edit_MouseMove(
HWND hWnd,
LPARAM lParam);
void Edit_ClearSelection(
SCREEN *pScr);
void Edit_Copy(
HWND hWnd);
void Edit_Paste(
HWND hWnd);
SCREEN *InitNewScreen(
CONFIG *Config);