|
|
#define VT52 1
/* indices for menus */ #define imenuFile 0
#define imenuEdit 1
#define imenuOptions 2
#define imenuMachine 3
#define imenuHelp 4
/* display rows array indices */ #define idwDR25 0
#define idwDR43 1
#define idwDR50 2
#define idwDRCustom 3
#define cXNSMachines 6
/* resource #defines */ #define IDM_CONNECT 100
#define IDM_HANGUP 101
#define IDM_EXIT 102
#define IDM_MARK 120
#define IDM_COPY 121
#define IDM_PASTE 122
#define IDM_STOPPASTE 123
#define IDM_TRIMSPACE 124
#define IDM_QUICKEDIT 125
/* these four menu items must be in consecutive order */ #define IDM_25LINES 200
#define IDM_43LINES 201
#define IDM_50LINES 202
#define IDM_CUSTOMLINES 203
#define IDM_FONTS 204
#define IDM_AUTOFONTS 205
#define IDM_SMOOTHSCROLL 206
#define IDM_NODOWNLOADPROMPT 207
#define IDM_HIDEMENU 208
/* these four must be in consecutive order */ #define IDM_CONNECTLOSTNONE 210
#define IDM_CONNECTLOSTDLG 211
#define IDM_CONNECTLOSTRETRY 212
#define IDM_CONNECTLOSTEXIT 213
#define IDM_NOCONNECTRETRYDLG 220
#define IDM_LOCALECHO 221
#define IDM_TEXTCOLOUR 222
#define IDM_BACKCOLOUR 223
#define IDM_UNDERLINECURSOR 224
#define IDM_BLINKCURSOR 225
#define IDM_VT100CURSORKEYS 226
#define IDM_VT52MODE 227
/* these six menu items must be in consecutive order */ #define IDM_BBS1 300
#define IDM_BBS2 301
#define IDM_CHAT1 302
#define IDM_HEXNUT 303
#define IDM_INGATE 304
#define IDM_WINGNUT 305
/* these four menu items must be in consecutive order */ #define IDM_MACHINE1 306
#define IDM_MACHINE2 307
#define IDM_MACHINE3 308
#define IDM_MACHINE4 309
#define IDM_ABOUT 400
#define IDM_HELP 401
#define IDD_CONNECT 110
#define IDD_DISPLAYLINES 111
#define IDD_AUTORETRY 112
#define IDD_CONNECTXNS 113
#define CID_HOSTNAME 100
#define CID_DISPLAYLINE 101
#define CID_USESTDNETBIOS 102
#define IDS_KEY 100
#define IDS_WINPOSTOP 101
#define IDS_WINPOSLEFT 102
#define IDS_ROWS 103
#define IDS_COLUMNS 104
#define IDS_MACHINE1 105
#define IDS_MACHINE2 106
#define IDS_MACHINE3 107
#define IDS_MACHINE4 108
#define IDS_LASTMACHINE 109
#define IDS_TEXTCOLOUR 110
#define IDS_BKGCOLOUR 111
#define IDS_FONTNAME 112
#define IDS_FONTHEIGHT 113
#define IDS_FONTWEIGHT 114
#define IDS_FONTSTYLE 115
#define IDS_SMOOTHSCROLL 116
#define IDS_DEBUGFLAGS 117
#define IDS_PROMPTFLAGS 118
#define IDS_RETRYSECONDS 119
#define IDS_XNSSTATE 120
#define IDS_CURSOREDIT 121
#define wKeyPressed ((WORD)0x8000)
#define SV_PROGRESS (WM_USER+350)
#define SV_END (WM_USER+351)
#define SV_DATABUF (0x4000)
#define SV_DONE 0
#define SV_CONNECT 1
#define SV_DISCONNECT 2
#define SV_HANGUP 3
#define SV_QUIT 4
typedef struct _SendVTPInfo { LONG lExit; LONG lCleanup; HANDLE hthread; HANDLE hfile; UCHAR *puchBuffer; DWORD cbFile; DWORD cbReadTotal; volatile DWORD dwCommand; DWORD dwThreadId; int nSessionNumber; } SVI;
/* Data structure and #defines for NetBios stuff */ #define READ_BUF_SZ (512)
#define DATA_BUF_SZ (2*READ_BUF_SZ)
#define nSessionNone ((int)-1)
typedef struct _NetOBJData { char szHostName[NAMSZ+1]; char szMyName[NAMSZ+1]; int SessionNumber; NCB ncbRecv; LPSTR lpReadBuffer; WORD iHead, iTail; char achData[DATA_BUF_SZ]; } NETDATA, *LPNETDATA;
#define dwMaxRows (99)
#define dwDefaultRows (25)
#define dwMinRows (16)
#define dwMaxColumns (255)
#define dwDefaultColumns (80)
#define dwMinColumns (32)
#define cchMaxHostName (NAMSZ+1)
#define cMachinesMax (4)
#define fdwItalic (1)
#define fdwUnderline (2)
#define fdwStrikeOut (4)
#define dwRetrySecondsDefault ((DWORD)5)
/* don't prompt for dest. dir on dl */ #define fdwSuppressDestDirPrompt ((DWORD)0x01)
/* don't show the connection lost dialog */ #define fdwNoConnectLostDlg ((DWORD)0x02)
/* don't show the connect auto-retry dialog */ #define fdwNoConnectRetryDlg ((DWORD)0x04)
#define mdwConnectLost ((DWORD)0x18)
#define sConnectLost 3
#define ConnectLostMode(ui) ((((ui).fPrompt &mdwConnectLost) >> sConnectLost) + IDM_CONNECTLOSTNONE)
#define SetConnectLostMode(ui, val) ((ui).fPrompt &= ~mdwConnectLost, (ui).fPrompt |= ((val) - IDM_CONNECTLOSTNONE) << sConnectLost)
#define fdwAutoFonts ((DWORD)0x40)
/* Mask off high bit for ASCII-only */ #define fdwASCIIOnly ((DWORD)0x01)
/* Display output stream for debugging */ #define fdwDebugOutput ((DWORD)0x02)
/* Don't pass on VT100 function or cursor keys */ #define fdwNoVT100Keys ((DWORD)0x04)
/* Replace TABs by up to 8 spaces */ #define fdwTABtoSpaces ((DWORD)0x08)
/* Echo user input to display */ #define fdwLocalEcho ((DWORD)0x0010)
/* VT100 Cursor Keys mode */ #define fdwVT100CursorKeys ((DWORD)0x0020)
/* VT52 Mode */ #define fdwVT52Mode ((DWORD)0x0040)
/* Is XNS transport installed? */ #define fdwXNSAvailable ((DWORD)0x01)
/* Use XNS for this call? */ #define fdwUseXNS ((DWORD)0x02)
#define fdwXNSConnect (fdwXNSAvailable | fdwUseXNS)
/* Is the cursor a block or underline? */ #define fdwCursorUnderline ((DWORD)0x01)
/* Is the cursor supposed to blink? */ #define fdwCursorBlink ((DWORD)0x02)
/* Are we in QuickEdit mode? */ #define fdwQuickEditMode ((DWORD)0x04)
/* Trim whitespace at end of every line? */ #define fdwTrimEndWhitespace ((DWORD)0x08)
typedef struct _USERINFO { DWORD dwTop; /* position of top side of display */ DWORD dwLeft; /* position of left side of display */ DWORD dwMaxRow; /* number of rows in display */ DWORD dwMaxCol; /* number of columns in display */ DWORD clrText; /* colour of text in display */ DWORD clrBk; /* colour of background in display */ DWORD fSmoothScroll; /* scroll window contents smoothly */ DWORD fPrompt; /* prompt bit flags */ DWORD fDebug; /* Debug bit flags */ DWORD fCursorEdit; /* Cursor Flags */ DWORD dwRetrySeconds; /* Number of seconds between retries */ DWORD fXNS; /* if XNS being used */ DWORD cMachines; /* # of machines in rgchMachine[] list */ char rgchMachine[cMachinesMax][cchMaxHostName]; char rgchLastMachine[cchMaxHostName]; /* last machine connected */ LOGFONT lf; /* description of font used */ } UI;
#define uTerminalTimerID ((UINT)2)
#define uCursorBlinkMsecs ((UINT)250)
/* VT100 Flags */ #define dwVTArrow ((DWORD)0x0001)
#define dwVTKeypad ((DWORD)0x0002)
#define dwVTWrap ((DWORD)0x0004)
#define dwVT52 ((DWORD)0x0008)
#define dwVTCursor ((DWORD)0x0010)
#define dwVTScrSize ((DWORD)0x0020)
#define dwDECCOLM ((DWORD)0x0040)
#define dwDECSCNM ((DWORD)0x0080)
#define dwLineMode ((DWORD)0x0100)
#define dwInsertMode ((DWORD)0x0200)
#define dwVT52Graphics ((DWORD)0x0400)
#define dwKeyLock ((DWORD)0x0800)
#define FIsVTArrow(ptrm) ((ptrm)->dwVT100Flags & dwVTArrow)
#define SetVTArrow(ptrm) ((ptrm)->dwVT100Flags |= dwVTArrow)
#define ClearVTArrow(ptrm) ((ptrm)->dwVT100Flags &= ~dwVTArrow)
#define FIsVTKeypad(ptrm) ((ptrm)->dwVT100Flags & dwVTKeypad)
#define SetVTKeypad(ptrm) ((ptrm)->dwVT100Flags |= dwVTKeypad)
#define ClearVTKeypad(ptrm) ((ptrm)->dwVT100Flags &= ~dwVTKeypad)
#define FIsVTWrap(ptrm) ((ptrm)->dwVT100Flags & dwVTWrap)
#define SetVTWrap(ptrm) ((ptrm)->dwVT100Flags |= dwVTWrap)
#define ClearVTWrap(ptrm) ((ptrm)->dwVT100Flags &= ~dwVTWrap)
#define FIsVT52(ptrm) ((ptrm)->dwVT100Flags & dwVT52)
#define SetVT52(ptrm) ((ptrm)->dwVT100Flags |= dwVT52)
#define ClearVT52(ptrm) ((ptrm)->dwVT100Flags &= ~dwVT52)
#define FIsVTCursor(ptrm) ((ptrm)->dwVT100Flags & dwVTCursor)
#define SetVTCursor(ptrm) ((ptrm)->dwVT100Flags |= dwVTCursor)
#define ClearVTCursor(ptrm) ((ptrm)->dwVT100Flags &= ~dwVTCursor)
#define FIsVTScrSize(ptrm) ((ptrm)->dwVT100Flags & dwVTScrSize)
#define SetVTScrSize(ptrm) ((ptrm)->dwVT100Flags |= dwVTScrSize)
#define ClearVTScrSize(ptrm) ((ptrm)->dwVT100Flags &= ~dwVTScrSize)
#define FIsDECCOLM(ptrm) ((ptrm)->dwVT100Flags & dwDECCOLM)
#define SetDECCOLM(ptrm) ((ptrm)->dwVT100Flags |= dwDECCOLM)
#define ClearDECCOLM(ptrm) ((ptrm)->dwVT100Flags &= ~dwDECCOLM)
#define FIsDECSCNM(ptrm) ((ptrm)->dwVT100Flags & dwDECSCNM)
#define SetDECSCNM(ptrm) ((ptrm)->dwVT100Flags |= dwDECSCNM)
#define ClearDECSCNM(ptrm) ((ptrm)->dwVT100Flags &= ~dwDECSCNM)
#define FIsLineMode(ptrm) ((ptrm)->dwVT100Flags & dwLineMode)
#define SetLineMode(ptrm) ((ptrm)->dwVT100Flags |= dwLineMode)
#define ClearLineMode(ptrm) ((ptrm)->dwVT100Flags &= ~dwLineMode)
#define FIsInsertMode(ptrm) ((ptrm)->dwVT100Flags & dwInsertMode)
#define SetInsertMode(ptrm) ((ptrm)->dwVT100Flags |= dwInsertMode)
#define ClearInsertMode(ptrm) ((ptrm)->dwVT100Flags &= ~dwInsertMode)
#define FIsVT52Graphics(ptrm) ((ptrm)->dwVT100Flags & dwVT52Graphics)
#define SetVT52Graphics(ptrm) ((ptrm)->dwVT100Flags |= dwVT52Graphics)
#define ClearVT52Graphics(ptrm) ((ptrm)->dwVT100Flags &= ~dwVT52Graphics)
#define FIsKeyLock(ptrm) ((ptrm)->dwVT100Flags & dwKeyLock)
#define SetKeyLock(ptrm) ((ptrm)->dwVT100Flags |= dwKeyLock)
#define ClearKeyLock(ptrm) ((ptrm)->dwVT100Flags &= ~dwKeyLock)
typedef struct _TERM { DWORD dwCurLine; DWORD dwCurChar; DWORD dwEscCodes[10]; DWORD cEscParams; DWORD dwScrollTop; DWORD dwScrollBottom; DWORD fEsc; DWORD dwSum; UCHAR *puchCharSet; UINT uTimer; DWORD cTilde; DWORD dwVT100Flags; BOOL fRelCursor; BOOL fSavedState; BOOL fInverse; BOOL fHideCursor; BOOL fCursorOn; UCHAR rgchBufferText[256]; int cchBufferText; DWORD dwCurCharBT; DWORD dwCurLineBT; BOOL fInverseBT;
DWORD dwSaveChar; DWORD dwSaveLine; DWORD dwSaveRelCursor; } TRM;
#define uRetryTimerID ((UINT)1)
typedef struct _AUTORETRY { HWND hwnd; LPSTR szHostName; LPNETDATA lpData; UINT uTimer; } AR;
#define dwMarkNone ((DWORD)0)
#define dwMarkKeyboard ((DWORD)0x01)
#define dwMarkMouse ((DWORD)0x02)
#define dwNothingChanged ((DWORD)0)
#define dwYChanged ((DWORD)0x01)
#define dwXChanged ((DWORD)0x02)
#define dwForceNone ((DWORD)0)
#define dwForceOn ((DWORD)0x01)
#define dwForceOff ((DWORD)0x02)
#define fdwMarkMode ((DWORD)0x01)
#define fdwSelected ((DWORD)0x02)
#define fdwShowCursor ((DWORD)0x04)
#define fdwCursorOn ((DWORD)0x08)
#define fdwDataPending ((DWORD)0x10)
#define fdwMouseSelected ((DWORD)0x20)
#define fdwMouseCaptured ((DWORD)0x40)
#define fdwMouseBtnDwnIgnore ((DWORD)0x80)
#define fdwDontResetSelection ((DWORD)0x100)
#define FInMarkMode(_spb) (!!((_spb).dwFlags & fdwMarkMode))
#define FSelected(_spb) (!!((_spb).dwFlags & fdwSelected))
#define FShowCursor(_spb) (!!((_spb).dwFlags & fdwShowCursor))
#define FCursorOn(_spb) (!!((_spb).dwFlags & fdwCursorOn))
#define FDataPending(_spb) (!!((_spb).dwFlags & fdwDataPending))
#define FMouseSelected(_spb) (!!((_spb).dwFlags & fdwMouseSelected))
#define FMouseCaptured(_spb) (!!((_spb).dwFlags & fdwMouseCaptured))
#define FMouseBtnDwnIgnore(_spb) (!!((_spb).dwFlags & fdwMouseBtnDwnIgnore))
#define FCanPaste(_pwi) (IsClipboardFormatAvailable(CF_TEXT) && \
((_pwi)->nd.SessionNumber != nSessionNone) && \ ((_pwi)->svi.hthread == NULL) && \ !FInMarkMode((_pwi)->spb))
typedef struct _SPB { POINT ptCursor; /* cursor point */ POINT ptAnchor; /* anchor point */ RECT rectSelect; /* selection rect */ DWORD dwFlags; WPARAM wData; } SPB;
/* Window Information */
#define WL_VTPWI (0)
typedef struct _WI { NETDATA nd; TRM trm; DWORD ichVTPXfer; SVI svi; SPB spb; CHOOSEFONT cf; } WI;
extern UI ui;
extern int iCursorHeight; /* height of cursor */ extern int iCursorWidth; /* width of cursor */
extern int hPos, vPos; /* Scroll bar positions */
extern BOOL fConnected; /* if we're connected to a machine */ extern BOOL fHungUp; extern BOOL fInBackground; extern BOOL fFlashWindow;
extern HWND hwndMain; /* HANDLE to main display window */
extern DWORD *aixPos; /* horizontal position of character columns */ extern DWORD *aiyPos; /* vertical position of character rows */ extern UCHAR **apcRows; /* array of char ptrs of Rows */ extern UCHAR *rgchRowEmpty; /* template of empty row for quick-copying */
extern UCHAR *pchNBBuffer;
extern DWORD dwMarkMode;
extern ULONG imenuMRU;
extern HFONT hfontDisplay; /* display font */ extern DWORD rgdwCustColours[16]; /* custom colour array */
extern LPSTR szTextPaste; extern char *pchTextPaste; extern DWORD cchTextPaste; extern DWORD cBlocks;
extern UCHAR rgchHostName[cchMaxHostName]; /* name of host we're connected to */ #if 0
extern char rgchDbgBfr[80]; #endif
extern DWORD rgdwDisplayRows[4];
extern UCHAR rgchNormalChars[256]; extern UCHAR rgchAlternateChars[256];
int PASCAL WinMain(HINSTANCE, HINSTANCE, LPSTR, int); BOOL FInitApplication( HINSTANCE ); BOOL FInitInstance(HINSTANCE, int); LONG APIENTRY MainWndProc(HWND, UINT, WPARAM, LPARAM); BOOL APIENTRY About(HWND, UINT, WPARAM, LPARAM); BOOL APIENTRY Connect(HWND, UINT, WPARAM, LPARAM); BOOL APIENTRY DisplayLines(HWND, UINT, WPARAM, LPARAM); void CenterDialog(HWND, HWND); void GetUserSettings(HINSTANCE, UI *); void SetUserSettings(HINSTANCE, UI *);
HMENU HmenuGetMRUMenu(HWND, UI *); DWORD DwIsXNSMachine(LPSTR, DWORD);
/* netio.c */ BOOL FConnectToServer(HWND, LPSTR, LPNETDATA, BOOL);
BOOL FPostReceive( LPNETDATA ); WORD WGetData(LPNETDATA, LPSTR, WORD); void CALLBACK NBReceiveData( NCB * );
BOOL FVtpXferStart(HWND, WI *, int); BOOL FVtpXferEnd(HWND, DWORD); BOOL FGetFileName(HWND, char *, char *); DWORD WINAPI SVReceive(SVI *); BOOL FHangupConnection(HWND, LPNETDATA); BOOL APIENTRY ConnectAutoRetry(HWND, UINT, WPARAM, LPARAM);
BOOL FIsXenixAvailable( void );
/* mcp.c */ void MarkModeOn(HWND, DWORD); void MarkModeOff( HWND ); void DoCursorFlicker(HWND, DWORD); void InvertSelection(HWND, RECT *); void ExtendSelection(HWND, POINT *, DWORD); void HandleMCPKeyEvent(HWND, WPARAM, LPARAM); void HandleMCPMouseEvent(HWND, UINT, WPARAM, LPARAM); void DoCopy( HWND ); void DoPaste( HWND ); void StopPaste( HWND ); void SetWindowTitle(HWND, DWORD, LPSTR);
/* trmio.c */ void ResizeWindow( HWND ); void RecalcWindowSize( HWND ); void DoTermReset(HWND, TRM *, HDC); void DoIBMANSIOutput(HWND, TRM *, DWORD, UCHAR *); void Paint(HWND, WI *); void CursorOn( HWND ); void CursorOff( HWND ); void SetDisplaySize(HWND, DWORD, DWORD *); void HandleCharEvent(HWND, WI *, WPARAM, LPARAM); BOOL FHandleKeyDownEvent(HWND, WI *, WPARAM, LPARAM);
|