File:  [OS/2 SDKs] / os232sdk / toolkt20 / c / os2h / pmwin.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Thu Aug 9 12:26:31 2018 UTC (7 years, 9 months ago) by root
Branches: msft, MAIN
CVS tags: os2sdk-1990, HEAD
Microsoft OS/2 SDK 2.0 05-30-1990

/*static char *SCCSID = "@(#)pmwin.h   13.40 90/05/01";*/
/***************************************************************************\
*
* Module Name: PMWIN.H
*
* OS/2 Presentation Manager Window Manager include file
*
* Copyright (c) International Business Machines Corporation 1981, 1988, 1989
* Copyright (c) Microsoft Corporation 1981, 1988, 1989
*
* =======================================================================
*
* The folowing symbols are used in this file for conditional sections.
*
* If INCL_WIN is defined, all subcomponents are included.
*
* Subcomponents marked with "+" are partially included by default:
*
*   #define:		    To include:
*
* + INCL_WINWINDOWMGR	    General window management
* + INCL_WINMESSAGEMGR	    Message management
* + INCL_WININPUT	    Mouse and keyboard input
* + INCL_WINDIALOGS	    Dialog boxes
* + INCL_WINSTATICS	    Static controls
* + INCL_WINBUTTONS	    Button controls
* + INCL_WINENTRYFIELDS	    Entry Fields
*   INCL_WINMLE		    Multiple Line Entry Fields
* + INCL_WINLISTBOXES	    List box controls
* + INCL_WINMENUS	    Menu controls
* + INCL_WINSCROLLBARS	    Scroll bar controls
* + INCL_WINFRAMEMGR	    Frame manager
*   INCL_WINFRAMECTLS	    Frame controls (title bars & size border)
*   INCL_WINRECTANGLES	    Rectangle routines
*   INCL_WINSYS		    System values (and colors)
*   INCL_WINTIMER	    Timer routines
* + INCL_WINACCELERATORS    Keyboard accelerators
*   INCL_WINTRACKRECT	    WinTrackRect() function
*   INCL_WINCLIPBOARD	    Clipboard manager
* + INCL_WINCURSORS	    Text cursors
* + INCL_WINPOINTERS	    Mouse pointers
*   INCL_WINHOOKS	    Hook manager
* + INCL_WINSWITCHLIST	    Shell Switch List API
*   INCL_WINPROGRAMLIST	    Shell Program List API
*   INCL_WINSHELLDATA	    Shell Data (?)
*   INCL_WINCOUNTRY	    Country support
*   INCL_WINHEAP	    Heap Manager
*   INCL_WINATOM	    Atom Manager
*   INCL_WINCATCHTHROW	    WinCatch/WinThrow support
*   INCL_WINERRORS	    Error code definitions
*   INCL_NLS		    DBCS window manager definition
* + INCL_WINHELP	    Help Manager definitions
*   INCL_WINSEI		    Set Error Info API
*   INCL_WINLOAD	    Load/Delete Library/Procedure
*   INCL_WINTYPES	    Definitions for Datatypes
*   INCL_WINTHUNKAPI	Thunk Procedure API
*   INCL_WINDESKTOP	Desktop API
*
*
\***************************************************************************/

#define INCL_WININCLUDED


#ifndef INCL_PMINCLUDED
#if !(defined(INCL_32) || defined(INCL_16))
#ifdef M_I386
    #define INCL_32
#else /* not M_I386 */
    #define INCL_16
#endif /* M_I386 */
#endif /* INCL_32 || INCL_16 */
#endif /* INCL_PMINCLUDED */

/* XLATOFF */
#ifdef INCL_16
  #include <pmwin16.h>
#endif /* INCL_16 */
/* XLATON */


#ifdef INCL_WIN

#define INCL_WINWINDOWMGR
#define INCL_WINMESSAGEMGR
#define INCL_WININPUT
#define INCL_WINDIALOGS
#define INCL_WINSTATICS
#define INCL_WINBUTTONS
#define INCL_WINENTRYFIELDS
#define INCL_WINMLE
#define INCL_WINLISTBOXES
#define INCL_WINMENUS
#define INCL_WINSCROLLBARS
#define INCL_WINFRAMEMGR
#define INCL_WINFRAMECTLS
#define INCL_WINRECTANGLES
#define INCL_WINSYS
#define INCL_WINTIMER
#define INCL_WINACCELERATORS
#define INCL_WINTRACKRECT
#define INCL_WINCLIPBOARD
#define INCL_WINCURSORS
#define INCL_WINPOINTERS
#define INCL_WINHOOKS
#define INCL_WINSWITCHLIST
#define INCL_WINPROGRAMLIST
#define INCL_WINSHELLDATA
#define INCL_WINCOUNTRY
#define INCL_WINHEAP
#define INCL_WINATOM
#define INCL_WINCATCHTHROW
#define INCL_WINERRORS
#define INCL_WINDDE
#define INCL_WINHELP
#define INCL_WINSEI
#define INCL_WINLOAD
#define INCL_WINTYPES
#define INCL_WINDESKTOP
#define INCL_WINPALETTE
#define INCL_WINTHUNKAPI

#else /* INCL_WIN */

#ifdef RC_INVOKED
#define INCL_WININPUT
#define INCL_WINDIALOGS
#define INCL_WINSTATICS
#define INCL_WINBUTTONS
#define INCL_WINENTRYFIELDS
#define INCL_WINLISTBOXES
#define INCL_WINMENUS
#define INCL_WINSCROLLBARS
#define INCL_WINFRAMEMGR
#define INCL_WINFRAMECTLS
#define INCL_WINACCELERATORS
#define INCL_WINPOINTERS
#define INCL_WINMESSAGEMGR
#define INCL_WINMLE
#define INCL_WINHELP
#endif /* RC_INVOKED */

#endif /* INCL_WIN */

/* ensure standard entry field defintions if MLE is defined */
#ifdef INCL_WINMLE
#ifndef INCL_WINENTRYFIELDS
#define INCL_WINENTRYFIELDS
#endif /* INCL_WINENTRYFIELDS */
#endif /* INCL_WINMLE */

/* INCL_WINCOMMON compatability */
#ifdef INCL_WINCOMMON
#define INCL_WINWINDOWMGR
#endif /* INCL_WINCOMMON */

#ifdef INCL_ERRORS
#define INCL_WINERRORS
#endif	/* INCL_ERRORS */

/***************************************************************************/
/***	    General Window Management types, constants and macros	 ***/

typedef VOID FAR *MPARAM;      /* mp	*/
typedef MPARAM FAR *PMPARAM;   /* pmp	*/
typedef VOID FAR *MRESULT;     /* mres	*/
typedef MRESULT FAR *PMRESULT; /* pmres */

/* Macros to make an MPARAM from standard types. */
#define MPVOID			   ((MPARAM)0L)
#define MPFROMP(p)		   ((MPARAM)(VOID FAR *)(p))
#define MPFROMHWND(hwnd)	   ((MPARAM)(HWND)(hwnd))
#define MPFROMCHAR(ch)		   ((MPARAM)(USHORT)(ch))
#define MPFROMSHORT(s)		   ((MPARAM)(USHORT)(s))
#define MPFROM2SHORT(s1, s2)	   ((MPARAM)MAKELONG(s1, s2))
#define MPFROMSH2CH(s, uch1, uch2) ((MPARAM)MAKELONG(s, MAKESHORT(uch1, uch2)))
#define MPFROMLONG(l)		   ((MPARAM)(ULONG)(l))

/* Macros to extract standard types from an MPARAM */
#define PVOIDFROMMP(mp)		   ((VOID FAR *)(mp))
#define HWNDFROMMP(mp)		   ((HWND)(mp))
#define CHAR1FROMMP(mp)		   ((UCHAR)(mp))
#define CHAR2FROMMP(mp)		   ((UCHAR)((ULONG)mp >> 8))
#define CHAR3FROMMP(mp)		   ((UCHAR)((ULONG)mp >> 16))
#define CHAR4FROMMP(mp)		   ((UCHAR)((ULONG)mp >> 24))
#define SHORT1FROMMP(mp)	   ((USHORT)(ULONG)(mp))
#define SHORT2FROMMP(mp)	   ((USHORT)((ULONG)mp >> 16))
#define LONGFROMMP(mp)		   ((ULONG)(mp))

/* Macros to make an MRESULT from standard types. */
#define MRFROMP(p)		   ((MRESULT)(VOID FAR *)(p))
#define MRFROMSHORT(s)		   ((MRESULT)(USHORT)(s))
#define MRFROM2SHORT(s1, s2)	   ((MRESULT)MAKELONG(s1, s2))
#define MRFROMLONG(l)		   ((MRESULT)(ULONG)(l))

/* Macros to extract standard types from an MRESULT */
#define PVOIDFROMMR(mr)		   ((VOID FAR *)(mr))
#define SHORT1FROMMR(mr)	   ((USHORT)((ULONG)mr))
#define SHORT2FROMMR(mr)	   ((USHORT)((ULONG)mr >> 16))
#define LONGFROMMR(mr)		   ((ULONG)(mr))

#ifdef INCL_32
typedef MRESULT (EXPENTRY *PFNWP)(HWND, USHORT, MPARAM, MPARAM);
#else
typedef MRESULT (PASCAL FAR *PFNWP)(HWND, USHORT, MPARAM, MPARAM);
#endif


#ifndef INCL_SAADEFS
#define HWND_DESKTOP		   (HWND)1
#define HWND_OBJECT		   (HWND)2
#endif /* !INCL_SAADEFS */

#define HWND_TOP		   (HWND)3
#define HWND_BOTTOM		   (HWND)4

#ifndef INCL_SAADEFS
#define HWND_THREADCAPTURE	   (HWND)5
#endif /* !INCL_SAADEFS */


/* Standard Window Styles */

#define WS_VISIBLE		   0x80000000L
#define WS_DISABLED		   0x40000000L
#define WS_CLIPCHILDREN		   0x20000000L
#define WS_CLIPSIBLINGS		   0x10000000L
#define WS_PARENTCLIP		   0x08000000L
#define WS_SAVEBITS		   0x04000000L
#define WS_SYNCPAINT		   0x02000000L
#define WS_MINIMIZED		   0x01000000L
#define WS_MAXIMIZED		   0x00800000L

/* Dialog manager styles */

#define WS_GROUP		   0x00010000L
#define WS_TABSTOP		   0x00020000L
#define WS_MULTISELECT		   0x00040000L


/* Class styles */

#define CS_MOVENOTIFY		   0x00000001L
#define CS_SIZEREDRAW		   0x00000004L
#define CS_HITTEST		   0x00000008L
#define CS_PUBLIC		   0x00000010L
#define CS_FRAME		   0x00000020L
#define CS_CLIPCHILDREN		   0x20000000L
#define CS_CLIPSIBLINGS		   0x10000000L
#define CS_PARENTCLIP		   0x08000000L
#define CS_SAVEBITS		   0x04000000L
#define CS_SYNCPAINT		   0x02000000L

/***************************************************************************/
/****	    Window Manager Subsection part 1				****/
#if (defined(INCL_WINWINDOWMGR) || !defined(INCL_NOCOMMON))

BOOL	APIENTRY WinRegisterClass(HAB hab, PSZ pszClassName, PFNWP pfnWndProc,
				  ULONG flStyle, USHORT cbWindowData);

MRESULT APIENTRY WinDefWindowProc(HWND hwnd, USHORT msg, MPARAM mp1,
				  MPARAM mp2);
BOOL	APIENTRY WinDestroyWindow(HWND hwnd);
BOOL	APIENTRY WinShowWindow(HWND hwnd, BOOL fShow);
BOOL	APIENTRY WinQueryWindowRect(HWND hwnd, PRECTL prclDest);

HPS   APIENTRY WinGetPS(HWND hwnd);
BOOL  APIENTRY WinReleasePS(HPS hps);
BOOL  APIENTRY WinEndPaint(HPS hps);
#ifndef INCL_SAADEFS
HPS   APIENTRY WinGetClipPS(HWND hwnd, HWND hwndClip, USHORT fs);
BOOL  APIENTRY WinIsWindowShowing(HWND hwnd);
#endif /* !INCL_SAADEFS */

HPS   APIENTRY WinBeginPaint(HWND hwnd, HPS hps, PRECTL prclPaint);
HDC   APIENTRY WinOpenWindowDC(HWND hwnd);

SHORT APIENTRY WinScrollWindow(HWND hwnd, SHORT dx, SHORT dy,
			       PRECTL prclScroll, PRECTL prclClip,
			       HRGN hrgnUpdate, PRECTL prclUpdate,
			       USHORT rgfsw);

/* WinGetClipPS() flags */

#ifndef INCL_SAADEFS
#define PSF_LOCKWINDOWUPDATE	   0x0001
#define PSF_CLIPUPWARDS		   0x0002
#define PSF_CLIPDOWNWARDS	   0x0004
#define PSF_CLIPSIBLINGS	   0x0008
#define PSF_CLIPCHILDREN	   0x0010
#define PSF_PARENTCLIP		   0x0020

#endif /* !INCL_SAADEFS */

/* WinScrollWindow() flags */

#define SW_SCROLLCHILDREN	   0x0001
#define SW_INVALIDATERGN	   0x0002

BOOL  APIENTRY WinFillRect(HPS hps, PRECTL prcl, LONG lColor);

/* WinInitialize/WinTerminate Interface declarations */

typedef struct _QVERSDATA { /* qver */
    USHORT   environment;
    USHORT   version;
} QVERSDATA;
typedef QVERSDATA FAR *PQVERSDATA;

#define QV_OS2			   0x0000
#define QV_CMS			   0x0001
#define QV_TSO			   0x0002
#define QV_TSOBATCH		   0x0003
#define QV_OS400		   0x0004


ULONG  APIENTRY WinQueryVersion(HAB hab);
HAB    APIENTRY WinInitialize(USHORT fsOptions);
BOOL   APIENTRY WinTerminate(HAB hab);

HAB    APIENTRY WinQueryAnchorBlock(HWND hwnd);

#endif /* INCL_WINWINDOWMGR | !INCL_NOCOMMON */
/******************  End of Window Manager COMMON section ******************/


HWND	APIENTRY WinCreateWindow(HWND hwndParent, PSZ pszClass, PSZ pszName,
				 ULONG flStyle, SHORT x, SHORT y, SHORT cx,
				 SHORT cy, HWND hwndOwner,
				 HWND hwndInsertBehind, USHORT id,
				 PVOID pCtlData, PVOID pPresParams);
BOOL	APIENTRY WinEnableWindow(HWND hwnd, BOOL fEnable);
BOOL	APIENTRY WinIsWindowEnabled(HWND hwnd);
BOOL	APIENTRY WinEnableWindowUpdate(HWND hwnd, BOOL fEnable);
BOOL	APIENTRY WinIsWindowVisible(HWND hwnd);
SHORT	APIENTRY WinQueryWindowText(HWND hwnd, SHORT cchBufferMax,
				    PCH pchBuffer);
BOOL	APIENTRY WinSetWindowText(HWND hwnd, PSZ pszText);
SHORT	APIENTRY WinQueryWindowTextLength(HWND hwnd);
HWND	APIENTRY WinWindowFromID(HWND hwndParent, USHORT id);

BOOL	APIENTRY WinIsWindow(HAB hab, HWND hwnd);
HWND	APIENTRY WinQueryWindow(HWND hwnd, SHORT cmd, BOOL fLock);
SHORT	APIENTRY WinMultWindowFromIDs(HWND hwndParent, PHWND prghwnd,
				      USHORT idFirst, USHORT idLast);

/* WinQueryWindow() codes */

#define QW_NEXT		0
#define QW_PREV		1
#define QW_TOP		2
#define QW_BOTTOM	3
#define QW_OWNER	4
#define QW_PARENT	5
#define QW_NEXTTOP	6
#define QW_PREVTOP	7
#define QW_FRAMEOWNER	8


BOOL   APIENTRY WinSetParent(HWND hwnd, HWND hwndNewParent, BOOL fRedraw);

BOOL   APIENTRY WinIsChild(HWND hwnd, HWND hwndParent);
BOOL   APIENTRY WinSetOwner(HWND hwnd, HWND hwndNewOwner);
#ifndef INCL_SAADEFS
BOOL   APIENTRY WinQueryWindowProcess(HWND hwnd, PPID ppid, PTID ptid);
#endif /* !INCL_SAADEFS */

HWND   APIENTRY WinQueryObjectWindow(HWND hwndDesktop);
HWND   APIENTRY WinQueryDesktopWindow(HAB hab, HDC hdc);

/*** Window positioning functions */

/* WinSetMultWindowPos() structure */

#ifdef INCL_32
typedef struct _SWP { /* swp */
    ULONG   fl;
    SHORT   cy;
    SHORT   cx;
    SHORT   y;
    SHORT   x;
    HWND    hwndInsertBehind;
    HWND    hwnd;
    ULONG   ulReserved1;
    ULONG   ulReserved2;
} SWP;
#else
typedef struct _SWP { /* swp */
    USHORT  fs;
    SHORT   cy;
    SHORT   cx;
    SHORT   y;
    SHORT   x;
    HWND    hwndInsertBehind;
    HWND    hwnd;
} SWP;
#endif
typedef SWP FAR *PSWP;

#ifdef INCL_32
BOOL   APIENTRY WinSetWindowPos(HWND hwnd, HWND hwndInsertBehind, SHORT x,
				SHORT y, SHORT cx, SHORT cy, ULONG fl);
#else
BOOL   APIENTRY WinSetWindowPos(HWND hwnd, HWND hwndInsertBehind, SHORT x,
				SHORT y, SHORT cx, SHORT cy, USHORT fs);
#endif
BOOL   APIENTRY WinQueryWindowPos(HWND hwnd, PSWP pswp);
BOOL   APIENTRY WinSetMultWindowPos(HAB hab, PSWP pswp, USHORT cswp);

/* Values returned from WM_ADJUSTWINDOWPOS and passed to WM_WINDOWPOSCHANGED */

#define AWP_MINIMIZED		   0x00010000L
#define AWP_MAXIMIZED		   0x00020000L
#define AWP_RESTORED		   0x00040000L
#define AWP_ACTIVATE		   0x00080000L
#define AWP_DEACTIVATE		   0x00100000L

