win16.mh

来自「开放源码的编译器open watcom 1.6.0版的源代码」· MH 代码 · 共 2,221 行 · 第 1/5 页

MH
2,221
字号
/*
 *  win16.h     Include file for Windows 3.x development.
 *
:include crwatcnt.sp
 */

#ifndef _INC_WINDOWS
#define _INC_WINDOWS

:include readonly.sp
#ifndef RC_INVOKED
#pragma pack(push,1)
#endif

:include cpluspro.sp

#ifndef WINVER
#define WINVER  0x030a
#endif

#ifdef RC_INVOKED
#define NOATOM
#define NOGDI
#define NOGDICAPMASKS
#define NOMETAFILE
#define NOMINMAX
#define NOMSG
#define NOOPENFILE
#define NORASTEROPS
#define NOSCROLL
#define NOSOUND
#define NOSYSMETRICS
#define NOTEXTMETRIC
#define NOWH
#define NODBCS
#define NOSYSTEMPARAMSINFO
#define NOCOMM
#define NOOEMRESOURCE
#endif

#if (WINVER < 0x030a)
#define NOOEMRESOURCE
#ifdef OEMRESOURCE
#undef NOOEMRESOURCE
#endif
#endif

#define FAR         __far
#define NEAR        __near
#define VOID        void
#define PASCAL      __pascal
#define CDECL       __cdecl
#define WINAPI      __far __pascal
#define CALLBACK    __far __pascal

typedef int         BOOL;
#define FALSE       0
#define TRUE        1

typedef unsigned char   BYTE;
typedef unsigned short  WORD;
typedef unsigned long   DWORD;
typedef unsigned int    UINT;
#ifdef STRICT
typedef signed long         LONG;
#else
#define LONG                long
#endif

#define LOBYTE(w)           ((BYTE)(w))
#define HIBYTE(w)           ((BYTE)(((UINT)(w) >> 8) & 0xFF))
#define LOWORD(l)           ((WORD)(DWORD)(l))
#define HIWORD(l)           ((WORD)((((DWORD)(l)) >> 16) & 0xFFFF))
#define MAKELONG(low, high) ((LONG)(((WORD)(low)) | (((DWORD)((WORD)(high))) << 16)))

#ifndef NOMINMAX
#ifndef max
#define max(a,b)    (((a) > (b)) ? (a) : (b))
#endif
#ifndef min
#define min(a,b)    (((a) < (b)) ? (a) : (b))
#endif
#endif

typedef UINT WPARAM;
typedef LONG LPARAM;
typedef LONG LRESULT;

#define MAKELPARAM(low, high)   ((LPARAM)MAKELONG(low, high))
#define MAKELRESULT(low, high)  ((LRESULT)MAKELONG(low, high))

#ifndef NULL
#if defined(__SMALL__) || defined(__MEDIUM__) || defined(__386__)
#define NULL    0
#else
#define NULL    0L
#endif
#endif

typedef char NEAR   *PSTR;
typedef char NEAR   *NPSTR;
typedef BYTE NEAR   *PBYTE;
typedef BYTE FAR    *LPBYTE;
typedef int NEAR    *PINT;
typedef int FAR     *LPINT;
typedef WORD NEAR   *PWORD;
typedef WORD FAR    *LPWORD;
typedef long NEAR   *PLONG;
typedef long FAR    *LPLONG;
typedef DWORD NEAR  *PDWORD;
typedef DWORD FAR   *LPDWORD;
typedef void FAR    *LPVOID;

typedef char FAR        *LPSTR;
typedef const char FAR  *LPCSTR;

#define MAKELP(sel, off)    ((void FAR*)MAKELONG((off), (sel)))
#define SELECTOROF(lp)      HIWORD(lp)
#define OFFSETOF(lp)        LOWORD(lp)

#define FIELDOFFSET(type, field)    ((int)(&((type NEAR*)1)->field)-1)

/* For __WINDOWS_386__, sizeof(void*) is not same as sizeof(UINT)! */
#if defined(STRICT) && !defined(__WINDOWS_386__)
typedef const void NEAR*        HANDLE;
#define DECLARE_HANDLE(name)    struct name##__ { int unused; }; \
                                typedef const struct name##__ NEAR* name
#define DECLARE_HANDLE32(name)  struct name##__ { int unused; }; \
                                typedef const struct name##__ FAR* name
#else
typedef UINT                    HANDLE;
#define DECLARE_HANDLE(name)    typedef UINT name
#define DECLARE_HANDLE32(name)  typedef DWORD name
#endif

