/****************************** Module Header ******************************\
*
* Module Name: PMWIN.H
*
* OS/2 Presentation Manager Window Manager include file.
*
* Copyright (c) International Business Machines Corporation 1981, 1988-1993
*
* ===========================================================================
*
* 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_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
*
* ===========================================================================
*
* Comments at the end of each typedef line give the name tags used in
* the assembler include version of this file.
*
* The assembler include version of this file excludes lines between NOINC
* and INC comments.
*
\***************************************************************************/

/* NOINC */
   #pragma info( none )
   #ifndef __CHKHDR__
      #pragma info( none )
   #endif
   #pragma info( restore )
#ifdef __cplusplus
      extern "C" {
#endif
/* INC */

#define WIN_INCLUDED




/*** include everything if requested ***************************************/
#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_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
   #define INCL_WINSTDDLGS
#else /* INCL_WIN */
   /*** include resource compiler required sections ************************/
   #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
      #define INCL_WINSTDDLGS
      #define INCL_WINSYS
   #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 */

/*** include PMWIN errors if all errors requested **************************/
#ifdef INCL_ERRORS
   #define INCL_WINERRORS
#endif  /* INCL_ERRORS */

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

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

/*** Macros to make an MPARAM from standard types. *************************/

#define MPVOID                     ((MPARAM)0L)
#define MPFROMP(p)                 ((MPARAM)((ULONG)(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 *)(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 *)(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 *)(mr))
#define SHORT1FROMMR(mr)           ((USHORT)((ULONG)mr))
#define SHORT2FROMMR(mr)           ((USHORT)((ULONG)mr >> 16))
#define LONGFROMMR(mr)             ((ULONG)(mr))


/****************************************************************************
* 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        *
*                                 ULONG msg,   * message number       *
*                                 MPARAM mp1,  * 1st (packed) parms   *
*                                 MPARAM mp2); * 2nd (packed) parms   *
*
****************************************************************************/

/*** Pointer to a window procedure function ********************************/
typedef MRESULT (EXPENTRY FNWP)(HWND, ULONG, MPARAM, MPARAM);
typedef FNWP *PFNWP;

/*** Predefined window handles *********************************************/
#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 Classes ***********************************************/

#define WC_FRAME             ((PSZ)0xffff0001L)
#define WC_COMBOBOX          ((PSZ)0xffff0002L)
#define WC_BUTTON            ((PSZ)0xffff0003L)
#define WC_MENU              ((PSZ)0xffff0004L)
#define WC_STATIC            ((PSZ)0xffff0005L)
#define WC_ENTRYFIELD        ((PSZ)0xffff0006L)
#define WC_LISTBOX           ((PSZ)0xffff0007L)
#define WC_SCROLLBAR         ((PSZ)0xffff0008L)
#define WC_TITLEBAR          ((PSZ)0xffff0009L)
#define WC_MLE               ((PSZ)0xffff000AL)
/* 000B to 000F reserved */
#define WC_APPSTAT           ((PSZ)0xffff0010L)
#define WC_KBDSTAT           ((PSZ)0xffff0011L)
#define WC_PECIC             ((PSZ)0xffff0012L)
#define WC_DBE_KKPOPUP       ((PSZ)0xffff0013L)
/* 0014 to 001F reserved */
#define WC_SPINBUTTON        ((PSZ)0xffff0020L)
/* 0021 to 0024 reserved */
#define WC_CONTAINER         ((PSZ)0xffff0025L)
#define WC_SLIDER            ((PSZ)0xffff0026L)
#define WC_VALUESET          ((PSZ)0xffff0027L)
#define WC_NOTEBOOK          ((PSZ)0xffff0028L)
/* 0029 to 002C used by PEN */
#define WC_PENFIRST          ((PSZ)0xffff0029L)
#define WC_PENLAST           ((PSZ)0xffff002CL)
/* 002D to 0030 reserved */
/* 0030 to 003F reserved */
#define WC_MMPMFIRST         ((PSZ)0xffff0040L)
#define WC_MMPMLAST          ((PSZ)0xffff004fL)

/*** 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
#define WS_ANIMATE                 0x00400000L

/*** 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,
                                     PCSZ pszClassName,
                                     PFNWP pfnWndProc,
                                     ULONG flStyle,
                                     ULONG cbWindowData);

   MRESULT APIENTRY WinDefWindowProc(HWND hwnd,
                                     ULONG 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,
                                  ULONG fl);

      BOOL  APIENTRY WinIsWindowShowing(HWND hwnd);

   #endif /* !INCL_SAADEFS */

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

   LONG APIENTRY WinScrollWindow(HWND hwnd,
                                 LONG dx,
                                 LONG dy,
                                 PRECTL prclScroll,
                                 PRECTL prclClip,
                                 HRGN hrgnUpdate,
                                 PRECTL prclUpdate,
                                 ULONG 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 *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(ULONG flOptions);

   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,
                                 PCSZ pszClass,
                                 PCSZ pszName,
                                 ULONG flStyle,
                                 LONG x,
                                 LONG y,
                                 LONG cx,
                                 LONG cy,
                                 HWND hwndOwner,
                                 HWND hwndInsertBehind,
                                 ULONG 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);

LONG    APIENTRY WinQueryWindowText(HWND hwnd,
                                    LONG cchBufferMax,
                                    PCH pchBuffer);

BOOL    APIENTRY WinSetWindowText(HWND hwnd,
                                  PCSZ pszText);

LONG    APIENTRY WinQueryWindowTextLength(HWND hwnd);

HWND    APIENTRY WinWindowFromID(HWND hwndParent,
                                 ULONG id);

BOOL    APIENTRY WinIsWindow(HAB hab,
                             HWND hwnd);

HWND    APIENTRY WinQueryWindow(HWND hwnd,
                                LONG cmd);

LONG    APIENTRY WinMultWindowFromIDs(HWND hwndParent,
                                      PHWND prghwnd,
                                      ULONG idFirst,
                                      ULONG 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 */

typedef struct _SWP    /* swp */
{
   ULONG   fl;
   LONG    cy;
   LONG    cx;
   LONG    y;
   LONG    x;
   HWND    hwndInsertBehind;
   HWND    hwnd;
   ULONG   ulReserved1;
   ULONG   ulReserved2;
} SWP;
typedef SWP *PSWP;

BOOL   APIENTRY WinSetWindowPos(HWND hwnd,
                                HWND hwndInsertBehind,
                                LONG x,
                                LONG y,
                                LONG cx,
                                LONG cy,
                                ULONG fl);
BOOL   APIENTRY WinSetMultWindowPos(HAB hab,
                                    PSWP pswp,
                                    ULONG cswp);
BOOL   APIENTRY WinQueryWindowPos(HWND hwnd,
                                  PSWP pswp);

/* 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
#define SWP_NOAUTOCLOSE            0x8000    /* Valid in PROGDETAILS struct only */

/* 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,
                             ULONG fl);

/* WinDrawBitmap() flags */

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



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


/*
* 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



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


/* 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 */

LONG    APIENTRY WinLoadString(HAB hab,
                               HMODULE hmod,
                               ULONG id,
                               LONG cchMax,
                               PCSZ pchBuffer);
#ifndef INCL_SAADEFS
   LONG    APIENTRY WinLoadMessage(HAB hab,
                                   HMODULE hmod,
                                   ULONG id,
                                   LONG cchMax,
                                   PCSZ 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;
      ULONG   id;
      HWND    hwndInsertBehind;
      HWND    hwndOwner;
      LONG    cy;
      LONG    cx;
      LONG    y;
      LONG    x;
      ULONG   flStyle;
      PSZ     pszText;
      PSZ     pszClass;
      HWND    hwndParent;
   } CREATESTRUCT;
   typedef CREATESTRUCT *PCREATESTRUCT;

   /* WinQueryClassInfo() structure */

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

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

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

   HWND   APIENTRY WinQueryActiveWindow(HWND hwndDesktop);

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


   BOOL   APIENTRY WinSetSysModalWindow(HWND hwndDesktop,
                                        HWND hwnd);


   #ifndef INCL_SAADEFS
      USHORT APIENTRY WinQueryWindowUShort(HWND hwnd,
                                           LONG index);
      BOOL   APIENTRY WinSetWindowUShort(HWND hwnd,
                                         LONG index,
                                         USHORT us);
      ULONG  APIENTRY WinQueryWindowULong(HWND hwnd,
                                          LONG index);
      BOOL   APIENTRY WinSetWindowULong(HWND hwnd,
                                        LONG index,
                                        ULONG ul);
      PVOID  APIENTRY WinQueryWindowPtr(HWND hwnd,
                                        LONG index);
      BOOL   APIENTRY WinSetWindowPtr(HWND hwnd,
                                      LONG index,
                                      PVOID p);
      BOOL   APIENTRY WinSetWindowBits(HWND hwnd,
                                       LONG 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_PENDATA                (-7)
      #define QWL_MIN                    (-7)

      /*** WC_FRAME WinQueryWindowUShort/ULong() indices *******************/
      #define QWL_HHEAP                  0x0004
      #define QWL_HWNDFOCUSSAVE          0x0018
      #define QWL_DEFBUTTON              0x0040
      #define QWL_PSSCBLK                0x0048
      #define QWL_PFEPBLK                0x004c
      #define QWL_PSTATBLK               0x0050

      #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  APIENTRY WinMapWindowPoints(HWND hwndFrom,
                                     HWND hwndTo,
                                     PPOINTL prgptl,
                                     LONG 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);

   LONG APIENTRY WinQueryUpdateRegion(HWND hwnd,
                                      HRGN hrgn);

   LONG APIENTRY WinExcludeUpdateRegion(HPS hps,
                                        HWND hwnd);

#endif /* INCL_WINWINDOWMGR */

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

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

   /*** Standard Window Messages *******************************************/
   #define WM_NULL                    0x0000
   #define WM_CREATE                  0x0001
   #define WM_DESTROY                 0x0002

   #ifndef INCL_SAADEFS
   #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


   /*************************************************************************
   * 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_FONTDLG         4
   #define CMDSRC_FILEDLG         5
   #define CMDSRC_PRINTDLG        6
   #define CMDSRC_COLORDLG        7
   #define CMDSRC_OTHER           0

   #pragma pack(1) /* force structure alignment packing */

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

   #define COMMANDMSG(pmsg) \
   ((PCMDMSG)((PBYTE)pmsg + sizeof(MPARAM) ))

   #pragma pack()  /* restore packing to default */

   /*** The following structure is used by the WinQueryQueueInfo() routine */
   typedef struct _MQINFO    /* mqi */
   {
      ULONG   cb;
      PID     pid;
      TID     tid;
      ULONG   cmsgs;
      PVOID   pReserved;
   } MQINFO;
   typedef MQINFO *PMQINFO;

   MRESULT APIENTRY WinSendMsg(HWND hwnd,
                               ULONG msg,
                               MPARAM mp1,
                               MPARAM mp2);

   HMQ     APIENTRY WinCreateMsgQueue(HAB hab,
                                      LONG cmsg);

   BOOL    APIENTRY WinDestroyMsgQueue(HMQ hmq);

   BOOL    APIENTRY WinQueryQueueInfo(HMQ hmq,
                                      PMQINFO pmqi,
                                      ULONG cbCopy);

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

   BOOL    APIENTRY WinGetMsg(HAB hab,
                              PQMSG pqmsg,
                              HWND hwndFilter,
                              ULONG msgFilterFirst,
                              ULONG msgFilterLast);

   BOOL    APIENTRY WinPeekMsg(HAB hab,
                               PQMSG pqmsg,
                               HWND hwndFilter,
                               ULONG msgFilterFirst,
                               ULONG msgFilterLast,
                               ULONG fl);

   MRESULT APIENTRY WinDispatchMsg(HAB hab,
                                   PQMSG pqmsg);

   BOOL    APIENTRY WinPostMsg(HWND hwnd,
                               ULONG msg,
                               MPARAM mp1,
                               MPARAM mp2);

   BOOL    APIENTRY WinRegisterUserMsg(HAB hab,
                                       ULONG msgid,
                                       LONG datatype1,
                                       LONG dir1,
                                       LONG datatype2,
                                       LONG dir2,
                                       LONG datatyper);

   BOOL    APIENTRY WinRegisterUserDatatype(HAB hab,
                                            LONG datatype,
                                            LONG count,
                                            PLONG types);
   BOOL    APIENTRY WinSetMsgMode(HAB hab,
                                  PCSZ classname,
                                  LONG control);

   BOOL    APIENTRY WinSetSynchroMode(HAB hab,
                                      LONG 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 */
   {
      ULONG   fsStatus;
      ULONG   cchText;
      PSZ     pszText;
      ULONG   cbPresParams;
      PVOID   pPresParams;
      ULONG   cbCtlData;
      PVOID   pCtlData;
   } WNDPARAMS;
   typedef WNDPARAMS *PWNDPARAMS;

   #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,
                                    ULONG msg,
                                    MPARAM mp1,
                                    MPARAM mp2,
                                    ULONG 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,
                             ULONG msgFirst,
                             ULONG 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
      #define QS_MSGINPUT                0x0800

      BOOL  APIENTRY WinQueryMsgPos(HAB hab,
                                    PPOINTL pptl);

      ULONG APIENTRY WinQueryMsgTime(HAB hab);

      #ifndef INCL_DOSSEMAPHORES
         #ifndef __HEV__
            #define __HEV__
            typedef ULONG HEV;    /* hev */
         #endif
         typedef ULONG HMTX;   /* hmtx */
         typedef ULONG HMUX;   /* hmux */
      #endif

      APIRET APIENTRY WinWaitEventSem(HEV hev,
                                      ULONG ulTimeout);

      APIRET APIENTRY WinRequestMutexSem(HMTX hmtx,
                                         ULONG ulTimeout);

      APIRET APIENTRY WinWaitMuxWaitSem(HMUX hmux,
                                        ULONG ulTimeout,
                                        PULONG pulUser);


   #endif /* !INCL_SAADEFS */

   BOOL  APIENTRY WinPostQueueMsg(HMQ hmq,
                                  ULONG 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,
                                    ULONG msg_class,
                                    LONG control);

   BOOL  APIENTRY WinSetClassMsgInterest(HAB hab,
                                         PCSZ pszClassName,
                                         ULONG msg_class,
                                         LONG 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,
                                 ULONG flFocusChange);

   BOOL  EXPENTRY WinLockupSystem(HAB hab);

   BOOL  EXPENTRY WinUnlockSystem(HAB hab, PCSZ pszPassword);

   #define FC_NOSETFOCUS              0x0001
   #define FC_NOBRINGTOTOP            FC_NOSETFOCUS
   #define FC_NOLOSEFOCUS             0x0002
   #define FC_NOBRINGTOPFIRSTWINDOW   FC_NOLOSEFOCUS
   #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  APIENTRY WinCheckInput(HAB hab);

   /*** 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

      #define WM_MOUSEMAP             0x007D

      #define WM_EXTMOUSEFIRST        0x0410
      #define WM_EXTMOUSELAST         0x0419

      #define WM_CHORD                0x0410
      #define WM_BUTTON1MOTIONSTART   0x0411
      #define WM_BUTTON1MOTIONEND     0x0412
      #define WM_BUTTON1CLICK         0x0413
      #define WM_BUTTON2MOTIONSTART   0x0414
      #define WM_BUTTON2MOTIONEND     0x0415
      #define WM_BUTTON2CLICK         0x0416
      #define WM_BUTTON3MOTIONSTART   0x0417
      #define WM_BUTTON3MOTIONEND     0x0418
      #define WM_BUTTON3CLICK         0x0419

      /* Messages 0x041A - 0x041F are reserved */

      #define WM_MOUSETRANSLATEFIRST  0x0420
      #define WM_MOUSETRANSLATELAST   0x0428

      #define WM_BEGINDRAG            0x0420
      #define WM_ENDDRAG              0x0421
      #define WM_SINGLESELECT         0x0422
      #define WM_OPEN                 0x0423
      #define WM_CONTEXTMENU          0x0424
      #define WM_CONTEXTHELP          0x0425
      #define WM_TEXTEDIT             0x0426
      #define WM_BEGINSELECT          0x0427
      #define WM_ENDSELECT            0x0428

      #define WM_PENFIRST             0x04C0
      #define WM_PENLAST              0x04FF
      #define WM_MMPMFIRST            0x0500
      #define WM_MMPMLAST             0x05FF

   #endif /* !INCL_SAADEFS */

   HWND  APIENTRY WinQueryFocus(HWND hwndDesktop);


   /*** Key/Character input messages ***************************************/
   #define WM_CHAR                    0x007a
   #define WM_VIOCHAR                 0x007b

   /* WM_CHAR fs field bits */
   #define KC_NONE                    0x0000     /* Reserved */
   #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 */

   #pragma pack(1) /* force structure alignment packing */

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

   #define MOUSEMSG(pmsg) \
   ((PMSEMSG)((PBYTE)pmsg + sizeof(MPARAM) ))

   typedef struct _CHARMSG    /* charmsg */
   {
      USHORT  fs;           /* mp1     */
      UCHAR   cRepeat;
      UCHAR   scancode;
      USHORT  chr;          /* mp2     */
      USHORT  vkey;
   } CHRMSG;
   typedef CHRMSG *PCHRMSG;

   #define CHARMSG(pmsg) \
   ((PCHRMSG)((PBYTE)pmsg + sizeof(MPARAM) ))

   #pragma pack()  /* restore packing to default */

   #define INP_NONE                   0x0000
   #define INP_KBD                    0x0001
   #define INP_MULT                   0x0002
   #define INP_RES2                   0x0004
   #define INP_SHIFT                  0x0008
   #define INP_CTRL                   0x0010
   #define INP_ALT                    0x0020
   #define INP_RES3                   0x0040
   #define INP_RES4                   0x0080
   #define INP_IGNORE                 0xFFFF

   /*** 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_ENDDRAG                 0x38
   #define VK_CLEAR                   0x39
   #define VK_EREOF                   0x3A
   #define VK_PA1                     0x3B


   #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

      LONG APIENTRY WinGetKeyState(HWND hwndDesktop,
                                   LONG vkey);
      LONG APIENTRY WinGetPhysKeyState(HWND hwndDesktop,
                                       LONG 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 */

   BOOL    APIENTRY WinGetDlgMsg(HWND hwndDlg,
                                 PQMSG pqmsg);

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

   BOOL    APIENTRY WinDismissDlg(HWND hwndDlg,
                                  ULONG usResult);

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

   MRESULT APIENTRY WinDefDlgProc(HWND hwndDlg,
                                  ULONG 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,
                          ULONG rgfType);

   /* WinAlarm Codes */

   #define WA_WARNING                 0
   #define WA_NOTE                    1
   #define WA_ERROR                   2
   #define WA_CWINALARMS             13     /* count of valid alarms     53304*/


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


   /* 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 */

   /***************************************************************************
   * ULONG/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) \
   ((ULONG)WinSendDlgItemMsg(hwndDlg, id, BM_SETCHECK, \
   MPFROMSHORT(usCheckState), (MPARAM)NULL))

   /***************************************************************************
   * ULONG/USHORT WinQueryButtonCheckstate(HWND hwndDlg, USHORT id)
   *    returns the check state of buttin #id.
   *
   ***************************************************************************/
   #define WinQueryButtonCheckstate(hwndDlg, id) \
   ((ULONG)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, ULONG 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                     */


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


   /* WinEnumDlgItem() constants */

   #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: ******************************/

   #pragma pack(2) /* force structure alignment packing */

   /*************************************************************************
   *
   *  We pack the structures _DLGTITEM and _DLGTEMPLATE so that the
   *  structures are identical in the 32-bit and 16-bit 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.
   *
   *************************************************************************/

   /* Binary resources may be bound into application executables or */
   /* passed as a parameter when creating a window or dialog        */
   /* Currently they must be the same for both 16-bit and 32-bit    */
   /* so we pack the structures.                                    */
   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 *PDLGTITEM;

   /*** Dialog Template structure ******************************************/

   /* Binary resources may be bound into application executables or */
   /* passed as a parameter when creating a window or dialog        */
   /* Currently they must be the same for both 16-bit and 32-bit    */
   /* so we pack the structures.                                    */
   typedef struct _DLGTEMPLATE    /* dlgt */
   {
      USHORT   cbTemplate;
      USHORT   type;
      USHORT   codepage;
      USHORT   offadlgti;
      USHORT   fsTemplateStatus;
      USHORT   iItemFocus;
      USHORT   coffPresParams;
      DLGTITEM adlgti[1];
   } DLGTEMPLATE;
   typedef DLGTEMPLATE *PDLGTEMPLATE;

   #pragma pack()  /* restore packing to default */

   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
   #define SS_AUTOSIZE         0x0040L


   /* 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_PRIMARYSTYLES       0x000fL

   #define BS_BITMAP           0x0040L
   #define BS_ICON             0x0080L
   #define BS_HELP                    0x0100L
   #define BS_SYSCOMMAND              0x0200L
   #define BS_DEFAULT                 0x0400L
   #define BS_NOPOINTERFOCUS          0x0800L
   #define BS_NOBORDER                0x1000L
   #define BS_NOCURSORSELECT          0x2000L
   #define BS_AUTOSIZE             0x4000L



   #ifndef INCL_SAADEFS
      #pragma pack(2) /* force structure alignment packing */

      /* Binary resources may be bound into application executables or */
      /* passed as a parameter when creating a window or dialog        */
      /* Currently they must be the same for both 16-bit and 32-bit    */
      /* so we pack the structures.                                    */
      typedef struct _BTNCDATA    /* btncd */
      {
         USHORT  cb;
         USHORT  fsCheckState;
         USHORT  fsHiliteState;
         LHANDLE hImage;
      } BTNCDATA;
      typedef BTNCDATA *PBTNCDATA;

      #pragma pack()  /* restore packing to default */

   #endif /* !INCL_SAADEFS */

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

   #ifndef INCL_SAADEFS
      typedef struct _USERBUTTON    /* ubtn */
      {
         HWND    hwnd;
         HPS     hps;
         ULONG   fsState;
         ULONG   fsStateOld;
      } USERBUTTON;
      typedef USERBUTTON *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_AUTOSIZE                0x00000200L

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


   /*
   * combo box styles
   */
   #define CBS_SIMPLE                 0x0001L
   #define CBS_DROPDOWN               0x0002L
   #define CBS_DROPDOWNLIST           0x0004L

   /*
   * Use this bit for drop down combo boxes that do not want to
   * receive a CBN_ENTER on a single click in their list boxes.
   * This is for compatibility with releases prior to OS/2 2.0 which
   * did not send this message
   */
   #define CBS_COMPATIBLE             0x0008L

   /*
   * The following 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               0x0170
   #define CBM_HILITE                 0x0171
   #define CBM_ISLISTSHOWING          0x0172

   #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


   #ifndef INCL_SAADEFS
      #pragma pack(2) /* force structure alignment packing */

      /* Binary resources may be bound into application executables or */
      /* passed as a parameter when creating a window or dialog        */
      /* Currently they must be the same for both 16-bit and 32-bit    */
      /* so we pack the structures.                                    */
      typedef struct _ENTRYFDATA    /* efd */
      {
         USHORT  cb;
         USHORT  cchEditLimit;
         USHORT  ichMinSel;
         USHORT  ichMaxSel;
      } ENTRYFDATA;
      typedef ENTRYFDATA *PENTRYFDATA;

      #pragma pack()  /* restore packing to default */

   #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
   #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


   /* 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_CURSOR         (-4)
   #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 */

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

   /***************************************************************************
   * LONG/SHORT WinInsertLboxItem(HWND hwndLbox, LONG/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) \
   ((LONG)WinSendMsg(hwndLbox, LM_INSERTITEM, MPFROMLONG(index), \
   MPFROMP(psz)))

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

   /***************************************************************************
   * LONG/SHORT WinQueryLboxItemText(HWND hwndLbox, LONG/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) \
   ((LONG)WinSendMsg(hwndLbox, LM_QUERYITEMTEXT, \
   MPFROM2SHORT((index), (cchMax)), MPFROMP(psz)))

   /***************************************************************************
   * LONG/SHORT WinQueryLboxItemTextLength(HWND hwndLbox, LONG/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, LONG/SHORT index, PSZ psz)
   *    sets the text of item index to psz.
   *    returns fSuccess.
   ***************************************************************************/
   #define WinSetLboxItemText(hwndLbox, index, psz) \
   ((BOOL)WinSendMsg(hwndLbox, LM_SETITEMTEXT, \
   MPFROMLONG(index), MPFROMP(psz)))

   /***************************************************************************
   * LONG/SHORT WinQueryLboxSelectedItem(HWND hwndLbox)
   *    returns the item index selected. (for single selection only)
   *
   ***************************************************************************/
   #define WinQueryLboxSelectedItem(hwndLbox) \
   ((LONG)WinSendMsg(hwndLbox, LM_QUERYSELECTION, MPFROMLONG(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

   #define MS_CONDITIONALCASCADE      0x00000040L

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


   /* 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

   #define MM_QUERYDEFAULTITEMID      0x0431
   #define MM_SETDEFAULTITEMID        0x0432

   #ifndef MTI_INCLUDED
      #define MTI_INCLUDED

      typedef struct _mti     /* mti */
      {
         USHORT afStyle;      /* Style Flags      */
         USHORT pad;          /* pad for template */
         USHORT idItem;       /* Item ID          */
         CHAR   c[2];         /*                  */
      } MTI;

      typedef struct _mt      /* mt */
      {
         ULONG  len;          /* Length of template in bytes */
         USHORT codepage;     /* Codepage                    */
         USHORT reserved;     /* Reserved.                   */
         USHORT cMti;         /* Count of template items.    */
         MTI    rgMti[1];     /* Array of template items.    */
      } MT;
      typedef MT *LPMT;

   #endif

   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;
         ULONG   fsState;
         ULONG   fsAttribute;
         ULONG   fsStateOld;
         ULONG   fsAttributeOld;
         RECTL   rclItem;
         LONG    idItem; /* This field contains idItem for menus, iItem for lb. */
         ULONG   hItem;
      } OWNERITEM;
      typedef OWNERITEM *POWNERITEM;
   #endif /* !INCL_SAADEFS */

   /* Menu item */

   #pragma pack(2) /* force structure alignment packing */

   /* Binary resources may be bound into application executables or */
   /* passed as a parameter when creating a window or dialog        */
   /* Currently they must be the same for both 16-bit and 32-bit    */
   /* so we pack the structures.                                    */
   typedef struct _MENUITEM    /* mi */
   {
      SHORT   iPosition;
      USHORT  afStyle;
      USHORT  afAttribute;
      USHORT  id;
      HWND    hwndSubMenu;
      ULONG   hItem;
   } MENUITEM;
   typedef MENUITEM *PMENUITEM;

   #pragma pack()  /* restore packing to default */

   #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,
                              LONG x,
                              LONG y,
                              LONG idItem,
                              ULONG fs);

   /* Values of fs in WinPopupMenu call */

   #define PU_POSITIONONITEM          0x0001 /* Need 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, ULONG/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, (USHORT)(fcheck) ? MIA_CHECKED : 0)))

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

   /***************************************************************************
   * BOOL WinEnableMenuItem(HWND hwndMenu, ULONG/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, (USHORT)(fEnable) ? 0 : MIA_DISABLED)))

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

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

   /***************************************************************************
   * BOOL WinIsMenuItemValid(HWND hwndMenu, ULONG/USHORT id)
   *    Returns TRUE if the specified item is a valid choice.
   ***************************************************************************/
   #define WinIsMenuItemValid(hwndMenu, id) \
   ((BOOL)WinSendMsg(hwndMenu, MM_ISITEMVALID, \
   MPFROM2SHORT(id, TRUE), MPFROMLONG(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
   #define SBS_AUTOSIZE        0x2000L



   /* 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
      #pragma pack(2) /* force structure alignment packing */

      /* Binary resources may be bound into application executables or */
      /* passed as a parameter when creating a window or dialog        */
      /* Currently they must be the same for both 16-bit and 32-bit    */
      /* so we pack the structures.                                    */
      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 *PSBCDATA;

      #pragma pack()  /* restore packing to default */
   #endif /* !INCL_SAADEFS */

#endif /* INCL_WINSCROLLBARS */


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

   #pragma pack(2) /* force structure alignment packing */

   /* Binary resources may be bound into application executables or */
   /* passed as a parameter when creating a window or dialog        */
   /* Currently they must be the same for both 16-bit and 32-bit    */
   /* so we pack the structures.                                    */
   typedef struct _FRAMECDATA    /* fcdata */
   {
      USHORT  cb;
      ULONG   flCreateFlags;
      USHORT  hmodResources;
      USHORT  idResources;
   } FRAMECDATA;
   typedef FRAMECDATA *PFRAMECDATA;

   #pragma pack()  /* restore packing to default */

   /* Frame window styles */
   /* All unused FCF_xxx bits are reserved */
   #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
   #define FCF_HIDEBUTTON             0x01000000L
   #define FCF_HIDEMAX                0x01000020L /* hidemax means BOTH buttons */
   #ifdef INCL_NLS
      #define FCF_DBE_APPSTAT         0x80000000L
   #endif /* INCL_NLS */
   #define FCF_AUTOICON               0x40000000L

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


   #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
   #define FS_AUTOICON                0x00001000L
   #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,
                                     PCSZ pszClientClass,
                                     PCSZ pszTitle,
                                     ULONG styleClient,
                                     HMODULE hmod,
                                     ULONG 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 */


   BOOL  APIENTRY WinCreateFrameControls(HWND hwndFrame,
                                         PFRAMECDATA pfcdata,
                                         PCSZ 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,
                                  ULONG 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

      #define SC_BEGINDRAG               0x8020
      #define SC_ENDDRAG                 0x8021
      #define SC_SELECT                  0x8022
      #define SC_OPEN                    0x8023
      #define SC_CONTEXTMENU             0x8024
      #define SC_CONTEXTHELP             0x8025
      #define SC_TEXTEDIT                0x8026
      #define SC_BEGINSELECT             0x8027
      #define SC_ENDSELECT               0x8028
      #define SC_WINDOW                  0x8029
      #define SC_HIDE                    0x802a


   #endif /* !INCL_SAADEFS */

#endif /* INCL_WINFRAMEMGR */

/*** Frame controls */

#ifdef INCL_WINFRAMECTLS

   /** Title bar controls */


   /* Title bar control messages */

   #define TBM_SETHILITE              0x01e3
   #define TBM_QUERYHILITE            0x01e4


#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,
                               LONG xLeft,
                               LONG yBottom,
                               LONG xRight,
                               LONG 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,
                                  LONG cx,
                                  LONG cy);
      BOOL APIENTRY WinInflateRect(HAB hab,
                                   PRECTL prcl,
                                   LONG cx,
                                   LONG 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,
                                PRECTL pwrc);
      BOOL APIENTRY WinMakePoints(HAB hab,
                                  PPOINTL pwpt,
                                  ULONG cwpt);
   #endif /* !INCL_SAADEFS */

#endif /* INCL_WINRECTANGLES */


#ifdef INCL_WINSYS

   /*** System values */

   LONG APIENTRY WinQuerySysValue(HWND hwndDesktop,
                                  LONG iSysValue);
   BOOL  APIENTRY WinSetSysValue(HWND hwndDesktop,
                                 LONG 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
   #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
   #define SV_CYBYTEALIGN             50
   #define SV_CYALIGN                 50

   /* 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_CXICONTEXTWIDTH         68
   #define SV_CICONTEXTLINES          69

   #define SV_CHORDTIME               70
   #define SV_CXCHORD                 71
   #define SV_CYCHORD                 72
   #define SV_CXMOTIONSTART           73
   #define SV_CYMOTIONSTART           74

   #define SV_BEGINDRAG               75
   #define SV_ENDDRAG                 76
   #define SV_SINGLESELECT            77
   #define SV_OPEN                    78
   #define SV_CONTEXTMENU             79
   #define SV_CONTEXTHELP             80
   #define SV_TEXTEDIT                81
   #define SV_BEGINSELECT             82
   #define SV_ENDSELECT               83

   #define SV_BEGINDRAGKB             84
   #define SV_ENDDRAGKB               85
   #define SV_SELECTKB                86
   #define SV_OPENKB                  87
   #define SV_CONTEXTMENUKB           88
   #define SV_CONTEXTHELPKB           89
   #define SV_TEXTEDITKB              90
   #define SV_BEGINSELECTKB           91
   #define SV_ENDSELECTKB             92

   #define SV_ANIMATION               93
   #define SV_ANIMATIONSPEED          94

   #define SV_MONOICONS               95

   #define SV_KBDALTERED              96

   #define SV_PRINTSCREEN             97

   #define SV_CSYSVALUES              98


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

   typedef struct _PRESPARAMS    /* pres */
   {
      ULONG   cb;
      PARAM   aparam[1];
   } PRESPARAMS;
   typedef PRESPARAMS *NPPRESPARAMS;
   typedef PRESPARAMS *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,
                                    ULONG 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_MENUFOREGROUNDCOLOR                  31L
   #define PP_MENUFOREGROUNDCOLORINDEX             32L
   #define PP_MENUBACKGROUNDCOLOR                  33L
   #define PP_MENUBACKGROUNDCOLORINDEX             34L
   #define PP_MENUHILITEFGNDCOLOR                  35L
   #define PP_MENUHILITEFGNDCOLORINDEX             36L
   #define PP_MENUHILITEBGNDCOLOR                  37L
   #define PP_MENUHILITEBGNDCOLORINDEX             38L
   #define PP_MENUDISABLEDFGNDCOLOR                39L
   #define PP_MENUDISABLEDFGNDCOLORINDEX           40L
   #define PP_MENUDISABLEDBGNDCOLOR                41L
   #define PP_MENUDISABLEDBGNDCOLORINDEX           42L

   #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_SHADOWHILITEBGND         (-50L)
   #define SYSCLR_SHADOWHILITEFGND         (-49L)
   #define SYSCLR_SHADOWTEXT               (-48L)
   #define SYSCLR_ENTRYFIELD               (-47L)
   #define SYSCLR_MENUDISABLEDTEXT         (-46L)
   #define SYSCLR_MENUHILITE               (-45L)
   #define SYSCLR_MENUHILITEBGND           (-44L)
   #define SYSCLR_PAGEBACKGROUND           (-43L)
   #define SYSCLR_FIELDBACKGROUND          (-42L)
   #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               41L

#endif /* INCL_WINSYS */


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

   #ifndef INCL_SAADEFS


      ULONG APIENTRY WinStartTimer(HAB hab,
                                   HWND hwnd,
                                   ULONG idTimer,
                                   ULONG dtTimeout);
      BOOL   APIENTRY WinStopTimer(HAB hab,
                                   HWND hwnd,
                                   ULONG 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 */

typedef LHANDLE HACCEL; /* haccel */

#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 */

   #pragma pack(2) /* force structure alignment packing */

   /* Binary resources may be bound into application executables or */
   /* passed as a parameter when creating a window or dialog        */
   /* Currently they must be the same for both 16-bit and 32-bit    */
   /* so we pack the structures.                                    */
   typedef struct _ACCEL    /* acc */
   {
      USHORT  fs;
      USHORT  key;
      USHORT  cmd;
   } ACCEL;
   typedef ACCEL *PACCEL;

   /* Binary resources may be bound into application executables or */
   /* passed as a parameter when creating a window or dialog        */
   /* Currently they must be the same for both 16-bit and 32-bit    */
   /* so we pack the structures.                                    */
   typedef struct _ACCELTABLE    /* acct  */
   {
      USHORT  cAccel;
      USHORT  codepage;
      ACCEL   aaccel[1];
   } ACCELTABLE;
   typedef ACCELTABLE *PACCELTABLE;

   #pragma pack()  /* restore packing to default */

   HACCEL APIENTRY WinLoadAccelTable(HAB hab,
                                     HMODULE hmod,
                                     ULONG idAccelTable);
   ULONG APIENTRY WinCopyAccelTable(HACCEL haccel,
                                    PACCELTABLE pAccelTable,
                                    ULONG cbCopyMax);
   HACCEL APIENTRY WinCreateAccelTable(HAB hab,
                                       PACCELTABLE pAccelTable);
   BOOL   APIENTRY WinDestroyAccelTable(HACCEL haccel);
   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 */
   {
      LONG    cxBorder;
      LONG    cyBorder;
      LONG    cxGrid;
      LONG    cyGrid;
      LONG    cxKeyboard;
      LONG    cyKeyboard;
      RECTL   rclTrack;
      RECTL   rclBoundary;
      POINTL  ptlMinTrackSize;
      POINTL  ptlMaxTrackSize;
      ULONG   fs;
   } TRACKINFO;
   typedef TRACKINFO *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
      #define CF_PALETTE                 9
      #define CF_MMPMFIRST              10
      #define CF_MMPMLAST               19
      /*
      * 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_PALETTE                "#9"
      #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 SZDDEFMT_RTF                 "Rich Text Format"
      #define SZDDEFMT_PTRPICT             "Printer_Picture"

      #pragma pack(2) /* force structure alignment packing */

      /* Metafiles are the same no matter whether they are used in     */
      /* 16-bit or 32-bit applications. While not strictly necessary   */
      /* because of inherent alignment we force packing on a 2 byte    */
      /* boundary to avoid any confusion.                              */
      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 *PMFP;

      /* CPTEXT DDE data are the same no matter whether they are used  */
      /* in 16-bit or 32-bit applications. While not strictly necessary*/
      /* because of inherent alignment we force packing on a 2 byte    */
      /* boundary to avoid any confusion.                              */
      typedef struct _CPTEXT    /* cptxt */
      {
         USHORT idCountry;
         USHORT usCodepage;
         USHORT usLangID;
         USHORT usSubLangID;
         BYTE   abText[1];   /* text string starts here          */
      } CPTEXT;
      typedef CPTEXT *PCPTEXT;

      #pragma pack()  /* restore packing to default */

   #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,
                                        ULONG fmt,
                                        ULONG rgfFmtInfo);
      ULONG  APIENTRY WinQueryClipbrdData(HAB hab,
                                          ULONG fmt);
      BOOL   APIENTRY WinQueryClipbrdFmtInfo(HAB hab,
                                             ULONG fmt,
                                             PULONG prgfFmtInfo);
      BOOL   APIENTRY WinSetClipbrdViewer(HAB hab,
                                          HWND hwndNewClipViewer);

      /* WinSetClipbrdData() flags */

      #define CFI_OWNERFREE              0x0001
      #define CFI_OWNERDISPLAY           0x0002
      #define CFI_POINTER                0x0400
      #define CFI_HANDLE                 0x0200

   #endif /* !INCL_SAADEFS */

   ULONG APIENTRY WinEnumClipbrdFmts(HAB hab,
                                     ULONG fmt);
   BOOL   APIENTRY WinEmptyClipbrd(HAB hab);
   BOOL   APIENTRY WinOpenClipbrd(HAB hab);
   BOOL   APIENTRY WinCloseClipbrd(HAB hab);

   HWND   APIENTRY WinQueryClipbrdOwner(HAB hab);
   HWND   APIENTRY WinQueryClipbrdViewer(HAB hab);

#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,
                                 LONG x,
                                 LONG y,
                                 LONG cx,
                                 LONG cy,
                                 ULONG 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;
      LONG    x;
      LONG    y;
      LONG    cx;
      LONG    cy;
      ULONG   fs;
      RECTL   rclClip;
   } CURSORINFO;
   typedef CURSORINFO *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 WinSetPointerOwner(HPOINTER hptr,
                                        PID pid,
                                        BOOL fDestroy);
   BOOL     APIENTRY WinShowPointer(HWND hwndDesktop,
                                    BOOL fShow);
   BOOL     APIENTRY WinLockPointerUpdate(HWND hwndDesktop,
                                          HPOINTER hptrNew,
                                          ULONG ulTimeInterval);
   HPOINTER APIENTRY WinQuerySysPointer(HWND hwndDesktop,
                                        LONG iptr,
                                        BOOL fLoad);

   BOOL APIENTRY WinQuerySysPointerData(HWND hwndDesktop,
                                        ULONG iptr,
                                        PICONINFO pIconInfo);
   BOOL APIENTRY WinSetSysPointerData(HWND hwndDesktop,
                                      ULONG iptr,
                                      PICONINFO pIconInfo);

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

   #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_ILLEGAL               18
   #define SPTR_FILE                  19
   #define SPTR_FOLDER                20
   #define SPTR_MULTFILE              21
   #define SPTR_PROGRAM               22
   #define SPTR_DISPLAY_PTRS          22
   #define SPTR_PENFIRST              23
   #define SPTR_PENLAST               39
   #define SPTR_CPTR                  39  /* total # of system pointers */

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


   HPOINTER APIENTRY WinLoadPointer(HWND hwndDesktop,
                                    HMODULE hmod,
                                    ULONG idres);
   HPOINTER APIENTRY WinCreatePointer(HWND hwndDesktop,
                                      HBITMAP hbmPointer,
                                      BOOL fPointer,
                                      LONG xHotspot,
                                      LONG yHotspot);
   BOOL     APIENTRY WinSetPointerPos(HWND hwndDesktop,
                                      LONG x,
                                      LONG y);
   BOOL     APIENTRY WinDestroyPointer(HPOINTER hptr);

   HPOINTER APIENTRY WinQueryPointer(HWND hwndDesktop);
   BOOL     APIENTRY WinQueryPointerPos(HWND hwndDesktop,
                                        PPOINTL pptl);

   typedef struct _POINTERINFO    /* ptri */
   {
      ULONG   fPointer;
      LONG    xHotspot;
      LONG    yHotspot;
      HBITMAP hbmPointer;
      HBITMAP hbmColor;
      HBITMAP hbmMiniPointer;
      HBITMAP hbmMiniColor;
   } POINTERINFO;
   typedef POINTERINFO *PPOINTERINFO;

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



   /* WinDrawPointer() constants */

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


   HBITMAP APIENTRY WinGetSysBitmap(HWND hwndDesktop,
                                    ULONG 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_OLD_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
   #define SBMP_CHECKBOXES        48

#endif /* INCL_WINPOINTERS */


/**** Hook manager */

#ifdef INCL_WINHOOKS

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


      /**********************************************************************
      * Hook codes
      *
      * Whether the hook receives a (U)SHORT or (U)LONG parameter depends
      * on the memory model that the hook executes in. 32-bit hook will
      * receive long parameters
      *
      **********************************************************************/

      #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
      *                          ULONG/USHORT fs);        ** remove/noremove */

      #define HK_MSGFILTER               2
      /* BOOL EXPENTRY MsgFilterHook(HAB hab,             ** installer's hab
      *                              PQMSG pQmsg,         ** p qmsg
      *                              ULONG/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
      *                         ULONG/USHORT usMode,      ** mode
      *                         ULONG/USHORT idTopic,     ** main topic
      *                         ULONG/USHORT idSubTopic,  ** sub topic
      *                         PRECTL prcPosition);      ** associated position */

      #define HK_LOADER                  6
      /* BOOL EXPENTRY LoaderHook(HAB hab,                ** installer's hab
      *                           LONG/USHORT 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
      *                                 PULONG/PUSHORT arRMP, ** RMP array
      *                                 PBOOL fRegistered); ** msg parms already reg*/

      #define HK_MSGCONTROL              8
      /* BOOL EXPENTRY MsgControlHook(HAB hab,            ** installer's hab
      *                               LONG/SHORT idContext,** who called hook
      *                               HWND hwnd,          ** SEI window handle
      *                               PSZ pszClassname,   ** window class name
      *                               ULONG/USHORT usMsgclass,** interested msg class **
      *                               LONG/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
      *                                    ULONG/USHORT usOldCodepage, ** old code page
      *                                    ULONG/USHORT usNewCodepage);** new code page*/

      #define HK_WINDOWDC                15
      /* BOOL EXPENTRY WindowDCHook(HAB  hab,             ** installer's hab
      *                             HDC  hdc,             ** current hdc
      *                             HWND hwnd,            ** current hwnd
      *                             BOOL);                ** association flag */

      #define HK_DESTROYWINDOW           16
      /* BOOL EXPENTRY DestroyWindowHook (HAB  hab,       ** installer's hab
      *                                   HWND hwnd,      ** destroyed win hwnd
      *                                   ULONG Reserved);** association flag  */

      #define HK_CHECKMSGFILTER          20
      /* BOOL EXPENTRY CheckMsgFilteHook (HAB  hab,       ** installer's hab
      *                                   PQMSG pQmsg,    ** p qmsg
      *                                   ULONG/USHORT usFirst,  ** first msg
      *                                   ULONG/USHORT usLast,   ** last msg
      *                                   ULONG/USHORT fOptions);** flags  */

      #define HK_MSGINPUT                21
      /* BOOL EXPENTRY MsgInputHook (HAB  hab,          ** installer's hab
      *                              PQMSG pQmsg,       ** p qmsg
      *                              BOOL fSkip,        ** skip msg
      *                              PBOOL pfNoRecord); ** journal record event */

      #define HK_LOCKUP                  23
      /* BOOL EXPENTRY LockupHook (HAB  hab,              ** installer's hab
      *                           HWND hwndLockupFrame); ** hwnd     */

      #define HK_FLUSHBUF                24
      /* BOOL EXPENTRY FlushBufHook (HAB  hab);           ** installer's hab */

      /*** Current message queue constant **********************************/
      #define HMQ_CURRENT          ((HMQ)1)

      /*** WH_MSGFILTER context codes **************************************/
      #define MSGF_DIALOGBOX             1
      #define MSGF_MESSAGEBOX            2
      #define MSGF_TRACK                 8
      #define MSGF_DDEPOSTMSG            3

      /*** 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

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

      /*HK_LOADER context codes */

      #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(PCSZ pszClassname,
                                         PFN pfnThunkProc);
   PFN     APIENTRY WinQueryClassThunkProc(PCSZ pszClassname);
   BOOL    APIENTRY WinSetWindowThunkProc(HWND hwnd,
                                          PFN pfnThunkProc);
   PFN     APIENTRY WinQueryWindowThunkProc(HWND hwnd);
   LONG   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

   ULONG  APIENTRY WinQueryCp(HMQ hmq);

   #ifndef INCL_SAADEFS
      BOOL    APIENTRY WinSetCp(HMQ hmq,
                                ULONG idCodePage);

      ULONG  APIENTRY WinQueryCpList(HAB hab,
                                     ULONG ccpMax,
                                     PULONG prgcp);

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

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

      ULONG  APIENTRY WinUpper(HAB hab,
                               ULONG idcp,
                               ULONG idcc,
                               PCSZ psz);

      ULONG  APIENTRY WinUpperChar(HAB hab,
                                   ULONG idcp,
                                   ULONG idcc,
                                   ULONG c);

      PCSZ     APIENTRY WinNextChar(HAB hab,
                                   ULONG idcp,
                                   ULONG idcc,
                                   PCSZ psz);

      PCSZ     APIENTRY WinPrevChar(HAB hab,
                                   ULONG idcp,
                                   ULONG idcc,
                                   PCSZ pszStart,
                                   PCSZ psz);

      ULONG  APIENTRY WinCompareStrings(HAB hab,
                                        ULONG idcp,
                                        ULONG idcc,
                                        PCSZ psz1,
                                        PCSZ psz2,
                                        ULONG 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


#endif  /* INCL_WINHEAP */


/*** Atom Manager Interface declarations */

#ifdef INCL_WINATOM

   #ifndef INCL_SAADEFS
      typedef LHANDLE  HATOMTBL;
      typedef ULONG   ATOM;

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

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

#endif /* INCL_WINATOM */


#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 */
   {
      ULONG   cbFixedErrInfo;
      ERRORID idError;
      ULONG   cDetailLevel;
      ULONG   offaoffszMsg;
      ULONG   offBinaryData;
   } ERRINFO;
   typedef ERRINFO *PERRINFO;

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

#endif  /* INCL_WINERRORS */

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

#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 */
      {
         ULONG  cb;          /* sizeof(CONVCONTEXT) */
         ULONG fsContext;
         ULONG idCountry;
         ULONG usCodepage;
         ULONG usLangID;
         ULONG usSubLangID;
      } CONVCONTEXT;
      typedef CONVCONTEXT *PCONVCONTEXT;

      #define DDECTXT_CASESENSITIVE    0x0001

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

      typedef struct _DDESTRUCT    /* dde */
      {
         ULONG   cbData;
         USHORT  fsStatus;
         USHORT  usFormat;
         USHORT  offszItemName;
         USHORT  offabData;
      } DDESTRUCT;
      typedef DDESTRUCT *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,
                                      PCSZ pszAppName,
                                      PCSZ pszTopicName,
                                      PCONVCONTEXT pcctxt);

      MRESULT APIENTRY WinDdeRespond(HWND hwndClient,
                                     HWND hwndServer,
                                     PCSZ pszAppName,
                                     PCSZ pszTopicName,
                                     PCONVCONTEXT pcctxt);

      BOOL    APIENTRY WinDdePostMsg(HWND hwndTo,
                                     HWND hwndFrom,
                                     ULONG 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))


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

#ifdef INCL_WINWINDOWMGR
   #define WM_QUERYCONVERTPOS         0x00b0   /* WM_DBCSFIRST */

   /* 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,
                                     PCSZ procname);
   HLIB    APIENTRY WinLoadLibrary(HAB hab,
                                   PCSZ libname);
#endif /* INCL_WINLOAD */

#ifndef INCL_SAADEFS
   #ifdef INCL_WINDESKTOP

      /*** Desktop API definitions ***/

      typedef struct _DESKTOP          /* dsk */
      {
         ULONG    cbSize;
         HBITMAP  hbm;
         LONG     x;
         LONG     y;
         ULONG    fl;
         LONG     lTileCount;
         CHAR     szFile[260];
      } DESKTOP;
      typedef DESKTOP *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 */
#endif

#ifndef INCL_SAADEFS
   #ifdef INCL_WINPALETTE

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

      LONG APIENTRY WinRealizePalette(HWND hwnd,
                                      HPS hps,
                                      PULONG pcclr);

   #endif  /* INCL_WINPALETTE */
#endif

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

#ifdef INCL_NLS
   #define WM_DBCSFIRST               0x00b0
   #define WM_DBCSLAST                0x00cf

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


/* NOINC */
#ifdef __cplusplus
        }
#endif
   #pragma info( none )
   #ifndef __CHKHDR__
      #pragma info( restore )
   #endif
   #pragma info( restore )
/* INC */

/**************************** end of file **********************************/