/* WinSetWindowPos() flags */

#define SWP_SIZE		   0x0001
#define SWP_MOVE		   0x0002
#define SWP_ZORDER		   0x0004
#define SWP_SHOW		   0x0008
#define SWP_HIDE		   0x0010
#define SWP_NOREDRAW		   0x0020
#define SWP_NOADJUST		   0x0040
#define SWP_ACTIVATE		   0x0080
#define SWP_DEACTIVATE		   0x0100
#define SWP_EXTSTATECHANGE	   0x0200
#define SWP_MINIMIZE		   0x0400
#define SWP_MAXIMIZE		   0x0800
#define SWP_RESTORE		   0x1000
#define SWP_FOCUSACTIVATE	   0x2000
#define SWP_FOCUSDEACTIVATE	   0x4000

/* Window painting */

BOOL  APIENTRY WinUpdateWindow(HWND hwnd);

BOOL  APIENTRY WinInvalidateRect(HWND hwnd, PRECTL pwrc, BOOL fIncludeChildren);
BOOL  APIENTRY WinInvalidateRegion(HWND hwnd, HRGN hrgn,
				   BOOL fIncludeChildren);


/* Drawing helpers */

BOOL  APIENTRY WinInvertRect(HPS hps, PRECTL prcl);
BOOL  APIENTRY WinDrawBitmap(HPS hpsDst, HBITMAP hbm, PRECTL pwrcSrc,
			     PPOINTL pptlDst, LONG clrFore, LONG clrBack,
			     USHORT fs);

/* WinDrawBitmap() flags */

#define DBM_NORMAL		   0x0000
#define DBM_INVERT		   0x0001
#define DBM_HALFTONE		   0x0002
#define DBM_STRETCH		   0x0004
#define DBM_IMAGEATTRS		   0x0008


#ifdef INCL_32

SHORT APIENTRY WinDrawText(HPS hps, SHORT cchText, PCH lpchText, PRECTL prcl,
			   LONG clrFore, LONG clrBack, ULONG flCmd);

#else /* not INCL_32 */

SHORT APIENTRY WinDrawText(HPS hps, SHORT cchText, PCH lpchText, PRECTL prcl,
			   LONG clrFore, LONG clrBack, USHORT fsCmd);

#endif /* INCL_32 */

/*
 * WinDrawText() codes:
 * From DT_LEFT to DT_EXTERNALLEADING, the codes are designed to be OR'ed with
 * SS_TEXT to create variations of the basic text static item.
 */
#define DT_LEFT			   0x0000
#define DT_QUERYEXTENT		   0x0002
#define DT_UNDERSCORE		   0x0010
#define DT_STRIKEOUT		   0x0020
#define DT_TEXTATTRS		   0x0040
#define DT_EXTERNALLEADING	   0x0080
#define DT_CENTER		   0x0100
#define DT_RIGHT		   0x0200
#define DT_TOP			   0x0000
#define DT_VCENTER		   0x0400
#define DT_BOTTOM		   0x0800
#define DT_HALFTONE		   0x1000
#define DT_MNEMONIC		   0x2000
#define DT_WORDBREAK		   0x4000
#define DT_ERASERECT		   0x8000


#ifdef INCL_32

BOOL APIENTRY WinDrawBorder(HPS hps, PRECTL prcl, SHORT cx, SHORT cy,
			    LONG clrFore, LONG clrBack, ULONG flCmd);

#else /* not INCL_32 */

BOOL APIENTRY WinDrawBorder(HPS hps, PRECTL prcl, SHORT cx, SHORT cy,
			    LONG clrFore, LONG clrBack, USHORT fsCmd);

#endif /* INCL_32 */

/* WinDrawBorder() flags */

#define DB_PATCOPY		   0x0000
#define DB_PATINVERT		   0x0001
#define DB_DESTINVERT		   0x0002
#define DB_AREAMIXMODE		   0x0003

#define DB_ROP			   0x0007
#define DB_INTERIOR		   0x0008
#define DB_AREAATTRS		   0x0010
#define DB_STANDARD		   0x0100
#define DB_DLGBORDER		   0x0200



/** Resource loading functions */

SHORT	APIENTRY WinLoadString(HAB hab, HMODULE hmod, USHORT id, SHORT cchMax,
			       PSZ pchBuffer);
#ifndef INCL_SAADEFS
SHORT	APIENTRY WinLoadMessage(HAB hab, HMODULE hmod, USHORT id, SHORT cchMax,
				PSZ pchBuffer);


#endif /* !INCL_SAADEFS */

/***************************************************************************/
/****		      Window Manager Subsection part 2			****/
#if (defined(INCL_WINWINDOWMGR) || !defined(INCL_NOCOMMON))

BOOL APIENTRY WinSetActiveWindow(HWND hwndDesktop, HWND hwnd);

#endif /* Window Manager COMMON subsection */

#ifdef INCL_WINWINDOWMGR
/* WM_CREATE structure */

typedef struct _CREATESTRUCT { /* crst */
    PVOID   pPresParams;
    PVOID   pCtlData;
    USHORT  id;
    HWND    hwndInsertBehind;
    HWND    hwndOwner;
    SHORT   cy;
    SHORT   cx;
    SHORT   y;
    SHORT   x;
    ULONG   flStyle;
    PSZ	    pszText;
    PSZ	    pszClass;
    HWND    hwndParent;
} CREATESTRUCT;
typedef CREATESTRUCT FAR *PCREATESTRUCT;

/* WinQueryClassInfo() structure */

typedef struct _CLASSINFO { /* clsi */
    ULONG   flClassStyle;
    PFNWP   pfnWindowProc;
    USHORT  cbWindowData;
} CLASSINFO;
typedef CLASSINFO FAR *PCLASSINFO;

#ifndef INCL_SAADEFS
PFNWP  APIENTRY WinSubclassWindow(HWND hwnd, PFNWP pfnwp);
#endif /* !INCL_SAADEFS */

SHORT  APIENTRY WinQueryClassName(HWND hwnd, SHORT cchMax, PCH pch);
BOOL   APIENTRY WinQueryClassInfo(HAB hab, PSZ pszClassName,
				  PCLASSINFO pClassInfo);

HWND   APIENTRY WinQueryActiveWindow(HWND hwndDesktop, BOOL fLock);

#ifndef INCL_SAADEFS
BOOL   APIENTRY WinIsThreadActive(HAB hab);
#endif /* !INCL_SAADEFS */
HWND   APIENTRY WinQuerySysModalWindow(HWND hwndDesktop, BOOL fLock);

HWND   APIENTRY WinLockWindow(HWND hwnd, BOOL fLock);
#ifndef INCL_SAADEFS
BOOL   APIENTRY WinRegisterWindowDestroy(HWND hwnd, BOOL fRegister);
#endif /* !INCL_SAADEFS */
BOOL   APIENTRY WinSetSysModalWindow(HWND hwndDesktop, HWND hwnd);

SHORT  APIENTRY WinQueryWindowLockCount(HWND hwnd);

#ifndef INCL_SAADEFS
USHORT APIENTRY WinQueryWindowUShort(HWND hwnd, SHORT index);
BOOL   APIENTRY WinSetWindowUShort(HWND hwnd, SHORT index, USHORT us);
ULONG  APIENTRY WinQueryWindowULong(HWND hwnd, SHORT index);
BOOL   APIENTRY WinSetWindowULong(HWND hwnd, SHORT index, ULONG ul);
PVOID  APIENTRY WinQueryWindowPtr(HWND hwnd, SHORT index);
BOOL   APIENTRY WinSetWindowPtr(HWND hwnd, SHORT index, PVOID p);
BOOL   APIENTRY WinSetWindowBits(HWND hwnd, SHORT index, ULONG flData,
				 ULONG flMask);

/* Standard WinQueryWindowUShort/ULong() indices */

#define QWS_USER		   0
#define QWS_ID			   (-1)
#define QWS_MIN			   (-1)

#define QWL_USER		   0
#define QWL_STYLE		   (-2)
#define QWP_PFNWP		   (-3)
#define QWL_HMQ			   (-4)
#define QWL_RESERVED		   (-5)
#define QWL_MIN			   (-5)

/* WC_FRAME WinQueryWindowUShort/ULong() indices */

#define QWL_HHEAP		   0x0004
#define QWL_HWNDFOCUSSAVE	   0x0018
#define QWL_DEFBUTTON   0x0040

#define QWS_FLAGS		   0x0008
#define QWS_RESULT		   0x000a
#define QWS_XRESTORE		   0x000c
#define QWS_YRESTORE		   0x000e
#define QWS_CXRESTORE		   0x0010
#define QWS_CYRESTORE		   0x0012
#define QWS_XMINIMIZE		   0x0014
#define QWS_YMINIMIZE		   0x0016


/* Window enumeration */

typedef LHANDLE HENUM;	/* henum */

HENUM APIENTRY WinBeginEnumWindows(HWND hwnd);
HWND  APIENTRY WinGetNextWindow(HENUM henum);
BOOL  APIENTRY WinEndEnumWindows(HENUM henum);

#endif /* !INCL_SAADEFS */

HWND  APIENTRY WinWindowFromPoint(HWND hwnd, PPOINTL pptl, BOOL fChildren,
				  BOOL fLock);
BOOL  APIENTRY WinMapWindowPoints(HWND hwndFrom, HWND hwndTo, PPOINTL prgptl,
				  SHORT cwpt);

/* More window painting functions */

BOOL  APIENTRY WinValidateRect(HWND hwnd, PRECTL prcl, BOOL fIncludeChildren);
BOOL  APIENTRY WinValidateRegion(HWND hwnd, HRGN hrgn, BOOL fIncludeChildren);
#ifndef INCL_SAADEFS
HWND  APIENTRY WinWindowFromDC(HDC hdc);
HDC   APIENTRY WinQueryWindowDC(HWND hwnd);
HPS   APIENTRY WinGetScreenPS(HWND hwndDesktop);
BOOL  APIENTRY WinLockWindowUpdate(HWND hwndDesktop, HWND hwndLockUpdate);
BOOL  APIENTRY WinLockVisRegions(HWND hwndDesktop, BOOL fLock);
#endif /* !INCL_SAADEFS */
BOOL  APIENTRY WinQueryUpdateRect(HWND hwnd, PRECTL prcl);
SHORT APIENTRY WinQueryUpdateRegion(HWND hwnd, HRGN hrgn);
SHORT APIENTRY WinExcludeUpdateRegion(HPS hps, HWND hwnd);

#endif /* INCL_WINWINDOWMGR */

#if (defined(INCL_WINMESSAGEMGR) || !defined(INCL_NOCOMMON))

/* QMSG structure */

typedef struct _QMSG { /* qmsg */
    HWND    hwnd;
    USHORT  msg;
    MPARAM  mp1;
    MPARAM  mp2;
    ULONG   time;
    POINTL  ptl;
} QMSG;
typedef QMSG FAR *PQMSG;

typedef LHANDLE HMQ;	/* hmq */

/*
** This is the standard function definition for window procedures.
** Typically they are names like "XxxxxxxxWndProc", where the prefix
** "Xxxxxxxxx" is replaced by some name descriptive of the window procedure
** being declared.  Window procedures must be EXPORTED in the definitions
** file used by the linker.
**
** MRESULT EXPENTRY MyclassWndProc(HWND hwnd,	** window handle	**
**				   USHORT msg,	** message number	**
**				   MPARAM mp1,	** 1st (packed) parms	**
**				   MPARAM mp2); ** 2nd (packed) parms	**
*/

/* Standard Window Messages */

#define WM_NULL			   0x0000
#define WM_CREATE		   0x0001
#define WM_DESTROY		   0x0002

#ifndef INCL_SAADEFS
#define WM_OTHERWINDOWDESTROYED	   0x0003
#endif /* !INCL_SAADEFS */

#define WM_ENABLE		   0x0004
#define WM_SHOW			   0x0005
#define WM_MOVE			   0x0006
#define WM_SIZE			   0x0007
#define WM_ADJUSTWINDOWPOS	   0x0008

#define WM_CALCVALIDRECTS	   0x0009

#define WM_SETWINDOWPARAMS	   0x000a
#define WM_QUERYWINDOWPARAMS	   0x000b
#define WM_HITTEST		   0x000c
#define WM_ACTIVATE		   0x000d
#define WM_SETFOCUS		   0x000f
#define WM_SETSELECTION		   0x0010

/* language support Winproc */
#define WM_PPAINT		   0x0011
#define WM_PSETFOCUS		   0x0012
#define WM_PSYSCOLORCHANGE	   0x0013
#define WM_PSIZE		   0x0014
#define WM_PACTIVATE		   0x0015
#define WM_PCONTROL		   0x0016


#define WM_COMMAND		   0x0020
#define WM_SYSCOMMAND		   0x0021
#define WM_HELP			   0x0022
#define WM_PAINT		   0x0023

#ifndef INCL_SAADEFS
#define WM_TIMER		   0x0024
#define WM_SEM1			   0x0025
#define WM_SEM2			   0x0026
#define WM_SEM3			   0x0027
#define WM_SEM4			   0x0028
#endif /* !INCL_SAADEFS */

#define WM_CLOSE		   0x0029
#define WM_QUIT			   0x002a
#define WM_SYSCOLORCHANGE	   0x002b
#define WM_SYSVALUECHANGED	   0x002d
#define WM_APPTERMINATENOTIFY	   0x002e
#define WM_PRESPARAMCHANGED	   0x002f

/* Control notification messages */

#define WM_CONTROL		   0x0030
#define WM_VSCROLL		   0x0031
#define WM_HSCROLL		   0x0032
#define WM_INITMENU		   0x0033
#define WM_MENUSELECT		   0x0034
#define WM_MENUEND		   0x0035
#define WM_DRAWITEM		   0x0036
#define WM_MEASUREITEM		   0x0037
#define WM_CONTROLPOINTER	   0x0038
#define WM_QUERYDLGCODE		   0x003a
#define WM_INITDLG		   0x003b
#define WM_SUBSTITUTESTRING	   0x003c
#define WM_MATCHMNEMONIC	   0x003d
#define WM_SAVEAPPLICATION	   0x003e

/* XLATOFF */
#ifdef INCL_16
#define WM_CONTROLHEAP		   0x0039
#endif /* INCL_16 */
/* XLATON */

/* Reserve a range of messages for help manager.  This range includes  */
/* public messages, defined below, and private ones, which need to be  */
/* reserved here to prevent clashing with application messages	       */

#define WM_HELPBASE		   0x0F00 /* Start of msgs for help manager   */
#define WM_HELPTOP		   0x0FFF /* End of msgs for help manager     */

#define WM_USER			   0x1000

/* WM_COMMAND msg source codes */

#define CMDSRC_PUSHBUTTON	   1
#define CMDSRC_MENU		   2
#define CMDSRC_ACCELERATOR	   3
#define CMDSRC_OTHER		   0

#ifndef INCL_32
/*
 * The following structure and macro are used to access the
 * WM_COMMAND, WM_HELP, and WM_SYSCOMMAND message parameters:
 */
typedef struct _COMMANDMSG { /* commandmsg */
    USHORT  source;	     /* mp2 */
    BOOL    fMouse;
    USHORT  cmd;	     /* mp1 */
    USHORT  unused;
} CMDMSG;

#define COMMANDMSG(pmsg) \
	((struct _COMMANDMSG FAR *)((PBYTE)pmsg - sizeof(MPARAM) * 2))
#endif /* INCL_32 */

/*
 * The following structure is used by the WinQueryQueueInfo() routine
 */
#ifdef INCL_32
typedef struct _MQINFO { /* mqi */
    USHORT  cb;
    PID	    pid;
    TID	    tid;
    USHORT  cmsgs;
    PVOID   pReserved;
} MQINFO;
typedef MQINFO FAR *PMQINFO;
#else /* not INCL_32 */
typedef struct _MQINFO {    /* mqi */
    USHORT  cb;
    USHORT  pid;
    USHORT  tid;
    USHORT  cmsgs;
    PVOID   pReserved;
} MQINFO;
typedef MQINFO FAR *PMQINFO;
#endif /* INCL_32 */


MRESULT APIENTRY WinSendMsg(HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2);
HMQ	APIENTRY WinCreateMsgQueue(HAB hab, SHORT cmsg);
BOOL	APIENTRY WinDestroyMsgQueue(HMQ hmq);
BOOL	APIENTRY WinQueryQueueInfo(HMQ hmq, PMQINFO pmqi, USHORT cbCopy);

#ifndef INCL_SAADEFS
BOOL	APIENTRY WinCancelShutdown(HMQ hmq, BOOL fCancelAlways);
#endif /* INCL_SAADEFS */

BOOL	APIENTRY WinGetMsg(HAB hab, PQMSG pqmsg, HWND hwndFilter,
			   USHORT msgFilterFirst, USHORT msgFilterLast);
BOOL	APIENTRY WinPeekMsg(HAB hab, PQMSG pqmsg, HWND hwndFilter,
			    USHORT msgFilterFirst, USHORT msgFilterLast,
			    USHORT fs);

MRESULT APIENTRY WinDispatchMsg(HAB hab, PQMSG pqmsg);

BOOL	APIENTRY WinPostMsg(HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2);
BOOL	APIENTRY WinRegisterUserMsg(HAB hab, USHORT msgid, SHORT datatype1,
				    SHORT dir1, SHORT datatype2, SHORT dir2,
				    SHORT datatyper);
BOOL	APIENTRY WinRegisterUserDatatype(HAB hab, SHORT datatype,
					 SHORT count, PSHORT types);
BOOL	APIENTRY WinSetMsgMode(HAB hab, PSZ classname,
			       SHORT control);
BOOL	APIENTRY WinSetSynchroMode(HAB hab, SHORT mode);

/* WinPeekMsg() constants */

#define PM_REMOVE		   0x0001
#define PM_NOREMOVE		   0x0000

/* WinRegisterUserDatatype datatypes defined in separate file */
#ifdef INCL_WINTYPES
  #include <pmtypes.h>
#endif /*INCL_WINTYPES*/

/* WinRegisterUserMsg direction codes */