typedef HANDLE      *PHANDLE;
typedef HANDLE NEAR *SPHANDLE;
typedef HANDLE FAR  *LPHANDLE;
typedef HANDLE      HGLOBAL;
typedef HANDLE      HLOCAL;
typedef HANDLE      GLOBALHANDLE;
typedef HANDLE      LOCALHANDLE;
typedef UINT        ATOM;

#ifdef STRICT
typedef void (CALLBACK      *FARPROC)(void);
typedef void (NEAR PASCAL   *NEARPROC)(void);
#else
typedef int (CALLBACK       *FARPROC)();
typedef int (NEAR PASCAL    *NEARPROC)();
#endif

DECLARE_HANDLE(HSTR);

DECLARE_HANDLE(HINSTANCE);
typedef HINSTANCE   HMODULE;

#ifndef NOKERNEL

#if defined(STRICT) && !defined(__WINDOWS_386__)
int PASCAL WinMain(HINSTANCE,HINSTANCE,LPSTR,int);
#endif

DWORD   WINAPI GetVersion(void);
DWORD   WINAPI GetFreeSpace(UINT);
UINT    WINAPI GetCurrentPDB(void);
UINT    WINAPI GetWindowsDirectory(LPSTR,UINT);
UINT    WINAPI GetSystemDirectory(LPSTR,UINT);

#if (WINVER >= 0x030a)
UINT    WINAPI GetFreeSystemResources(UINT);
#define GFSR_SYSTEMRESOURCES   0x0000
#define GFSR_GDIRESOURCES      0x0001
#define GFSR_USERRESOURCES     0x0002
#endif

DWORD   WINAPI GetWinFlags(void);

#define WF_PMODE        0x0001
#define WF_CPU286       0x0002
#define WF_CPU386       0x0004
#define WF_CPU486       0x0008
#define WF_STANDARD     0x0010
#define WF_WIN286       0x0010
#define WF_ENHANCED     0x0020
#define WF_WIN386       0x0020
#define WF_CPU086       0x0040
#define WF_CPU186       0x0080
#define WF_LARGEFRAME   0x0100
#define WF_SMALLFRAME   0x0200
#define WF_80x87        0x0400
#define WF_PAGING       0x0800
#define WF_WLO          0x8000

LPSTR   WINAPI GetDOSEnvironment(void);
DWORD   WINAPI GetCurrentTime(void);
DWORD   WINAPI GetTickCount(void);
DWORD   WINAPI GetTimerResolution(void);

#if (WINVER >= 0x030a)
#ifndef NOLOGERROR
void    WINAPI LogError(UINT,void FAR*);
void    WINAPI LogParamError(UINT,FARPROC,void FAR*);

#define ERR_WARNING             0x8000
#define ERR_PARAM               0x4000
#define ERR_SIZE_MASK           0x3000
#define ERR_BYTE                0x1000
#define ERR_WORD                0x2000
#define ERR_DWORD               0x3000
#define ERR_BAD_VALUE           0x6001
#define ERR_BAD_FLAGS           0x6002
#define ERR_BAD_INDEX           0x6003
#define ERR_BAD_DVALUE          0x7004
#define ERR_BAD_DFLAGS          0x7005
#define ERR_BAD_DINDEX          0x7006
#define ERR_BAD_PTR             0x7007
#define ERR_BAD_FUNC_PTR        0x7008
#define ERR_BAD_SELECTOR        0x6009
#define ERR_BAD_STRING_PTR      0x700a
#define ERR_BAD_HANDLE          0x600b
#define ERR_BAD_HINSTANCE       0x6020
#define ERR_BAD_HMODULE         0x6021
#define ERR_BAD_GLOBAL_HANDLE   0x6022
#define ERR_BAD_LOCAL_HANDLE    0x6023
#define ERR_BAD_ATOM            0x6024
#define ERR_BAD_HFILE           0x6025
#define ERR_BAD_HWND            0x6040
#define ERR_BAD_HMENU           0x6041
#define ERR_BAD_HCURSOR         0x6042
#define ERR_BAD_HICON           0x6043
#define ERR_BAD_HDWP            0x6044
#define ERR_BAD_CID             0x6045
#define ERR_BAD_HDRVR           0x6046
#define ERR_BAD_COORDS          0x7060
#define ERR_BAD_GDI_OBJECT      0x6061
#define ERR_BAD_HDC             0x6062
#define ERR_BAD_HPEN            0x6063
#define ERR_BAD_HFONT           0x6064
#define ERR_BAD_HBRUSH          0x6065
#define ERR_BAD_HBITMAP         0x6066
#define ERR_BAD_HRGN            0x6067
#define ERR_BAD_HPALETTE        0x6068
#define ERR_BAD_HMETAFILE       0x6069
#define ERR_GALLOC              0x0001
#define ERR_GREALLOC            0x0002
#define ERR_GLOCK               0x0003
#define ERR_LALLOC              0x0004
#define ERR_LREALLOC            0x0005
#define ERR_LLOCK               0x0006
#define ERR_ALLOCRES            0x0007
#define ERR_LOCKRES             0x0008
#define ERR_LOADMODULE          0x0009
#define ERR_CREATEDLG           0x0040
#define ERR_CREATEDLG2          0x0041
#define ERR_REGISTERCLASS       0x0042
#define ERR_DCBUSY              0x0043
#define ERR_CREATEWND           0x0044
#define ERR_STRUCEXTRA          0x0045
#define ERR_LOADSTR             0x0046
#define ERR_LOADMENU            0x0047
#define ERR_NESTEDBEGINPAINT    0x0048
#define ERR_BADINDEX            0x0049
#define ERR_CREATEMENU          0x004a
#define ERR_CREATEDC            0x0080
#define ERR_CREATEMETA          0x0081
#define ERR_DELOBJSELECTED      0x0082
#define ERR_SELBITMAP           0x0083

