247 lines
8 KiB
C
247 lines
8 KiB
C
/*++
|
|
|
|
Copyright (c) 2001, Microsoft Corporation All rights reserved.
|
|
|
|
Module Name:
|
|
|
|
globals.h
|
|
|
|
Abstract:
|
|
|
|
Every project needs a globals.h
|
|
|
|
Revision History:
|
|
|
|
7 Feb 2000 v-michka Created.
|
|
|
|
--*/
|
|
|
|
#ifndef GLOBALS_H
|
|
#define GLOBALS_H
|
|
|
|
#include <windows.h> // We always need a windows.h
|
|
#include <winnls.h> // for GetLocaleInfo
|
|
#include <mbstring.h> // for _mbslen
|
|
|
|
#define MAX_SMALL_STRING MAX_PATH
|
|
|
|
// TLS Allocation index storage
|
|
typedef struct tagGodotTlsInfo
|
|
{
|
|
// Enumeration callback procedures, owned by the user
|
|
CALINFO_ENUMPROCW pfnCalendarInfo;
|
|
CALINFO_ENUMPROCEXW pfnCalendarInfoEx;
|
|
DATEFMT_ENUMPROCW pfnDateFormats;
|
|
DATEFMT_ENUMPROCEXW pfnDateFormatsEx;
|
|
LOCALE_ENUMPROCW pfnLocales;
|
|
TIMEFMT_ENUMPROCW pfnTimeFormats;
|
|
PROPENUMPROCW pfnProp;
|
|
PROPENUMPROCA pfnPropA;
|
|
PROPENUMPROCEXW pfnPropEx;
|
|
PROPENUMPROCEXA pfnPropExA;
|
|
FONTENUMPROCW pfnFontFamilies;
|
|
FONTENUMPROCW pfnFontFamiliesEx;
|
|
FONTENUMPROCW pfnFonts;
|
|
ICMENUMPROCW pfnICMProfiles;
|
|
|
|
GRAYSTRINGPROC pfnGrayString;
|
|
|
|
UINT cpgGrayString;
|
|
|
|
// Pointers to the caller's version of the find/replace dialogs
|
|
LPFINDREPLACEW lpfrwFind;
|
|
LPFINDREPLACEW lpfrwReplace;
|
|
|
|
// user hook for find/replace/open/save/page setup dialogs (if they exist)
|
|
// note that the open save hooks are only for the OFN_EXPLORER
|
|
// type dialogs.
|
|
LPFRHOOKPROC pfnFindText;
|
|
LPFRHOOKPROC pfnReplaceText;
|
|
LPOFNHOOKPROC pfnGetOpenFileName;
|
|
LPOFNHOOKPROC pfnGetSaveFileName;
|
|
LPPAGEPAINTHOOK pfnPagePaint;
|
|
|
|
// Common dialog hook procedures that we do not hook to do
|
|
// significant work with
|
|
LPCCHOOKPROC pfnChooseColor;
|
|
LPCFHOOKPROC pfnChooseFont;
|
|
LPOFNHOOKPROC pfnGetOpenFileNameOldStyle;
|
|
LPOFNHOOKPROC pfnGetSaveFileNameOldStyle;
|
|
LPPAGESETUPHOOK pfnPageSetup;
|
|
LPPRINTHOOKPROC pfnPrintDlg;
|
|
LPSETUPHOOKPROC pfnPrintDlgSetup;
|
|
|
|
// Our refcount members. Note that since they will be stored
|
|
// on a per-thread basis, there are no synchronization issues
|
|
// with updating them in place.
|
|
// WARNING: Note that there are 16 of these, so we are currently
|
|
// DWORD aligned. If you add or remove any, make sure that you
|
|
// add the appropriate padding.
|
|
unsigned short cCalendarInfo : 4;
|
|
unsigned short cCalendarInfoEx : 4;
|
|
unsigned short cDateFormats : 4;
|
|
unsigned short cDateFormatsEx : 4;
|
|
unsigned short cLocales : 4;
|
|
unsigned short cTimeFormats : 4;
|
|
unsigned short cProp : 4;
|
|
unsigned short cPropA : 4;
|
|
unsigned short cPropEx : 4;
|
|
unsigned short cPropExA : 4;
|
|
unsigned short cFontFamilies : 4;
|
|
unsigned short cFontFamiliesEx : 4;
|
|
unsigned short cFonts : 4;
|
|
unsigned short cICMProfiles : 4;
|
|
|
|
unsigned short cGrayString : 4;
|
|
|
|
unsigned short RESERVED : 4;
|
|
|
|
// Pointer to our hook procedure handle
|
|
// (see the proc, in hook.c, for more info.
|
|
HHOOK hHook;
|
|
|
|
// Pointer to dialog proc (one per thread).
|
|
// Our DialogProc will clear it out as soon as
|
|
// the init happens.
|
|
DLGPROC pfnDlgProc;
|
|
|
|
} GODOTTLSINFO, *LPGODOTTLSINFO;
|
|
|
|
#define GODOTMAXREFCOUNT 15
|
|
|
|
// globals: pretty evil, but there are not many of them. :-)
|
|
extern UINT g_acp; // CP_ACP; it is faster to call with the actual cpg
|
|
extern UINT g_oemcp; // CP_OEMCP; it is faster to call with the actual cpg
|
|
extern UINT g_mcs; // The maximum character size (in bytes) of a character on CP_ACP
|
|
extern DWORD g_dwVersion; // The return from GetVersion, used many places
|
|
extern UINT g_tls; // GODOT TLS slot - lots of thread-specific info here
|
|
extern CRITICAL_SECTION g_csThreads; // Our critical section object for thread data (use sparingly!)
|
|
extern CRITICAL_SECTION g_csWnds; // our critical section object for window data (use sparingly!)
|
|
|
|
|
|
// from windowsx.h
|
|
#define GET_WM_COMMAND_ID(wp, lp) LOWORD(wp)
|
|
|
|
// culled from msointl.h, could not find them elsewhere
|
|
#define CP_JAPAN 932
|
|
#define CP_CHINA 936
|
|
#define CP_KOREA 949
|
|
#define CP_TAIWAN 950
|
|
#define CP_JOHAB 1361
|
|
#define CP_GB18030 54936
|
|
|
|
// code page translation flags
|
|
#define NLS_CP_CPINFO 0x10000000
|
|
#define NLS_CP_CPINFOEX 0x20000000
|
|
#define NLS_CP_MBTOWC 0x40000000
|
|
#define NLS_CP_WCTOMB 0x80000000
|
|
|
|
typedef enum
|
|
{
|
|
// normal message transmitters
|
|
mtSendMessage = 0x00000001,
|
|
mtSendMessageCallback = 0x00000002,
|
|
mtSendMessageTimeout = 0x00000004,
|
|
mtSendNotifyMessage = 0x00000008,
|
|
mtPostMessage = 0x00000010,
|
|
mtPostThreadMessage = 0x00000020,
|
|
mtDefWindowProc = 0x00000040,
|
|
mtDefDlgProc = 0x00000080,
|
|
mtDefFrameProc = 0x00000100,
|
|
mtDefMDIChildProc = 0x00000200,
|
|
mtBroadcastSystemMessage = 0x00000400,
|
|
|
|
mtCallWindowProc = 0x00000800,
|
|
mtCallWindowProcA = 0x00001000,
|
|
|
|
// normal message receivers
|
|
mtGetMessage = 0x00010000,
|
|
mtPeekMessage = 0x00020000,
|
|
|
|
// normal message dispatchers
|
|
mtDispatchMessage = 0x00040000,
|
|
mtIsDialogMessage = 0x00080000,
|
|
mtTranslateAccelerator = 0x00100000,
|
|
|
|
mtSendMessageAndIlk = (mtSendMessage |
|
|
mtSendMessageCallback |
|
|
mtSendMessageTimeout |
|
|
mtSendNotifyMessage),
|
|
|
|
mtDefWindowProcAndIlk = (mtDefWindowProc |
|
|
mtDefDlgProc |
|
|
mtDefFrameProc |
|
|
mtDefMDIChildProc)
|
|
} MESSAGETYPES;
|
|
|
|
typedef enum
|
|
{
|
|
fptWndproc = 0x01,
|
|
fptDlgproc = 0x02,
|
|
fptUnknown = 0x03
|
|
} FAUXPROCTYPE;
|
|
|
|
UINT msgFINDMSGSTRING;
|
|
UINT msgHELPMSGSTRING;
|
|
UINT msgFILEOKSTRING;
|
|
UINT msgSHAREVISTRING;
|
|
|
|
// MACROS to do some kinda handy things
|
|
|
|
// Many macros moved to convert.h with deal with memory allocation, etc.
|
|
|
|
// Are we dealing with a DBCS code page?
|
|
#define FDBCS_CPG(cpg) \
|
|
(cpg == CP_JAPAN || \
|
|
cpg == CP_KOREA || \
|
|
cpg == CP_TAIWAN || \
|
|
cpg == CP_CHINA || \
|
|
cpg == CP_JOHAB || \
|
|
cpg == CP_GB18030)
|
|
|
|
// are we on Windows 95?
|
|
#define FWIN95() \
|
|
((FWIN9X() && \
|
|
((DWORD)(HIBYTE(LOWORD(g_dwVersion))) == 0)))
|
|
|
|
// Are we on Windows 95 or 98?
|
|
#define FWIN95_OR_98() \
|
|
((FWIN9X() && \
|
|
((DWORD)(HIBYTE(LOWORD(g_dwVersion))) < 9)))
|
|
|
|
// Are we on any Win9x platform?
|
|
#define FWIN9X() \
|
|
((g_dwVersion >= 0x80000000) && \
|
|
(((DWORD)(LOBYTE(LOWORD(g_dwVersion))) == 4)))
|
|
|
|
#ifndef CDSIZEOF_STRUCT
|
|
#define CDSIZEOF_STRUCT(structname, member) \
|
|
(((int)((LPBYTE)(&((structname*)0)->member) - \
|
|
((LPBYTE)((structname*)0)))) + sizeof(((structname*)0)->member))
|
|
#endif
|
|
|
|
// Some size "constants" for RAS, based on the size changes in Millenium
|
|
#define CBRASENTRYNAMEOLDA CDSIZEOF_STRUCT(RASENTRYNAMEA,szEntryName)
|
|
#define CBRASENTRYNAMEOLDW CDSIZEOF_STRUCT(RASENTRYNAMEW,szEntryName)
|
|
|
|
#define CBRASDIALPARAMSOLDA CDSIZEOF_STRUCT(RASDIALPARAMSA,szDomain)
|
|
#define CBRASDIALPARAMSOLDW CDSIZEOF_STRUCT(RASDIALPARAMSW,szDomain)
|
|
|
|
#define CBRASDIALPARAMSNEWA CDSIZEOF_STRUCT(RASDIALPARAMSA,dwCallbackId)
|
|
#define CBRASDIALPARAMSNEWW CDSIZEOF_STRUCT(RASDIALPARAMSA,dwCallbackId)
|
|
|
|
#define CBRASENTRYOLDA CDSIZEOF_STRUCT(RASENTRYA,dwReserved2)
|
|
#define CBRASENTRYOLDW CDSIZEOF_STRUCT(RASENTRYW,dwReserved2)
|
|
|
|
#define CBRASENTRYNEWA CDSIZEOF_STRUCT(RASENTRYA,dwIdleDisconnectSeconds)
|
|
#define CBRASENTRYNEWW CDSIZEOF_STRUCT(RASENTRYW,dwIdleDisconnectSeconds)
|
|
|
|
#define CBRASCONNOLDA CDSIZEOF_STRUCT(RASCONNA,szDeviceName)
|
|
#define CBRASCONNOLDW CDSIZEOF_STRUCT(RASCONNW,szDeviceName)
|
|
|
|
#define CBRASCONNNEWA CDSIZEOF_STRUCT(RASCONNA,dwSubEntry)
|
|
#define CBRASCONNNEWW CDSIZEOF_STRUCT(RASCONNW,dwSubEntry)
|
|
|
|
#endif // GLOBALS_H
|
|
|