#define RUM_IN			   1
#define RUM_OUT			   2
#define RUM_INOUT		   3

/* WinSetMsgMode constants */

#define SMD_DELAYED		   0x0001
#define SMD_IMMEDIATE		   0x0002

/* WinSetSynchroMode constants */

#define SSM_SYNCHRONOUS		   0x0001
#define SSM_ASYNCHRONOUS	   0x0002
#define SSM_MIXED		   0x0003

#endif /* WINMESSAGEMGR || !INCL_NOCOMMON	*/

#ifdef INCL_WINMESSAGEMGR

/* WM_CALCVALIDRECTS return flags */

#define CVR_ALIGNLEFT		    0x0001
#define CVR_ALIGNBOTTOM		    0x0002
#define CVR_ALIGNRIGHT		    0x0004
#define CVR_ALIGNTOP		    0x0008
#define CVR_REDRAW		    0x0010


/* WM_HITTEST return codes */

#define HT_NORMAL		    0
#define HT_TRANSPARENT		    (-1)
#define HT_DISCARD		    (-2)
#define HT_ERROR		    (-3)


/* WM_SET/QUERYWINDOWPARAMS structures and flags */

typedef struct _WNDPARAMS { /* wprm */
    USHORT  fsStatus;
    USHORT  cchText;
    PSZ	    pszText;
    USHORT  cbPresParams;
    PVOID   pPresParams;
    USHORT  cbCtlData;
    PVOID   pCtlData;
} WNDPARAMS;
typedef WNDPARAMS FAR *PWNDPARAMS;

/* Flags used by WM_SET/QUERYWINDOWPARAMS */

#define WPM_TEXT		   0x0001
#define WPM_CTLDATA		   0x0002
#define WPM_PRESPARAMS		   0x0004
#define WPM_CCHTEXT		   0x0008
#define WPM_CBCTLDATA		   0x0010
#define WPM_CBPRESPARAMS	   0x0020

#ifndef INCL_SAADEFS
BOOL	APIENTRY WinInSendMsg(HAB hab);

#endif /* INCL_SAADEFS */

BOOL	APIENTRY WinBroadcastMsg(HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2,
				 USHORT rgf);

/* WinBroadcastMsg codes */

#define BMSG_POST		   0x0000
#define BMSG_SEND		   0x0001
#define BMSG_POSTQUEUE		   0x0002
#define BMSG_DESCENDANTS	   0x0004
#define BMSG_FRAMEONLY		   0x0008



BOOL  APIENTRY WinWaitMsg(HAB hab, USHORT msgFirst, USHORT msgLast);

#ifndef INCL_SAADEFS
ULONG APIENTRY WinQueryQueueStatus(HWND hwndDesktop);

/* WinQueryQueueStatus() constants */

#define QS_KEY			   0x0001
#define QS_MOUSEBUTTON		   0x0002
#define QS_MOUSEMOVE		   0x0004
#define QS_MOUSE		   0x0006   /* QS_MOUSEMOVE|QS_MOUSEBUTTON */
#define QS_TIMER		   0x0008
#define QS_PAINT		   0x0010
#define QS_POSTMSG		   0x0020
#define QS_SEM1			   0x0040
#define QS_SEM2			   0x0080
#define QS_SEM3			   0x0100
#define QS_SEM4			   0x0200
#define QS_SENDMSG		   0x0400


BOOL  APIENTRY WinQueryMsgPos(HAB hab, PPOINTL pptl);
ULONG APIENTRY WinQueryMsgTime(HAB hab);

USHORT APIENTRY WinMsgSemWait(HSEM hsem, LONG dtTimeout);
USHORT APIENTRY WinMsgMuxSemWait(PUSHORT pisemCleared, PVOID pmxsl,
				 LONG dtTimeout);

#if defined(INCL_32)
#if !defined(DEFINEMUXSEMLIST)

/* These definitions are also in bsedos16.h.  They need to be here	*/
/* in case the user is converting an application that uses		*/
/* WinMsgMuxSemWait, as bsedos.h (32-bit version) does not define it.	*/

typedef struct _MUXSEM {	/* mxs */
    USHORT  zero;
    HSEM    hsem;
} MUXSEM;
typedef MUXSEM FAR *PMUXSEM;

typedef struct _MUXSEMLIST {	/* mxsl */
    USHORT  cmxs;
    MUXSEM  amxs[16];
} MUXSEMLIST;
typedef MUXSEMLIST FAR *PMUXSEMLIST;

/*
 * Since a MUXSEMLIST structure is actually a variable length
 * structure, the following macro may be used to define a MUXSEMLIST
 * structure having size elements, named "name".
 */
#define DEFINEMUXSEMLIST(name, size) \
    struct {			     \
	USHORT cmxs;		     \
	MUXSEM amxs[size];	     \
    } name;

#endif /* !defined(DEFINEMUXSEMLIST) */
#endif /* defined(INCL_32) */

#endif /* !INCL_SAADEFS */
BOOL  APIENTRY WinPostQueueMsg(HMQ hmq, USHORT msg, MPARAM mp1, MPARAM mp2);


/* WinSetMsgInterest()/WinSetClassMsgInterest() constants */
#define SMIM_ALL		   0x0EFF
#define SMI_NOINTEREST		   0x0001
#define SMI_INTEREST		   0x0002
#define SMI_RESET		   0x0004
#define SMI_AUTODISPATCH	   0x0008

BOOL  APIENTRY WinSetMsgInterest(HWND hwnd, USHORT msg_class, SHORT control);
BOOL  APIENTRY WinSetClassMsgInterest(HAB hab, PSZ pszClassName,
				      USHORT msg_class, SHORT control);

#endif /* INCL_WINMESSAGEMGR */

/*** Keyboard and mouse */

#if (defined(INCL_WININPUT) || !defined(INCL_NOCOMMON))

/*** Keyboard and mouse input COMMON subsection */
BOOL  APIENTRY WinSetFocus(HWND hwndDesktop, HWND hwndSetFocus);
BOOL  APIENTRY WinFocusChange(HWND hwndDesktop, HWND hwndSetFocus,
			      USHORT fsFocusChange);

#define FC_NOSETFOCUS		   0x0001
#define FC_NOBRINGTOTOP		   FC_NOSETFOCUS
#define FC_NOLOSEFOCUS		   0x0002
#define FC_NOBRINGTOPFIRSTWINDOW   FC_NOLOSEFOCUS
#define FC_NOSETACTIVEFOCUS	   0x0003
#define FC_NOSETACTIVE		   0x0004
#define FC_NOLOSEACTIVE		   0x0008
#define FC_NOSETSELECTION	   0x0010
#define FC_NOLOSESELECTION	   0x0020

#define QFC_NEXTINCHAIN		   0x0001
#define QFC_ACTIVE		   0x0002
#define QFC_FRAME		   0x0003
#define QFC_SELECTACTIVE	   0x0004
#define QFC_PARTOFCHAIN		   0x0005

#endif	/* Keyboard and mouse input COMMON subsection */

#ifdef INCL_WININPUT

#ifndef INCL_SAADEFS
BOOL  APIENTRY WinSetCapture(HWND hwndDesktop, HWND hwnd);
#endif /* !INCL_SAADEFS */
HWND  APIENTRY WinQueryCapture(HWND hwndDesktop, BOOL fLock);

/* Mouse input messages */

#ifndef INCL_SAADEFS
#define WM_MOUSEFIRST		   0x0070
#define WM_MOUSELAST		   0x0079
#define WM_BUTTONCLICKFIRST	   0x0071
#define WM_BUTTONCLICKLAST	   0x0079
#endif /* !INCL_SAADEFS */
#define WM_MOUSEMOVE		   0x0070

#define WM_BUTTON1DOWN		   0x0071

#define WM_BUTTON1UP		   0x0072
#define WM_BUTTON1DBLCLK	   0x0073
#define WM_BUTTON2DOWN		   0x0074
#define WM_BUTTON2UP		   0x0075
#define WM_BUTTON2DBLCLK	   0x0076
#ifndef INCL_SAADEFS
#define WM_BUTTON3DOWN		   0x0077
#define WM_BUTTON3UP		   0x0078
#define WM_BUTTON3DBLCLK	   0x0079
#endif /* !INCL_SAADEFS */

HWND  APIENTRY WinQueryFocus(HWND hwndDesktop, BOOL fLock);


/* Key/Character input messages */

#define WM_CHAR			   0x007a
#define WM_VIOCHAR		   0x007b

/* WM_CHAR fs field bits */

#define KC_CHAR			   0x0001
#define KC_VIRTUALKEY		   0x0002
#define KC_SCANCODE		   0x0004

#define KC_SHIFT		   0x0008
#define KC_CTRL			   0x0010
#define KC_ALT			   0x0020
#define KC_KEYUP		   0x0040
#define KC_PREVDOWN		   0x0080
#define KC_LONEKEY		   0x0100
#define KC_DEADKEY		   0x0200
#define KC_COMPOSITE		   0x0400
#define KC_INVALIDCOMP		   0x0800

#ifndef INCL_SAADEFS
#define KC_TOGGLE		   0x1000
#define KC_INVALIDCHAR		   0x2000
#define KC_DBCSRSRVD1		   0x4000
#define KC_DBCSRSRVD2		   0x8000
#endif /* !INCL_SAADEFS */

#ifndef INCL_32
/*
 * The following structure and macro are used to access the
 * WM_MOUSEMOVE, and WM_BUTTON message parameters
 */
typedef struct _MOUSEMSG { /* mousemsg */
    USHORT  codeHitTest;   /* mp2      */
    USHORT  unused;
    SHORT   x;		   /* mp1      */
    SHORT   y;
} MSEMSG;

#define MOUSEMSG(pmsg) \
	((struct _MOUSEMSG FAR *)((PBYTE)pmsg - sizeof(MPARAM) * 2))

/*
 * The following structure and macro are used to access the
 * WM_CHAR message parameters.
 */
typedef struct _CHARMSG { /* charmsg */
    USHORT  chr;	  /* mp2     */
    USHORT  vkey;
    USHORT  fs;		  /* mp1     */
    UCHAR   cRepeat;
    UCHAR   scancode;
} CHRMSG;

#define CHARMSG(pmsg) \
	((struct _CHARMSG FAR *)((PBYTE)pmsg - sizeof(MPARAM) * 2))
#endif /* INCL_32 */

/*** Virtual key values */

#define VK_BUTTON1		   0x01
#define VK_BUTTON2		   0x02
#define VK_BUTTON3		   0x03
#define VK_BREAK		   0x04
#define VK_BACKSPACE		   0x05
#define VK_TAB			   0x06
#define VK_BACKTAB		   0x07
#define VK_NEWLINE		   0x08
#define VK_SHIFT		   0x09
#define VK_CTRL			   0x0A
#define VK_ALT			   0x0B
#define VK_ALTGRAF		   0x0C
#define VK_PAUSE		   0x0D
#define VK_CAPSLOCK		   0x0E
#define VK_ESC			   0x0F
#define VK_SPACE		   0x10
#define VK_PAGEUP		   0x11
#define VK_PAGEDOWN		   0x12
#define VK_END			   0x13
#define VK_HOME			   0x14
#define VK_LEFT			   0x15
#define VK_UP			   0x16
#define VK_RIGHT		   0x17
#define VK_DOWN			   0x18
#define VK_PRINTSCRN		   0x19
#define VK_INSERT		   0x1A
#define VK_DELETE		   0x1B
#define VK_SCRLLOCK		   0x1C
#define VK_NUMLOCK		   0x1D
#define VK_ENTER		   0x1E
#define VK_SYSRQ		   0x1F
#define VK_F1			   0x20
#define VK_F2			   0x21
#define VK_F3			   0x22
#define VK_F4			   0x23
#define VK_F5			   0x24
#define VK_F6			   0x25
#define VK_F7			   0x26
#define VK_F8			   0x27
#define VK_F9			   0x28
#define VK_F10			   0x29
#define VK_F11			   0x2A
#define VK_F12			   0x2B
#define VK_F13			   0x2C
#define VK_F14			   0x2D
#define VK_F15			   0x2E
#define VK_F16			   0x2F
#define VK_F17			   0x30
#define VK_F18			   0x31
#define VK_F19			   0x32
#define VK_F20			   0x33
#define VK_F21			   0x34
#define VK_F22			   0x35
#define VK_F23			   0x36
#define VK_F24			   0x37


#define VK_MENU			   VK_F10
#ifdef INCL_NLS
#define VK_DBCSFIRST		   0x0080
#define VK_DBCSLAST		   0x00ff
#endif /* INCL_NLS */

#define VK_USERFIRST		   0x0100
#define VK_USERLAST		   0x01ff

#ifndef INCL_SAADEFS

SHORT APIENTRY WinGetKeyState(HWND hwndDesktop, SHORT vkey);
SHORT APIENTRY WinGetPhysKeyState(HWND hwndDesktop, SHORT sc);
BOOL  APIENTRY WinEnablePhysInput(HWND hwndDesktop, BOOL fEnable);
BOOL  APIENTRY WinIsPhysInputEnabled(HWND hwndDesktop);
BOOL  APIENTRY WinSetKeyboardStateTable(HWND hwndDesktop,
					PBYTE pKeyStateTable, BOOL fSet);


/* Journal Notification messages  */
#define WM_JOURNALNOTIFY	   0x007c

/*** Define the valid commands (lParm1) for journal notify message */
#define JRN_QUEUESTATUS		   0x00000001L
#define JRN_PHYSKEYSTATE	   0x00000002L

#endif /* !INCL_SAADEFS */
#endif /* INCL_WININPUT */


/**** Dialog Manager */

#if (defined(INCL_WINDIALOGS) || !defined(INCL_NOCOMMON))
/**** Dialog Manager COMMON subsection */

/*
** This is the standard function definition for dialog procedures.
** Typically they are names like "XxxxxxxxDlgProc", where the prefix
** "Xxxxxxxxx" is replaced by some name descriptive of the dialog procedure
** being declared.  Dialog procedures must be EXPORTED in the definitions
** file used by the linker.  The dialog procedure declaration is identical
** to that for window procedures.
**
** MRESULT EXPENTRY MydialogDlgProc(HWND hwnd,	 ** window handle	 **
**				    USHORT msg,	 ** message number	 **
**				    MPARAM mp1,	 ** 1st (packed) parms	 **
**				    MPARAM mp2); ** 2nd (packed) parms	 **
*/

BOOL	APIENTRY WinGetDlgMsg(HWND hwndDlg, PQMSG pqmsg);


HWND	APIENTRY WinLoadDlg(HWND hwndParent, HWND hwndOwner, PFNWP pfnDlgProc,
			    HMODULE hmod, USHORT idDlg, PVOID pCreateParams);
USHORT	APIENTRY WinDlgBox(HWND hwndParent, HWND hwndOwner, PFNWP pfnDlgProc,
			   HMODULE hmod, USHORT idDlg, PVOID pCreateParams);

BOOL	APIENTRY WinDismissDlg(HWND hwndDlg, USHORT usResult);

BOOL	APIENTRY WinQueryDlgItemShort(HWND hwndDlg, USHORT idItem,
				      PSHORT pResult, BOOL fSigned);
BOOL	APIENTRY WinSetDlgItemShort(HWND hwndDlg, USHORT idItem,
				    USHORT usValue, BOOL fSigned);
BOOL	APIENTRY WinSetDlgItemText(HWND hwndDlg, USHORT idItem, PSZ pszText);
USHORT	APIENTRY WinQueryDlgItemText(HWND hwndDlg, USHORT idItem,
				     SHORT cchBufferMax, PSZ pchBuffer);
SHORT	APIENTRY WinQueryDlgItemTextLength(HWND hwndDlg, USHORT idItem);

MRESULT APIENTRY WinDefDlgProc(HWND hwndDlg, USHORT msg, MPARAM mp1,
			       MPARAM mp2);

/* Special item IDs */

#ifndef INCL_SAADEFS
#define DID_OK	    1
#define DID_CANCEL  2
#define DID_ERROR   0xffff
#endif /* !INCL_SAADEFS */

BOOL APIENTRY WinAlarm(HWND hwndDesktop, USHORT rgfType);

/* WinAlarm Codes */

#define WA_WARNING		   0
#define WA_NOTE			   1
#define WA_ERROR		   2
#define WA_CWINALARMS		   3

#ifdef INCL_32

USHORT APIENTRY WinMessageBox(HWND hwndParent, HWND hwndOwner, PSZ pszText,
			      PSZ pszCaption, USHORT idWindow, ULONG flStyle);

#else /* not INCL_32 */

USHORT APIENTRY WinMessageBox(HWND hwndParent, HWND hwndOwner, PSZ pszText,
			      PSZ pszCaption, USHORT idWindow, USHORT fsStyle);

#endif /* INCL_32 */

/* Message box types */

#define MB_OK			   0x0000
#define MB_OKCANCEL		   0x0001
#define MB_RETRYCANCEL		   0x0002
#define MB_ABORTRETRYIGNORE	   0x0003
#define MB_YESNO		   0x0004
#define MB_YESNOCANCEL		   0x0005
#define MB_CANCEL		   0x0006
#define MB_ENTER		   0x0007
#define MB_ENTERCANCEL		   0x0008

#define MB_NOICON		   0x0000
#define MB_CUANOTIFICATION	   0x0000
#define MB_ICONQUESTION		   0x0010
#define MB_ICONEXCLAMATION	   0x0020
#define MB_CUAWARNING		   0x0020
#define MB_ICONASTERISK		   0x0030
#define MB_ICONHAND		   0x0040
#define MB_CUACRITICAL		   0x0040
#define MB_QUERY		   MB_ICONQUESTION
#define MB_WARNING		   MB_CUAWARNING
#define MB_INFORMATION		   MB_ICONASTERISK
#define MB_CRITICAL		   MB_CUACRITICAL
#define MB_ERROR		   MB_CRITICAL

#define MB_DEFBUTTON1		   0x0000
#define MB_DEFBUTTON2		   0x0100
#define MB_DEFBUTTON3		   0x0200

#define MB_APPLMODAL		   0x0000
#define MB_SYSTEMMODAL		   0x1000
#define MB_HELP			   0x2000
#define MB_MOVEABLE		   0x4000


/* Message box return codes */