typedef struct tagWINDEBUGINFO {
    UINT    flags;
    DWORD   dwOptions;
    DWORD   dwFilter;
    char    achAllocModule[8];
    DWORD   dwAllocBreak;
    DWORD   dwAllocCount;
} WINDEBUGINFO;

BOOL    WINAPI GetWinDebugInfo(WINDEBUGINFO FAR*,UINT);
BOOL    WINAPI SetWinDebugInfo(const WINDEBUGINFO FAR*);

void    FAR __cdecl DebugOutput(UINT,LPCSTR,...);

#define WDI_OPTIONS         0x0001
#define WDI_FILTER          0x0002
#define WDI_ALLOCBREAK      0x0004

#define DBO_CHECKHEAP       0x0001
#define DBO_BUFFERFILL      0x0004
#define DBO_DISABLEGPTRAPPING 0x0010
#define DBO_CHECKFREE       0x0020
#define DBO_SILENT          0x8000
#define DBO_TRACEBREAK      0x2000
#define DBO_WARNINGBREAK    0x1000
#define DBO_NOERRORBREAK    0x0800
#define DBO_NOFATALBREAK    0x0400
#define DBO_INT3BREAK       0x0100

#define DBF_TRACE           0x0000
#define DBF_WARNING         0x4000
#define DBF_ERROR           0x8000
#define DBF_FATAL           0xc000

#define DBF_KERNEL          0x1000
#define DBF_KRN_MEMMAN      0x0001
#define DBF_KRN_LOADMODULE  0x0002
#define DBF_KRN_SEGMENTLOAD 0x0004
#define DBF_USER            0x0800
#define DBF_GDI             0x0400
#define DBF_MMSYSTEM        0x0040
#define DBF_PENWIN          0x0020
#define DBF_APPLICATION     0x0008
#define DBF_DRIVER          0x0010
#endif
#endif

void    WINAPI FatalExit(int);
void    WINAPI FatalAppExit(UINT,LPCSTR);
BOOL    WINAPI ExitWindows(DWORD,UINT);

#define EW_RESTARTWINDOWS 0x42
#if (WINVER >= 0x030a)
#define EW_REBOOTSYSTEM   0x43

BOOL    WINAPI ExitWindowsExec(LPCSTR, LPCSTR);
#endif

void    WINAPI DebugBreak(void);
void    WINAPI OutputDebugString(LPCSTR);
UINT    WINAPI SetErrorMode(UINT);

#define SEM_FAILCRITICALERRORS  0x0001
#define SEM_NOGPFAULTERRORBOX   0x0002
#define SEM_NOOPENFILEERRORBOX  0x8000


#if (WINVER >= 0x030a)
BOOL    WINAPI IsBadReadPtr(const void FAR*,UINT);
BOOL    WINAPI IsBadWritePtr(void FAR*,UINT);
BOOL    WINAPI IsBadHugeReadPtr(const void __huge*,DWORD);
BOOL    WINAPI IsBadHugeWritePtr(void __huge*,DWORD);
BOOL    WINAPI IsBadCodePtr(FARPROC);
BOOL    WINAPI IsBadStringPtr(const void FAR*,UINT);
#endif

