/************************************************************************
*																		*
*  HEADER.H 															*
*																		*
*  Copyright (C) Microsoft Corporation 1995.							*
*  All Rights reserved. 												*
*																		*
*************************************************************************/

#ifndef _HCW_HEADER_
#define _HCW_HEADER_

#include "resource.h"

const int WMP_WH_MSG				 = (WM_USER + 1000);
const int WMP_STOP_RUN_DLG			 = (WM_USER + 100);

enum {
	HINT_NEW_DOCUMENT,
	HINT_WRITE_DOCUMENT,
	HINT_NEW_VIEW,
};

typedef enum {
	TCARD_NONE,
	TCARD_PROJECT,
	TCARD_FILES,
	TCARD_BITMAPS,
	TCARD_WINDOWS,
} TCARD_TYPE;
extern TCARD_TYPE typeTcard;

#ifdef _DEBUG

#define VERIFY ASSERT
#define ASSERT(exp) { if (!(exp)) AssertErrorReport(#exp, __LINE__, __FILE__); }
#define Ensure( x1, x2 )  VERIFY((x1) == (x2))

#else

#define VERIFY(exp) ((void)(exp))
#define ASSERT(exp)
#define Ensure(x1, x2)	((void)(x1))

#endif

#define APP_WINDOW AfxGetApp()->m_pMainWnd->m_hWnd

#define MACRO_LIMIT 1024
const int MAX_CNT_LINE = 1024;

extern HFONT hfontSmall, hfontSansSerif, hfontSansSerifBold;
extern int cySansSerif, cySansSerifBold;
extern PSTR  pszHpjExt;
extern BOOL  fBuildStarted;
extern PSTR pszHcwRtfExe;
extern int m_nDefCmdShow;
extern int m_nDefCmdShowOld;
extern BOOL fTranslator;
extern BOOL fExitWhenDone;
extern HANDLE hfShare;	// used for sharing memory between hcrtf and hcw
extern HANDLE hfMsgShare;	// used for sharing memory between WinHelp and hcw
extern PSTR pszMap;
extern HWND hwndGrind;
extern char szHlpFile[MAX_PATH];
extern char szHpjFile[MAX_PATH];
extern BOOL fHelpRunning;
extern PROCESS_INFORMATION piHcRtf;
extern ERROR_COUNT errcount;
extern BOOL fTrackErrors; // used when processing an .HMK file
extern BOOL fNoCompress;
extern BOOL fAddSource;
extern LCID lcidSystem;
extern BOOL fDayTips;
extern HWND hwndApp;

extern const char *txtNotePad;
extern const char *txtHelpFile; // "hcw.hlp"
extern const char *txtWritePad;
extern const char *txtDefine;
extern const char *txtPoundInclude;
extern const char *txtColonInclude;
extern BOOL fMinimizeWhileCompiling;
extern BOOL fRunWinHelp;
extern const char *txtSettingsSection;
extern CTable* ptblHpjFiles;
extern CTable tblLangId;
extern BOOL    _fDBCSSystem;
extern LCID    _lcidSystem;
extern BOOL    _fDualCPU;
extern int curTcard; // current Tcard number

#define RemoveGdiObject(p) RemoveObject((HGDIOBJ *) p)