#define MBID_OK			   1
#define MBID_CANCEL		   2
#define MBID_ABORT		   3
#define MBID_RETRY		   4
#define MBID_IGNORE		   5
#define MBID_YES		   6
#define MBID_NO			   7
#define MBID_HELP		   8
#define MBID_ENTER		   9
#define MBID_ERROR		   0xffff


/* Useful macros */

/***************************************************************************
* USHORT WinCheckButton(HWND hwndDlg, USHORT id, USHORT checkState)
*    sets the check state of button #id.
*    returns the previous check state.
\**************************************************************************/
#define WinCheckButton(hwndDlg, id, usCheckState) \
    ((USHORT)WinSendDlgItemMsg(hwndDlg, id, BM_SETCHECK, \
	    MPFROMSHORT(usCheckState), (MPARAM)NULL))

/***************************************************************************
* USHORT WinQueryButtonCheckstate(HWND hwndDlg, USHORT id)
*    returns the check state of buttin #id.
*
\**************************************************************************/
#define WinQueryButtonCheckstate(hwndDlg, id) \
    ((USHORT)WinSendDlgItemMsg(hwndDlg, id, BM_QUERYCHECK, \
	    (MPARAM)NULL, (MPARAM)NULL))

/***************************************************************************
* BOOL WinEnableControl(HWND hwndDlg, USHORT id, BOOL fEnable)
*    sets the enable state of button #id.
*    returns fSuccess.
\**************************************************************************/
#define WinEnableControl(hwndDlg, id, fEnable) \
    WinEnableWindow(WinWindowFromID(hwndDlg, id), fEnable)

/***************************************************************************
* BOOL WinIsControlEnabled(HWND hwndDlg, USHORT id)
*    returns the enable state of control #id.
*
\**************************************************************************/
#define WinIsControlEnabled(hwndDlg, id) \
    ((BOOL)WinIsWindowEnabled(WinWindowFromID(hwndDlg, id)))

#endif /* Dialog Manager COMMON subsection */


#ifdef INCL_WINDIALOGS

/* Dialog codes: returned by WM_QUERYDLGCODE msg     */

#define DLGC_ENTRYFIELD	   0x0001  /* Entry field item understands EM_SETSEL) */
#define DLGC_BUTTON	   0x0002  /* Button item			      */
#define DLGC_RADIOBUTTON   0x0004  /* Radio button			      */
#define DLGC_STATIC	   0x0008  /* Static item			      */
#define DLGC_DEFAULT	   0x0010  /* Default push button		      */
#define DLGC_PUSHBUTTON	   0x0020  /* Normal (Non-default) push button	      */
#define DLGC_CHECKBOX	   0x0040  /* Check box button control		      */
#define DLGC_SCROLLBAR	   0x0080  /* Scroll bar			      */
#define DLGC_MENU	   0x0100  /* Menu				      */
#define DLGC_TABONCLICK	   0x0200
#define DLGC_MLE	   0x0400  /* Multiple Line Entry		      */


USHORT	APIENTRY WinProcessDlg(HWND hwndDlg);
MRESULT APIENTRY WinSendDlgItemMsg(HWND hwndDlg, USHORT idItem, USHORT msg,
				   MPARAM mp1, MPARAM mp2);
BOOL	APIENTRY WinMapDlgPoints(HWND hwndDlg, PPOINTL prgwptl, USHORT cwpt,
				 BOOL fCalcWindowCoords);
HWND	APIENTRY WinEnumDlgItem(HWND hwndDlg, HWND hwnd, USHORT code,
				BOOL fLock);
SHORT	APIENTRY WinSubstituteStrings(HWND hwnd, PSZ pszSrc, SHORT cchDstMax,
				      PSZ pszDst);

/* WinEnumDlgItem() constants
 *
 * In OS/2 1.2, WinEnumDlgItem() can enumerate a window such that the
 * selection cursor may be moved  according to CUA (Common User Access)
 * rules.
 */

#define EDI_FIRSTTABITEM	   0
#define EDI_LASTTABITEM		   1
#define EDI_NEXTTABITEM		   2
#define EDI_PREVTABITEM		   3
#define EDI_FIRSTGROUPITEM	   4
#define EDI_LASTGROUPITEM	   5
#define EDI_NEXTGROUPITEM	   6
#define EDI_PREVGROUPITEM	   7

/*** Dialog template definitions */

/* Variable-sized dialog template items: */


/*
 *  We pack the structures _DLGTITEM and _DLGTEMPLATE so that the structures
 *  are identical in the 32bit and 16bit worlds. We have to do this because
 *  is has been documented that one can pass a pointer to 'the binary resource
 *  format' when calling WinCreateDlg.
 *
 */

/* XLATOFF */
#pragma pack(2)	     /* pack on wordboundary */
/* XLATON */

typedef struct _DLGTITEM { /* dlgti */
    USHORT  fsItemStatus;
    USHORT  cChildren;
    USHORT  cchClassName;
    USHORT  offClassName;
    USHORT  cchText;
    USHORT  offText;
    ULONG   flStyle;
    SHORT   x;
    SHORT   y;
    SHORT   cx;
    SHORT   cy;
    USHORT  id;
    USHORT  offPresParams;
    USHORT  offCtlData;
} DLGTITEM;
typedef DLGTITEM FAR *PDLGTITEM;

/* Dialog Template structure */

typedef struct _DLGTEMPLATE { /* dlgt */
    USHORT   cbTemplate;
    USHORT   type;
    USHORT   codepage;
    USHORT   offadlgti;
    USHORT   fsTemplateStatus;
    USHORT   iItemFocus;
    USHORT   coffPresParams;
    DLGTITEM adlgti[1];
} DLGTEMPLATE;
typedef DLGTEMPLATE FAR *PDLGTEMPLATE;
/* XLATOFF */
#pragma pack()	  /* reset to default packing */
/* XLATON */

HWND   APIENTRY WinCreateDlg(HWND hwndParent, HWND hwndOwner, PFNWP pfnDlgProc,
			     PDLGTEMPLATE pdlgt, PVOID pCreateParams);


#endif /* INCL_WINDIALOGS */


#ifdef INCL_WINSTATICS

/*** Static Control Manager */

/* Static control styles:
 *
 * NOTE: the top 9 bits of the LOWORD of the window flStyle are used for
 * DT_* flags.  The lower 7 bits are for SS_* styles.  This gives us up
 * to 128 distinct static control types (we currently use 11 of them).
 */
#define SS_TEXT			   0x0001L
#define SS_GROUPBOX		   0x0002L

#ifndef INCL_SAADEFS
#define SS_ICON			   0x0003L
#define SS_BITMAP		   0x0004L
#endif /* !INCL_SAADEFS */
#define SS_FGNDRECT		   0x0005L
#ifndef INCL_SAADEFS
#define SS_HALFTONERECT		   0x0006L
#endif /* !INCL_SAADEFS */
#define SS_BKGNDRECT		   0x0007L
#define SS_FGNDFRAME		   0x0008L
#ifndef INCL_SAADEFS
#define SS_HALFTONEFRAME	   0x0009L
#endif /* !INCL_SAADEFS */
#define SS_BKGNDFRAME		   0x000aL
#define SS_SYSICON		   0x000bL

#ifdef DCR_AUTOSIZE
#define SS_AUTOSIZE	    0x0040L
#endif

/* Static control class name */

#define WC_STATIC	     ((PSZ)0xffff0005L)

/* Static control messages */

#define SM_SETHANDLE		   0x0100
#define SM_QUERYHANDLE		   0x0101

#endif /* INCL_WINSTATICS */


#ifdef INCL_WINBUTTONS
/**** Button Controls Subsection */

/* Button control styles */

#define BS_PUSHBUTTON		   0L
#define BS_CHECKBOX		   1L
#define BS_AUTOCHECKBOX		   2L
#define BS_RADIOBUTTON		   3L
#define BS_AUTORADIOBUTTON	   4L
#define BS_3STATE		   5L
#define BS_AUTO3STATE		   6L

#ifndef INCL_SAADEFS
#define BS_USERBUTTON		   7L
#endif /* !INCL_SAADEFS */

#define BS_HELP			   0x0100L
#define BS_SYSCOMMAND		   0x0200L
#define BS_DEFAULT		   0x0400L
#define BS_NOPOINTERFOCUS	   0x0800L
#define BS_NOBORDER		   0x1000L
#define BS_NOCURSORSELECT	   0x2000L
#ifdef DCR_AUTOSIZE
#define BS_AUTOSIZE	    0x4000L
#define BS_OWNERDRAW	    0x8000L
#endif


/* Button class name */

#define WC_BUTTON	((PSZ)0xffff0003L)


#ifndef INCL_SAADEFS
typedef struct _BTNCDATA { /* btncd */
    USHORT  cb;
    USHORT  fsCheckState;
    USHORT  fsHiliteState;
} BTNCDATA;
typedef BTNCDATA FAR *PBTNCDATA;
#endif /* !INCL_SAADEFS */

/* User button structure (passed in WM_CONTROL msg) */

#ifndef INCL_SAADEFS
typedef struct _USERBUTTON { /* ubtn */
    HWND    hwnd;
    HPS	    hps;
    USHORT  fsState;
    USHORT  fsStateOld;
} USERBUTTON;
typedef USERBUTTON FAR *PUSERBUTTON;
#endif /* !INCL_SAADEFS */

/* Button control messages */

#define BM_CLICK		   0x0120
#define BM_QUERYCHECKINDEX	   0x0121
#define BM_QUERYHILITE		   0x0122
#define BM_SETHILITE		   0x0123
#define BM_QUERYCHECK		   0x0124
#define BM_SETCHECK		   0x0125
#define BM_SETDEFAULT		   0x0126

/* Button notification codes */

#define BN_CLICKED		   1
#define BN_DBLCLICKED		   2
#define BN_PAINT		   3

/* BN_PAINT button draw state codes (must be in high byte) */

#ifndef INCL_SAADEFS
#define BDS_HILITED		   0x0100
#define BDS_DISABLED		   0x0200
#define BDS_DEFAULT		   0x0400

#endif /* !INCL_SAADEFS */

#endif /* INCL_WINBUTTONS */


#ifdef INCL_WINENTRYFIELDS
/**** Entryfield controls Subsection */

/* Entry field	styles */

#define ES_LEFT			   0x00000000L
#define ES_CENTER		   0x00000001L
#define ES_RIGHT		   0x00000002L

#ifndef INCL_SAADEFS
#define ES_AUTOSCROLL		   0x00000004L
#endif /* !INCL_SAADEFS */

#define ES_MARGIN		   0x00000008L
#define ES_AUTOTAB		   0x00000010L
#define ES_READONLY		   0x00000020L
#define ES_COMMAND		   0x00000040L
#define ES_UNREADABLE		   0x00000080L
#define ES_PICTUREMASK		   0x00000100L
#ifdef DCR_AUTOSIZE
#define ES_AUTOSIZE		   0x00000200L
#endif

#ifdef INCL_NLS
#define ES_ANY			   0x00000000L
#define ES_SBCS			   0x00001000L
#define ES_DBCS			   0x00002000L
#define ES_MIXED		   0x00003000L
#endif /* INCL_NLS */

#define WC_COMBOBOX	     ((PSZ)0xffff0002L)

/*
 * combo box styles
 */
#define CBS_SIMPLE		   0x0001L
#define CBS_DROPDOWN		   0x0002L
#define CBS_DROPDOWNLIST	   0x0004L
/*
 *The foolowing edit and listbox styles may be used in conjunction
 *with CBS_ styles
 *ES_AUTOTAB ES_ANY ES_SBCS ES_DBCS ES_MIXED LS_HORZSCROLL
*/

/*
 *IDs of combobox entry field and listbox.
 */
#define CBID_LIST		   0x029A
#define CBID_EDIT		   0x029B

#define CBM_SHOWLIST		   0x0170L
#define CBM_HILITE		   0x0171L
#define CBM_ISLISTSHOWING	   0x0172L

#define CBN_EFCHANGE		   1
#define CBN_EFSCROLL		   2
#define CBN_MEMERROR		   3
#define CBN_LBSELECT		   4
#define CBN_LBSCROLL		   5
#define CBN_SHOWLIST		   6
#define CBN_ENTER		   7

#define WC_ENTRYFIELD	     ((PSZ)0xffff0006L)

#ifndef INCL_SAADEFS
typedef struct _ENTRYFDATA { /* efd */
    USHORT  cb;
    USHORT  cchEditLimit;
    USHORT  ichMinSel;
    USHORT  ichMaxSel;
} ENTRYFDATA;
typedef ENTRYFDATA FAR *PENTRYFDATA;

#endif /* !INCL_SAADEFS */

/* Entry Field	messages */

#define EM_QUERYCHANGED		   0x0140
#define EM_QUERYSEL		   0x0141
#define EM_SETSEL		   0x0142
#define EM_SETTEXTLIMIT		   0x0143

#ifndef INCL_SAADEFS
#define EM_CUT			   0x0144
#define EM_COPY			   0x0145
#endif /* !INCL_SAADEFS */
#define EM_CLEAR		   0x0146
#ifndef INCL_SAADEFS
#define EM_PASTE		   0x0147
#endif /* !INCL_SAADEFS */
#define EM_QUERYFIRSTCHAR	   0x0148
#define EM_SETFIRSTCHAR		   0x0149
#ifndef INCL_SAADEFS
#define EM_QUERYREADONLY	   0x014a
#define EM_SETREADONLY		   0x014b
#define EM_SETINSERTMODE	   0x014c
#endif /* !INCL_SAADEFS */

/* Entry Field notification messages */

#define EN_SETFOCUS		   0x0001
#define EN_KILLFOCUS		   0x0002
#define EN_CHANGE		   0x0004
#define EN_SCROLL		   0x0008
#ifndef INCL_SAADEFS
#define EN_MEMERROR		   0x0010
#define EN_OVERFLOW		   0x0020
#define EN_INSERTMODETOGGLE	   0x0040
#endif /* !INCL_SAADEFS */

#endif /* INCL_WINENTRYFIELDS */


/*  Multiple Line Entrys */
#ifdef INCL_WINMLE
#define WC_MLE	   ((PSZ)0xffff000aL)
#include <pmmle.h>
#endif /* !INCL_WINMLE */
#ifdef INCL_WINLISTBOXES

/**** Listboxes */

/* List box styles */

#define LS_MULTIPLESEL		   0x00000001L

#ifndef INCL_SAADEFS
#define LS_OWNERDRAW		   0x00000002L
#endif /* !INCL_SAADEFS */

#define LS_NOADJUSTPOS		   0x00000004L
#define LS_HORZSCROLL		   0x00000008L

#define LS_EXTENDEDSEL		   0x00000010L

/* Listbox class name */

#define WC_LISTBOX	     ((PSZ)0xffff0007L)

/* List box notification messages */

#define LN_SELECT		   1
#define LN_SETFOCUS		   2
#define LN_KILLFOCUS		   3
#define LN_SCROLL		   4
#define LN_ENTER		   5

/* List box messages */

#define LM_QUERYITEMCOUNT	   0x0160
#define LM_INSERTITEM		   0x0161
#define LM_SETTOPINDEX		   0x0162
#define LM_DELETEITEM		   0x0163
#define LM_SELECTITEM		   0x0164
#define LM_QUERYSELECTION	   0x0165
#define LM_SETITEMTEXT		   0x0166
#define LM_QUERYITEMTEXTLENGTH	   0x0167
#define LM_QUERYITEMTEXT	   0x0168

#define LM_SETITEMHANDLE	   0x0169
#define LM_QUERYITEMHANDLE	   0x016a
#define LM_SEARCHSTRING		   0x016b
#define LM_SETITEMHEIGHT	   0x016c
#define LM_QUERYTOPINDEX	   0x016d
#define LM_DELETEALL		   0x016e

/* List box constants */

#define LIT_ERROR		   (-3)
#define LIT_MEMERROR		   (-2)
#define LIT_NONE		   (-1)
#define LIT_FIRST		   (-1)

/* For LM_INSERTITEM msg */

#define LIT_END			   (-1)
#define LIT_SORTASCENDING	   (-2)
#define LIT_SORTDESCENDING	   (-3)

/* For LM_SEARCHSTRING msg */

#define LSS_SUBSTRING		   0x0001
#define LSS_PREFIX		   0x0002
#define LSS_CASESENSITIVE	   0x0004


/* Useful macros */

/***************************************************************************
* SHORT WinDeleteLboxItem(HWND hwndLbox, SHORT index)
*    deletes item index from the listbox.
*    returns the number of items left.
\**************************************************************************/
#define WinDeleteLboxItem(hwndLbox, index) \
    ((SHORT)WinSendMsg(hwndLbox, LM_DELETEITEM, MPFROMSHORT(index), \
	    (MPARAM)NULL))

/***************************************************************************
* SHORT WinInsertLboxItem(HWND hwndLbox, SHORT index, PSZ psz)
*    inserts psz into a listbox at index.  Index may be an LIT_ constant.
*    returns the actual index where it was inserted.
\**************************************************************************/
#define WinInsertLboxItem(hwndLbox, index, psz) \
    ((SHORT)WinSendMsg(hwndLbox, LM_INSERTITEM, MPFROMSHORT(index), \
	    MPFROMP(psz)))

/***************************************************************************
* SHORT WinQueryLboxCount(HWND hwndLbox)
*    returns the number of items in the listbox.
*
\**************************************************************************/
#define WinQueryLboxCount(hwndLbox) \
    ((SHORT)WinSendMsg(hwndLbox, LM_QUERYITEMCOUNT, (MPARAM)NULL, \
	    (MPARAM)NULL))

/***************************************************************************
* SHORT WinQueryLboxItemText(HWND hwndLbox, SHORT index, PSZ psz, SHORT cchMax)
*    fills psz with the text if item index.
*    returns the text length copied.
\**************************************************************************/
#define WinQueryLboxItemText(hwndLbox, index, psz, cchMax) \
    ((SHORT)WinSendMsg(hwndLbox, LM_QUERYITEMTEXT, \
	    MPFROM2SHORT((index), (cchMax)), MPFROMP(psz)))

