Implemented enough of the Presentation Manager API to draw a blank window.

This commit is contained in:
Ryan C. Gordon committed 2018-01-15 02:33:27 -05:00
1 parent 40b9b9e141
commit b6c47ee91d
12 files changed
+2638 -9

No files matched your search

+4
View File
@@ -64,6 +64,9 @@ elseif(CURSES_HAVE_CURSES_H)
add_definitions(-DHAVE_CURSES_H)
endif()
# !!! FIXME
include_directories("/usr/local/include/SDL2")
foreach(_I doscalls;msg;nls;quecalls;viocalls;kbdcalls;sesmgr;som;pmwin;pmshapi;pmgpi;tcpip32)
add_library(${_I} SHARED "native/${_I}.c")
set_target_properties(${_I} PROPERTIES COMPILE_FLAGS "-m32")
@@ -73,6 +76,7 @@ endforeach()
target_link_libraries(doscalls "pthread")
# FIXME target_link_libraries(viocalls ${CURSES_LIBRARIES})
target_link_libraries(viocalls ncursesw)
target_link_libraries(pmwin "${CMAKE_CURRENT_SOURCE_DIR}/libSDL2-2.0.so.0")
add_executable(lx_dump lx_dump.c)
BIN
View File
Binary file not shown.
+7 -1
View File
@@ -2046,7 +2046,10 @@ static __attribute__((noreturn)) void handleThreadLocalStorageAccess(const int s
: "=a" (ptib2)
: "eax" (gregs[REG_FS])
);
uint32 *tls = (uint32 *) (ptib2 + 1); // The thread's TLS data is stored right after its TIB2 struct.
// The thread's TLS data is stored in LxPostTIB, right after its TIB2 struct.
LxPostTIB *posttib = (LxPostTIB *) (ptib2 + 1);
uint32 *tls = posttib->tls;
tls += slot;
//printf("We wanted to access thread %p TLS slot %d (currently holds %u)\n", tls - slot, slot, (uint) *tls);
@@ -2151,6 +2154,9 @@ int main(int argc, char **argv, char **envp)
if (getenv("TRACE_NATIVE"))
GLoaderState->trace_native = 1;
if (getenv("TRACE_EVENTS"))
GLoaderState->trace_events = 1;
unsigned int segment = 0;
__asm__ __volatile__ ( "movw %%cs, %%ax \n\t" : "=a" (segment) );
GLoaderState->original_cs = segment;
+9 -2
View File
@@ -202,8 +202,14 @@ typedef struct LxPIB
#pragma pack(pop)
// We put the 128 bytes of TLS slots after the TIB structs.
#define LXTIBSIZE (sizeof (LxTIB) + sizeof (LxTIB2) + 128)
// We put the 128 bytes of TLS slots (etc) after the TIB structs.
typedef struct LxPostTIB
{
uint32 tls[32];
void *anchor_block;
} LxPostTIB;
#define LXTIBSIZE (sizeof (LxTIB) + sizeof (LxTIB2) + sizeof (LxPostTIB))
typedef struct LxLoaderState
{
@@ -214,6 +220,7 @@ typedef struct LxLoaderState
int subprocess;
int running;
int trace_native;
int trace_events;
uint16 original_cs;
uint16 original_ds;
uint16 original_es;
+6
View File
@@ -25,6 +25,12 @@ static LxLoaderState *GLoaderState = NULL;
#define TRACE_NATIVE(...) do {} while (0)
#endif
#if 1
#define TRACE_EVENT(...) do { if (GLoaderState->trace_events) { fprintf(stderr, "2INE TRACE [%lu]: ", (unsigned long) pthread_self()); fprintf(stderr, __VA_ARGS__); fprintf(stderr, "\n"); } } while (0)
#else
#define TRACE_EVENT(...) do {} while (0)
#endif
OS2EXPORT const LxExport * lxNativeModuleInit(LxLoaderState *lx_state, uint32 *lx_num_exports);
void OS2EXPORT lxNativeModuleDeinit(void);
+8
View File
@@ -57,6 +57,7 @@ typedef uint8_t BYTE, *PBYTE;
// !!! FIXME: refactor and mutex a bunch of stuff...if it has to be a 32-bit
// !!! FIXME: int, it needs to be an index into a resizable array, but at the
// !!! FIXME: native word size, these handles can just be pointers cast to ints.
// !!! FIXME: alternately: guarantee all handles are in the bottom 4 gigabytes?
typedef uint16_t SHANDLE, *PSHANDLE;
typedef uint32_t LHANDLE, *PLHANDLE;
typedef LHANDLE HANDLE, *PHANDLE;
@@ -71,11 +72,18 @@ typedef HANDLE PID, *PPID;
typedef HANDLE TID, *PTID;
typedef SHANDLE HVIO, *PHVIO;
typedef SHANDLE HKBD, *PHKBD;
typedef PCHAR PSZ;
typedef PCHAR PCH;
typedef int (APIENTRY *PFN)(void);
typedef ULONG ERRORID;
#define NULLHANDLE 0
#define TRUE 1
#define FALSE 0
#ifdef __cplusplus
}
#endif
+1 -6
View File
@@ -2,17 +2,12 @@
#define _INCL_PMGPI_H_
#include "os2types.h"
#include "pmwin.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct
{
int32_t x;
int32_t y;
} POINTL, *PPOINTL;
OS2EXPORT BOOL OS2API GpiQueryTextBox(HPS hps, LONG lCount1, PCH pchString, LONG lCount2, PPOINTL aptlPoints);
#ifdef __cplusplus
+1656
View File
File diff suppressed because it is too large. Load diff
+897
View File
@@ -0,0 +1,897 @@
#ifndef _INCL_PMWIN_H_
#define _INCL_PMWIN_H_
#include "os2types.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef HANDLE HAB, *PHAB;
typedef HANDLE HMQ, *PHMQ;
typedef HANDLE HWND, *PHWND;
typedef PVOID MPARAM, *PMPARAM;
typedef PVOID MRESULT, *PMRESULT;
typedef struct
{
LONG x;
LONG y;
} POINTL, *PPOINTL;
typedef struct
{
LONG xLeft;
LONG yBottom;
LONG xRight;
LONG yTop;
} RECTL, *PRECTL;
typedef struct
{
HWND hwnd;
ULONG msg;
MPARAM mp1;
MPARAM mp2;
ULONG time;
POINTL ptl;
ULONG reserved;
} QMSG, *PQMSG;
typedef MRESULT (OS2API FNWP)(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
typedef FNWP *PFNWP;
enum {
CS_MOVENOTIFY = 0x00000001,
CS_SIZEREDRAW = 0x00000004,
CS_HITTEST = 0x00000008,
CS_PUBLIC = 0x00000010,
CS_FRAME = 0x00000020,
CS_SYNCPAINT = 0x02000000,
CS_PARENTCLIP = 0x08000000,
CS_SAVEBITS = 0x04000000,
CS_CLIPSIBLINGS = 0x10000000,
CS_CLIPCHILDREN = 0x20000000
};
enum {
WS_VISIBLE = 0x80000000,
WS_DISABLED = 0x40000000,
WS_CLIPCHILDREN = 0x20000000,
WS_CLIPSIBLINGS = 0x10000000,
WS_PARENTCLIP = 0x08000000,
WS_SAVEBITS = 0x04000000,
WS_SYNCPAINT = 0x02000000,
WS_MINIMIZED = 0x01000000,
WS_MAXIMIZED = 0x00800000,
WS_ANIMATE = 0x00400000
};
// magic HWND identifiers
#define HWND_DESKTOP 1
#define HWND_OBJECT 2
#define HWND_TOP 3
#define HWND_BOTTOM 4
// built-in window classes (not real strings, like user classes would be here).
enum {
WC_FRAME = 0xFFFF0001,
WC_COMBOBOX = 0xFFFF0002,
WC_BUTTON = 0xFFFF0003,
WC_MENU = 0xFFFF0004,
WC_STATIC = 0xFFFF0005,
WC_ENTRYFIELD = 0xFFFF0006,
WC_LISTBOX = 0xFFFF0007,
WC_SCROLLBAR = 0xFFFF0008,
WC_TITLEBAR = 0xFFFF0009,
WC_MLE = 0xFFFF000A,
WC_APPSTAT = 0xFFFF0010,
WC_KBDSTAT = 0xFFFF0011,
WC_PECIC = 0xFFFF0012,
WC_DBE_KKPOPUP = 0xFFFF0013,
WC_SPINBUTTON = 0xFFFF0020,
WC_CONTAINER = 0xFFFF0025,
WC_SLIDER = 0xFFFF0026,
WC_VALUESET = 0xFFFF0027,
WC_NOTEBOOK = 0xFFFF0028,
WC_CIRCULARSLIDER = 0xFFFF0041
};
// Window messages...
enum {
WM_NULL = 0x0000,
WM_CREATE = 0x0001,
WM_DESTROY = 0x0002,
WM_ENABLE = 0x0004,
WM_SHOW = 0x0005,
WM_MOVE = 0x0006,
WM_SIZE = 0x0007,
WM_ADJUSTWINDOWPOS = 0x0008,
WM_CALCVALIDRECTS = 0x0009,
WM_SETWINDOWPARAMS = 0x000a,
WM_QUERYWINDOWPARAMS = 0x000b,
WM_HITTEST = 0x000c,
WM_ACTIVATE = 0x000d,
WM_SETFOCUS = 0x000f,
WM_SETSELECTION = 0x0010,
WM_PPAINT = 0x0011,
WM_PSETFOCUS = 0x0012,
WM_PSYSCOLORCHANGE = 0x0013,
WM_PSIZE = 0x0014,
WM_PACTIVATE = 0x0015,
WM_PCONTROL = 0x0016,
WM_COMMAND = 0x0020,
WM_SYSCOMMAND = 0x0021,
WM_HELP = 0x0022,
WM_PAINT = 0x0023,
WM_TIMER = 0x0024,
WM_SEM1 = 0x0025,
WM_SEM2 = 0x0026,
WM_SEM3 = 0x0027,
WM_SEM4 = 0x0028,
WM_CLOSE = 0x0029,
WM_QUIT = 0x002a,
WM_SYSCOLORCHANGE = 0x002b,
WM_SYSVALUECHANGED = 0x002d,
WM_APPTERMINATENOTIFY = 0x002e,
WM_PRESPARAMCHANGED = 0x002f,
WM_CONTROL = 0x0030,
WM_VSCROLL = 0x0031,
WM_HSCROLL = 0x0032,
WM_INITMENU = 0x0033,
WM_MENUSELECT = 0x0034,
WM_MENUEND = 0x0035,
WM_DRAWITEM = 0x0036,
WM_MEASUREITEM = 0x0037,
WM_CONTROLPOINTER = 0x0038,
WM_QUERYDLGCODE = 0x003a,
WM_INITDLG = 0x003b,
WM_SUBSTITUTESTRING = 0x003c,
WM_MATCHMNEMONIC = 0x003d,
WM_SAVEAPPLICATION = 0x003e,
WM_FLASHWINDOW = 0x0040,
WM_FORMATFRAME = 0x0041,
WM_UPDATEFRAME = 0x0042,
WM_FOCUSCHANGE = 0x0043,
WM_SETBORDERSIZE = 0x0044,
WM_TRACKFRAME = 0x0045,
WM_MINMAXFRAME = 0x0046,
WM_SETICON = 0x0047,
WM_QUERYICON = 0x0048,
WM_SETACCELTABLE = 0x0049,
WM_QUERYACCELTABLE = 0x004a,
WM_TRANSLATEACCEL = 0x004b,
WM_QUERYTRACKINFO = 0x004c,
WM_QUERYBORDERSIZE = 0x004d,
WM_NEXTMENU = 0x004e,
WM_ERASEBACKGROUND = 0x004f,
WM_QUERYFRAMEINFO = 0x0050,
WM_QUERYFOCUSCHAIN = 0x0051,
WM_OWNERPOSCHANGE = 0x0052,
WM_CALCFRAMERECT = 0x0053,
WM_WINDOWPOSCHANGED = 0x0055,
WM_ADJUSTFRAMEPOS = 0x0056,
WM_QUERYFRAMECTLCOUNT = 0x0059,
WM_QUERYHELPINFO = 0x005B,
WM_SETHELPINFO = 0x005C,
WM_ERROR = 0x005D,
WM_REALIZEPALETTE = 0x005E,
WM_RENDERFMT = 0x0060,
WM_RENDERALLFMTS = 0x0061,
WM_DESTROYCLIPBOARD = 0x0062,
WM_PAINTCLIPBOARD = 0x0063,
WM_SIZECLIPBOARD = 0x0064,
WM_HSCROLLCLIPBOARD = 0x0065,
WM_VSCROLLCLIPBOARD = 0x0066,
WM_DRAWCLIPBOARD = 0x0067,
WM_MOUSEMOVE = 0x0070,
WM_BUTTON1DOWN = 0x0071,
WM_BUTTON1UP = 0x0072,
WM_BUTTON1DBLCLK = 0x0073,
WM_BUTTON2DOWN = 0x0074,
WM_BUTTON2UP = 0x0075,
WM_BUTTON2DBLCLK = 0x0076,
WM_BUTTON3DOWN = 0x0077,
WM_BUTTON3UP = 0x0078,
WM_BUTTON3DBLCLK = 0x0079,
WM_CHAR = 0x007a,
WM_VIOCHAR = 0x007b,
WM_JOURNALNOTIFY = 0x007c,
WM_MOUSEMAP = 0x007D,
WM_VRNDISABLED = 0x007e,
WM_VRNENABLED = 0x007f,
WM_DDE_INITIATE = 0x00A0,
WM_DDE_REQUEST = 0x00A1,
WM_DDE_ACK = 0x00A2,
WM_DDE_DATA = 0x00A3,
WM_DDE_ADVISE = 0x00A4,
WM_DDE_UNADVISE = 0x00A5,
WM_DDE_POKE = 0x00A6,
WM_DDE_EXECUTE = 0x00A7,
WM_DDE_TERMINATE = 0x00A8,
WM_DDE_INITIATEACK = 0x00A9,
WM_QUERYCONVERTPOS = 0x00b0,
WM_MSGBOXINIT = 0x010E,
WM_MSGBOXDISMISS = 0x010F,
WM_CTLCOLORCHANGE = 0x0129,
WM_QUERYCTLTYPE = 0x0130,
WM_CHORD = 0x0410,
WM_BUTTON1MOTIONSTART = 0x0411,
WM_BUTTON1MOTIONEND = 0x0412,
WM_BUTTON1CLICK = 0x0413,
WM_BUTTON2MOTIONSTART = 0x0414,
WM_BUTTON2MOTIONEND = 0x0415,
WM_BUTTON2CLICK = 0x0416,
WM_BUTTON3MOTIONSTART = 0x0417,
WM_BUTTON3MOTIONEND = 0x0418,
WM_BUTTON3CLICK = 0x0419,
WM_BEGINDRAG = 0x0420,
WM_ENDDRAG = 0x0421,
WM_SINGLESELECT = 0x0422,
WM_OPEN = 0x0423,
WM_CONTEXTMENU = 0x0424,
WM_CONTEXTHELP = 0x0425,
WM_TEXTEDIT = 0x0426,
WM_BEGINSELECT = 0x0427,
WM_ENDSELECT = 0x0428,
WM_PICKUP = 0x0429,
WM_SEMANTICEVENT = 0x0490,
WM_USER = 0x1000,
};
// used by WM_ADJUSTWINDOWPOS, etc.
enum {
SWP_SIZE = 0x0001,
SWP_MOVE = 0x0002,
SWP_ZORDER = 0x0004,
SWP_SHOW = 0x0008,
SWP_HIDE = 0x0010,
SWP_NOREDRAW = 0x0020,
SWP_NOADJUST = 0x0040,
SWP_ACTIVATE = 0x0080,
SWP_DEACTIVATE = 0x0100,
SWP_EXTSTATECHANGE = 0x0200,
SWP_MINIMIZE = 0x0400,
SWP_MAXIMIZE = 0x0800,
SWP_RESTORE = 0x1000,
SWP_FOCUSACTIVATE = 0x2000,
SWP_FOCUSDEACTIVATE = 0x4000,
SWP_NOAUTOCLOSE = 0x8000
};
typedef struct
{
ULONG fl;
LONG cy;
LONG cx;
LONG y;
LONG x;
HWND hwndInsertBehind;
HWND hwnd;
ULONG ulReserved1;
ULONG ulReserved2;
} SWP, *PSWP;
// used by WM_HITTEST
enum {
HT_NORMAL = 0,
HT_TRANSPARENT = -1,
HT_DISCARD = -2,
HT_ERROR = -3
};
// Built-in window class specific data...
// frame control IDs.
enum {
FID_SYSMENU = 0x8002,
FID_TITLEBAR = 0x8003,
FID_MINMAX = 0x8004,
FID_MENU = 0x8005,
FID_VERTSCROLL = 0x8006,
FID_HORZSCROLL = 0x8007,
FID_CLIENT = 0x8008,
FID_DBE_APPSTAT = 0x8010,
FID_DBE_KBDSTAT = 0x8011,
FID_DBE_PECIC = 0x8012,
FID_DBE_KKPOPUP = 0x8013
};
// OS/2's SDK packs these to 2 because 16-bit and 32-bit code share the same structs. :/
#pragma pack(push, 2)
typedef struct
{
USHORT cb;
ULONG flCreateFlags;
USHORT hmodResources;
USHORT idResources;
} FRAMECDATA, *PFRAMECDATA;
#pragma pack(pop)
// Error codes...
enum {
PMERR_OK = 0x0000,
PMERR_INVALID_HWND = 0x1001,
PMERR_INVALID_HMQ = 0x1002,
PMERR_PARAMETER_OUT_OF_RANGE = 0x1003,
PMERR_WINDOW_LOCK_UNDERFLOW = 0x1004,
PMERR_WINDOW_LOCK_OVERFLOW = 0x1005,
PMERR_BAD_WINDOW_LOCK_COUNT = 0x1006,
PMERR_WINDOW_NOT_LOCKED = 0x1007,
PMERR_INVALID_SELECTOR = 0x1008,
PMERR_CALL_FROM_WRONG_THREAD = 0x1009,
PMERR_RESOURCE_NOT_FOUND = 0x100A,
PMERR_INVALID_STRING_PARM = 0x100B,
PMERR_INVALID_HHEAP = 0x100C,
PMERR_INVALID_HEAP_POINTER = 0x100D,
PMERR_INVALID_HEAP_SIZE_PARM = 0x100E,
PMERR_INVALID_HEAP_SIZE = 0x100F,
PMERR_INVALID_HEAP_SIZE_WORD = 0x1010,
PMERR_HEAP_OUT_OF_MEMORY = 0x1011,
PMERR_HEAP_MAX_SIZE_REACHED = 0x1012,
PMERR_INVALID_HATOMTBL = 0x1013,
PMERR_INVALID_ATOM = 0x1014,
PMERR_INVALID_ATOM_NAME = 0x1015,
PMERR_INVALID_INTEGER_ATOM = 0x1016,
PMERR_ATOM_NAME_NOT_FOUND = 0x1017,
PMERR_QUEUE_TOO_LARGE = 0x1018,
PMERR_INVALID_FLAG = 0x1019,
PMERR_INVALID_HACCEL = 0x101A,
PMERR_INVALID_HPTR = 0x101B,
PMERR_INVALID_HENUM = 0x101C,
PMERR_INVALID_SRC_CODEPAGE = 0x101D,
PMERR_INVALID_DST_CODEPAGE = 0x101E,
PMERR_UNKNOWN_COMPONENT_ID = 0x101f,
PMERR_UNKNOWN_ERROR_CODE = 0x1020,
PMERR_SEVERITY_LEVELS = 0x1021,
PMERR_INVALID_RESOURCE_FORMAT = 0x1034,
PMERR_NO_MSG_QUEUE = 0x1036,
PMERR_CANNOT_SET_FOCUS = 0x1037,
PMERR_QUEUE_FULL = 0x1038,
PMERR_LIBRARY_LOAD_FAILED = 0x1039,
PMERR_PROCEDURE_LOAD_FAILED = 0x103A,
PMERR_LIBRARY_DELETE_FAILED = 0x103B,
PMERR_PROCEDURE_DELETE_FAILED = 0x103C,
PMERR_ARRAY_TOO_LARGE = 0x103D,
PMERR_ARRAY_TOO_SMALL = 0x103E,
PMERR_DATATYPE_ENTRY_BAD_INDEX = 0x103F,
PMERR_DATATYPE_ENTRY_CTL_BAD = 0x1040,
PMERR_DATATYPE_ENTRY_CTL_MISS = 0x1041,
PMERR_DATATYPE_ENTRY_INVALID = 0x1042,
PMERR_DATATYPE_ENTRY_NOT_NUM = 0x1043,
PMERR_DATATYPE_ENTRY_NOT_OFF = 0x1044,
PMERR_DATATYPE_INVALID = 0x1045,
PMERR_DATATYPE_NOT_UNIQUE = 0x1046,
PMERR_DATATYPE_TOO_LONG = 0x1047,
PMERR_DATATYPE_TOO_SMALL = 0x1048,
PMERR_DIRECTION_INVALID = 0x1049,
PMERR_INVALID_HAB = 0x104A,
PMERR_INVALID_HSTRUCT = 0x104D,
PMERR_LENGTH_TOO_SMALL = 0x104E,
PMERR_MSGID_TOO_SMALL = 0x104F,
PMERR_NO_HANDLE_ALLOC = 0x1050,
PMERR_NOT_IN_A_PM_SESSION = 0x1051,
PMERR_MSG_QUEUE_ALREADY_EXISTS = 0x1052,
PMERR_SEND_MSG_TIMEOUT = 0x1053,
PMERR_SEND_MSG_FAILED = 0x1054,
PMERR_OLD_RESOURCE = 0x1055,
PMERR_INVALID_PIB = 0x1101,
PMERR_INSUFF_SPACE_TO_ADD = 0x1102,
PMERR_INVALID_GROUP_HANDLE = 0x1103,
PMERR_DUPLICATE_TITLE = 0x1104,
PMERR_INVALID_TITLE = 0x1105,
PMERR_HANDLE_NOT_IN_GROUP = 0x1107,
PMERR_INVALID_TARGET_HANDLE = 0x1106,
PMERR_INVALID_PATH_STATEMENT = 0x1108,
PMERR_NO_PROGRAM_FOUND = 0x1109,
PMERR_INVALID_BUFFER_SIZE = 0x110A,
PMERR_BUFFER_TOO_SMALL = 0x110B,
PMERR_PL_INITIALISATION_FAIL = 0x110C,
PMERR_CANT_DESTROY_SYS_GROUP = 0x110D,
PMERR_INVALID_TYPE_CHANGE = 0x110E,
PMERR_INVALID_PROGRAM_HANDLE = 0x110F,
PMERR_NOT_CURRENT_PL_VERSION = 0x1110,
PMERR_INVALID_CIRCULAR_REF = 0x1111,
PMERR_MEMORY_ALLOCATION_ERR = 0x1112,
PMERR_MEMORY_DEALLOCATION_ERR = 0x1113,
PMERR_TASK_HEADER_TOO_BIG = 0x1114,
PMERR_INVALID_INI_FILE_HANDLE = 0x1115,
PMERR_MEMORY_SHARE = 0x1116,
PMERR_OPEN_QUEUE = 0x1117,
PMERR_CREATE_QUEUE = 0x1118,
PMERR_WRITE_QUEUE = 0x1119,
PMERR_READ_QUEUE = 0x111A,
PMERR_CALL_NOT_EXECUTED = 0x111B,
PMERR_UNKNOWN_APIPKT = 0x111C,
PMERR_INITHREAD_EXISTS = 0x111D,
PMERR_CREATE_THREAD = 0x111E,
PMERR_NO_HK_PROFILE_INSTALLED = 0x111F,
PMERR_INVALID_DIRECTORY = 0x1120,
PMERR_WILDCARD_IN_FILENAME = 0x1121,
PMERR_FILENAME_BUFFER_FULL = 0x1122,
PMERR_FILENAME_TOO_LONG = 0x1123,
PMERR_INI_FILE_IS_SYS_OR_USER = 0x1124,
PMERR_BROADCAST_PLMSG = 0x1125,
PMERR_190_INIT_DONE = 0x1126,
PMERR_HMOD_FOR_PMSHAPI = 0x1127,
PMERR_SET_HK_PROFILE = 0x1128,
PMERR_API_NOT_ALLOWED = 0x1129,
PMERR_INI_STILL_OPEN = 0x112A,
PMERR_PROGDETAILS_NOT_IN_INI = 0x112B,
PMERR_PIBSTRUCT_NOT_IN_INI = 0x112C,
PMERR_INVALID_DISKPROGDETAILS = 0x112D,
PMERR_PROGDETAILS_READ_FAILURE = 0x112E,
PMERR_PROGDETAILS_WRITE_FAILURE = 0x112F,
PMERR_PROGDETAILS_QSIZE_FAILURE = 0x1130,
PMERR_INVALID_PROGDETAILS = 0x1131,
PMERR_SHEPROFILEHOOK_NOT_FOUND = 0x1132,
PMERR_190PLCONVERTED = 0x1133,
PMERR_FAILED_TO_CONVERT_INI_PL = 0x1134,
PMERR_PMSHAPI_NOT_INITIALISED = 0x1135,
PMERR_INVALID_SHELL_API_HOOK_ID = 0x1136,
PMERR_DOS_ERROR = 0x1200,
PMERR_NO_SPACE = 0x1201,
PMERR_INVALID_SWITCH_HANDLE = 0x1202,
PMERR_NO_HANDLE = 0x1203,
PMERR_INVALID_PROCESS_ID = 0x1204,
PMERR_NOT_SHELL = 0x1205,
PMERR_INVALID_WINDOW = 0x1206,
PMERR_INVALID_POST_MSG = 0x1207,
PMERR_INVALID_PARAMETERS = 0x1208,
PMERR_INVALID_PROGRAM_TYPE = 0x1209,
PMERR_NOT_EXTENDED_FOCUS = 0x120A,
PMERR_INVALID_SESSION_ID = 0x120B,
PMERR_SMG_INVALID_ICON_FILE = 0x120C,
PMERR_SMG_ICON_NOT_CREATED = 0x120D,
PMERR_SHL_DEBUG = 0x120E,
PMERR_OPENING_INI_FILE = 0x1301,
PMERR_INI_FILE_CORRUPT = 0x1302,
PMERR_INVALID_PARM = 0x1303,
PMERR_NOT_IN_IDX = 0x1304,
PMERR_NO_ENTRIES_IN_GROUP = 0x1305,
PMERR_INI_WRITE_FAIL = 0x1306,
PMERR_IDX_FULL = 0x1307,
PMERR_INI_PROTECTED = 0x1308,
PMERR_MEMORY_ALLOC = 0x1309,
PMERR_INI_INIT_ALREADY_DONE = 0x130A,
PMERR_INVALID_INTEGER = 0x130B,
PMERR_INVALID_ASCIIZ = 0x130C,
PMERR_CAN_NOT_CALL_SPOOLER = 0x130D,
PMERR_VALIDATION_REJECTED = PMERR_CAN_NOT_CALL_SPOOLER,
PMERR_WARNING_WINDOW_NOT_KILLED = 0x1401,
PMERR_ERROR_INVALID_WINDOW = 0x1402,
PMERR_ALREADY_INITIALIZED = 0x1403,
PMERR_MSG_PROG_NO_MOU = 0x1405,
PMERR_MSG_PROG_NON_RECOV = 0x1406,
PMERR_WINCONV_INVALID_PATH = 0x1407,
PMERR_PI_NOT_INITIALISED = 0x1408,
PMERR_PL_NOT_INITIALISED = 0x1409,
PMERR_NO_TASK_MANAGER = 0x140A,
PMERR_SAVE_NOT_IN_PROGRESS = 0x140B,
PMERR_NO_STACK_SPACE = 0x140C,
PMERR_INVALID_COLR_FIELD = 0x140d,
PMERR_INVALID_COLR_VALUE = 0x140e,
PMERR_COLR_WRITE = 0x140f,
PMERR_TARGET_FILE_EXISTS = 0x1501,
PMERR_SOURCE_SAME_AS_TARGET = 0x1502,
PMERR_SOURCE_FILE_NOT_FOUND = 0x1503,
PMERR_INVALID_NEW_PATH = 0x1504,
PMERR_TARGET_FILE_NOT_FOUND = 0x1505,
PMERR_INVALID_DRIVE_NUMBER = 0x1506,
PMERR_NAME_TOO_LONG = 0x1507,
PMERR_NOT_ENOUGH_ROOM_ON_DISK = 0x1508,
PMERR_NOT_ENOUGH_MEM = 0x1509,
PMERR_LOG_DRV_DOES_NOT_EXIST = 0x150B,
PMERR_INVALID_DRIVE = 0x150C,
PMERR_ACCESS_DENIED = 0x150D,
PMERR_NO_FIRST_SLASH = 0x150E,
PMERR_READ_ONLY_FILE = 0x150F,
PMERR_GROUP_PROTECTED = 0x151F,
PMERR_INVALID_PROGRAM_CATEGORY = 0x152F,
PMERR_INVALID_APPL = 0x1530,
PMERR_CANNOT_START = 0x1531,
PMERR_STARTED_IN_BACKGROUND = 0x1532,
PMERR_INVALID_HAPP = 0x1533,
PMERR_CANNOT_STOP = 0x1534,
PMERR_INTERNAL_ERROR_1 = 0x1601,
PMERR_INTERNAL_ERROR_2 = 0x1602,
PMERR_INTERNAL_ERROR_3 = 0x1603,
PMERR_INTERNAL_ERROR_4 = 0x1604,
PMERR_INTERNAL_ERROR_5 = 0x1605,
PMERR_INTERNAL_ERROR_6 = 0x1606,
PMERR_INTERNAL_ERROR_7 = 0x1607,
PMERR_INTERNAL_ERROR_8 = 0x1608,
PMERR_INTERNAL_ERROR_9 = 0x1609,
PMERR_INTERNAL_ERROR_10 = 0x160A,
PMERR_INTERNAL_ERROR_11 = 0x160B,
PMERR_INTERNAL_ERROR_12 = 0x160C,
PMERR_INTERNAL_ERROR_13 = 0x160D,
PMERR_INTERNAL_ERROR_14 = 0x160E,
PMERR_INTERNAL_ERROR_15 = 0x160F,
PMERR_INTERNAL_ERROR_16 = 0x1610,
PMERR_INTERNAL_ERROR_17 = 0x1611,
PMERR_INTERNAL_ERROR_18 = 0x1612,
PMERR_INTERNAL_ERROR_19 = 0x1613,
PMERR_INTERNAL_ERROR_20 = 0x1614,
PMERR_INTERNAL_ERROR_21 = 0x1615,
PMERR_INTERNAL_ERROR_22 = 0x1616,
PMERR_INTERNAL_ERROR_23 = 0x1617,
PMERR_INTERNAL_ERROR_24 = 0x1618,
PMERR_INTERNAL_ERROR_25 = 0x1619,
PMERR_INTERNAL_ERROR_26 = 0x161A,
PMERR_INTERNAL_ERROR_27 = 0x161B,
PMERR_INTERNAL_ERROR_28 = 0x161C,
PMERR_INTERNAL_ERROR_29 = 0x161D,
PMERR_INVALID_FREE_MESSAGE_ID = 0x1630,
PMERR_FUNCTION_NOT_SUPPORTED = 0x1641,
PMERR_INVALID_ARRAY_COUNT = 0x1642,
PMERR_INVALID_LENGTH = 0x1643,
PMERR_INVALID_BUNDLE_TYPE = 0x1644,
PMERR_INVALID_PARAMETER = 0x1645,
PMERR_INVALID_NUMBER_OF_PARMS = 0x1646,
PMERR_GREATER_THAN_64K = 0x1647,
PMERR_INVALID_PARAMETER_TYPE = 0x1648,
PMERR_NEGATIVE_STRCOND_DIM = 0x1649,
PMERR_INVALID_NUMBER_OF_TYPES = 0x164A,
PMERR_INCORRECT_HSTRUCT = 0x164B,
PMERR_INVALID_ARRAY_SIZE = 0x164C,
PMERR_INVALID_CONTROL_DATATYPE = 0x164D,
PMERR_INCOMPLETE_CONTROL_SEQU = 0x164E,
PMERR_INVALID_DATATYPE = 0x164F,
PMERR_INCORRECT_DATATYPE = 0x1650,
PMERR_NOT_SELF_DESCRIBING_DTYP = 0x1651,
PMERR_INVALID_CTRL_SEQ_INDEX = 0x1652,
PMERR_INVALID_TYPE_FOR_LENGTH = 0x1653,
PMERR_INVALID_TYPE_FOR_OFFSET = 0x1654,
PMERR_INVALID_TYPE_FOR_MPARAM = 0x1655,
PMERR_INVALID_MESSAGE_ID = 0x1656,
PMERR_C_LENGTH_TOO_SMALL = 0x1657,
PMERR_APPL_STRUCTURE_TOO_SMALL = 0x1658,
PMERR_INVALID_ERRORINFO_HANDLE = 0x1659,
PMERR_INVALID_CHARACTER_INDEX = 0x165A,
PMERR_ALREADY_IN_AREA = 0x2001,
PMERR_ALREADY_IN_ELEMENT = 0x2002,
PMERR_ALREADY_IN_PATH = 0x2003,
PMERR_ALREADY_IN_SEG = 0x2004,
PMERR_AREA_INCOMPLETE = 0x2005,
PMERR_BASE_ERROR = 0x2006,
PMERR_BITBLT_LENGTH_EXCEEDED = 0x2007,
PMERR_BITMAP_IN_USE = 0x2008,
PMERR_BITMAP_IS_SELECTED = 0x2009,
PMERR_BITMAP_NOT_FOUND = 0x200A,
PMERR_BITMAP_NOT_SELECTED = 0x200B,
PMERR_BOUNDS_OVERFLOW = 0x200C,
PMERR_CALLED_SEG_IS_CHAINED = 0x200D,
PMERR_CALLED_SEG_IS_CURRENT = 0x200E,
PMERR_CALLED_SEG_NOT_FOUND = 0x200F,
PMERR_CANNOT_DELETE_ALL_DATA = 0x2010,
PMERR_CANNOT_REPLACE_ELEMENT_0 = 0x2011,
PMERR_COL_TABLE_NOT_REALIZABLE = 0x2012,
PMERR_COL_TABLE_NOT_REALIZED = 0x2013,
PMERR_COORDINATE_OVERFLOW = 0x2014,
PMERR_CORR_FORMAT_MISMATCH = 0x2015,
PMERR_DATA_TOO_LONG = 0x2016,
PMERR_DC_IS_ASSOCIATED = 0x2017,
PMERR_DESC_STRING_TRUNCATED = 0x2018,
PMERR_DEVICE_DRIVER_ERROR_1 = 0x2019,
PMERR_DEVICE_DRIVER_ERROR_2 = 0x201A,
PMERR_DEVICE_DRIVER_ERROR_3 = 0x201B,
PMERR_DEVICE_DRIVER_ERROR_4 = 0x201C,
PMERR_DEVICE_DRIVER_ERROR_5 = 0x201D,
PMERR_DEVICE_DRIVER_ERROR_6 = 0x201E,
PMERR_DEVICE_DRIVER_ERROR_7 = 0x201F,
PMERR_DEVICE_DRIVER_ERROR_8 = 0x2020,
PMERR_DEVICE_DRIVER_ERROR_9 = 0x2021,
PMERR_DEVICE_DRIVER_ERROR_10 = 0x2022,
PMERR_DEV_FUNC_NOT_INSTALLED = 0x2023,
PMERR_DOSOPEN_FAILURE = 0x2024,
PMERR_DOSREAD_FAILURE = 0x2025,
PMERR_DRIVER_NOT_FOUND = 0x2026,
PMERR_DUP_SEG = 0x2027,
PMERR_DYNAMIC_SEG_SEQ_ERROR = 0x2028,
PMERR_DYNAMIC_SEG_ZERO_INV = 0x2029,
PMERR_ELEMENT_INCOMPLETE = 0x202A,
PMERR_ESC_CODE_NOT_SUPPORTED = 0x202B,
PMERR_EXCEEDS_MAX_SEG_LENGTH = 0x202C,
PMERR_FONT_AND_MODE_MISMATCH = 0x202D,
PMERR_FONT_FILE_NOT_LOADED = 0x202E,
PMERR_FONT_NOT_LOADED = 0x202F,
PMERR_FONT_TOO_BIG = 0x2030,
PMERR_HARDWARE_INIT_FAILURE = 0x2031,
PMERR_HBITMAP_BUSY = 0x2032,
PMERR_HDC_BUSY = 0x2033,
PMERR_HRGN_BUSY = 0x2034,
PMERR_HUGE_FONTS_NOT_SUPPORTED = 0x2035,
PMERR_ID_HAS_NO_BITMAP = 0x2036,
PMERR_IMAGE_INCOMPLETE = 0x2037,
PMERR_INCOMPAT_COLOR_FORMAT = 0x2038,
PMERR_INCOMPAT_COLOR_OPTIONS = 0x2039,
PMERR_INCOMPATIBLE_BITMAP = 0x203A,
PMERR_INCOMPATIBLE_METAFILE = 0x203B,
PMERR_INCORRECT_DC_TYPE = 0x203C,
PMERR_INSUFFICIENT_DISK_SPACE = 0x203D,
PMERR_INSUFFICIENT_MEMORY = 0x203E,
PMERR_INV_ANGLE_PARM = 0x203F,
PMERR_INV_ARC_CONTROL = 0x2040,
PMERR_INV_AREA_CONTROL = 0x2041,
PMERR_INV_ARC_POINTS = 0x2042,
PMERR_INV_ATTR_MODE = 0x2043,
PMERR_INV_BACKGROUND_COL_ATTR = 0x2044,
PMERR_INV_BACKGROUND_MIX_ATTR = 0x2045,
PMERR_INV_BITBLT_MIX = 0x2046,
PMERR_INV_BITBLT_STYLE = 0x2047,
PMERR_INV_BITMAP_DIMENSION = 0x2048,
PMERR_INV_BOX_CONTROL = 0x2049,
PMERR_INV_BOX_ROUNDING_PARM = 0x204A,
PMERR_INV_CHAR_ANGLE_ATTR = 0x204B,
PMERR_INV_CHAR_DIRECTION_ATTR = 0x204C,
PMERR_INV_CHAR_MODE_ATTR = 0x204D,
PMERR_INV_CHAR_POS_OPTIONS = 0x204E,
PMERR_INV_CHAR_SET_ATTR = 0x204F,
PMERR_INV_CHAR_SHEAR_ATTR = 0x2050,
PMERR_INV_CLIP_PATH_OPTIONS = 0x2051,
PMERR_INV_CODEPAGE = 0x2052,
PMERR_INV_COLOR_ATTR = 0x2053,
PMERR_INV_COLOR_DATA = 0x2054,
PMERR_INV_COLOR_FORMAT = 0x2055,
PMERR_INV_COLOR_INDEX = 0x2056,
PMERR_INV_COLOR_OPTIONS = 0x2057,
PMERR_INV_COLOR_START_INDEX = 0x2058,
PMERR_INV_COORD_OFFSET = 0x2059,
PMERR_INV_COORD_SPACE = 0x205A,
PMERR_INV_COORDINATE = 0x205B,
PMERR_INV_CORRELATE_DEPTH = 0x205C,
PMERR_INV_CORRELATE_TYPE = 0x205D,
PMERR_INV_CURSOR_BITMAP = 0x205E,
PMERR_INV_DC_DATA = 0x205F,
PMERR_INV_DC_TYPE = 0x2060,
PMERR_INV_DEVICE_NAME = 0x2061,
PMERR_INV_DEV_MODES_OPTIONS = 0x2062,
PMERR_INV_DRAW_CONTROL = 0x2063,
PMERR_INV_DRAW_VALUE = 0x2064,
PMERR_INV_DRAWING_MODE = 0x2065,
PMERR_INV_DRIVER_DATA = 0x2066,
PMERR_INV_DRIVER_NAME = 0x2067,
PMERR_INV_DRAW_BORDER_OPTION = 0x2068,
PMERR_INV_EDIT_MODE = 0x2069,
PMERR_INV_ELEMENT_OFFSET = 0x206A,
PMERR_INV_ELEMENT_POINTER = 0x206B,
PMERR_INV_END_PATH_OPTIONS = 0x206C,
PMERR_INV_ESC_CODE = 0x206D,
PMERR_INV_ESCAPE_DATA = 0x206E,
PMERR_INV_EXTENDED_LCID = 0x206F,
PMERR_INV_FILL_PATH_OPTIONS = 0x2070,
PMERR_INV_FIRST_CHAR = 0x2071,
PMERR_INV_FONT_ATTRS = 0x2072,
PMERR_INV_FONT_FILE_DATA = 0x2073,
PMERR_INV_FOR_THIS_DC_TYPE = 0x2074,
PMERR_INV_FORMAT_CONTROL = 0x2075,
PMERR_INV_FORMS_CODE = 0x2076,
PMERR_INV_FONTDEF = 0x2077,
PMERR_INV_GEOM_LINE_WIDTH_ATTR = 0x2078,
PMERR_INV_GETDATA_CONTROL = 0x2079,
PMERR_INV_GRAPHICS_FIELD = 0x207A,
PMERR_INV_HBITMAP = 0x207B,
PMERR_INV_HDC = 0x207C,
PMERR_INV_HJOURNAL = 0x207D,
PMERR_INV_HMF = 0x207E,
PMERR_INV_HPS = 0x207F,
PMERR_INV_HRGN = 0x2080,
PMERR_INV_ID = 0x2081,
PMERR_INV_IMAGE_DATA_LENGTH = 0x2082,
PMERR_INV_IMAGE_DIMENSION = 0x2083,
PMERR_INV_IMAGE_FORMAT = 0x2084,
PMERR_INV_IN_AREA = 0x2085,
PMERR_INV_IN_CALLED_SEG = 0x2086,
PMERR_INV_IN_CURRENT_EDIT_MODE = 0x2087,
PMERR_INV_IN_DRAW_MODE = 0x2088,
PMERR_INV_IN_ELEMENT = 0x2089,
PMERR_INV_IN_IMAGE = 0x208A,
PMERR_INV_IN_PATH = 0x208B,
PMERR_INV_IN_RETAIN_MODE = 0x208C,
PMERR_INV_IN_SEG = 0x208D,
PMERR_INV_IN_VECTOR_SYMBOL = 0x208E,
PMERR_INV_INFO_TABLE = 0x208F,
PMERR_INV_JOURNAL_OPTION = 0x2090,
PMERR_INV_KERNING_FLAGS = 0x2091,
PMERR_INV_LENGTH_OR_COUNT = 0x2092,
PMERR_INV_LINE_END_ATTR = 0x2093,
PMERR_INV_LINE_JOIN_ATTR = 0x2094,
PMERR_INV_LINE_TYPE_ATTR = 0x2095,
PMERR_INV_LINE_WIDTH_ATTR = 0x2096,
PMERR_INV_LOGICAL_ADDRESS = 0x2097,
PMERR_INV_MARKER_BOX_ATTR = 0x2098,
PMERR_INV_MARKER_SET_ATTR = 0x2099,
PMERR_INV_MARKER_SYMBOL_ATTR = 0x209A,
PMERR_INV_MATRIX_ELEMENT = 0x209B,
PMERR_INV_MAX_HITS = 0x209C,
PMERR_INV_METAFILE = 0x209D,
PMERR_INV_METAFILE_LENGTH = 0x209E,
PMERR_INV_METAFILE_OFFSET = 0x209F,
PMERR_INV_MICROPS_DRAW_CONTROL = 0x20A0,
PMERR_INV_MICROPS_FUNCTION = 0x20A1,
PMERR_INV_MICROPS_ORDER = 0x20A2,
PMERR_INV_MIX_ATTR = 0x20A3,
PMERR_INV_MODE_FOR_OPEN_DYN = 0x20A4,
PMERR_INV_MODE_FOR_REOPEN_SEG = 0x20A5,
PMERR_INV_MODIFY_PATH_MODE = 0x20A6,
PMERR_INV_MULTIPLIER = 0x20A7,
PMERR_INV_NESTED_FIGURES = 0x20A8,
PMERR_INV_OR_INCOMPAT_OPTIONS = 0x20A9,
PMERR_INV_ORDER_LENGTH = 0x20AA,
PMERR_INV_ORDERING_PARM = 0x20AB,
PMERR_INV_OUTSIDE_DRAW_MODE = 0x20AC,
PMERR_INV_PAGE_VIEWPORT = 0x20AD,
PMERR_INV_PATH_ID = 0x20AE,
PMERR_INV_PATH_MODE = 0x20AF,
PMERR_INV_PATTERN_ATTR = 0x20B0,
PMERR_INV_PATTERN_REF_PT_ATTR = 0x20B1,
PMERR_INV_PATTERN_SET_ATTR = 0x20B2,
PMERR_INV_PATTERN_SET_FONT = 0x20B3,
PMERR_INV_PICK_APERTURE_OPTION = 0x20B4,
PMERR_INV_PICK_APERTURE_POSN = 0x20B5,
PMERR_INV_PICK_APERTURE_SIZE = 0x20B6,
PMERR_INV_PICK_NUMBER = 0x20B7,
PMERR_INV_PLAY_METAFILE_OPTION = 0x20B8,
PMERR_INV_PRIMITIVE_TYPE = 0x20B9,
PMERR_INV_PS_SIZE = 0x20BA,
PMERR_INV_PUTDATA_FORMAT = 0x20BB,
PMERR_INV_QUERY_ELEMENT_NO = 0x20BC,
PMERR_INV_RECT = 0x20BD,
PMERR_INV_REGION_CONTROL = 0x20BE,
PMERR_INV_REGION_MIX_MODE = 0x20BF,
PMERR_INV_REPLACE_MODE_FUNC = 0x20C0,
PMERR_INV_RESERVED_FIELD = 0x20C1,
PMERR_INV_RESET_OPTIONS = 0x20C2,
PMERR_INV_RGBCOLOR = 0x20C3,
PMERR_INV_SCAN_START = 0x20C4,
PMERR_INV_SEG_ATTR = 0x20C5,
PMERR_INV_SEG_ATTR_VALUE = 0x20C6,
PMERR_INV_SEG_CH_LENGTH = 0x20C7,
PMERR_INV_SEG_NAME = 0x20C8,
PMERR_INV_SEG_OFFSET = 0x20C9,
PMERR_INV_SETID = 0x20CA,
PMERR_INV_SETID_TYPE = 0x20CB,
PMERR_INV_SET_VIEWPORT_OPTION = 0x20CC,
PMERR_INV_SHARPNESS_PARM = 0x20CD,
PMERR_INV_SOURCE_OFFSET = 0x20CE,
PMERR_INV_STOP_DRAW_VALUE = 0x20CF,
PMERR_INV_TRANSFORM_TYPE = 0x20D0,
PMERR_INV_USAGE_PARM = 0x20D1,
PMERR_INV_VIEWING_LIMITS = 0x20D2,
PMERR_JFILE_BUSY = 0x20D3,
PMERR_JNL_FUNC_DATA_TOO_LONG = 0x20D4,
PMERR_KERNING_NOT_SUPPORTED = 0x20D5,
PMERR_LABEL_NOT_FOUND = 0x20D6,
PMERR_MATRIX_OVERFLOW = 0x20D7,
PMERR_METAFILE_INTERNAL_ERROR = 0x20D8,
PMERR_METAFILE_IN_USE = 0x20D9,
PMERR_METAFILE_LIMIT_EXCEEDED = 0x20DA,
PMERR_NAME_STACK_FULL = 0x20DB,
PMERR_NOT_CREATED_BY_DEVOPENDC = 0x20DC,
PMERR_NOT_IN_AREA = 0x20DD,
PMERR_NOT_IN_DRAW_MODE = 0x20DE,
PMERR_NOT_IN_ELEMENT = 0x20DF,
PMERR_NOT_IN_IMAGE = 0x20E0,
PMERR_NOT_IN_PATH = 0x20E1,
PMERR_NOT_IN_RETAIN_MODE = 0x20E2,
PMERR_NOT_IN_SEG = 0x20E3,
PMERR_NO_BITMAP_SELECTED = 0x20E4,
PMERR_NO_CURRENT_ELEMENT = 0x20E5,
PMERR_NO_CURRENT_SEG = 0x20E6,
PMERR_NO_METAFILE_RECORD_HANDLE = 0x20E7,
PMERR_ORDER_TOO_BIG = 0x20E8,
PMERR_OTHER_SET_ID_REFS = 0x20E9,
PMERR_OVERRAN_SEG = 0x20EA,
PMERR_OWN_SET_ID_REFS = 0x20EB,
PMERR_PATH_INCOMPLETE = 0x20EC,
PMERR_PATH_LIMIT_EXCEEDED = 0x20ED,
PMERR_PATH_UNKNOWN = 0x20EE,
PMERR_PEL_IS_CLIPPED = 0x20EF,
PMERR_PEL_NOT_AVAILABLE = 0x20F0,
PMERR_PRIMITIVE_STACK_EMPTY = 0x20F1,
PMERR_PROLOG_ERROR = 0x20F2,
PMERR_PROLOG_SEG_ATTR_NOT_SET = 0x20F3,
PMERR_PS_BUSY = 0x20F4,
PMERR_PS_IS_ASSOCIATED = 0x20F5,
PMERR_RAM_JNL_FILE_TOO_SMALL = 0x20F6,
PMERR_REALIZE_NOT_SUPPORTED = 0x20F7,
PMERR_REGION_IS_CLIP_REGION = 0x20F8,
PMERR_RESOURCE_DEPLETION = 0x20F9,
PMERR_SEG_AND_REFSEG_ARE_SAME = 0x20FA,
PMERR_SEG_CALL_RECURSIVE = 0x20FB,
PMERR_SEG_CALL_STACK_EMPTY = 0x20FC,
PMERR_SEG_CALL_STACK_FULL = 0x20FD,
PMERR_SEG_IS_CURRENT = 0x20FE,
PMERR_SEG_NOT_CHAINED = 0x20FF,
PMERR_SEG_NOT_FOUND = 0x2100,
PMERR_SEG_STORE_LIMIT_EXCEEDED = 0x2101,
PMERR_SETID_IN_USE = 0x2102,
PMERR_SETID_NOT_FOUND = 0x2103,
PMERR_STARTDOC_NOT_ISSUED = 0x2104,
PMERR_STOP_DRAW_OCCURRED = 0x2105,
PMERR_TOO_MANY_METAFILES_IN_USE = 0x2106,
PMERR_TRUNCATED_ORDER = 0x2107,
PMERR_UNCHAINED_SEG_ZERO_INV = 0x2108,
PMERR_UNSUPPORTED_ATTR = 0x2109,
PMERR_UNSUPPORTED_ATTR_VALUE = 0x210A,
PMERR_ENDDOC_NOT_ISSUED = 0x210B,
PMERR_PS_NOT_ASSOCIATED = 0x210C,
PMERR_INV_FLOOD_FILL_OPTIONS = 0x210D,
PMERR_INV_FACENAME = 0x210E,
PMERR_PALETTE_SELECTED = 0x210F,
PMERR_NO_PALETTE_SELECTED = 0x2110,
PMERR_INV_HPAL = 0x2111,
PMERR_PALETTE_BUSY = 0x2112,
PMERR_START_POINT_CLIPPED = 0x2113,
PMERR_NO_FILL = 0x2114,
PMERR_INV_FACENAMEDESC = 0x2115,
PMERR_INV_BITMAP_DATA = 0x2116,
PMERR_INV_CHAR_ALIGN_ATTR = 0x2117,
PMERR_INV_HFONT = 0x2118,
PMERR_HFONT_IS_SELECTED = 0x2119,
PMERR_DRVR_NOT_SUPPORTED = 0x2120,
PMERR_INV_INKPS_FUNCTION = 0x2121
// !!! FIXME: there are more of these.
};
enum {
CLR_FALSE = -5,
CLR_TRUE = -4,
CLR_DEFAULT = -3,
CLR_WHITE = -2,
CLR_BLACK = -1,
CLR_BACKGROUND = 0,
CLR_BLUE = 1,
CLR_RED = 2,
CLR_PINK = 3,
CLR_GREEN = 4,
CLR_CYAN = 5,
CLR_YELLOW = 6,
CLR_NEUTRAL = 7,
CLR_DARKGRAY = 8,
CLR_DARKBLUE = 9,
CLR_DARKRED = 10,
CLR_DARKPINK = 11,
CLR_DARKGREEN = 12,
CLR_DARKCYAN = 13,
CLR_BROWN = 14,
CLR_PALEGRAY = 15
};
// API entry points...
OS2EXPORT HAB OS2API WinInitialize(ULONG flOptions);
OS2EXPORT BOOL OS2API WinTerminate(HAB hab);
OS2EXPORT ERRORID OS2API WinGetLastError(HAB hab);
OS2EXPORT HMQ OS2API WinCreateMsgQueue(HAB hab, LONG cmsg);
OS2EXPORT BOOL OS2API WinGetMsg(HAB hab, PQMSG pqmsg, HWND hwndFilter, ULONG msgFilterFirst, ULONG msgFilterLast);
OS2EXPORT MRESULT OS2API WinDispatchMsg(HAB hab, PQMSG pqmsg);
OS2EXPORT BOOL OS2API WinDestroyMsgQueue(HMQ hmq);
OS2EXPORT HWND OS2API WinCreateStdWindow(HWND hwndParent, ULONG flStyle, PULONG pflCreateFlags, PSZ pszClientClass, PSZ pszTitle, ULONG styleClient, HMODULE hmod, ULONG idResources, PHWND phwndClient);
OS2EXPORT HWND OS2API WinCreateWindow(HWND hwndParent, PSZ pszClass, PSZ pszName, ULONG flStyle, LONG x, LONG y, LONG cx, LONG cy, HWND hwndOwner, HWND hwndInsertBehind, ULONG id, PVOID pCtlData, PVOID pPresParams);
OS2EXPORT BOOL OS2API WinDestroyWindow(HWND hwnd);
OS2EXPORT BOOL OS2API WinRegisterClass(HAB hab, PSZ pszClassName, PFNWP pfnWndProc, ULONG flStyle, ULONG cbWindowData);
OS2EXPORT MRESULT OS2API WinDefWindowProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
OS2EXPORT MRESULT OS2API WinSendMsg(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
OS2EXPORT BOOL OS2API WinPostMsg(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
OS2EXPORT BOOL OS2API WinPostQueueMsg(HMQ hmq, ULONG msg, MPARAM mp1, MPARAM mp2);
OS2EXPORT HPS OS2API WinBeginPaint(HWND hwnd, HPS hps, PRECTL prclPaint);
OS2EXPORT BOOL OS2API WinEndPaint(HPS hps);
OS2EXPORT BOOL OS2API WinFillRect(HPS hps, PRECTL prcl, LONG lColor);
#ifdef __cplusplus
}
#endif
#endif
// end of pmwin.h ...
+4
View File
@@ -1,6 +1,10 @@
#include "os2native16.h"
#include "viocalls.h"
// os2types.h defines these, but so does curses.
#undef TRUE
#undef FALSE
#include <unistd.h>
#include <ctype.h>
+46
View File
@@ -0,0 +1,46 @@
#define INCL_WININPUT 1
#include <os2.h>
static MRESULT APIENTRY winproc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
{
switch (msg) {
case WM_PAINT: {
RECTL rect;
HPS hps = WinBeginPaint(hwnd, NULLHANDLE, &rect);
WinFillRect(hps, &rect, CLR_WHITE);
WinEndPaint(hps);
return 0;
}
case WM_BUTTON1CLICK: { // kill the app when the window is clicked on.
WinPostMsg(hwnd, WM_QUIT, 0, 0);
return 0;
}
}
return WinDefWindowProc(hwnd, msg, mp1, mp2);
} // winproc
int main(int argc, char **argv)
{
HAB hab = WinInitialize(0);
HMQ hmq = WinCreateMsgQueue(hab, 0);
QMSG qmsg;
HWND hwnd;
WinRegisterClass(hab, "testpm", winproc, 0, 0);
hwnd = WinCreateWindow(HWND_DESKTOP, "testpm", "testpm", WS_VISIBLE, 100, 100, 100, 100, 0, HWND_TOP, 0, NULL, NULL);
while (WinGetMsg(hab, &qmsg, NULLHANDLE, 0, 0)) {
WinDispatchMsg(hab, &qmsg);
}
WinDestroyWindow(hwnd);
WinDestroyMsgQueue(hmq);
WinTerminate(hab);
return 0;
} // main
// end of testpm.c ...
BIN
View File
Binary file not shown.