Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

497 lines
14 KiB

#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);