/***************************************************************************
* SHORT WinQueryLboxItemTextLength(HWND hwndLbox, SHORT index)
*    returns the length of item index.
*
\**************************************************************************/
#define WinQueryLboxItemTextLength(hwndLbox, index)	    \
    ((SHORT)WinSendMsg(hwndLbox, LM_QUERYITEMTEXTLENGTH,    \
	    MPFROMSHORT(index), (MPARAM)NULL))

/***************************************************************************
* BOOL WinSetLboxItemText(HWND hwndLbox, SHORT index, PSZ psz)
*    sets the text of item index to psz.
*    returns fSuccess.
\**************************************************************************/
#define WinSetLboxItemText(hwndLbox, index, psz) \
    ((BOOL)WinSendMsg(hwndLbox, LM_SETITEMTEXT, \
	    MPFROMSHORT(index), MPFROMP(psz)))

/***************************************************************************
* SHORT WinQueryLboxSelectedItem(HWND hwndLbox)
*    returns the item index selected. (for single selection only)
*
\**************************************************************************/
#define WinQueryLboxSelectedItem(handLbox) \
    ((SHORT)WinSendMsg(hwndLbox, LM_QUERYSELECTION, MPFROMSHORT(LIT_FIRST), \
	    (MPARAM)NULL))

#endif /* INCL_WINLISTBOXES */


#ifdef INCL_WINMENUS

/**** Menu Manager Subsection */

/* Menu control styles */

#define MS_ACTIONBAR		   0x00000001L
#define MS_TITLEBUTTON		   0x00000002L
#define MS_VERTICALFLIP		   0x00000004L

HWND APIENTRY WinLoadMenu(HWND hwndFrame, HMODULE hmod, USHORT idMenu);

/* Menu class name */

#define WC_MENU		     ((PSZ)0xffff0004L)

/* Menu control messages */

#define MM_INSERTITEM		   0x0180
#define MM_DELETEITEM		   0x0181
#define MM_QUERYITEM		   0x0182
#define MM_SETITEM		   0x0183
#define MM_QUERYITEMCOUNT	   0x0184
#define MM_STARTMENUMODE	   0x0185
#define MM_ENDMENUMODE		   0x0186
#define MM_REMOVEITEM		   0x0188
#define MM_SELECTITEM		   0x0189
#define MM_QUERYSELITEMID	   0x018a
#define MM_QUERYITEMTEXT	   0x018b
#define MM_QUERYITEMTEXTLENGTH	   0x018c
#define MM_SETITEMHANDLE	   0x018d
#define MM_SETITEMTEXT		   0x018e
#define MM_ITEMPOSITIONFROMID	   0x018f
#define MM_ITEMIDFROMPOSITION	   0x0190
#define MM_QUERYITEMATTR	   0x0191
#define MM_SETITEMATTR		   0x0192
#define MM_ISITEMVALID		   0x0193
#define MM_QUERYITEMRECT	   0x0194


HWND APIENTRY WinCreateMenu(HWND hwndParent, PVOID lpmt);

/* Owner Item Structure (Also used for listboxes) */

#ifndef INCL_SAADEFS
typedef struct _OWNERITEM { /* oi */
    HWND    hwnd;
    HPS	    hps;
    USHORT  fsState;
    USHORT  fsAttribute;
    USHORT  fsStateOld;
    USHORT  fsAttributeOld;
    RECTL   rclItem;
    SHORT   idItem; /* This field contains idItem for menus, iItem for lb. */
    ULONG   hItem;
} OWNERITEM;
typedef OWNERITEM FAR *POWNERITEM;
#endif /* !INCL_SAADEFS */

/* Menu item */

typedef struct _MENUITEM { /* mi */
    SHORT   iPosition;
    USHORT  afStyle;
    USHORT  afAttribute;
    USHORT  id;
    HWND    hwndSubMenu;
    ULONG   hItem;
} MENUITEM;
typedef MENUITEM FAR *PMENUITEM;

#define MIT_END			   (-1)
#define MIT_NONE		   (-1)
#define MIT_MEMERROR		   (-1)
#define MIT_ERROR		   (-1)
#define MIT_FIRST		   (-2)
#define MIT_LAST		   (-3)
#define MID_NONE		   MIT_NONE
#define MID_ERROR		   (-1)

/* Menu item styles & attributes */

#define MIS_TEXT		   0x0001

#ifndef INCL_SAADEFS
#define MIS_BITMAP		   0x0002
#endif /* !INCL_SAADEFS */
#define MIS_SEPARATOR		   0x0004

#ifndef INCL_SAADEFS
#define MIS_OWNERDRAW		   0x0008
#endif /* !INCL_SAADEFS */

#define MIS_SUBMENU		   0x0010
#define MIS_MULTMENU		   0x0020      /* multiple choice submenu     */
#define MIS_SYSCOMMAND		   0x0040
#define MIS_HELP		   0x0080
#define MIS_STATIC		   0x0100
#define MIS_BUTTONSEPARATOR	   0x0200
#define MIS_BREAK		   0x0400
#define MIS_BREAKSEPARATOR	   0x0800
#define MIS_GROUP		   0x1000      /* multiple choice group start */
/* In multiple choice submenus a style of 'single' denotes the item is a
** radiobutton.  Absence of this style defaults the item to a checkbox.	      */
#define MIS_SINGLE		   0x2000

#define MIA_NODISMISS		   0x0020
#define MIA_FRAMED		   0x1000
#define MIA_CHECKED		   0x2000
#define MIA_DISABLED		   0x4000
#define MIA_HILITED		   0x8000


BOOL APIENTRY WinPopupMenu(HWND hwndParent, HWND hwndOwner, HWND hwndMenu,
			   SHORT x, SHORT y, SHORT idItem, USHORT fs);

/* Values of fs in WinPopupMenu call */

#define PU_POSITIONONITEM	   0x0001 /* Need SHORT idItem parameter */

#define PU_HCONSTRAIN		   0x0002 /* Keep menu on left and right edge */
#define PU_VCONSTRAIN		   0x0004 /* Keep menu on top and bottom edge */

#define PU_NONE			   0x0000 /* If invoked by keyboard */
#define PU_MOUSEBUTTON1DOWN	   0x0008 /* If invoked by button 1 */
#define PU_MOUSEBUTTON2DOWN	   0x0010 /* If invoked by button 2 */
#define PU_MOUSEBUTTON3DOWN	   0x0018 /* If invoked by button 3 */

#define PU_SELECTITEM		   0x0020 /* Set selected item (use with kbd) */

#define PU_MOUSEBUTTON1		   0x0040 /* If button1 use allowed */
#define PU_MOUSEBUTTON2		   0x0080 /* If button2 use allowed */
#define PU_MOUSEBUTTON3		   0x0100 /* If button3 use allowed */
#define PU_KEYBOARD		   0x0200 /* If keyboard use allowed */


/* Useful macros */

/***************************************************************************
* BOOL WinCheckMenuItem(HWND hwndMenu, USHORT id, BOOL fcheck)
*    Sets the check state of menuitem #id to fcheck.
*    returns fSuccess.
\**************************************************************************/
#define WinCheckMenuItem(hwndMenu, id, fcheck) \
    ((BOOL)WinSendMsg(hwndMenu, MM_SETITEMATTR, \
	    MPFROM2SHORT(id, TRUE), \
	    MPFROM2SHORT(MIA_CHECKED, (BOOL)(fcheck) ? MIA_CHECKED : 0)))

/***************************************************************************
* BOOL WinIsMenuItemChecked(HWND hwndMenu, USHORT id)
*    returns the check state of menuitem #id.
*
\**************************************************************************/
#define WinIsMenuItemChecked(hwndMenu, id) \
    ((BOOL)WinSendMsg(hwndMenu, MM_QUERYITEMATTR, \
	    MPFROM2SHORT(id, TRUE), \
	    MPFROMSHORT(MIA_CHECKED)))

/***************************************************************************
* BOOL WinEnableMenuItem(HWND hwndMenu, USHORT id, BOOL fenable)
*    sets the enable state of menuitem #id to fenable.
*    returns fSuccess.
\**************************************************************************/
#define WinEnableMenuItem(hwndMenu, id, fEnable) \
    ((BOOL)WinSendMsg(hwndMenu, MM_SETITEMATTR, \
	    MPFROM2SHORT(id, TRUE), \
	    MPFROM2SHORT(MIA_DISABLED, (BOOL)(fEnable) ? 0 : MIA_DISABLED)))

/***************************************************************************
* BOOL WinIsMenuItemEnabled(HWND hwndMenu, USHORT id)
*    returns the enable state of menuitem #id.
*
\**************************************************************************/
#define WinIsMenuItemEnabled(hwndMenu, id)  \
    (!(BOOL)WinSendMsg(hwndMenu, MM_QUERYITEMATTR, \
	    MPFROM2SHORT(id, TRUE), \
	    MPFROMSHORT(MIA_DISABLED)))

/***************************************************************************
* BOOL WinSetMenuItemText(HWND hwndMenu, USHORT id, PSZ psz)
*    sets the text of menuitem #id.
*    returns fSuccess.
\**************************************************************************/
#define WinSetMenuItemText(hwndMenu, id, psz) \
    ((BOOL)WinSendMsg(hwndMenu, MM_SETITEMTEXT, \
	    MPFROMSHORT(id), MPFROMP(psz)))

/***************************************************************************
* BOOL WinIsMenuItemValid(HWND hwndMenu, USHORT id)
*    Returns TRUE if the specified item is a valid choice.
\**************************************************************************/
#define WinIsMenuItemValid(hwndMenu, id) \
    ((BOOL)WinSendMsg(hwndMenu, MM_ISITEMVALID, \
	    MPFROM2SHORT(id, TRUE), MPFROMSHORT(FALSE)))

#endif /* INCL_WINMENUS */


#ifdef INCL_WINSCROLLBARS

/*** Scroll Bar controls Subsection */

/* Scroll Bar styles */

#define SBS_HORZ		   0L
#define SBS_VERT		   1L
#define SBS_THUMBSIZE		   2L
#define SBS_AUTOTRACK		   4L

#ifdef DCR_AUTOSIZE
#define SBS_AUTOSIZE	    0x2000L
#endif
/* Scroll bar class name */


#define WC_SCROLLBAR	     ((PSZ)0xffff0008L)

/* Scroll Bar messages */

#define SBM_SETSCROLLBAR	   0x01a0
#define SBM_SETPOS		   0x01a1
#define SBM_QUERYPOS		   0x01a2
#define SBM_QUERYRANGE		   0x01a3
#define SBM_SETTHUMBSIZE	   0x01a6

/* Scroll Bar Commands */

#define SB_LINEUP		   1
#define SB_LINEDOWN		   2
#define SB_LINELEFT		   1
#define SB_LINERIGHT		   2
#define SB_PAGEUP		   3
#define SB_PAGEDOWN		   4
#define SB_PAGELEFT		   3
#define SB_PAGERIGHT		   4
#define SB_SLIDERTRACK		   5
#define SB_SLIDERPOSITION	   6
#define SB_ENDSCROLL		   7


#ifndef INCL_SAADEFS
typedef struct _SBCDATA { /* sbcd */
    USHORT  cb;
    USHORT  sHilite;	  /* reserved, should be set to zero */
    SHORT   posFirst;
    SHORT   posLast;
    SHORT   posThumb;
    SHORT   cVisible;
    SHORT   cTotal;
} SBCDATA;
typedef SBCDATA FAR *PSBCDATA;
#endif /* !INCL_SAADEFS */

#endif /* INCL_WINSCROLLBARS */


#if (defined(INCL_WINFRAMEMGR) || !defined(INCL_NOCOMMON))
/*** Frame Manager Common subsection */

#ifdef INCL_32
typedef struct _FRAMECDATA { /* fcdata */
    USHORT  cb;
    ULONG   flCreateFlags;
    HMODULE hmodResources;
    USHORT  idResources;
} FRAMECDATA;
typedef FRAMECDATA FAR *PFRAMECDATA;
#else /* not INCL_32 */
typedef struct _FRAMECDATA { /* fcdata */
    USHORT cb;
    ULONG flCreateFlags;
    USHORT hmodResources;
    USHORT idResources;
} FRAMECDATA;
typedef FRAMECDATA FAR *PFRAMECDATA;
#endif /* INCL_32 */

/* Frame window styles */

#define FCF_TITLEBAR		   0x00000001L
#define FCF_SYSMENU		   0x00000002L
#define FCF_MENU		   0x00000004L
#define FCF_SIZEBORDER		   0x00000008L
#define FCF_MINBUTTON		   0x00000010L
#define FCF_MAXBUTTON		   0x00000020L
#define FCF_MINMAX		   0x00000030L /* minmax means BOTH buttons */
#define FCF_VERTSCROLL		   0x00000040L
#define FCF_HORZSCROLL		   0x00000080L
#define FCF_DLGBORDER		   0x00000100L
#define FCF_BORDER		   0x00000200L
#define FCF_SHELLPOSITION	   0x00000400L
#define FCF_TASKLIST		   0x00000800L
#define FCF_NOBYTEALIGN		   0x00001000L
#define FCF_NOMOVEWITHOWNER	   0x00002000L
#define FCF_ICON		   0x00004000L
#define FCF_ACCELTABLE		   0x00008000L
#define FCF_SYSMODAL		   0x00010000L
#define FCF_SCREENALIGN		   0x00020000L
#define FCF_MOUSEALIGN		   0x00040000L
/* New values to enable multiple palettes.  Note that if none of the four   */
/* styles specified below are used then we default to the 'system' palette  */
#define FCF_PALETTE_NORMAL	   0x00080000L /* normal palette	    */
#define FCF_PALETTE_HELP	   0x00100000L /* help palette		    */
#define FCF_PALETTE_POPUPODD	   0x00200000L /* odd level popup palette   */
#define FCF_PALETTE_POPUPEVEN	   0x00400000L /* even level popup palette  */
/* FCF_ 0x00800000L is reserved */
#ifdef INCL_NLS
#define FCF_DBE_APPSTAT		   0x80000000L
#endif /* INCL_NLS */

/* FCF_TITLEBAR | FCF_SYSMENU | FCF_MENU | FCF_SIZEBORDER | FCF_MINMAX |
   FCF_ICON | FCF_ACCELTABLE | FCF_SHELLPOSITION | FCF_TASKLIST | FCF_PALETTE_NORMAL */
#define FCF_STANDARD		0x0008CC3FL


#define FS_ICON			   0x00000001L
#define FS_ACCELTABLE		   0x00000002L

#ifndef INCL_SAADEFS
#define FS_SHELLPOSITION	   0x00000004L
#endif /* !INCL_SAADEFS */

#define FS_TASKLIST		   0x00000008L
#define FS_NOBYTEALIGN		   0x00000010L
#define FS_NOMOVEWITHOWNER	   0x00000020L
#define FS_SYSMODAL		   0x00000040L
#define FS_DLGBORDER		   0x00000080L
#define FS_BORDER		   0x00000100L
#define FS_SCREENALIGN		   0x00000200L
#define FS_MOUSEALIGN		   0x00000400L
#define FS_SIZEBORDER		   0x00000800L
#ifdef INCL_NLS
#define FS_DBE_APPSTAT		   0x00008000L
#endif /* INCL_NLS */

/* FS_ICON | FS_ACCELTABLE | FS_SHELLPOSITION | FS_TASKLIST */
#define FS_STANDARD		   0x0000000FL


/* Frame Window Flags accessed via WinSet/QueryWindowUShort(QWS_FLAGS) */

#ifndef INCL_SAADEFS
#define FF_FLASHWINDOW		   0x0001
#define FF_ACTIVE		   0x0002
#define FF_FLASHHILITE		   0x0004
#define FF_OWNERHIDDEN		   0x0008
#define FF_DLGDISMISSED		   0x0010
#define FF_OWNERDISABLED	   0x0020
#define FF_SELECTED		   0x0040
#define FF_NOACTIVATESWP	   0x0080
#endif /* !INCL_SAADEFS */


HWND  APIENTRY WinCreateStdWindow(HWND hwndParent, ULONG flStyle,
				  PULONG pflCreateFlags, PSZ pszClientClass,
				  PSZ pszTitle, ULONG styleClient, HMODULE hmod,
				  USHORT idResources, PHWND phwndClient);


#endif /* Frame Manager Common subsection */


#ifdef INCL_WINFRAMEMGR

BOOL  APIENTRY WinFlashWindow(HWND hwndFrame, BOOL fFlash);

/* Frame window related messages */

#define WM_FLASHWINDOW		   0x0040
#define WM_FORMATFRAME		   0x0041
#define WM_UPDATEFRAME		   0x0042
#define WM_FOCUSCHANGE		   0x0043

#define WM_SETBORDERSIZE	   0x0044
#define WM_TRACKFRAME		   0x0045
#define WM_MINMAXFRAME		   0x0046
#define WM_SETICON		   0x0047
#define WM_QUERYICON		   0x0048
#define WM_SETACCELTABLE	   0x0049
#define WM_QUERYACCELTABLE	   0x004a
#define WM_TRANSLATEACCEL	   0x004b
#define WM_QUERYTRACKINFO	   0x004c
#define WM_QUERYBORDERSIZE	   0x004d
#define WM_NEXTMENU		   0x004e
#define WM_ERASEBACKGROUND	   0x004f
#define WM_QUERYFRAMEINFO	   0x0050
#define WM_QUERYFOCUSCHAIN	   0x0051
#define WM_OWNERPOSCHANGE	   0x0052
#define WM_CALCFRAMERECT	   0x0053
/* Note 0x0054 is reserved */
#define WM_WINDOWPOSCHANGED	   0x0055
#define WM_ADJUSTFRAMEPOS	   0x0056
#define WM_QUERYFRAMECTLCOUNT	   0x0059
#ifndef INCL_SAADEFS
/* Note 0x005A is reserved */
#define WM_QUERYHELPINFO	   0x005B
#define WM_SETHELPINFO		   0x005C
#define WM_ERROR		   0x005D
#define WM_REALIZEPALETTE	   0x005E


/* WM_QUERYFRAMEINFO constants */

#define FI_FRAME		   0x00000001L
#define FI_OWNERHIDE		   0x00000002L
#define FI_ACTIVATEOK		   0x00000004L
#define FI_NOMOVEWITHOWNER	   0x00000008L


