|
|
/*---------------------------------------------------------------------------*\
| WINCHAT MAIN HEADER FILE | This is the main header file for the application. | | | Copyright (c) Microsoft Corp., 1990-1993 | | created: 01-Nov-91 | history: 01-Nov-91 <clausgi> created. | 29-Dec-92 <chriswil> port to NT, cleanup. | 19-Oct-93 <chriswil> unicode enhancements from a-dianeo. | \*---------------------------------------------------------------------------*/
//////////// compile options //////////////
#define BRD 6
///////////////////////////////////////////
#ifdef WIN16
#define APIENTRY FAR PASCAL
#define ERROR_NO_NETWORK 0
#endif
#ifdef PROTOCOL_NEGOTIATE
typedef DWORD PCKT; // Bitfield capabilities.
#define CHT_VER 0x100 // Version 1.00 of WinChat.
#define PCKT_TEXT 0x00000001 // All versions had better support this.
#endif
// Constants.
//
#define SZBUFSIZ 255 // maximum size buffer.
#define SMLRCBUF 32 // size A .rc file buffer
#define BIGRCBUF 64 // size B .rc file buffer
#define UNCNLEN 32 //
#define CTRL_V 22 // Edit-control paste acccelerator.
#define IDACCELERATORS 1 // Menu accelerator resource ID.
// Menuhelp Constants.
//
#define MH_BASE 0x1000
#define MH_POPUPBASE 0x1100
// Child-Window ID's for send/receive windows.
//
#define ID_BASE 0x0CAC
#define ID_EDITSND (ID_BASE + 0)
#define ID_EDITRCV (ID_BASE + 1)
// Child-Window Identifiers for toolbar/statusbar.
//
#define IDC_TOOLBAR 200
#define IDBITMAP 201
#define IDSTATUS 202
// Menu Identifiers.
//
#define IDM_EDITFIRST IDM_EDITUNDO
#define IDM_EDITLAST IDM_EDITSELECT
#define IDM_ABOUT 100
#define IDM_DIAL 101
#define IDM_HANGUP 102
#define IDM_ANSWER 103
#define IDM_EXIT 104
#define IDM_EDITUNDO 105
#define IDM_EDITCUT 106
#define IDM_EDITCOPY 107
#define IDM_EDITPASTE 108
#define IDM_EDITCLEAR 109
#define IDM_EDITSELECT 110
#define IDM_SOUND 111
#define IDM_PREFERENCES 112
#define IDM_FONT 113
#define IDM_CONTENTS 114
#define IDM_SEARCHHELP 115
#define IDM_HELPHELP 116
#define IDM_COLOR 117
#define IDM_TOPMOST 118
#define IDM_CLOCK 119
#define IDM_TOOLBAR 120
#define IDM_STATUSBAR 121
#define IDM_SWITCHWIN 122
#define IDX_DEFERFONTCHANGE 123
#define IDX_UNICODECONV 126
#define IDM_FIRST IDM_ABOUT
#define IDH_SELECTCOMPUTER 200
#ifdef PROTOCOL_NEGOTIATE
#define IDX_DEFERPROTOCOL 124
#endif
// Resource-String Identifiers.
//
#define IDS_HELV 1
#define IDS_APPNAME 2
#define IDS_LONGAPPNAME 3
#define IDS_SYSERR 4
#define IDS_CONNECTTO 5
#define IDS_ALREADYCONNECT 6
#define IDS_ABANDONFIRST 7
#define IDS_DIALING 8
#define IDS_YOUCALLER 9
#define IDS_NOTCALLED 10
#define IDS_NOTCONNECTED 11
#define IDS_CONNECTABANDON 12
#define IDS_HANGINGUP 13
#define IDS_HASTERMINATED 14
#define IDS_CONNECTEDTO 15
#define IDS_ISCALLING 16
#define IDS_CONNECTING 17
#define IDS_SERVICENAME 18
#define IDS_DIALHELP 19
#define IDS_ANSWERHELP 20
#define IDS_HANGUPHELP 21
#define IDS_NOCONNECT 22
#define IDS_ALWAYSONTOP 23
#define IDS_NOCONNECTTO 24
#define IDS_NONETINSTALLED 25
#define IDS_INISECTION 26
#define IDS_INIPREFKEY 27
#define IDS_INIFONTKEY 28
#define IDS_INIRINGIN 29
#define IDS_INIRINGOUT 30
#define IDS_TSNOTSUPPORTED 31
// Edit-Control Notification codes. These
// are sent to the parent of the edit
// control just as any system-notify is.
//
#define EN_CHAR 0x060F
#define EN_PASTE 0x0610
// FE specific
#define EN_DBCS_STRING 0x0611
// Chat formats. These are used to identify
// the type of data being transfered in a
// DDE transaction.
//
#define CHT_CHAR 0x100
#define CHT_FONTA 0x101
#define CHT_PASTEA 0x102
#define CHT_UNICODE 0x110
#define CHT_FONTW 0x111
#define CHT_PASTEW 0x112
// FE specific (not Taiwan)
#define CHT_DBCS_STRING 0x103
#ifdef PROTOCOL_NEGOTIATE
#define CHT_PROTOCOL 0x105
#endif
#if 0
#define CHT_HPENDATA 0x103 // defined in WFW311. Conflicts w/DBCS.
#define CHT_CLEARPENDATA 0x104 //
#define CHT_ADDCHATTER 0x106 //
#define CHT_DELCHATTER 0x107 //
#define CHT_CHARBURST 0x108 //
#endif
// Window Related Functions (winchat.c)
//
int PASCAL WinMain(HINSTANCE,HINSTANCE,LPSTR,int); LRESULT CALLBACK MainWndProc(HWND,UINT,WPARAM,LPARAM); LRESULT CALLBACK EditProc(HWND,UINT,WPARAM,LPARAM); BOOL FAR InitApplication(HINSTANCE); BOOL FAR InitInstance(HINSTANCE,int); VOID FAR UpdateButtonStates(VOID); VOID FAR AdjustEditWindows(VOID); LONG FAR myatol(LPTSTR); BOOL FAR appGetComputerName(LPTSTR); VOID DrawShadowRect(HDC,LPRECT); VOID SendFontToPartner(VOID); VOID DoRing(LPCTSTR); VOID ClearEditControls(VOID);
// Initialization Routines (wcinit.c)
//
VOID FAR SaveFontToIni(VOID); VOID FAR SaveBkGndToIni(VOID); VOID FAR InitFontFromIni(VOID); VOID FAR LoadIntlStrings(VOID); VOID FAR SaveWindowPlacement(PWINDOWPLACEMENT); BOOL FAR ReadWindowPlacement(PWINDOWPLACEMENT); VOID FAR CreateTools(HWND); VOID FAR DeleteTools(HWND); VOID FAR CreateChildWindows(HWND);
// Window handler routines (winchat.c)
//
VOID appWMCreateProc(HWND); VOID appWMWinIniChangeProc(HWND); VOID appWMSetFocusProc(HWND); VOID appWMMenuSelectProc(HWND,WPARAM,LPARAM); VOID appWMTimerProc(HWND); VOID appWMPaintProc(HWND); VOID appWMDestroyProc(HWND); BOOL appWMCommandProc(HWND,WPARAM,LPARAM); VOID appWMInitMenuProc(HMENU); VOID appWMSizeProc(HWND,WPARAM,LPARAM); BOOL appWMEraseBkGndProc(HWND); LRESULT appWMSysCommandProc(HWND,WPARAM,LPARAM); HBRUSH appWMCtlColorProc(HWND,WPARAM,LPARAM); HICON appWMQueryDragIconProc(HWND);
// DDE Related Functions.
//
HDDEDATA CALLBACK DdeCallback(UINT,UINT,HCONV,HSZ,HSZ,HDDEDATA,DWORD,DWORD); HDDEDATA CreateCharData(VOID); HDDEDATA CreatePasteData(VOID);
// FE specific
HDDEDATA CreateDbcsStringData(VOID);
#ifdef PROTOCOL_NEGOTIATE
HDDEDATA CreateProtocolData(VOID); PCKT GetCurrentPckt(VOID); VOID FlagIntersection(PCKT); VOID AnnounceSupport(VOID); #endif
//
//
typedef UINT (WINAPI *WNETCALL)(HWND,LPTSTR,LPTSTR,WORD,DWORD); HINSTANCE APIENTRY WNetGetCaps(WORD);
// Chat Data.
// This data-structure must maintain
// fixed-size fields so that they may
// be transfered accross platforms.
//
#ifndef RC_INVOLKED
#define LF_XPACKFACESIZE 32
#define XCHATSIZEA 60
#define XCHATSIZEW 92
#pragma pack(2)
typedef struct tagXPACKFONTA { WORD lfHeight; WORD lfWidth; WORD lfEscapement; WORD lfOrientation; WORD lfWeight; BYTE lfItalic; BYTE lfUnderline; BYTE lfStrikeOut; BYTE lfCharSet; BYTE lfOutPrecision; BYTE lfClipPrecision; BYTE lfQuality; BYTE lfPitchAndFamily; CHAR lfFaceName[LF_XPACKFACESIZE]; } XPACKFONTA;
typedef struct tagXPACKFONTW { WORD lfHeight; WORD lfWidth; WORD lfEscapement; WORD lfOrientation; WORD lfWeight; BYTE lfItalic; BYTE lfUnderline; BYTE lfStrikeOut; BYTE lfCharSet; BYTE lfOutPrecision; BYTE lfClipPrecision; BYTE lfQuality; BYTE lfPitchAndFamily; WCHAR lfFaceName[LF_XPACKFACESIZE]; } XPACKFONTW;
typedef struct _CHATDATAA { WORD type;
union {
// This data for DBCS string transfer.
//
struct { DWORD SelPos; DWORD size; HGLOBAL hString; } cd_dbcs;
// This data for character transfer.
//
struct { DWORD SelPos; WORD Char; } cd_char;
// This data for remote font change.
//
struct { XPACKFONTA lf; COLORREF cref; COLORREF brush; } cd_win;
// This data for remote paste.
//
struct { DWORD SelPos; DWORD size; } cd_paste;
#ifdef PROTOCOL_NEGOTIATE
// This data for Protocol Negotiate.
//
struct { DWORD dwVer; PCKT pckt; } cd_protocol; #endif
} uval; } CHATDATAA;
typedef struct _CHATDATAW { WORD type;
union {
// This data for DBCS string transfer.
//
struct { DWORD SelPos; DWORD size; HGLOBAL hString; } cd_dbcs;
// This data for character transfer.
//
struct { DWORD SelPos; WORD Char; } cd_char;
// This data for remote font change.
//
struct { XPACKFONTW lf; COLORREF cref; COLORREF brush; } cd_win;
// This data for remote paste.
//
struct { DWORD SelPos; DWORD size; } cd_paste;
#ifdef PROTOCOL_NEGOTIATE
// This data for Protocol Negotiate.
//
struct { DWORD dwVer; PCKT pckt; } cd_protocol; #endif
} uval;
} CHATDATAW;
#pragma pack()
typedef XPACKFONTA *PXPACKFONTA; typedef XPACKFONTA NEAR *NPXPACKFONTA; typedef XPACKFONTA FAR *LPXPACKFONTA;
typedef CHATDATAA *PCHATDATAA; typedef CHATDATAA NEAR *NPCHATDATAA; typedef CHATDATAA FAR *LPCHATDATAA;
typedef XPACKFONTW *PXPACKFONTW; typedef XPACKFONTW NEAR *NPXPACKFONTW; typedef XPACKFONTW FAR *LPXPACKFONTW;
typedef CHATDATAW *PCHATDATAW; typedef CHATDATAW NEAR *NPCHATDATAW; typedef CHATDATAW FAR *LPCHATDATAW;
#ifdef UNICODE
#define XPACKFONT XPACKFONTW
#else
#define XPACKFONT XPACKFONTA
#endif
typedef XPACKFONT *PXPACKFONT; typedef XPACKFONT NEAR *NPXPACKFONT; typedef XPACKFONT FAR *LPXPACKFONT;
#ifdef UNICODE
#define CHATDATA CHATDATAW
#else
#define CHATDATA CHATDATAA
#endif
typedef CHATDATA *PCHATDATA; typedef CHATDATA NEAR *NPCHATDATA; typedef CHATDATA FAR *LPCHATDATA;
#endif
// Chat state info struct
//
typedef struct _CHATSTATE { UINT fConnected : 1; UINT fConnectPending : 1; UINT fAllowAnswer : 1; UINT fIsServer : 1; UINT fServerVerified : 1; UINT fInProcessOfDialing : 1; UINT fSound : 1; UINT fMMSound : 1; UINT fUseOwnFont : 1; UINT fSideBySide : 1; UINT fMinimized : 1; UINT fTopMost : 1; UINT fToolBar : 1; UINT fStatusBar : 1; UINT fUnicode : 1;
#ifdef PROTOCOL_NEGOTIATE
UINT fProtocolSent : 1; #endif
} CHATSTATE; typedef CHATSTATE *PCHATSTATE; typedef CHATSTATE NEAR *NPCHATSTATE; typedef CHATSTATE FAR *LPCHATSTATE;
// Insertable macroes.
//
#define KILLSOUND {if(ChatState.fMMSound) sndPlaySound(NULL,SND_ASYNC);}
#define SetStatusWindowText(x) {if(hwndStatus)SendMessage(hwndStatus,SB_SETTEXT,0,(LPARAM)(LPSTR)(x));}
// Helpfull porting macroes. These were necessary
// especially for notification codes which changed
// drastically between DOS/WIN and NT.
//
#ifdef WIN32
#define GET_WM_MENUSELECT_CMD(wParam,lParam) (UINT)(int)(short)LOWORD(wParam)
#define GET_WM_MENUSELECT_FLAGS(wParam,lParam) (UINT)(int)(short)HIWORD(wParam)
#define GET_WM_MENUSELECT_HMENU(wParam,lParam) (HMENU)lParam
#define SET_EM_SETSEL_WPARAM(nStart,nEnd) (WPARAM)nStart
#define SET_EM_SETSEL_LPARAM(nStart,nEnd) (LPARAM)nEnd
#define GET_WM_CTLCOLOREDIT_HDC(wParam,lParam) (HDC)wParam
#define GET_WM_CTLCOLOREDIT_HWND(wParam,lParam) (HWND)lParam
#define GET_EN_SETFOCUS_NOTIFY(wParam,lParam) (UINT)HIWORD(wParam)
#define GET_EN_SETFOCUS_CMD(wParam,lParam) (UINT)LOWORD(wParam)
#define GET_EN_SETFOCUS_HWND(wParam,lParam) (HWND)lParam
#define SET_EN_NOTIFY_WPARAM(id,notify,hwnd) (WPARAM)MAKELONG(id,notify)
#define SET_EN_NOTIFY_LPARAM(id,notify,hwnd) (LPARAM)hwnd
#define WNETGETCAPS(wFlag) NULL
#define WNETGETUSER(szlocal,szuser,ncount) WNetGetUser(szlocal,szuser,ncount)
#define SETMESSAGEQUEUE(size) size
#else
int APIENTRY ShellAbout(HWND hWnd, LPSTR szApp, LPSTR szOtherStuff, HICON hIcon); #define GET_WM_MENUSELECT_CMD(wParam,lParam) (UINT)wParam
#define GET_WM_MENUSELECT_FLAGS(wParam,lParam) (UINT)(LOWORD(lParam))
#define GET_WM_MENUSELECT_HMENU(wParam,lParam) (HMENU)(HIWORD(lParam))
#define SET_EM_SETSEL_WPARAM(nStart,nEnd) (WPARAM)0
#define SET_EM_SETSEL_LPARAM(nStart,nEnd) (LPARAM)(MAKELONG(nStart,nEnd))
#define GET_WM_CTLCOLOREDIT_HDC(wParam,lParam) (HDC)wParam
#define GET_WM_CTLCOLOREDIT_HWND(wParam,lParam) (HWND)(LOWORD(lParam))
#define GET_EN_SETFOCUS_NOTIFY(wParam,lParam) (UINT)(HIWORD(lParam))
#define GET_EN_SETFOCUS_CMD(wParam,lParam) (UINT)wParam
#define GET_EN_SETFOCUS_HWND(wParam,lParam) (HWND)(LOWORD(lParam))
#define SET_EN_NOTIFY_WPARAM(id,notify,hwnd) (WPARAM)id
#define SET_EN_NOTIFY_LPARAM(id,notify,hwnd) (LPARAM)(MAKELONG(hwnd,notify))
#define WNETGETCAPS(wFlag) WNetGetCaps(wFlag)
#define WNETGETUSER(szlocal,szuser,ncount) ERROR_NO_NETWORK
#define SETMESSAGEQUEUE(size) SetMessageQueue(size)
#endif
VOID PackFont(LPXPACKFONT,LPLOGFONT); VOID UnpackFont(LPLOGFONT,LPXPACKFONT); VOID StartIniMapping(VOID); VOID EndIniMapping(VOID);
#ifndef ByteCountOf
#define ByteCountOf(x) sizeof(TCHAR)*(x)
#endif
#include "globals.h"
|