Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

2697 lines
85 KiB

/***************************************************************************/
/* */
/* USER.H - */
/* */
/* User's main include file. */
/* */
/***************************************************************************/
#ifdef WOW
#define NO_LOCALOBJ_TAGS
#endif
// If #defined, only 16 bits of the window extended style will be stored
// in the window instance.
//
//#define WORDEXSTYLE
// This magic definition ensures that HWND is declared as a near
// pointer to our internal window data structure. See
// the DECLARE_HANDLE macro in windows.h.
//
#define tagWND HWND__
// substitute API names with the "I" internal names
//
#ifndef DEBUG
#include "iuser.h"
#endif
#ifdef DEBUG
#ifndef NO_REDEF_SENDMESSAGE
#define SendMessage RevalSendMessage
#endif
#endif
//***** Include standard headers...
#define NOSOUND
#define NOFONT
#define NOKANJI
#define LSTRING
#define LFILEIO
#define WIN31
#define STRICT
#include <windows.h>
/* Structure types that occupy the USER Data Segment */
#define ST_CLASS 1
#define ST_WND 2
#define ST_STRING 3
#define ST_MENU 4
#define ST_CLIP 5
#define ST_CBOX 6
#define ST_PALETTE 7
#define ST_ED 8
#define ST_BWL 9
#define ST_OWNERDRAWMENU 10
#define ST_SPB 11
#define ST_CHECKPOINT 12
#define ST_DCE 13
#define ST_MWP 14
#define ST_PROP 15
#define ST_LBIV 16
#define ST_MISC 17
#define ST_ATOMS 18
#define ST_LOCKINPUTSTATE 19
#define ST_HOOKNODE 20
#define ST_USERSEEUSERDOALLOC 21
#define ST_HOTKEYLIST 22
#define ST_POPUPMENU 23
#define ST_HANDLETABLE 32 /* Defined by Kernel; We have no control */
#define ST_FREE 0xFF
#define CODESEG _based(_segname("_CODE"))
#define INTDSSEG _based(_segname("_INTDS"))
// Returns TRUE if currently executing app is 3.10 compatible
//
#define Is310Compat(hInstance) (LOWORD(GetExpWinVer(hInstance)) >= 0x30a)
#define Is300Compat(hInstance) (LOWORD(GetExpWinVer(hInstance)) >= 0x300)
#define VER 0x0300
#define VER31 0x0310
#define VER30 0x0300
#define VER20 0x0201
#define CR_CHAR 13
#define ESC_CHAR 27
#define SPACE_CHAR 32
typedef HANDLE HQ;
struct tagDCE;
/* Window class structure */
typedef struct tagCLS
{
/* NOTE: The order of the following fields is assumed. */
struct tagCLS* pclsNext;
WORD clsMagic;
ATOM atomClassName;
struct tagDCE* pdce; /* DCE * to DC associated with class */
int cWndReferenceCount; /* The number of windows registered
with this class */
WORD style;
WNDPROC lpfnWndProc;
int cbclsExtra;
int cbwndExtra;
HMODULE hModule;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPSTR lpszMenuName;
LPSTR lpszClassName;
} CLS;
typedef CLS *PCLS;
typedef CLS far *LPCLS;
typedef PCLS *PPCLS;
#define CLS_MAGIC ('N' | ('K' << 8))
struct tagPROPTABLE;
/* Window instance structure */
typedef struct tagWND
{
struct tagWND* hwndNext; /* 0x0000 Handle to the next window */
struct tagWND* hwndChild; /* 0x0002 Handle to child */
struct tagWND* hwndParent; /* 0x0004 Backpointer to the parent window. */
struct tagWND* hwndOwner; /* 0x0006 Popup window owner field */
RECT rcWindow; /* 0x0008 Window outer rectangle */
RECT rcClient; /* 0x0010 Client rectangle */
HQ hq; /* 0x0018 Queue handle */
HRGN hrgnUpdate; /* 0x001a Accumulated paint region */
struct tagCLS* pcls; /* 0x001c Pointer to window class */
HINSTANCE hInstance; /* 0x001e Handle to module instance data. */
WNDPROC lpfnWndProc; /* 0x0020 Far pointer to window proc. */
DWORD state; /* 0x0024 Internal state flags */
DWORD style; /* 0x0028 Style flags */
#ifdef WORDEXSTYLE
WORD dwExStyle; /* 0x002c Extended Style (ONLY LOW 16 BITS STORED) */
#else
DWORD dwExStyle; /* 0x002c Extended Style */
#endif
HMENU hMenu; /* 0x0030 Menu handle or ID */
HLOCAL hName; /* 0x0032 Alt DS handle of the window text */
int* rgwScroll; /* 0x0034 Words used for scroll bar state */
struct tagPROPTABLE* pproptab; /* 0x0036 Handle to the start of the property list */
struct tagWND* hwndLastActive; /* 0x0038 Last active in owner/ownee list */
HMENU hSysMenu; /* 0x003a Handle to system menu */
} WND;
#undef API
#define API _loadds _far _pascal
#undef CALLBACK
#define CALLBACK _loadds _far _pascal
#ifndef MSDWP
#include <winexp.h>
#include "strtable.h"
#include "wmsyserr.h"
#endif /* MSDWP */
/*** AWESOME HACK ALERT!
*
* Window Style and State Masks -
*
* High byte of word is byte index from the start of the state field
* in the WND structure, low byte is the mask to use on the byte.
* These masks assume the order of the state and style fields of a
* window instance structure.
*/
// hwnd->state flags (offset 0, 1, 2, 3)
#define WFMPRESENT 0x0001
#define WFVPRESENT 0x0002
#define WFHPRESENT 0x0004
#define WFCPRESENT 0x0008
#define WFSENDSIZEMOVE 0x0010
#define WFNOPAINT 0x0020
#define WFFRAMEON 0x0040
#define WFHASSPB 0x0080
#define WFNONCPAINT 0x0101
#define WFSENDERASEBKGND 0x0102
#define WFERASEBKGND 0x0104
#define WFSENDNCPAINT 0x0108
#define WFINTERNALPAINT 0x0110 // Internal paint required flag
#define WFUPDATEDIRTY 0x0120
#define WFHIDDENPOPUP 0x0140
#define WFMENUDRAW 0x0180
#define WFHASPALETTE 0x0201
#define WFPAINTNOTPROCESSED 0x0202 // WM_PAINT message not processed
#define WFWIN31COMPAT 0x0204 // Win 3.1 compatible window
#define WFALWAYSSENDNCPAINT 0x0208 // Always send WM_NCPAINT to children
#define WFPIXIEHACK 0x0210 // Send (HRGN)1 to WM_NCPAINT (see PixieHack)
#define WFTOGGLETOPMOST 0x0220 // Toggle the WS_EX_TOPMOST bit ChangeStates
// hwnd->style style bits (offsets 4, 5, 6, 7)
#define WFTYPEMASK 0x07C0
#define WFTILED 0x0700
#define WFICONICPOPUP 0x07C0
#define WFPOPUP 0x0780
#define WFCHILD 0x0740
#define WFMINIMIZED 0x0720
#define WFVISIBLE 0x0710
#define WFDISABLED 0x0708
#define WFDISABLE WFDISABLED
#define WFCLIPSIBLINGS 0x0704
#define WFCLIPCHILDREN 0x0702
#define WFMAXIMIZED 0x0701
#define WFICONIC WFMINIMIZED
#define WFMINBOX 0x0602
#define WFMAXBOX 0x0601
#define WFBORDERMASK 0x06C0
#define WFBORDER 0x0680
#define WFCAPTION 0x06C0
#define WFDLGFRAME 0x0640
#define WFTOPLEVEL 0x0640
#define WFVSCROLL 0x0620
#define WFHSCROLL 0x0610
#define WFSYSMENU 0x0608
#define WFSIZEBOX 0x0604
#define WFGROUP 0x0602
#define WFTABSTOP 0x0601
// If this dlg bit is set, WM_ENTERIDLE message will not be sent
#define WFNOIDLEMSG 0x0501
// hwnd->dwExStyle extended style bits (offsets 8, 9)
#define WEFDLGMODALFRAME 0x0801
#define WEFDRAGOBJECT 0x0802
#define WEFNOPARENTNOTIFY 0x0804
#define WEFTOPMOST 0x0808
#define WEFACCEPTFILES 0x0810
#define WEFTRANSPARENT 0x0820 // "Transparent" child window
// Class styles
#define CFVREDRAW 0x0001
#define CFHREDRAW 0x0002
#define CFKANJIWINDOW 0x0004
#define CFDBLCLKS 0x0008
#define CFOEMCHARS 0x0010
#define CFOWNDC 0x0020
#define CFCLASSDC 0x0040
#define CFPARENTDC 0x0080
#define CFNOKEYCVT 0x0101
#define CFNOCLOSE 0x0102
#define CFLVB 0x0104
#define CFCLSDC CFCLASSDC
#define CFSAVEBITS 0x0108
#define CFSAVEPOPUPBITS CFSAVEBITS
#define CFBYTEALIGNCLIENT 0x0110
#define CFBYTEALIGNWINDOW 0x0120
/*** AWESOME HACK ALERT!!!
*
* The low byte of the WF?PRESENT state flags must NOT be the
* same as the low byte of the WFBORDER and WFCAPTION flags,
* since these are used as paint hint masks. The masks are calculated
* with the MaskWF macro below.
*
* The magnitute of this hack compares favorably with that of the national debt.
*/
#define TestWF(hwnd, flag) ((BYTE)*((BYTE *)(&(hwnd)->state) + HIBYTE(flag)) & (BYTE)LOBYTE(flag))
#define SetWF(hwnd, flag) ((BYTE)*((BYTE *)(&(hwnd)->state) + HIBYTE(flag)) |= (BYTE)LOBYTE(flag))
#define ClrWF(hwnd, flag) ((BYTE)*((BYTE *)(&(hwnd)->state) + HIBYTE(flag)) &= ~(BYTE)LOBYTE(flag))
#define MaskWF(flag) ((WORD)( (HIBYTE(flag) & 1) ? LOBYTE(flag) << 8 : LOBYTE(flag)) )
#define TestCF(hwnd, flag) (*((BYTE *)(&(hwnd)->pcls->style) + HIBYTE(flag)) & LOBYTE(flag))
#define SetCF(hwnd, flag) (*((BYTE *)(&(hwnd)->pcls->style) + HIBYTE(flag)) |= LOBYTE(flag))
#define ClrCF(hwnd, flag) (*((BYTE *)(&(hwnd)->pcls->style) + HIBYTE(flag)) &= ~LOBYTE(flag))
#define TestCF2(pcls, flag) (*((BYTE *)(&pcls->style) + HIBYTE(flag)) & LOBYTE(flag))
#define SetCF2(pcls, flag) (*((BYTE *)(&pcls->style) + HIBYTE(flag)) |= LOBYTE(flag))
#define ClrCF2(pcls, flag) (*((BYTE *)(&pcls->style) + HIBYTE(flag)) &= ~LOBYTE(flag))
#define TestwndChild(hwnd) (TestWF(hwnd, WFTYPEMASK) == (BYTE)LOBYTE(WFCHILD))
#define TestwndTiled(hwnd) (TestWF(hwnd, WFTYPEMASK) == (BYTE)LOBYTE(WFTILED))
#define TestwndIPopup(hwnd) (TestWF(hwnd, WFTYPEMASK) == (BYTE)LOBYTE(WFICONICPOPUP))
#define TestwndNIPopup(hwnd) (TestWF(hwnd, WFTYPEMASK) == (BYTE)LOBYTE(WFPOPUP))
#define TestwndPopup(hwnd) (TestwndNIPopup(hwnd) || TestwndIPopup(hwnd))
#define TestwndHI(hwnd) (TestwndTiled(hwnd) || TestwndIPopup(hwnd))
/* Special macro to test if WM_PAINT is needed */
#define NEEDSPAINT(hwnd) (hwnd->hrgnUpdate != NULL || TestWF(hwnd, WFINTERNALPAINT))
/* Areas to be painted during activation and inactivation */
#define NC_DRAWNONE 0x00
#define NC_DRAWCAPTION 0x01
#define NC_DRAWFRAME 0x02
#define NC_DRAWBOTH (NC_DRAWCAPTION | NC_DRAWFRAME)
void FAR DrawCaption(HWND hwnd, HDC hdc, WORD flags, BOOL fActive);
/* ActivateWindow() commands */
#define AW_USE 1
#define AW_TRY 2
#define AW_SKIP 3
#define AW_TRY2 4
#define AW_SKIP2 5 /* used internally in ActivateWindow() */
#define AW_USE2 6 /* nc mouse activation added by craigc */
/* These numbers serve as indices into the atomSysClass[] array
* so that we can get the atoms for the various classes.
* The order of the control classes is assumed to be
* the same as the class XXXCODE constants defined in dlgmgr.h.
*/
#define ICLS_BUTTON 0
#define ICLS_EDIT 1
#define ICLS_STATIC 2
#define ICLS_LISTBOX 3
#define ICLS_SCROLLBAR 4
#define ICLS_COMBOBOX 5 // End of special dlgmgr indices
#define ICLS_CTL_MAX 6 // Number of public control classes
#define ICLS_DESKTOP 6
#define ICLS_DIALOG 7
#define ICLS_MENU 8
#define ICLS_SWITCH 9
#define ICLS_ICONTITLE 10
#define ICLS_MDICLIENT 11
#define ICLS_COMBOLISTBOX 12
#define ICLS_MAX 13 // Number of system classes
// The following are the atom values for the atom-named public classes
// NOTE: DIALOGCLASS at least should be in windows.h
//
#define MENUCLASS 0x8000 /* Public Knowledge */
#define DESKTOPCLASS 0x8001
#define DIALOGCLASS 0x8002
#define SWITCHWNDCLASS 0x8003
#define ICONTITLECLASS 0x8004
/* Z Ordering() return values */
#define ZO_ERROR (-1)
#define ZO_EQUAL 0
#define ZO_DISJOINT 1
#define ZO_ABOVE 2
#define ZO_BELOW 3
#ifdef DEBUG
#ifndef NO_LOCALOBJ_TAGS
HANDLE FAR UserLocalAlloc(WORD, WORD, WORD);
HANDLE FAR UserLocalFree(HANDLE);
char* FAR UserLocalLock(HANDLE);
BOOL FAR UserLocalUnlock(HANDLE);
HANDLE FAR UserLocalReAlloc(HANDLE, WORD, WORD);
WORD FAR UserLocalSize(HANDLE);
#define LocalAlloc(A,B) UserLocalAlloc(ST_MISC,A,B)
#define LocalFree UserLocalFree
#define LocalLock UserLocalLock
#define LocalUnlock UserLocalUnlock
#define LocalReAlloc UserLocalReAlloc
#define LocalSize UserLocalSize
#endif
#endif
#ifndef DEBUG
#define UserLocalAlloc(TagType,MemType,Size) LocalAlloc(MemType,Size)
#else
#ifdef NO_LOCALOBJ_TAGS
#define UserLocalAlloc(TagType,MemType,Size) LocalAlloc(MemType,Size)
#endif
#endif
#define XCOORD(l) ((int)LOWORD(l))
#define YCOORD(l) ((int)HIWORD(l))
#define abs(A) ((A < 0)? -A : A)
/* CheckPoint structure */
typedef struct tagCHECKPOINT
{
RECT rcNormal;
POINT ptMin;
POINT ptMax;
HWND hwndTitle;
WORD fDragged:1;
WORD fWasMaximizedBeforeMinimized:1;
WORD fWasMinimizedBeforeMaximized:1;
WORD fParkAtTop:1;
} CHECKPOINT;
// Internal property name definitions
#define CHECKPOINT_PROP_NAME "SysCP"
extern ATOM atomCheckpointProp;
#define WINDOWLIST_PROP_NAME "SysBW"
extern ATOM atomBwlProp;
#define InternalSetProp(hwnd, key, value, fInternal) SetProp(hwnd, key, value)
#define InternalGetProp(hwnd, key, fInternal) GetProp(hwnd, key)
#define InternalRemoveProp(hwnd, key, fInternal) RemoveProp(hwnd, key)
#define InternalEnumProps(hwnd, pfn, fInternal) EnumProps(hwnd, pfn)
/* Window List Structure */
typedef struct tagBWL
{
struct tagBWL *pbwlNext;
HWND *phwndMax;
HWND rghwnd[1];
} BWL;
typedef BWL *PBWL;
#define CHWND_BWLCREATE 32 // Initial BWL size
#define CHWND_BWLGROW 16 // Amt to grow BWL by when it needs to grow.
// BuildHwndList() commands
#define BWL_ENUMCHILDREN 1
#define BWL_ENUMLIST 2
/* DOS Semaphore Structure */
typedef struct tagSEMAPHORE
{
DWORD semaphore;
HQ hqOwner;
BYTE cBusy;
BYTE bOrder;
} SEMAPHORE;
typedef SEMAPHORE FAR *LPSEM;
#define CheckHwnd(hwnd) TRUE
#define CheckHwndNull(hwnd) TRUE
#define ValidateWindow(hwnd) TRUE
#define ValidateWindowNull(hwnd) TRUE
#define AllocP(wType,cb) UserLocalAlloc(wType,LPTR, cb)
#define FreeP(h) LocalFree(h)
#ifndef DEBUG
#define LMHtoP(handle) (*((char**)(handle)))
#else
#ifdef NO_LOCALOBJ_TAGS
#define LMHtoP(handle) (*((char**)(handle)))
#else
#define LMHtoP(handle) (*((char**)(handle))+sizeof(long))
#endif
#endif
/* Evil nasty macros to work with movable local objects */
#define LLock(handle) ((*(((BYTE *)(handle))+3))++)
#define LUnlock(handle) ((*(((BYTE *)(handle))+3))--)
#define dpHorzRes HORZRES
#define dpVertRes VERTRES
HWND WindowHitTest(HWND hwnd, POINT pt, int FAR* ppart);
/*
* If the handle for CF_TEXT/CF_OEMTEXT is a dummy handle then this implies
* that data is available in the other format (as CF_OEMTEXT/CF_TEXT)
*/
#define DUMMY_TEXT_HANDLE ((HANDLE)0xFFFF)
#define DATA_NOT_BANKED ((HANDLE)0xFFFF)
typedef struct tagCLIP
{
WORD fmt;
HANDLE hData;
} CLIP;
typedef CLIP *PCLIP;
extern CLIP* pClipboard;
typedef struct tagSYSMSG
{
WORD message;
WORD paramL;
WORD paramH;
DWORD time;
} SYSMSG;
typedef struct tagINTERNALSYSMSG
{
DWORD ismExtraInfo; /* Additional Info */
SYSMSG ismOldMsg; /* External System Msg structure */
} INTERNALSYSMSG;
typedef struct tagINTERNALMSG
{
DWORD imExtraInfo; /* Additional Info */
MSG imOldMsg; /* External App Msg structure */
} INTERNALMSG;
typedef struct tagTIMERINFO
{
LONG resolution;
} TIMERINFO;
typedef struct tagKBINFO
{
BYTE Begin_First_range; /* Values used for Far East systems */
BYTE End_First_range;
BYTE Begin_Second_range;
BYTE End_Second_range;
int stateSize; /* size of ToAscii()'s state block */
} KBINFO;
typedef struct tagMOUSEINFO
{
char fExist;
char fRelative;
int cButton;
int cmsRate;
int xThreshold;
int yThreshold;
int cxResolution; /* resolution needed for absolute mouse coordinate */
int cyResolution;
int mouseCommPort; /* comm port # to reserve since mouse is using it */
} MOUSEINFO;
typedef struct tagCURSORINFO
{
int csXRate;
int csYRate;
} CURSORINFO;
typedef struct tagCURSORSHAPE
{
int xHotSpot;
int yHotSpot;
int cx;
int cy;
int cbWidth; /* Bytes per row, accounting for word alignment. */
BYTE Planes;
BYTE BitsPixel;
} CURSORSHAPE;
typedef CURSORSHAPE *PCURSORSHAPE;
typedef CURSORSHAPE FAR * LPCURSORSHAPE;
// Standard ICON dimensions;
#define STD_ICONWIDTH 32
#define STD_ICONHEIGHT 32
#define STD_CURSORWIDTH 32
#define STD_CURSORHEIGHT 32
typedef struct tagICONINFO
{
int iIconCurrent;
int fHeightChange;
int crw; /* current nunber of rows. */
int cIconInRow; /* maximum icons in a row. */
int cIcon;
int wEvent;
} ICONINFO;
/* Height and Width of the desktop pattern bitmap. */
#define CXYDESKPATTERN 16
/* System object colors. */
#define CSYSCOLORS 21
typedef struct tagSYSCLROBJECTS
{
HBRUSH hbrScrollbar;
HBRUSH hbrDesktop;
HBRUSH hbrActiveCaption;
HBRUSH hbrInactiveCaption;
HBRUSH hbrMenu;
HBRUSH hbrWindow;
HBRUSH hbrWindowFrame;
HBRUSH hbrMenuText;
HBRUSH hbrWindowText;
HBRUSH hbrCaptionText;
HBRUSH hbrActiveBorder;
HBRUSH hbrInactiveBorder;
HBRUSH hbrAppWorkspace;
HBRUSH hbrHiliteBk;
HBRUSH hbrHiliteText;
HBRUSH hbrBtnFace;
HBRUSH hbrBtnShadow;
HBRUSH hbrGrayText;
HBRUSH hbrBtnText;
HBRUSH hbrInactiveCaptionText;
HBRUSH hbrBtnHilite;
} SYSCLROBJECTS;
typedef struct tagSYSCOLORS
{
LONG clrScrollbar;
LONG clrDesktop;
LONG clrActiveCaption;
LONG clrInactiveCaption;
LONG clrMenu;
LONG clrWindow;
LONG clrWindowFrame;
LONG clrMenuText;
LONG clrWindowText;
LONG clrCaptionText;
LONG clrActiveBorder;
LONG clrInactiveBorder;
LONG clrAppWorkspace;
LONG clrHiliteBk;
LONG clrHiliteText;
LONG clrBtnFace;
LONG clrBtnShadow;
LONG clrGrayText;
LONG clrBtnText;
LONG clrInactiveCaptionText;
LONG clrBtnHilite;
} SYSCOLORS;
typedef struct tagCARET
{
HWND hwnd;
BOOL fVisible;
BOOL fOn;
int iHideLevel;
int x;
int y;
int cy;
int cx;
HBITMAP hBitmap;
WORD cmsBlink; /* Blink time in milliseconds. */
WORD hTimer;
} CARET;
/* Resource ID of system menus. */
#define ID_SYSMENU MAKEINTRESOURCE(1)
#define ID_CLOSEMENU MAKEINTRESOURCE(2)
/* Menu Item Structure */
typedef struct tagITEM
{
WORD fFlags; /* Item Flags. Must be first in this
* structure.
*/
HMENU cmdMenu; /* Handle to a popup */
int xItem;
int yItem;
int cxItem;
int cyItem;
int dxTab;
HBITMAP hbmpCheckMarkOn; /* Bitmap for an on check */
HBITMAP hbmpCheckMarkOff; /* Bitmap for an off check */
HBITMAP hItem; /* Handle to a bitmap or string */
int ulX; /* String: Underline start */
int ulWidth; /* String: underline width */
int cch; /* String: character count */
} ITEM;
typedef ITEM *PITEM;
typedef ITEM FAR *LPITEM;
#define SIG_MENU ('M' | ('U' << 8))
/* Menu Structure */
typedef struct tagMENU
{
struct tagMENU* pMenuNext;
WORD fFlags; /* Menu Flags.*/
WORD signature; // signature
HQ hqOwner; // owner queue
int cxMenu;
int cyMenu;
int cItems; /* Number of items in rgItems */
HWND hwndNotify; /* The owner hwnd of this menu */
ITEM* rgItems; /* The list of items in this menu */
#ifdef JAPAN
int MenuMode; /* Kanji menu mode flag */
#endif
} MENU;
typedef MENU *PMENU;
// Layout of first part of menu heap structure.
//
typedef struct
{
WORD rgwReserved[8]; // reserve 8 words for standard DS stuff.
MENU* pMenuList;
} MENUHEAPHEADER;
// Head of menu list (USE ONLY WITH DS == MENUHEAP)
#define PMENULIST (((MENUHEAPHEADER*)NULL)->pMenuList)
void FAR SetMenuDS(void);
void FAR SetMenuStringDS(void);
#define MENUSYSMENU SPACE_CHAR /* Space character */
#define MENUCHILDSYSMENU '-' /* Hyphen */
/* Defines for the fVirt field of the Accelerator table structure. */
#define FVIRTKEY TRUE /* Assumed to be == TRUE */
#define FLASTKEY 0x80 /* Indicates last key in the table */
#define FNOINVERT 0x02
#define FSHIFT 0x04
#define FCONTROL 0x08
#define FALT 0x10
/* Accelerator Table structure */
typedef struct tagACCEL
{
BYTE fVirt; /* Also called the flags field */
WORD key;
WORD cmd;
} ACCEL;
typedef ACCEL FAR *LPACCEL;
/* OEM Bitmap Information Structure */
typedef struct tagOEMBITMAPINFO
{
HBITMAP hBitmap;
int cx;
int cy;
} OEMBITMAPINFO;
/* OEM Information Structure */
typedef struct tagOEMINFO
{
OEMBITMAPINFO bmFull;
OEMBITMAPINFO bmUpArrow;
OEMBITMAPINFO bmDnArrow;
OEMBITMAPINFO bmRgArrow;
OEMBITMAPINFO bmLfArrow;
OEMBITMAPINFO bmReduce;
OEMBITMAPINFO bmZoom;
OEMBITMAPINFO bmRestore;
OEMBITMAPINFO bmMenuArrow;
OEMBITMAPINFO bmComboArrow;
OEMBITMAPINFO bmReduceD;
OEMBITMAPINFO bmZoomD;
OEMBITMAPINFO bmRestoreD;
OEMBITMAPINFO bmUpArrowD;
OEMBITMAPINFO bmDnArrowD;
OEMBITMAPINFO bmRgArrowD;
OEMBITMAPINFO bmLfArrowD;
OEMBITMAPINFO bmUpArrowI; // Up Arrow Inactive
OEMBITMAPINFO bmDnArrowI; // Down Arrow Inactive
OEMBITMAPINFO bmRgArrowI; // Right Arrow Inactive
OEMBITMAPINFO bmLfArrowI; // Left Arrow Inactive
int cxbmpHThumb;
int cybmpVThumb;
int cxMin;
int cyMin;
int cxIconSlot;
int cyIconSlot;
int cxIcon;
int cyIcon;
WORD cxPixelsPerInch; /* logical pixels per inch in X direction */
WORD cyPixelsPerInch; /* logical pixels per inch in Y direction */
int cxCursor;
int cyCursor;
WORD DispDrvExpWinVer; /* Display driver expected win version no */
WORD ScreenBitCount; /* (BitCount * No of planes) for display */
int cSKanji;
int fMouse;
} OEMINFO;
/* OEMINFO structure for the monochrome bitmaps */
typedef struct tagOEMINFOMONO
{
OEMBITMAPINFO bmAdjust;
OEMBITMAPINFO bmSize;
OEMBITMAPINFO bmCheck; /* Check mark */
OEMBITMAPINFO bmbtnbmp; /* Check boxes */
OEMBITMAPINFO bmCorner; /* Corner of buttons */
int cxbmpChk;
int cybmpChk;
} OEMINFOMONO;
typedef struct tagBMPDIMENSION
{
int cxBits; /* Width of the Bitmap */
int cyBits; /* Height of the huge bitmap */
} BMPDIMENSION;
/* Holds the offsets of all bitmaps in bmBits (of hdcBits). */
typedef struct tagRESINFO
{
/* The next 9 match resInfo */
int dxClose;
int dxUpArrow;
int dxDnArrow;
int dxRgArrow;
int dxLfArrow;
int dxReduce;
int dxZoom;
int dxRestore;
int dxMenuArrow;
int dxComboArrow;
int dxReduceD;
int dxZoomD;
int dxRestoreD;
int dxUpArrowD;
int dxDnArrowD;
int dxRgArrowD;
int dxLfArrowD;
int dxUpArrowI; // Up Arrow Inactive.
int dxDnArrowI; // Down Arrow Inactive.
int dxRgArrowI; // Right Arrow Inactive.
int dxLfArrowI; // Left Arrow Inactive.
HBITMAP hbmBits;
BMPDIMENSION bmpDimension;
} RESINFO;
typedef struct tagRESINFOMONO
{
int dxSize;
int dxBtSize;
int dxCheck;
int dxCheckBoxes;
int dxBtnCorners;
HBITMAP hbmBits;
BMPDIMENSION bmpDimensionMono;
} RESINFOMONO;
typedef struct tagTASK
{
HQ hq;
HWND hwnd;
int ID;
WORD count;
WORD freq;
WORD ready;
FARPROC lpfnTask;
} TASK;
//**** SetWindowsHook() related definitions
typedef struct tagHOOKNODE
{
struct tagHOOKNODE* phkNext;// Next in chain
HOOKPROC lpfn; // function ptr to call (NULL if deleted during call)
int idHook; // hook ID for this node
HQ hq; // hq for which this hook applies
HMODULE hmodOwner; // Module handle that contains this hook
BOOL fCalled; // Whether inside call or not
} HOOKNODE;
#define HHOOK_MAGIC ('H' | ('K' << 8))
extern HOOKNODE* rgphkSysHooks[];
extern HOOKNODE* phkDeleted;
extern BYTE rgbHookFlags[];
LRESULT FAR CallHook(int code, WPARAM wParam, LPARAM lParam, int idHook);
BOOL FAR IsHooked(WORD idHook);
BOOL CallKbdHook(int code, WPARAM wParam, LPARAM lParam);
BOOL CallMouseHook(int code, WPARAM wParam, LPARAM lParam);
void UnhookHooks(HANDLE h, BOOL fQueue);
HMODULE FAR PASCAL GetProcModule(FARPROC lpfn);
HQ HqFromTask(HTASK htask);
void UnhookHotKeyHooks(HMODULE hmodule);
#ifdef DISABLE
#define CallVisRgnHook(pparams) (int)CallHook(0, 0, (LONG)(VOID FAR*)pparams, WH_VISRGN) // ;Internal
#endif
// DC cache related declarations
// DC Cache Entry structure (DCE)
#define CACHESIZE 5
typedef struct tagDCE
{
struct tagDCE *pdceNext;
HDC hdc;
HWND hwnd;
HWND hwndOrg;
HWND hwndClip;
HRGN hrgnClip;
DWORD flags;
} DCE;
extern DCE *pdceFirst; // Pointer to first element of cache
extern HRGN hrgnGDC; // Temp used by GetCacheDC et al
extern HRGN hrgnEWL; // Temp used by ExcludeWindowList()
extern HRGN hrgnDCH; // Temp used by DCHook()
extern BOOL fSiblingsTouched;
#define InternalReleaseDC(hdc) ReleaseCacheDC(hdc, FALSE)
/* InvalidateDCCache() flag values */
#define IDC_DEFAULT 0x0001
#define IDC_CHILDRENONLY 0x0002
#define IDC_CLIENTONLY 0x0004
#define IDC_VALID 0x0007 /* ;Internal */
BOOL FAR InvalidateDCCache(HWND hwnd, WORD flags);
int CalcWindowRgn(HWND hwnd, HRGN hrgn, BOOL fClient);
BOOL FAR CalcVisRgn(HRGN hrgn, HWND hwndOrg, HWND hwndClip, DWORD flags);
BOOL FAR ReleaseCacheDC(HDC hdc, BOOL fEndPaint);
HDC FAR GetCacheDC(HWND hwndOrg, HWND hwndClip, HRGN hrgnClip, HDC hdcMatch, DWORD flags);
HDC FAR CreateCacheDC(HWND hwndOrg, DWORD flags);
BOOL FAR DestroyCacheDC(HDC hdc);
HWND FAR WindowFromCacheDC(HDC hdc);
BOOL FAR IntersectWithParents(HWND hwnd, LPRECT lprc);
//**************************************************************************
//
// void SetVisible(hwnd, fSet)
//
// This routine must be used to set or clear the WS_VISIBLE style bit.
// It also handles the setting or clearing of the WF_TRUEVIS bit.
//
#define SetVisible(hwnd, fSet) \
if (fSet) \
{ \
SetWF((hwnd), WFVISIBLE); \
} \
else \
{ \
ClrWF((hwnd), WFVISIBLE); \
ClrFTrueVis(hwnd); \
}
void FAR ClrFTrueVis(HWND hwnd);
/* Saved Popup Bits structure */
typedef struct tagSPB
{
struct tagSPB *pspbNext;
HWND hwnd;
HBITMAP hbm;
RECT rc;
HRGN hrgn;
WORD flags;
} SPB;
#define SPB_SAVESCREENBITS 0x0001 // (*lpSaveScreenBits) was called
#define SPB_LOCKUPDATE 0x0002 // LockWindowUpdate() SPB
#ifdef DISABLE
#define SPB_DRAWBUFFER 0x0004 // BeginDrawBuffer() SPB
#endif
// SPB related functions
extern SPB* pspbFirst;
extern HRGN hrgnSCR; // Temp rgn used by SpbCheckRect() */
extern HRGN hrgnSPB1; // More temp regions
extern HRGN hrgnSPB2;
// This macro can be used to quickly avoid far calls to the SPB code.
// In some cases it can prevent pulling in the segment that contains
// all the code.
//
#define AnySpbs() (pspbFirst != NULL) // TRUE if there are any SPBs
BOOL SpbValidate(SPB* pspb, HWND hwnd, BOOL fChildren);
void SpbCheckDce(DCE* pdce);
BOOL FBitsTouch(HWND hwndInval, LPRECT lprcDirty, SPB* pspb, DWORD flagsDcx);
void FAR DeleteHrgnClip(DCE* pdce);
void FAR CreateSpb(HWND hwnd, WORD flags, HDC hdcScreen);
void FAR FreeSpb(SPB* pspb);
SPB* FAR FindSpb(HWND hwnd);
void FAR SpbCheckRect(HWND hwnd, LPRECT lprc, DWORD flagsDcx);
void FAR SpbCheckHwnd(HWND hwnd);
BOOL FAR RestoreSpb(HWND hwnd, HRGN hrgnUncovered, HDC FAR* phdcScreen);
void FAR SpbCheck(void);
BOOL FAR SpbCheckRect2(SPB* pspb, HWND hwnd, LPRECT lprc, DWORD flagsDcx);
// LockWindowUpdate related stuff
extern HWND hwndLockUpdate;
extern HQ hqLockUpdate;
void FAR InternalInvalidate(register HWND hwnd, HRGN hrgnUpdate, WORD flags);
BOOL InternalInvalidate2(HWND hwnd, HRGN hrgn, HRGN hrgnSubtract, LPRECT prcParents, WORD flags);
void _fastcall DeleteUpdateRgn(HWND hwnd);
// SmartRectInRegion return codes
//
#define RIR_OUTSIDE 0
#define RIR_INTERSECT 1
#define RIR_INSIDE 2
WORD FAR SmartRectInRegion(HRGN hrgn, LPRECT lprc);
// Function used to redraw the screen
#define RedrawScreen() \
InternalInvalidate(hwndDesktop, (HRGN)1, \
RDW_INVALIDATE | RDW_ERASE | RDW_FRAME | RDW_ALLCHILDREN)
extern HRGN hrgnInv1; // Temp used by RedrawWindow()
extern HRGN hrgnInv2; // Temp used by InternalInvalidate()
HDC CALLBACK InternalBeginPaint(HWND hwnd, PAINTSTRUCT FAR *lpps, BOOL fWindowDC);
// Background and frame drawing related stuff
// WM_SYNCPAINT wParam and DoSyncPaint flags
void FAR DoSyncPaint(HWND hwnd, HRGN hrgn, WORD flags);
// NOTE: the first 4 values must be as defined for backward compatibility
// reasons. They are sent as parameters to the WM_SYNCPAINT message.
// They used to be hard-coded constants.
//
// Only ENUMCLIPPEDCHILDREN, ALLCHILDREN, and NOCHECKPARENTS are passed on
// during recursion. The other bits reflect the current window only.
//
#define DSP_ERASE 0x0001 // Send WM_ERASEBKGND
#define DSP_FRAME 0x0002 // Send WM_NCPAINT
#define DSP_ENUMCLIPPEDCHILDREN 0x0004 // Enum children if WS_CLIPCHILDREN
#define DSP_WM_SYNCPAINT 0x0008 // Called from WM_SYNCPAINT handler
#define DSP_NOCHECKPARENTS 0x0010 // Don't check parents for update region
#define DSP_ALLCHILDREN 0x0020 // Enumerate all children.
BOOL FAR SendEraseBkgnd(HWND hwnd, HDC hdcBeginPaint, HRGN hrgnUpdate);
void SendNCPaint(HWND hwnd, HRGN hrgnUpdate);
HWND _fastcall ParentNeedsPaint(HWND hwnd);
// UpdateWindow definitions
#define UW_ENUMCHILDREN 0x0001
#define UW_VALIDATEPARENTS 0x0002
void InternalUpdateWindow(HWND hwnd, WORD flags);
void UpdateWindow2(register HWND hwnd, WORD flags);
void ValidateParents(register HWND hwnd);
// Used for UpdateWindow() calls that really shouldn't be there...
#define UpdateWindow31(hwnd)
// ScrollWindow() definitions
extern HRGN hrgnSW;
extern HRGN hrgnScrl1;
extern HRGN hrgnScrl2;
extern HRGN hrgnScrlVis;
extern HRGN hrgnScrlSrc;
extern HRGN hrgnScrlDst;
extern HRGN hrgnScrlValid;
extern HRGN hrgnScrlUpdate;
// Scroll bar definitions
typedef struct tagSBINFO
{
int pos;
int posMin;
int posMax;
int cpxThumb;
int cpxArrow;
int cpx;
int pxMin;
int cxBorder;
int cyBorder;
int nBar;
HWND calcHwnd; /* used to identify the window described by this info */
} SBINFO;
// The following masks can be used along with the wDisableFlags field of SB
// to find if the Up/Left or Down/Right arrow or Both are disabled;
// Now it is possible to selectively Enable/Disable just one or both the
// arrows in a scroll bar control;
#define LTUPFLAG 0x0001 // Left/Up arrow disable flag.
#define RTDNFLAG 0x0002 // Right/Down arrow disable flag.
#define SBFLAGSINDEX 6 // Index of Scroll bar flags in Wnd->rgwScroll[]
typedef struct tagSB
{
WND wnd;
int pos;
int min;
int max;
BOOL fVert;
WORD wDisableFlags; // Indicates which arrow is disabled;
#ifdef DBCS_IME
BOOL bImeStatus; // IME status save
#endif
} SB;
typedef SB *PSB;
typedef SB FAR *LPSB;
/* Structure for list of drivers installed by USER and opened by applications.
*/
typedef struct tagDRIVERTABLE
{
WORD fBusy:1;
WORD fFirstEntry:1;
int idNextDriver; /* Next driver in load chain -1 if end */
int idPrevDriver; /* Prev driver in load chain -1 if begin */
HANDLE hModule;
DWORD dwDriverIdentifier;
char szAliasName[128];
LRESULT (FAR * lpDriverEntryPoint)(DWORD, HDRVR, WORD, LPARAM, LPARAM);
} DRIVERTABLE;
typedef DRIVERTABLE FAR *LPDRIVERTABLE;
LRESULT FAR InternalLoadDriver(LPCSTR szDriverName,
LPCSTR szSectionName,
LPCSTR lpstrTail,
WORD cbTail,
BOOL fSendEnable);
WORD FAR InternalFreeDriver(HDRVR hDriver, BOOL fSendDisable);
/* Defines for InternalBroadcastDriverMessage flags */
#define IBDM_SENDMESSAGE 0x00000001
#define IBDM_REVERSE 0x00000002
#define IBDM_FIRSTINSTANCEONLY 0x00000004
LRESULT FAR InternalBroadcastDriverMessage(HDRVR, WORD, LPARAM, LPARAM, LONG);
/* Application queue structure */
#define MSGQSIZE 10
typedef struct tagQ
{
HQ hqNext;
HTASK hTask;
int cbEntry;
int cMsgs;
WORD pmsgRead;
WORD pmsgWrite;
WORD pmsgMax;
LONG timeLast; /* Time, position, and ID of last message */
POINT ptLast;
int idLast;
DWORD dwExtraInfoLast; /* Additional info */
WORD unused;
LPARAM lParam;
WPARAM wParam;
int message;
HWND hwnd;
LRESULT result;
int cQuit;
int exitCode;
WORD flags;
WORD pMsgFilterChain;
HGLOBAL hDS;
int wVersion;
HQ hqSender;
HQ hqSendList;
HQ hqSendNext;
WORD cPaintsReady;
WORD cTimersReady;
WORD changebits;
WORD wakebits;
WORD wakemask;
WORD pResult;
WORD pResultSend;
WORD pResultReceive;
HOOKNODE* phkCurrent;
HOOKNODE* rgphkHooks[WH_CHOOKS];
DWORD semInput;
HQ hqSemNext;
INTERNALMSG rgmsg[MSGQSIZE];
} Q;
typedef Q FAR *LPQ;
// NOTE: These macros can be recoded to be much faster if
// hqCurrent and lpqCurrent are defined as globals that are set
// at task switch time.
//
#define Lpq(hq) ((LPQ)MAKELP((hq), 0))
#define LpqFromHq(hq) Lpq(hq)
#define LpqCurrent() ((LPQ)(MAKELP(HqCurrent(), 0)))
typedef WORD ICH;
// Q flags field bits
#define QF_SEMWAIT 0x01
#define QF_INIT 0x02
#define QF_PALETTEAPP 0x04 /* This app used the palette */
// Internal GetQueueStatus() flags
#define QS_SMRESULT 0x8000
#define QS_SMPARAMSFREE 0x4000
/* Capture codes */
#define NO_CAP_CLIENT 0 /* no capture; in client area */
#define NO_CAP_SYS 1 /* no capture; in sys area */
#define CLIENT_CAPTURE 2 /* client-relative capture */
#define WINDOW_CAPTURE 3 /* window-relative capture */
#define SCREEN_CAPTURE 4 /* screen-relative capture */
// Extra bytes needed for specific window classes
//
#define CBEDITEXTRA 6
#define CBSTATICEXTRA 6
#ifdef DBCS_IME
#define CBBUTTONEXTRA 4 /* need one byte for IME status save */
#else
#define CBBUTTONEXTRA 3
#endif
#define CBMENUEXTRA 2
/* DrawBtnText codes */
#define DBT_TEXT 0x0001
#define DBT_FOCUS 0x0002
/* RIP error codes */
#define RIP_SEMCHECK 0xFFF4 /* Decimal -12 */
#define RIP_SWP 0xFFF1 /* Decimal -15 */ /* SetMultipleWindowPos */
#define RIP_MEMALLOC 0x0001 /* Insufficient memory for allocation */
#define RIP_MEMREALLOC 0x0002 /* Error realloc memory */
#define RIP_MEMFREE 0x0003 /* Memory cannot be freed */
#define RIP_MEMLOCK 0x0004 /* Memory cannot be locked */
#define RIP_MEMUNLOCK 0x0005 /* Memory cannot be unlocked */
#define RIP_BADGDIOBJECT 0x0006 /* Invalid GDI object */
#define RIP_BADWINDOWHANDLE 0x0007 /* Invalid Window handle */
#define RIP_DCBUSY 0x0008 /* Cached display contexts are busy */
#define RIP_NODEFWINDOWPROC 0x0009
#define RIP_CLIPBOARDOPEN 0x000A
#define RIP_GETDCWITHOUTRELEASE 0x000B /* App did a GetDC and destroyed window without release*/
#define RIP_INVALKEYBOARD 0x000C
#define RIP_INVALMOUSE 0x000D
#define RIP_INVALCURSOR 0x000E
#define RIP_DSUNLOCKED 0x000F
#define RIP_INVALLOCKSYSQ 0x0010
#define RIP_CARETBUSY 0x0011
#define RIP_GETCWRANGE 0x0012
#define RIP_HWNDOWNSDCS 0x0013 /* One hwnd owns all the DCs */
#define RIP_BADHQ 0x0014 /* operation on something of wrong task */
#define RIP_BADDCGRAY 0x0015 /* bad dc gray */
#define RIP_REFCOUNTOVERFLOW 0x0016 /* Ref Count in CLS overflows */
#define RIP_REFCOUNTUNDERFLOW 0x0017 /* Ref Count in CLS becomes negative */
#define RIP_COUNTBAD 0x0018 /* Ref Count should be zero; But not so */
#define RIP_INVALIDWINDOWSTYLE 0x0019 /* Illegal window style bits were set */
#define RIP_GLOBALCLASS 0x001A /* An application that registered a global
* class is terminating, but the reference
* count is non-zero(somebody else is using
* it). */
#define RIP_BADHOOKHANDLE 0x001B
#define RIP_BADHOOKID 0x001C
#define RIP_BADHOOKPROC 0x001D
#define RIP_BADHOOKMODULE 0x001E
#define RIP_BADHOOKCODE 0x001F
#define RIP_HOOKNOTALLOWED 0x0020
#define RIP_UNREMOVEDPROP 0x0021
#define RIP_BADPROPNAME 0x0022
#define RIP_BADTASKHANDLE 0x0023
#define RIP_GETSETINFOERR1 0x0027 /* Bad negative index for Get/Set/Window etc., */
#define RIP_GETSETINFOERR2 0x0028 /* Bad Positive index for Get/Set/Window etc., */
#define RIP_DIALOGBOXDESTROYWINDOWED 0x0029 /* App called DestroyWindow on a DialogBox window */
#define RIP_WINDOWIDNOTFOUND 0x002A /* Dialog control ID not found */
#define RIP_SYSTEMERRORBOXFAILED 0x002B /* Hard sys error box failed due to no hq */
#define RIP_INVALIDMENUHANDLE 0x002C /* Invalid hMenu */
#define RIP_INVALIDMETAFILEINCLPBRD 0x002D /* Invalid meta file pasted into clipboard */
#define RIP_MESSAGEBOXWITHNOQUEUE 0x002E /* MessageBox called with no message queue initialized */
#define RIP_DLGWINDOWEXTRANOTALLOCATED 0x002F /* DLGWINDOWEXTRA bytes not allocated for dlg box */
#define RIP_INTERTASKSENDMSGHANG 0x0030 /* Intertask send message with tasks locked */
#define RIP_INVALIDPARAM 0x0031 /* Invalid parameter passed to a function */
#define RIP_ASSERTFAILED 0x0032
#define RIP_INVALIDFUNCTIONCALLED 0x0033 /* Invalid function was called */
#define RIP_LOCKINPUTERROR 0x0034 /* LockInput called when input was already locked or when never locked.*/
#define RIP_NULLWNDPROC 0x0035 /* SetWindowLong uses a NULL wnd proc */
#define RIP_BAD_UNHOOK 0x0036 /* SetWindowsHook is used to unhook. */
#define RIP_QUEUE_FULL 0x0037 /* PostMessage failed due to full queue. */
#ifdef DEBUG
#define DebugFillStruct DebugFillBuffer
#define DebugErr(flags, sz) \
{ static char CODESEG rgch[] = "USER: "sz; DebugOutput((flags) | DBF_USER, rgch); }
extern char CODESEG ErrAssertFailed[];
#define Assert(f) ((f) ? TRUE : (DebugOutput(DBF_ERROR, ErrAssertFailed), FALSE))
extern BOOL fRevalidate;
#define DONTREVALIDATE() fRevalidate = FALSE;
VOID FAR CheckCbDlgExtra(HWND hwnd);
#else
#define DebugErr(flags, sz)
#define Assert(f) FALSE
#define DONTREVALIDATE()
#define CheckCbDlgExtra(hwnd)
#endif
#define UserLogError(flags, errcode, sz) \
{ DebugErr((flags), sz); \
LogError(errcode, NULL); }
#define BM_CLICK WM_USER+99
#define CH_PREFIX '&'
#define CH_HELPPREFIX 0x08
#if defined(JAPAN) || defined(KOREA)
// Japan and Korea support both Kanji and English mnemonic characters,
// toggled from control panel. Both mnemonics are embedded in menu
// resource templates. The following prefixes guide their parsing.
//
#define CH_ENGLISHPREFIX 0x1E
#define CH_KANJIPREFIX 0x1F
#define KMM_ENGLISH 2 // English/Romaji menu mode
#define KMM_KANJI 3 // Kanji/Hangeul menu mode
extern int KanjiMenuMode;
#endif
/* The total number of strings used as Button strings in MessageBoxes */
#define MAX_MB_STRINGS 8
/* Dialog box activation border width factor. */
#define CLDLGFRAME 4
#define CLDLGFRAMEWHITE 0
/* Constants for onboard bitmap save. */
#define ONBOARD_SAVE 0x0000
#define ONBOARD_RESTORE 0x0001
#define ONBOARD_CLEAR 0x0002
/* Bitmap resource IDs */
#define BMR_ICON 1
#define BMR_BITMAP 2
#define BMR_CURSOR 3
#define BMR_DEVDEP 0
#define BMR_DEVIND 1
#define BMR_DEPIND 2
/* PID definitions */
#define get_PID 0
#define get_EMSSave_area 1
#define dont_free_banks 2
#define free_PIDs_banks 3
#define free_handle 4
#define memory_sizes 5
#define DDE_shared 6
// SetWindowPos() related structures and definitions
//
extern HRGN hrgnInvalidSum;
extern HRGN hrgnVisNew;
extern HRGN hrgnSWP1;
extern HRGN hrgnValid;
extern HRGN hrgnValidSum;
extern HRGN hrgnInvalid;
// CalcValidRects() "Region Empty" flag values
// A set bit indicates the corresponding region is empty.
//
#define RE_VISNEW 0x0001 // CVR "Region Empty" flag values
#define RE_VISOLD 0x0002 // A set bit indicates the
#define RE_VALID 0x0004 // corresponding region is empty.
#define RE_INVALID 0x0008
#define RE_SPB 0x0010
#define RE_VALIDSUM 0x0020
#define RE_INVALIDSUM 0x0040
typedef struct tagCVR // cvr
{
WINDOWPOS pos; // MUST be first field of CVR!
int xClientNew; // New client rectangle
int yClientNew;
int cxClientNew;
int cyClientNew;
RECT rcBlt;
int dxBlt; // Distance blt rectangle is moving
int dyBlt;
WORD fsRE; // RE_ flags: whether hrgnVisOld is empty or not
HRGN hrgnVisOld; // Previous visrgn
} CVR;
typedef struct tagSMWP // smwp
{
int ccvr; // Number of CVRs in the SWMP
int ccvrAlloc; // Number of actual CVRs allocated in the SMWP
BOOL fInUse;
WORD signature; // signature word for handle validation
CVR rgcvr[1];
} SMWP;
#define SMWP_SIG ('W' | ('P' << 8))
#define PEMWP HDWP
#define NEAR_SWP_PTRS
#ifdef NEAR_SWP_PTRS
typedef SMWP* PSMWP;
typedef CVR* PCVR;
#else
typedef SMWP FAR* PSMWP;
typedef CVR FAR* PCVR;
#endif
BOOL ValidateSmwp(PSMWP psmwp, BOOL FAR* pfSyncPaint);
HWND SmwpFindActive(PSMWP psmwp);
void SendChangedMsgs(PSMWP psmwp);
BOOL ValidateWindowPos(WINDOWPOS FAR *ppos);
BOOL BltValidBits(PSMWP psmwp);
BOOL SwpCalcVisRgn(HWND hwnd, HRGN hrgn);
BOOL CombineOldNewVis(HRGN hrgn, HRGN hrgnVisOld, HRGN hrgnVisNew, WORD crgn, WORD fsRgnEmpty);
void CalcValidRects(PSMWP psmwp, HWND FAR* phwndNewActive);
BOOL ValidateZorder(PCVR pcvr);
PSMWP ZOrderByOwner(PSMWP psmwp);
PSMWP AddCvr(PSMWP psmwp, HWND hwnd, HWND hwndInsertAfter, WORD flags);
BOOL SwpActivate(HWND hwndNewActive);
void FAR HandleWindowPosChanged(HWND hwnd, WINDOWPOS FAR *lppos);
void FAR OffsetChildren(HWND hwnd, int dx, int dy, LPRECT prcHitTest);
BOOL FAR IntersectWithParents(HWND hwnd, LPRECT lprcParents);
// Preallocated buffers for use during SetWindowPos to prevent memory
// allocation failures.
//
#define CCVR_WORKSPACE 4
#define CCVR_MSG_WORKSPACE 2
#define CB_WORKSPACE ((sizeof(SMWP) - sizeof(CVR)) + CCVR_WORKSPACE * sizeof(CVR))
#define CB_MSG_WORKSPACE ((sizeof(SMWP) - sizeof(CVR)) + CCVR_MSG_WORKSPACE * sizeof(CVR))
extern BYTE workspace[];
extern BYTE msg_workspace[];
typedef struct tagSTAT
{
WND wnd;
HFONT hFont;
HBRUSH hBrush;
HICON hIcon;
} STAT;
typedef STAT *PSTAT;
#define IsCrlf(x) ((char)(x)==0x0D)
/* Help Engine stuff */
typedef struct
{
unsigned short cbData; /* Size of data */
unsigned short usCommand; /* Command to execute */
unsigned long ulTopic; /* Topic/context number (if needed) */
unsigned long ulReserved; /* Reserved (internal use) */
unsigned short offszHelpFile; /* Offset to help file in block */
unsigned short offabData; /* Offset to other data in block */
} HLP;
typedef HLP FAR *LPHLP;
typedef HANDLE HDCS;
/* DrawFrame() Commands */
#define DF_SHIFT0 0x0000
#define DF_SHIFT1 0x0001
#define DF_SHIFT2 0x0002
#define DF_SHIFT3 0x0003
#define DF_PATCOPY 0x0000
#define DF_PATINVERT 0x0004
#define DF_SCROLLBAR (COLOR_SCROLLBAR << 3)
#define DF_BACKGROUND (COLOR_BACKGROUND << 3)
#define DF_ACTIVECAPTION (COLOR_ACTIVECAPTION << 3)
#define DF_INACTIVECAPTION (COLOR_INACTIVECAPTION << 3)
#define DF_MENU (COLOR_MENU << 3)
#define DF_WINDOW (COLOR_WINDOW << 3)
#define DF_WINDOWFRAME (COLOR_WINDOWFRAME << 3)
#define DF_MENUTEXT (COLOR_MENUTEXT << 3)
#define DF_WINDOWTEXT (COLOR_WINDOWTEXT << 3)
#define DF_CAPTIONTEXT (COLOR_CAPTIONTEXT << 3)
#define DF_ACTIVEBORDER (COLOR_ACTIVEBORDER << 3)
#define DF_INACTIVEBORDER (COLOR_INACTIVEBORDER << 3)
#define DF_APPWORKSPACE (COLOR_APPWORKSPACE << 3)
#define DF_GRAY (DF_APPWORKSPACE + (1 << 3))
#ifdef FASTFRAME
typedef struct tagFRAMEBITMAP
{
int x; /* Top Left co-ordinates */
int y;
int dx; /* Width of the bitmap */
int dy; /* Height of the bitmap */
} FRAMEBITMAP;
#define FB_THICKFRAME FALSE
#define FB_DLGFRAME TRUE
#define FB_ACTIVE 0
#define FB_INACTIVE 1
#define FB_HORZ 0
#define FB_VERT 1
#define FB_DLG_HORZ 2
#define FB_DLG_VERT 3
#define FB_CAPTION 4
typedef struct tagFRAMEDETAILS
{
HBITMAP hFrameBitmap[5][2]; /* indices explained above */
FRAMEBITMAP ActBorderH[4]; /* Four parts of Thick frame Horz bitmap */
FRAMEBITMAP ActBorderV[4];
FRAMEBITMAP DlgFrameH[4]; /* Four parts of Dlg Frame Horz bitmap */
FRAMEBITMAP DlgFrameV[4];
FRAMEBITMAP CaptionInfo[7];
int clBorderWidth;
} FRAMEDETAILS;
typedef FRAMEBITMAP *PFRAMEBITMAP;
// Fast frame related macros
#define FC_ACTIVEBORDER 0x01
#define FC_INACTIVEBORDER 0x02
#define FC_ACTIVECAPTION 0x04
#define FC_INACTIVECAPTION 0x08
#define FC_WINDOWFRAME 0x10
#define FC_ACTIVEBIT 0x01
#define FC_INACTIVEBIT 0x02
#define FC_STATUSBITS (FC_ACTIVEBIT | FC_INACTIVEBIT)
#endif /* FASTFRAME */
// The following defines the components of nKeyboardSpeed
#define KSPEED_MASK 0x001F // Defines the key repeat speed.
#define KDELAY_MASK 0x0060 // Defines the keyboard delay.
#define KDELAY_SHIFT 5
/*--------------------------------------------------------------------------*/
/* */
/* Secret Imports - */
/* */
/*--------------------------------------------------------------------------*/
#ifndef MSDWP
/* Imported from Kernel. */
HQ FAR GetTaskQueue(HTASK);
HQ FAR SetTaskQueue(HTASK, HQ);
void FAR LockCurrentTask(BOOL);
HANDLE FAR emscopy();
//void FAR ExitKernel(int);
int FAR LocalCountFree(void);
int FAR LocalHeapSize(void);
BOOL FAR IsWinoldapTask(HTASK);
WORD FAR GetExeVersion(void);
DWORD FAR GetTaskDS(void);
void FAR SetTaskSignalProc(WORD, FARPROC);
DWORD FAR GetHeapSpaces(HMODULE hModule);
int FAR IsScreenGrab(void);
/* Imported from GDI. */
int API IntersectVisRect(HDC, int, int, int, int);
int API ExcludeVisRect(HDC, int, int, int, int);
int API SelectVisRgn(HDC, HRGN);
int API SaveVisRgn(HDC);
int API RestoreVisRgn(HDC);
HRGN API InquireVisRgn(HDC);
HDCS API GetDCState(HDC);
BOOL API SetDCState(HDC, HDCS);
HFONT API GetCurLogFont(HDC); // From GDI
#define SwapHandle(foo)
HANDLE FAR GDIInit2(HANDLE, HANDLE);
HRGN API GetClipRgn(HDC);
HBITMAP FAR CreateUserBitmap(int, int, int, int, LONG);
void FAR UnRealizeObject(HBRUSH);
void FAR LRCCFrame(HDC, LPRECT, HBRUSH, DWORD);
void FAR Death(HDC);
void FAR Resurrection(HDC, LONG, LONG, LONG);
void FAR DeleteAboveLineFonts(void);
BOOL FAR GDIInitApp(void);
HBITMAP FAR CreateUserDiscardableBitmap(HDC, int, int);
void FAR FinalGDIInit(HBRUSH);
void FAR GDIMoveBitmap(HBITMAP);
BOOL FAR IsValidMetaFile(HMETAFILE);
#define GDIMoveBitmap(d1)
#endif /* MSDWP */
/*--------------------------------------------------------------------------*/
/* */
/* DS Global Variables (from WINDS.C) */
/* */
/*--------------------------------------------------------------------------*/
//***** Initialization globals
extern HINSTANCE hInstanceWin;
extern HMODULE hModuleWin;
//WORD rgwSysMet[]; // Defined in winmisc2.asm
//***** System mode globals
extern BOOL fDialog; // Dialog box is active
extern BOOL fEndSession; // Shutting down system
extern BOOL fTaskIsLocked; // LockTask() called
extern BOOL fMessageBox; // hard message box active
extern HWND hwndSysModal;
extern HQ hqAppExit; // hq of app in app termination code
//***** System option settings globals
extern int nKeyboardSpeed; // keyboard repeat rate
extern int iScreenSaveTimeOut; // screen saver timeout
extern BOOL fHires; /* VERTRES > 300? */
extern BOOL fPaletteDisplay; /* Are we on a palette display driver? */
extern BOOL fEdsunChipSet; /* Edsun vga chip set? */
//***** Window manager globals
extern HWND hwndDesktop; // Desktop window
extern PCLS pclsList; // List of registered classes
extern PBWL pbwlCache; // BuildWindowList() globals
extern PBWL pbwlList;
//***** Input globals
extern BOOL fThunklstrcmp; // if TRUE we thunk to Win32
extern WORD idSysPeek; /* ID in sys queue of msg being looked at */
extern DWORD timeLastInputMessage; // Time of the last keyboard, mouse, or
// other input message.
extern HWND hwndCursor;
extern HWND hwndDblClk; // doubleclick parsing
extern RECT rcDblClk;
extern WORD dtDblClk;
extern WORD msgDblClk;
extern DWORD timeDblClk;
extern int defQueueSize; // Default msg queue size
extern HTASK hTaskLockInput; /* Task which has called LockInput() */
extern KBINFO keybdInfo;
extern BYTE *pState; // Pointer to buffer for ToAscii
extern BOOL fShrinkGDI; /* Does GDI's heap needs shrinking? */
extern BOOL fLockNorem; /* PeekMsg NOREMOVE flag */
//***** Activation/Focus/Capture related globals
extern HWND hwndActive;
extern HWND hwndActivePrev;
extern HWND hwndFocus;
extern int codeCapture;
extern HWND hwndCapture;
//***** SetWindowPos() related globals
extern HRGN hrgnInvalidSum; // Temps used by SetWindowPos()
extern HRGN hrgnVisNew;
extern HRGN hrgnSWP1;
extern HRGN hrgnValid;
extern HRGN hrgnValidSum;
extern HRGN hrgnInvalid;
#ifdef LATER
// Are these still needed now that SysErrorBox() is working?
#endif
extern BYTE workspace[]; // Buffers used to prevent mem alloc
extern BYTE msg_workspace[]; // failures in messagebox
//***** General graphics globals
extern HDC hdcBits; /* DC with User's bitmaps */
extern HDC hdcMonoBits; /* DC with User's MONO bitmaps */
extern OEMINFO oemInfo;
extern OEMINFOMONO oemInfoMono;
extern RESINFO resInfo;
extern RESINFOMONO resInfoMono;
extern SYSCLROBJECTS sysClrObjects;
extern SYSCOLORS sysColors;
extern HFONT hFontSys; // alias for GetStockObject(SYSTEM_FONT);
extern HFONT hFontSysFixed; // alias for GetStockObject(SYSTEM_FIXED_FONT);
extern HBRUSH hbrWhite; // alias for GetStockObject(WHITE_BRUSH);
extern HBRUSH hbrBlack; // alias for GetStockObject(BLACK_BRUSH);
extern HPALETTE hPalDefaultPalette; // alias for GetStockObject(DEFAULT_PALETTE);
//***** DC Cache related globals
extern DCE* pdceFirst; /* Ptr to first entry in cache */
extern HRGN hrgnEWL; // Temp used by ExcludeWindowList()
extern HRGN hrgnGDC; // Temp used by GetCacheDC() et al
extern HRGN hrgnDCH; // Temp used by DCHook()
extern HRGN hrgnNull; // empty rgn
extern HRGN hrgnScreen; // rcScreen-sized rgn
extern HDCS hdcsReset;
extern HDC hdcScreen;
//***** Begin/EndDrawBuffer() globals
#ifdef DISABLE
extern HWND hwndBuffer;
extern HBITMAP hbmBuffer;
extern HBITMAP hbmBufferSave;
extern int cxBuffer;
extern int cyBuffer;
extern int dxBuffer;
extern DCE* pdceBuffer;
extern int dxBufferVisRgn;
extern int dyBufferVisRgn;
extern BOOL fBufferFlushed;
extern RECT rcBuffer;
extern HDCS hdcsMemReset;
#endif
//***** LockWindowUpdate related globals
extern HQ hqLockUpdate;
extern HWND hwndLockUpdate;
//***** SPB related globals
extern SPB *pspbFirst;
extern HRGN hrgnSCR; // Temp used by SpbCheckRect()
extern HRGN hrgnSPB1;
extern HRGN hrgnSPB2;
extern HRGN hrgnInv0; // Temps used by InternalInvalidate()
extern HRGN hrgnInv1;
extern HRGN hrgnInv2;
//***** General Metrics
extern RECT rcScreen; // Screen rectangle
extern int cxScreen; // Screen height/width
extern int cyScreen;
extern BOOL fBeep; /* Warning beeps allowed? */
extern int cxSysFontChar; // System font metrics
extern int cxSysFontOverhang;
extern int cySysFontAscent;
extern int cySysFontChar;
extern int cySysFontExternLeading;
extern int cxBorder; // Nominal border width/height
extern int cyBorder;
extern int cyCaption; // height of caption
extern int cxSize; // dimensions of system menu bitmap
extern int cySize;
extern int cyHScroll; // scroll bar dimensions
extern int cxVScroll;
extern int cxSlot; // icon slot dimensions
extern int cySlot;
//***** ScrollWindow/ScrollDC related globals
extern HRGN hrgnSW; // Temps used by ScrollDC/ScrollWindow
extern HRGN hrgnScrl1;
extern HRGN hrgnScrl2;
extern HRGN hrgnScrlVis;
extern HRGN hrgnScrlSrc;
extern HRGN hrgnScrlDst;
extern HRGN hrgnScrlValid;
extern HRGN hrgnScrlUpdate;
//***** Clipboard globals
extern int cNumClipFormats; // Number of formats in clipboard
extern CLIP *pClipboard; // Clipboard data
extern HQ hqClipLock; // hq of app accessing clipboard
extern HWND hwndClipOwner; // clipboard owner
extern HWND hwndClipViewer; // clipboard viewer
extern BOOL fClipboardChanged; // TRUE if DrawClipboard needs to be called
extern BOOL fDrawingClipboard; // TRUE if inside DrawClipboard()
extern HWND hwndClipOpen; // hwnd of app accessing clipboard
extern BOOL fCBLocked; /* Is clibboard locked? */
//***** Fast frame drawing globals
#ifdef FASTFRAME
extern BOOL fFastFrame;
extern FRAMEDETAILS Frame;
#endif /* FASTFRAME */
//***** WinOldAppHackoMaticFlags
extern WORD winOldAppHackoMaticFlags; /* Flags for doing special things for
winold app */
//***** TaskManager exec globals
extern PSTR pTaskManName; // Task manager file name
//***** atom management globals
extern HANDLE hWinAtom; // global atom manager heap
//***** WM_HOTKEY globals
extern PSTR pHotKeyList; /* Pointer to list of hot keys in system. */
extern int cHotKeyCount; /* Count of hot keys in list. */
//***** WinHelp() globals
extern WORD msgWinHelp;
//***** SetWindowsHook() system hook table
extern HOOKNODE* rgphkSysHooks[];
extern HOOKNODE* phkDeleted;
//***** Driver management globals
extern int cInstalledDrivers; /* Count of installed driver structs allocated*/
extern HDRVR hInstalledDriverList; /* List of installable drivers */
extern int idFirstDriver; /* First driver in load chain */
extern int idLastDriver; /* Last driver in load chain */
//***** Display driver globals
extern HINSTANCE hInstanceDisplay;
extern BOOL fOnBoardBitmap; /* Can display save bitmaps onboard? */
extern BOOL (CALLBACK *lpSaveBitmap)(LPRECT lprc, WORD flags);
extern VOID (CALLBACK *lpDisplayCriticalSection)(BOOL fLock);
extern VOID (CALLBACK *lpWin386ShellCritSection)(VOID);
typedef int (FAR *FARGETDRIVERPROC)(int, LPCSTR);
extern FARGETDRIVERPROC lpfnGetDriverResourceId;
//***** Comm driver definitions and globals
// Comm driver constants
//
#define LPTx 0x80 /* Mask to indicate cid is for LPT device */
#define LPTxMask 0x7F /* Mask to get cid for LPT device */
#define PIOMAX 3 /* Max number of LPTx devices in high level */
#define CDEVMAX 10 /* Max number of COMx devices in high level */
#define DEVMAX (CDEVMAX+PIOMAX) /* Max number of devices in high level */
// qdb - queue definition block
//
typedef struct {
char far *pqRx; /* pointer to rx queue */
int cbqRx; /* size of RX Queue in bytes */
char far *pqTx; /* Pointer to TX Queue */
int cbqTx; /* Size of TX Queue in bytes */
} qdb;
// cinfo - Communications Device Information
//
typedef struct
{
WORD fOpen : 1; /* Device open flag */
WORD fchUnget : 1; /* Flag for backed-up character */
WORD fReservedHardware:1; /* Reserved for hardware (mouse etc) */
HTASK hTask; /* Handle to task who opened us */
char chUnget; /* Backed-up character */
qdb qdbCur; /* Queue information */
} cinfo;
extern cinfo rgcinfo[];
extern int (FAR PASCAL *lpCommWriteString)(int, LPCSTR, WORD);
/* Ptr to the comm driver's
* commwritestring function. Only
* exists in 3.1 drivers.
*/
extern int (FAR PASCAL *lpCommReadString)(int, LPSTR, WORD);
/* Ptr to the comm driver's
* commreadstring function. Only
* exists in 3.1 drivers.
*/
extern BOOL (FAR PASCAL *lpCommEnableNotification)(int, HWND, int, int);
/* Ptr to the comm driver's
* EnableNotification function.
* Only exists in 3.1 drivers.
*/
//***** PenWinProc globals
/* Ptr to register us as pen aware dlg box
*/
extern VOID (CALLBACK *lpRegisterPenAwareApp)(WORD i, BOOL fRegister);
//***** Resource handler globals
extern RSRCHDLRPROC lpDefaultResourceHandler;
//***** NLS related globals
extern HINSTANCE hLangDrv; /* The module handle of the language driver */
extern FARPROC fpLangProc; /* The entry point into the language driver */
#ifdef DBCS_IME
extern HINSTANCE hWinnls; /* WINNLS.DLL module handle */
#endif
//***** Caret globals
extern CARET caret;
extern HQ hqCaret;
//***** Cursor globals
extern CURSORINFO cursInfo;
#ifdef LATER
// Is this array big enough?
#endif
extern HCURSOR rghCursor[];
extern HBITMAP hbmCursorBitmap; /* Pre created bitmap for SetCursor */
extern HGLOBAL hPermanentCursor; /* Precreated permanent cursor resource */
extern HCURSOR hCurCursor;
extern HCURSOR hCursNormal;
extern HCURSOR hCursUpArrow;
extern HCURSOR hCursIBeam;
extern HCURSOR hCursSizeAll;
//INT iLevelCursor; NOTE: overlays sys metrics array (winmisc2.asm)
//***** Icon globals
extern HICON hIconBang;
extern HICON hIconHand;
extern HICON hIconNote;
extern HICON hIconQues;
extern HICON hIconSample;
extern HICON hIconWarn;
extern HICON hIconErr;
extern HBITMAP hbmDrawIconMono; /* Pre created bitmaps for drawicon */
extern HBITMAP hbmDrawIconColor; /* Pre created bitmaps for drawicon */
extern HTASK hTaskGrayString; /* Task in graystring */
//***** Desktop/Wallpaper globals
extern HBITMAP hbmDesktop; /* Monochrome Desktop pattern */
extern HBITMAP hbmWallpaper; /* Bitmap that will be drawn on the desktop */
//***** Window move/size tracking globals
extern RECT rcDrag;
extern RECT rcWindow;
extern RECT rcParent;
extern WORD cmd;
extern HICON hdragIcon;
extern BOOL fTrack;
extern int dxMouse;
extern int dyMouse;
extern int impx;
extern int impy;
extern HWND hwndTrack;
extern BOOL fInitSize;
extern POINT ptMinTrack;
extern POINT ptMaxTrack;
extern BOOL fmsKbd;
extern POINT ptRestore;
extern HCURSOR hIconWindows; /* Cool windows icon */
extern BOOL fDragFullWindows; /* Drag xor rect or full windows */
/* Added flag to stop anyone from setting the cursor while
* we are moving the hDragIcon. This was done to fix a bug in micrografix
* Draw (They are doing a Setcursor() whenever they get a paint message).
*/
extern BOOL fdragIcon; // Prevent SetCursor while dragging icon
/* When an iconic window is moved around with a mouse, IsWindowVisible() call
* returns FALSE! This is because, the window is internally hidden and what is
* visible is only a mouse cursor! But how will the Tracer guys know this?
* They won't! So, when an Icon window is moved around, its hwnd is preserved
* in this global and IsWindowVisible() will return a true for
* this window!
*/
extern HWND hwndDragIcon;
//***** MessageBox globals
extern int cntMBox; // Nesting level for overlap tiling of mboxes
extern WORD wDefButton; // index of current default button
extern WORD wMaxBtnSize; // width of biggest button in any message box
//***** Size border metric globals
extern int clBorder; /* # of logical units in window frame */
extern int cxSzBorder; /* Window border width (cxBorder*clBorder) */
extern int cySzBorder; /* Window border height (cyBorder*clBorder) */
extern int cxSzBorderPlus1; /* cxBorder*(clBorder+1). We overlap a line */
extern int cySzBorderPlus1; /* cyBorder*(clBorder+1). We overlap a line */
//***** Window tiling/cascading globals
extern int cxyGranularity; /* Top-level window grid granularity */
extern int cyCWMargin; /* Space on top of toplevel window 'stack' */
extern int cxCWMargin; /* Space on right of toplevel window 'stack'*/
extern int iwndStack;
extern int cxHalfIcon; // rounding helpers for icon positioning
extern int cyHalfIcon;
//***** Alt-tab switching globals
extern HWND hwndAltTab;
extern HWND hwndSwitch;
extern HWND hwndKbd;
extern BOOL fFastAltTab; /* Don't use Tandy's switcher? */
extern BOOL fInAltTab;
//***** Icon title globals
extern int cyTitleSpace;
extern BOOL fIconTitleWrap; /* Wrap icon titles or just use single line? */
extern LOGFONT iconTitleLogFont; /* LogFont struct for icon title font */
extern HFONT hIconTitleFont; /* Font used in icon titles */
//***** GrayString globals
extern HBRUSH hbrGray; // GrayString globals.
extern HBITMAP hbmGray;
extern HDC hdcGray;
extern int cxGray; // current dimensions of hbmGray
extern int cyGray;
//***** WM_GETMINMAXINFO globals
extern POINT rgptMinMaxWnd[];
extern POINT rgptMinMax[];
//***** Menu globals
extern int menuSelect;
extern int mnFocus;
extern HANDLE hMenuHeap; /* Menu heap */
extern _segment menuBase;
extern HANDLE hMenuStringHeap;
extern _segment menuStringBase;
//PPOPUPMENU pGlobalPopupMenu; // mnloop.c
extern HWND hwndRealPopup;
extern BOOL fMenu; /* Using a menu? */
extern BOOL fSysMenu;
extern BOOL fInsideMenuLoop; /* MenuLoop capture? */
extern BOOL fMenuStatus;
extern int iActivatedWindow;/* This global is examined in the menu loop
* code so that we exit from menu mode if
* another window was activated while we were
* tracking menus. This global is incremented
* whenever we activate a new window.
*/
extern WORD iDelayMenuShow; /* Delay till the hierarchical menu is shown*/
extern WORD iDelayMenuHide; /* Delay till the hierarchical menu is hidden
when user drags outside of it */
extern HMENU hSysMenu;
extern HBITMAP hbmSysMenu;
extern RECT rcSysMenuInvert;
//***** Scroll bar globals
extern ATOM atomScrollBar; /* Atom for the scrollbar control wnd class */
extern HWND hwndSB;
extern HWND hwndSBNotify;
extern HWND hwndSBTrack;
extern int dpxThumb;
extern int posOld;
extern int posStart;
extern int pxBottom;
extern int pxDownArrow;
extern int pxLeft;
extern int pxOld;
extern int pxRight;
extern int pxStart;
extern int pxThumbBottom;
extern int pxThumbTop;
extern int pxTop;
extern int pxUpArrow;
extern BOOL fHitOld;
extern int cmdSB;
extern VOID (*pfnSB)(HWND, WORD, WPARAM, LPARAM);
extern RECT rcSB;
extern RECT rcThumb;
extern RECT rcTrack;
extern BOOL fTrackVert;
extern BOOL fCtlSB;
extern WORD hTimerSB;
extern BOOL fVertSB;
extern SBINFO *psbiSB;
extern SBINFO sbiHorz;
extern SBINFO sbiVert;
extern int cmsTimerInterval;
//***** Control globals
extern ATOM atomSysClass[];
//***** Constant strings
extern char szUNTITLED[];
extern char szERROR[];
extern char szOK[];
extern char szCANCEL[];
extern char szABORT[];
extern char szRETRY[];
extern char szIGNORE[];
extern char szYYES[];
extern char szCLOSE[];
extern char szNO[];
extern char szAM[];
extern char szPM[];
extern PSTR pTimeTagArray[];
extern char szAttr[];
extern char szOEMBIN[];
extern char szDISPLAY[];
extern char szOneChar[];
extern char szSLASHSTARDOTSTAR[];
extern char szYes[];
extern char szNullString[];
#ifdef DEBUG
extern char CODESEG ErrAssertFailed[];
extern char CODESEG ErrInvalParam[];
#endif
#ifdef JAPAN
extern char szJWordBreak[]; // Japanese word breaking char table
#endif
#ifdef KOREA
void FAR SetLevel(HWND);
BOOL FAR RequestHanjaMode(HWND, LPSTR);
WORD FAR PASCAL TranslateHangeul(WORD);
#endif
/*--------------------------------------------------------------------------*/
/* */
/* Global Variables from ASM files */
/* */
/*--------------------------------------------------------------------------*/
extern BYTE rgbKeyState[];
extern int iLevelCursor;
extern WORD rgwSysMet[];
/*--------------------------------------------------------------------------*/
/* */
/* INTDS interrupt-accessible globals
/* */
/*--------------------------------------------------------------------------*/
extern BOOL INTDSSEG fInt24;
extern BOOL INTDSSEG fMouseMoved;
extern BOOL INTDSSEG fEnableInput;
extern BOOL INTDSSEG fSwapButtons;
extern BOOL INTDSSEG fQueueDirty;
extern BOOL INTDSSEG fInScanTimers;
extern BYTE INTDSSEG vKeyDown;
extern BYTE INTDSSEG TimerTable[];
extern BYTE INTDSSEG rgbAsyncKeyState[];
extern BYTE* INTDSSEG TimerTableMax;
extern char INTDSSEG szDivZero[];
extern char INTDSSEG szNull[];
extern char INTDSSEG szSysError[];
extern DWORD INTDSSEG tSysTimer;
#ifdef DOS30
extern INTDSSEGPROC INTDSSEG lpSysProc;
#endif
extern HANDLE INTDSSEG hSysTimer;
extern TIMERINFO INTDSSEG timerInfo;
extern WORD __WinFlags;
#define WinFlags ((WORD)(&__WinFlags))
// Input globals
#ifdef DISABLE
extern WORD modeInput;
#endif
extern HQ INTDSSEG hqSysLock; /* HQ of guy who is looking at current event */
extern WORD INTDSSEG idSysLock; /* Msg ID of event that is locking sys queue */
extern POINT INTDSSEG ptTrueCursor;
extern POINT INTDSSEG ptCursor;
extern RECT INTDSSEG rcCursorClip;
extern WORD INTDSSEG MouseSpeed;
extern WORD INTDSSEG MouseThresh1;
extern WORD INTDSSEG MouseThresh2;
extern WORD INTDSSEG cMsgRsrv;
extern WORD INTDSSEG x_mickey_rate;
extern WORD INTDSSEG y_mickey_rate;
extern WORD INTDSSEG cur_x_mickey;
extern WORD INTDSSEG cur_y_mickey;
extern WORD INTDSSEG cxScreenCS;
extern WORD INTDSSEG cyScreenCS;
extern WORD INTDSSEG cQEntries;
extern WORD INTDSSEG dtSysTimer;
extern DWORD INTDSSEG dtJournal;
extern WORD INTDSSEG msgJournal;
extern BOOL INTDSSEG fJournalPlayback;
extern WORD INTDSSEG rgMsgUpDowns[];
extern DWORD INTDSSEG lpMouseStack;
extern LPVOID INTDSSEG prevSSSP;
extern BYTE INTDSSEG nestCount;
extern WORD INTDSSEG cHotKeyHooks;
extern HQ INTDSSEG hqActive;
extern HQ INTDSSEG hqList;
extern HQ INTDSSEG hqCursor;
extern HQ INTDSSEG hqSysQueue;
extern HQ INTDSSEG hqSysModal;
extern HQ INTDSSEG hqMouse;
extern HQ INTDSSEG hqKeyboard;
extern HQ INTDSSEG hqCapture;
/*--------------------------------------------------------------------------*/
/* */
/* Assembly Function Declarations */
/* */
/*--------------------------------------------------------------------------*/
#ifdef WOWEDIT
void FAR LCopyStruct(CONST VOID FAR* lpSrc, LPVOID lpDest, WORD cb);
#else
/*
why is this required? Its here for the intrinsic pragma
to recognize memcpy ... jonle on a saturday!
*/
#ifndef WOWDBG
LPVOID memcpy(LPVOID lpDst, LPVOID lpSrc, int cb);
#endif
#pragma intrinsic(memcpy)
#define LCopyStruct(s,d,n) memcpy((LPVOID)(d),(LPVOID)(s),(int)(n))
#endif
WORD FAR GetAppVer(void);
#ifndef MSDWP
/* Suppport routines for separate segment stuff. */
#undef min
#undef max
#define min(a, b) ((int)(a) < (int)(b) ? (int)(a) : (int)(b))
#define max(a, b) ((int)(a) > (int)(b) ? (int)(a) : (int)(b))
#define umin(a, b) ((unsigned)(a) < (unsigned)(b) ? (unsigned)(a) : (unsigned)(b))
#define umax(a, b) ((unsigned)(a) > (unsigned)(b) ? (unsigned)(a) : (unsigned)(b))
int FAR MultDiv(WORD a, WORD b, WORD c);
void FAR LFillStruct(LPVOID, WORD, WORD);
HDC FAR GetClientDc(void);
HQ FAR HqCurrent(void);
BOOL FAR ActivateWindow(HWND, WORD);
BOOL CheckHwndFilter(HWND, HWND);
BOOL CheckMsgFilter(WORD, WORD, WORD);
BOOL WriteMessage(HQ, LONG, WORD, WORD, HWND, DWORD);
BOOL ReceiveMessage(VOID);
VOID FlushSentMessages(VOID);
LPSTR WINAPI lstrcpyn(LPSTR, LPCSTR, int);
#define PSTextOut(a, b, c, d, e) TextOut(a, b, c, d, e)
#define PSGetTextExtent(a, b, c) GetTextExtent(a, b, c)
#define PSFillRect(a, b, c) FillRect(a, b, c)
#define PSInvertRect(a, b) InvertRect(a, b)
WORD FAR GetNextSysMsg(WORD, INTERNALSYSMSG FAR *);
void FAR SkipSysMsg(SYSMSG FAR *, BOOL);
void TransferWakeBit(WORD);
void ClearWakeBit(WORD, BOOL);
void SetWakeBit(HQ, WORD);
void FAR FarSetWakeBit(HQ, WORD);
void FAR InitSysQueue(void);
BOOL FAR CreateQueue(int);
void DeleteQueue(void);
void SuspendTask(void);
void ReleaseTask(void);
void FAR GlobalInitAtom(void);
void MoveRect(LONG);
void SizeRect(LONG);
BOOL FAR SysHasKanji(void);
void FAR SetDivZero(void);
int FAR FindCharPosition(LPCSTR, char);
void FAR OEMSetCursor(LPSTR);
void FAR SetFMouseMoved(void);
BOOL AttachDC(HWND);
BOOL LastApplication(void);
void CheckCursor(HWND);
void FAR IncPaintCount(HWND);
void FAR DecPaintCount(HWND);
void FAR DeleteProperties(HWND);
void FAR DestroyTimers(HQ, HWND);
int FAR InquireSystem(int, int);
int FAR EnableKeyboard(FARPROC, LPSTR);
int FAR InquireKeyboard(LPSTR);
void FAR DisableKeyboard(void);
int FAR EnableMouse(FARPROC);
int FAR InquireMouse(LPSTR);
void FAR DisableMouse(void);
int FAR InquireCursor(LPSTR);
void FAR EnableSystemTimers(void);
void FAR DisableSystemTimers(void);
void FAR CreateSystemTimer(int, TIMERPROC);
WORD FAR SetSystemTimer(HWND, int, int, TIMERPROC);
BOOL FAR KillSystemTimer(HWND, int);
void FAR CrunchX2(CURSORSHAPE FAR *, CURSORSHAPE FAR *, int, int);
void FAR CrunchY(CURSORSHAPE FAR *, CURSORSHAPE FAR *, int, int, int);
void FAR MenuBarDraw(HWND hwnd, HDC hdc, int cxFrame, int cyFrame);
BOOL FAR ReadMessage(HQ, LPMSG, HWND, WORD, WORD, BOOL);
int GetCurrentDrive(void);
int GetCurrentDirectory(LPSTR, int);
int SetCurrentDrive(int);
int SetCurrentDirectory(LPCSTR);
BOOL FFirst(LPSTR, LPSTR, WORD);
BOOL FNext(LPSTR, WORD);
FAR DestroyAllWindows(void);
BOOL FAR LockWindowVerChk(HWND);
#ifndef NOFASTFRAME
void FAR SplitRectangle(LPRECT, LPRECT, int, int); /* WinRect.asm */
#endif
#endif /* MSDWP */
/*--------------------------------------------------------------------------*/
/* */
/* Internal Function Declarations */
/* */
/*--------------------------------------------------------------------------*/
#ifndef MSDWP
LRESULT CALLBACK ButtonWndProc(HWND hwnd, WORD message, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK StaticWndProc(HWND hwnd, WORD message, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK TitleWndProc(HWND hwnd, WORD message, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK SwitchWndProc(HWND hwnd, WORD message, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK DesktopWndProc(HWND hwndIcon, WORD message, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK MenuWindowProc(HWND hwnd, WORD message, WPARAM wParam, LPARAM lParam);
LRESULT FAR EditWndProc(HWND hwnd, WORD message, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK LBoxCtlWndProc(HWND hwnd, WORD message, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK ComboBoxCtlWndProc(HWND hwnd, WORD message, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK SBWndProc(PSB psb, WORD message, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK MDIClientWndProc(HWND hwnd, WORD message, WPARAM wParam, LPARAM lParam);
void FAR SkipSM2(void);
HWND FAR GetFirstTab(HWND hwnd);
CONST BYTE FAR* SkipSz(CONST BYTE FAR *lpsz);
void FAR DlgSetFocus(HWND hwnd);
HWND FAR PrevChild(HWND hwndDlg, HWND hwnd);
HWND FAR NextChild(HWND hwndDlg, HWND hwnd);
HWND FAR GetFirstLevelChild(HWND hwndDlg, HWND hwndLevel);
void FAR CheckDefPushButton(HWND hwndDlg, HWND hwndOldFocus, HWND hwndNewFocus);
HWND FAR GotoNextMnem(HWND hwndDlg, HWND hwndStart, char ch);
int FAR FindMnemChar(LPSTR lpstr, char ch, BOOL fFirst, BOOL fPrefix);
int FAR FindNextValidMenuItem(PMENU pMenu, int i, int dir, BOOL fHelp);
BOOL CALLBACK MenuPrint(HDC hdc, LPARAM lParam, int cch);
int FAR MenuBarCompute(HMENU hMenu, HWND hwndNotify, int yMenuTop, int xMenuLeft, int cxMax);
HMENU CALLBACK LookupMenuHandle(HMENU hMenu, WORD cmd);
BOOL CALLBACK StaticPrint(HDC hdc, LPRECT lprc, HWND hwnd);
HICON FAR ColorToMonoIcon(HICON);
HGLOBAL CALLBACK LoadCursorIconHandler(HGLOBAL hRes, HINSTANCE hResFile, HRSRC hResIndex);
HGLOBAL CALLBACK LoadDIBCursorHandler(HGLOBAL hRes, HINSTANCE hResFile, HRSRC hResIndex);
HGLOBAL CALLBACK LoadDIBIconHandler(HGLOBAL hRes, HINSTANCE hResFile, HRSRC hResIndex);
void CallOEMCursor(void);
void FAR DestroyClipBoardData(void);
BOOL FAR SendClipboardMessage(int message);
void FAR DrawClipboard(void);
PCLIP FAR FindClipFormat(WORD format);
BOOL IsDummyTextHandle(PCLIP pClip);
HANDLE InternalSetClipboardData(WORD format, HANDLE hData);
PPCLS FAR GetClassPtr(LPCSTR lpszClassName, HINSTANCE hInstance, BOOL fUserModule);
PPCLS GetClassPtrASM(ATOM, HMODULE, BOOL);
void FAR DelWinClass(PPCLS ppcls);
VOID CALLBACK CaretBlinkProc(HWND hwnd, WORD message, WORD id, DWORD time);
void FAR InternalHideCaret(void);
void FAR InternalShowCaret(void);
void FAR InternalDestroyCaret(void);
HDC FAR GetScreenDC(void);
PBWL FAR BuildHwndList(HWND hwnd, int flags);
void FAR FreeHwndList(PBWL pbwl);
void CALLBACK DrawFrame(HDC hdc, LPRECT lprect, int clFrame, int cmd);
void FAR RedrawFrame(HWND hwnd);
void FAR BltColor(HDC, HBRUSH, HDC, int, int, int, int, int, int, BOOL);
void FAR EnableInput(void);
void FAR DisableInput(void);
void FAR CopyKeyState(void);
void CALLBACK EnableOEMLayer(void);
void CALLBACK DisableOEMLayer(void);
void FAR ColorInit(void);
BOOL FAR SetKeyboardSpeed(BOOL fInquire);
void FAR InitBorderSysMetrics(void);
void FAR InitSizeBorderDimensions(void);
void FAR SetMinMaxInfo(void);
// Returns TRUE if a GetDC() will return an empty visrgn or not
// (doesn't take into account being clipped away; just checks WFVISIBE
// and WFMINIMIZED)
//
BOOL FAR IsVisible(HWND hwnd, BOOL fClient);
// Returns TRUE if hwndChild == hwndParent or is one of its children.
//
BOOL FAR IsDescendant(HWND hwndParent, HWND hwndChild);
void FAR SetRedraw(HWND hwnd, BOOL fRedraw);
HBRUSH CALLBACK GetControlColor(HWND hwndParent, HWND hwndCtl, HDC hdc, WORD type);
HBRUSH CALLBACK GetControlBrush(HWND hwnd, HDC hdc, WORD type);
void FAR StoreMessage(LPMSG lpMsg, HWND hwnd, WORD message, WPARAM wParam, LPARAM lParam, DWORD time);
LONG FAR GetPrefixCount(LPCSTR lpstr, int cch, LPSTR lpstrCopy, int copycount);
void FAR PSMTextOut(HDC hdc, int xLeft, int yTop, LPCSTR lpsz, int cch);
DWORD FAR PSMGetTextExtent(HDC hdc, LPCSTR lpstr, int cch);
HWND FAR GetTopLevelTiled(HWND hwnd);
BOOL FAR TrueIconic(HWND hwnd);
void FAR ChangeToCurrentTask(HWND hwnd1, HWND hwnd2);
HWND FAR GetLastTopMostWindow(void);
void FAR SendSizeMessage(HWND hwnd, WORD cmdSize);
HWND FAR NextTopWindow(HWND hwnd, HWND hwndSkip, BOOL fPrev, BOOL fDisabled);
void FAR DisableVKD(BOOL fDisable);
void FAR CheckFocus(HWND hwnd);
BOOL CALLBACK FChildVisible(HWND hwnd);
#define InternalGetClientRect(hwnd, lprc) CopyRect(lprc, &hwnd->rcClient)
void FAR CheckByteAlign(HWND hwnd, LPRECT lprc);
void FAR CancelMode(HWND hwnd);
void FAR RedrawIconTitle(HWND hwnd);
void FAR DisplayIconicWindow(HWND hwnd, BOOL fActivate, BOOL fShow);
DWORD FAR GetIconTitleSize(HWND hwnd);
BOOL FAR SendZoom(HWND hwnd, LPARAM lParam);
BOOL CALLBACK DestroyTaskWindowsEnum(HWND hwnd, LPARAM lParam);
void CALLBACK LockMyTask(BOOL fLock);
void CALLBACK RepaintScreen(void);
HANDLE FAR BcastCopyString(LPARAM lParam);
BOOL CALLBACK SignalProc(HTASK hTask, WORD message, WPARAM wParam, LPARAM lParam);
BOOL CALLBACK NewSignalProc(HTASK hTask, WORD message, WPARAM wParam, LPARAM lParam);
HWND FAR GetWindowCreator(HWND hwnd);
void FAR InitSendValidateMinMaxInfo(HWND hwnd);
void FAR DrawDragRect(LPRECT lprc, WORD flags);
void FAR MoveSize(HWND hwnd, WORD cmdMove);
BYTE FAR SetClrWindowFlag(HWND hwnd, WORD style, BYTE cmd);
void FAR ParkIcon(HWND hwnd, CHECKPOINT * pcp);
void FAR ShowOwnedWindows(HWND hwndOwner, WORD cmdShow);
HWND FAR MinMaximize(HWND hwnd, WORD cmd, BOOL fKeepHidden);
void FAR SetTiledRect(HWND hwnd, LPRECT lprc);
#endif // MSDWP
void FAR AdjustSize(HWND hwnd, LPINT lpcx, LPINT lpcy);
#ifndef MSDWP
void FAR NextWindow(WORD flags);
void FAR DoScroll(HWND hwnd, HWND hwndNotify, int cmd, int pos, BOOL fVert);
void CALLBACK ContScroll(HWND hwnd, WORD message, WORD id, DWORD time);
void FAR MoveThumb(HWND hwnd, int px, BOOL fCancel);
void FAR SBTrackInit(HWND hwnd, LPARAM lParam, int curArea);
void FAR DrawSize(HWND hwnd, HDC hdc, int cxFrame, int cyFrame, BOOL fBorder);
void FAR CalcSBStuff(HWND hwnd, BOOL fVert);
WORD GetWndSBDisableFlags(HWND, BOOL);
void FreeWindow(HWND hwnd);
void FAR DestroyTaskWindows(HQ hq);
BOOL FAR TrackInitSize(HWND hwnd, WORD message, WPARAM wParam, LPARAM lParam);
void FAR DrawPushButton(HDC hdc, LPRECT lprc, WORD style, BOOL fInvert, HBRUSH hbrBtn, HWND hwnd);
void FAR DrawBtnText(HDC hdc, HWND hwnd, BOOL dbt, BOOL fDepress);
void FAR Capture(HWND hwnd, int code);
int FAR SystoChar(WORD message, LPARAM lParam);
void FAR LinkWindow(HWND, HWND, HWND *);
void FAR UnlinkWindow(HWND, HWND *);
void FAR DrawScrollBar(HWND hwnd, HDC hdc, BOOL fVert);
void CALLBACK PaintRect(HWND hwndBrush, HWND hwndPaint, HDC hdc, HBRUSH hbr, LPRECT lprc);
BOOL FAR SetDeskPattern(LPSTR);
BOOL FAR SetDeskWallpaper(LPSTR);
void FAR SetGridGranularity(WORD);
int FAR GetAveCharWidth(HDC);
#ifndef NOTEXTMETRIC
int FAR GetCharDimensions(HDC, TEXTMETRIC FAR *);
#endif
BOOL FAR LW_ReloadLangDriver(LPSTR);
HBRUSH FAR GetSysClrObject(int);
int API SysErrorBox(LPCSTR lpszText, LPCSTR lpszCaption, unsigned int btn1, unsigned int btn2, unsigned int btn3);
BOOL FAR SnapWindow(HWND hwnd);
WORD FAR MB_FindLongestString(void);
#ifdef FASTFRAME
HBITMAP FAR CreateCaptionBitmaps(void);
HBITMAP FAR CreateBorderVertBitmaps(BOOL fDlgFrame);
HBITMAP FAR CreateBorderHorzBitmaps(BOOL fDlgFrame);
void FAR GetCaptionBitmapsInfo(FRAMEBITMAP Caption[], HBITMAP hBitmap);
void FAR GetHorzBitmapsInfo(FRAMEBITMAP Bitmap[], BOOL fDlgFrame, HBITMAP hBitmap);
void FAR GetVertBitmapsInfo(FRAMEBITMAP Bitmap[], BOOL fDlgFrame, HBITMAP hBitmap);
BOOL FAR DrawIntoCaptionBitmaps(HDC hdc,HBITMAP hBitmap, FRAMEBITMAP FrameInfo[], BOOL fActive);
BOOL FAR DrawIntoHorzBitmaps(HDC hdc, HBITMAP hBitmap, FRAMEBITMAP FrameInfoH[], BOOL fActive, BOOL fDlgFrame);
BOOL FAR DrawIntoVertBitmaps(HDC hdc, HBITMAP hBitmap, FRAMEBITMAP FrameInfoH[], FRAMEBITMAP FrameInfoV[], BOOL fActive, BOOL fDlgFrame);
BOOL FAR RecreateFrameBitmaps(void);
void FAR DeleteFrameBitmaps(int, int);
BOOL FAR PASCAL UpdateFrameBitmaps(WORD wColorFlags);
BOOL FAR PASCAL RecolorFrameBitmaps(WORD wColorFlags);
#endif /* FASTFRAME */
void PostButtonUp(WORD msg);
#endif /* MSDWP */
void CALLBACK EndMenu(void);
void CALLBACK FillWindow(HWND hwndBrush, HWND hwndPaint, HDC hdc, HBRUSH hbr);
void FAR SysCommand(HWND hwnd, int cmd, LPARAM lParam);
void FAR HandleNCMouseGuys(HWND hwnd, WORD message, int htArea, LPARAM lParam);
void FAR EndScroll(HWND hwnd, BOOL fCancel);
HWND FAR GetTopLevelWindow(HWND hwnd);
void FAR RedrawIconTitle(HWND hwnd);
int FAR FindNCHit(HWND hwnd, LONG lPt);
void FAR CalcClientRect(HWND hwnd, LPRECT lprc);
BOOL FAR DepressTitleButton(HWND hwnd, RECT rcCapt, RECT rcInvert, WORD hit);
void FAR SetSysMenu(HWND hwnd);
HMENU FAR GetSysMenuHandle(HWND hwnd);
int *FAR InitPwSB(HWND hwnd);
BOOL FAR DefSetText(HWND hwnd, LPCSTR lpsz);
void FAR DrawWindowFrame(HWND hwnd, HRGN hrgnClip);
void FAR ShowIconTitle(HWND hwnd, BOOL fShow);
HBRUSH FAR GetBackBrush(HWND hwnd);
BOOL FAR IsSystemFont(HDC);
BOOL FAR IsSysFontAndDefaultMode(HDC);
VOID FAR DiagOutput(LPCSTR);
VOID FAR UserDiagOutput(int, LPCSTR);
#define UDO_INIT 0
#define UDO_INITDONE 1
#define UDO_STATUS 2
HANDLE FAR TextAlloc(LPCSTR);
HANDLE FAR TextFree(HANDLE);
WORD FAR TextCopy(HANDLE, LPSTR, WORD);
#define TextPointer(h) (LPSTR)MAKELP(hWinAtom, h)
BOOL CALLBACK FARValidatePointer(LPVOID);
// GDI exports
#ifdef DEBUG
VOID CALLBACK SetObjectOwner(HGDIOBJ, HINSTANCE);
#else
#define SetObjectOwner(d1, d2)
#endif
BOOL CALLBACK MakeObjectPrivate(HGDIOBJ, BOOL);
VOID CALLBACK GDITaskTermination(HTASK);
VOID CALLBACK RealizeDefaultPalette(HDC);
// Internal functions called directly by debug version to
// prevent validation errors
//
#ifdef DEBUG
HDC API IGetDCEx(register HWND hwnd, HRGN hrgnClip, DWORD flags);
BOOL API IGrayString(HDC, HBRUSH, GRAYSTRINGPROC, LPARAM, int, int, int, int, int);
BOOL API IRedrawWindow(HWND hwnd, CONST RECT FAR* lprcUpdate, HRGN hrgnUpdate, WORD flags);
int API IScrollWindowEx(HWND hwnd, int dx, int dy,
CONST RECT FAR* prcScroll, CONST RECT FAR* prcClip,
HRGN hrgnUpdate, RECT FAR* prcUpdate, WORD flags);
#endif
#ifdef DBCS_IME
#define WM_IMECONTROL WM_USER
void FAR InitIME(void); // wmcaret.c
BOOL _loadds FAR EnableIME( HWND, BOOL ); // wmcaret.c
VOID API SetImeBoundingRect(HWND, DWORD, LPRECT); // wmcaret.c
BOOL API ControlIME(HWND, BOOL); // wmcaret.c
HANDLE API SetFontForIME(HWND, HANDLE); // wmcaret.c
VOID API ControlCaretIme(BOOL); // wmcaret.c
BOOL API EatString(HWND, LPSTR, WORD); // editec.c
VOID API CheckKatanaInstalled(HWND); // wmcaret.c
#endif
#ifdef JAPAN
// Save time of WM_LBUTTONDOWN and WM_LBUTTONUP, used to decided
// whether to lock large popup menus that cover the static portion
// of the menu...
extern int fLongPMenu;
extern DWORD lbuttondown_time;
#endif
/****************************************************************************
debugging support
****************************************************************************/
#ifdef DEBUG
extern void cdecl dDbgOut(int iLevel, LPSTR lpszFormat, ...);
extern void cdecl dDbgAssert(LPSTR exp, LPSTR file, int line);
DWORD __dwEval;
#define dprintf dDbgOut
#define WinAssert(exp) \
((exp) ? (void)0 : dDbgAssert(#exp, __FILE__, __LINE__))
#define WinEval(exp) \
((__dwEval=(DWORD)(LPVOID)(exp)) ? (void)0 : dDbgAssert(#exp, __FILE__, __LINE__), __dwEval)
#else
#define dprintf /##/
// #define dprintf if (0) ((int (*)(char *, ...)) 0)
#define WinAssert(exp) 0
#define WinEval(exp) (exp)
#endif