#endif /* !INCL_SAADEFS */

/* Frame class name */

#define WC_FRAME	     ((PSZ)0xffff0001L)

BOOL  APIENTRY WinCreateFrameControls(HWND hwndFrame, PFRAMECDATA pfcdata,
				      PSZ pszTitle);

BOOL  APIENTRY WinCalcFrameRect(HWND hwndFrame, PRECTL prcl, BOOL fClient);

BOOL  APIENTRY WinGetMinPosition(HWND hwnd, PSWP pswp, PPOINTL pptl);
#ifndef INCL_SAADEFS
BOOL  APIENTRY WinGetMaxPosition(HWND hwnd, PSWP pswp);
#endif /* !INCL_SAADEFS */

typedef LHANDLE HSAVEWP;      /* hsvwp */

BOOL APIENTRY WinSaveWindowPos(HSAVEWP hsvwp, PSWP pswp, USHORT cswp);

/* Frame control IDs	*/

#define FID_SYSMENU		   0x8002
#define FID_TITLEBAR		   0x8003
#define FID_MINMAX		   0x8004
#define FID_MENU		   0x8005
#define FID_VERTSCROLL		   0x8006
#define FID_HORZSCROLL		   0x8007
#define FID_CLIENT		   0x8008
/* Note 0x8009 is reserved */
#define FID_DBE_APPSTAT		   0x8010
#define FID_DBE_KBDSTAT		   0x8011
#define FID_DBE_PECIC		   0x8012
#define FID_DBE_KKPOPUP		   0x8013

/* Standard WM_SYSCOMMAND command values */

#define SC_SIZE			   0x8000
#define SC_MOVE			   0x8001
#define SC_MINIMIZE		   0x8002
#define SC_MAXIMIZE		   0x8003
#define SC_CLOSE		   0x8004
#define SC_NEXT			   0x8005
#define SC_APPMENU		   0x8006
#define SC_SYSMENU		   0x8007
#define SC_RESTORE		   0x8008
#define SC_NEXTFRAME		   0x8009
#define SC_NEXTWINDOW		   0x8010
#ifndef INCL_SAADEFS
#define SC_TASKMANAGER		   0x8011
#define SC_HELPKEYS		   0x8012
#define SC_HELPINDEX		   0x8013
#define SC_HELPEXTENDED		   0x8014
#define SC_SWITCHPANELIDS	   0x8015
#define SC_DBE_FIRST		   0x8018
#define SC_DBE_LAST		   0x801F

#endif /* !INCL_SAADEFS */

#endif /* INCL_WINFRAMEMGR */

/*** Frame controls */

#ifdef INCL_WINFRAMECTLS

/** Title bar controls */

/* Title bar control class name */

#define WC_TITLEBAR	     ((PSZ)0xffff0009L)

/* Title bar control messages */

#define TBM_SETHILITE		   0x01e3
#define TBM_QUERYHILITE		   0x01e4

/* XLATOFF */
#ifdef INCL_16

#define TBM_TRACKMOVE		   0x01e5

#endif /* INCL_16 */
/* XLATON */

#endif /* INCL_WINFRAMECTLS */

#ifdef INCL_WINRECTANGLES
/*** Rectangle routines */

BOOL APIENTRY WinCopyRect(HAB hab, PRECTL prclDst, PRECTL prclSrc);

#ifndef INCL_SAADEFS
BOOL APIENTRY WinSetRect(HAB hab, PRECTL prcl, SHORT xLeft, SHORT yBottom,
			 SHORT xRight, SHORT yTop);
BOOL APIENTRY WinIsRectEmpty(HAB hab, PRECTL prcl);
BOOL APIENTRY WinEqualRect(HAB hab, PRECTL prcl1, PRECTL prcl2);
BOOL APIENTRY WinSetRectEmpty(HAB hab, PRECTL prcl);
BOOL APIENTRY WinOffsetRect(HAB hab, PRECTL prcl, SHORT cx, SHORT cy);
BOOL APIENTRY WinInflateRect(HAB hab, PRECTL prcl, SHORT cx, SHORT cy);
BOOL APIENTRY WinPtInRect(HAB hab, PRECTL prcl, PPOINTL pptl);
BOOL APIENTRY WinIntersectRect(HAB hab, PRECTL prclDst, PRECTL prclSrc1,
			       PRECTL prclSrc2);
BOOL APIENTRY WinUnionRect(HAB hab, PRECTL prclDst, PRECTL prclSrc1,
			   PRECTL prclSrc2);
BOOL APIENTRY WinSubtractRect(HAB hab, PRECTL prclDst, PRECTL prclSrc1,
			      PRECTL prclSrc2);
BOOL APIENTRY WinMakeRect(HAB hab, PWRECT pwrc);
BOOL APIENTRY WinMakePoints(HAB hab, PWPOINT pwpt, USHORT cwpt);
#endif /* !INCL_SAADEFS */

#endif /* INCL_WINRECTANGLES */


#ifdef INCL_WINSYS

/*** System values */

LONG APIENTRY WinQuerySysValue(HWND hwndDesktop, SHORT iSysValue);
BOOL  APIENTRY WinSetSysValue(HWND hwndDesktop, SHORT iSysValue, LONG lValue);

#define SV_SWAPBUTTON		   0
#define SV_DBLCLKTIME		   1
#define SV_CXDBLCLK		   2
#define SV_CYDBLCLK		   3
#define SV_CXSIZEBORDER		   4
#define SV_CYSIZEBORDER		   5
#define SV_ALARM		   6

#ifndef INCL_SAADEFS
#define SV_RESERVEDFIRST1	   7
#define SV_RESERVEDLAST1	   8
#endif /* !INCL_SAADEFS */

#define SV_CURSORRATE		   9
#define SV_FIRSTSCROLLRATE	   10
#define SV_SCROLLRATE		   11
#define SV_NUMBEREDLISTS	   12
#define SV_WARNINGFREQ		   13
#define SV_NOTEFREQ		   14
#define SV_ERRORFREQ		   15
#define SV_WARNINGDURATION	   16
#define SV_NOTEDURATION		   17
#define SV_ERRORDURATION	   18

#ifndef INCL_SAADEFS
#define SV_RESERVEDFIRST	   19
#define SV_RESERVEDLAST		   19
#endif /* !INCL_SAADEFS */

#define SV_CXSCREEN		   20
#define SV_CYSCREEN		   21
#define SV_CXVSCROLL		   22
#define SV_CYHSCROLL		   23
#define SV_CYVSCROLLARROW	   24
#define SV_CXHSCROLLARROW	   25
#define SV_CXBORDER		   26
#define SV_CYBORDER		   27
#define SV_CXDLGFRAME		   28
#define SV_CYDLGFRAME		   29
#define SV_CYTITLEBAR		   30
#define SV_CYVSLIDER		   31
#define SV_CXHSLIDER		   32
#define SV_CXMINMAXBUTTON	   33
#define SV_CYMINMAXBUTTON	   34
#define SV_CYMENU		   35
#define SV_CXFULLSCREEN		   36
#define SV_CYFULLSCREEN		   37
#define SV_CXICON		   38
#define SV_CYICON		   39
#define SV_CXPOINTER		   40
#define SV_CYPOINTER		   41

#define SV_DEBUG		   42
#define SV_CMOUSEBUTTONS	   43
#define SV_CPOINTERBUTTONS	   43				    /*@FAR*/
#define SV_POINTERLEVEL		   44
#define SV_CURSORLEVEL		   45
#define SV_TRACKRECTLEVEL	   46

#ifndef INCL_SAADEFS
#define SV_CTIMERS		   47
#endif /* !INCL_SAADEFS */

#define SV_MOUSEPRESENT		   48

#define SV_CXBYTEALIGN		   49
#define SV_CXALIGN		   49				    /*@FAR*/
#define SV_CYBYTEALIGN		   50
#define SV_CYALIGN		   50				    /*@FAR*/

/* The following value enables any greater value to be set by WinSetSysVlaue. */
/* Values of 51-55 are spare for extra non-settable system values	      */
/* This is to enable the setting of SV_EXTRAKEYBEEP by applications.	      */

#define SV_NOTRESERVED		   56
#define SV_EXTRAKEYBEEP		   57

/* The following system value controls whether PM controls the keyboard	     */
/* lights for light key keystrokes (else applications will)		     */
#define SV_SETLIGHTS		   58
#define SV_INSERTMODE		   59


#define SV_MENUROLLDOWNDELAY	   64
#define SV_MENUROLLUPDELAY	   65
#define SV_ALTMNEMONIC		   66
#define SV_TASKLISTMOUSEACCESS	   67

#define SV_CCHICONTEXTWIDTH	68
#define SV_CICONTEXTLINES	69

/* The following is the total number of system values */
#define SV_CSYSVALUES		   70

/*
 * Presentation parameter structures.
 */
typedef struct _PARAM { /* param */
    ULONG   id;
    ULONG   cb;
    BYTE    ab[1];
} PARAM;
typedef PARAM NEAR *NPPARAM;
typedef PARAM FAR  *PPARAM;

typedef struct _PRESPARAMS { /* pres */
    ULONG   cb;
    PARAM   aparam[1];
} PRESPARAMS;
typedef PRESPARAMS NEAR *NPPRESPARAMS;
typedef PRESPARAMS FAR	*PPRESPARAMS;


/*
 * Presentation parameter APIs
 */
BOOL  APIENTRY WinSetPresParam(HWND hwnd, ULONG id, ULONG cbParam, PVOID pbParam);
ULONG APIENTRY WinQueryPresParam(HWND hwnd, ULONG id1, ULONG id2, PULONG pulId,
				 ULONG cbBuf, PVOID pbBuf, USHORT fs);
BOOL  APIENTRY WinRemovePresParam(HWND hwnd, ULONG id);

/*
 * Presentation parameter types.
 */

#define PP_FOREGROUNDCOLOR			1L
#define PP_FOREGROUNDCOLORINDEX			2L
#define PP_BACKGROUNDCOLOR			3L
#define PP_BACKGROUNDCOLORINDEX			4L
#define PP_HILITEFOREGROUNDCOLOR		5L
#define PP_HILITEFOREGROUNDCOLORINDEX		6L
#define PP_HILITEBACKGROUNDCOLOR		7L
#define PP_HILITEBACKGROUNDCOLORINDEX		8L
#define PP_DISABLEDFOREGROUNDCOLOR		9L
#define PP_DISABLEDFOREGROUNDCOLORINDEX		10L
#define PP_DISABLEDBACKGROUNDCOLOR		11L
#define PP_DISABLEDBACKGROUNDCOLORINDEX		12L
#define PP_BORDERCOLOR				13L
#define PP_BORDERCOLORINDEX			14L
#define PP_FONTNAMESIZE				15L
#define PP_FONTHANDLE				16L
#define PP_RESERVED				17L
#define PP_ACTIVECOLOR				18L
#define PP_ACTIVECOLORINDEX			19L
#define PP_INACTIVECOLOR			20L
#define PP_INACTIVECOLORINDEX			21L
#define PP_ACTIVETEXTFGNDCOLOR			22L
#define PP_ACTIVETEXTFGNDCOLORINDEX		23L
#define PP_ACTIVETEXTBGNDCOLOR			24L
#define PP_ACTIVETEXTBGNDCOLORINDEX		25L
#define PP_INACTIVETEXTFGNDCOLOR		26L
#define PP_INACTIVETEXTFGNDCOLORINDEX		27L
#define PP_INACTIVETEXTBGNDCOLOR		28L
#define PP_INACTIVETEXTBGNDCOLORINDEX		29L
#define PP_SHADOW				30L

#define PP_USER					0x8000L

/*
 * Flags for WinQueryPresParams()
 */
#define QPF_NOINHERIT		 0x0001 /* Don't inherit                      */
#define QPF_ID1COLORINDEX	 0x0002 /* Convert id1 color index into RGB   */
#define QPF_ID2COLORINDEX	 0x0004 /* Convert id2 color index into RGB   */
#define QPF_PURERGBCOLOR	 0x0008 /* Return pure RGB colors	      */
#define QPF_VALIDFLAGS		 0x000F /* Valid WinQueryPresParams() flags.  */

/*** System color functions */

LONG APIENTRY WinQuerySysColor(HWND hwndDesktop, LONG clr, LONG lReserved);
BOOL APIENTRY WinSetSysColors(HWND hwndDesktop, ULONG flOptions,
			      ULONG flFormat, LONG clrFirst, ULONG cclr,
			      PLONG pclr);
#define SYSCLR_BUTTONLIGHT		(-41L)
#define SYSCLR_BUTTONMIDDLE		(-40L)
#define SYSCLR_BUTTONDARK		(-39L)
#define SYSCLR_BUTTONDEFAULT		(-38L)
#define SYSCLR_TITLEBOTTOM		(-37L)
#define SYSCLR_SHADOW			(-36L)
#define SYSCLR_ICONTEXT			(-35L)
#define SYSCLR_DIALOGBACKGROUND		(-34L)
#define SYSCLR_HILITEFOREGROUND		(-33L)
#define SYSCLR_HILITEBACKGROUND		(-32L)
#define SYSCLR_INACTIVETITLETEXTBGND	(-31L)
#define SYSCLR_ACTIVETITLETEXTBGND	(-30L)
#define SYSCLR_INACTIVETITLETEXT	(-29L)
#define SYSCLR_ACTIVETITLETEXT		(-28L)
#define SYSCLR_OUTPUTTEXT		(-27L)
#define SYSCLR_WINDOWSTATICTEXT		(-26L)
#define SYSCLR_SCROLLBAR		(-25L)
#define SYSCLR_BACKGROUND		(-24L)
#define SYSCLR_ACTIVETITLE		(-23L)
#define SYSCLR_INACTIVETITLE		(-22L)
#define SYSCLR_MENU			(-21L)
#define SYSCLR_WINDOW			(-20L)
#define SYSCLR_WINDOWFRAME		(-19L)
#define SYSCLR_MENUTEXT			(-18L)
#define SYSCLR_WINDOWTEXT		(-17L)
#define SYSCLR_TITLETEXT		(-16L)
#define SYSCLR_ACTIVEBORDER		(-15L)
#define SYSCLR_INACTIVEBORDER		(-14L)
#define SYSCLR_APPWORKSPACE		(-13L)
#define SYSCLR_HELPBACKGROUND		(-12L)
#define SYSCLR_HELPTEXT			(-11L)
#define SYSCLR_HELPHILITE		(-10L)

#define SYSCLR_CSYSCOLORS		32L

#endif /* INCL_WINSYS */


#ifdef INCL_WINTIMER
/**** Timer manager */

#ifndef INCL_SAADEFS

#ifdef INCL_32

USHORT APIENTRY WinStartTimer(HAB hab, HWND hwnd, USHORT idTimer,
			      ULONG dtTimeout);

#else /* not INCL_32 */

USHORT APIENTRY WinStartTimer(HAB hab, HWND hwnd, USHORT idTimer,
			      USHORT dtTimeout);

#endif /* INCL_32 */

BOOL   APIENTRY WinStopTimer(HAB hab, HWND hwnd, USHORT idTimer);
ULONG  APIENTRY WinGetCurrentTime(HAB hab);

#define TID_CURSOR	    0xffff  /* Reserved cursor timer ID		     */
#define TID_SCROLL	    0xfffe  /* Reserved scrolling timer ID	     */
#define TID_FLASHWINDOW	    0xfffd  /* Reserved for window flashing timer ID */
#define TID_USERMAX	    0x7fff  /* Maximum user timer ID		     */
#endif /* !INCL_SAADEFS */

#endif /* INCL_WINTIMER */


#ifdef INCL_WINACCELERATORS
/**** Accelerator functions */

/* ACCEL fs bits
 *
 * NOTE: the first six AF_ code bits have the same value
 * as their KC_ counterparts
 */
#ifndef INCL_SAADEFS
#define AF_CHAR			   0x0001
#define AF_VIRTUALKEY		   0x0002
#define AF_SCANCODE		   0x0004
#define AF_SHIFT		   0x0008
#define AF_CONTROL		   0x0010
#define AF_ALT			   0x0020
#define AF_LONEKEY		   0x0040
#define AF_SYSCOMMAND		   0x0100
#define AF_HELP			   0x0200
#endif /* !INCL_SAADEFS */					/* @FAR */

typedef LHANDLE HACCEL; /* haccel */

typedef struct _ACCEL { /* acc */
    USHORT  fs;
    USHORT  key;
    USHORT  cmd;
} ACCEL;
typedef ACCEL FAR *PACCEL;

typedef struct _ACCELTABLE { /* acct  */
    USHORT  cAccel;
    USHORT  codepage;
    ACCEL   aaccel[1];
} ACCELTABLE;
typedef ACCELTABLE FAR *PACCELTABLE;

HACCEL APIENTRY WinLoadAccelTable(HAB hab, HMODULE hmod, USHORT idAccelTable);
HACCEL APIENTRY WinCreateAccelTable(HAB hab, PACCELTABLE pAccelTable);
BOOL   APIENTRY WinDestroyAccelTable(HACCEL haccel);
USHORT APIENTRY WinCopyAccelTable(HACCEL haccel, PACCELTABLE pAccelTable,
				  USHORT cbCopyMax);
BOOL   APIENTRY WinTranslateAccel(HAB hab, HWND hwnd, HACCEL haccel,
				  PQMSG pqmsg);
BOOL   APIENTRY WinSetAccelTable(HAB hab, HACCEL haccel, HWND hwndFrame);
HACCEL APIENTRY WinQueryAccelTable(HAB hab, HWND hwndFrame);

#endif /* INCL_WINACCELERATORS */

/**** Extended Attribute Flags (Association Table) */

#define EAF_DEFAULTOWNER	   0x0001
#define EAF_UNCHANGEABLE	   0x0002
#define EAF_REUSEICON		   0x0004

/*** WinTrackRect() information */

#ifdef INCL_WINTRACKRECT

/* WinTrackRect() tracking information structure */