#ifndef NOPROFILER
int     WINAPI ProfInsChk(void);
void    WINAPI ProfSetup(int,int);
void    WINAPI ProfSampRate(int,int);
void    WINAPI ProfStart(void);
void    WINAPI ProfStop(void);
void    WINAPI ProfClear(void);
void    WINAPI ProfFlush(void);
void    WINAPI ProfFinish(void);
#endif

typedef int     CATCHBUF[9];
typedef int FAR *LPCATCHBUF;

int     WINAPI Catch(int FAR*);
void    WINAPI Throw(const int FAR*,int);
void    WINAPI SwitchStackBack(void);
void    WINAPI SwitchStackTo(UINT, UINT, UINT);

#define HINSTANCE_ERROR ((HINSTANCE)32)

HINSTANCE   WINAPI LoadModule(LPCSTR,LPVOID);
BOOL        WINAPI FreeModule(HINSTANCE);
HINSTANCE   WINAPI LoadLibrary(LPCSTR);
void        WINAPI FreeLibrary(HINSTANCE);

UINT    WINAPI WinExec(LPCSTR, UINT);
HMODULE WINAPI GetModuleHandle(LPCSTR);
int     WINAPI GetModuleUsage(HINSTANCE);
int     WINAPI GetModuleFileName(HINSTANCE,LPSTR,int);
FARPROC WINAPI GetProcAddress(HINSTANCE, LPCSTR);
int     WINAPI GetInstanceData(HINSTANCE,BYTE NEAR *,int);
HGLOBAL WINAPI GetCodeHandle(FARPROC);

typedef struct tagSEGINFO {
    UINT    offSegment;
    UINT    cbSegment;
    UINT    flags;
    UINT    cbAlloc;
    HGLOBAL h;
    UINT    alignShift;
    UINT    reserved[2];
} SEGINFO, FAR *LPSEGINFO;

void    WINAPI GetCodeInfo(FARPROC,SEGINFO FAR*);
FARPROC WINAPI MakeProcInstance(FARPROC,HINSTANCE);
void    WINAPI FreeProcInstance(FARPROC);
LONG    WINAPI SetSwapAreaSize(UINT);
void    WINAPI SwapRecording(UINT);
void    WINAPI ValidateCodeSegments(void);

#define WEP_SYSTEM_EXIT 1
#define WEP_FREE_DLL    0

#endif

DECLARE_HANDLE(HTASK);

#ifndef NOKERNEL

UINT    WINAPI GetNumTasks(void);

#if (WINVER >= 0x030a)
BOOL    WINAPI IsTask(HTASK);
#endif

HTASK   WINAPI GetCurrentTask(void);
void    WINAPI Yield(void);
void    WINAPI DirectedYield(HTASK);

#ifndef NOMEMMGR

#define GMEM_FIXED          0x0000
#define GMEM_MOVEABLE       0x0002
#define GMEM_NOCOMPACT      0x0010
#define GMEM_NODISCARD      0x0020
#define GMEM_ZEROINIT       0x0040
#define GMEM_MODIFY         0x0080
#define GMEM_DISCARDABLE    0x0100
#define GMEM_NOT_BANKED     0x1000
#define GMEM_SHARE          0x2000
#define GMEM_DDESHARE       0x2000
#define GMEM_NOTIFY         0x4000
#define GMEM_LOWER          GMEM_NOT_BANKED
#define GHND                (GMEM_MOVEABLE | GMEM_ZEROINIT)
#define GPTR                (GMEM_FIXED | GMEM_ZEROINIT)

#define GlobalDiscard(h)    GlobalReAlloc(h, 0L, GMEM_MOVEABLE)

HGLOBAL WINAPI GlobalAlloc(UINT,DWORD);
HGLOBAL WINAPI GlobalReAlloc(HGLOBAL,DWORD,UINT);
HGLOBAL WINAPI GlobalFree(HGLOBAL);
DWORD   WINAPI GlobalDosAlloc(DWORD);
UINT    WINAPI GlobalDosFree(UINT);

#ifdef STRICT
void FAR* WINAPI GlobalLock(HGLOBAL);
#else
char FAR* WINAPI GlobalLock(HGLOBAL);
#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?