void STDCALL  AddCharsetNames(CComboBox* pcombo);
void STDCALL  AddFontNames(CComboBox* pcombo);
void STDCALL  AddTabbedComment(CString& csz);
PSTR STDCALL  AddTabbedComment(PSTR psz);	// returns ptr to end of string
void STDCALL  BevelRect(CDC& dc, RECT &rc, CPen* ppen1, CPen* ppen2);
void STDCALL  BevelRect(CDC& dc, RECT &rc, RECT &rcExclude, CPen* ppen1, CPen* ppen2);
BOOL STDCALL  BrowseDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
BOOL STDCALL  CallTcard(int idCard);
BOOL STDCALL  ChangeBasePath(PCSTR pszOldBase, PCSTR pszNewBase, PSTR pszFilename, BOOL fDirectory = FALSE, BOOL fVerify = FALSE);
void STDCALL  ChangePathCase(PSTR pszPath);
PCSTR STDCALL ConvertCharsetToString(BYTE charset);
BYTE STDCALL  ConvertStringToCharset(PCSTR pszName);
BOOL STDCALL  ConvertToFull(PCSTR pszBaseFile, PSTR pszFile, BOOL fDirectory = FALSE);
BOOL STDCALL  ConvertToRelative(PCSTR pszBaseFile, CString* pcszFile, BOOL fDirectory = FALSE, BOOL fVerify = FALSE);
BOOL STDCALL  ConvertToRelative(PCSTR pszBaseFile, PSTR pszFile, BOOL fDirectory = FALSE, BOOL fVerify = FALSE);
void STDCALL  DDV_EmptyFile(CDataExchange* pDX, CString const& value, UINT idMsg);
void STDCALL  DDV_NonEmptyString(CDataExchange* pDX, CString const& value, UINT idPrompt);
void STDCALL  DDV_ValidTopicID(CDataExchange* pDX, CString const& value);
void STDCALL  DDX_TextHex(CDataExchange* pDX, UINT idCtl, UINT &value);
void STDCALL  FillListFromTable(CTable* ptbl, CListBox* plistbox, BOOL fRedraw = TRUE);
void STDCALL  FillTableFromList(CTable** ptbl, CListBox* plistbox);
void STDCALL  HelpOverview(HWND hwndOwner, DWORD dwHelpID);
void STDCALL  InitializeSharedMemory(void);
BOOL STDCALL  IsDbcsSystem();
BOOL STDCALL  IsValidFile(PCSTR pszFile, BOOL fConfirmReadOnly = TRUE);
BOOL CALLBACK Locale_EnumProc(PSTR pszValue);
BOOL CALLBACK NotifyWinHelp(HWND hwnd, LPARAM lParam);
void STDCALL  OOM(void);
void STDCALL  OpenLogFile(int idType = IDS_LOG_TYPE);
BOOL STDCALL  OurExec(PCSTR pszCmdLine, PCSTR pszFile = pszHcwRtfExe);
void STDCALL  ProcessHmkFile(PCSTR pszFile);
void STDCALL  QuitTcard(void);
void STDCALL  RemoveListItem(CListBox* plistbox);
void STDCALL  RemoveTrailingSpaces(PSTR pszString);
BOOL STDCALL  SelectCharset(CComboBox* pcombo, BYTE charset);
void STDCALL  SetChicagoDialogStyles(HWND hwnd, BOOL fCsHelp = TRUE);
void STDCALL  SetTmpDirectory(PCSTR pszDir);
BOOL STDCALL  SetupBrowseDirectory(UINT idsCaption, UINT idsDescription, BOOL fSaveDirectory, PSTR pszNewPath, HWND hwndOwner, PCSTR pszBaseFile, PCSTR pszOldFile = NULL, UINT idsError = 0);
BOOL STDCALL  SetupExecBuffer(PSTR pszBuf);
void STDCALL  SizeButtonToFit(CButton *pCtl, RECT& rcWnd);
void STDCALL  StartCompile(PCSTR pszFile);
PSTR STDCALL  stristr(PCSTR pszMain, PCSTR pszSub);
PSTR STDCALL  SzTrimSz(PSTR pszOrg);

enum MINSIZE {
	MS_HPJ = 1,
	MS_CNT
};
#define MSF_CAPTION	0x0001
#define MSF_BORDER  0x0002
#define MSF_MENU	0x0004
#define MSF_STATUS	0x0008
#define MSF_TOOLBAR	0x0010
#define MSF_MASK	0x001F
BOOL STDCALL CalcMinSize(POINT &ptRet, enum MINSIZE val, UINT uFlags);

#ifndef __CFILE_HISTORY__
#include "filehist.h"
#endif

extern CFileHistory* pHpjFile;
extern CFileHistory* pCntFile;
extern CFileHistory* phlpFile;
extern CFileHistory* pMapFile;

#ifndef WM_CONTEXTMENU					// Chicago header file?

#define WM_CONTEXTMENU		0x007B
#define WM_HELP 			0x0053
#define HELP_CONTEXTMENU	0x000a
#define HELP_FINDER 		0x000b
#define HELP_WM_HELP		0x000c

#define HELP_TCARD			0x8000
#define HELP_TCARD_DATA 	0x0010
#define HELP_TCARD_NEXT 	0x0011
#define HELP_TCARD_OTHER_CALLER 0x0011

typedef struct tagHELPINFO
{
	DWORD	cbSize;
	int 	iContextType;
	int 	iCtrlId;
	HANDLE	hItemHandle;
	DWORD	dwContextId;
	POINT	MousePos;
} HELPINFO, FAR* LPHELPINFO;

#define DS_3DLOOK			0x0004L

#define WS_EX_MDICHILD			0x00000040L
#define WS_EX_SMCAPTION 		0x00000080L

#define WS_EX_WINDOWEDGE		0x00000100L
#define WS_EX_CLIENTEDGE		0x00000200L
#define WS_EX_EDGEMASK			(WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE)
#define WS_EX_CONTEXTHELP		0x00000400L
#define WS_EX_TOOLWINDOW		0x00000800L

#define WS_EX_RIGHT 			0x00001000L
#define WS_EX_LEFT				0x00000000L
#define WS_EX_RTLREADING		0x00002000L
#define WS_EX_LTRREADING		0x00000000L
#define WS_EX_LEFTSCROLLBAR 	0x00004000L
#define WS_EX_RIGHTSCROLLBAR	0x00000000L

#endif // WM_CONTEXTMENU

#endif // _HCW_HEADER_