typedef struct _TRACKINFO { /* ti */
    SHORT   cxBorder;
    SHORT   cyBorder;
    SHORT   cxGrid;
    SHORT   cyGrid;
    SHORT   cxKeyboard;
    SHORT   cyKeyboard;
    RECTL   rclTrack;
    RECTL   rclBoundary;
    POINTL  ptlMinTrackSize;
    POINTL  ptlMaxTrackSize;
    USHORT  fs;
} TRACKINFO;
typedef TRACKINFO FAR *PTRACKINFO;

#ifndef INCL_SAADEFS
BOOL APIENTRY WinTrackRect(HWND hwnd, HPS hps, PTRACKINFO pti);
BOOL APIENTRY WinShowTrackRect(HWND hwnd, BOOL fShow);

/* WinTrackRect() flags */

#define TF_LEFT			   0x0001
#define TF_TOP			   0x0002
#define TF_RIGHT		   0x0004
#define TF_BOTTOM		   0x0008
/* TF_MOVE = TF_LEFT | TF_TOP | TF_RIGHT | TF_BOTTOM */
#define TF_MOVE			   0x000F

#define TF_SETPOINTERPOS	   0x0010
#define TF_GRID			   0x0020
#define TF_STANDARD		   0x0040
#define TF_ALLINBOUNDARY	   0x0080
#define TF_VALIDATETRACKRECT	   0x0100
#define TF_PARTINBOUNDARY	   0x0200

#endif /* !INCL_SAADEFS */

#endif /* INCL_WINTRACKRECT */


/**** Clipboard Manager */

#if (defined(INCL_WINCLIPBOARD) || defined(INCL_WINDDE))
#ifndef INCL_SAADEFS

/* Clipboard messages */

#define WM_RENDERFMT		   0x0060
#define WM_RENDERALLFMTS	   0x0061
#define WM_DESTROYCLIPBOARD	   0x0062
#define WM_PAINTCLIPBOARD	   0x0063
#define WM_SIZECLIPBOARD	   0x0064
#define WM_HSCROLLCLIPBOARD	   0x0065
#define WM_VSCROLLCLIPBOARD	   0x0066
#define WM_DRAWCLIPBOARD	   0x0067

/*
 * Standard Clipboard formats
 */
#define CF_TEXT			   1
#define CF_BITMAP		   2
#define CF_DSPTEXT		   3
#define CF_DSPBITMAP		   4
#define CF_METAFILE		   5
#define CF_DSPMETAFILE		   6
/*
 * standard DDE and clipboard format stings
 */
#define SZFMT_TEXT		     "#1"
#define SZFMT_BITMAP		     "#2"
#define SZFMT_DSPTEXT		     "#3"
#define SZFMT_DSPBITMAP		     "#4"
#define SZFMT_METAFILE		     "#5"
#define SZFMT_DSPMETAFILE	     "#6"
#define SZFMT_SYLK		     "Sylk"
#define SZFMT_DIF		     "Dif"
#define SZFMT_TIFF		     "Tiff"
#define SZFMT_OEMTEXT		     "OemText"
#define SZFMT_DIB		     "Dib"
#define SZFMT_OWNERDISPLAY	     "OwnerDisplay"
#define SZFMT_LINK		     "Link"
#define SZFMT_METAFILEPICT	     "MetaFilePict"
#define SZFMT_DSPMETAFILEPICT	     "DspMetaFilePict"
#define SZFMT_CPTEXT		     "Codepage Text"
#define SZFMT_PALETTE		     "Palette"
#define SZDDEFMT_RTF		     "Rich Text Format"
#define SZDDEFMT_PTRPICT	     "Printer_Picture"

typedef struct _MFP { /* mfp */
    POINTL sizeBounds;	/* metafile notional grid size	    */
    POINTL sizeMM;	    /* metafile size high metric units	*/
    ULONG  cbLength;	/* length of metafile data	    */
    USHORT mapMode;	    /* a PM metaflie map mode		*/
    USHORT reserved;
    BYTE   abData[1];	 /* metafile Data		     */
} MFP;
typedef MFP FAR *PMFP;

typedef struct _CPTEXT { /* cptxt */
    USHORT idCountry;
    USHORT usCodepage;
    USHORT usLangID;
    USHORT usSubLangID;
    BYTE   abText[1];	/* text string starts here	    */
} CPTEXT;
typedef CPTEXT FAR *PCPTEXT;

#endif /* not INCL_SAADEFS */
#endif /* INCL_WINCLIPBOARD | INCL_WINDDE */

#ifdef INCL_WINCLIPBOARD
#ifndef INCL_SAADEFS
BOOL   APIENTRY WinSetClipbrdOwner(HAB hab, HWND hwnd);
BOOL   APIENTRY WinSetClipbrdData(HAB hab, ULONG ulData, USHORT fmt, USHORT rgfFmtInfo);
ULONG  APIENTRY WinQueryClipbrdData(HAB hab, USHORT fmt);
BOOL   APIENTRY WinQueryClipbrdFmtInfo(HAB hab, USHORT fmt,
				       PUSHORT prgfFmtInfo);
BOOL   APIENTRY WinSetClipbrdViewer(HAB hab, HWND hwndNewClipViewer);

/* WinSetClipbrdData() flags */

#define CFI_OWNERFREE		   0x0001
#define CFI_OWNERDISPLAY	   0x0002
#ifdef INCL_32
#define CFI_POINTER		       0x0400
#else
#define CFI_SELECTOR		   0x0100
#endif
#define CFI_HANDLE			   0x0200

#endif /* !INCL_SAADEFS */

USHORT APIENTRY WinEnumClipbrdFmts(HAB hab, USHORT fmt);
BOOL   APIENTRY WinEmptyClipbrd(HAB hab);
BOOL   APIENTRY WinOpenClipbrd(HAB hab);
BOOL   APIENTRY WinCloseClipbrd(HAB hab);
HWND   APIENTRY WinQueryClipbrdOwner(HAB hab, BOOL fLock);
HWND   APIENTRY WinQueryClipbrdViewer(HAB hab, BOOL fLock);

#endif /* INCL_WINCLIPBOARD */


#if (defined(INCL_WINCURSORS) || !defined(INCL_NOCOMMON))
/**** Cursor manager common subsection */

BOOL APIENTRY WinDestroyCursor(HWND hwnd);
BOOL APIENTRY WinShowCursor(HWND hwnd, BOOL fShow);
BOOL APIENTRY WinCreateCursor(HWND hwnd, SHORT x, SHORT y, SHORT cx, SHORT cy,
			      USHORT fs, PRECTL prclClip);

/* WinCreateCursor() flags */

#define CURSOR_SOLID		   0x0000
#define CURSOR_HALFTONE		   0x0001
#define CURSOR_FRAME		   0x0002
#define CURSOR_FLASH		   0x0004
#define CURSOR_SETPOS		   0x8000


#endif /* Cursor manager common subsection */

#ifdef INCL_WINCURSORS

typedef struct _CURSORINFO { /* csri */
    HWND    hwnd;
    SHORT   x;
    SHORT   y;
    SHORT   cx;
    SHORT   cy;
    USHORT  fs;
    RECTL   rclClip;
} CURSORINFO;
typedef CURSORINFO FAR *PCURSORINFO;

BOOL APIENTRY WinQueryCursorInfo(HWND hwndDesktop, PCURSORINFO pCursorInfo);

#endif /* INCL_WINCURSORS */

typedef LHANDLE HPOINTER;   /* hptr */

#ifdef INCL_WINPOINTERS
/**** Pointer manager */

BOOL	 APIENTRY WinSetPointer(HWND hwndDesktop, HPOINTER hptrNew);
BOOL	 APIENTRY WinShowPointer(HWND hwndDesktop, BOOL fShow);
HPOINTER APIENTRY WinQuerySysPointer(HWND hwndDesktop, SHORT iptr, BOOL fLoad);


/* System pointers (NOTE: these are 1-based) */

#ifdef LATER

#define SPTR_ARROW		   1
#define SPTR_TEXT		   2
#define SPTR_WAIT		   3
#define SPTR_MOVE		   4
#define SPTR_SIZENWSE		   5
#define SPTR_SIZENESW		   6
#define SPTR_SIZEWE		   7
#define SPTR_SIZENS		   8
#define SPTR_APPICON		   9

#define SPTR_ICONINFORMATION	   10
#define SPTR_ICONQUESTION	   11
#define SPTR_ICONERROR		   12
#define SPTR_ICONWARNING	   13

#define SPTR_CPTR		   13	 /* Count of pointers loaded by PMWIN */

#define SPTR_ILLEGAL		   14
#define SPTR_FILE		   15
#define SPTR_FOLDER		   16
#define SPTR_MULTFILE		   17
#define SPTR_PROGRAM		   18

#else

#define SPTR_ARROW		   1
#define SPTR_TEXT		   2
#define SPTR_WAIT		   3
#define SPTR_SIZE		   4
#define SPTR_MOVE		   5
#define SPTR_SIZENWSE		   6
#define SPTR_SIZENESW		   7
#define SPTR_SIZEWE		   8
#define SPTR_SIZENS		   9
#define SPTR_APPICON		   10
#define SPTR_ICONINFORMATION	   11
#define SPTR_ICONQUESTION	   12
#define SPTR_ICONERROR		   13
#define SPTR_ICONWARNING	   14
#define SPTR_CPTR		   14	 /* count loaded by pmwin */

#define SPTR_ILLEGAL		   18
#define SPTR_FILE		   19
#define SPTR_FOLDER		   20
#define SPTR_MULTFILE		   21
#define SPTR_PROGRAM		   22

/* backward compatibility */
#define SPTR_HANDICON	      SPTR_ICONERROR
#define SPTR_QUESICON	      SPTR_ICONQUESTION
#define SPTR_BANGICON	      SPTR_ICONWARNING
#define SPTR_NOTEICON	      SPTR_ICONINFORMATION

#endif /* LATER */



HPOINTER APIENTRY WinLoadPointer(HWND hwndDesktop, HMODULE hmod, USHORT idres);
BOOL	 APIENTRY WinDestroyPointer(HPOINTER hptr);
HPOINTER APIENTRY WinCreatePointer(HWND hwndDesktop, HBITMAP hbmPointer,
				   BOOL fPointer, SHORT xHotspot,
				   SHORT yHotspot);

HPOINTER APIENTRY WinQueryPointer(HWND hwndDesktop);
BOOL	 APIENTRY WinSetPointerPos(HWND hwndDesktop, SHORT x, SHORT y);
BOOL	 APIENTRY WinQueryPointerPos(HWND hwndDesktop, PPOINTL pptl);

typedef struct _POINTERINFO { /* ptri */
    BOOL    fPointer;
    SHORT   xHotspot;
    SHORT   yHotspot;
    HBITMAP hbmPointer;
    HBITMAP hbmColor;
} POINTERINFO;
typedef POINTERINFO FAR *PPOINTERINFO;

HPOINTER APIENTRY WinCreatePointerIndirect(HWND hwndDesktop, PPOINTERINFO pptri);
BOOL	 APIENTRY WinQueryPointerInfo(HPOINTER hptr,
				      PPOINTERINFO pPointerInfo);
BOOL	 APIENTRY WinDrawPointer(HPS hps, SHORT x, SHORT y, HPOINTER hptr,
				 USHORT fs);



/* WinDrawPointer() constants */

#define DP_NORMAL		   0x0000
#define DP_HALFTONED		   0x0001
#define DP_INVERTED		   0x0002


HBITMAP APIENTRY WinGetSysBitmap(HWND hwndDesktop, USHORT ibm);

/* System bitmaps (NOTE: these are 1-based) */

#define SBMP_OLD_SYSMENU	   1
#define SBMP_OLD_SBUPARROW	   2
#define SBMP_OLD_SBDNARROW	   3
#define SBMP_OLD_SBRGARROW	   4
#define SBMP_OLD_SBLFARROW	   5
#define SBMP_MENUCHECK		   6
#define SBMP_CHECKBOXES		   7
#define SBMP_BTNCORNERS		   8
#define SBMP_OLD_MINBUTTON	   9
#define SBMP_OLD_MAXBUTTON	   10
#define SBMP_OLD_RESTOREBUTTON	   11
#define SBMP_OLD_CHILDSYSMENU	   12
#define SBMP_DRIVE		   15
#define SBMP_FILE		   16
#define SBMP_FOLDER		   17
#define SBMP_TREEPLUS		   18
#define SBMP_TREEMINUS		   19
#define SBMP_PROGRAM		   22
#define SBMP_MENUATTACHED	   23
#define SBMP_SIZEBOX		   24

#define SBMP_SYSMENU		   25
#define SBMP_MINBUTTON		   26
#define SBMP_MAXBUTTON		   27
#define SBMP_RESTOREBUTTON	   28
#define SBMP_CHILDSYSMENU	   29
#define SBMP_SYSMENUDEP		   30
#define SBMP_MINBUTTONDEP	   31
#define SBMP_MAXBUTTONDEP	   32
#define SBMP_RESTOREBUTTONDEP	   33
#define SBMP_CHILDSYSMENUDEP	   34
#define SBMP_SBUPARROW		   35
#define SBMP_SBDNARROW		   36
#define SBMP_SBLFARROW		   37
#define SBMP_SBRGARROW		   38
#define SBMP_SBUPARROWDEP	   39
#define SBMP_SBDNARROWDEP	   40
#define SBMP_SBLFARROWDEP	   41
#define SBMP_SBRGARROWDEP	   42
#define SBMP_SBUPARROWDIS	   43
#define SBMP_SBDNARROWDIS	   44
#define SBMP_SBLFARROWDIS	   45
#define SBMP_SBRGARROWDIS	   46
#define SBMP_COMBODOWN		   47

#endif /* INCL_WINPOINTERS */


/**** Hook manager */

#ifdef INCL_WINHOOKS

#ifndef INCL_SAADEFS
BOOL APIENTRY WinSetHook(HAB hab, HMQ hmq, SHORT iHook, PFN pfnHook,
			 HMODULE hmod);
BOOL APIENTRY WinReleaseHook(HAB hab, HMQ hmq, SHORT iHook, PFN pfnHook,
			     HMODULE hmod);
BOOL APIENTRY WinCallMsgFilter(HAB hab, PQMSG pqmsg, USHORT msgf);


/* Hook codes */

#define HK_SENDMSG		   0
    /* VOID EXPENTRY SendMsgHook(HAB hab,		** installer's hab      **
				 PSMHSTRUCT psmh,	** p send msg struct	**
				 BOOL fInterTask);	** between threads	*/
#define HK_INPUT		   1
    /* BOOL EXPENTRY InputHook(HAB hab,			** installer's hab      **
			       PQMSG pQmsg,		** p qmsg		**
			       USHORT fs);		** remove/noremove	*/
#define HK_MSGFILTER		   2
    /* BOOL EXPENTRY MsgFilterHook(HAB hab,		** installer's hab      **
				   PQMSG pQmsg,		** p qmsg		**
				   USHORT msgf);	** filter flag		*/
#define HK_JOURNALRECORD	   3
    /* VOID EXPENTRY JournalRecordHook(HAB hab,		** installer's hab      **
				       PQMSG pQmsg);	** p qmsg		*/
#define HK_JOURNALPLAYBACK	   4
    /* ULONG EXPENTRY JournalPlaybackHook(HAB hab,	**installer's hab       **
					  BOOL fSkip,	** skip messages	**
					  PQMSG pQmsg); ** p qmsg		*/
#define HK_HELP			   5
    /* BOOL EXPENTRY HelpHook(HAB hab,			** installer's hab      **
			      USHORT usMode,		** mode			**
			      USHORT idTopic,		** main topic		**
			      USHORT idSubTopic,	** sub topic		**
			      PRECTL prcPosition);	** associated position	*/

#define HK_LOADER		   6
    /* BOOL EXPENTRY LoaderHook(HAB hab,		** installer's hab      **
				SHORT idContext,	** who called hook	**
				PSZ pszLibname,		** lib name string	**
				PHLIB hlib,		** p to lib handle	**
				PSZ pszProcname,	** procedure name	**
				PFNWP wndProc);		** window procedure	*/
#define HK_REGISTERUSERMSG	   7
    /* BOOL EXPENTRY RegisterUserHook(HAB hab,		** installer's hab      **
				    ULONG cUshort,	** entries in arRMP	**
				    PUSHORT arRMP,	** RMP array		**
				    PBOOL fRegistered); ** msg parms already reg*/
#define HK_MSGCONTROL		   8
    /* BOOL EXPENTRY MsgControlHook(HAB hab,		** installer's hab      **
				    SHORT idContext,	** who called hook	**
				    HWND hwnd,		** SEI window handle	**
				    PSZ pszClassname,	** window class name	**
				    USHORT usMsgclass,	** interested msg class **
				    SHORT idControl,	** SMI_*		**
				    PBOOL fSuccess);	** mode already set	*/
#define HK_PLIST_ENTRY		   9
    /* BOOL EXPENTRY ProgramListEntryHook(HAB hab,	** installer's hab      **
		       PPRFHOOKPARMS pProfileHookParams,** data			**
		       PBOOL fNoExecute);		** cease hook processing*/
#define HK_PLIST_EXIT		   10
    /* BOOL EXPENTRY ProgramListExitHook(HAB hab,	** installer's hab      **
		PPRFHOOKPARMS pProfileHookParams);	** data			*/
#define HK_FINDWORD		   11
    /* BOOL EXPENTRY FindWordHook(usCodepage,		** code page to use	**
				  PSZ pszText,		** text to break	**
				  ULONG cb,		** maximum text size	**
				  ULONG ich,		** break 'near' here	**
				  PULONG pichStart,	** where break began	**
				  PULONG pichEnd,	** where break ended	**
				  PULONG pichNext);	** where next word begin*/
#define HK_CODEPAGECHANGED	   12
    /* VOID EXPENTRY CodePageChangedHook(HMQ hmq,	** msg q handle		**
				  USHORT usOldCodepage, ** old code page	**
				  USHORT usNewCodepage);** new code page	*/

#define HMQ_CURRENT	     ((HMQ)1)

/* WH_MSGFILTER context codes */

#define MSGF_DIALOGBOX		   1
#define MSGF_MESSAGEBOX		   2
#define MSGF_TRACK		   8

/* HK_HELP Help modes */

#define HLPM_FRAME		(-1)
#define HLPM_WINDOW		(-2)
#define HLPM_MENU		(-3)

/* HK_SENDMSG structure */

#define PM_MODEL_1X	 0
#define PM_MODEL_2X	 1

#ifdef INCL_32

typedef struct _SMHSTRUCT {   /* smhs */
    MPARAM mp2;
    MPARAM mp1;
    USHORT msg;
    HWND   hwnd;
    USHORT model;
} SMHSTRUCT;
typedef SMHSTRUCT *PSMHSTRUCT;

#else /* not INCL_32 */

typedef struct _SMHSTRUCT {   /* smhs */
    MPARAM mp2;
    MPARAM mp1;
    USHORT msg;
    HWND   hwnd;
} SMHSTRUCT;
typedef SMHSTRUCT FAR *PSMHSTRUCT;

#endif /* INCL_32 */

/*HK_LOADER context codes */						/*@DIA*/

#define LHK_DELETEPROC		   1
#define LHK_DELETELIB		   2
#define LHK_LOADPROC		   3
#define LHK_LOADLIB		   4

/*HK_MSGCONTROL context codes */

#define MCHK_MSGINTEREST	   1
#define MCHK_CLASSMSGINTEREST	   2
#define MCHK_SYNCHRONISATION	   3
#define MCHK_MSGMODE		   4

/*HK_REGISTERUSERMSG conext codes */

#define RUMHK_DATATYPE		   1
#define RUMHK_MSG		   2

#endif /* INCL_SAADEFS */

#endif /* INCL_WINHOOKS */


#ifdef INCL_WINTHUNKAPI

BOOL	APIENTRY WinSetClassThunkProc(PSZ pszClassname, PFN pfnThunkProc);
PFN	APIENTRY WinQueryClassThunkProc(PSZ pszClassname);
BOOL	APIENTRY WinSetWindowThunkProc(HWND hwnd, PFN pfnThunkProc);
PFN	APIENTRY WinQueryWindowThunkProc(HWND hwnd);
SHORT	APIENTRY WinQueryWindowModel(HWND hwnd);

#endif /* INCL_WINTHUNKAPI */

/*
 * Include Shell API
 */
#ifndef INCL_SAADEFS
#include <pmshl.h>	/* OS/2 Shell definitions */
#endif /* !INCL_SAADEFS */

#ifdef INCL_WINCOUNTRY

USHORT	APIENTRY WinQueryCp(HMQ hmq);

#ifndef INCL_SAADEFS
BOOL	APIENTRY WinSetCp(HMQ hmq, USHORT idCodePage);
USHORT	APIENTRY WinQueryCpList(HAB hab, USHORT ccpMax, PUSHORT prgcp);

#ifdef INCL_32

BOOL	APIENTRY WinCpTranslateString(HAB hab, USHORT cpSrc, PSZ pszSrc,
				      USHORT cpDst, ULONG cchDestMax, PSZ pchDest);

#else /* not INCL_32 */

BOOL	APIENTRY WinCpTranslateString(HAB hab, USHORT cpSrc, PSZ pszSrc,
				      USHORT cpDst, USHORT cchDestMax, PSZ pchDest);

#endif /* INCL_32 */

UCHAR	APIENTRY WinCpTranslateChar(HAB hab, USHORT cpSrc, UCHAR chSrc,
				    USHORT cpDst);

USHORT	APIENTRY WinUpper(HAB hab, USHORT idcp, USHORT idcc, PSZ psz);
USHORT	APIENTRY WinUpperChar(HAB hab, USHORT idcp, USHORT idcc, USHORT c);
PSZ	APIENTRY WinNextChar(HAB hab, USHORT idcp, USHORT idcc, PSZ psz);
PSZ	APIENTRY WinPrevChar(HAB hab, USHORT idcp, USHORT idcc, PSZ pszStart,
			     PSZ psz);
USHORT	APIENTRY WinCompareStrings(HAB hab, USHORT idcp, USHORT idcc, PSZ psz1,
				   PSZ psz2, USHORT reserved);
#define WCS_ERROR		   0
#define WCS_EQ			   1
#define WCS_LT			   2
#define WCS_GT			   3

#endif /* !INCL_SAADEFS */

#endif /* INCL_WINCOUNTRY */



/* Heap Manager Interface declarations */

#ifdef INCL_WINHEAP

#ifndef INCL_32

#ifndef INCL_SAADEFS
typedef LHANDLE HHEAP;

HHEAP	    APIENTRY WinCreateHeap(SEL selHeapBase, USHORT cbHeap,
				   USHORT cbGrow, USHORT chMinDed,
				   USHORT cbMaxDed, USHORT fOptions);
HHEAP	    APIENTRY WinDestroyHeap(HHEAP hHeap);
USHORT	    APIENTRY WinAvailMem(HHEAP hHeap, BOOL fCompact, USHORT cbMinFree);
NPBYTE	    APIENTRY WinAllocMem(HHEAP hHeap, USHORT cb);
NPBYTE	    APIENTRY WinReallocMem(HHEAP hHeap, NPBYTE npMem,
				   USHORT cbOld, USHORT cbNew);
NPBYTE	    APIENTRY WinFreeMem(HHEAP hHeap, NPBYTE npMem, USHORT cbMem);
PVOID	    APIENTRY WinLockHeap(HHEAP hHeap);

#define HM_MOVEABLE		   0x0001      /* Parameters to WinCreateHeap */
#define HM_VALIDSIZE		   0x0002
#endif /* !INCL_SAADEFS */

#endif	/* !INCL_32 */

#endif	/* INCL_WINHEAP */


/*** Atom Manager Interface declarations */

#ifdef INCL_WINATOM

#ifndef INCL_SAADEFS
typedef LHANDLE	 HATOMTBL;
typedef USHORT	 ATOM;

HATOMTBL APIENTRY WinQuerySystemAtomTable(VOID);
HATOMTBL APIENTRY WinCreateAtomTable(USHORT cbInitial, USHORT cBuckets);
HATOMTBL APIENTRY WinDestroyAtomTable(HATOMTBL hAtomTbl);
ATOM	 APIENTRY WinAddAtom(HATOMTBL hAtomTbl, PSZ pszAtomName);
ATOM	 APIENTRY WinFindAtom(HATOMTBL hAtomTbl, PSZ pszAtomName);
ATOM	 APIENTRY WinDeleteAtom(HATOMTBL hAtomTbl, ATOM atom);
USHORT	 APIENTRY WinQueryAtomUsage(HATOMTBL hAtomTbl, ATOM atom);
USHORT	 APIENTRY WinQueryAtomLength(HATOMTBL hAtomTbl, ATOM atom);
USHORT	 APIENTRY WinQueryAtomName(HATOMTBL hAtomTbl, ATOM atom, PSZ pchBuffer,
				   USHORT cchBufferMax);

#define MAKEINTATOM(a)	((PCH)MAKEULONG(a, 0xffff))
#endif /* !INCL_SAADEFS */

#endif /* INCL_WINATOM */


/*** Catch/Throw Interface declarations */

#ifdef INCL_WINCATCHTHROW

#ifndef INCL_SAADEFS
#ifdef INCL_32
typedef struct _CATCHBUF {  /* ctchbf */
    ULONG   reserved[ 7 ];
} CATCHBUF;
#else
typedef struct _CATCHBUF {  /* ctchbf */
    ULONG   reserved[ 4 ];
} CATCHBUF;
#endif
typedef CATCHBUF FAR *PCATCHBUF;

SHORT	APIENTRY    WinCatch(PCATCHBUF pcatchbuf);
VOID	APIENTRY    WinThrow(PCATCHBUF pcatchbuf, SHORT nThrowBack);
#endif /* !INCL_SAADEFS */

#endif /* INCL_WINCATCHTHROW */



#ifdef INCL_WINERRORS

#include <pmerr.h>

/* Error codes for debugging support					   */
/* 0x1001 - 0x1021, 0x1034, 0x1036 - 0x1050 are reserved		   */

#define WINDBG_HWND_NOT_DESTROYED	    0x1022
#define WINDBG_HPTR_NOT_DESTROYED	    0x1023
#define WINDBG_HACCEL_NOT_DESTROYED	    0x1024
#define WINDBG_HENUM_NOT_DESTROYED	    0x1025
#define WINDBG_VISRGN_SEM_BUSY		    0x1026
#define WINDBG_USER_SEM_BUSY		    0x1027
#define WINDBG_DC_CACHE_BUSY		    0x1028
#define WINDBG_HOOK_STILL_INSTALLED	    0x1029
#define WINDBG_WINDOW_STILL_LOCKED	    0x102a
#define WINDBG_UPDATEPS_ASSERTION_FAIL	    0x102b
#define WINDBG_SENDMSG_WITHIN_USER_SEM	    0x102c
#define WINDBG_USER_SEM_NOT_ENTERED	    0x102d
#define WINDBG_PROC_NOT_EXPORTED	    0x102e
#define WINDBG_BAD_SENDMSG_HWND		    0x102f
#define WINDBG_ABNORMAL_EXIT		    0x1030
#define WINDBG_INTERNAL_REVISION	    0x1031
#define WINDBG_INITSYSTEM_FAILED	    0x1032
#define WINDBG_HATOMTBL_NOT_DESTROYED	    0x1033
#define WINDBG_WINDOW_UNLOCK_WAIT	    0x1035

/* Get/Set Error Information Interface declarations */

typedef struct _ERRINFO { /* erri */
    USHORT  cbFixedErrInfo;
    ERRORID idError;
    USHORT  cDetailLevel;
    USHORT  offaoffszMsg;
    USHORT  offBinaryData;
} ERRINFO;
typedef ERRINFO FAR *PERRINFO;

ERRORID	    APIENTRY	WinGetLastError(HAB hab);
PERRINFO    APIENTRY	WinGetErrorInfo(HAB hab);
BOOL	    APIENTRY	WinFreeErrorInfo(PERRINFO perrinfo);

#endif	/* INCL_WINERRORS */

#ifndef INCL_SAADEFS
/* include SetErrorInfo */
#ifdef INCL_WINSEI
  #ifndef SEI_PMWINP
    #define SEI_PMWIN
    #include <pmsei.h>
  #endif /* SEI_PMWINP */
#endif /* INCL_WINSEI  */
#endif /* INCL_SAADEFS */

#ifndef INCL_SAADEFS
#ifdef	INCL_WINDDE

/*
 * DDE standard system topic and item strings
 */
#define SZDDESYS_TOPIC			"System"
#define SZDDESYS_ITEM_TOPICS		"Topics"
#define SZDDESYS_ITEM_SYSITEMS		"SysItems"
#define SZDDESYS_ITEM_RTNMSG		"ReturnMessage"
#define SZDDESYS_ITEM_STATUS		"Status"
#define SZDDESYS_ITEM_FORMATS		"Formats"
#define SZDDESYS_ITEM_SECURITY		"Security"
#define SZDDESYS_ITEM_ITEMFORMATS	"ItemFormats"
#define SZDDESYS_ITEM_HELP		"Help"
#define SZDDESYS_ITEM_PROTOCOLS		"Protocols"
#define SZDDESYS_ITEM_RESTART		"Restart"

/*
 * Dynamic Data Exchange (DDE) Structure Declarations
 */
typedef struct _CONVCONTEXT { /* cctxt */
    USHORT cb;		/* sizeof(CONVCONTEXT) */
    USHORT fsContext;
    USHORT idCountry;
    USHORT usCodepage;
    USHORT usLangID;
    USHORT usSubLangID;
} CONVCONTEXT;
typedef CONVCONTEXT FAR *PCONVCONTEXT;

#define DDECTXT_CASESENSITIVE	 0x0001

typedef struct _DDEINIT { /* ddei */
    USHORT  cb;		/* sizeof(DDEINIT) */
    PSZ	    pszAppName;
    PSZ	    pszTopic;
    USHORT  offConvContext;
} DDEINIT;
typedef DDEINIT FAR *PDDEINIT;

typedef struct _DDESTRUCT { /* dde */
    ULONG   cbData;
    USHORT  fsStatus;
    USHORT  usFormat;
    USHORT  offszItemName;
    USHORT  offabData;
} DDESTRUCT;
typedef DDESTRUCT FAR *PDDESTRUCT;

/* DDE constants for wStatus field */
#define DDE_FACK		   0x0001
#define DDE_FBUSY		   0x0002
#define DDE_FNODATA		   0x0004
#define DDE_FACKREQ		   0x0008
#define DDE_FRESPONSE		   0x0010
#define DDE_NOTPROCESSED	   0x0020
#define DDE_FRESERVED		   0x00C0
#define DDE_FAPPSTATUS		   0xFF00

/* old DDE public formats - new ones are CF_ constants */

#define DDEFMT_TEXT		   0x0001

/* Dynamic Data Exchange (DDE) Routines */

BOOL	APIENTRY WinDdeInitiate(HWND hwndClient, PSZ pszAppName,
				PSZ pszTopicName);
BOOL APIENTRY WinDdeInitiate2(HWND hwndClient, PSZ pszAppName,
		PSZ pszTopicName, PCONVCONTEXT pCC);

MRESULT APIENTRY WinDdeRespond(HWND hwndClient, HWND hwndServer,
			    PSZ pszAppName, PSZ pszTopicName);
BOOL APIENTRY WinDdeRespond2(HWND hwndClient, HWND hwndServer, PSZ pszAppName,
		PSZ pszTopicName, PCONVCONTEXT pCC);

BOOL	APIENTRY WinDdePostMsg(HWND hwndTo, HWND hwndFrom, USHORT wm,
			    PDDESTRUCT pddest, BOOL fRetry);
BOOL	APIENTRY WinDdePostMsg2(HWND hwndTo, HWND hwndFrom, USHORT wm,
			PDDESTRUCT pddest, ULONG flOptions);

#define DDEPM_RETRY	  0x00000001L
#define DDEPM_NOFREE  0x00000002L

/* Dynamic Data Exchange (DDE) Messages */

#define WM_DDE_FIRST		   0x00A0
#define WM_DDE_INITIATE		   0x00A0
#define WM_DDE_REQUEST		   0x00A1
#define WM_DDE_ACK		   0x00A2
#define WM_DDE_DATA		   0x00A3
#define WM_DDE_ADVISE		   0x00A4
#define WM_DDE_UNADVISE		   0x00A5
#define WM_DDE_POKE		   0x00A6
#define WM_DDE_EXECUTE		   0x00A7
#define WM_DDE_TERMINATE	   0x00A8
#define WM_DDE_INITIATEACK	   0x00A9
#define WM_DDE_LAST		   0x00AF

/* DDE helper macros */

#define DDES_PSZITEMNAME(pddes) \
	(((PSZ)pddes) + ((PDDESTRUCT)pddes)->offszItemName)

#define DDES_PABDATA(pddes)	  \
	(((PBYTE)pddes) + ((PDDESTRUCT)pddes)->offabData)

#define DDEI_PCONVCONTEXT(pddei)	\
	((PCONVCONTEXT)((PBYTE)pddei + pddei->offConvContext))

#define SELTOPDDES(sel)		    ((PDDESTRUCT)MAKEP(sel, 0))
#define PDDESTOSEL(pddes)	    (SELECTOROF(pddes))
#define PDDEITOSEL(pddei)	    (SELECTOROF(pddei))

#endif /* INCL_WINDDE */
#endif /* !INCL_SAADEFS */

#ifdef INCL_WINWINDOWMGR
#define WM_QUERYCONVERTPOS	   0x00b0

/* Return values for WM_QUERYCONVERTPOS */
#define QCP_CONVERT		   0x0001
#define QCP_NOCONVERT		   0x0000

#endif	/* INCL_WINWINDOWMGR */


#ifdef INCL_WINHELP
  #include <pmhelp.h>
#endif /* INCL_WINHELP */

/*Load/Delete Library/Procedure */

typedef HMODULE HLIB;
typedef PHMODULE PHLIB;

#ifdef INCL_WINLOAD
BOOL	APIENTRY WinDeleteProcedure(HAB hab, PFNWP wndproc);
BOOL	APIENTRY WinDeleteLibrary(HAB hab, HLIB libhandle);
PFNWP	APIENTRY WinLoadProcedure(HAB hab, HLIB libhandle, PSZ procname);
HLIB	APIENTRY WinLoadLibrary(HAB hab, PSZ libname);
#endif /* INCL_WINLOAD */


#ifdef INCL_REMAPDLL
#define STR_DLLNAME "keyremap"
#endif /*INCL_REMAPDLL*/

#ifdef INCL_NLS

#define WM_DBCSFIRST		   0x00b0
#define WM_DBCSLAST		   0x00cf
#define WC_APPSTAT	     ((PSZ)0xffff0010L)
#define WC_KBDSTAT	     ((PSZ)0xffff0011L)
#define WC_PECIC	     ((PSZ)0xffff0012L)
#define WC_DBE_KKPOPUP	     ((PSZ)0xffff0013L)

#include <os2nls.h>
#endif /* INCL_NLS */

#ifdef INCL_WINDESKTOP

/*** Desktop API definitions ***/

typedef struct _DESKTOP {	/* dsk */
    ULONG    cbSize;
    HBITMAP  hbm;
    SHORT    x;
    SHORT    y;
    ULONG    fl;
    CHAR     szFile[260];   /* LATER: CCHMAXPATH */
} DESKTOP;
typedef DESKTOP FAR *PDESKTOP;	/* pdsk */

HBITMAP APIENTRY WinSetDesktopBkgnd(HWND hwndDesktop, PDESKTOP pdskNew);
BOOL	APIENTRY WinQueryDesktopBkgnd(HWND hwndDesktop, PDESKTOP pdsk);

#define SDT_DESTROY	    0x0001L
#define SDT_NOBKGND	    0x0002L
#define SDT_TILE	    0x0004L
#define SDT_SCALE	    0x0008L
#define SDT_PATTERN	    0x0010L
#define SDT_CENTER	    0x0020L
#define SDT_RETAIN	    0x0040L
#define SDT_LOADFILE	0x0080L

#endif	/* INCL_WINDESKTOP */

#ifdef INCL_WINPALETTE

/*** Palette Manager API definitions ***/

LONG APIENTRY WinRealizePalette(HWND hwnd, HPS hps);

#endif	/* INCL_WINPALETTE */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.