summaryrefslogtreecommitdiffstats
path: root/private/mvdm/inc
diff options
context:
space:
mode:
authorAdam <you@example.com>2020-05-17 05:51:50 +0200
committerAdam <you@example.com>2020-05-17 05:51:50 +0200
commite611b132f9b8abe35b362e5870b74bce94a1e58e (patch)
treea5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/mvdm/inc
downloadNT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip
Diffstat (limited to '')
-rw-r--r--private/mvdm/inc/apistruc.h151
-rw-r--r--private/mvdm/inc/bop.h93
-rw-r--r--private/mvdm/inc/cmdsvc.h128
-rw-r--r--private/mvdm/inc/curdir.h72
-rw-r--r--private/mvdm/inc/dbgexp.h19
-rw-r--r--private/mvdm/inc/dbginfo.h23
-rw-r--r--private/mvdm/inc/dbgsvc.h69
-rw-r--r--private/mvdm/inc/demexp.h37
-rw-r--r--private/mvdm/inc/dossvc.h178
-rw-r--r--private/mvdm/inc/doswow.h81
-rw-r--r--private/mvdm/inc/dpmi.h124
-rw-r--r--private/mvdm/inc/enumapis.h74
-rw-r--r--private/mvdm/inc/exterr.h186
-rw-r--r--private/mvdm/inc/intapi.h40
-rw-r--r--private/mvdm/inc/intmac.inc317
-rw-r--r--private/mvdm/inc/makefile126
-rw-r--r--private/mvdm/inc/memapi.h82
-rw-r--r--private/mvdm/inc/monregs.h103
-rw-r--r--private/mvdm/inc/mvdm.h91
-rw-r--r--private/mvdm/inc/netb.h97
-rw-r--r--private/mvdm/inc/oemuni.h240
-rw-r--r--private/mvdm/inc/rdrexp.h29
-rw-r--r--private/mvdm/inc/rdrsvc.h94
-rw-r--r--private/mvdm/inc/sharewow.h135
-rw-r--r--private/mvdm/inc/softpc.h651
-rw-r--r--private/mvdm/inc/suballoc.h111
-rw-r--r--private/mvdm/inc/tdb16.h107
-rw-r--r--private/mvdm/inc/v86def.h29
-rw-r--r--private/mvdm/inc/vdmredir.h439
-rw-r--r--private/mvdm/inc/vdmtb.inc104
-rw-r--r--private/mvdm/inc/vdmtib.h36
-rw-r--r--private/mvdm/inc/vint.h177
-rw-r--r--private/mvdm/inc/vrdefld.h32
-rw-r--r--private/mvdm/inc/vrdlctab.h146
-rw-r--r--private/mvdm/inc/vrinit.h67
-rw-r--r--private/mvdm/inc/vrmisc.h34
-rw-r--r--private/mvdm/inc/vrmslot.h143
-rw-r--r--private/mvdm/inc/vrnetapi.h150
-rw-r--r--private/mvdm/inc/vrnmpipe.h409
-rw-r--r--private/mvdm/inc/vrremote.h101
-rw-r--r--private/mvdm/inc/wow.h1701
-rw-r--r--private/mvdm/inc/wowclip.h28
-rw-r--r--private/mvdm/inc/wowcmdlg.h198
-rw-r--r--private/mvdm/inc/wowcmpat.h80
-rw-r--r--private/mvdm/inc/wowcomm.h95
-rw-r--r--private/mvdm/inc/wowddeml.h262
-rw-r--r--private/mvdm/inc/wowexp.h15
-rw-r--r--private/mvdm/inc/wowfax.h302
-rw-r--r--private/mvdm/inc/wowgdi.h1926
-rw-r--r--private/mvdm/inc/wowinfo.h58
-rw-r--r--private/mvdm/inc/wowint.h28
-rw-r--r--private/mvdm/inc/wowkbd.h115
-rw-r--r--private/mvdm/inc/wowkrn.h1370
-rw-r--r--private/mvdm/inc/wowmmcb.h82
-rw-r--r--private/mvdm/inc/wowmmed.h1665
-rw-r--r--private/mvdm/inc/wowshell.h172
-rw-r--r--private/mvdm/inc/wowsnd.h146
-rw-r--r--private/mvdm/inc/wowth.h39
-rw-r--r--private/mvdm/inc/wowusr.h3214
-rw-r--r--private/mvdm/inc/wowwsock.h467
-rw-r--r--private/mvdm/inc/x86def.h129
-rw-r--r--private/mvdm/inc/xmsexp.h24
-rw-r--r--private/mvdm/inc/xmssvc.h40
63 files changed, 17481 insertions, 0 deletions
diff --git a/private/mvdm/inc/apistruc.h b/private/mvdm/inc/apistruc.h
new file mode 100644
index 000000000..b95bd3186
--- /dev/null
+++ b/private/mvdm/inc/apistruc.h
@@ -0,0 +1,151 @@
+/*****************************************************************/
+/** Microsoft LAN Manager **/
+/** Copyright(c) Microsoft Corp., 1990 **/
+/*****************************************************************/
+/*** apistruc.h
+ *
+ * This file contains the structure definitions used to pass parameters
+ * to the loadable APIs in the REDIR 1.5 project
+ *
+ * CONTENTS tr_packet
+ * NetWkstaSetUIDStruc
+ * NetWkstaLogonStruc
+ * NetWkstaReLogonStruc
+ * NetSpecialSMBStruc
+ * NetRemoteCopyStruc
+ * NetMessageBufferSendStruc
+ * NetMessageNameGetInfoStruc
+ * NetServiceControlStruc
+ * NetUseGetInfoStruc
+ */
+
+struct tr_packet {
+ char FAR * tr_name; /* UNC Machine/Transaction name */
+ char FAR * tr_passwd; /* password */
+ char FAR * tr_spbuf; /* Send parameter buffer address */
+ char FAR * tr_sdbuf; /* Send data buffer address */
+ char FAR * tr_rsbuf; /* Receive set up buffer address */
+ char FAR * tr_rpbuf; /* Receive parameter buffer address */
+ char FAR * tr_rdbuf; /* Receive data buffer address */
+ unsigned short tr_splen; /* Number of send parameter bytes */
+ unsigned short tr_sdlen; /* Number of send data bytes */
+ unsigned short tr_rplen; /* Number of receive parameter bytes */
+ unsigned short tr_rdlen; /* Number of receive data bytes */
+ unsigned short tr_rslen; /* Number of receive set up bytes */
+ unsigned short tr_flags; /* Flags */
+ unsigned long tr_timeout; /* Timeout */
+ unsigned short tr_resvd; /* RESERVED (MBZ) */
+ unsigned short tr_sslen; /* Number of send set up bytes */
+};/* tr_packet */
+
+/* data structure to simulate Transaction2 SMB.
+ */
+struct tr2_packet {
+ char FAR * tr2_name; /* UNC Machine/Transaction name */
+ char FAR * tr2_passwd; /* password */
+ char FAR * tr2_spbuf; /* Send parameter buffer address */
+ char FAR * tr2_sdbuf; /* Send data buffer address */
+ char FAR * tr2_rsbuf; /* Receive set up buffer address */
+ char FAR * tr2_rpbuf; /* Receive parameter buffer address */
+ char FAR * tr2_rdbuf; /* Receive data buffer address */
+ unsigned short tr2_splen; /* Number of send parameter bytes */
+ unsigned short tr2_sdlen; /* Number of send data bytes */
+ unsigned short tr2_rplen; /* Number of receive parameter bytes */
+ unsigned short tr2_rdlen; /* Number of receive data bytes */
+ unsigned short tr2_rslen; /* Number of receive set up bytes */
+ unsigned short tr2_flags; /* Flags */
+ unsigned long tr2_timeout; /* Timeout */
+ unsigned short tr2_resvd; /* RESERVED (MBZ) */
+ unsigned short tr2_sslen; /* Number of send set up bytes */
+ unsigned short tr2_trancode; /* Transaction code for T2 SMB */
+};/* tr2_packet */
+
+struct NetWkstaSetUIDStruc {
+ const char FAR * su_username; /* username to log on/off */
+ const char FAR * su_password; /* password */
+ const char FAR * su_parms; /* OEM-specific parameter string */
+};/* NetWkstaSetUIDStruc */
+
+struct NetWkstaLogonStruc {
+ char FAR * ln_username; /* new user name */
+ char FAR * ln_password; /* new password */
+ char FAR * ln_parms; /* OEM-specific parameter string */
+ long FAR * ln_uid; /* UID returned here */
+ char FAR * ln_buffer; /* buffer for passkey */
+ unsigned short ln_buflen; /* length of passkey buffer */
+};/* NetWkstaLogonStruc */
+
+struct NetWkstaReLogonStruc {
+ char FAR * rl_username; /* user name to re-log on */
+ char FAR * rl_password; /* password to use in re-log on */
+ char FAR * rl_parms; /* OEM-specific parameters */
+ char FAR * rl_buffer; /* passkey buffer */
+ unsigned short rl_buflen; /* length of passkey */
+};/* NetWkstaReLogonStruc */
+
+struct NetSpecialSMBStruc {
+ char FAR * sp_uncname; /* UNC session name for SMB */
+ char FAR * sp_reqbuf; /* Send SMB request buffer */
+ unsigned short sp_reqlen; /* Length of send buffer */
+ char FAR * sp_rspbuf; /* Receive SMB response buffer */
+ unsigned short sp_rsplen; /* Length of receive buffer */
+};/* NetSpecialSMBStruc */
+
+struct NetRemoteCopyStruc {
+ char FAR * sourcepath; /* ASCIIZ fully specified source path */
+ char FAR * destpath; /* ASCIIZ fully specified dest path */
+ char FAR * sourcepass; /* password for source path (NULL for default) */
+ char FAR * destpass; /* password for dest path (NULL for default) */
+ unsigned short openflags; /* flags for open of destpath */
+ unsigned short copyflags; /* flags to control the copy */
+ char FAR * buf; /* buffer to return error text in */
+ unsigned short buflen; /* size of buffer on call */
+};/* NetRemoteCopyStruc */
+
+
+struct NetMessageBufferSendStruc {
+ char FAR * NMBSS_NetName; /* asciz net name. */
+ char FAR * NMBSS_Buffer; /* pointer to buffer. */
+ unsigned int NMBSS_BufSize; /* size of buffer. */
+
+}; /* NetMessageBufferSendStruc */
+
+struct NetMessageNameGetInfoStruc {
+ const char FAR * NMNGIS_NetName; /* ASCIZ net name */
+ char FAR * NMNGIS_Buffer; /* Pointer to buffer */
+ unsigned int NMNGIS_BufSize; /* Buffer size */
+}; /* NetMessageNameGetInfoStruc */
+
+struct NetServiceControlStruc {
+ char FAR * NSCS_Service; /* Service name */
+ unsigned short NSCS_BufLen; /* Buffer length */
+ char FAR * NSCS_BufferAddr;/* Buffer address */
+}; /* NetServiceControlStruc */
+
+struct NetUseGetInfoStruc {
+ const char FAR* NUGI_usename; /* ASCIZ redirected device name */
+ short NUGI_level; /* level of info */
+ char FAR* NUGI_buffer; /* buffer for returned info */
+ unsigned short NUGI_buflen; /* size of buffer */
+}; /* NetUseGetInfoStruc */
+
+struct DosWriteMailslotStruct {
+ unsigned long DWMS_Timeout; /* Timeout value of search */
+ const char FAR *DWMS_Buffer; /* Buffer address for mailslot write*/
+}; /* DosWriteMailslotStruct */
+
+struct NetServerEnum2Struct {
+ short NSE_level; /* level of information to be returned */
+ char FAR *NSE_buf; /* buffer to contain returned info */
+ unsigned short NSE_buflen; /* number of bytes available in buffer */
+ unsigned long NSE_type; /* bitmask of types to find */
+ char FAR *NSE_domain; /* return servers in this domain */
+}; /* NetServerEnum2Struct */
+
+struct I_CDNames {
+ char FAR *CDN_pszComputer;
+ char FAR *CDN_pszPrimaryDomain;
+ char FAR *CDN_pszLogonDomain;
+}; /* I_CDNames */
+
+
diff --git a/private/mvdm/inc/bop.h b/private/mvdm/inc/bop.h
new file mode 100644
index 000000000..d1991689e
--- /dev/null
+++ b/private/mvdm/inc/bop.h
@@ -0,0 +1,93 @@
+/*++ BUILD Version: 0001
+
+Copyright (c) 1990 Microsoft Corporation
+
+Module Name:
+
+ BOP.H
+
+Abstract:
+
+ This module contains macro support for use of Bops in C code.
+
+Author:
+
+ Dave Hastings (daveh) 25-Apr-1991
+
+Revision History:
+
+--*/
+
+//
+// Assigned Bop Numbers
+//
+
+#define BOP_DOS 0x50
+#define BOP_WOW 0x51
+#define BOP_XMS 0x52
+#define BOP_DPMI 0x53
+#define BOP_CMD 0x54
+#define BOP_DEBUGGER 0x56
+#define BOP_REDIR 0x57 // used to be 55, now goes to MS_bop_7()
+#define BOP_NOSUPPORT 0x59 // host warning dialog box
+#define BOP_WAITIFIDLE 0x5A // idle bop
+#define BOP_DBGBREAKPOINT 0x5B // does a 32 bit DbgBreakPoint
+#define BOP_KBD 0x5C // BUGBUG temporary
+#define BOP_VIDEO 0x5D // BUGBUG temporary
+#define BOP_NOTIFICATION 0x5E // 16bits to 32 bits notification
+#define BOP_UNIMPINT 0x5F // BUGBUG temporary
+#define BOP_SWITCHTOREALMODE 0xFD
+#define BOP_UNSIMULATE 0xFE // end execution of code in a vdm
+
+#define BOP_SIZE 3 // # of bytes in a bop instruction
+//
+// Bop Macro
+//
+
+/* XLATOFF */
+
+#define BOP(BopNumber) _asm db 0xC4, 0xC4, BopNumber
+
+/* XLATON */
+
+/* ASM
+BOP macro BopNumber
+ db 0C4h, 0C4h, BopNumber
+ endm
+
+IFNDEF WOW_x86
+FBOP macro BopNumber,BopMinorNumber,FastBopEntry
+ BOP BopNumber
+ifnb <BopMinorNumber>
+ db BopMinorNumber
+endif
+ endm
+ELSE
+FBOP macro BopNumber,BopMinorNumber,FastBopEntry
+ local fb10,fb20
+ test word ptr [FastBopEntry + 4],0FFFFh
+ jz fb10
+.386p
+ push ds
+ push 40h
+ pop ds
+ test ds:[FIXED_NTVDMSTATE_REL40],RM_BIT_MASK
+ pop ds
+ jnz short fb10
+ call fword ptr [FastBopEntry]
+
+ db BopNumber ; indicates which bop
+ifnb <BopMinorNumber>
+ db BopMinorNumber
+endif
+ jmp short fb20
+
+.286p
+fb10: BOP BopNumber
+ifnb <BopMinorNumber>
+ db BopMinorNumber
+endif
+fb20:
+ endm
+endif
+ */
diff --git a/private/mvdm/inc/cmdsvc.h b/private/mvdm/inc/cmdsvc.h
new file mode 100644
index 000000000..14f72331d
--- /dev/null
+++ b/private/mvdm/inc/cmdsvc.h
@@ -0,0 +1,128 @@
+/* command.h - This file has all the defines and data structures nneded
+ * for command.com/command.dll communication.
+ *
+ * Sudeepb 17-Sep-1991 Created
+ */
+
+/* ASM
+include bop.inc
+
+CMDSVC macro func
+ BOP BOP_CMD
+ db func
+ endm
+*/
+
+#define SVC_CMDEXITVDM 0
+#define SVC_CMDGETNEXTCMD 1
+#define SVC_CMDCOMSPEC 2
+#define SVC_CMDSAVEWORLD 3
+#define SVC_CMDGETCURDIR 4
+#define SVC_CMDSETINFO 5
+#define SVC_GETSTDHANDLE 6
+#define SVC_CMDCHECKBINARY 7
+#define SVC_CMDEXEC 8
+#define SVC_CMDINITCONSOLE 9
+#define SVC_EXECCOMSPEC32 10
+#define SVC_RETURNEXITCODE 11
+#define SVC_GETCONFIGSYS 12
+#define SVC_GETAUTOEXECBAT 13
+#define SVC_GETKBDLAYOUT 14
+#define SVC_GETINITENVIRONMENT 15
+#define SVC_GETSTARTINFO 16
+
+#define SVC_CMDLASTSVC 17
+
+#define ALL_HANDLES 7
+#define HANDLE_STDIN 0
+#define HANDLE_STDOUT 1
+#define HANDLE_STDERR 2
+#define MASK_STDIN 1
+#define MASK_STDOUT 2
+#define MASK_STDERR 4
+
+
+// define extention type for command.com.
+// these value must be in sync with 16bits. Please refer to
+// tmisc1.asm in mvdm\dos\v86\cmd\command
+#define BAD_EXTENTION 0 // never returned from 32 bits
+#define BAT_EXTENTION 2
+#define EXE_EXTENTION 4
+#define COM_EXTENTION 8
+#define MAX_STD_EXTENTION COM_EXTENTION
+
+// THIS VALUE IS VERY IMPORTANT.
+// 0(zero) means there is no such a program file and command.com would spit out
+// well-known "bad command or file name".
+// Give it to any value larger than than MAX_STD_EXTENTION) makes command.com
+// by-passing any other checking and passing down the program file as is
+// to DOS which doesn't have tight executable file extention convention.
+// The reason that we allow program file with "non-standard" extention to
+// pass through command.com and reach DOS is we receive the program pathname
+// from CreateProcess which doesn't limit any file extention.
+//
+
+
+#define UNKNOWN_EXTENTION MAX_STD_EXTENTION + 1
+
+
+/* XLATOFF */
+
+typedef struct _SAVEWORLD {
+ USHORT ax;
+ USHORT bx;
+ USHORT cx;
+ USHORT dx;
+ USHORT cs;
+ USHORT ss;
+ USHORT ds;
+ USHORT es;
+ USHORT si;
+ USHORT di;
+ USHORT bp;
+ USHORT sp;
+ USHORT ip;
+ USHORT flag;
+ ULONG ImageSize;
+} SAVEWORLD, *PSAVEWORLD;
+
+extern BOOL CMDInit (int argc, char *argv[]);
+extern BOOL CMDRebootVDM (void);
+
+extern BOOL fEnableInt10;
+
+/* XLATON */
+
+/** CMDINFO - Communication record of command.com **/
+
+/* XLATOFF */
+#pragma pack(2)
+/* XLATON */
+
+typedef struct _CMDINFO { /**/
+ USHORT EnvSeg;
+ USHORT EnvSize;
+ USHORT CurDrive;
+ USHORT NumDrives;
+ USHORT CmdLineSeg;
+ USHORT CmdLineOff;
+ USHORT CmdLineSize;
+ USHORT ReturnCode;
+ USHORT bStdHandles;
+ ULONG pRdrInfo;
+ USHORT CodePage;
+ USHORT fTSRExit;
+ USHORT fBatStatus;
+ USHORT ExecPathSeg;
+ USHORT ExecPathOff;
+ USHORT ExecPathSize;
+ USHORT ExecExtType;
+} CMDINFO;
+typedef CMDINFO UNALIGNED *PCMDINFO;
+
+/* XLATOFF */
+#pragma pack()
+/* XLATON */
+
+
+BOOL CmdDispatch (ULONG);
diff --git a/private/mvdm/inc/curdir.h b/private/mvdm/inc/curdir.h
new file mode 100644
index 000000000..028b691d5
--- /dev/null
+++ b/private/mvdm/inc/curdir.h
@@ -0,0 +1,72 @@
+/* BREAK <Current directory list structure>
+ *
+ *
+ * Microsoft Confidential
+ * Copyright (C) Microsoft Corporation 1991
+ * All Rights Reserved.
+ *
+ *
+ * CDS - Current Directory Structure
+ *
+ * CDS items are used bu the internal routines to store cluster numbers and
+ * network identifiers for each logical name. The ID field is used dually,
+ * both as net ID and for a cluster number for local devices. In the case
+ * of local devices, the cluster number will be -1 if there is a potential
+ * of the disk being changed or if the path must be recracked.
+ *
+ * Some pathnames have special preambles, such as
+ *
+ * \\machane\sharename\...
+ * For these pathnames we can't allow ".." processing to back us
+ * up into the special front part of the name. The CURDIR_END field
+ * holds the address of the seperator character which marks
+ * the split between the special preamble and the regular
+ * path list; ".." processing isn't allowed to back us up past
+ * (i.e., before) CURDIR_END
+ * For the root, it points at the leading /. For net
+ * assignments it points at the end (nul) of the initial assignment:
+ * A:/ \\foo\bar \\foo\bar\blech\bozo
+ * ^ ^ ^
+ */
+
+
+#define DIRSTRLEN 64+3 // Max length in bytes of directory strings
+#define TEMPLEN DIRSTRLEN*2
+
+/* XLATOFF */
+#pragma pack(1)
+/* XLATON */
+
+typedef struct CURDIR_LIST {
+ CHAR CurDir_Text[DIRSTRLEN]; // text of assignment and curdir
+ USHORT CurDir_Flags; // various flags
+ USHORT CurDir_End; // index to ".." backup limit -
+} CDS; // see above
+
+typedef CDS UNALIGNED *PCDS;
+
+#define curdirLen sizeof(CURDIR_LIST) // Needed for screwed up
+ // ASM87 which doesn't allow
+ // Size directive as a macro
+ // argument
+// Flag values for CURDIR_FLAGS
+
+#define CURDIR_ISNET 0x8000
+#define CURDIR_ISIFS 0x8000
+#define CURDIR_INUSE 0x4000
+#define CURDIR_SPLICE 0x2000
+#define CURDIR_LOCAL 0x1000
+#define CURDIR_TOSYNC 0x0800 // Directory path to be sync added
+#define CURDIR_NT_FIX 0x0400 // fixed disk (includes NETWORK
+ // drives. Used in $Current_dir perf
+ // work.
+
+
+
+/* XLATOFF */
+typedef CDS UNALIGNED *PCDS;
+/* XLATON */
+
+/* XLATOFF */
+#pragma pack()
+/* XLATON */
diff --git a/private/mvdm/inc/dbgexp.h b/private/mvdm/inc/dbgexp.h
new file mode 100644
index 000000000..02c47d2df
--- /dev/null
+++ b/private/mvdm/inc/dbgexp.h
@@ -0,0 +1,19 @@
+/*++ BUILD Version: 0001
+ *
+ * MVDM v1.0
+ *
+ * Copyright (c) 1991,1992 Microsoft Corporation
+ *
+ * DBGEXP.H
+ * DBG exports
+ *
+ * History:
+ * 13-Jan-1992 Bob Day (bobday)
+ * Created.
+--*/
+
+extern BOOL DBGInit( int, char *[] );
+extern VOID DBGDispatch( void );
+extern VOID DBGNotifyNewTask( LPVOID pNTFrame, UINT uFrameSize );
+extern VOID DBGNotifyRemoteThreadAddress( LPVOID lpAddress, DWORD lpBlock );
+extern VOID DBGNotifyDebugged( BOOL fDebugged );
diff --git a/private/mvdm/inc/dbginfo.h b/private/mvdm/inc/dbginfo.h
new file mode 100644
index 000000000..9faa2916e
--- /dev/null
+++ b/private/mvdm/inc/dbginfo.h
@@ -0,0 +1,23 @@
+typedef struct _vdminternalinfo {
+ DWORD dwLdtBase;
+ DWORD dwLdtLimit;
+ DWORD dwGdtBase;
+ DWORD dwGdtLimit;
+ WORD wKernelSeg;
+ DWORD dwOffsetTHHOOK;
+ LPVOID vdmContext;
+ LPVOID lpRemoteAddress;
+ DWORD lpRemoteBlock;
+ BOOL f386;
+} VDMINTERNALINFO;
+typedef VDMINTERNALINFO *LPVDMINTERNALINFO;
+
+typedef struct _com_header {
+ DWORD dwBlockAddress;
+ DWORD dwReturnValue;
+ WORD wArgsPassed;
+ WORD wArgsSize;
+ WORD wBlockLength;
+ WORD wSuccess;
+} COM_HEADER;
+typedef COM_HEADER FAR *LPCOM_HEADER;
diff --git a/private/mvdm/inc/dbgsvc.h b/private/mvdm/inc/dbgsvc.h
new file mode 100644
index 000000000..4605f7334
--- /dev/null
+++ b/private/mvdm/inc/dbgsvc.h
@@ -0,0 +1,69 @@
+/** SVC Defines
+ *
+ * Revision history:
+ *
+ * bobday 13-Jan-1992 Created
+ */
+
+
+/* DBGSVC - DBG SVC calls.
+ *
+ * This macro is used by Nlddebug.asm (where N=nothing or 2)
+ *
+ */
+
+/* ASM
+include bop.inc
+
+dbgsvc macro func
+ BOP BOP_DEBUGGER
+ db func
+ endm
+*/
+
+#define DBG_SEGLOAD 0
+#define DBG_SEGMOVE 1
+#define DBG_SEGFREE 2
+#define DBG_MODLOAD 3
+#define DBG_MODFREE 4
+#define DBG_SINGLESTEP 5
+#define DBG_BREAK 6
+#define DBG_GPFAULT 7
+#define DBG_DIVOVERFLOW 8
+#define DBG_INSTRFAULT 9
+#define DBG_TASKSTART 10
+#define DBG_TASKSTOP 11
+#define DBG_DLLSTART 12
+#define DBG_DLLSTOP 13
+#define DBG_ATTACH 14
+#define DBG_TOOLHELP 15
+
+//
+// Flags used by DemIsDebug
+//
+#define ISDBG_DEBUGGEE 1
+#define ISDBG_SHOWSVC 2
+
+
+void ModuleLoad(LPSTR,LPSTR,WORD,DWORD);
+void ModuleFree(LPSTR,LPSTR);
+void ModuleSegmentMove(LPSTR,LPSTR,WORD,WORD);
+BOOL VdmDebugger(ULONG IntNumber);
+
+#define MAX_VDM_BREAKPOINTS 16
+typedef struct _VDM_BREAKPOINT { /* VDMBP */
+ UCHAR Flags;
+ UCHAR Opcode;
+ USHORT Count;
+ USHORT Seg;
+ ULONG Offset;
+} VDM_BREAKPOINT;
+
+//
+// Bits defined in Flags
+//
+#define VDMBP_SET 0x01
+#define VDMBP_ENABLED 0x02
+#define VDMBP_FLUSH 0x04
+#define VDMBP_PENDING 0x08
+#define VDMBP_V86 0x10
diff --git a/private/mvdm/inc/demexp.h b/private/mvdm/inc/demexp.h
new file mode 100644
index 000000000..57f12db7b
--- /dev/null
+++ b/private/mvdm/inc/demexp.h
@@ -0,0 +1,37 @@
+/*++ BUILD Version: 0001
+ *
+ * MVDM v1.0
+ *
+ * Copyright (c) 1991, Microsoft Corporation
+ *
+ * DEMEXP.H
+ * DOS emulation exports
+ *
+ * History:
+ * 22-Apr-1991 Sudeep Bharati (sudeepb)
+ * Created.
+--*/
+
+BOOL DemInit (int argc, char *argv[]);
+BOOL DemDispatch(ULONG iSvc);
+VOID demCloseAllPSPRecords (VOID);
+DWORD demFileFindFirst (PVOID pDTA, LPSTR lpFile, USHORT usSearchAttr);
+DWORD demFileFindNext (PVOID pDTA);
+ULONG demClientErrorEx (HANDLE hFile, CHAR chDrive, BOOL bSetRegs);
+UCHAR demGetPhysicalDriveType(UCHAR DriveNum);
+
+#define SIZEOF_DOSSRCHDTA 43
+
+#if DEVL
+// bit masks to control trace info
+#define DEMDOSAPPBREAK 0x80000000
+#define DEMDOSDISP 0x40000000
+#define DEMFILIO 0x20000000
+#define DEMSVCTRACE 0x10000000
+#define KEEPBOOTFILES 0x01000000 // if set, no delete temp boot files
+#define DEM_ABSDRD 0x02000000
+#define DEM_ABSWRT 0x04000000
+#define DEMERROR 0x08000000
+
+extern DWORD fShowSVCMsg;
+#endif
diff --git a/private/mvdm/inc/dossvc.h b/private/mvdm/inc/dossvc.h
new file mode 100644
index 000000000..b4ec39303
--- /dev/null
+++ b/private/mvdm/inc/dossvc.h
@@ -0,0 +1,178 @@
+/** SVC Defines
+ *
+ * Revision history:
+ *
+ * sudeepb 27-Feb-1991 Created
+ */
+
+/* VHE - Virtual Hard Error packet.
+ *
+ * DEM makes fbInt24 to true if an hard error happens.
+ */
+
+typedef struct vhe_s {
+ char vhe_fbInt24; // Was there a hard error?
+ char vhe_HrdErrCode; // If hard error then this is the error code
+ char vhe_bDriveNum; // If so on which drive
+} VHE;
+
+typedef VHE *PVHE;
+
+/* DEMEXTERR - Extended Error structure. The following structure contains the
+ * DOS extended error elements which are loosely coupled in the DOS data
+ * segment
+ *
+ */
+
+/* XLATOFF */
+#include <packon.h>
+
+typedef struct _DEMEXTERR {
+ UCHAR ExtendedErrorLocus;
+ USHORT ExtendedError;
+ UCHAR ExtendedErrorAction;
+ UCHAR ExtendedErrorClass;
+ PUCHAR ExtendedErrorPointer;
+} DEMEXTERR;
+
+typedef DEMEXTERR* PDEMEXTERR;
+
+
+/* SYSDEV - Device chain node
+ */
+
+typedef struct _SYSDEV {
+
+ ULONG sdevNext; // REAL mode pointer to next device. -1 for end of chain.
+ char sdevIgnore[6];
+ UCHAR sdevDevName[8]; // device name
+
+} SYSDEV;
+
+typedef SYSDEV UNALIGNED *PSYSDEV;
+
+#ifndef _DEMINCLUDED_
+extern DECLSPEC_IMPORT PSYSDEV pDeviceChain;
+#else
+extern PSYSDEV pDeviceChain;
+#endif
+
+
+/* XLATON */
+
+/* XLATOFF */
+#include <packoff.h>
+/* XLATON */
+
+/* Note : To add a new SVC:
+ * New SVC gets the current value of SVC_LASTSVC. Increment
+ * the SVC_LASTSVC value. Add the appropriate SVC handler
+ * in apfnSVC (file dem\demdisp.c) at the end.
+ * To delete a SVC :
+ * Move each SVC one level up. Appropriatly adjust the
+ * apfnSVC (file dem\demdisp.c).
+ */
+
+/* SVC - Supervisory Call macro.
+ *
+ * This macro is used by NTDOS and NTBIO to call DEM.
+ *
+ */
+
+#define NTVDMDBG 1
+
+/* ASM
+include bop.inc
+
+svc macro func
+ BOP BOP_DOS
+ db func
+ endm
+*/
+#define SVC_DEMCHGFILEPTR 0x00
+#define SVC_DEMCHMOD 0x01
+#define SVC_DEMCLOSE 0x02
+#define SVC_DEMCREATE 0x03
+#define SVC_DEMCREATEDIR 0x04
+#define SVC_DEMDELETE 0x05
+#define SVC_DEMDELETEDIR 0x06
+#define SVC_DEMDELETEFCB 0x07
+#define SVC_DEMFILETIMES 0x08
+#define SVC_DEMFINDFIRST 0x09
+#define SVC_DEMFINDFIRSTFCB 0x0a
+#define SVC_DEMFINDNEXT 0x0b
+#define SVC_DEMFINDNEXTFCB 0x0c
+#define SVC_DEMGETBOOTDRIVE 0x0d
+#define SVC_DEMGETDRIVEFREESPACE 0x0e
+#define SVC_DEMGETDRIVES 0x0f
+#define SVC_DEMGSETMEDIAID 0x10
+#define SVC_DEMLOADDOS 0x11
+#define SVC_DEMOPEN 0x12
+#define SVC_DEMQUERYCURRENTDIR 0x13
+#define SVC_DEMQUERYDATE 0x14
+#define SVC_DEMQUERYTIME 0x15
+#define SVC_DEMREAD 0x16
+#define SVC_DEMRENAME 0x17
+#define SVC_DEMSETCURRENTDIR 0x18
+#define SVC_DEMSETDATE 0x19
+#define SVC_DEMSETDEFAULTDRIVE 0x1a
+#define SVC_DEMSETDTALOCATION 0x1b
+#define SVC_DEMSETTIME 0x1c
+#define SVC_DEMSETV86KERNELADDR 0x1d
+#define SVC_DEMWRITE 0x1e
+#define SVC_GETDRIVEINFO 0x1f
+#define SVC_DEMRENAMEFCB 0x20
+#define SVC_DEMIOCTL 0x21
+#define SVC_DEMCREATENEW 0x22
+#define SVC_DEMDISKRESET 0x23
+#define SVC_DEMSETDPB 0x24
+#define SVC_DEMGETDPB 0x25
+#define SVC_DEMSLEAZEFUNC 0x26
+#define SVC_DEMCOMMIT 0x27
+#define SVC_DEMEXTHANDLE 0x28
+#define SVC_DEMABSDRD 0x29
+#define SVC_DEMABSDWRT 0x2a
+#define SVC_DEMGSETCDPG 0x2b
+#define SVC_DEMCREATEFCB 0x2c
+#define SVC_DEMOPENFCB 0x2d
+#define SVC_DEMCLOSEFCB 0x2e
+#define SVC_DEMFCBIO 0x2f
+#define SVC_DEMDATE16 0x30
+#define SVC_DEMGETFILEINFO 0x31
+#define SVC_DEMSETHARDERRORINFO 0x32
+#define SVC_DEMRETRY 0x33
+#define SVC_DEMLOADDOSAPPSYM 0x34
+#define SVC_DEMFREEDOSAPPSYM 0x35
+#define SVC_DEMENTRYDOSAPP 0x36
+#define SVC_DEMDOSDISPCALL 0x37
+#define SVC_DEMDOSDISPRET 0x38
+#define SVC_OUTPUT_STRING 0x39
+#define SVC_INPUT_STRING 0x3A
+#define SVC_ISDEBUG 0x3B
+#define SVC_PDBTERMINATE 0x3C
+#define SVC_DEMEXITVDM 0x3D
+#define SVC_DEMWOWFILES 0x3E
+#define SVC_DEMLOCKOPER 0x3F
+#define SVC_DEMDRIVEFROMHANDLE 0x40
+#define SVC_DEMGETCOMPUTERNAME 0x41
+#define SVC_DEMFASTREAD 0x42
+#define SVC_DEMFASTWRITE 0x43
+#define SVC_DEMCHECKPATH 0x44
+#define SVC_DEMSYSTEMSYMBOLOP 0x45
+#define SVC_DEMGETDPBLIST 0x46
+
+#define SVC_DEMPIPEFILEDATAEOF 0x47
+#define SVC_DEMPIPEFILEEOF 0x48
+#define SVC_DEMLASTSVC 0x49
+
+
+/*
+ * Equates used in the DEMxxxSYSTEMxxx calls
+ */
+#define SYMOP_LOAD 1
+#define SYMOP_FREE 2
+#define SYMOP_MOVE 3
+#define SYMOP_CLEANUP 0x80
+
+#define ID_NTIO 1
+#define ID_NTDOS 2
diff --git a/private/mvdm/inc/doswow.h b/private/mvdm/inc/doswow.h
new file mode 100644
index 000000000..fcc6d3c22
--- /dev/null
+++ b/private/mvdm/inc/doswow.h
@@ -0,0 +1,81 @@
+/*++ BUILD Version: 0002
+ *
+ * WOW v1.0
+ *
+ * Copyright (c) 1991, Microsoft Corporation
+ *
+ * DOSWOW.H
+ * Shared structures between NTDOS, DEM and WOW32
+ *
+ * History:
+ * Created 03-Dec-1993 by Neil Sandlin (neilsa)
+--*/
+
+/* XLATOFF */
+
+#pragma pack(2)
+
+/* XLATON */
+
+/*
+ * The following structure is used by some of the WOW functions to
+ * point to internal DOS data. This is done to emulate some of the more
+ * involved functions in WOW32, while still maintaining DOS data integrity.
+ */
+typedef struct _DOSWOWDATA { /* DWD */
+ DWORD lpCDSCount;
+ DWORD lpCDSFixedTable;
+ DWORD lpCDSBuffer;
+ DWORD lpCurDrv;
+ DWORD lpCurPDB;
+ DWORD lpDrvErr;
+ DWORD lpExterrLocus;
+ DWORD lpSCS_ToSync;
+ DWORD lpSftAddr;
+} DOSWOWDATA;
+typedef DOSWOWDATA UNALIGNED *PDOSWOWDATA;
+
+
+/* XLATOFF */
+
+#pragma pack(1)
+
+typedef struct _DOSPDB { // DOS Process Data Block
+ CHAR PDB_Not_Interested[50]; // Fields we are not interested in
+ USHORT PDB_JFN_Length; // JFT length
+ ULONG PDB_JFN_Pointer; // JFT pointer
+} DOSPDB, *PDOSPDB;
+
+
+typedef struct _DOSSF { // DOS header for SFT chain
+ ULONG SFLink; // Link to next SF
+ USHORT SFCount; // number of entries
+ USHORT SFTable; // beginning of array of the SFTs
+} DOSSF;
+typedef DOSSF UNALIGNED *PDOSSF;
+
+
+#define SFT_NAMED_PIPE 0x2000 // named pipe flag
+
+typedef struct _DOSSFT { // DOS SFT
+ USHORT SFT_Ref_Count; // Howmany tasks using it
+ USHORT SFT_Mode; // Mode of access
+ UCHAR SFT_Attr; // Attribute of file
+ USHORT SFT_Flags; // Bit 15 = 1 if remote file
+ // = 0 if local or device
+ ULONG SFT_Devptr; // Device pointer
+ USHORT SFT_Time;
+ USHORT SFT_Date;
+ ULONG SFT_Size;
+ ULONG SFT_Position;
+ ULONG SFT_Chain;
+ USHORT SFT_PID;
+ ULONG SFT_NTHandle; // NT File Handle
+} DOSSFT;
+typedef DOSSFT UNALIGNED *PDOSSFT;
+
+#define SF_NT_SEEK 0x0200
+
+#pragma pack()
+
+/* XLATON */
diff --git a/private/mvdm/inc/dpmi.h b/private/mvdm/inc/dpmi.h
new file mode 100644
index 000000000..2131cdc80
--- /dev/null
+++ b/private/mvdm/inc/dpmi.h
@@ -0,0 +1,124 @@
+/*++
+
+Copyright (c) 1991 Microsoft Corporation
+
+Module Name:
+
+ dpmi.h
+
+Abstract:
+
+ This file contains code to implement support for the DPMI bops
+
+Author:
+
+ Dave Hastings (daveh) 27-Jun-1991
+
+Revision History:
+
+
+--*/
+
+/* ASM
+ifdef WOW_x86
+include vint.inc
+endif
+include bop.inc
+*/
+#define LDT_SIZE 0x1FFF
+
+// DPMI Bop Sub Functions
+
+#define SetDescriptorTableEntries 0
+#define DPMISwitchToProtectedMode 1 /* prefix necessary */
+#define SetProtectedmodeInterrupt 2
+#define GetFastBopAddress 3
+#define InitDosx 4
+#define InitApp 5
+#define XlatInt21Call 6
+#define AllocXmem 7
+#define FreeXmem 8
+#define ReallocXmem 9
+#define SetFaultHandler 10
+#define GetMemoryInformation 11
+#define DpmiInUse 12
+#define DpmiNoLongerInUse 13
+#define SetDebugRegisters 14
+#define PassTableAddress 15
+#define TerminateApp 16
+#define InitializePmStackInfo 17
+#define VcdPmSvcCall32 18
+#define FreeAllXmem 19
+#define IntHandlerIret 20
+#define IntHandlerIretd 21
+#define FaultHandlerIret 22
+#define FaultHandlerIretd 23
+#define DpmiUnhandledException 24
+
+#define MAX_DPMI_BOP_FUNC DpmiUnhandledException + 1
+
+/* ASM
+DPMIBOP macro SubFun
+ BOP BOP_DPMI
+ db SubFun
+ endm
+*/
+
+/* XLATOFF */
+#if DBG
+
+#define DBGTRACE(Type, v1, v2, v3) DpmiDbgTrace(Type, v1, v2, v3)
+
+#else
+
+#define DBGTRACE(Type, v1, v2, v3) {}
+
+#endif
+
+/* XLATON */
+
+
+VOID DpmiDbgTrace(
+ int Type,
+ ULONG v1,
+ ULONG v2,
+ ULONG v3
+ );
+
+
+#define DPMI_SET_PMODE_INT_HANDLER 1
+#define DPMI_SET_FAULT_HANDLER 2
+#define DPMI_DISPATCH_INT 3
+#define DPMI_HW_INT 4
+#define DPMI_SW_INT 5
+#define DPMI_INT_IRET16 6
+#define DPMI_INT_IRET32 7
+#define DPMI_FAULT 8
+#define DPMI_DISPATCH_FAULT 9
+#define DPMI_FAULT_IRET 10
+#define DPMI_OP_EMULATION 11
+#define DPMI_DISPATCH_ENTRY 12
+
+
+typedef struct _DPMI_TRACE_ENTRY { /* DPMITRACE */
+ int Type;
+ ULONG v1;
+ ULONG v2;
+ ULONG v3;
+ ULONG eax;
+ ULONG ebx;
+ ULONG ecx;
+ ULONG edx;
+ ULONG esi;
+ ULONG edi;
+ ULONG ebp;
+ ULONG esp;
+ ULONG eip;
+ ULONG eflags;
+ USHORT cs;
+ USHORT ds;
+ USHORT es;
+ USHORT fs;
+ USHORT gs;
+ USHORT ss;
+} DPMI_TRACE_ENTRY;
diff --git a/private/mvdm/inc/enumapis.h b/private/mvdm/inc/enumapis.h
new file mode 100644
index 000000000..75e9dd832
--- /dev/null
+++ b/private/mvdm/inc/enumapis.h
@@ -0,0 +1,74 @@
+/*****************************************************************/
+/** Microsoft LAN Manager **/
+/** Copyright(c) Microsoft Corp., 1990 **/
+/*****************************************************************/
+/*** enumapis.h
+ *
+ * This file contains the subfunctions for the loadable APIs in the
+ * REDIR 1.5 project
+ */
+
+#define REDIRBASEFUNCTION 0x5f00
+#define BADFUNCTION 0xFFFF
+#define UseWkstaPass 0x80
+
+#define Local_API_ReturnMode 0x00
+#define Local_API_SetMode 0x01
+#define Local_API_GetAsgList 0x02
+#define Local_API_Define 0x03
+#define Local_API_BREAK_MAC 0x04
+#define Local_API_GetAsgList2 0x05
+
+#define Local_API_RedirGetVersion 0x30
+#define Local_API_NetWkstaSetUID 0x31
+#define Local_API_DosQNmPipeInfo 0x32
+#define Local_API_DosQNmPHandState 0x33
+#define Local_API_DosSetNmPHandState 0x34
+#define Local_API_DosPeekNmPipe 0x35
+#define Local_API_DosTransactNmPipe 0x36
+#define Local_API_DosCallNmPipe 0x37
+#define Local_API_DosWaitNmPipe 0x38
+#define Local_API_DosRawReadNmPipe 0x39
+#define Local_API_DosRawWriteNmPipe 0x3a
+#define Local_API_NetHandleSetInfo 0x3b
+#define Local_API_NetHandleGetInfo 0x3c
+#define Local_API_NetTransact 0x3d
+#define Local_API_NetSpecialSMB 0x3e
+#define Local_API_NetIRemoteAPI 0x3f
+#define Local_API_NetMessageBufferSend 0x40
+#define Local_API_NetServiceEnum 0x41
+#define Local_API_NetServiceControl 0x42
+#define Local_API_DosPrintJobGetID 0x43
+#define Local_API_NetWkstaGetInfo 0x44
+#define Local_API_NetWkstaSetInfo 0x45
+#define Local_API_NetUseEnum 0x46
+#define Local_API_NetUseAdd 0x47
+#define Local_API_NetUseDel 0x48
+#define Local_API_NetUseGetInfo 0x49
+#define Local_API_NetRemoteCopy 0x4a
+#define Local_API_NetRemoteMove 0x4b
+#define Local_API_NetServerEnum 0x4c
+#define Local_API_DosMakeMailslot 0x4d
+#define Local_API_DosDeleteMailslot 0x4e
+#define Local_API_DosMailslotInfo 0x4f
+#define Local_API_DosReadMailslot 0x50
+#define Local_API_DosPeekMailslot 0x51
+#define Local_API_DosWriteMailslot 0x52
+#define Local_API_NetServerEnum2 0x53
+#define Local_API_NullTransact 0x54
+
+/* NOTE:: Remove_Network_Connections is a private call to allow the
+ * NetSetUserName INT 2F to remove network connections.
+ */
+
+#define Local_API_Remove_Network_Connections 0x55
+
+/* NOTE:: Process_Interrogate is a private call to allow the
+ * redirector to kick itself from INT 28 and INT 8 to process relogon
+ * requests.
+ */
+#define Local_API_Periodic_View_Tasks 0x56
+#define Local_API_Set_LongName 0x57
+#define Local_API_Start_Redir_On_Net 0x58
+#define Local_API_Stop_Redir_per_Net 0x59
+
diff --git a/private/mvdm/inc/exterr.h b/private/mvdm/inc/exterr.h
new file mode 100644
index 000000000..647daf1fe
--- /dev/null
+++ b/private/mvdm/inc/exterr.h
@@ -0,0 +1,186 @@
+/*++
+
+Copyright (c) 1991 Microsoft Corporation
+
+Module Name:
+
+ exterr.h
+
+Abstract:
+
+ Taken from mvdm\dos\v86\inc\error.inc
+
+Author:
+
+ Richard L Firth (rfirth) 17-Oct-1992
+
+Revision History:
+
+--*/
+
+/** ERROR.INC - DOS Error Codes
+;
+; The newer (DOS 2.0 and above) "XENIX-style" calls
+; return error codes through AX. If an error occurred then
+; the carry bit will be set and the error code is in AX. If no error
+; occurred then the carry bit is reset and AX contains returned info.
+;
+; Since the set of error codes is being extended as we extend the operating
+; system, we have provided a means for applications to ask the system for a
+; recommended course of action when they receive an error.
+;
+; The GetExtendedError system call returns a universal error, an error
+; location and a recommended course of action. The universal error code is
+; a symptom of the error REGARDLESS of the context in which GetExtendedError
+; is issued.
+*/
+
+// 2.0 error codes
+
+#define error_invalid_function 1
+#define error_file_not_found 2
+#define error_path_not_found 3
+#define error_too_many_open_files 4
+#define error_access_denied 5
+#define error_invalid_handle 6
+#define error_arena_trashed 7
+#define error_not_enough_memory 8
+#define error_invalid_block 9
+#define error_bad_environment 10
+#define error_bad_format 11
+#define error_invalid_access 12
+#define error_invalid_data 13
+/**** reserved EQU 14 ; *****/
+#define error_invalid_drive 15
+#define error_current_directory 16
+#define error_not_same_device 17
+#define error_no_more_files 18
+
+// These are the universal int 24 mappings for the old INT 24 set of errors
+
+#define error_write_protect 19
+#define error_bad_unit 20
+#define error_not_ready 21
+#define error_bad_command 22
+#define error_CRC 23
+#define error_bad_length 24
+#define error_Seek 25
+#define error_not_DOS_disk 26
+#define error_sector_not_found 27
+#define error_out_of_paper 28
+#define error_write_fault 29
+#define error_read_fault 30
+#define error_gen_failure 31
+
+// the new 3.0 error codes reported through INT 24
+
+#define error_sharing_violation 32
+#define error_lock_violation 33
+#define error_wrong_disk 34
+#define error_FCB_unavailable 35
+#define error_sharing_buffer_exceeded 36
+#define error_Code_Page_Mismatched 37 // DOS 4.00 ;AN000;
+#define error_handle_EOF 38 // DOS 4.00 ;AN000;
+#define error_handle_Disk_Full 39 // DOS 4.00 ;AN000;
+
+// New OEM network-related errors are 50-79
+
+#define error_not_supported 50
+
+#define error_net_access_denied 65 //M028
+
+// End of INT 24 reportable errors
+
+#define error_file_exists 80
+#define error_DUP_FCB 81 // *****
+#define error_cannot_make 82
+#define error_FAIL_I24 83
+
+// New 3.0 network related error codes
+
+#define error_out_of_structures 84
+#define error_Already_assigned 85
+#define error_invalid_password 86
+#define error_invalid_parameter 87
+#define error_NET_write_fault 88
+#define error_sys_comp_not_loaded 90 // DOS 4.00 ;AN000;
+
+
+
+// BREAK <Interrupt 24 error codes>
+
+/** Int24 Error Codes **/
+
+#define error_I24_write_protect 0
+#define error_I24_bad_unit 1
+#define error_I24_not_ready 2
+#define error_I24_bad_command 3
+#define error_I24_CRC 4
+#define error_I24_bad_length 5
+#define error_I24_Seek 6
+#define error_I24_not_DOS_disk 7
+#define error_I24_sector_not_found 8
+#define error_I24_out_of_paper 9
+#define error_I24_write_fault 0xA
+#define error_I24_read_fault 0xB
+#define error_I24_gen_failure 0xC
+// NOTE: Code 0DH is used by MT-DOS.
+#define error_I24_wrong_disk 0xF
+
+
+// THE FOLLOWING ARE MASKS FOR THE AH REGISTER ON Int 24
+//
+// NOTE: ABORT is ALWAYS allowed
+
+#define Allowed_FAIL 0x08 // 00001000B
+#define Allowed_RETRY 0x10 // 00010000B
+#define Allowed_IGNORE 0x20 // 00100000B
+
+#define I24_operation 0x01 // 00000001B ;Z if READ,NZ if Write
+#define I24_area 0x60 // 00000110B ; 00 if DOS
+ // ; 01 if FAT
+ // ; 10 if root DIR
+ // ; 11 if DATA
+#define I24_class 0x80 // 10000000B ;Z if DISK, NZ if FAT or char
+
+
+// BREAK <GetExtendedError CLASSes ACTIONs LOCUSs>
+
+/** The GetExtendedError call takes an error code and returns CLASS,
+; ACTION and LOCUS codes to help programs determine the proper action
+; to take for error codes that they don't explicitly understand.
+*/
+
+// Values for error CLASS
+
+#define errCLASS_OutRes 1 // Out of Resource
+#define errCLASS_TempSit 2 // Temporary Situation
+#define errCLASS_Auth 3 // Permission problem
+#define errCLASS_Intrn 4 // Internal System Error
+#define errCLASS_HrdFail 5 // Hardware Failure
+#define errCLASS_SysFail 6 // System Failure
+#define errCLASS_Apperr 7 // Application Error
+#define errCLASS_NotFnd 8 // Not Found
+#define errCLASS_BadFmt 9 // Bad Format
+#define errCLASS_Locked 10 // Locked
+#define errCLASS_Media 11 // Media Failure
+#define errCLASS_Already 12 // Collision with Existing Item
+#define errCLASS_Unk 13 // Unknown/other
+
+// Values for error ACTION
+
+#define errACT_Retry 1 // Retry
+#define errACT_DlyRet 2 // Delay Retry, retry after pause
+#define errACT_User 3 // Ask user to regive info
+#define errACT_Abort 4 // abort with clean up
+#define errACT_Panic 5 // abort immediately
+#define errACT_Ignore 6 // ignore
+#define errACT_IntRet 7 // Retry after User Intervention
+
+// Values for error LOCUS
+
+#define errLOC_Unk 1 // No appropriate value
+#define errLOC_Disk 2 // Random Access Mass Storage
+#define errLOC_Net 3 // Network
+#define errLOC_SerDev 4 // Serial Device
+#define errLOC_Mem 5 // Memory
diff --git a/private/mvdm/inc/intapi.h b/private/mvdm/inc/intapi.h
new file mode 100644
index 000000000..6ba9a19fa
--- /dev/null
+++ b/private/mvdm/inc/intapi.h
@@ -0,0 +1,40 @@
+/*++
+
+Copyright (c) 1992 Microsoft Corporation
+
+Module Name:
+
+ intapi.h
+
+Abstract:
+
+ This header defines the function prototypes for the interrupt
+ handler support routines in the 486 emulator.
+
+Author:
+
+ Neil Sandlin (neilsa)
+
+Notes:
+
+
+Revision History:
+
+
+--*/
+
+NTSTATUS
+VdmInstallHardwareIntHandler(
+ PVOID HwIntHandler
+ );
+
+NTSTATUS
+VdmInstallSoftwareIntHandler(
+ PVOID SwIntHandler
+ );
+
+NTSTATUS
+VdmInstallFaultHandler(
+ PVOID FaultHandler
+ );
+
diff --git a/private/mvdm/inc/intmac.inc b/private/mvdm/inc/intmac.inc
new file mode 100644
index 000000000..0add7f929
--- /dev/null
+++ b/private/mvdm/inc/intmac.inc
@@ -0,0 +1,317 @@
+;++
+;
+; Copyright (c) 1989 Microsoft Corporation
+;
+; Module Name:
+;
+; intmac.inc
+;
+; Abstract:
+;
+; This module contains macros to allow code running in 16 bit protected
+; mode to manipulate the virtual interrupt flag
+;
+; Author:
+;
+; Dave Hastings (daveh) 24-Apr-1992
+;
+; Revision History:
+;
+;--
+
+
+VDM_INT_TRAP_GATE EQU 00000000h
+VDM_INT_INT_GATE EQU 00000001h
+VDM_INT_32 EQU 00000002h
+VDM_INT_16 EQU 00000000h
+EFLAGS_VIF equ 080000H
+
+ifdef WOW_x86
+include vint.inc
+riret macro
+ local a,b,c,d
+ push bp
+ mov bp,sp
+ push ax
+ push ds
+ mov ax,40h
+ mov ds,ax
+ mov ax,[bp+6]
+ test ax,200h
+ jz a
+ test ds:FIXED_NTVDMSTATE_REL40,RI_BIT_MASK
+ jz c
+ sti
+c: lock or word ptr ds:FIXED_NTVDMSTATE_REL40, VIRTUAL_INTERRUPT_BIT
+ jmp short b
+a:
+ test ds:FIXED_NTVDMSTATE_REL40,RI_BIT_MASK
+ jz d
+ cli
+d: lock and word ptr ds:FIXED_NTVDMSTATE_REL40,NOT VIRTUAL_INTERRUPT_BIT
+b:
+ pop ds
+ pop ax
+ pop bp
+ iret
+ endm
+
+riretd macro
+ local a,b,c,d
+ push bp
+ mov bp,sp
+ push ax
+ push ds
+ mov ax,40h
+ mov ds,ax
+ mov ax,[bp+10]
+ test ax,200h
+ jz a
+ test ds:FIXED_NTVDMSTATE_REL40,RI_BIT_MASK
+ jz c
+ sti
+c: lock or word ptr ds:FIXED_NTVDMSTATE_REL40, VIRTUAL_INTERRUPT_BIT
+ jmp short b
+a:
+ test ds:FIXED_NTVDMSTATE_REL40,RI_BIT_MASK
+ jz d
+ cli
+d: lock and word ptr ds:FIXED_NTVDMSTATE_REL40,NOT VIRTUAL_INTERRUPT_BIT
+b:
+ pop ds
+ pop ax
+ pop bp
+ iretd
+ endm
+
+riretd32 macro
+ local a,b,c,d
+ push ebp
+ mov ebp,esp
+ push ax
+ push ds
+ mov ax,40h
+ mov ds,ax
+ mov ax,[ebp+0ch]
+ test ax,200h
+ jz a
+ test ds:FIXED_NTVDMSTATE_REL40,RI_BIT_MASK
+ jz c
+ sti
+c: lock or word ptr ds:FIXED_NTVDMSTATE_REL40, VIRTUAL_INTERRUPT_BIT
+ jmp short b
+a:
+ test ds:FIXED_NTVDMSTATE_REL40,RI_BIT_MASK
+ jz d
+ cli
+d: lock and word ptr ds:FIXED_NTVDMSTATE_REL40,NOT VIRTUAL_INTERRUPT_BIT
+b:
+ pop ds
+ pop ax
+ pop ebp
+ iretd
+ endm
+
+rpopf macro
+ local a,b,c,d
+ push bp
+ mov bp,sp
+ push ax
+ push ds
+ mov ax,40h
+ mov ds,ax
+ mov ax,[bp+2]
+ test ax,200h
+ jz a
+ test ds:FIXED_NTVDMSTATE_REL40,RI_BIT_MASK
+ jz c
+ sti
+c: lock or word ptr ds:FIXED_NTVDMSTATE_REL40, VIRTUAL_INTERRUPT_BIT
+ jmp short b
+a:
+ test ds:FIXED_NTVDMSTATE_REL40,RI_BIT_MASK
+ jz d
+ cli
+d: lock and word ptr ds:FIXED_NTVDMSTATE_REL40,NOT VIRTUAL_INTERRUPT_BIT
+b:
+ pop ds
+ pop ax
+ pop bp
+ popf
+ endm
+
+rpopfd macro
+ local a,b,c,d
+ push bp
+ mov bp,sp
+ push ax
+ push ds
+ mov ax,40h
+ mov ds,ax
+ mov ax,[bp+2]
+ test ax,200h
+ jz a
+ test ds:FIXED_NTVDMSTATE_REL40,RI_BIT_MASK
+ jz c
+ sti
+c: lock or word ptr ds:FIXED_NTVDMSTATE_REL40, VIRTUAL_INTERRUPT_BIT
+ jmp short b
+a:
+ test ds:FIXED_NTVDMSTATE_REL40,RI_BIT_MASK
+ jz d
+ cli
+d: lock and word ptr ds:FIXED_NTVDMSTATE_REL40,NOT VIRTUAL_INTERRUPT_BIT
+b:
+ pop ds
+ pop ax
+ pop bp
+ popfd
+ endm
+
+;
+; The following assume that the RI bit implies a virtual interrupt flag
+; in eflags. See appendix h of the Pentium user's manual
+;
+rpushf macro
+ local a,b,c,d
+ .386p
+ pushf
+ push bp
+ mov bp,sp
+ push ax
+ push ds
+ mov ax,40h
+ mov ds,ax
+ mov ax,word ptr ds:FIXED_NTVDMSTATE_REL40
+ test ax,RI_BIT_MASK
+ jz c
+ pushfd
+ test dword ptr [bp-8],EFLAGS_VIF
+ jz d
+ or word ptr [bp+2],200h
+ popfd
+ jmp b
+d:
+ and word ptr [bp+2],NOT 200h
+ popfd
+ jmp b
+c:
+ test ax,VIRTUAL_INTERRUPT_BIT
+ jz a
+ or word ptr [bp+2],200h
+ jmp b
+a:
+ and word ptr [bp+2],NOT 200h
+b:
+ pop ds
+ pop ax
+ pop bp
+ .286p
+ endm
+
+rpushfd macro
+ local a,b,c,d
+ pushfd
+ push bp
+ mov bp,sp
+ push ax
+ push ds
+ mov ax,40h
+ mov ds,ax
+ mov ax,word ptr ds:FIXED_NTVDMSTATE_REL40
+ test ax,RI_BIT_MASK
+ jz c
+ test dword ptr [bp+2],EFLAGS_VIF
+ jz d
+ or word ptr [bp+2],200h
+ jmp b
+d:
+ and word ptr [bp+2],NOT 200h
+ jmp b
+c:
+ test ax,VIRTUAL_INTERRUPT_BIT
+ jz a
+ or word ptr [bp+2],200h
+ jmp b
+a:
+ and word ptr [bp+2],NOT 200h
+b:
+ pop ds
+ pop ax
+ pop bp
+ endm
+
+
+rpushfd32 macro
+ local a,b,c,d
+ pushfd
+ push ebp
+ mov ebp,esp
+ push ax
+ push ds
+ mov ax,40h
+ mov ds,ax
+ mov ax,word ptr ds:FIXED_NTVDMSTATE_REL40
+ test ax,RI_BIT_MASK
+ jz c
+ test dword ptr [ebp+4],EFLAGS_VIF
+ jz d
+ or word ptr [ebp+4],200h
+ jmp b
+d:
+ and word ptr [ebp+4],NOT 200h
+ jmp b
+c:
+ test ax,VIRTUAL_INTERRUPT_BIT
+ jz a
+ or word ptr [ebp+4],200h
+ jmp b
+a:
+ and word ptr [ebp+4],NOT 200h
+b:
+ pop ds
+ pop ax
+ pop ebp
+ endm
+ELSE
+riret macro
+ iret
+ endm
+
+riretd macro
+ iretd
+ endm
+
+riretd32 macro
+ iretd
+ endm
+
+rpopf macro
+ popf
+ endm
+
+rpopfd macro
+ popfd
+ endm
+
+rpushf macro
+ pushf
+ endm
+
+rpushfd macro
+ pushfd
+ endm
+
+rpushfd32 macro
+ pushfd
+ endm
+
+FCLI macro
+ cli
+ endm
+
+FSTI macro
+ sti
+ endm
+
+ENDIF
diff --git a/private/mvdm/inc/makefile b/private/mvdm/inc/makefile
new file mode 100644
index 000000000..5ef0946f1
--- /dev/null
+++ b/private/mvdm/inc/makefile
@@ -0,0 +1,126 @@
+# MVDM\INC makefile
+#
+# Copyright (c) 1991, Microsoft Corporation
+#
+# History:
+# 14-May-1991 Jeff Parsons (jeffpar)
+# Created.
+# 08-Dec-1991 Sudeep Bharati (sudeepb)
+# Changed the h2inc usage for DOSSVC to include strucs
+# 12-FEB-92 mattfe added tdb16.h
+# 14-April-92 ChandanC added WOWSHELL.H
+# 12-May-1992 MikeTri added MultiMedia header
+#
+
+!IFDEF USEBUILD
+
+# If using BUILD.EXE, edit .\sources. if you want to add a new source
+# file to this component. This file merely indirects to the real make file
+# that is shared by all the components of NT OS/2.
+
+!INCLUDE $(NTMAKEENV)\makefile.def
+
+!ELSE
+
+########## Path definition so we find 16 bit tools ##########
+# Also works around stupid bug in RC 3.1 that doesn't allow rcpp.err to be
+# in a directory that is greater than 128 chars down the path, even if
+# rc 3.1 is running as an OS/2 app.
+
+PATH = $(_NTBINDIR)\private\mvdm\tools16;$(PATH)
+
+.SUFFIXES:
+.SUFFIXES: .c .asm .h .inc .obj .lst .sys .exe .com .map .sym .def .lib
+
+
+.h.inc:
+ h2inc -t -s mvdm.h -s wow.h $*.h -o $*.inc
+
+
+INC_FILES = mvdm.inc softpc.inc bop.inc vint.inc \
+ wow.inc wownt32.inc wowkrn.inc wowusr.inc wowgdi.inc wowshell.inc \
+ wowkbd.inc wowsnd.inc tdb16.inc dpmi.inc dossvc.inc \
+ xmssvc.inc cmdsvc.inc rdrsvc.inc dbgsvc.inc \
+ apistruc.inc enumapis.inc wowmmed.inc wowmmcb.inc vrdlctab.inc \
+ wowwsock.inc wowth.inc vrdefld.inc wowcmdlg.inc wowcmpat.inc \
+ doswow.inc curdir.inc vdmtib.inc
+
+all: $(INC_FILES)
+
+clean: cleanup all
+
+
+#
+# Do NOT do del *.inc here. There are include files checked into this
+# directory, and it's really annoying to have all of your changes vanish
+# on a clean build
+#
+cleanup:
+ !-del $(INC_FILES)
+
+mvdm.inc: mvdm.h
+
+softpc.inc: softpc.h
+
+bop.inc: bop.h
+
+vint.inc: vint.h
+
+wow.inc: wow.h mvdm.h bop.h
+
+wowcmdlg.inc: wowcmdlg.h wow.inc
+
+wowkrn.inc: wowkrn.h wow.inc
+
+wowusr.inc: wowusr.h wow.inc
+
+wowgdi.inc: wowgdi.h wow.inc
+
+wowshell.inc: wowshell.h wow.inc
+
+wowkbd.inc: wowkbd.h wow.inc
+
+wowsnd.inc: wowsnd.h wow.inc
+
+wowmmed.inc: wowmmed.h wowmmcb.inc wow.inc
+ h2inc -t -s mvdm.h -s wow.h -s wowmmcb.h $*.h -o $*.inc
+
+wowwsock.inc: wowwsock.h wow.inc
+
+wowth.inc: wowth.h wow.inc
+
+tdb16.inc: tdb16.h
+ h2inc -s mvdm.h -s wow.h tdb16.h -o tdb16.inc
+
+dossvc.inc: dossvc.h bop.h
+ h2inc -s mvdm.h -s wow.h dossvc.h -o dossvc.inc
+
+xmssvc.inc: xmssvc.h bop.h
+
+cmdsvc.inc: cmdsvc.h bop.h
+
+curdir.inc: curdir.h bop.h
+ h2inc -s mvdm.h -s wow.h curdir.h -o curdir.inc
+
+dbgsvc.inc: dbgsvc.h bop.h
+
+dpmi.inc: dpmi.h bop.inc
+
+rdrsvc.inc: rdrsvc.h bop.h
+
+apistruc.inc: apistruc.h
+
+enumapis.inc: enumapis.h
+
+vrdlctab.inc: vrdlctab.h
+
+vrdefld.inc: vrdefld.h
+
+doswow.inc: doswow.h
+
+wownt32.inc: \nt\public\sdk\inc\wownt32.h
+ h2inc -t -s mvdm.h -s wow.h \nt\public\sdk\inc\wownt32.h -o wownt32.inc
+
+vdmtib.inc: ..\..\inc\vdm.h
+ h2inc -t -s mvdm.h -s wow.h ..\..\inc\vdm.h -o vdmtib.inc
+!ENDIF
diff --git a/private/mvdm/inc/memapi.h b/private/mvdm/inc/memapi.h
new file mode 100644
index 000000000..62b01cac9
--- /dev/null
+++ b/private/mvdm/inc/memapi.h
@@ -0,0 +1,82 @@
+/*++
+
+Copyright (c) 1992 Microsoft Corporation
+
+Module Name:
+
+ memapi.h
+
+Abstract:
+
+ This header defines the function prototypes for the memory
+ manipulation routines in the 486 emulator.
+
+Author:
+
+ Neil Sandlin (neilsa)
+
+Notes:
+
+
+Revision History:
+
+
+--*/
+
+NTSTATUS
+VdmAllocateVirtualMemory(
+ PULONG Address,
+ ULONG Size,
+ BOOLEAN Commit
+ );
+
+NTSTATUS
+VdmFreeVirtualMemory(
+ ULONG Address
+ );
+
+NTSTATUS
+VdmCommitVirtualMemory(
+ ULONG Address,
+ ULONG Size
+ );
+
+NTSTATUS
+VdmDeCommitVirtualMemory(
+ ULONG Address,
+ ULONG Size
+ );
+
+NTSTATUS
+VdmQueryFreeVirtualMemory(
+ PULONG FreeBytes,
+ PULONG LargestFreeBlock
+ );
+
+NTSTATUS
+VdmReallocateVirtualMemory(
+ ULONG OldAddress,
+ PULONG NewAddress,
+ ULONG NewSize
+ );
+
+NTSTATUS
+VdmAddVirtualMemory(
+ ULONG HostAddress,
+ ULONG Size,
+ PULONG IntelAddress
+ );
+
+NTSTATUS
+VdmRemoveVirtualMemory(
+ ULONG IntelAddress
+ );
+
+
+BOOL
+VdmAddDescriptorMapping(
+ USHORT SelectorStart,
+ USHORT SelectorCount,
+ ULONG LdtBase,
+ ULONG Flat
+ );
diff --git a/private/mvdm/inc/monregs.h b/private/mvdm/inc/monregs.h
new file mode 100644
index 000000000..3fbfbdd08
--- /dev/null
+++ b/private/mvdm/inc/monregs.h
@@ -0,0 +1,103 @@
+extern CONTEXT IntelRegisters;
+extern ULONG IntelMSW;
+// Flag Register constants
+
+#define FLG_CARRY 0x00000001
+#define FLG_CARRY_BIT 0x00000000
+#define FLG_PARITY 0x00000004
+#define FLG_PARITY_BIT 0x00000003
+#define FLG_AUXILIARY 0x00000010
+#define FLG_AUXILIARY_BIT 0x00000005
+#define FLG_ZERO 0x00000040
+#define FLG_ZERO_BIT 0x00000006
+#define FLG_SIGN 0x00000080
+#define FLG_SIGN_BIT 0x00000007
+#define FLG_INTERRUPT 0x00000200
+#define FLG_INTERRUPT_BIT 0x00000009
+#define FLG_DIRECTION 0x00000400
+#define FLG_DIRECTION_BIT 0x0000000A
+#define FLG_OVERFLOW 0x00000800
+#define FLG_OVERFLOW_BIT 0x0000000B
+extern ULONG getEAX(VOID);
+extern USHORT getAX(VOID);
+extern UCHAR getAL(VOID);
+extern UCHAR getAH(VOID);
+extern ULONG getEBX(VOID);
+extern USHORT getBX(VOID);
+extern UCHAR getBL(VOID);
+extern UCHAR getBH(VOID);
+extern ULONG getECX(VOID);
+extern USHORT getCX(VOID);
+extern UCHAR getCL(VOID);
+extern UCHAR getCH(VOID);
+extern ULONG getEDX(VOID);
+extern USHORT getDX(VOID);
+extern UCHAR getDL(VOID);
+extern UCHAR getDH(VOID);
+extern ULONG getESP(VOID);
+extern USHORT getSP(VOID);
+extern ULONG getEBP(VOID);
+extern USHORT getBP(VOID);
+extern ULONG getESI(VOID);
+extern USHORT getSI(VOID);
+extern ULONG getEDI(VOID);
+extern USHORT getDI(VOID);
+extern ULONG getEIP(VOID);
+extern USHORT getIP(VOID);
+extern USHORT getCS(VOID);
+extern USHORT getSS(VOID);
+extern USHORT getDS(VOID);
+extern USHORT getES(VOID);
+extern USHORT getFS(VOID);
+extern USHORT getGS(VOID);
+extern ULONG getCF(VOID);
+extern ULONG getPF(VOID);
+extern ULONG getAF(VOID);
+extern ULONG getZF(VOID);
+extern ULONG getSF(VOID);
+extern ULONG getIF(VOID);
+extern ULONG getDF(VOID);
+extern ULONG getOF(VOID);
+extern USHORT getMSW(VOID);
+
+extern VOID setEAX(ULONG);
+extern VOID setAX(USHORT);
+extern VOID setAH(UCHAR);
+extern VOID setAL(UCHAR);
+extern VOID setEBX(ULONG);
+extern VOID setBX(USHORT);
+extern VOID setBH(UCHAR);
+extern VOID setBL(UCHAR);
+extern VOID setECX(ULONG);
+extern VOID setCX(USHORT);
+extern VOID setCH(UCHAR);
+extern VOID setCL(UCHAR);
+extern VOID setEDX(ULONG);
+extern VOID setDX(USHORT);
+extern VOID setDH(UCHAR);
+extern VOID setDL(UCHAR);
+extern VOID setESP(ULONG);
+extern VOID setSP(USHORT);
+extern VOID setEBP(ULONG);
+extern VOID setBP(USHORT);
+extern VOID setESI(ULONG);
+extern VOID setSI(USHORT);
+extern VOID setEDI(ULONG);
+extern VOID setDI(USHORT);
+extern VOID setEIP(ULONG);
+extern VOID setIP(USHORT);
+extern VOID setCS(USHORT);
+extern VOID setSS(USHORT);
+extern VOID setDS(USHORT);
+extern VOID setES(USHORT);
+extern VOID setFS(USHORT);
+extern VOID setGS(USHORT);
+extern VOID setCF(ULONG);
+extern VOID setPF(ULONG);
+extern VOID setAF(ULONG);
+extern VOID setZF(ULONG);
+extern VOID setSF(ULONG);
+extern VOID setIF(ULONG);
+extern VOID setDF(ULONG);
+extern VOID setOF(ULONG);
+extern VOID setMSW(USHORT);
diff --git a/private/mvdm/inc/mvdm.h b/private/mvdm/inc/mvdm.h
new file mode 100644
index 000000000..dce401502
--- /dev/null
+++ b/private/mvdm/inc/mvdm.h
@@ -0,0 +1,91 @@
+/*++ BUILD Version: 0001
+ *
+ * MVDM v1.0
+ *
+ * Copyright (c) 1991, Microsoft Corporation
+ *
+ * MVDM.H
+ * Constants, macros, and types common to all of MVDM
+ *
+ * History:
+ * Created 14-May-1991 by Jeff Parsons (jeffpar)
+--*/
+
+
+/* Common constants, not defined in NT/WIN32
+ */
+#define K 1024L
+
+
+/* Common types, not defined in NT/WIN32
+ */
+#ifdef H2INC
+typedef unsigned char BYTE;
+typedef unsigned short WORD;
+typedef unsigned long DWORD;
+typedef long LONG;
+typedef char CHAR;
+typedef short SHORT;
+typedef unsigned short USHORT;
+typedef unsigned long ULONG;
+typedef char *PSZ;
+typedef void *PVOID;
+typedef ULONG *PULONG;
+typedef WORD ATOM;
+#endif
+
+// typedef int INT;
+// typedef DWORD UINT;
+typedef short FAR *LPSHORT;
+typedef char SZ[];
+typedef char FAR *LPSZ;
+typedef PBYTE *PPBYTE;
+typedef PWORD *PPWORD;
+typedef PDWORD *PPDWORD;
+// typedef UINT *PUINT;
+
+
+// unaligned typedefs
+
+typedef WORD UNALIGNED *PWORD16;
+typedef SHORT UNALIGNED *PSHORT16;
+typedef DWORD UNALIGNED *PDWORD16;
+
+#define WORDOF16(i,n) (((PWORD16)&(i))[n])
+#define LOW16(l) WORDOF16(l,0)
+#define HIW16(l) WORDOF16(l,1)
+
+/* Common macros, not defined in NT/WIN32
+ */
+#define BYTEOF(i,n) (((PBYTE)&(i))[n])
+#define LOB(i) BYTEOF(i,0)
+#define HIB(i) BYTEOF(i,1)
+#define WORDOF(i,n) (((PWORD)&(i))[n])
+#define LOW(l) WORDOF(l,0)
+#define HIW(l) WORDOF(l,1)
+#define INTOF(i,n) (((PINT)&(i))[n])
+#define UINTOF(i,n) (((PUINT)&(i))[n])
+#ifndef MAKEWORD
+#define MAKEWORD(l,h) ((WORD)((BYTE)(l)|((BYTE)(h)<<8)))
+#endif
+#define MAKEDWORD(l0,h0,l1,h1) ((DWORD)MAKEWORD(l0,h0)|((DWORD)MAKEWORD(l1,h1)<<16))
+#define GETBYTE(p) *((PBYTE)p)++
+#ifdef i386
+#define FETCHWORD(s) ((WORD)(s))
+#define FETCHDWORD(s) ((DWORD)(s))
+#define STOREWORD(d,s) (WORD)d=(WORD)s
+#define STOREDWORD(d,s) (DWORD)d=(DWORD)s
+#else
+#define FETCHWORD(s) (*(UNALIGNED WORD *)&(s))
+#define FETCHDWORD(s) (*(UNALIGNED DWORD *)&(s))
+#define STOREWORD(d,s) *(UNALIGNED WORD *)&(d)=(WORD)s
+#define STOREDWORD(d,s) *(UNALIGNED DWORD *)&(d)=(DWORD)s
+#endif
+#define FETCHSHORT(s) ((SHORT)(FETCHWORD(s)))
+#define FETCHLONG(s) ((LONG)(FETCHDWORD(s)))
+#define STORESHORT(d,s) STOREWORD(d,s)
+#define STORELONG(d,s) STOREDWORD(d,s)
+
+#define NUMEL(a) ((sizeof a)/(sizeof a[0]))
+#define OFFSETOF(t,f) ((INT)&(((t *)0)->f))
+
diff --git a/private/mvdm/inc/netb.h b/private/mvdm/inc/netb.h
new file mode 100644
index 000000000..f96b57a7e
--- /dev/null
+++ b/private/mvdm/inc/netb.h
@@ -0,0 +1,97 @@
+
+/*++
+
+Copyright (c) 1991 Microsoft Corporation
+
+Module Name:
+
+ vrnetb.h
+
+Abstract:
+
+ Contains prototypes and definitions for Vdm netbios support routines
+
+Author:
+
+ Colin Watson (colinw) 09-Dec-1991
+
+Revision History:
+
+ 09-Dec-1991 colinw
+ Created
+
+--*/
+
+//
+// Internal version of the ncb layout for mvdm.
+//
+
+#include <packon.h>
+
+//
+// Use packing to ensure that the cu union is not forced to word alignment.
+// All elements of this structure are naturally aligned.
+//
+
+typedef struct _NCBW {
+ UCHAR ncb_command; /* command code */
+ volatile UCHAR ncb_retcode; /* return code */
+ UCHAR ncb_lsn; /* local session number */
+ UCHAR ncb_num; /* number of our network name */
+ PUCHAR ncb_buffer; /* address of message buffer */
+ WORD ncb_length; /* size of message buffer */
+ union {
+ UCHAR ncb_callname[NCBNAMSZ];/* blank-padded name of remote */
+ struct _CHAIN_SEND {
+ WORD ncb_length2;
+ PUCHAR ncb_buffer2;
+ } ncb_chain;
+ } cu;
+ UCHAR ncb_name[NCBNAMSZ]; /* our blank-padded netname */
+ UCHAR ncb_rto; /* rcv timeout/retry count */
+ UCHAR ncb_sto; /* send timeout/sys timeout */
+ void (*ncb_post)( struct _NCB * ); /* POST routine address */
+ UCHAR ncb_lana_num; /* lana (adapter) number */
+ volatile UCHAR ncb_cmd_cplt; /* 0xff => commmand pending */
+
+ // Make driver specific use of the reserved area of the NCB.
+ WORD ncb_reserved; /* return to natural alignment */
+ union {
+ LIST_ENTRY ncb_next; /* queued to worker thread */
+ IO_STATUS_BLOCK ncb_iosb; /* used for Nt I/O interface */
+ } u;
+
+ HANDLE ncb_event; /* HANDLE to Win32 event */
+
+ // Extra workspace utilized by the mvdm component.
+
+ WORD ncb_es; /* 16 bit address of the real NCB */
+ WORD ncb_bx;
+
+ PNCB ncb_original_ncb; /* 32 bit address of the real NCB */
+ DWORD ProtectModeNcb; /* TRUE if NCB originated in PM */
+
+ } NCBW, *PNCBW;
+
+#include <packoff.h>
+
+VOID
+VrNetbios5c(
+ VOID
+ );
+
+
+VOID
+VrNetbios5cInterrupt(
+ VOID
+ );
+
+VOID
+VrNetbios5cInitialize(
+ VOID
+ );
+
+BOOLEAN
+IsPmNcbAtQueueHead(
+ VOID
+ );
diff --git a/private/mvdm/inc/oemuni.h b/private/mvdm/inc/oemuni.h
new file mode 100644
index 000000000..0e95db379
--- /dev/null
+++ b/private/mvdm/inc/oemuni.h
@@ -0,0 +1,240 @@
+/*
+ * OemUnicode win32 thunk prototypes
+ *
+ * 14-Jan-1993 Jonle, created
+ *
+ * Should be identical to ansi form with "Oem" appended
+ * instead of "A"
+ */
+
+HANDLE
+WINAPI
+CreateFileOem(
+ LPCSTR lpFileName,
+ DWORD dwDesiredAccess,
+ DWORD dwShareMode,
+ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
+ DWORD dwCreationDisposition,
+ DWORD dwFlagsAndAttributes,
+ HANDLE hTemplateFile
+ );
+
+BOOL
+APIENTRY
+SetFileAttributesOem(
+ LPSTR lpFileName,
+ DWORD dwFileAttributes
+ );
+
+DWORD
+APIENTRY
+GetFileAttributesOem(
+ LPSTR lpFileName
+ );
+
+BOOL
+APIENTRY
+DeleteFileOem(
+ LPSTR lpFileName
+ );
+
+BOOL
+APIENTRY
+MoveFileOem(
+ LPSTR lpExistingFileName,
+ LPSTR lpNewFileName
+ );
+
+BOOL
+APIENTRY
+MoveFileExOem(
+ LPSTR lpExistingFileName,
+ LPSTR lpNewFileName,
+ DWORD fdwFlags
+ );
+
+HANDLE
+APIENTRY
+FindFirstFileOem(
+ LPSTR lpFileName,
+ LPWIN32_FIND_DATAA lpFindFileData
+ );
+
+BOOL
+APIENTRY
+FindNextFileOem(
+ HANDLE hFindFile,
+ LPWIN32_FIND_DATAA lpFindFileData
+ );
+
+DWORD
+APIENTRY
+GetFullPathNameOem(
+ LPCSTR lpFileName,
+ DWORD nBufferLength,
+ LPSTR lpBuffer,
+ LPSTR *lpFilePart
+ );
+
+DWORD
+APIENTRY
+GetCurrentDirectoryOem(
+ DWORD nBufferLength,
+ LPSTR lpBuffer
+ );
+
+BOOL
+APIENTRY
+SetCurrentDirectoryOem(
+ LPSTR lpPathName
+ );
+
+BOOL
+APIENTRY
+CreateDirectoryOem(
+ LPSTR lpPathName,
+ LPSECURITY_ATTRIBUTES lpSecurityAttributes
+ );
+
+BOOL
+APIENTRY
+RemoveDirectoryOem(
+ LPSTR lpPathName
+ );
+
+UINT
+APIENTRY
+GetSystemDirectoryOem(
+ LPSTR lpBuffer,
+ UINT uSize
+ );
+
+UINT
+APIENTRY
+GetWindowsDirectoryOem(
+ LPSTR lpBuffer,
+ UINT uSize
+ );
+
+UINT
+APIENTRY
+GetDriveTypeOem(
+ LPSTR lpRootPathName
+ );
+
+DWORD
+APIENTRY
+SearchPathOem (
+ LPCSTR lpPath,
+ LPCSTR lpFileName,
+ LPCSTR lpExtension,
+ DWORD nBufferLength,
+ LPSTR lpBuffer,
+ LPSTR *lpFilePart
+ );
+
+DWORD
+APIENTRY
+GetTempPathOem(
+ DWORD nBufferLength,
+ LPSTR lpBuffer
+ );
+
+UINT
+APIENTRY
+GetTempFileNameOem(
+ LPCSTR lpPathName,
+ LPCSTR lpPrefixString,
+ UINT uUnique,
+ LPSTR lpTempFileName
+ );
+
+BOOL
+APIENTRY
+GetDiskFreeSpaceOem(
+ LPSTR lpRootPathName,
+ LPDWORD lpSectorsPerCluster,
+ LPDWORD lpBytesPerSector,
+ LPDWORD lpNumberOfFreeClusters,
+ LPDWORD lpTotalNumberOfClusters
+ );
+
+BOOL
+APIENTRY
+GetVolumeInformationOem(
+ LPSTR lpRootPathName,
+ LPSTR lpVolumeNameBuffer,
+ DWORD nVolumeNameSize,
+ LPDWORD lpVolumeSerialNumber,
+ LPDWORD lpMaximumComponentLength,
+ LPDWORD lpFileSystemFlags,
+ LPSTR lpFileSystemNameBuffer,
+ DWORD nFileSystemNameSize
+ );
+
+BOOL
+WINAPI
+CreateProcessOem(
+ LPCSTR lpApplicationName,
+ LPCSTR lpCommandLine,
+ LPSECURITY_ATTRIBUTES lpProcessAttributes,
+ LPSECURITY_ATTRIBUTES lpThreadAttributes,
+ BOOL bInheritHandles,
+ DWORD dwCreationFlags,
+ LPVOID lpEnvironment,
+ LPSTR lpCurrentDirectory,
+ LPSTARTUPINFOA lpStartupInfo,
+ LPPROCESS_INFORMATION lpProcessInformation
+ );
+
+DWORD
+WINAPI
+GetEnvironmentVariableOem(
+ LPSTR lpName,
+ LPSTR lpBuffer,
+ DWORD nSize
+ );
+
+BOOL
+WINAPI
+SetEnvironmentVariableOem(
+ LPSTR lpName,
+ LPSTR lpValue
+ );
+
+DWORD
+WINAPI
+ExpandEnvironmentStringsOem(
+ LPSTR lpSrc,
+ LPSTR lpDst,
+ DWORD cchDst
+ );
+
+
+
+VOID
+APIENTRY
+OutputDebugStringOem(
+ LPCSTR lpOutputString
+ );
+
+BOOL
+WINAPI
+GetComputerNameOem (
+ LPSTR lpComputerName,
+ LPDWORD BufferSize
+ );
+
+BOOL
+WINAPI
+RemoveFontResourceOem(
+ LPSTR lpFileName
+ );
+
+UINT
+WINAPI
+GetShortPathNameOem(
+ LPSTR lpSrc,
+ LPSTR lpDst,
+ DWORD cchDst
+ );
diff --git a/private/mvdm/inc/rdrexp.h b/private/mvdm/inc/rdrexp.h
new file mode 100644
index 000000000..fca12ba4b
--- /dev/null
+++ b/private/mvdm/inc/rdrexp.h
@@ -0,0 +1,29 @@
+/*++
+
+Copyright (c) 1991 Microsoft Corporation
+
+Module Name:
+
+ rdrexp.h
+
+Abstract:
+
+ Definition of Vdm Redir BOP dispatcher
+
+Author:
+
+ Richard L Firth (rfirth) 13-Sep-1991
+
+Revision History:
+
+ 13-Sep-1991 rfirth
+ Created
+
+--*/
+
+
+
+BOOL
+VrDispatch(
+ IN ULONG SvcCode
+ );
diff --git a/private/mvdm/inc/rdrsvc.h b/private/mvdm/inc/rdrsvc.h
new file mode 100644
index 000000000..cf53c940e
--- /dev/null
+++ b/private/mvdm/inc/rdrsvc.h
@@ -0,0 +1,94 @@
+/*++
+
+Copyright (c) 1991 Microsoft Corporation
+
+Module Name:
+
+ rdrsvc.h
+
+Abstract:
+
+ Contains BOP codes for Vdm Redir (Vr) BOP dispatcher
+
+Author:
+
+ Richard L Firth (rfirth) 13-Sep-1991
+
+Revision History:
+
+ 13-Sep-1991 rfirth
+ Created
+
+--*/
+
+
+
+/* ASM
+include bop.inc
+
+SVC macro SvcNum
+ BOP BOP_REDIR
+ db SvcNum
+endm
+
+*/
+
+
+
+//
+// Note: the order has no bearing on the order of the 5f dispatch table or
+// vice versa. However, the order must be contiguous
+//
+
+#define SVC_RDRINITIALIZE 0x00 // redir loaded
+#define SVC_RDRUNINITIALIZE 0x01 // redir unloaded
+#define SVC_RDRQNMPIPEINFO 0x02 // DosQNmPipeInfo
+#define SVC_RDRQNMPHANDSTATE 0x03 // DosQNmpHandState
+#define SVC_RDRSETNMPHANDSTATE 0x04 // DosSetNmpHandState
+#define SVC_RDRPEEKNMPIPE 0x05 // DosPeekNmPipe
+#define SVC_RDRTRANSACTNMPIPE 0x06 // DosTransactNmPipe
+#define SVC_RDRCALLNMPIPE 0x07 // DosCallNmPipe
+#define SVC_RDRWAITNMPIPE 0x08 // DosWaitNmPipe
+#define SVC_RDRDELETEMAILSLOT 0x09 // DosDeleteMailslot
+#define SVC_RDRGETMAILSLOTINFO 0x0a // DosMailslotInfo
+#define SVC_RDRMAKEMAILSLOT 0x0b // DosMakeMailslot
+#define SVC_RDRPEEKMAILSLOT 0x0c // DosPeekMailslot
+#define SVC_RDRREADMAILSLOT 0x0d // DosReadMailslot
+#define SVC_RDRWRITEMAILSLOT 0x0e // DosWriteMailslot
+#define SVC_RDRTERMINATE 0x0f // NetResetEnvironment for mailslots
+#define SVC_RDRTRANSACTAPI 0x10 // NetTransactAPI
+#define SVC_RDRIREMOTEAPI 0x11 // NetIRemoteAPI
+#define SVC_RDRNULLTRANSACTAPI 0x12 // NetTransactAPI
+#define SVC_RDRSERVERENUM 0x13 // NetServerEnum (remoted)
+#define SVC_RDRUSEADD 0x14 // NetUseAdd (local)
+#define SVC_RDRUSEDEL 0x15 // NetUseDel (local)
+#define SVC_RDRUSEENUM 0x16 // NetUseEnum (local)
+#define SVC_RDRUSEGETINFO 0x17 // NetUseGetInfo (local)
+#define SVC_RDRWKSTAGETINFO 0x18 // NetWkstaGetInfo (local)
+#define SVC_RDRWKSTASETINFO 0x19 // NetWkstaSetInfo (local)
+#define SVC_RDRMESSAGEBUFFERSEND 0x1a // NetMessageBufferSend (local)
+#define SVC_RDRGETCDNAMES 0x1b // NetGetEnumInfo.CDNames
+#define SVC_RDRGETCOMPUTERNAME 0x1c // NetGetEnumInfo.ComputerName
+#define SVC_RDRGETUSERNAME 0x1d // NetGetEnumInfo.UserName
+#define SVC_RDRGETDOMAINNAME 0x1e // NetGetEnumInfo.DomainName
+#define SVC_RDRGETLOGONSERVER 0x1f // NetGetEnumInfo.LogonServer
+#define SVC_RDRHANDLEGETINFO 0x20 // NetHandleGetInfo
+#define SVC_RDRHANDLESETINFO 0x21 // NetHandleSetInfo
+#define SVC_RDRGETDCNAME 0x22 // NetGetDCName
+#define SVC_RDRREADASYNCNMPIPE 0x23 // DosReadAsyncNmPipe
+#define SVC_RDRWRITEASYNCNMPIPE 0x24 // DosWriteAsyncNmPipe
+#define SVC_NETBIOS5C 0x25 // Netbios request handler
+#define SVC_NETBIOS5CINTERRUPT 0x26 // Netbios/Dlc post routine request
+#define SVC_DLC_5C 0x27 // Dlc request handler
+#define SVC_VDM_WINDOW_INIT 0x28 // Inits memory window
+#define SVC_RDRRETURN_MODE 0x29 // returns pause/continue state
+#define SVC_RDRSET_MODE 0x2a // sets pause/continue state
+#define SVC_RDRGET_ASG_LIST 0x2b // old NetUseGetInfo
+#define SVC_RDRDEFINE_MACRO 0x2c // old NetUseAdd
+#define SVC_RDRBREAK_MACRO 0x2d // old NetUseDel
+#define SVC_RDRSERVICECONTROL 0x2e // NetServiceControl
+#define SVC_RDRINTACK 0x2f // VrDismissInterrupt
+#define SVC_RDRINTACK2 0x30 // VrDismissInterrupt2
+#define SVC_NETBIOSCHECK 0x31 // VrCheckPmNetbiosAnr
+
+#define MAX_REDIR_SVC SVC_NETBIOSCHECK
diff --git a/private/mvdm/inc/sharewow.h b/private/mvdm/inc/sharewow.h
new file mode 100644
index 000000000..2ddff8e09
--- /dev/null
+++ b/private/mvdm/inc/sharewow.h
@@ -0,0 +1,135 @@
+
+// Some nice shared memory macros
+//
+// Changed by DaveHart 25-Feb-96 so that the shared memory
+// is kept open and mapped for the duration of the process.
+// At the same time added needed synchronization.
+//
+
+#define LOCKSHAREWOW() LockWowSharedMemory()
+#define UNLOCKSHAREWOW() ReleaseMutex(hSharedWOWMutex)
+
+#define MAX_SHARED_OBJECTS 200
+
+typedef struct _SHAREDTASKMEM {
+ BOOL fInitialized;
+ DWORD dwFirstProcess; // Offset into shared memory where 1st shared process struct begins
+} SHAREDTASKMEM, *LPSHAREDTASKMEM;
+
+typedef struct _SHAREDPROCESS {
+ DWORD dwType;
+ DWORD dwProcessId;
+ DWORD dwAttributes; // WOW_SYSTEM for shared WOW
+ DWORD dwNextProcess; // Offset into shared memory where next shared process struct begins
+ DWORD dwFirstTask; // Offset into shared memory where 1st task for this process begins
+ LPTHREAD_START_ROUTINE pfnW32HungAppNotifyThread; // For VDMTerminateTaskWOW
+} SHAREDPROCESS, *LPSHAREDPROCESS;
+
+typedef struct _SHAREDTASK {
+ DWORD dwType;
+ DWORD dwThreadId;
+ WORD hTask16;
+ WORD hMod16;
+ DWORD dwNextTask; // Offset into shared memory where next task for this process begins
+ CHAR szModName[9]; // null terminated
+ CHAR szFilePath[128]; // null terminated
+} SHAREDTASK, *LPSHAREDTASK;
+
+typedef union _SHAREDMEMOBJECT {
+ SHAREDPROCESS sp;
+ SHAREDTASK st;
+ DWORD dwType;
+} SHAREDMEMOBJECT, *LPSHAREDMEMOBJECT;
+
+#define SMO_AVAILABLE 0
+#define SMO_PROCESS 1
+#define SMO_TASK 2
+
+#ifndef SHAREWOW_MAIN
+extern HANDLE hSharedWOWMem;
+extern LPSHAREDTASKMEM lpSharedWOWMem;
+extern CHAR szWowSharedMemName[];
+extern HANDLE hSharedWOWMutex;
+LPSHAREDTASKMEM LockWowSharedMemory(VOID);
+#else
+HANDLE hSharedWOWMem = NULL;
+LPSHAREDTASKMEM lpSharedWOWMem = NULL;
+CHAR szWowSharedMemName[] = "msvdmdbg.wow";
+CHAR szWowSharedMutexName[] = "msvdmdbg.mtx";
+HANDLE hSharedWOWMutex = NULL;
+
+LPSHAREDTASKMEM LockWowSharedMemory(VOID)
+{
+ DWORD dwWaitResult;
+ LPSHAREDTASKMEM RetVal = NULL;
+ SECURITY_DESCRIPTOR sd;
+ SECURITY_ATTRIBUTES sa;
+
+ InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);
+ SetSecurityDescriptorDacl(&sd, TRUE, NULL, FALSE); // NULL DACL == wide open
+
+ RtlZeroMemory(&sa, sizeof sa);
+ sa.nLength = sizeof sa;
+ sa.lpSecurityDescriptor = &sd;
+
+ if (! lpSharedWOWMem ) {
+
+ if (! hSharedWOWMutex) {
+ hSharedWOWMutex = CreateMutex(&sa, FALSE, szWowSharedMutexName); // will open if exists
+ if (! hSharedWOWMutex) {
+ goto Fail;
+ }
+ }
+
+ if (! hSharedWOWMem) {
+
+ hSharedWOWMem = CreateFileMapping( // will open if it exists
+ (HANDLE)-1,
+ &sa,
+ PAGE_READWRITE,
+ 0,
+ sizeof(SHAREDTASKMEM) +
+ (MAX_SHARED_OBJECTS *
+ sizeof(SHAREDMEMOBJECT)),
+ szWowSharedMemName);
+
+ if (! hSharedWOWMem) {
+ goto Fail;
+ }
+ }
+
+ lpSharedWOWMem = MapViewOfFile(hSharedWOWMem, FILE_MAP_WRITE, 0, 0, 0);
+ if (! lpSharedWOWMem) {
+ goto Fail;
+ }
+ }
+
+ dwWaitResult = WaitForSingleObject(hSharedWOWMutex, INFINITE);
+
+ if (dwWaitResult != WAIT_OBJECT_0 && dwWaitResult != WAIT_ABANDONED) {
+ goto Fail;
+ }
+
+ RetVal = lpSharedWOWMem;
+ goto Succeed;
+
+Fail:
+ if (! RetVal) {
+ if (hSharedWOWMutex) {
+ CloseHandle(hSharedWOWMutex);
+ hSharedWOWMutex = NULL;
+ }
+ if (lpSharedWOWMem) {
+ UnmapViewOfFile(lpSharedWOWMem);
+ lpSharedWOWMem = NULL;
+ }
+ if (hSharedWOWMem) {
+ CloseHandle(hSharedWOWMem);
+ hSharedWOWMem = NULL;
+ }
+ }
+
+Succeed:
+ return RetVal;
+}
+#endif
diff --git a/private/mvdm/inc/softpc.h b/private/mvdm/inc/softpc.h
new file mode 100644
index 000000000..d6ae4f7cc
--- /dev/null
+++ b/private/mvdm/inc/softpc.h
@@ -0,0 +1,651 @@
+/*++ BUILD Version: 0001
+
+Copyright (c) 1990 Microsoft Corporation
+
+Module Name:
+
+ SOFTPC.H
+
+Abstract:
+
+ High-level include file for components interfacing to SoftPC
+
+Author:
+
+ Dave Hastings (daveh) 25-Apr-1991
+
+Revision History:
+ Sudeep Bharati 23-Aug-1991 Added SOFTPC_BLD
+ Matt Felton 8-FEB-1992 Added getIntelRegistersPointer
+ Jonle 18-Sep-1992 Add popup for unsupported functionality
+ Jonle 21-Nov-1992 Add Standard Resource Error Dialog Box
+ GetPIFConfigFiles
+
+--*/
+
+
+/********** COMMON STUFF FOR MIPS AND V86 *************/
+
+/* XLATOFF */
+#ifdef i386
+#include "v86def.h"
+#endif
+
+
+/* XLATON */
+extern VOID nt_block_event_thread(ULONG);
+extern VOID nt_resume_event_thread(VOID);
+/* notification of PDB(Process Data Block, A.K.A PSP) termination */
+extern VOID HostTerminatePDB(USHORT pdb);
+/* disk subsystem reset notification. These functions will close all
+ * outstanding opened handles for DASD(Direct AcceS Disk) */
+extern VOID HostFloppyReset(VOID);
+extern VOID HostFdiskReset(VOID);
+
+
+// unsupported services dialog box
+extern VOID host_direct_access_error(ULONG);
+
+extern VOID host_lpt_flush_initialize(VOID);
+
+#define NOSUPPORT_FLOPPY 0
+#define NOSUPPORT_HARDDISK 1
+#define NOSUPPORT_DRIVER 2
+#define NOSUPPORT_OLDPIF 3
+#define NOSUPPORT_ILLBOP 4
+#define NOSUPPORT_NOLIM 5
+#define NOSUPPORT_MOUSEDRVR 6
+
+// standard error dialog box using resources
+void RcErrorDialogBox(USHORT wId, CHAR *msg1, CHAR *msg2);
+
+
+/*
+ * RcMessageBox\EditBox stuff
+ */
+#define RMB_ABORT 1
+#define RMB_RETRY 2
+#define RMB_IGNORE 4
+#define RMB_ICON_INFO 8
+#define RMB_ICON_BANG 16
+#define RMB_ICON_STOP 32
+#define RMB_ICON_WHAT 64
+#define RMB_EDIT 128
+#define RMB_FLAGS_MASK 0x0000FFFF
+#define RMB_EDITBUFFERSIZE_MASK 0xFFFF0000
+// hiword of dwOptions is reserved for RMB_EDIT text buffer size
+
+int RcMessageBox(USHORT wId, CHAR *msg1, CHAR *msg2, ULONG dwOptions);
+
+
+// sudeepb 02-May-1993 these following defines are actually defined
+// in host\inc\error.h and host\inc\nt_uis.h. this stuff needs
+// major cleanup after product 1.0.
+
+#define EG_MALLOC_FAILURE 7
+#define EG_PIF_BAD_FORMAT 18
+#define EG_PIF_STARTDIR_ERR 19
+#define EG_PIF_STARTFILE_ERR 20
+#define EG_PIF_CMDLINE_ERR 21
+#define EG_PIF_ASK_CMDLINE 22
+#define EG_ENVIRONMENT_ERR 23
+#define EG_BAD_FAULT 27
+#define EG_DOS_PROG_EXTENSION 28
+
+#define ED_BADSYSFILE 336
+#define ED_INITMEMERR 337
+#define ED_INITTMPFILE 338
+
+
+//
+// SysErrorBox stuff -- duplicated in usersrv.h *and* kernel.inc
+//
+#define SEB_OK 1 /* Button with "OK". */
+#define SEB_CANCEL 2 /* Button with "Cancel" */
+#define SEB_YES 3 /* Button with "&Yes" */
+#define SEB_NO 4 /* Button with "&No" */
+#define SEB_RETRY 5 /* Button with "&Retry" */
+#define SEB_ABORT 6 /* Button with "&Abort" */
+#define SEB_IGNORE 7 /* Button with "&Ignore" */
+#define SEB_CLOSE 8 /* Button with "&Close" */
+
+#define SEB_DEFBUTTON 0x8000 /* Mask to make this button default */
+
+ULONG WOWSysErrorBox(
+ LPSTR szTitle,
+ LPSTR szMessage,
+ USHORT wBtn1,
+ USHORT wBtn2,
+ USHORT wBtn3
+ );
+
+// Called by WOW to force VdmAllocateVirtualMemory to alloc blocks of
+// memory with ever increasing linear address's.
+VOID SetWOWforceIncrAlloc(
+ BOOL iEnable
+ );
+
+// call out to softpc to get config.sys\autoexec.bat file names
+VOID GetPIFConfigFiles(BOOL bConfig, char *pchFileName);
+
+// exported interfaces
+extern VOID TerminateVDM (VOID);
+extern ULONG DosSessionId;
+
+// VDD idle callouts
+void WaitIfIdle(void);
+void WakeUpNow(void);
+
+
+//
+// Constants
+//
+#define MSW_PE 0x1
+
+/* XLATOFF */
+#define ISPESET (UCHAR) (getMSW() & MSW_PE ? 1 : 0)
+/* XLATON */
+
+//
+// Macros
+//
+
+#define EXPORT
+
+// Flag Register constants
+
+#define FLG_CARRY 0x00000001
+#define FLG_CARRY_BIT 0x00000000
+#define FLG_PARITY 0x00000004
+#define FLG_PARITY_BIT 0x00000003
+#define FLG_AUXILIARY 0x00000010
+#define FLG_AUXILIARY_BIT 0x00000005
+#define FLG_ZERO 0x00000040
+#define FLG_ZERO_BIT 0x00000006
+#define FLG_SIGN 0x00000080
+#define FLG_SIGN_BIT 0x00000007
+#define FLG_TRAP 0x00000100
+
+#define FLG_INTERRUPT 0x00000200
+#define FLG_INTERRUPT_BIT 0x00000009
+#define FLG_DIRECTION 0x00000400
+#define FLG_DIRECTION_BIT 0x0000000A
+#define FLG_OVERFLOW 0x00000800
+#define FLG_OVERFLOW_BIT 0x0000000B
+
+EXPORT
+VOID
+host_cpu_init(
+ VOID
+ );
+
+//EXPORT
+//VOID
+//sas_init(
+// IN sys_addr Size
+// );
+
+EXPORT
+VOID
+host_simulate(
+ VOID
+ );
+
+HANDLE
+host_CreateThread(
+ LPSECURITY_ATTRIBUTES lpThreadAttributes,
+ DWORD dwStackSize,
+ LPTHREAD_START_ROUTINE lpStartAddress,
+ LPVOID lpParameter,
+ DWORD dwCreationFlags,
+ LPDWORD lpThreadId
+ );
+
+VOID
+cpu_createthread(
+ HANDLE hThread
+ );
+
+VOID
+host_ExitThread(
+ DWORD dwExitCode
+ );
+
+
+EXPORT VOID host_com_close(int PortId);
+EXPORT int SuspendTimerThread(VOID);
+EXPORT int ResumeTimerThread(VOID);
+
+void *ch_malloc(unsigned int NumBytes);
+
+
+UCHAR *Sim32pGetVDMPointer(ULONG addr, UCHAR pm);
+#define Sim32GetVDMPointer(Addr,Size,Mode) Sim32pGetVDMPointer(Addr,Mode)
+
+#ifdef i386
+
+/********** FOR V86 BUILD *************/
+
+BOOL
+ThreadSetDebugContext(
+ PULONG pDebugRegisters
+ );
+
+
+// external data
+
+extern ULONG IntelBase; // used by memory access macros
+extern X86CONTEXT IntelRegisters; // used by register access macros
+extern ULONG VdmDebugLevel; // used to control debugging
+extern ULONG IntelMSW; // used by getMSW/setMSW macs.
+extern ULONG VdmFeatureBits;
+
+
+// Register access macros
+
+#ifdef LINKED_INTO_MONITOR
+
+#include <vdmtib.h>
+
+#define getEAX() (VdmTib.VdmContext.Eax)
+#define getAX() ((USHORT)(VdmTib.VdmContext.Eax))
+#define getAL() ((BYTE)(VdmTib.VdmContext.Eax))
+#define getAH() ((BYTE)(VdmTib.VdmContext.Eax >> 8))
+#define getEBX() (VdmTib.VdmContext.Ebx)
+#define getBX() ((USHORT)(VdmTib.VdmContext.Ebx))
+#define getBL() ((BYTE)(VdmTib.VdmContext.Ebx))
+#define getBH() ((BYTE)(VdmTib.VdmContext.Ebx >> 8))
+#define getECX() (VdmTib.VdmContext.Ecx)
+#define getCX() ((USHORT)(VdmTib.VdmContext.Ecx))
+#define getCL() ((BYTE)(VdmTib.VdmContext.Ecx))
+#define getCH() ((BYTE)(VdmTib.VdmContext.Ecx >> 8))
+#define getEDX() (VdmTib.VdmContext.Edx)
+#define getDX() ((USHORT)(VdmTib.VdmContext.Edx))
+#define getDL() ((BYTE)(VdmTib.VdmContext.Edx))
+#define getDH() ((BYTE)(VdmTib.VdmContext.Edx >> 8))
+#define getESP() (VdmTib.VdmContext.Esp)
+#define getSP() ((USHORT)VdmTib.VdmContext.Esp)
+#define getEBP() (VdmTib.VdmContext.Ebp)
+#define getBP() ((USHORT)VdmTib.VdmContext.Ebp)
+#define getESI() (VdmTib.VdmContext.Esi)
+#define getSI() ((USHORT)VdmTib.VdmContext.Esi)
+#define getEDI() (VdmTib.VdmContext.Edi)
+#define getDI() ((USHORT)VdmTib.VdmContext.Edi)
+#define getEIP() (VdmTib.VdmContext.Eip)
+#define getIP() ((USHORT)VdmTib.VdmContext.Eip)
+#define getCS() ((USHORT)VdmTib.VdmContext.SegCs)
+#define getSS() ((USHORT)VdmTib.VdmContext.SegSs)
+#define getDS() ((USHORT)VdmTib.VdmContext.SegDs)
+#define getES() ((USHORT)VdmTib.VdmContext.SegEs)
+#define getFS() ((USHORT)VdmTib.VdmContext.SegFs)
+#define getGS() ((USHORT)VdmTib.VdmContext.SegGs)
+#define getCF() ((VdmTib.VdmContext.EFlags & FLG_CARRY) ? 1 : 0)
+#define getPF() ((VdmTib.VdmContext.EFlags & FLG_PARITY) ? 1 : 0)
+#define getAF() ((VdmTib.VdmContext.EFlags & FLG_AUXILIARY) ? 1 : 0)
+#define getZF() ((VdmTib.VdmContext.EFlags & FLG_ZERO) ? 1 : 0)
+#define getSF() ((VdmTib.VdmContext.EFlags & FLG_SIGN) ? 1 : 0)
+#define getTF() ((VdmTib.VdmContext.EFlags & FLG_TRAP) ? 1 : 0)
+#define getIF() ((VdmTib.VdmContext.EFlags & FLG_INTERRUPT) ? 1 : 0)
+#define getDF() ((VdmTib.VdmContext.EFlags & FLG_DIRECTION) ? 1 : 0)
+#define getOF() ((VdmTib.VdmContext.EFlags & FLG_OVERFLOW) ? 1 : 0)
+#define getMSW() (IntelMSW)
+#define getSTATUS() (USHORT)(VdmTib.VdmContext.EFlags)
+
+#define setEAX(val) { VdmTib.VdmContext.Eax = val;}
+
+#define setAX(val) { VdmTib.VdmContext.Eax = (VdmTib.VdmContext.Eax & 0xFFFF0000) | ((ULONG)val & 0x0000FFFF);}
+
+#define setAH(val) { VdmTib.VdmContext.Eax = (VdmTib.VdmContext.Eax & 0xFFFF00FF) | ((ULONG)(val << 8) & 0x0000FF00);}
+
+#define setAL(val) { VdmTib.VdmContext.Eax = (VdmTib.VdmContext.Eax & 0xFFFFFF00) | ((ULONG)val & 0x000000FF);}
+
+#define setEBX(val) { VdmTib.VdmContext.Ebx = val ;}
+
+#define setBX(val) { VdmTib.VdmContext.Ebx = (VdmTib.VdmContext.Ebx & 0xFFFF0000) | ((ULONG)val & 0x0000FFFF);}
+
+#define setBH(val) { VdmTib.VdmContext.Ebx = (VdmTib.VdmContext.Ebx & 0xFFFF00FF) | ((ULONG)(val << 8) & 0x0000FF00);}
+
+#define setBL(val) { VdmTib.VdmContext.Ebx = (VdmTib.VdmContext.Ebx & 0xFFFFFF00) | ((ULONG)val & 0x000000FF);}
+
+#define setECX(val) { VdmTib.VdmContext.Ecx = val ;}
+
+#define setCX(val) { VdmTib.VdmContext.Ecx = (VdmTib.VdmContext.Ecx & 0xFFFF0000) | ((ULONG)val & 0x0000FFFF);}
+
+#define setCH(val) { VdmTib.VdmContext.Ecx = (VdmTib.VdmContext.Ecx & 0xFFFF00FF) | ((ULONG)(val << 8) & 0x0000FF00);}
+
+#define setCL(val) { VdmTib.VdmContext.Ecx = (VdmTib.VdmContext.Ecx & 0xFFFFFF00) | ((ULONG)val & 0x000000FF);}
+
+#define setEDX(val) { VdmTib.VdmContext.Edx = val ;}
+
+#define setDX(val) { VdmTib.VdmContext.Edx = (VdmTib.VdmContext.Edx & 0xFFFF0000) | ((ULONG)val & 0x0000FFFF);}
+
+#define setDH(val) { VdmTib.VdmContext.Edx = (VdmTib.VdmContext.Edx & 0xFFFF00FF) | ((ULONG)(val << 8) & 0x0000FF00);}
+
+#define setDL(val) { VdmTib.VdmContext.Edx = (VdmTib.VdmContext.Edx & 0xFFFFFF00) | ((ULONG)val & 0x000000FF);}
+
+#define setESP(val) { VdmTib.VdmContext.Esp = val ;}
+
+#define setSP(val) { VdmTib.VdmContext.Esp = (VdmTib.VdmContext.Esp & 0xFFFF0000) | ((ULONG)val & 0x0000FFFF);}
+
+#define setEBP(val) { VdmTib.VdmContext.Ebp = val;}
+
+#define setBP(val) { VdmTib.VdmContext.Ebp = (VdmTib.VdmContext.Ebp & 0xFFFF0000) | ((ULONG)val & 0x0000FFFF);}
+
+#define setESI(val) { VdmTib.VdmContext.Esi = val ;}
+
+#define setSI(val) { VdmTib.VdmContext.Esi = (VdmTib.VdmContext.Esi & 0xFFFF0000) | ((ULONG)val & 0x0000FFFF);}
+#define setEDI(val) { VdmTib.VdmContext.Edi = val ;}
+
+#define setDI(val) { VdmTib.VdmContext.Edi = (VdmTib.VdmContext.Edi & 0xFFFF0000) | ((ULONG)val & 0x0000FFFF);}
+
+#define setEIP(val) { VdmTib.VdmContext.Eip = val ;}
+
+#define setIP(val) { VdmTib.VdmContext.Eip = (VdmTib.VdmContext.Eip & 0xFFFF0000) | ((ULONG)val & 0x0000FFFF);}
+
+#define setCS(val) { VdmTib.VdmContext.SegCs = (ULONG) val & 0x0000FFFF ;}
+
+#define setSS(val) { VdmTib.VdmContext.SegSs = (ULONG) val & 0x0000FFFF ;}
+
+#define setDS(val) { VdmTib.VdmContext.SegDs = (ULONG) val & 0x0000FFFF ;}
+
+#define setES(val) { VdmTib.VdmContext.SegEs = (ULONG) val & 0x0000FFFF ;}
+
+#define setFS(val) { VdmTib.VdmContext.SegFs = (ULONG) val & 0x0000FFFF ;}
+
+#define setGS(val) { VdmTib.VdmContext.SegGs = (ULONG) val & 0x0000FFFF ;}
+
+#define setCF(val) { VdmTib.VdmContext.EFlags = (VdmTib.VdmContext.EFlags & ~FLG_CARRY) | (((ULONG)val << FLG_CARRY_BIT) & FLG_CARRY);}
+
+#define setPF(val) { VdmTib.VdmContext.EFlags = (VdmTib.VdmContext.EFlags & ~FLG_PARITY) | (((ULONG)val << FLG_PARITY_BIT) & FLG_PARITY);}
+
+#define setAF(val) { VdmTib.VdmContext.EFlags = (VdmTib.VdmContext.EFlags & ~FLG_AUXILIARY) | (((ULONG)val << FLG_AUXILIARY_BIT) & FLG_AUXILIARY);}
+
+#define setZF(val) { VdmTib.VdmContext.EFlags = (VdmTib.VdmContext.EFlags & ~FLG_ZERO) | (((ULONG)val << FLG_ZERO_BIT) & FLG_ZERO);}
+
+#define setSF(val) { VdmTib.VdmContext.EFlags = (VdmTib.VdmContext.EFlags & ~FLG_SIGN) | (((ULONG)val << FLG_SIGN_BIT) & FLG_SIGN);}
+
+#define setIF(val) { VdmTib.VdmContext.EFlags = (VdmTib.VdmContext.EFlags & ~FLG_INTERRUPT) | (((ULONG)val << FLG_INTERRUPT_BIT) & FLG_INTERRUPT);}
+
+#define setDF(val) { VdmTib.VdmContext.EFlags = (VdmTib.VdmContext.EFlags & ~FLG_DIRECTION) | (((ULONG)val << FLG_DIRECTION_BIT) & FLG_DIRECTION);}
+
+#define setOF(val) { VdmTib.VdmContext.EFlags = (VdmTib.VdmContext.EFlags & ~FLG_OVERFLOW) | (((ULONG)val << FLG_OVERFLOW_BIT) & FLG_OVERFLOW);}
+
+#define setMSW(val) { IntelMSW = val ;}
+
+#define setSTATUS(val) { VdmTib.VdmContext.EFlags = (VdmTib.VdmContext.EFlags & 0xFFFF0000) | val;}
+
+#else // not linked into monitor
+
+extern ULONG getEAX(VOID);
+extern USHORT getAX(VOID);
+extern UCHAR getAL(VOID);
+extern UCHAR getAH(VOID);
+extern ULONG getEBX(VOID);
+extern USHORT getBX(VOID);
+extern UCHAR getBL(VOID);
+extern UCHAR getBH(VOID);
+extern ULONG getECX(VOID);
+extern USHORT getCX(VOID);
+extern UCHAR getCL(VOID);
+extern UCHAR getCH(VOID);
+extern ULONG getEDX(VOID);
+extern USHORT getDX(VOID);
+extern UCHAR getDL(VOID);
+extern UCHAR getDH(VOID);
+extern ULONG getESP(VOID);
+extern USHORT getSP(VOID);
+extern ULONG getEBP(VOID);
+extern USHORT getBP(VOID);
+extern ULONG getESI(VOID);
+extern USHORT getSI(VOID);
+extern ULONG getEDI(VOID);
+extern USHORT getDI(VOID);
+extern ULONG getEIP(VOID);
+extern USHORT getIP(VOID);
+extern USHORT getCS(VOID);
+extern USHORT getSS(VOID);
+extern USHORT getDS(VOID);
+extern USHORT getES(VOID);
+extern USHORT getFS(VOID);
+extern USHORT getGS(VOID);
+extern ULONG getCF(VOID);
+extern ULONG getPF(VOID);
+extern ULONG getAF(VOID);
+extern ULONG getZF(VOID);
+extern ULONG getSF(VOID);
+extern ULONG getIF(VOID);
+extern ULONG getDF(VOID);
+extern ULONG getOF(VOID);
+extern USHORT getMSW(VOID);
+extern USHORT getSTATUS(VOID);
+
+extern VOID setEAX(ULONG);
+extern VOID setAX(USHORT);
+extern VOID setAH(UCHAR);
+extern VOID setAL(UCHAR);
+extern VOID setEBX(ULONG);
+extern VOID setBX(USHORT);
+extern VOID setBH(UCHAR);
+extern VOID setBL(UCHAR);
+extern VOID setECX(ULONG);
+extern VOID setCX(USHORT);
+extern VOID setCH(UCHAR);
+extern VOID setCL(UCHAR);
+extern VOID setEDX(ULONG);
+extern VOID setDX(USHORT);
+extern VOID setDH(UCHAR);
+extern VOID setDL(UCHAR);
+extern VOID setESP(ULONG);
+extern VOID setSP(USHORT);
+extern VOID setEBP(ULONG);
+extern VOID setBP(USHORT);
+extern VOID setESI(ULONG);
+extern VOID setSI(USHORT);
+extern VOID setEDI(ULONG);
+extern VOID setDI(USHORT);
+extern VOID setEIP(ULONG);
+extern VOID setIP(USHORT);
+extern VOID setCS(USHORT);
+extern VOID setSS(USHORT);
+extern VOID setDS(USHORT);
+extern VOID setES(USHORT);
+extern VOID setFS(USHORT);
+extern VOID setGS(USHORT);
+extern VOID setCF(ULONG);
+extern VOID setPF(ULONG);
+extern VOID setAF(ULONG);
+extern VOID setZF(ULONG);
+extern VOID setSF(ULONG);
+extern VOID setIF(ULONG);
+extern VOID setDF(ULONG);
+extern VOID setOF(ULONG);
+extern VOID setMSW(USHORT);
+extern VOID setSTATUS(USHORT);
+#endif
+
+//
+// Sim32 macros
+//
+
+// no action is required for this macro.
+#define Sim32FlushVDMPointer( address, size, buffer, mode ) TRUE
+
+// no action is required for this macro.
+#define Sim32FreeVDMPointer( address, size, buffer, mode) TRUE
+
+#define Sim32GetVDMMemory( address, size, buffer, mode) (memcpy( \
+ buffer, Sim32pGetVDMPointer(address, mode), size), TRUE)
+
+#define Sim32SetVDMMemory( address, size, buffer, mode) (memcpy( \
+ Sim32pGetVDMPointer(address, mode), buffer, size), TRUE)
+
+// Address conversion macros
+
+#define RMOFF(address) (WORD)((ULONG)address & 0x0000FFFF)
+#define RMSEG(address) (WORD)(((ULONG)address - ((ULONG)address & 0x0000FFFF)) >> 4)
+#define RMSEGOFFTOLIN(seg, off) (PVOID)(IntelBase + ((ULONG)(seg) << 4) + (ULONG)(off))
+
+// Debugging Macros
+
+#define VDprint(value, arg) { if (value <= (VdmDebugLevel & VDP_LEVEL_MASK)) {\
+ DbgPrint arg ; }}
+
+#define VDbreak(value) { if (value <= (VDB_LEVEL_MASK & VdmDebugLevel)) {\
+ DbgBreakPoint(); }}
+
+#define VDP_LEVEL_MASK 0x0F
+#define VDP_LEVEL_NONE 0x0
+#define VDP_LEVEL_ERROR 0x2
+#define VDP_LEVEL_WARNING 0x4
+#define VDP_LEVEL_INFO 0x8
+
+#define VDB_LEVEL_MASK 0xF0
+#define VDB_LEVEL_NONE 0x00
+#define VDB_LEVEL_ERROR 0x20
+#define VDB_LEVEL_WARNING 0x40
+#define VDB_LEVEL_INFO 0x80
+
+//
+// Function prototypes
+//
+
+ULONG
+DbgPrint(
+ PCH Format,
+ ...
+ );
+
+char *nt_fgets(char *buffer, int len, void *input_stream);
+char *nt_gets(char *buffer);
+
+
+#define GetVDMAddr(usSeg,usOff) (((ULONG)usSeg << 4) + usOff)
+
+PX86CONTEXT getIntelRegistersPointer(VOID);
+
+#else
+
+/*********************** FOR MIPS BUILD ***************************/
+
+
+#define GetVDMAddr(usSeg,usOff) Sim32pGetVDMPointer((ULONG)(((ULONG)usSeg << 16) | usOff),FALSE)
+
+#define RMSEGOFFTOLIN(seg, off) (PVOID)(((ULONG)(seg) << 4) + (ULONG)(off))
+
+extern BOOL Sim32FlushVDMPointer (ULONG, USHORT, PBYTE , BOOL);
+extern BOOL Sim32FreeVDMPointer (ULONG, USHORT, PBYTE , BOOL);
+extern BOOL Sim32GetVDMMemory (ULONG, USHORT, PBYTE , BOOL);
+extern BOOL Sim32SetVDMMemory (ULONG, USHORT, PBYTE , BOOL);
+extern VOID sas_overwrite_memory(PBYTE, ULONG);
+
+extern UCHAR getAL(VOID);
+extern UCHAR getCL(VOID);
+extern UCHAR getDL(VOID);
+extern UCHAR getBL(VOID);
+extern UCHAR getAH(VOID);
+extern UCHAR getCH(VOID);
+extern UCHAR getDH(VOID);
+extern UCHAR getBH(VOID);
+
+extern VOID setAL(UCHAR val);
+extern VOID setCL(UCHAR val);
+extern VOID setDL(UCHAR val);
+extern VOID setBL(UCHAR val);
+extern VOID setAH(UCHAR val);
+extern VOID setCH(UCHAR val);
+extern VOID setDH(UCHAR val);
+extern VOID setBH(UCHAR val);
+
+extern USHORT getAX(VOID);
+extern USHORT getCX(VOID);
+extern USHORT getDX(VOID);
+extern USHORT getBX(VOID);
+extern USHORT getSP(VOID);
+extern USHORT getBP(VOID);
+extern USHORT getSI(VOID);
+extern USHORT getDI(VOID);
+extern USHORT getIP(VOID);
+
+extern VOID setAX(USHORT val);
+extern VOID setCX(USHORT val);
+extern VOID setDX(USHORT val);
+extern VOID setBX(USHORT val);
+extern VOID setSP(USHORT val);
+extern VOID setBP(USHORT val);
+extern VOID setSI(USHORT val);
+extern VOID setDI(USHORT val);
+extern VOID setIP(USHORT val);
+
+extern ULONG getEAX(VOID);
+extern ULONG getECX(VOID);
+extern ULONG getEDX(VOID);
+extern ULONG getEBX(VOID);
+extern ULONG getESP(VOID);
+extern ULONG getEBP(VOID);
+extern ULONG getESI(VOID);
+extern ULONG getEDI(VOID);
+extern ULONG getEIP(VOID);
+
+extern VOID setEAX(ULONG val);
+extern VOID setECX(ULONG val);
+extern VOID setEDX(ULONG val);
+extern VOID setEBX(ULONG val);
+extern VOID setESP(ULONG val);
+extern VOID setEBP(ULONG val);
+extern VOID setESI(ULONG val);
+extern VOID setEDI(ULONG val);
+extern VOID setEIP(ULONG val);
+
+extern USHORT getES(VOID);
+extern USHORT getCS(VOID);
+extern USHORT getSS(VOID);
+extern USHORT getDS(VOID);
+extern USHORT getFS(VOID);
+extern USHORT getGS(VOID);
+
+extern VOID setES(USHORT val);
+extern VOID setCS(USHORT val);
+extern VOID setSS(USHORT val);
+extern VOID setDS(USHORT val);
+extern VOID setFS(USHORT val);
+extern VOID setGS(USHORT val);
+
+extern ULONG getAF(VOID);
+extern ULONG getCF(VOID);
+extern ULONG getDF(VOID);
+extern ULONG getIF(VOID);
+extern ULONG getOF(VOID);
+extern ULONG getPF(VOID);
+extern ULONG getSF(VOID);
+extern ULONG getTF(VOID);
+extern ULONG getZF(VOID);
+extern ULONG getIOPL(VOID);
+extern ULONG getNT(VOID);
+extern USHORT getSTATUS(VOID);
+extern ULONG getEFLAGS(VOID);
+extern USHORT getMSW(VOID);
+
+extern VOID setAF(ULONG val);
+extern VOID setCF(ULONG val);
+extern VOID setDF(ULONG val);
+extern VOID setIF(ULONG val);
+extern VOID setOF(ULONG val);
+extern VOID setPF(ULONG val);
+extern VOID setSF(ULONG val);
+extern VOID setTF(ULONG val);
+extern VOID setZF(ULONG val);
+extern VOID setIOPL(ULONG val);
+extern VOID setNT(ULONG val);
+extern VOID setSTATUS(USHORT val);
+extern VOID setEFLAGS(ULONG val);
+extern VOID setMSW(USHORT val);
+
+extern ULONG getCR0(VOID);
+extern VOID setCR0(ULONG val);
+extern ULONG getSS_AR(VOID);
+extern ULONG getSS_BASE(VOID);
+extern VOID setSS_BASE_LIMIT_AR(ULONG base, ULONG limit, ULONG ar);
+extern VOID setCPL(ULONG val);
+
+
+#endif
diff --git a/private/mvdm/inc/suballoc.h b/private/mvdm/inc/suballoc.h
new file mode 100644
index 000000000..92db161af
--- /dev/null
+++ b/private/mvdm/inc/suballoc.h
@@ -0,0 +1,111 @@
+/*++
+
+Copyright (c) 1992 Microsoft Corporation
+
+Module Name:
+
+ suballoc.h
+
+Abstract:
+
+ This is the public include file for the suballocation
+ package.
+
+Author:
+
+ Dave Hastings (daveh) creation-date 25-Jan-1994
+
+Revision History:
+
+
+--*/
+
+//
+// Constants
+//
+
+//
+// Minimum granularity for the commit routine
+// this is done as a constant rather than a parameter
+// to make defining data structures easier
+//
+#ifdef i386
+#define COMMIT_GRANULARITY 4096
+#else
+#define COMMIT_GRANULARITY 65536
+#endif
+
+//
+// Types
+//
+//
+// Routine for committing a specific region of of the address
+// space. Although the return type is NTSTATUS, the only value
+// that is checked is 0 (for STATUS_SUCCESS). If STATUS_SUCCESS
+// is returned, it is assumed that the function worked. If not,
+// it is assumed that it failed. No special meaning is attached to
+// particular non-zero values.
+//
+typedef
+NTSTATUS
+(*PSACOMMITROUTINE)(
+ ULONG BaseAddress,
+ ULONG Size
+ );
+
+//
+// Routine for moving memory around in the address space.
+// Note: This routine MUST correctly handle overlapping
+// source and destination
+//
+typedef
+VOID
+(*PSAMEMORYMOVEROUTINE)(
+ ULONG Destination,
+ ULONG Source,
+ ULONG Size
+ );
+
+//
+// Public prototypes
+//
+PVOID
+SAInitialize(
+ ULONG BaseAddress,
+ ULONG Size,
+ PSACOMMITROUTINE CommitRoutine,
+ PSACOMMITROUTINE DecommitRoutine,
+ PSAMEMORYMOVEROUTINE MemoryMoveRoutine
+ );
+
+BOOL
+SAQueryFree(
+ PVOID SubAllocation,
+ PULONG FreeBytes,
+ PULONG LargestFreeBlock
+ );
+
+BOOL
+SAAllocate(
+ PVOID SubAllocation,
+ ULONG Size,
+ PULONG Address
+ );
+
+BOOL
+SAFree(
+ PVOID SubAllocation,
+ ULONG Size,
+ ULONG Address
+ );
+
+BOOL
+SAReallocate(
+ PVOID SubAllocation,
+ ULONG OriginalSize,
+ ULONG OriginalAddress,
+ ULONG NewSize,
+ PULONG NewAddress
+ );
+
+
diff --git a/private/mvdm/inc/tdb16.h b/private/mvdm/inc/tdb16.h
new file mode 100644
index 000000000..d841f8719
--- /dev/null
+++ b/private/mvdm/inc/tdb16.h
@@ -0,0 +1,107 @@
+/*++ BUILD Version: 0001
+ *
+ * WOW v1.0
+ *
+ * Copyright (c) 1991, Microsoft Corporation
+ *
+ * TDB.H
+ * 16-bit Kernel Task Data Block
+ *
+ * History:
+ * Created 11-Feb-1992 by Matt Felton (mattfe) - from 16 bit tdb.inc
+ * 7-apr-1992 mattfe updated to be win 3.1 compatible
+ *
+--*/
+
+/*
+ * NewExeHdr struct offsets. WOW32 uses these for getting expected winversion
+ * directly from the exehdr.
+ *
+ */
+
+#define NE_LOWINVER_OFFSET 0x3e
+#define NE_HIWINVER_OFFSET 0x0c
+#define FLAG_NE_PROPFONT 0x2000
+
+/*
+ * Task Data Block - 16 Bit Kernel Data Structure
+ *
+ * Contains all 16 bit task specific data.
+ *
+ */
+
+#define numTaskInts 7
+#define THUNKELEM 8 // (62*8) = 512-16 (low arena overhead)
+#define THUNKSIZE 8
+
+/* XLATOFF */
+#pragma pack(2)
+/* XLATON */
+
+typedef struct TDB { /* tdb16 */
+
+ WORD TDB_next ; // next task in dispatch queue
+ WORD TDB_taskSP ; // Saved SS:SP for this task
+ WORD TDB_taskSS ; //
+ WORD TDB_nEvents ; // Task event counter
+ BYTE TDB_priority ; // Task priority (0 is highest)
+ BYTE TDB_thread_ordinal ; // ordinal number of this thread
+ WORD TDB_thread_next ; // next thread
+ WORD TDB_thread_tdb ; // the real TDB for this task
+ WORD TDB_thread_list ; // list of allocated thread structures
+ WORD TDB_thread_free ; // free list of availble thread structures
+ WORD TDB_thread_count ; // total count of tread structures
+ WORD TDB_FCW ; // Floating point control word
+ BYTE TDB_flags ; // Task flags
+ BYTE TDB_filler ; // keep word aligned
+ WORD TDB_ErrMode ; // Error mode for this task
+ WORD TDB_ExpWinVer ; // Expected Windows version for this task
+ WORD TDB_Module ; // Task module handle to free in killtask
+ WORD TDB_pModule ; // Pointer to the module database.
+ WORD TDB_Queue ; // Task Event Queue pointer
+ WORD TDB_Parent ; // TDB of the task that started this up
+ WORD TDB_SigAction ; // Action for app task signal
+ DWORD TDB_ASignalProc ; // App's Task Signal procedure address
+ DWORD TDB_USignalProc ; // User's Task Signal procedure address
+ DWORD TDB_GNotifyProc ; // Task global discard notify proc.
+ DWORD TDB_INTVECS[numTaskInts] ; // Task specfic harare interrupts
+ WORD TDB_CompatFlags ; // Compatibility flags
+ WORD TDB_CompatFlags2 ; // Upper 16 bits
+ WORD TDB_CompatHandle ; // for dBase bug
+ WORD TDB_WOWCompatFlagsEx ; // More WOW Compatibility flags
+ WORD TDB_WOWCompatFlagsEx2 ; // Upper 16 bits
+ BYTE TDB_Free[3] ; // Filler to keep TDB size unchanged
+ BYTE TDB_cLibrary ; // tracks add/del of ALL libs in system EMS
+ DWORD TDB_PHT ; // (HANDLE:OFFSET) to private handle table
+ WORD TDB_PDB ; // MSDOS Process Data Block (PDB)
+ DWORD TDB_DTA ; // MSDOS Disk Transfer Address
+ BYTE TDB_Drive ; // MSDOS current drive
+ BYTE TDB_Directory[65] ; // *** not used starting with win95
+ WORD TDB_Validity ; // initial AX to be passed to a task
+ WORD TDB_Yield_to ; // DirectedYield arg stored here
+ WORD TDB_LibInitSeg ; // segment address of libraries to init
+ WORD TDB_LibInitOff ; // MakeProcInstance thunks live here.
+ WORD TDB_MPI_Sel ; // Code selector for thunks
+ WORD TDB_MPI_Thunks[((THUNKELEM*THUNKSIZE)/2)]; //
+ BYTE TDB_ModName[8] ; // Name of Module.
+ WORD TDB_sig ; // Signature word to detect bogus code
+ DWORD TDB_ThreadID ; // 32-Bit Thread ID for this Task (use TDB_Filler Above)
+ DWORD TDB_hThread ; // 32-bit Thread Handle for this task
+ WORD TDB_WOWCompatFlags; // WOW Compatibility flags
+ WORD TDB_WOWCompatFlags2; // WOW Compatibility flags
+ DWORD TDB_vpfnAbortProc; // printer AbortProc
+ BYTE TDB_LFNDirectory[260]; // Long directory name
+
+} TDB;
+typedef TDB UNALIGNED *PTDB;
+
+// This bit is defined for the TDB_Drive field
+#define TDB_DIR_VALID 0x80
+#define TDB_SIGNATURE 0x4454
+
+
+// NOTE TDB_ThreadID MUST be DWORD aligned or else it will fail on MIPS
+
+/* XLATOFF */
+#pragma pack()
+/* XLATON */
diff --git a/private/mvdm/inc/v86def.h b/private/mvdm/inc/v86def.h
new file mode 100644
index 000000000..3b31b497c
--- /dev/null
+++ b/private/mvdm/inc/v86def.h
@@ -0,0 +1,29 @@
+/*++ BUILD Version: 0001
+
+Copyright (c) 1990 Microsoft Corporation
+
+Module Name:
+
+ V86PC.H
+
+Abstract:
+
+ This file contains macros, function prototypes, and externs for the
+ v86-mode NT version of SoftPC v3.0.
+
+Author:
+
+ Dave Hastings (daveh) 4-11-91
+
+Revision History:
+
+ Jeff Parsons (jeffpar) 14-May-1991
+ Added X86CONTEXT, which is identical to CONTEXT when running on an
+ x86 platform.
+
+--*/
+
+
+// Define X86CONTEXT structure
+
+typedef CONTEXT X86CONTEXT, *PX86CONTEXT;
diff --git a/private/mvdm/inc/vdmredir.h b/private/mvdm/inc/vdmredir.h
new file mode 100644
index 000000000..f10a83d4e
--- /dev/null
+++ b/private/mvdm/inc/vdmredir.h
@@ -0,0 +1,439 @@
+/*++
+
+Copyright (c) 1991 Microsoft Corporation
+
+Module Name:
+
+ vdmredir.h
+
+Abstract:
+
+ Contains common defines, structures, macros, etc. for VdmRedir. This file
+ contains macros to read and write the 3 basic data structures from/to VDM
+ memory. We *must* use these macros because the MIPS processor does not like
+ unaligned data: a DWORD must be read/written on a DWORD boundary (low two
+ bits in address = 00), a WORD must be read/written on a WORD boundary (low
+ two bits in address = X0) and a BYTE can be read/written to any address (low
+ two bits in address = XX). It is illegal to access a WORD at an address
+ whose LSB is not 0, and a DWORD at an address whose 2 least significant bits
+ are not both 0. Dos programs don't care much about alignment (smart ones do
+ because there is a performance penalty for unaligned data on x86, but it
+ still works). So we have to assume the worst case for MIPS and break down
+ the read/writes of WORDs and DWORDs in VDM memory into BYTE read/writes
+
+ In order to improve efficiency of load/store to potentially unaligned
+ addresses, the following data pointer types are made available from this
+ include file:
+
+ ULPBYTE - unaligned byte pointer (same as LPBYTE)
+ ULPWORD - unaligned word pointer
+ ULPDWORD - unaligned dword pointer
+
+ NB. Dependent upon mvdm.h
+
+Author:
+
+ Richard L Firth (rfirth) 16-Sep-1991
+
+Revision History:
+
+ 16-Sep-1991 rfirth
+ Created
+
+--*/
+
+#ifndef _VDMREDIR_
+#define _VDMREDIR_
+
+#include <softpc.h>
+
+//
+// PRIVATE - make a routine/data type inaccessible outside current module, but
+// only if not DEBUG version
+//
+
+#if DBG
+#define PRIVATE
+#else
+#define PRIVATE static
+#endif
+
+//
+// unaligned data pointer types. These produce exactly the same code as memory
+// accesses through 'aligned' pointers on x86, but generate code specific to
+// unaligned read/writes on MIPS (& other RISCs)
+//
+
+#ifdef UNALIGNED_VDM_POINTERS
+typedef BYTE UNALIGNED * ULPBYTE;
+typedef WORD UNALIGNED * ULPWORD;
+typedef DWORD UNALIGNED * ULPDWORD;
+#else
+typedef LPBYTE ULPBYTE;
+typedef LPWORD ULPWORD;
+typedef LPDWORD ULPDWORD;
+#endif
+
+//
+// misc. defines
+//
+
+#define BITS_IN_A_BYTE 8
+#define LOCAL_DEVICE_PREFIX "\\\\."
+
+//
+// Define network interrupt to be on Irql 14.
+// If NETWORK_ICA changes to ICA_MASTER then vrnetb.c should only execute 1 eoi
+// If either change then NETWORK_INTERRUPT in int5c.inc must also change.
+//
+
+#define NETWORK_ICA ICA_SLAVE
+#define NETWORK_LINE 6
+
+//
+// helper macros
+//
+
+//
+// MAKE_DWORD - converts 2 16-bit words into a 32-bit double word
+//
+#define MAKE_DWORD(h, l) ((DWORD)(((DWORD)((WORD)(h)) << 16) | (DWORD)((WORD)(l))))
+
+//
+// DWORD_FROM_WORDS - converts two 16-bit words into a 32-bit dword
+//
+#define DWORD_FROM_WORDS(h, l) MAKE_DWORD((h), (l))
+
+//
+// HANDLE_FROM_WORDS - converts a pair of 16-bit words into a 32-bit handle
+//
+#define HANDLE_FROM_WORDS(h, l) ((HANDLE)(MAKE_DWORD((h), (l))))
+
+//
+// POINTER_FROM_WORDS - returns a flat 32-bit VOID pointer (in the VDM) OR the
+// NULL macro, given the 16-bit real-mode segment & offset. On x86 this will
+// return 0 if we pass in 0:0 because all GetVDMAddr does is seg << 4 + off.
+// The MIPS version adds this to the start of the virtual DOS memory. The
+// problem arises when we have a NULL pointer, and want to keep it NULL - we
+// convert it to non-NULL on not x86
+//
+//#define POINTER_FROM_WORDS(seg, off) ((LPVOID)GetVDMAddr((seg), (off)))
+//#define POINTER_FROM_WORDS(seg, off) (((((DWORD)(seg)) << 16) | (off)) ? ((LPVOID)GetVDMAddr((seg), (off))) : ((LPVOID)0))
+
+#define POINTER_FROM_WORDS(seg, off) _inlinePointerFromWords((WORD)(seg), (WORD)(off))
+
+//
+// LPSTR_FROM_WORDS - returns a 32-bit pointer to an ASCIZ string given the
+// 16-bit real-mode segment & offset
+//
+#define LPSTR_FROM_WORDS(seg, off) ((LPSTR)POINTER_FROM_WORDS((seg), (off)))
+
+//
+// LPBYTE_FROM_WORDS - returns a 32-bit byte pointer given the 16-bit
+// real-mode segment & offset
+//
+#define LPBYTE_FROM_WORDS(seg, off) ((LPBYTE)POINTER_FROM_WORDS((seg), (off)))
+
+//
+// READ_FAR_POINTER - read the pair of words in VDM memory, currently pointed at
+// by a 32-bit flat pointer and convert them to a 32-bit flat pointer
+//
+#define READ_FAR_POINTER(addr) ((LPVOID)(POINTER_FROM_WORDS(GET_SELECTOR(addr), GET_OFFSET(addr))))
+
+//
+// READ_BYTE - retrieve a single byte from VDM memory. Both x86 and MIPS can
+// handle reading a single byte without pain
+//
+#define READ_BYTE(addr) (*((LPBYTE)(addr)))
+
+//
+// READ_WORD - read a single 16-bit little-endian word from VDM memory. x86 can
+// handle unaligned data, MIPS (&other RISCs) must be broken down into individual
+// BYTE reads & the WORD pieced together by shifting & oring. If we are using
+// UNALIGNED pointers then the RISC processor can handle non-aligned data
+//
+#ifdef i386
+#define READ_WORD(addr) (*((LPWORD)(addr)))
+#else
+#ifdef UNALIGNED_VDM_POINTERS
+#define READ_WORD(addr) (*((ULPWORD)(addr)))
+#else
+#define READ_WORD(addr) (((WORD)READ_BYTE(addr)) | (((WORD)READ_BYTE((LPBYTE)(addr)+1)) << 8))
+#endif // UNALIGNED_VDM_POINTERS
+#endif // i386
+
+//
+// READ_DWORD - read a 4-byte little-endian double word from VDM memory. x86 can
+// handle unaligned data, MIPS (&other RISCs) must be broken down into individual
+// BYTE reads & the DWORD pieced together by shifting & oring. If we are using
+// UNALIGNED pointers then the RISC processor can handle non-aligned data
+//
+#ifdef i386
+#define READ_DWORD(addr) (*((LPDWORD)(addr)))
+#else
+#ifdef UNALIGNED_VDM_POINTERS
+#define READ_DWORD(addr) (*((ULPDWORD)(addr)))
+#else
+#define READ_DWORD(addr) (((DWORD)READ_WORD(addr)) | (((DWORD)READ_WORD((LPWORD)(addr)+1)) << 16))
+#endif // UNALIGNED_VDM_POINTERS
+#endif // i386
+
+//
+// WRITE_BYTE - write a single byte in VDM memory. Both x86 and MIPS (RISC) can
+// write a single byte to a non-aligned address
+//
+#define WRITE_BYTE(addr, value) (*(LPBYTE)(addr) = (BYTE)(value))
+
+//
+// WRITE_WORD - write a 16-bit little-endian value into VDM memory. x86 can write
+// WORD data to non-word-aligned address; MIPS (& other RISCs) cannot, so we
+// break down the write into 2 byte writes. If we are using UNALIGNED pointers
+// then the MIPS (&other RISCs) can generate code to handle this situation
+//
+#ifdef i386
+#define WRITE_WORD(addr, value) (*((LPWORD)(addr)) = (WORD)(value))
+#else
+#ifdef UNALIGNED_VDM_POINTERS
+#define WRITE_WORD(addr, value) (*((ULPWORD)(addr)) = (WORD)(value))
+#else
+#define WRITE_WORD(addr, value) \
+ {\
+ ((LPBYTE)(addr))[0] = LOBYTE(value); \
+ ((LPBYTE)(addr))[1] = HIBYTE(value); \
+ }
+#endif // UNALIGNED_VDM_POINTERS
+#endif // i386
+
+//
+// WRITE_DWORD - write a 32-bit DWORD value into VDM memory. x86 can write
+// DWORD data to non-dword-aligned address; MIPS (& other RISCs) cannot, so we
+// break down the write into 4 byte writes. If we are using UNALIGNED pointers
+// then the MIPS (&other RISCs) can generate code to handle this situation
+//
+#ifdef i386
+#define WRITE_DWORD(addr, value) (*((LPDWORD)(addr)) = (DWORD)(value))
+#else
+#ifdef UNALIGNED_VDM_POINTERS
+#define WRITE_DWORD(addr, value) (*((ULPDWORD)(addr)) = (DWORD)(value))
+#else
+#define WRITE_DWORD(addr, value) \
+ { \
+ ((LPBYTE)(addr))[0] = LOBYTE(LOWORD((DWORD)(value))); \
+ ((LPBYTE)(addr))[1] = HIBYTE(LOWORD((DWORD)(value))); \
+ ((LPBYTE)(addr))[2] = LOBYTE(HIWORD((DWORD)(value))); \
+ ((LPBYTE)(addr))[3] = HIBYTE(HIWORD((DWORD)(value))); \
+ }
+#endif // UNALIGNED_VDM_POINTERS
+#endif // i386
+
+//
+// WRITE_FAR_POINTER - write a 16:16 pointer into VDM memory. This is the same
+// as writing a DWORD
+//
+#define WRITE_FAR_POINTER(addr, ptr) WRITE_DWORD((addr), (DWORD)(ptr))
+
+//
+// GET_SELECTOR - retrieves the selector word from the intel 32-bit far pointer
+// (DWORD) pointed at by <pointer> (remember: stored as offset, segment)
+//
+#define GET_SELECTOR(pointer) READ_WORD((LPWORD)(pointer)+1)
+
+//
+// GET_SEGMENT - same as GET_SELECTOR
+//
+#define GET_SEGMENT(pointer) GET_SELECTOR(pointer)
+
+//
+// GET_OFFSET - retrieves the offset word from an intel 32-bit far pointer
+// (DWORD) pointed at by <pointer> (remember: stored as offset, segment)
+//
+#define GET_OFFSET(pointer) READ_WORD((LPWORD)(pointer))
+
+//
+// SET_SELECTOR - writes a word into the segment word of a real-mode far pointer
+// (DWORD) pointed at by <pointer> (remember: stored as offset, segment)
+//
+#define SET_SELECTOR(pointer, word) WRITE_WORD(((LPWORD)(pointer)+1), (word))
+
+//
+// SET_SEGMENT - same as SET_SELECTOR
+//
+#define SET_SEGMENT(pointer, word) SET_SELECTOR(pointer, word)
+
+//
+// SET_OFFSET - writes a word into the offset word of a real-mode far pointer
+// (DWORD) pointed at by <pointer> (remember: stored as offset, segment)
+//
+#define SET_OFFSET(pointer, word) WRITE_WORD((LPWORD)(pointer), (word))
+
+//
+// POINTER_FROM_POINTER - read a segmented pointer in the VDM from an address
+// pointed at by a flat 32-bit pointer. Convert the segmented pointer to a
+// flat pointer. SAME AS READ_FAR_POINTER
+//
+#define POINTER_FROM_POINTER(pointer) POINTER_FROM_WORDS(GET_SELECTOR(pointer), GET_OFFSET(pointer))
+
+//
+// LPSTR_FROM_POINTER - perform a POINTER_FROM_POINTER, casting the result to
+// a string pointer. SAME AS READ_FAR_POINTER
+//
+#define LPSTR_FROM_POINTER(pointer) ((LPSTR)POINTER_FROM_POINTER(pointer))
+
+//
+// LPBYTE_FROM_POINTER - perform a POINTER_FROM_POINTER, casting the result to
+// a byte pointer. SAME AS READ_FAR_POINTER
+//
+#define LPBYTE_FROM_POINTER(pointer) ((LPBYTE)POINTER_FROM_POINTER(pointer))
+
+//
+// SET_ERROR - sets the caller's AX register in the VDM context descriptor to
+// the value given and sets the caller's VDM carry flag
+//
+#define SET_ERROR(err) {setAX(err); setCF(1);}
+
+//
+// SET_SUCCESS - sets the VDM caller's AX register to NERR_Success and clears
+// the carry flag
+//
+#define SET_SUCCESS() {setAX(NERR_Success); setCF(0);}
+
+//
+// SET_OK - an explicit version of SET_SUCCESS wherein NERR_Success would be
+// an inappropriate error, although the right value
+//
+#define SET_OK(value) {setAX(value); setCF(0);}
+
+
+
+//
+// Miscellaneous macros for working out sizes of things
+//
+
+//
+// ARRAY_ELEMENTS - gives the number of elements of a particular type in an
+// array
+//
+
+#define ARRAY_ELEMENTS(a) (sizeof(a)/sizeof((a)[0]))
+
+//
+// LAST_ELEMENT - returns the index of the last element in array
+//
+
+#define LAST_ELEMENT(a) (ARRAY_ELEMENTS(a)-1)
+
+//
+// BITSIN - returns the number of bits in a data type or structure. This is
+// predicated upon the number of bits in a byte being 8 and all data types
+// being composed of a collection of bytes (safe assumption?)
+//
+#define BITSIN(thing) (sizeof(thing) * BITS_IN_A_BYTE)
+
+//
+// Miscellaneous other macros
+//
+
+//
+// IS_ASCII_PATH_SEPARATOR - returns TRUE if ch is / or \. ch is a single
+// byte (ASCII) character
+//
+#define IS_ASCII_PATH_SEPARATOR(ch) (((ch) == '/') || ((ch) == '\\'))
+
+//
+// macros for setting CF and ZF flags for return from hardware interrupt
+// callback
+//
+
+#define SET_CALLBACK_NOTHING() {setZF(0); setCF(0);}
+#define SET_CALLBACK_NAMEPIPE() {setZF(0); setCF(1);}
+#define SET_CALLBACK_DLC() {setZF(1); setCF(0);}
+#define SET_CALLBACK_NETBIOS() {setZF(1); setCF(1);}
+
+//
+// DLC-specific macros etc.
+//
+
+extern LPVDM_REDIR_DOS_WINDOW lpVdmWindow;
+
+//
+// setPostRoutine - if dw is not 0 then we write the (DOS segmented) address of
+// the post routine into the dwPostRoutine field of the VDM_REDIR_DOS_WINDOW
+// structure passed to us at redir DLC initialization. We also set the flags
+// to indicate to the redir's hardware interrupt routine there is a DLC post
+// routine to run. If dw is 0 then we set the flags to indicate that there is
+// no post routine processing
+//
+#define setPostRoutine( dw ) if (dw) {\
+ (lpVdmWindow->dwPostRoutine = (DWORD)(dw));\
+ SET_CALLBACK_DLC();\
+ } else {\
+ SET_CALLBACK_NOTHING();\
+ }
+
+//
+// VR_ASYNC_DISPOSITION - we maintain a serialized list of these structures.
+// Used to dispose of VDM redir asynchronous completions in the order in which
+// they occurred
+//
+
+typedef struct _VR_ASYNC_DISPOSITION {
+
+ //
+ // Next - maintains a singly-linked list of dispositions
+ //
+
+ struct _VR_ASYNC_DISPOSITION* Next;
+
+ //
+ // AsyncDispositionRoutine - pointer to VOID function taking no args which
+ // will dispose of the next asynchronous completion - Netbios, named pipe
+ // or DLC
+ //
+
+ VOID (*AsyncDispositionRoutine)(VOID);
+} VR_ASYNC_DISPOSITION, *PVR_ASYNC_DISPOSITION;
+
+//
+// _inlinePointerFromWords - the POINTER_FROM_WORDS macro is inefficient if the
+// arguments are calls to eg. getES(), getBX() - the calls are made twice if
+// the pointer turns out to be non-zero. Use an inline function to achieve the
+// same results, but only call function arguments once
+//
+
+#ifdef i386
+
+__inline LPVOID _inlinePointerFromWords(WORD seg, WORD off) {
+
+ WORD _seg = seg;
+ WORD _off = off;
+
+ return (_seg + _off) ? (LPVOID)GetVDMAddr(_seg, _off) : 0;
+}
+
+#else
+LPVOID _inlinePointerFromWords(WORD seg, WORD off);
+#endif
+
+//
+// CONVERT_ADDRESS - convert a segmented (real or protect-mode) address to a
+// flat 32-bit address
+//
+
+//#define CONVERT_ADDRESS(seg, off, size, mode) !((WORD)(seg) | (WORD)(off)) ? 0 : Sim32GetVDMPointer((((DWORD)seg) << 16) + (DWORD)(off), (size), (mode))
+#define CONVERT_ADDRESS(seg, off, size, mode) _inlineConvertAddress((WORD)(seg), (WORD)(off), (WORD)(size), (BOOLEAN)(mode))
+
+#ifdef i386
+
+__inline LPVOID _inlineConvertAddress(WORD Seg, WORD Off, WORD Size, BOOLEAN Pm) {
+
+ WORD _seg = Seg;
+ WORD _off = Off;
+
+ return (_seg | _off) ? Sim32GetVDMPointer(((DWORD)_seg << 16) + _off, Size, Pm) : 0;
+}
+
+#else
+extern LPVOID _inlineConvertAddress(WORD Seg, WORD Off, WORD Size, BOOLEAN Pm);
+#endif
+
+#endif // _VDMREDIR_
diff --git a/private/mvdm/inc/vdmtb.inc b/private/mvdm/inc/vdmtb.inc
new file mode 100644
index 000000000..371419641
--- /dev/null
+++ b/private/mvdm/inc/vdmtb.inc
@@ -0,0 +1,104 @@
+;
+; Location in dos area where Vdm state is maintianed
+;
+FIXED_NTVDMSTATE_LINEAR equ 0714H
+;
+; Prefix flags for instruction emulation
+;
+PREFIX_ES equ 01H
+PREFIX_CS equ 02H
+PREFIX_SS equ 04H
+PREFIX_DS equ 08H
+PREFIX_FS equ 010H
+PREFIX_GS equ 020H
+PREFIX_OPER32 equ 040H
+PREFIX_ADDR32 equ 080H
+PREFIX_LOCK equ 0100H
+PREFIX_REPNE equ 0200H
+PREFIX_REP equ 0400H
+PREFIX_SEG_ALL equ 03FH
+NUM_OPCODE equ 0FFH
+;
+; VdmFlags
+;
+VDM_INTERRUPT_PENDING equ 03H
+VDM_BREAK_EXCEPTIONS equ 08H
+VDM_BREAK_DEBUGGER equ 010H
+VDM_VIRTUAL_INTERRUPTS equ 0200H
+VDM_VIRTUAL_AC equ 040000H
+VDM_VIRTUAL_NT equ 04000H
+MIPS_BIT_MASK equ 0400H
+VDM_INT_HARDWARE equ 01H
+VDM_INT_TIMER equ 02H
+VDM_WOWBLOCKED equ 0100000H
+VDM_IDLEACTIVITY equ 0200000H
+;
+; Interrupt handler flags
+;
+VDM_INT_INT_GATE equ 01H
+VDM_INT_TRAP_GATE equ 00H
+VDM_INT_32 equ 02H
+VDM_INT_16 equ 00H
+;
+; EFlags values
+;
+EFLAGS_TF_MASK equ 0100H
+EFLAGS_INTERRUPT_MASK equ 0200H
+EFLAGS_IOPL_MASK equ 03000H
+EFLAGS_NT_MASK equ 04000H
+;
+; Selector Flags
+;
+SEL_TYPE_READ equ 01H
+SEL_TYPE_WRITE equ 02H
+SEL_TYPE_EXECUTE equ 04H
+SEL_TYPE_BIG equ 08H
+SEL_TYPE_ED equ 010H
+SEL_TYPE_2GIG equ 020H
+;
+; VdmEvent Enumerations
+;
+VdmIO equ 00H
+VdmStringIO equ 01H
+VdmMemAccess equ 02H
+VdmIntAck equ 03H
+VdmBop equ 04H
+VdmError equ 05H
+VdmIrq13 equ 06H
+VdmMaxEvent equ 07H
+;
+; VdmTib offsets
+;
+VtMonitorContext equ 0A04H
+VtVdmContext equ 0AD0H
+VtInterruptHandlers equ 04H
+VtFaultHandlers equ 0804H
+VtEventInfo equ 0B9CH
+VtEIEvent equ 0BA0H
+VtEIInstSize equ 0BA4H
+VtEIBopNumber equ 0BA8H
+VtEiIntAckInfo equ 0BA8H
+EiEvent equ 04H
+EiInstructionSize equ 08H
+EiBopNumber equ 0CH
+EiIntAckInfo equ 0CH
+;
+; WOW TD offsets
+;
+WtdFastWowEsp equ 08H
+;
+; VdmInterrupHandler offsets
+;
+ViCsSelector equ 00H
+ViEip equ 04H
+ViFlags equ 02H
+VDM_INTERRUPT_HANDLER_SIZE equ 08H
+;
+; VdmFaultHandler offsets
+;
+VfCsSelector equ 00H
+VfEip equ 04H
+VfSsSelector equ 02H
+VfEsp equ 08H
+VfFlags equ 0CH
+VDM_FAULT_HANDLER_SIZE equ 010H
diff --git a/private/mvdm/inc/vdmtib.h b/private/mvdm/inc/vdmtib.h
new file mode 100644
index 000000000..6fa97712d
--- /dev/null
+++ b/private/mvdm/inc/vdmtib.h
@@ -0,0 +1,36 @@
+
+/*++
+
+Copyright (c) 1992 Microsoft Corporation
+
+Module Name:
+
+ vdmtib.h
+
+Abstract:
+
+ This include file contains definitions, externs, and
+ includes necessary to access 16 bit registers in
+ the VdmTib
+
+Author:
+
+ Dave Hastings (daveh) 12-Oct-1993
+
+Revision History:
+
+--*/
+
+#ifndef _VDMTIB_H_
+#define _VDMTIB_H_
+
+
+//
+// Definition of the VdmTib
+//
+#include "\nt\private\inc\vdm.h"
+
+
+extern VDM_TIB VdmTib;
+#endif
+
diff --git a/private/mvdm/inc/vint.h b/private/mvdm/inc/vint.h
new file mode 100644
index 000000000..460374aee
--- /dev/null
+++ b/private/mvdm/inc/vint.h
@@ -0,0 +1,177 @@
+/*++ BUILD Version: 0001
+
+Copyright (c) 1990 Microsoft Corporation
+
+Module Name:
+
+ VINT.H
+
+Abstract:
+
+ This module contains macro support for manipulating virtual
+ interrupt bit from v86 mode and 16bit protect mode. FCLI/FST/FIRET
+ result in exact behavior of these instructions on the chip without
+ trapping.
+
+Author:
+
+ Sudeepb 08-Dec-1992 Created
+
+Revision History:
+ sudeepb 16-Mar-1993 added FIRET
+
+--*/
+
+/*
+See \nt\private\inc\vdm.h for a complete list
+of the NTVDM state flag bit definitions
+
+INTERRUPT_PENDING_BIT - set if interrupts pending
+VIRTUAL_INTERRUPT_BIT - This bit always correctly reflects the interrupt
+ disbale/enable state of the vDM while in 16bit land.
+
+MIPS_BIT_MASK - tells whether VDM is running on x86/mips
+EXEC_BIT_MASK - tells if DOS is in int21/exec operation.
+*/
+
+#define INTERRUPT_PENDING_BIT 0x0003
+#define VIRTUAL_INTERRUPT_BIT 0x0200
+
+#define MIPS_BIT_MASK 0x400
+#define EXEC_BIT_MASK 0x800
+#define RM_BIT_MASK 0x1000
+#define RI_BIT_MASK 0x2000
+
+#define FIXED_NTVDMSTATE_SEGMENT 0x70
+#define FIXED_NTVDMSTATE_OFFSET 0x14
+#define FIXED_NTVDMSTATE_LINEAR ((FIXED_NTVDMSTATE_SEGMENT << 4) + FIXED_NTVDMSTATE_OFFSET)
+#define FIXED_NTVDMSTATE_REL40 0x314
+
+#define FIXED_NTVDMSTATE_SIZE 4
+#define NTIO_LOAD_SEGMENT 0x70
+#define NTIO_LOAD_OFFSET 0
+#define pNtVDMState ((PULONG)FIXED_NTVDMSTATE_LINEAR)
+
+#define VDM_TIMECHANGE 0x00400000
+
+/* ASM
+; FCLI macro should be used in v86mode/16bit preotect mode code to replace
+; costly cli's. Please note that this macro could destroy the Overflow
+; bit in the flag.
+
+FCLI macro
+ local a,b,c
+ push ds
+ push ax
+ mov ax,40h
+ mov ds,ax
+ lahf
+ test word ptr ds:FIXED_NTVDMSTATE_REL40, MIPS_BIT_MASK OR RI_BIT_MASK
+ jnz short b
+ lock and word ptr ds:FIXED_NTVDMSTATE_REL40,NOT VIRTUAL_INTERRUPT_BIT
+a:
+ sahf
+ pop ax
+ pop ds
+ jmp short c
+b:
+ cli
+ jmp short a
+c:
+endm
+
+;
+; FSTI macro should be used in v86mode or 16bit protectmode code to replace
+; costly sti's. Please note that this macro could destroy the Overflow bit
+; in the flag.
+
+FSTI macro
+ local a,b,c
+ push ds
+ push ax
+ mov ax,40h
+ mov ds,ax
+ lahf
+ test word ptr ds:FIXED_NTVDMSTATE_REL40, INTERRUPT_PENDING_BIT
+ jnz short b
+ test word ptr ds:FIXED_NTVDMSTATE_REL40, MIPS_BIT_MASK OR RI_BIT_MASK
+ jnz short b
+ lock or word ptr ds:FIXED_NTVDMSTATE_REL40, VIRTUAL_INTERRUPT_BIT
+a:
+ sahf
+ pop ax
+ pop ds
+ jmp short c
+b:
+ sti
+ jmp short a
+c:
+endm
+
+FIRET MACRO
+ local a,b,d,e,f,g,i,j,k
+ push ds
+ push ax
+
+;; Do real IRET on MIPS or if interrupts are pending
+
+ mov ax,40h
+ mov ds,ax
+ test word ptr ds:FIXED_NTVDMSTATE_REL40, MIPS_BIT_MASK OR RI_BIT_MASK
+ jnz short b
+
+;; running on x86 can assume 386 or above instructions
+ push bp
+ mov bp,sp
+ mov ax,[bp+10] ; get flags
+ pop bp
+ test ax,100h ; test if trap flag is set
+ jnz short b ; if so, do iret
+
+ test ax,200h ; test if interrupt flag is set
+ jz short i ; ZR -> flag image has IF not set
+ lock or word ptr ds:FIXED_NTVDMSTATE_REL40, VIRTUAL_INTERRUPT_BIT
+ test word ptr ds:FIXED_NTVDMSTATE_REL40, INTERRUPT_PENDING_BIT
+ jnz short b
+j:
+ xchg ah,al ; AH=low byte AL=high byte
+ cld
+ test al,4 ; check direction flag
+ jnz short d ;
+e:
+ test al,8 ; check overflow flag
+ jnz short f ; go to f if flag image has OF set
+ jo short k ; go to k to reset OF
+g:
+ sahf ; set low byte of flags from ah
+ pop ax
+ pop ds
+ retf 2 ; IRET and discard flags
+i:
+ lock and word ptr ds:FIXED_NTVDMSTATE_REL40,NOT VIRTUAL_INTERRUPT_BIT
+ jmp short j
+f:
+ jo short g ; all OK if OF bit set in real flag
+ ; set the overflow bit in real flag
+ push ax
+ mov al,127
+ add al,2 ; will set OF
+ pop ax
+ jmp short g
+
+k:
+ ; reset the OF
+ push ax
+ xor al,al ; will reset OF
+ pop ax
+ jmp short g
+d:
+ std
+ jmp short e
+b:
+ pop ax
+ pop ds
+ iret
+endm
+
+ */
diff --git a/private/mvdm/inc/vrdefld.h b/private/mvdm/inc/vrdefld.h
new file mode 100644
index 000000000..63758be38
--- /dev/null
+++ b/private/mvdm/inc/vrdefld.h
@@ -0,0 +1,32 @@
+/*++
+
+Copyright (c) 1991 Microsoft Corporation
+
+Module Name:
+
+ vrdefld.h
+
+Abstract:
+
+ Contains offsets in VDM redir code segment for deferred load address info
+
+Author:
+
+ Richard L Firth (rfirth) 21-Oct-1992
+
+Revision History:
+
+--*/
+
+/* XLATOFF */
+#include <packon.h>
+/* XLATON */
+
+typedef struct _VDM_LOAD_INFO { /* */
+ DWORD DlcWindowAddr;
+ BYTE VrInitialized;
+} VDM_LOAD_INFO;
+
+/* XLATOFF */
+#include <packoff.h>
+/* XLATON */
diff --git a/private/mvdm/inc/vrdlctab.h b/private/mvdm/inc/vrdlctab.h
new file mode 100644
index 000000000..7d3b359c2
--- /dev/null
+++ b/private/mvdm/inc/vrdlctab.h
@@ -0,0 +1,146 @@
+/*++
+
+Copyright (c) 1991 Microsoft Corporation
+
+Module Name:
+
+ vrdlctab.h
+
+Abstract:
+
+ Contains structures which are shared between the VDM code and the DOS
+ redir code. Separated from VDMREDIR.H
+
+Author:
+
+ Richard L Firth (rfirth) 13-May-1992
+
+Revision History:
+
+--*/
+
+//
+// manifests
+//
+
+#define DOS_DLC_STATUS_PERM_SLOTS 10
+#define DOS_DLC_STATUS_TEMP_SLOTS 5
+#define DOS_DLC_MAX_ADAPTERS 2
+
+//
+// EXTENDED_STATUS_PARMS - there is one of these per adapter
+//
+
+/* XLATOFF */
+#pragma pack(1)
+/* XLATON */
+
+typedef struct _EXTENDED_STATUS_PARMS { /* */
+ BYTE cbSize;
+ BYTE cbPageFrameSize;
+ WORD wAdapterType;
+ WORD wCurrentFrameSize;
+ WORD wMaxFrameSize;
+} EXTENDED_STATUS_PARMS;
+
+typedef EXTENDED_STATUS_PARMS UNALIGNED * PEXTENDED_STATUS_PARMS;
+
+//
+// DOS_DLC_STATUS - there is one of these for each of the permanent and temporary
+// connections
+//
+
+typedef struct _DOS_DLC_STATUS { /* */
+ WORD usStationId;
+ WORD usDlcStatusCode;
+ BYTE uchFrmrData[5];
+ BYTE uchAccessPriority;
+ BYTE uchRemoteNodeAddress[6];
+ BYTE uchRemoteSap;
+ BYTE auchReserved[3];
+} DOS_DLC_STATUS;
+
+typedef DOS_DLC_STATUS UNALIGNED * PDOS_DLC_STATUS;
+
+//
+// ADAPTER_STATUS_PARMS - In real DOS workstation, this is maintained by the
+// adapter software, but is made available to applications through DIR.STATUS.
+// Token Ring and Ethernet adapter have different adapter status parameters
+//
+// Note: some fields prefixed by Tr or Eth because the moronic x86 assembler
+// can't handle the same field name in different structures
+//
+
+typedef struct _TOKEN_RING_ADAPTER_STATUS_PARMS { /* */
+ DWORD PhysicalAddress;
+ BYTE UpstreamNodeAddress[6];
+ DWORD UpstreamPhysicalAddress;
+ BYTE LastPollAddress[6];
+ WORD AuthorizedEnvironment;
+ WORD TransmitAccessPriority;
+ WORD SourceClassAuthorization;
+ WORD LastAttentionCode;
+ BYTE TrLastSourceAddress[6];
+ WORD LastBeaconType;
+ WORD TrLastMajorVector;
+ WORD TrNetworkStatus;
+ WORD SoftError;
+ WORD FrontEndErrorCount;
+ WORD LocalRingNumber;
+ WORD MonitorErrorCode;
+ WORD BeaconTransmitType;
+ WORD BeaconReceiveType;
+ WORD TrFrameCorrelation;
+ BYTE BeaconingNaun[6];
+ DWORD Reserved;
+ DWORD BeaconingPhysicalAddress;
+} TOKEN_RING_ADAPTER_STATUS_PARMS;
+
+typedef TOKEN_RING_ADAPTER_STATUS_PARMS UNALIGNED * PTOKEN_RING_ADAPTER_STATUS_PARMS;
+
+typedef struct _ETHERNET_ADAPTER_STATUS_PARMS { /* */
+ BYTE Reserved1[28];
+ BYTE EthLastSourceAddress[6];
+ BYTE Reserved2[2];
+ WORD EthLastMajorVector;
+ WORD EthNetworkStatus;
+ WORD ErrorReportTimerValue;
+ WORD ErrorReportTimerTickCounter;
+ WORD LocalBusNumber;
+ BYTE Reserved3[6];
+ WORD EthFrameCorrelation;
+ BYTE Reserved4[6];
+ WORD NetworkUtilizationSamples;
+ WORD NetworkBusySamples;
+ BYTE Reserved5[4];
+} ETHERNET_ADAPTER_STATUS_PARMS;
+
+typedef ETHERNET_ADAPTER_STATUS_PARMS UNALIGNED * PETHERNET_ADAPTER_STATUS_PARMS;
+
+typedef union _ADAPTER_STATUS_PARMS { /* */
+ TOKEN_RING_ADAPTER_STATUS_PARMS TokenRing;
+ ETHERNET_ADAPTER_STATUS_PARMS Ethernet;
+} ADAPTER_STATUS_PARMS;
+
+typedef ADAPTER_STATUS_PARMS UNALIGNED * PADAPTER_STATUS_PARMS;
+
+//
+// VDM_REDIR_DOS_WINDOW - this structure is used by the MVDM DLC code to return
+// information to the DOS DLC program via the redir. This is used mainly in
+// asynchronous call-backs (aka ANRs, post-routines or DLC appendages). We let
+// the redir code know if there is an ANR by setting dwPostRoutine
+//
+
+typedef struct _VDM_REDIR_DOS_WINDOW { /* */
+ DWORD dwPostRoutine;
+ DWORD dwDlcTimerTick;
+ EXTENDED_STATUS_PARMS aExtendedStatus[DOS_DLC_MAX_ADAPTERS];
+ ADAPTER_STATUS_PARMS AdapterStatusParms[DOS_DLC_MAX_ADAPTERS];
+ DOS_DLC_STATUS aStatusTables[(DOS_DLC_STATUS_TEMP_SLOTS + DOS_DLC_STATUS_PERM_SLOTS)];
+} VDM_REDIR_DOS_WINDOW;
+
+typedef VDM_REDIR_DOS_WINDOW UNALIGNED * LPVDM_REDIR_DOS_WINDOW;
+
+/* XLATOFF */
+#pragma pack()
+/* XLATON */
diff --git a/private/mvdm/inc/vrinit.h b/private/mvdm/inc/vrinit.h
new file mode 100644
index 000000000..56bfc3ac2
--- /dev/null
+++ b/private/mvdm/inc/vrinit.h
@@ -0,0 +1,67 @@
+/*++
+
+Copyright (c) 1991 Microsoft Corporation
+
+Module Name:
+
+ vrinit.h
+
+Abstract:
+
+ Contains function prototypes for Vdm Redir init routines
+
+Author:
+
+ Richard L Firth (rfirth) 13-Sep-1991
+
+Revision History:
+
+ 13-Sep-1991 rfirth
+ Created
+
+--*/
+
+BOOLEAN
+VrInitialized(
+ VOID
+ );
+
+BOOLEAN
+VrInitialize(
+ VOID
+ );
+
+VOID
+VrUninitialize(
+ VOID
+ );
+
+VOID
+VrRaiseInterrupt(
+ VOID
+ );
+
+VOID
+VrDismissInterrupt(
+ VOID
+ );
+
+VOID
+VrQueueCompletionHandler(
+ IN VOID (*AsyncDispositionRoutine)(VOID)
+ );
+
+VOID
+VrHandleAsyncCompletion(
+ VOID
+ );
+
+VOID
+VrCheckPmNetbiosAnr(
+ VOID
+ );
+
+VOID
+VrEoiAndDismissInterrupt(
+ VOID
+ );
diff --git a/private/mvdm/inc/vrmisc.h b/private/mvdm/inc/vrmisc.h
new file mode 100644
index 000000000..56a5c1179
--- /dev/null
+++ b/private/mvdm/inc/vrmisc.h
@@ -0,0 +1,34 @@
+/*++
+
+Copyright (c) 1991 Microsoft Corporation
+
+Module Name:
+
+ vrmisc.h
+
+Abstract:
+
+ Contains function prototypes for Vdm Redir miscellaneous routines
+
+Author:
+
+ Richard L Firth (rfirth) 01-Oct-1991
+
+Revision History:
+
+ 01-Oct-1991 rfirth
+ Created
+
+--*/
+
+
+
+VOID
+VrTerminateDosProcess(
+ VOID
+ );
+
+VOID
+VrUnsupportedFunction(
+ VOID
+ );
diff --git a/private/mvdm/inc/vrmslot.h b/private/mvdm/inc/vrmslot.h
new file mode 100644
index 000000000..a1405d328
--- /dev/null
+++ b/private/mvdm/inc/vrmslot.h
@@ -0,0 +1,143 @@
+/*++
+
+Copyright (c) 1991 Microsoft Corporation
+
+Module Name:
+
+ vrmslot.h
+
+Abstract:
+
+ Prototypes, definitions and structures for VdmRedir mailslot handlers
+
+Author:
+
+ Richard L Firth (rfirth) 16-Sep-1991
+
+Revision History:
+
+ 16-Sep-1991 rfirth
+ Created
+
+--*/
+
+
+
+//
+// VDM Mailslot support routines. Prototypes
+//
+
+VOID
+VrDeleteMailslot(
+ VOID
+ );
+
+VOID
+VrGetMailslotInfo(
+ VOID
+ );
+
+VOID
+VrMakeMailslot(
+ VOID
+ );
+
+VOID
+VrPeekMailslot(
+ VOID
+ );
+
+VOID
+VrReadMailslot(
+ VOID
+ );
+
+VOID
+VrWriteMailslot(
+ VOID
+ );
+
+VOID
+VrTerminateMailslots(
+ IN WORD DosPdb
+ );
+
+
+
+//
+// typedefs
+//
+
+//
+// SELECTOR - in the absence of a standard SELECTOR type, 16-bit selector,
+// doubles as SEGMENT (as in ADDRESS16)
+//
+
+typedef unsigned short SELECTOR;
+
+//
+// ADDRESS16 - an Intel architecture-specific 16:16 address, consisting of a
+// 16-bit offset in the low word and a 16-bit segment (real mode) or selector
+// (protect mode) in the high word. Both elements are little-endian
+// Again, this exists in absence of Intel-specific DWORD structure which has
+// correct endian-ness and views address as composed of two parts
+//
+
+typedef struct {
+ unsigned short Offset;
+ SELECTOR Selector;
+} ADDRESS16;
+
+
+
+//
+// structures
+//
+
+//
+// VR_MAILSLOT_INFO - the Dos mailslot subsystem needs some info which we do
+// not keep, so we put it in this structure. The structure is linked into a
+// list of active mailslot structures for every successful CreateMailslot
+// call. The extra info we need is:
+//
+// DosPdb - the PDB (or PSP) of the Dos application. Used for
+// consistency checks and removing mailslots when the
+// app dies
+// Handle16 - the handle returned to the Dos app. We have to invent
+// this
+// BufferAddress - the Dos app tells us where its buffer is then wants
+// us to confirm the address in a DosMailslotInfo call
+// Selector - the Dos app needs a protect mode selector when
+// running under Windows 3.0 enhanced mode
+// MessageSize - maximum message size which can be read. Not the same
+// thing as mailslot size
+//
+// We also need some information for our own internal wrangling:
+//
+// NameLength - the length of the significant part of the mailslot
+// name (after \MAILSLOT\). We compare this before
+// doing a strcmp() on names
+// Name - the significant part of the mailslot name. When a
+// mailslot is opened, we store the name after \MAILSLOT\
+// because DosMailslotWrite uses the symbolic name, even
+// when writing locally; we need a handle, so we have
+// to map the name to open mailslot handle.
+//
+// This structure is allocated from the heap and the Name field will actually
+// be large enough to hold the entire string. I put Name[2] because the Mips
+// compiler doesn't know about Name[] (Microsoft C compiler extension). 2 at
+// least keeps things even. Maybe it should be 4. Maybe it doesn't matter
+//
+
+typedef struct _VR_MAILSLOT_INFO *PVR_MAILSLOT_INFO;
+typedef struct _VR_MAILSLOT_INFO {
+ PVR_MAILSLOT_INFO Next; // linked list
+ WORD DosPdb; // for consistency etc
+ WORD Handle16; // Dos handle
+ HANDLE Handle32; // Win32 handle (proper)
+ ADDRESS16 BufferAddress; // Dos app's message buffer
+ SELECTOR Selector; // Win 3's buffer selector
+ DWORD MessageSize; // max. message size
+ DWORD NameLength; // length of name following:
+ CHAR Name[2]; // of mailslot, (after \\.\MAILSLOT\)
+} VR_MAILSLOT_INFO;
diff --git a/private/mvdm/inc/vrnetapi.h b/private/mvdm/inc/vrnetapi.h
new file mode 100644
index 000000000..8ef547a26
--- /dev/null
+++ b/private/mvdm/inc/vrnetapi.h
@@ -0,0 +1,150 @@
+/*++
+
+Copyright (c) 1991 Microsoft Corporation
+
+Module Name:
+
+ vrnetapi.h
+
+Abstract:
+
+ Contains prototypes and definitions for Vdm Redir lanman support routines
+
+Author:
+
+ Richard L Firth (rfirth) 21-Oct-1991
+
+Revision History:
+
+ 21-Oct-1991 rfirth
+ Created
+
+--*/
+
+//
+// the top bit of the api number (word) is used by the dosnet library to
+// indicate whether certain APIs should be remoted over a null session
+// (according to the code in the dos redir)
+//
+
+#define USE_NULL_SESSION_FLAG 0x8000
+
+
+
+//
+// prototypes
+//
+
+VOID
+VrNetRemoteApi(
+ VOID
+ );
+
+VOID
+VrNetTransactApi(
+ VOID
+ );
+
+VOID
+VrNetNullTransactApi(
+ VOID
+ );
+
+VOID
+VrNetServerEnum(
+ VOID
+ );
+
+VOID
+VrNetUseAdd(
+ VOID
+ );
+
+VOID
+VrNetUseDel(
+ VOID
+ );
+
+VOID
+VrNetUseEnum(
+ VOID
+ );
+
+VOID
+VrNetUseGetInfo(
+ VOID
+ );
+
+VOID
+VrNetWkstaGetInfo(
+ VOID
+ );
+
+VOID
+VrNetWkstaSetInfo(
+ VOID
+ );
+
+VOID
+VrNetMessageBufferSend(
+ VOID
+ );
+
+VOID
+VrGetCDNames(
+ VOID
+ );
+
+VOID
+VrGetComputerName(
+ VOID
+ );
+
+VOID
+VrGetUserName(
+ VOID
+ );
+
+VOID
+VrGetDomainName(
+ VOID
+ );
+
+VOID
+VrGetLogonServer(
+ VOID
+ );
+
+VOID
+VrNetGetDCName(
+ VOID
+ );
+
+VOID
+VrReturnAssignMode(
+ VOID
+ );
+
+VOID
+VrSetAssignMode(
+ VOID
+ );
+
+VOID
+VrGetAssignListEntry(
+ VOID
+ );
+
+VOID
+VrDefineMacro(
+ VOID
+ );
+
+VOID
+VrBreakMacro(
+ VOID
+ );
+
+VOID VrNetServiceControl(
+ VOID
+ );
diff --git a/private/mvdm/inc/vrnmpipe.h b/private/mvdm/inc/vrnmpipe.h
new file mode 100644
index 000000000..bc8854ce9
--- /dev/null
+++ b/private/mvdm/inc/vrnmpipe.h
@@ -0,0 +1,409 @@
+/*++
+
+Copyright (c) 1991 Microsoft Corporation
+
+Module Name:
+
+ vrnmpipe.h
+
+Abstract:
+
+ Prototypes, definitions and structures for VdmRedir named pipe handlers
+
+Author:
+
+ Richard L Firth (rfirth) 10-Sep-1991
+
+Revision History:
+
+ 10-Sep-1991 RFirth
+ Created
+
+--*/
+
+//
+// manifests
+//
+
+#define MAXIMUM_ASYNC_PIPES 32
+
+//
+// async named pipe request types
+//
+
+#define ANP_READ 0x86
+#define ANP_READ2 0x90
+#define ANP_WRITE 0x8f
+#define ANP_WRITE2 0x91
+
+//
+// VDM Named Pipe support routines. Prototypes
+//
+
+VOID
+VrGetNamedPipeInfo(
+ VOID
+ );
+
+VOID
+VrGetNamedPipeHandleState(
+ VOID
+ );
+
+VOID
+VrSetNamedPipeHandleState(
+ VOID
+ );
+
+VOID
+VrPeekNamedPipe(
+ VOID
+ );
+
+VOID
+VrTransactNamedPipe(
+ VOID
+ );
+
+VOID
+VrCallNamedPipe(
+ VOID
+ );
+
+VOID
+VrWaitNamedPipe(
+ VOID
+ );
+
+VOID
+VrNetHandleGetInfo(
+ VOID
+ );
+
+VOID
+VrNetHandleSetInfo(
+ VOID
+ );
+
+VOID
+VrReadWriteAsyncNmPipe(
+ VOID
+ );
+
+BOOLEAN
+VrNmPipeInterrupt(
+ VOID
+ );
+
+VOID
+VrTerminateNamedPipes(
+ IN WORD DosPdb
+ );
+
+//
+// VDM open/close and read/write intercept routines
+//
+
+#ifdef VDMREDIR_DLL
+
+BOOL
+VrAddOpenNamedPipeInfo(
+ IN HANDLE Handle,
+ IN LPSTR lpFileName
+ );
+
+BOOL
+VrRemoveOpenNamedPipeInfo(
+ IN HANDLE Handle
+ );
+
+BOOL
+VrReadNamedPipe(
+ IN HANDLE Handle,
+ IN LPBYTE Buffer,
+ IN DWORD Buflen,
+ OUT LPDWORD BytesRead,
+ OUT LPDWORD Error
+ );
+
+BOOL
+VrWriteNamedPipe(
+ IN HANDLE Handle,
+ IN LPBYTE Buffer,
+ IN DWORD Buflen,
+ OUT LPDWORD BytesWritten
+ );
+
+VOID
+VrCancelPipeIo(
+ IN DWORD Thread
+ );
+
+#else
+
+BOOL
+(*VrAddOpenNamedPipeInfo)(
+ IN HANDLE Handle,
+ IN LPSTR lpFileName
+ );
+
+BOOL
+(*VrRemoveOpenNamedPipeInfo)(
+ IN HANDLE Handle
+ );
+
+BOOL
+(*VrReadNamedPipe)(
+ IN HANDLE Handle,
+ IN LPBYTE Buffer,
+ IN DWORD Buflen,
+ OUT LPDWORD BytesRead,
+ OUT LPDWORD Error
+ );
+
+BOOL
+(*VrWriteNamedPipe)(
+ IN HANDLE Handle,
+ IN LPBYTE Buffer,
+ IN DWORD Buflen,
+ OUT LPDWORD BytesWritten
+ );
+
+VOID
+(*VrCancelPipeIo)(
+ IN DWORD Thread
+ );
+
+#endif
+
+//
+// VDM pipe name to NT pipe name helper routines
+//
+
+#ifdef VDMREDIR_DLL
+
+BOOL
+VrIsNamedPipeName(
+ IN LPSTR Name
+ );
+
+BOOL
+VrIsNamedPipeHandle(
+ IN HANDLE Handle
+ );
+
+LPSTR
+VrConvertLocalNtPipeName(
+ OUT LPSTR Buffer OPTIONAL,
+ IN LPSTR Name
+ );
+
+#else
+
+BOOL
+(*VrIsNamedPipeName)(
+ IN LPSTR Name
+ );
+
+BOOL
+(*VrIsNamedPipeHandle)(
+ IN HANDLE Handle
+ );
+
+LPSTR
+(*VrConvertLocalNtPipeName)(
+ OUT LPSTR Buffer OPTIONAL,
+ IN LPSTR Name
+ );
+
+#endif
+
+//
+// structures
+//
+
+//typedef struct {
+// PDOSNMPINFO Next; // pointer to next info structure in list
+// WORD DosPdb;
+// WORD Handle16;
+// HANDLE Handle32; // handle returned from CreateFile call
+// DWORD NameLength; // length of ASCIZ pipe name
+// LPSTR Name; // ASCIZ pipe name
+// DWORD Instances; // current instances
+//} DOSNMPINFO, *PDOSNMPINFO;
+
+//
+// OPEN_NAMED_PIPE_INFO - this structure contains information recorded when a
+// named pipe is opened on behalf of the VDM. DosQNmPipeInfo wants the name
+// of the pipe
+//
+
+typedef struct _OPEN_NAMED_PIPE_INFO* POPEN_NAMED_PIPE_INFO;
+typedef struct _OPEN_NAMED_PIPE_INFO {
+ POPEN_NAMED_PIPE_INFO Next; // linked list
+ HANDLE Handle; // open named pipe handle
+ DWORD NameLength; // including terminating 0
+ WORD DosPdb; // the process which owns this named pipe
+ CHAR Name[2]; // full pipe name
+} OPEN_NAMED_PIPE_INFO;
+
+//
+// DOS_ASYNC_NAMED_PIPE_INFO - in this structure we keep all the information
+// required to complete an asynchronous named pipe operation
+//
+
+typedef struct _DOS_ASYNC_NAMED_PIPE_INFO {
+ struct _DOS_ASYNC_NAMED_PIPE_INFO* Next; // linked list
+ OVERLAPPED Overlapped; // contains 32-bit event handle
+ BOOL Type2; // TRUE if request is Read2 or Write2
+ BOOL Completed; // TRUE if this request has completed
+ HANDLE Handle; // 32-bit named pipe handle
+ DWORD Buffer; // 16:16 address of buffer
+ DWORD BytesTransferred; // actual number of bytes read/written
+ LPWORD pBytesTransferred; // flat-32 pointer to returned read/write count in VDM
+ LPWORD pErrorCode; // flat-32 pointer to returned error code in VDM
+ DWORD ANR; // 16:16 address of ANR
+ DWORD Semaphore; // 16:16 address of 'semaphore' in VDM
+#if DBG
+ DWORD RequestType;
+#endif
+} DOS_ASYNC_NAMED_PIPE_INFO, *PDOS_ASYNC_NAMED_PIPE_INFO;
+
+//
+// DOS_CALL_NAMED_PIPE_STRUCT - this structure is created and handed to the DOS
+// CallNmPipe routine because there is too much information to get into a 286's
+// registers. This structure should be in apistruc.h, but it aint
+//
+
+//#include <packon.h>
+#pragma pack(1)
+typedef struct {
+ DWORD Timeout; // Time to wait for pipe to become available
+ LPWORD lpBytesRead; // pointer to returned bytes read
+ WORD nOutBufferLen; // size of send data
+ LPBYTE lpOutBuffer; // pointer to send data
+ WORD nInBufferLen; // size of receive buffer
+ LPBYTE lpInBuffer; // pointer to receive buffer
+ LPSTR lpPipeName; // pointer to pipe name
+} DOS_CALL_NAMED_PIPE_STRUCT, *PDOS_CALL_NAMED_PIPE_STRUCT;
+//#include <packoff.h>
+#pragma pack()
+
+//
+// DOS_ASYNC_NAMED_PIPE_STRUCT - as with the above, this structure is used
+// to pass all the info to DosReadAsyncNmPipe which won't fit into registers.
+// Used for read and write operations. Should be defined in apistruc.h
+//
+
+//#include <packon.h>
+#pragma pack(1)
+typedef struct {
+ LPWORD lpBytesRead; // pointer to returned bytes read/written
+ WORD BufferLength; // size of caller's buffer
+ LPBYTE lpBuffer; // pointer to caller's buffer
+ LPWORD lpErrorCode; // pointer to returned error code
+ LPVOID lpANR; // pointer to Asynchronous Notification Routine
+ WORD PipeHandle; // named pipe handle
+ LPBYTE lpSemaphore; // pointer to caller's 'semaphore'
+} DOS_ASYNC_NAMED_PIPE_STRUCT, *PDOS_ASYNC_NAMED_PIPE_STRUCT;
+//#include <packoff.h>
+#pragma pack()
+
+//
+// The following selectively copied from BSEDOS.H and other Lanman include
+// files
+//
+
+/*** Data structures and equates used with named pipes ***/
+
+//#include <packon.h>
+#pragma pack(1)
+typedef struct _PIPEINFO { /* nmpinf */
+ USHORT cbOut;
+ USHORT cbIn;
+ BYTE cbMaxInst;
+ BYTE cbCurInst;
+ BYTE cbName;
+ CHAR szName[1];
+} PIPEINFO;
+//#include <packoff.h>
+#pragma pack()
+typedef PIPEINFO FAR *PPIPEINFO;
+
+/* defined bits in pipe mode */
+#define NP_NBLK 0x8000 /* non-blocking read/write */
+#define NP_SERVER 0x4000 /* set if server end */
+#define NP_WMESG 0x0400 /* write messages */
+#define NP_RMESG 0x0100 /* read as messages */
+#define NP_ICOUNT 0x00FF /* instance count field */
+
+
+/* Named pipes may be in one of several states depending on the actions
+ * that have been taken on it by the server end and client end. The
+ * following state/action table summarizes the valid state transitions:
+ *
+ * Current state Action Next state
+ *
+ * <none> server DosMakeNmPipe DISCONNECTED
+ * DISCONNECTED server connect LISTENING
+ * LISTENING client open CONNECTED
+ * CONNECTED server disconn DISCONNECTED
+ * CONNECTED client close CLOSING
+ * CLOSING server disconn DISCONNECTED
+ * CONNECTED server close CLOSING
+ * <any other> server close <pipe deallocated>
+ *
+ * If a server disconnects his end of the pipe, the client end will enter a
+ * special state in which any future operations (except close) on the file
+ * descriptor associated with the pipe will return an error.
+ */
+
+/*
+ * Values for named pipe state
+ */
+
+#define NP_DISCONNECTED 1 /* after pipe creation or Disconnect */
+#define NP_LISTENING 2 /* after DosNmPipeConnect */
+#define NP_CONNECTED 3 /* after Client open */
+#define NP_CLOSING 4 /* after Client or Server close */
+
+/* DosMakeNmPipe open modes */
+
+#define NP_ACCESS_INBOUND 0x0000
+#define NP_ACCESS_OUTBOUND 0x0001
+#define NP_ACCESS_DUPLEX 0x0002
+#define NP_INHERIT 0x0000
+#define NP_NOINHERIT 0x0080
+#define NP_WRITEBEHIND 0x0000
+#define NP_NOWRITEBEHIND 0x4000
+
+/* DosMakeNmPipe and DosQNmPHandState state */
+
+#define NP_READMODE_BYTE 0x0000
+#define NP_READMODE_MESSAGE 0x0100
+#define NP_TYPE_BYTE 0x0000
+#define NP_TYPE_MESSAGE 0x0400
+#define NP_END_CLIENT 0x0000
+#define NP_END_SERVER 0x4000
+#define NP_WAIT 0x0000
+#define NP_NOWAIT 0x8000
+#define NP_UNLIMITED_INSTANCES 0x00FF
+
+typedef struct _AVAILDATA { /* PeekNMPipe Bytes Available record */
+ USHORT cbpipe; /* bytes left in the pipe */
+ USHORT cbmessage; /* bytes left in current message */
+} AVAILDATA;
+typedef AVAILDATA FAR *PAVAILDATA;
+
+//
+// handle info level 1 - this is different to the structure in lmchdev.h
+//
+
+//#include <packon.h>
+#pragma pack(1)
+typedef struct _VDM_HANDLE_INFO_1 {
+ ULONG CharTime;
+ USHORT CharCount;
+} VDM_HANDLE_INFO_1, *LPVDM_HANDLE_INFO_1;
+#pragma pack()
+//#include <packoff.h>
diff --git a/private/mvdm/inc/vrremote.h b/private/mvdm/inc/vrremote.h
new file mode 100644
index 000000000..224507ef3
--- /dev/null
+++ b/private/mvdm/inc/vrremote.h
@@ -0,0 +1,101 @@
+/*++
+
+Copyright (c) 1991 Microsoft Corporation
+
+Module Name:
+
+ vrremote.h
+
+Abstract:
+
+ Prototypes for vrremote module
+
+Author:
+
+ Richard L Firth (rfirth) 28-Oct-1991
+
+Revision History:
+
+ 29-Oct-1991 rfirth
+ Created
+
+--*/
+
+NET_API_STATUS
+VrTransaction(
+ IN LPSTR ServerName,
+ IN LPBYTE SendParmBuffer,
+ IN DWORD SendParmBufLen,
+ IN LPBYTE SendDataBuffer,
+ IN DWORD SendDataBufLen,
+ OUT LPBYTE ReceiveParmBuffer,
+ IN DWORD ReceiveParmBufLen,
+ IN LPBYTE ReceiveDataBuffer,
+ IN OUT LPDWORD ReceiveDataBufLen,
+ IN BOOL NullSessionFlag
+ );
+
+NET_API_STATUS
+VrRemoteApi(
+ IN DWORD ApiNumber,
+ IN LPBYTE ServerNamePointer,
+ IN LPSTR ParameterDescriptor,
+ IN LPSTR DataDescriptor,
+ IN LPSTR AuxDescriptor OPTIONAL,
+ IN BOOL NullSessionFlag
+ );
+
+//
+// private routine prototypes
+//
+
+DWORD
+VrpGetStructureSize(
+ IN LPSTR Descriptor,
+ IN LPDWORD AuxOffset
+ );
+
+DWORD
+VrpGetArrayLength(
+ IN LPSTR type_ptr,
+ IN LPSTR* type_ptr_addr
+ );
+
+DWORD
+VrpGetFieldSize(
+ IN LPSTR Descriptor,
+ IN LPSTR* pDescriptor
+ );
+
+VOID
+VrpConvertReceiveBuffer(
+ IN LPBYTE ReceiveBuffer,
+ IN WORD BufferSelector,
+ IN WORD BufferOffset,
+ IN WORD ConverterWord,
+ IN DWORD NumberStructs,
+ IN LPSTR DataDescriptor,
+ IN LPSTR AuxDescriptor
+ );
+
+VOID
+VrpConvertVdmPointer(
+ IN ULPWORD TargetPointer,
+ IN WORD BufferSegment,
+ IN WORD BufferOffset,
+ IN WORD ConverterWord
+ );
+
+NET_API_STATUS
+VrpPackSendBuffer(
+ IN OUT LPBYTE* SendBufferPtr,
+ IN OUT LPDWORD SendBufLenPtr,
+ OUT LPBOOL BufferAllocFlagPtr,
+ IN OUT LPSTR DataDescriptor,
+ IN LPSTR AuxDescriptor,
+ IN DWORD StructureSize,
+ IN DWORD AuxOffset,
+ IN DWORD AuxSize,
+ IN BOOL SetInfoFlag,
+ IN BOOL OkToModifyDescriptor
+ );
diff --git a/private/mvdm/inc/wow.h b/private/mvdm/inc/wow.h
new file mode 100644
index 000000000..aab29dd0d
--- /dev/null
+++ b/private/mvdm/inc/wow.h
@@ -0,0 +1,1701 @@
+/*++ BUILD Version: 0002
+ *
+ * WOW v1.0
+ *
+ * Copyright (c) 1991, Microsoft Corporation
+ *
+ * WOW.H
+ * Constants, macros, etc common to WOW16/WOW32
+ *
+ * History:
+ * Created 25-Jan-1991 by Jeff Parsons (jeffpar)
+ * Added SHELL defines 14-April-92 Chandan Chauhan (ChandanC)
+ * and Win 31 parameter validation support.
+ * Modified 12-May-1992 by Mike Tricker (MikeTri) Added MultiMedia declarations
+ * and callback support
+ *
+--*/
+
+
+#define WIN31
+
+#include <mvdm.h>
+#include <bop.h>
+#ifndef NOEXTERNS
+#include <softpc.h>
+#endif
+#include <wownt32.h>
+
+#ifdef i386
+#ifndef DEBUG // should be DEBUG_OR_WOWPROFILE, but
+ // that won't work for assembler as things are.
+
+//
+// Flag to control enable/disable W32TryCall function.
+//
+
+#define NO_W32TRYCALL 1
+#endif
+#endif
+
+/* WOW constants
+ */
+#define MAX_VDMFILENAME 144 // must be >= 144 (see GetTempFileName)
+#define GRAINYTIC_RES 0x3f // will truncate to lower multiple of 64
+
+
+/* Logging/debugging macros
+ */
+/* XLATOFF */
+#define GRAINYTICS(dwordtickcount) ((dwordtickcount) & (~GRAINYTIC_RES))
+#define IFLOG(l) if (l==iLogLevel && (iLogLevel&1) || l<=iLogLevel && !(iLogLevel&1) || l == 0)
+
+#define OPENLOG() (hfLog != (HANDLE)-1?hfLog:(hfLog=CreateFile("log",GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,0,NULL)))
+#define APPENDLOG() if (hfLog == (HANDLE)-1) {hfLog=CreateFile("log",GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_ALWAYS,0,NULL) ; SetFilePointer (hfLog,0,NULL,FILE_END); }
+#define CLOSELOG() if (hfLog != (HANDLE)-1) {CloseHandle(hfLog); hfLog=(HANDLE)-1;}
+
+#undef LOG
+#ifdef NOLOG
+#define LOG(l,args)
+#define SETREQLOG(l)
+#else
+#define SETREQLOG(l) iReqLogLevel = (l)
+#define LOG(l,args) {SETREQLOG(l) ; logprintf args;}
+#endif
+#define MODNAME(module)
+
+#ifdef DEBUG
+#define STATIC
+#define INT3() _asm int 3
+#define IFDEBUG(f) if (f)
+#define ELSEDEBUG else
+#define LOGDEBUG(l,args) LOG(l,args)
+#else
+#define STATIC static
+#define INT3()
+#define IFDEBUG(f)
+#define ELSEDEBUG
+#define LOGDEBUG(l,args)
+#endif
+/* XLATON */
+
+
+/* 16-bit Windows constants
+ */
+#define CW_USEDEFAULT16 ((SHORT)0x8000)
+
+
+/* 16-bit Windows types
+ */
+typedef WORD HAND16;
+typedef WORD HTASK16;
+typedef WORD HINST16;
+typedef WORD HMOD16;
+typedef WORD HRES16;
+typedef WORD HRESI16;
+typedef WORD HRESD16;
+typedef WORD HWND16;
+typedef WORD HMENU16;
+typedef WORD HDC16;
+typedef WORD HRGN16;
+typedef WORD HICON16;
+typedef WORD HCUR16;
+typedef WORD HBRSH16;
+typedef WORD HPAL16;
+typedef WORD HBM16;
+typedef WORD HFONT16;
+typedef WORD HMEM16;
+typedef DWORD HHOOK16;
+
+typedef WORD HMMIO16; // for MultiMedia - MikeTri 12-May-1992
+typedef WORD HMIDIIN16;
+typedef WORD HMIDIOUT16;
+typedef WORD HWAVEIN16;
+typedef WORD HWAVEOUT16;
+typedef WORD HDRVR16;
+typedef DWORD HPSTR16;
+
+typedef SHORT INT16;
+typedef SHORT BOOL16;
+
+/* 16-bit pointer types (VP == VDM Ptr)
+ */
+typedef DWORD VPVOID; // VDM address (seg:off)
+typedef VPVOID VPBYTE; //
+typedef VPVOID VPWORD; //
+typedef VPVOID VPDWORD; //
+typedef VPVOID VPSHORT; //
+typedef VPVOID VPLONG; //
+typedef VPVOID VPSTR; // should use VPSZ or VPBYTE instead, as approp.
+typedef VPVOID VPSZ; //
+typedef VPVOID VPPROC; //
+typedef VPVOID VPWNDPROC; //
+typedef VPVOID VPINT16; //
+typedef VPVOID VPBOOL16; //
+typedef VPVOID *PVPVOID; // pointer to VDM address
+
+typedef VPVOID VPCSTR; // MultiMedia Extensions - MikeTri 12-May-1992
+typedef VPVOID VPMMIOPROC16;
+typedef VPVOID VPHMIDIIN16;
+typedef VPVOID VPHMIDIOUT16;
+typedef VPVOID VPPATCHARRAY16;
+typedef VPVOID VPKEYARRAY16;
+typedef VPVOID VPHWAVEIN16;
+typedef VPVOID VPHWAVEOUT16;
+typedef VPVOID VPTIMECALLBACK16;
+typedef VPVOID VPTASKCALLBACK16;
+
+/* XLATOFF */
+#pragma pack(1)
+/* XLATON */
+
+/* Window proc/dialog box callback function parameter format
+ */
+typedef struct _PARMWP { /* wp */
+ LONG lParam; //
+ WORD wParam; //
+ WORD wMsg; //
+ WORD hwnd; //
+ WORD hInst; // hInstance of window that we are returning to
+} PARMWP;
+
+
+/* EnumPropsProc callback function parameter format
+ */
+typedef struct _PARMEPP { /* epp */
+ HAND16 hData;
+ VPVOID vpString;
+ HWND16 hwnd;
+} PARMEPP;
+
+
+/* EnumWindows/EnumChildWindows/EnumTaskWindows callback function parameter format
+ */
+typedef struct _PARMEWP { /* ewp */
+ LONG lParam; // app-defined data
+ HWND16 hwnd; // 16-bit window handle
+} PARMEWP;
+
+
+/* EnumFonts callback function parameter format
+ */
+typedef struct _PARMEFP { /* efp */
+ VPVOID vpData; // app-defined data
+ SHORT nFontType; //
+ VPVOID vpTextMetric; // pointer to TEXTMETRIC16
+ VPVOID vpLogFont; // pointer to LOGFONT16
+} PARMEFP;
+
+
+/* EnumObj callback function parameter format
+ */
+typedef struct _PARMEOP { /* eop */
+ VPVOID vpData; // app-defined data
+ VPVOID vpLogObject;
+} PARMEOP;
+
+
+/* EnumMetaFile callback function parameter format
+ */
+typedef struct _PARMEMP { /* emp */
+ VPVOID vpData; // app-defined data
+ SHORT nObjects; // # objects
+ VPVOID vpMetaRecord; // pointer to METARECORD16
+ VPVOID vpHandleTable; // pointer to HANDLETABLE16
+ HDC16 hdc; // hdc
+} PARMEMP;
+
+/* Hook Callback function parameter format
+ */
+typedef struct _PARMHKP { /* hkp */
+ VPVOID lParam;
+ SHORT wParam;
+ SHORT nCode; // action code
+} PARMHKP;
+
+/* Subclass Callback function parameter format
+ */
+typedef struct _PARMSCP { /* scp */
+ SHORT iOrdinal; // oridnal number;
+} PARMSCP;
+
+/* LineDDA Callback function parameter format
+ */
+typedef struct _PARMDDA { /* dda */
+ VPVOID vpData;
+ SHORT y;
+ SHORT x;
+} PARMDDA;
+
+/* Graystring callback function parameter format
+ */
+typedef struct _PARMGST { /* gst */
+ SHORT n;
+ DWORD data;
+ HDC16 hdc;
+} PARMGST;
+
+
+typedef struct _PARMDIR { /* cdir */
+ SHORT wDrive;
+ VPSZ vpDir; // directory name
+} PARMDIR;
+
+typedef struct _PARMSAP { /* sap */
+ SHORT code; //
+ HAND16 hPr;
+} PARMSAP;
+
+
+/* WordBreakProc callback function parameter format
+ */
+typedef struct _PARMWBP { /* wbp */
+ SHORT action;
+ SHORT cbEditText;
+ SHORT ichCurrentWord;
+ VPVOID lpszEditText;
+} PARMWBP;
+
+
+/*++
+
+ MultiMedia callback definitions added, and also to _PARM16 - MikeTri
+
+--*/
+
+/* midiInOpen (MidiInFunc) Callback function parameter format
+ */
+
+typedef struct _PARMMIF { /* mif */
+ DWORD dwParam2;
+ DWORD dwParam1;
+ DWORD dwInstance;
+ WORD wMsg;
+ HMIDIIN16 hMidiIn;
+} PARMMIF;
+
+/* midiOutOpen (MidiOutFunc) Callback function parameter format
+ */
+
+typedef struct _PARMMOF { /* mof */
+ DWORD dwParam2;
+ DWORD dwParam1;
+ DWORD dwInstance;
+ WORD wMsg;
+ HMIDIOUT16 hMidiOut;
+} PARMMOF;
+
+/* mmioInstallIOProc (IOProc) Callback function parameter format
+ */
+
+typedef struct _PARMIOP { /* iop */
+ LONG lParam2;
+ LONG lParam1;
+ WORD wMsg;
+ VPVOID lpmmioinfo;
+} PARMIOP;
+
+/* timeSetEvent (TimeFunc) Callback function parameter format
+ */
+
+typedef struct _PARMTIF { /* tif */
+ DWORD dw2;
+ DWORD dw1;
+ DWORD dwUser;
+ WORD wMsg;
+ WORD wID;
+} PARMTIF;
+
+/* waveInOpen (WaveInFunc) Callback function parameter format
+ */
+
+typedef struct _PARMWIF { /* wif */
+ DWORD dwParam2;
+ DWORD dwParam1;
+ DWORD dwInstance;
+ WORD wMsg;
+ HWAVEIN16 hWaveIn;
+} PARMWIF;
+
+/* waveOutOpen (WaveOutFunc) Callback function parameter format
+ */
+
+typedef struct _PARMWOF { /* wof */
+ DWORD dwParam2;
+ DWORD dwParam1;
+ DWORD dwInstance;
+ WORD wMsg;
+ HWAVEOUT16 hWaveOut;
+} PARMWOF;
+
+/* WOWCallback16 function parameter format
+ */
+
+typedef struct _PARMWCB16 { /* wcb16 */
+ WORD wArgs[8];
+} PARMWCB16;
+
+/* PARM16 is the union of all the callback parameter structures
+ */
+typedef union _PARM16 { /* parm16 */
+ PARMWP WndProc; // for window procs
+ PARMEWP EnumWndProc; // for window enum functions
+ PARMEFP EnumFontProc; // for font enum functions
+ PARMEOP EnumObjProc; // for obj enum functions
+ PARMEMP EnumMetaProc; // for metafile enum functions
+ PARMEPP EnumPropsProc; // for properties
+ PARMHKP HookProc; // for Hooks
+ PARMSCP SubClassProc; // for subclass thunks
+ PARMDDA LineDDAProc; // for LineDDA
+ PARMGST GrayStringProc; // for GrayString
+ PARMDIR CurDir;
+ PARMSAP SetAbortProc; // for SetAbortProc
+ PARMMIF MidiInFunc; // for midiInOpen functions - MikeTri 27-Mar-1992
+ PARMMOF MidiOutFunc; // for midiOutOpen functions
+ PARMIOP IOProc; // for mmioInstallIOProc functions
+ PARMTIF TimeFunc; // for timeSetEvent functions
+ PARMWIF WaveInFunc; // for waveInOpen functions
+ PARMWOF WaveOutFunc; // for waveOutOpen functions
+ PARMWBP WordBreakProc; // for WordBreakProc
+ PARMWCB16 WOWCallback16; // for WOWCallback16
+} PARM16, *PPARM16;
+
+
+/* VDMFRAME is built by wow16cal.asm in the kernel, and is utilized
+ * by all the WOW32 thunks
+ */
+typedef struct _VDMFRAME { /* vf */
+ WORD wTDB; // 16-bit kernel handle for calling task
+ WORD wRetID; // internal call-back function ID Do NOT Move
+ WORD wLocalBP; //
+ WORD wDI; //
+ WORD wSI; //
+ WORD wAX; //
+ WORD wDX; // keep DX right after AX!!!
+ WORD wAppDS; // app DS at time of call
+ WORD wGS;
+ WORD wFS;
+ WORD wCX; // REMOVE LATER
+ WORD wES; // REMOVE LATER
+ WORD wBX; // REMOVE LATER
+ WORD wBP; // BP Chain +1
+ VPVOID wThunkCSIP; // far return address to thunk
+ DWORD wCallID; // internal WOW16 module/function ID
+ WORD cbArgs; // byte count of args pushed
+ VPVOID vpCSIP; // far return address to app
+ BYTE bArgs; // start of arguments from app
+} VDMFRAME;
+typedef VDMFRAME UNALIGNED *PVDMFRAME;
+
+/* CBVDMFRAME is built by callback16 in wow32.dll and in wow16cal.asm
+ * the definition of VDMFRAME and CBACKVDMFRAME must be in sync
+ */
+
+typedef struct _CBVDMFRAME { /* cvf */
+ WORD wTDB; // must match VDMFRAME
+ WORD wRetID; // must match VDMFRAME
+ WORD wLocalBP; // must match VDMFRAME
+ PARM16 Parm16; // space for window/enum proc parameters
+ VPVOID vpfnProc; // address of window/enum proc
+ DWORD vpStack; // orginal ss:sp. used in callback16
+ WORD wAX; //
+ WORD wDX; // keep DX right after AX!!!
+ WORD wGenUse1; // extra words for general use. for convenience
+ WORD wGenUse2; // extra words for general use. for convenience
+} CBVDMFRAME;
+typedef CBVDMFRAME UNALIGNED *PCBVDMFRAME;
+
+typedef struct _POINT16 { /* pt16 */
+ SHORT x;
+ SHORT y;
+} POINT16;
+typedef POINT16 UNALIGNED *PPOINT16;
+typedef VPVOID VPPOINT16;
+
+
+
+typedef struct _RASTERIZER_STATUS16 { /* rs16 */
+ INT16 nSize;
+ INT16 wFlags;
+ INT16 nLanguageID;
+} RASTERIZER_STATUS16;
+typedef RASTERIZER_STATUS16 UNALIGNED *PRASTERIZER_STATUS16;
+typedef VPVOID VPRASTERIZER_STATUS16;
+
+typedef struct _GLYPHMETRICS16 { /*glyph16 */
+ WORD gmBlackBoxX;
+ WORD gmBlackBoxY;
+ POINT16 gmptGlyphOrigin;
+ INT16 gmCellIncX;
+ INT16 gmCellIncY;
+} GLYPHMETRICS16;
+typedef GLYPHMETRICS16 UNALIGNED *PGLYPHMETRICS16;
+typedef VPVOID VPGLYPHMETRICS16;
+
+typedef struct _ABC16 { /* abc16 */
+ INT16 abcA;
+ WORD abcB;
+ INT16 abcC;
+} ABC16;
+typedef ABC16 UNALIGNED *PABC16;
+typedef VPVOID VPABC16;
+
+typedef struct _FIXED16 { /* fxd16 */
+ WORD fract;
+ INT16 value;
+} FIXED16;
+typedef FIXED16 UNALIGNED *PFIXED16;
+typedef VPVOID VPFIXED16;
+
+typedef struct _MAT216 { /* mat216 */
+ FIXED16 eM11;
+ FIXED16 eM12;
+ FIXED16 eM21;
+ FIXED16 eM22;
+} MAT216;
+typedef MAT216 UNALIGNED *PMAT216;
+typedef VPVOID VPMAT216;
+
+
+/* 16-bit API structures, and their pointers
+ */
+typedef struct _RECT16 { /* rc16 */
+ SHORT left;
+ SHORT top;
+ SHORT right;
+ SHORT bottom;
+} RECT16;
+typedef RECT16 UNALIGNED *PRECT16;
+typedef VPVOID VPRECT16;
+
+typedef struct _KERNINGPAIR16 { /* k16 */
+ WORD wFirst;
+ WORD wSecond;
+ INT16 iKernAmount;
+} KERNINGPAIR16;
+typedef KERNINGPAIR16 UNALIGNED *PKERNINGPAIR16;
+typedef VPVOID VPKERNINGPAIR16;
+
+
+
+
+typedef struct _MSG16 { /* msg16 */
+ HWND16 hwnd;
+ WORD message;
+ WORD wParam;
+ LONG lParam;
+ DWORD time;
+ POINT16 pt;
+} MSG16;
+typedef MSG16 UNALIGNED *PMSG16;
+typedef VPVOID VPMSG16;
+
+typedef struct _PAINTSTRUCT16 { /* ps16 */
+ HDC16 hdc;
+ BOOL16 fErase;
+ RECT16 rcPaint;
+ BOOL16 fRestore;
+ BOOL16 fIncUpdate;
+ BYTE rgbReserved[16];
+} PAINTSTRUCT16;
+typedef PAINTSTRUCT16 UNALIGNED *PPAINTSTRUCT16;
+typedef VPVOID VPPAINTSTRUCT16;
+
+typedef struct _WNDCLASS16 { /* wc16 */
+ WORD style;
+ VPWNDPROC vpfnWndProc;
+ SHORT cbClsExtra;
+ SHORT cbWndExtra;
+ HAND16 hInstance;
+ HICON16 hIcon;
+ HCUR16 hCursor;
+ HBRSH16 hbrBackground;
+ VPSZ vpszMenuName;
+ VPSZ vpszClassName;
+} WNDCLASS16;
+typedef WNDCLASS16 UNALIGNED *PWNDCLASS16;
+typedef VPVOID VPWNDCLASS16;
+
+typedef struct _PALETTEENTRY16 { /* pe16 */
+ BYTE peRed;
+ BYTE peGreen;
+ BYTE peBlue;
+ BYTE peFlags;
+} PALETTEENTRY16;
+typedef PALETTEENTRY16 UNALIGNED *PPALETTEENTRY16;
+typedef VPVOID VPPALETTEENTRY16;
+
+typedef struct _RGBTRIPLE16 { /* rgbt16 */
+ BYTE rgbtBlue;
+ BYTE rgbtGreen;
+ BYTE rgbtRed;
+} RGBTRIPLE16;
+
+typedef struct _BITMAPCOREHEADER16 { /* bmch16 */
+ DWORD bcSize;
+ WORD bcWidth;
+ WORD bcHeight;
+ WORD bcPlanes;
+ WORD bcBitCount;
+} BITMAPCOREHEADER16;
+typedef BITMAPCOREHEADER16 UNALIGNED *PBITMAPCOREHEADER16;
+
+typedef struct _BITMAPCOREINFO16 { /* bmci16 */
+ BITMAPCOREHEADER16 bmciHeader;
+ RGBTRIPLE16 bmciColors[1];
+} BITMAPCOREINFO16;
+typedef BITMAPCOREINFO16 UNALIGNED *PBITMAPCOREINFO16;
+
+
+typedef struct _CLIENTCREATESTRUCT16 { /* ccs16 */
+ HMENU16 hWindowMenu;
+ WORD idFirstChild;
+} CLIENTCREATESTRUCT16;
+typedef CLIENTCREATESTRUCT16 UNALIGNED *PCLIENTCREATESTRUCT16;
+
+
+
+typedef struct _LOGPALETTE16 { /* logpal16 */
+ WORD palVersion;
+ WORD palNumEntries;
+ PALETTEENTRY16 palPalEntry[1];
+} LOGPALETTE16;
+typedef LOGPALETTE16 UNALIGNED *PLOGPALETTE16;
+typedef VPVOID VPLOGPALETTE16;
+
+typedef SHORT CATCHBUF16[9]; /* cb16 */
+typedef VPSHORT VPCATCHBUF16;
+
+typedef struct _OFSTRUCT16 { /* of16 */
+ BYTE cBytes;
+ BYTE fFixedDisk;
+ WORD nErrCode;
+ BYTE reserved[4];
+ BYTE szPathName[128];
+} OFSTRUCT16;
+typedef OFSTRUCT16 UNALIGNED *POFSTRUCT16;
+typedef VPVOID VPOFSTRUCT16;
+
+typedef struct _DCB16 { /* dcb16 */
+ BYTE Id; // Internal Device ID
+ WORD BaudRate; // Baudrate at which runing
+ BYTE ByteSize; // Number of bits/byte, 4-8
+ BYTE Parity; // 0-4=None,Odd,Even,Mark,Space
+ BYTE StopBits; // 0,1,2 = 1, 1.5, 2
+ WORD RlsTimeout; // Timeout for RLSD to be set
+ WORD CtsTimeout; // Timeout for CTS to be set
+ WORD DsrTimeout; // Timeout for DSR to be set
+ WORD wFlags; // Bitfield flags
+ /*+++ These are the bitfield definitions in wFlags above --
+ BYTE fBinary: 1; // Binary Mode (skip EOF check
+ BYTE fRtsDisable:1; // Don't assert RTS at init time
+ BYTE fParity: 1; // Enable parity checking
+ BYTE fOutxCtsFlow:1; // CTS handshaking on output
+ BYTE fOutxDsrFlow:1; // DSR handshaking on output
+ BYTE fDummy: 2; // Reserved
+ BYTE fDtrDisable:1; // Don't assert DTR at init time
+
+ BYTE fOutX: 1; // Enable output X-ON/X-OFF
+ BYTE fInX: 1; // Enable input X-ON/X-OFF
+ BYTE fPeChar: 1; // Enable Parity Err Replacement
+ BYTE fNull: 1; // Enable Null stripping
+ BYTE fChEvt: 1; // Enable Rx character event.
+ BYTE fDtrflow: 1; // DTR handshake on input
+ BYTE fRtsflow: 1; // RTS handshake on input
+ BYTE fDummy2: 1; //
+ ---*/
+ CHAR XonChar; // Tx and Rx X-ON character
+ CHAR XoffChar; // Tx and Rx X-OFF character
+ WORD XonLim; // Transmit X-ON threshold
+ WORD XoffLim; // Transmit X-OFF threshold
+ CHAR PeChar; // Parity error replacement char
+ CHAR EofChar; // End of Input character
+ CHAR EvtChar; // Recieved Event character
+ WORD TxDelay; // Amount of time between chars
+} DCB16;
+typedef DCB16 UNALIGNED *PDCB16;
+typedef VPVOID VPDCB16;
+
+typedef struct _COMSTAT16 { /* cs16 */
+ BYTE status;
+ /*+++ These are bitfield definitions defined in status above --
+ BYTE fCtsHold: 1; // transmit is on CTS hold
+ BYTE fDsrHold: 1; // transmit is on DSR hold
+ BYTE fRlsdHold: 1; // transmit is on RLSD hold
+ BYTE fXoffHold: 1; // received handshake
+ BYTE fXoffSent: 1; // issued handshake
+ BYTE fEof: 1; // end of file character found
+ BYTE fTxim: 1; // character being transmitted
+ ---*/
+ WORD cbInQue; // count of characters in Rx Queue
+ WORD cbOutQue; // count of characters in Tx Queue
+} COMSTAT16;
+typedef COMSTAT16 UNALIGNED *PCOMSTAT16;
+typedef VPVOID VPCOMSTAT16;
+
+typedef struct _BITMAP16 { /* bm16 */
+ SHORT bmType;
+ SHORT bmWidth;
+ SHORT bmHeight;
+ SHORT bmWidthBytes;
+ BYTE bmPlanes;
+ BYTE bmBitsPixel;
+ VPBYTE bmBits;
+} BITMAP16;
+typedef BITMAP16 UNALIGNED *PBITMAP16;
+typedef VPVOID VPBITMAP16;
+
+typedef struct _LOGBRUSH16 { /* lb16 */
+ WORD lbStyle;
+ DWORD lbColor;
+ SHORT lbHatch;
+} LOGBRUSH16;
+typedef LOGBRUSH16 UNALIGNED *PLOGBRUSH16;
+typedef VPVOID VPLOGBRUSH16;
+
+/* ASM
+LF_FACESIZE equ 32
+ */
+typedef struct _LOGFONT16 { /* lf16 */
+ SHORT lfHeight;
+ SHORT lfWidth;
+ SHORT lfEscapement;
+ SHORT lfOrientation;
+ SHORT lfWeight;
+ BYTE lfItalic;
+ BYTE lfUnderline;
+ BYTE lfStrikeOut;
+ BYTE lfCharSet;
+ BYTE lfOutPrecision;
+ BYTE lfClipPrecision;
+ BYTE lfQuality;
+ BYTE lfPitchAndFamily;
+ BYTE lfFaceName[LF_FACESIZE];
+} LOGFONT16;
+typedef LOGFONT16 UNALIGNED *PLOGFONT16;
+typedef VPVOID VPLOGFONT16;
+
+/* ASM
+LF_FULLFACESIZE equ 64
+ */
+/* Structure passed to FONTENUMPROC */
+typedef struct _ENUMLOGFONT16 { /* elp16 */
+ LOGFONT16 elfLogFont;
+ char elfFullName[LF_FULLFACESIZE];
+ char elfStyle[LF_FACESIZE];
+} ENUMLOGFONT16;
+typedef ENUMLOGFONT16 UNALIGNED *PENUMLOGFONT16;
+typedef VPVOID VPENUMLOGFONT16;
+
+typedef struct _LOGPEN16 { /* lp16 */
+ WORD lopnStyle;
+ POINT16 lopnWidth;
+ DWORD lopnColor;
+} LOGPEN16;
+typedef LOGPEN16 UNALIGNED *PLOGPEN16;
+typedef VPVOID VPLOGPEN16;
+
+typedef RGBQUAD RGBQUAD16;
+typedef RGBQUAD16 UNALIGNED *PRGBQUAD16;
+typedef VPVOID VPRGBQUAD16;
+
+typedef BITMAPINFOHEADER BITMAPINFOHEADER16;
+typedef BITMAPINFOHEADER16 UNALIGNED *PBITMAPINFOHEADER16;
+typedef VPVOID VPBITMAPINFOHEADER16;
+
+typedef BITMAPINFO BITMAPINFO16;
+typedef BITMAPINFO16 UNALIGNED *PBITMAPINFO16;
+typedef VPVOID VPBITMAPINFO16;
+
+typedef struct _TEXTMETRIC16 { /* tm16 */
+ SHORT tmHeight;
+ SHORT tmAscent;
+ SHORT tmDescent;
+ SHORT tmInternalLeading;
+ SHORT tmExternalLeading;
+ SHORT tmAveCharWidth;
+ SHORT tmMaxCharWidth;
+ SHORT tmWeight;
+ BYTE tmItalic;
+ BYTE tmUnderlined;
+ BYTE tmStruckOut;
+ BYTE tmFirstChar;
+ BYTE tmLastChar;
+ BYTE tmDefaultChar;
+ BYTE tmBreakChar;
+ BYTE tmPitchAndFamily;
+ BYTE tmCharSet;
+ SHORT tmOverhang;
+ SHORT tmDigitizedAspectX;
+ SHORT tmDigitizedAspectY;
+} TEXTMETRIC16;
+typedef TEXTMETRIC16 UNALIGNED *PTEXTMETRIC16;
+typedef VPVOID VPTEXTMETRIC16;
+
+typedef struct _NEWTEXTMETRIC16 { /* ntm16 */
+ SHORT tmHeight;
+ SHORT tmAscent;
+ SHORT tmDescent;
+ SHORT tmInternalLeading;
+ SHORT tmExternalLeading;
+ SHORT tmAveCharWidth;
+ SHORT tmMaxCharWidth;
+ SHORT tmWeight;
+ BYTE tmItalic;
+ BYTE tmUnderlined;
+ BYTE tmStruckOut;
+ BYTE tmFirstChar;
+ BYTE tmLastChar;
+ BYTE tmDefaultChar;
+ BYTE tmBreakChar;
+ BYTE tmPitchAndFamily;
+ BYTE tmCharSet;
+ SHORT tmOverhang;
+ SHORT tmDigitizedAspectX;
+ SHORT tmDigitizedAspectY;
+ DWORD ntmFlags;
+ WORD ntmSizeEM;
+ WORD ntmCellHeight;
+ WORD ntmAvgWidth;
+} NEWTEXTMETRIC16;
+typedef NEWTEXTMETRIC16 UNALIGNED *PNEWTEXTMETRIC16;
+typedef VPVOID VPNEWTEXTMETRIC16;
+
+typedef struct _PANOSE16 { /* pan16 */
+ BYTE bFamilyType;
+ BYTE bSerifStyle;
+ BYTE bWeight;
+ BYTE bProportion;
+ BYTE bContrast;
+ BYTE bStrokeVariation;
+ BYTE bArmStyle;
+ BYTE bLetterform;
+ BYTE bMidline;
+ BYTE bXHeight;
+} PANOSE16;
+typedef PANOSE16 UNALIGNED *PPANOSE16;
+
+typedef struct _OUTLINETEXTMETRIC16 { /* otm16 */
+ WORD otmSize;
+ TEXTMETRIC16 otmTextMetrics;
+ BYTE otmFiller;
+ PANOSE16 otmPanoseNumber;
+ WORD otmfsSelection;
+ WORD otmfsType;
+ SHORT otmsCharSlopeRise;
+ SHORT otmsCharSlopeRun;
+ SHORT otmItalicAngle;
+ WORD otmEMSquare;
+ SHORT otmAscent;
+ SHORT otmDescent;
+ WORD otmLineGap;
+ WORD otmsCapEmHeight;
+ WORD otmsXHeight;
+ RECT16 otmrcFontBox;
+ SHORT otmMacAscent;
+ SHORT otmMacDescent;
+ WORD otmMacLineGap;
+ WORD otmusMinimumPPEM;
+ POINT16 otmptSubscriptSize;
+ POINT16 otmptSubscriptOffset;
+ POINT16 otmptSuperscriptSize;
+ POINT16 otmptSuperscriptOffset;
+ WORD otmsStrikeoutSize;
+ SHORT otmsStrikeoutPosition;
+ SHORT otmsUnderscorePosition;
+ SHORT otmsUnderscoreSize;
+ WORD otmpFamilyName;
+ WORD otmpFaceName;
+ WORD otmpStyleName;
+ WORD otmpFullName;
+} OUTLINETEXTMETRIC16;
+typedef OUTLINETEXTMETRIC16 UNALIGNED *POUTLINETEXTMETRIC16;
+typedef VPVOID VPOUTLINETEXTMETRIC16;
+
+typedef struct _HANDLETABLE16 { /* ht16 */
+ HAND16 objectHandle[1];
+} HANDLETABLE16;
+typedef HANDLETABLE16 UNALIGNED *PHANDLETABLE16;
+typedef VPVOID VPHANDLETABLE16;
+
+typedef struct _METARECORD16 { /* mr16 */
+ DWORD rdSize;
+ WORD rdFunction;
+ WORD rdParm[1];
+} METARECORD16;
+typedef METARECORD16 UNALIGNED *PMETARECORD16;
+typedef VPVOID VPMETARECORD16;
+
+typedef struct _DEVMODE16 { /* dm16 */
+ CHAR dmDeviceName[32];
+ WORD dmSpecVersion;
+ WORD dmDriverVersion;
+ WORD dmSize;
+ WORD dmDriverExtra;
+ DWORD dmFields;
+ SHORT dmOrientation;
+ SHORT dmPaperSize;
+ SHORT dmPaperLength;
+ SHORT dmPaperWidth;
+ SHORT dmScale;
+ SHORT dmCopies;
+ SHORT dmDefaultSource;
+ SHORT dmPrintQuality;
+ SHORT dmColor;
+ SHORT dmDuplex;
+} DEVMODE16;
+typedef DEVMODE16 UNALIGNED *PDEVMODE16;
+typedef VPVOID VPDEVMODE16;
+
+typedef struct _DEVMODE31 { /* dm31 */
+ CHAR dmDeviceName[32];
+ WORD dmSpecVersion;
+ WORD dmDriverVersion;
+ WORD dmSize;
+ WORD dmDriverExtra;
+ DWORD dmFields;
+ SHORT dmOrientation;
+ SHORT dmPaperSize;
+ SHORT dmPaperLength;
+ SHORT dmPaperWidth;
+ SHORT dmScale;
+ SHORT dmCopies;
+ SHORT dmDefaultSource;
+ SHORT dmPrintQuality;
+ SHORT dmColor;
+ SHORT dmDuplex;
+ SHORT dmYResolution;
+ SHORT dmTTOption;
+} DEVMODE31;
+typedef DEVMODE31 UNALIGNED *PDEVMODE31;
+typedef VPVOID VPDEVMODE31;
+
+typedef struct _CREATESTRUCT16 { /* cws16 */
+ VPBYTE vpCreateParams;
+ HAND16 hInstance;
+ HMENU16 hMenu;
+ HWND16 hwndParent;
+ SHORT cy;
+ SHORT cx;
+ SHORT y;
+ SHORT x;
+ DWORD dwStyle;
+ VPSZ vpszWindow;
+ VPSZ vpszClass;
+ DWORD dwExStyle;
+} CREATESTRUCT16;
+typedef CREATESTRUCT16 UNALIGNED *PCREATESTRUCT16;
+typedef VPVOID VPCREATESTRUCT16;
+
+typedef struct _DRAWITEMSTRUCT16 { /* dis16 */
+ WORD CtlType;
+ WORD CtlID;
+ WORD itemID;
+ WORD itemAction;
+ WORD itemState;
+ HWND16 hwndItem;
+ HDC16 hDC;
+ RECT16 rcItem;
+ DWORD itemData;
+} DRAWITEMSTRUCT16;
+typedef DRAWITEMSTRUCT16 UNALIGNED *PDRAWITEMSTRUCT16;
+typedef VPVOID VPDRAWITEMSTRUCT16;
+
+typedef struct _MEASUREITEMSTRUCT16 { /* mis16 */
+ WORD CtlType;
+ WORD CtlID;
+ WORD itemID;
+ WORD itemWidth;
+ WORD itemHeight;
+ DWORD itemData;
+} MEASUREITEMSTRUCT16;
+typedef MEASUREITEMSTRUCT16 UNALIGNED *PMEASUREITEMSTRUCT16;
+typedef VPVOID VPMEASUREITEMSTRUCT16;
+
+typedef struct _DELETEITEMSTRUCT16 { /* des16 */
+ WORD CtlType;
+ WORD CtlID;
+ WORD itemID;
+ HWND16 hwndItem;
+ DWORD itemData;
+} DELETEITEMSTRUCT16;
+typedef DELETEITEMSTRUCT16 UNALIGNED *PDELETEITEMSTRUCT16;
+typedef VPVOID VPDELETEITEMSTRUCT16;
+
+typedef struct _COMPAREITEMSTRUCT16 { /* cis16 */
+ WORD CtlType;
+ WORD CtlID;
+ HWND16 hwndItem;
+ WORD itemID1;
+ DWORD itemData1;
+ WORD itemID2;
+ DWORD itemData2;
+} COMPAREITEMSTRUCT16;
+typedef COMPAREITEMSTRUCT16 UNALIGNED *PCOMPAREITEMSTRUCT16;
+typedef VPVOID VPCOMPAREITEMSTRUCT16;
+
+typedef struct _MDICREATESTRUCT16 { /* mcs16 */
+ VPSZ vpszClass;
+ VPSZ vpszTitle;
+ HTASK16 hOwner;
+ SHORT x;
+ SHORT y;
+ SHORT cx;
+ SHORT cy;
+ LONG style;
+ LONG lParam; // app-defined stuff
+} MDICREATESTRUCT16;
+typedef MDICREATESTRUCT16 UNALIGNED *PMDICREATESTRUCT16;
+typedef VPVOID VPMDICREATESTRUCT16;
+
+
+typedef struct _WINDOWPOS16 { /* wp16 */
+ HAND16 hwnd;
+ HAND16 hwndInsertAfter;
+ SHORT x;
+ SHORT y;
+ SHORT cx;
+ SHORT cy;
+ WORD flags;
+} WINDOWPOS16;
+typedef WINDOWPOS16 UNALIGNED *PWINDOWPOS16;
+typedef VPVOID VPWINDOWPOS16;
+
+typedef struct _NCCALCSIZE_PARAMS16 { /* nccsz16 */
+ RECT16 rgrc[3];
+ WINDOWPOS16 UNALIGNED FAR *lppos;
+} NCCALCSIZE_PARAMS16;
+typedef NCCALCSIZE_PARAMS16 UNALIGNED *PNCCALCSIZE_PARAMS16;
+typedef VPVOID VPNCCALCSIZE_PARAMS16;
+
+/*
+ * Used by Hook Procs.
+ */
+
+typedef struct _EVENTMSG16 { /* evmsg16 */
+ WORD message;
+ WORD paramL;
+ WORD paramH;
+ DWORD time;
+} EVENTMSG16;
+typedef EVENTMSG16 UNALIGNED *PEVENTMSG16;
+typedef VPVOID VPEVENTMSG16;
+
+typedef struct _DEBUGHOOKINFO16 { /*dbgi16 */
+ HTASK16 hModuleHook;
+ DWORD reserved;
+ DWORD lParam;
+ WORD wParam;
+ SHORT code;
+} DEBUGHOOKINFO16;
+typedef DEBUGHOOKINFO16 UNALIGNED *PDEBUGHOOKINFO16;
+typedef VPVOID VPDEBUGHOOKINFO16;
+
+typedef struct _MOUSEHOOKSTRUCT16 { /* mhs16 */
+ POINT16 pt;
+ HWND16 hwnd;
+ WORD wHitTestCode;
+ DWORD dwExtraInfo;
+} MOUSEHOOKSTRUCT16;
+typedef MOUSEHOOKSTRUCT16 UNALIGNED *PMOUSEHOOKSTRUCT16;
+typedef VPVOID VPMOUSEHOOKSTRUCT16;
+
+typedef struct _CWPSTRUCT16 { /* cwps16 */
+ LONG lParam; //
+ WORD wParam; //
+ WORD message; //
+ WORD hwnd; //
+} CWPSTRUCT16;
+typedef CWPSTRUCT16 UNALIGNED *PCWPSTRUCT16;
+typedef VPVOID VPCWPSTRUCT16;
+
+typedef struct _CBT_CREATEWND16 { /* cbtcw16 */
+ VPCREATESTRUCT16 vpcs;
+ HWND16 hwndInsertAfter;
+} CBT_CREATEWND16;
+typedef CBT_CREATEWND16 UNALIGNED *PCBT_CREATEWND16;
+typedef VPVOID VPCBT_CREATEWND16;
+
+typedef struct _CBTACTIVATESTRUCT16 { /* cbtas16 */
+ BOOL16 fMouse;
+ HWND16 hWndActive;
+} CBTACTIVATESTRUCT16;
+typedef CBTACTIVATESTRUCT16 UNALIGNED *PCBTACTIVATESTRUCT16;
+typedef VPVOID VPCBTACTIVATESTRUCT16;
+
+
+/* 16-bit resource structures, and their pointers
+ *
+ * Note that some are the same as the 32-bit definition (eg, menus)
+ */
+
+typedef MENUITEMTEMPLATEHEADER MENUITEMTEMPLATEHEADER16;
+typedef MENUITEMTEMPLATE MENUITEMTEMPLATE16;
+typedef MENUITEMTEMPLATEHEADER16 *PMENUITEMTEMPLATEHEADER16;
+typedef MENUITEMTEMPLATE16 *PMENUITEMTEMPLATE16;
+
+typedef struct _DLGTEMPLATE16 { /* dt16 */
+ DWORD style; //
+ BYTE cdit; // this is a WORD in WIN32
+ WORD x; //
+ WORD y; //
+ WORD cx; //
+ WORD cy; //
+ // CHAR szMenuName[]; // potential pad byte in WIN32
+ // CHAR szClassName[]; // potential pad byte in WIN32
+ // CHAR szCaptionText[]; // potential pad byte in WIN32
+} DLGTEMPLATE16;
+typedef DLGTEMPLATE16 UNALIGNED *PDLGTEMPLATE16;
+typedef VPVOID VPDLGTEMPLATE16;
+
+typedef struct _FONTINFO16 { /* fi16 */
+ SHORT cPoints; // present if DS_SETFONT in dt16.style
+ // CHAR szTypeFace[]; // potential pad byte in WIN32
+} FONTINFO16;
+typedef FONTINFO16 UNALIGNED *PFONTINFO16;
+typedef VPVOID VPFONTINFO16;
+
+typedef struct _DLGITEMTEMPLATE16 { /* dit16 */
+ WORD x; // structure dword-aligned in WIN32
+ WORD y; //
+ WORD cx; //
+ WORD cy; //
+ WORD id; //
+ DWORD style; // this was moved to the top in WIN32
+ // CHAR szClass[]; // potential pad byte in WIN32
+ // CHAR szText[]; // potential pad byte in WIN32
+ // BYTE cbExtra; //
+ // BYTE abExtra[]; //
+} DLGITEMTEMPLATE16;
+typedef DLGITEMTEMPLATE16 UNALIGNED *PDLGITEMTEMPLATE16;
+typedef VPVOID VPDLGITEMTEMPLATE16;
+
+typedef struct _RESDIRHEADER16 { /* hdir16 */
+ WORD reserved; //
+ WORD rt; //
+ WORD cResources; // pad word in WIN32 (for size == 8)
+} RESDIRHEADER16;
+typedef RESDIRHEADER16 UNALIGNED *PRESDIRHEADER16;
+typedef VPVOID VPRESDIRHEADER16;
+
+typedef struct _ICONDIR16 { /* idir16 */
+ BYTE Width; // 16, 32, 64
+ BYTE Height; // 16, 32, 64
+ BYTE ColorCount; // 2, 8, 16
+ BYTE reserved; //
+} ICONDIR16;
+typedef ICONDIR16 UNALIGNED *PICONDIR16;
+typedef VPVOID VPICONDIR16;
+
+typedef struct _CURSORDIR16 { /* cdir16 */
+ WORD Width; //
+ WORD Height; //
+} CURSORDIR16;
+typedef CURSORDIR16 UNALIGNED *PCURSORDIR16;
+typedef VPVOID VPCURSORDIR16;
+
+/* XLATOFF */
+typedef struct _RESDIR16 { /* rdir16 */
+ union { //
+ ICONDIR16 Icon; //
+ CURSORDIR16 Cursor; //
+ } ResInfo; //
+ WORD Planes; //
+ WORD BitCount; //
+ DWORD BytesInRes; //
+ WORD idIcon; // pad word in WIN32 (for size == 16)
+} RESDIR16;
+typedef RESDIR16 UNALIGNED *PRESDIR16;
+typedef VPVOID VPRESDIR16;
+
+typedef struct _COPYDATASTRUCT16 {
+ DWORD dwData;
+ DWORD cbData;
+ PVOID lpData;
+} COPYDATASTRUCT16;
+typedef COPYDATASTRUCT16 UNALIGNED *PCOPYDATASTRUCT16;
+typedef VPVOID VPCOPYDATASTRUCT16;
+
+typedef struct _DROPSTRUCT16 {
+ HWND16 hwndSource;
+ HWND16 hwndSink;
+ WORD wFmt;
+ DWORD dwData;
+ POINT16 ptDrop;
+ DWORD dwControlData;
+} DROPSTRUCT16;
+typedef DROPSTRUCT16 UNALIGNED *PDROPSTRUCT16;
+typedef VPVOID VPDROPSTRUCT16;
+
+typedef struct _DROPFILESTRUCT16 {
+ WORD pFiles;
+ SHORT x;
+ SHORT y;
+ BOOL16 fNC;
+} DROPFILESTRUCT16;
+typedef DROPFILESTRUCT16 UNALIGNED *PDROPFILESTRUCT16;
+typedef VPVOID VPDROPFILESTRUCT16;
+
+
+typedef BITMAPINFOHEADER ICONRESOURCE;
+typedef ICONRESOURCE *PICONRESOURCE;
+typedef BITMAPINFOHEADER16 ICONRESOURCE16;
+typedef ICONRESOURCE16 UNALIGNED *PICONRESOURCE16;
+typedef VPVOID VPICONRESOURCE16;
+
+typedef struct _CURSORRESOURCE { /* cres */
+ WORD xHotspot;
+ WORD yHotspot;
+ BITMAPINFOHEADER bmih;
+} CURSORRESOURCE;
+typedef CURSORRESOURCE UNALIGNED *PCURSORRESOURCE;
+
+typedef CURSORRESOURCE CURSORRESOURCE16;
+typedef CURSORRESOURCE16 UNALIGNED *PCURSORRESOURCE16;
+typedef VPVOID VPCURSORRESOURCE16;
+
+// This describes the header of the old 2.x cursor/icon resource format;
+// the header should be followed by an AND mask and then an XOR mask, where:
+//
+// Bit value Bit value Bit value Bit value
+// AND Mask 0 0 1 1
+// XOR Mask 0 1 0 1
+// ---------------------------------------------------------
+// Result Black White Transparent Inverted
+//
+// Note that we wouldn't have to worry about this old resource format if apps
+// like WinWord (which apparently weren't fully converted to 3.x) didn't use it! -JTP
+
+typedef struct _OLDCURSORICONRESOURCE16 { /* oci16 */
+ BYTE bFigure; // 1: cursor, 2: bitmap, 3: icon
+ BYTE bIndependent; // 0: device-dependent, 1: independent
+ SHORT xHotspot; //
+ SHORT yHotspot; //
+ SHORT cx; // x-extent
+ SHORT cy; // y-extent
+ SHORT cbWidth; // bytes per row (rows are word-aligned)
+ SHORT clr; // # color planes (should always be 0)
+} OLDCURSORICONRESOURCE16;
+typedef OLDCURSORICONRESOURCE16 UNALIGNED *POLDCURSORICONRESOURCE16;
+typedef VPVOID VPOLDCURSORICONRESOURCE16;
+/* XLATON */
+
+/* XLATOFF */
+#pragma pack()
+/* XLATON */
+
+
+/* Undocumented(?) window messages
+ */
+#define WM_SETVISIBLE 0x0009
+#define WM_ALTTABACTIVE 0x0029
+#define WM_ISACTIVEICON 0x0035
+#define WM_QUERYPARKICON 0x0036
+#define WM_SYNCPAINT 0x0088
+#define WM_SYSTIMER 0x0118
+#define WM_LBTRACKPOINT 0x0131
+#define WM_ENTERMENULOOP 0x0211
+#define WM_EXITMENULOOP 0x0212
+#define WM_NEXTMENU 0x0213
+#define WM_DROPOBJECT 0x022A
+#define WM_QUERYDROPOBJECT 0x022B
+#define WM_BEGINDRAG 0x022C
+#define WM_DRAGLOOP 0x022D
+#define WM_DRAGSELECT 0x022E
+#define WM_DRAGMOVE 0x022F
+#define WM_ENTERSIZEMOVE 0x0231
+#define WM_EXITSIZEMOVE 0x0232
+
+
+/* Old window messages (changed from Win 3.x)
+ */
+#ifndef WM_USER
+#define WM_USER 0x0400
+#endif
+
+#define OLDEM_GETSEL (WM_USER+0)
+#define OLDEM_SETSEL (WM_USER+1)
+#define OLDEM_GETRECT (WM_USER+2)
+#define OLDEM_SETRECT (WM_USER+3)
+#define OLDEM_SETRECTNP (WM_USER+4)
+#define OLDEM_SCROLL (WM_USER+5)
+#define OLDEM_LINESCROLL (WM_USER+6)
+#define OLDEM_GETMODIFY (WM_USER+8)
+#define OLDEM_SETMODIFY (WM_USER+9)
+#define OLDEM_GETLINECOUNT (WM_USER+10)
+#define OLDEM_LINEINDEX (WM_USER+11)
+#define OLDEM_SETHANDLE (WM_USER+12)
+#define OLDEM_GETHANDLE (WM_USER+13)
+#define OLDEM_GETTHUMB (WM_USER+14)
+#define OLDEM_LINELENGTH (WM_USER+17)
+#define OLDEM_REPLACESEL (WM_USER+18)
+#define OLDEM_SETFONT (WM_USER+19)
+#define OLDEM_GETLINE (WM_USER+20)
+#define OLDEM_LIMITTEXT (WM_USER+21)
+#define OLDEM_CANUNDO (WM_USER+22)
+#define OLDEM_UNDO (WM_USER+23)
+#define OLDEM_FMTLINES (WM_USER+24)
+#define OLDEM_LINEFROMCHAR (WM_USER+25)
+#define OLDEM_SETWORDBREAK (WM_USER+26)
+#define OLDEM_SETTABSTOPS (WM_USER+27)
+#define OLDEM_SETPASSWORDCHAR (WM_USER+28)
+#define OLDEM_EMPTYUNDOBUFFER (WM_USER+29)
+#ifndef WIN31
+#define OLDEM_MSGMAX (WM_USER+30)
+#else
+#define OLDEM_GETFIRSTVISIBLELINE (WM_USER+30)
+#define OLDEM_SETREADONLY (WM_USER+31)
+#define OLDEM_SETWORDBREAKPROC (WM_USER+32)
+#define OLDEM_GETWORDBREAKPROC (WM_USER+33)
+#define OLDEM_GETPASSWORDCHAR (WM_USER+34)
+#define OLDEM_MSGMAX (WM_USER+35)
+#endif
+
+#define OLDBM_GETCHECK (WM_USER+0)
+#define OLDBM_SETCHECK (WM_USER+1)
+#define OLDBM_GETSTATE (WM_USER+2)
+#define OLDBM_SETSTATE (WM_USER+3)
+#define OLDBM_SETSTYLE (WM_USER+4)
+
+#define OLDCB_GETEDITSEL (WM_USER+0)
+#define OLDCB_LIMITTEXT (WM_USER+1)
+#define OLDCB_SETEDITSEL (WM_USER+2)
+#define OLDCB_ADDSTRING (WM_USER+3)
+#define OLDCB_DELETESTRING (WM_USER+4)
+#define OLDCB_DIR (WM_USER+5)
+#define OLDCB_GETCOUNT (WM_USER+6)
+#define OLDCB_GETCURSEL (WM_USER+7)
+#define OLDCB_GETLBTEXT (WM_USER+8)
+#define OLDCB_GETLBTEXTLEN (WM_USER+9)
+#define OLDCB_INSERTSTRING (WM_USER+10)
+#define OLDCB_RESETCONTENT (WM_USER+11)
+#define OLDCB_FINDSTRING (WM_USER+12)
+#define OLDCB_SELECTSTRING (WM_USER+13)
+#define OLDCB_SETCURSEL (WM_USER+14)
+#define OLDCB_SHOWDROPDOWN (WM_USER+15)
+#define OLDCB_GETITEMDATA (WM_USER+16)
+#define OLDCB_SETITEMDATA (WM_USER+17)
+#define OLDCB_GETDROPPEDCONTROLRECT (WM_USER+18)
+#ifndef WIN31
+#define OLDCB_MSGMAX (WM_USER+19)
+#else
+#define OLDCB_SETITEMHEIGHT (WM_USER+19)
+#define OLDCB_GETITEMHEIGHT (WM_USER+20)
+#define OLDCB_SETEXTENDEDUI (WM_USER+21)
+#define OLDCB_GETEXTENDEDUI (WM_USER+22)
+#define OLDCB_GETDROPPEDSTATE (WM_USER+23)
+#define OLDCB_FINDSTRINGEXACT (WM_USER+24)
+#define OLDCB_MSGMAX (WM_USER+25) /* ;Internal */
+#define OLDCBEC_SETCOMBOFOCUS (WM_USER+26) /* ;Internal */
+#define OLDCBEC_KILLCOMBOFOCUS (WM_USER+27) /* ;Internal */
+#endif
+
+#define OLDLB_ADDSTRING (WM_USER+1)
+#define OLDLB_INSERTSTRING (WM_USER+2)
+#define OLDLB_DELETESTRING (WM_USER+3)
+#define OLDLB_RESETCONTENT (WM_USER+5)
+#define OLDLB_SETSEL (WM_USER+6)
+#define OLDLB_SETCURSEL (WM_USER+7)
+#define OLDLB_GETSEL (WM_USER+8)
+#define OLDLB_GETCURSEL (WM_USER+9)
+#define OLDLB_GETTEXT (WM_USER+10)
+#define OLDLB_GETTEXTLEN (WM_USER+11)
+#define OLDLB_GETCOUNT (WM_USER+12)
+#define OLDLB_SELECTSTRING (WM_USER+13)
+#define OLDLB_DIR (WM_USER+14)
+#define OLDLB_GETTOPINDEX (WM_USER+15)
+#define OLDLB_FINDSTRING (WM_USER+16)
+#define OLDLB_GETSELCOUNT (WM_USER+17)
+#define OLDLB_GETSELITEMS (WM_USER+18)
+#define OLDLB_SETTABSTOPS (WM_USER+19)
+#define OLDLB_GETHORIZONTALEXTENT (WM_USER+20)
+#define OLDLB_SETHORIZONTALEXTENT (WM_USER+21)
+#define OLDLB_SETCOLUMNWIDTH (WM_USER+22)
+#define OLDLB_ADDFILE (WM_USER+23) /* ;Internal */
+#define OLDLB_SETTOPINDEX (WM_USER+24)
+#define OLDLB_GETITEMRECT (WM_USER+25)
+#define OLDLB_GETITEMDATA (WM_USER+26)
+#define OLDLB_SETITEMDATA (WM_USER+27)
+#define OLDLB_SELITEMRANGE (WM_USER+28)
+#define OLDLB_SETANCHORINDEX (WM_USER+29) /* ;Internal */
+#define OLDLB_GETANCHORINDEX (WM_USER+30) /* ;Internal */
+#ifndef WIN31
+#define OLDLB_MSGMAX (WM_USER+33)
+#else
+#define OLDLB_SETCARETINDEX (WM_USER+31)
+#define OLDLB_GETCARETINDEX (WM_USER+32)
+#define OLDLB_SETITEMHEIGHT (WM_USER+33)
+#define OLDLB_GETITEMHEIGHT (WM_USER+34)
+#define OLDLB_FINDSTRINGEXACT (WM_USER+35)
+#define OLDLBCB_CARETON (WM_USER+36) /* ;Internal */
+#define OLDLBCB_CARETOFF (WM_USER+37) /* ;Internal */
+#define OLDLB_MSGMAX (WM_USER+38) /* ;Internal */
+#endif
+
+#define OLDSBM_SETPOS (WM_USER+0)
+#define OLDSBM_GETPOS (WM_USER+1)
+#define OLDSBM_SETRANGE (WM_USER+2)
+#define OLDSBM_GETRANGE (WM_USER+3)
+#define OLDSBM_ENABLEARROWS (WM_USER+4)
+
+/* WOW Return IDs - Ordering must match wow16cal.asm table
+ */
+#define RET_RETURN 0 // return to app
+
+#define RET_DEBUGRETURN 1 // return to app after breakpoint
+
+#define RET_DEBUG 2 // execute breakpoint, return to WOW
+
+#define RET_WNDPROC 3 // IN:all
+ // OUT:DX:AX=wndproc return code
+
+#define RET_ENUMFONTPROC 4 // IN:all
+ // OUT:DX:AX=wndproc return code
+
+#define RET_ENUMWINDOWPROC 5 // IN:all
+ // OUT:DX:AX=wndproc return code
+
+#define RET_LOCALALLOC 6 // IN:wParam=wFlags, lParam=wBytes
+ // OUT:AX=hMem (zero if error)
+
+#define RET_LOCALREALLOC 7 // IN:wMsg=hMem, wParam=wFlags, lParam=wBytes
+ // OUT:AX=hMem (zero if error)
+
+#define RET_LOCALLOCK 8 // IN:wParam=hMem
+ // OUT:DX:AX=address (zero if error), CX=size
+
+#define RET_LOCALUNLOCK 9 // IN:wParam=hMem
+ // OUT:AX=TRUE (FALSE if error)
+
+#define RET_LOCALSIZE 10 // IN:wParam=hMem
+ // OUT:AX=size (zero if error)
+
+#define RET_LOCALFREE 11 // IN:wParam=hMem
+ // OUT:AX=TRUE (FALSE if error)
+
+#define RET_GLOBALALLOCLOCK 12 // IN:wParam=wFlags, lParam=dwBytes
+ // OUT:DX:AX=address (zero if error), BX=hMem
+
+#define RET_GLOBALLOCK 13 // IN:wParam=hMem
+ // OUT:DX:AX=address (zero if error), CX=size
+
+#define RET_GLOBALUNLOCK 14 // IN:wParam=hMem
+ // OUT:AX=TRUE (FALSE if error)
+
+#define RET_GLOBALUNLOCKFREE 15 // IN:lParam=address
+ // OUT:AX=TRUE (FALSE if error)
+
+#define RET_FINDRESOURCE 16 // IN:wParam=hTask, lParam=vpName, hwnd/wMsg=vpType
+ // OUT:AX=hResInfo (zero if not found)
+
+#define RET_LOADRESOURCE 17 // IN:wParam=hTask, lParam=hResInfo
+ // OUT:AX=hResData
+
+#define RET_FREERESOURCE 18 // IN:wParam=hResData
+ // OUT:AX=TRUE (zero if failed)
+
+#define RET_LOCKRESOURCE 19 // IN:wParam=hResData
+ // OUT:DX:AX=address (zero if error), CX=size
+
+#define RET_UNLOCKRESOURCE 20 // IN:wParam=hResData
+ // OUT:AX=TRUE (zero if resource still locked)
+
+#define RET_SIZEOFRESOURCE 21 // IN:wParam=hTask, lParam=hResInfo
+ // OUT:DX:AX=size (zero if error)
+
+#define RET_LOCKSEGMENT 22 // IN:wParam=wSeg
+ // OUT:AX=TRUE (FALSE if error)
+
+#define RET_UNLOCKSEGMENT 23 // IN:wParam=wSeg
+ // OUT:AX=TRUE (zero if segment still locked)
+
+#define RET_ENUMMETAFILEPROC 24 // IN:all
+ // OUT:DX:AX=wndproc return cod
+
+#define RET_TASKSTARTED 25 // None
+
+#define RET_HOOKPROC 26 // IN:all
+ // OUT:DX:AX=hookproc return code
+
+#define RET_SUBCLASSPROC 27 // IN:None
+ // OUT: DX:AX=thunkproc return code
+#define RET_LINEDDAPROC 28
+
+#define RET_GRAYSTRINGPROC 29
+
+#define RET_FORCETASKEXIT 30 // IN:None
+ // OUT: Does not return
+
+#define RET_SETCURDIR 31 // IN:Current Dir
+ // OUT: ax
+#define RET_ENUMOBJPROC 32 // IN:all
+ // OUT:DX:AX=wndproc return code
+
+#define RET_SETCURSORICONFLAG 33 // IN: none
+
+#define RET_SETABORTPROC 34
+
+#define RET_ENUMPROPSPROC 35
+
+#define RET_FORCESEGMENTFAULT 36 // Make a segment present
+
+ // 37 FREE
+ // 38 FREE
+ // 39 FREE
+ // 40 FREE
+ // 41 FREE
+
+#define RET_GETEXEPTR 42 // Call KRNL286:GetExePtr
+
+ // 43 FREE
+
+#define RET_FORCETASKFAULT 44 // Force a Fault
+#define RET_GETEXPWINVER 45 // Call KRNL286:GetExpWinVer
+#define RET_GETCURDIR 46 //
+
+#define RET_GETDOSPDB 47 // IN: nothing
+ // OUT: DX:AX = DOS Win_PDB
+#define RET_GETDOSSFT 48 // IN: nothing
+ // OUT: DX:AX = DOS SFT (pFileTable)
+#define RET_FOREGROUNDIDLE 49 // IN: nothing
+ // OUT: NOTHING
+#define RET_WINSOCKBLOCKHOOK 50 // IN: nothing
+ // OUT: DX:AX = BOOL ret value
+#define RET_WOWDDEFREEHANDLE 51
+
+#define RET_CHANGESELECTOR 52 // IN: wParam = Segment
+
+#define RET_GETMODULEFILENAME 53 // IN: wParam = hInst, lParam = 16:16 Buffer
+ // wMsg = cbBuffer
+ // OUT: AX = length of returned modulename
+
+#define RET_SETWORDBREAKPROC 54 //
+
+#define RET_WINEXEC 55
+
+#define RET_WOWCALLBACK16 56 // Used by public WOWCallback16 routine
+
+#define RET_GETDIBSIZE 57
+
+#define RET_GETDIBFLAGS 58
+
+#define RET_SETDIBSEL 59
+
+#define RET_FREEDIBSEL 60
+
+#define RET_MAX 60
+
+
+
+
+/* Module IDs
+ *
+ * Module IDs are OR'ed with API IDs to produce Call IDs
+ */
+#define MOD_MASK 0xF000
+#define FUN_MASK 0x0FFF
+
+#define MOD_KERNEL 0x0000
+#define MOD_DKERNEL 0X0000 // for parameter validation layer
+#define MOD_USER 0x1000 //
+#define MOD_DUSER 0x1000 // for parameter validation layer
+#define MOD_GDI 0x2000 //
+#define MOD_DGDI 0x2000 // for parameter validation layer
+#define MOD_KEYBOARD 0x3000
+#define MOD_SOUND 0x4000
+#define MOD_SHELL 0x5000 // SHELL APIs
+#define MOD_WINSOCK 0x6000
+#define MOD_TOOLHELP 0x7000
+#define MOD_MMEDIA 0x8000
+#define MOD_COMMDLG 0x9000
+#define MOD_LAST 0xA000 // Add New Module ID before this one
+
+
+/* Special Function IDs
+ *
+ * This is used by WIN16 whenever we are returning from a window proc;
+ * see the various include files (wowkrn.h, wowgdi.h, etc) for all the other
+ * function IDs.
+ */
+#define FUN_RETURN 0
+
+/*
+ * hiword of wcallID in VDMFRAME -
+ */
+
+#define HI_WCALLID 0x0000
+
+/* Macros for WOW16 DLLs
+ *
+ * Note for GDIThunk args is the metafile function number
+ * and val denotes if function has a DC
+ *
+ */
+
+/* ASM
+Thunk macro mod,func,callfirst,args,val,emptybuf
+ ifidni <args>,<abs>
+ public func
+ ifb <val>
+ func = 0
+ else
+ func = val
+ endif
+ else
+ externFP WOW16Call
+ externA __MOD_KERNEL
+ externA __MOD_DKERNEL
+ externA __MOD_USER
+ externA __MOD_DUSER
+ externA __MOD_GDI
+ externA __MOD_DGDI
+ externA __MOD_KEYBOARD
+ externA __MOD_SOUND
+ externA __MOD_SHELL
+ externA __MOD_WINSOCK
+ externA __MOD_TOOLHELP
+ externA __MOD_MMEDIA
+ externA __MOD_COMMDLG
+
+
+
+ ifidni <mod>,<USER>
+ cProc I&func,<PUBLIC,FAR,PASCAL,NODATA,WIN>
+
+ cBegin <nogen>
+ else
+ ifidni <mod>,<GDI>
+ cProc I&func,<PUBLIC,FAR,PASCAL,NODATA,WIN>
+
+ cBegin <nogen>
+ else
+ ifidni <mod>,<KERNEL>
+ cProc I&func,<PUBLIC,FAR,PASCAL,NODATA,WIN>
+
+ cBegin <nogen>
+ else
+ cProc func,<PUBLIC,FAR,PASCAL,NODATA,WIN>
+
+ cBegin <nogen>
+ endif
+ endif
+ endif
+
+ ; Make the passed in buffer into an empty string by writing null
+ ; to the first position. Win 3.1 IGetWindowText does this, and
+ ; WinFax Pro depends on this behaviour.
+ ifnb <emptybuf>
+ push bp
+ mov bp, sp
+ mov bx, [bp+8]
+ mov es, [bp+0Ah]
+ mov byte ptr es:[bx], 0
+ pop bp
+ endif
+
+ ifdifi <callfirst>,<0>
+ call callfirst
+ endif
+
+ ifnb <args>
+ push args
+ else
+ ifdef func&16
+ push size func&16
+ else
+ if1
+ %out Warning: assuming null arg frame for &mod:&func
+ endif
+ push 0
+ endif
+ endif
+ tmplabel_&func:
+
+
+ push word ptr HI_WCALLID
+ push __MOD_&mod + FUN_&func
+ call WOW16Call
+
+ ; assert that this is constant size code. 5bytes for 'call wow16call'
+ ; and 3bytes each for the 'push ...'. We use this info in wow32
+ ; to patchcodewithlpfnw32.
+
+ .erre (($ - tmplabel_&func) EQ (05h + 03h + 03h))
+
+ cEnd <nogen>
+ endif
+endm
+
+KernelThunk macro func,args,val
+ Thunk KERNEL,func,0,args,val
+endm
+
+DKernelThunk macro func,args,val
+ Thunk DKERNEL,func,0,args,val
+endm
+
+PKernelThunk macro func,callfirst,args,val
+ Thunk KERNEL,func,callfirst,args,val
+endm
+
+UserThunk macro func,args,val
+ Thunk USER,func,0,args,val
+endm
+
+DUserThunk macro func,args,val
+ Thunk DUSER,func,0,args,val
+endm
+
+PUserThunk macro func,callfirst,args,val
+ Thunk USER,func,callfirst,args,val
+endm
+
+PDUserThunk macro func,callfirst,args,val
+ Thunk DUSER,func,callfirst,args,val
+endm
+
+EUserThunk macro func,args,val
+ Thunk USER,func,0,args,val,0
+endm
+
+GDIThunk macro func,args,val
+ Thunk GDI,func,0,args,val
+endm
+
+DGDIThunk macro func,args,val
+ Thunk DGDI,func,0,args,val
+endm
+
+PGDIThunk macro func,callfirst,args,val
+ Thunk GDI,func,callfirst,args,val
+endm
+
+KbdThunk macro func,args,val
+ Thunk KEYBOARD,func,0,args,val
+endm
+
+SoundThunk macro func,args,val
+ Thunk SOUND,func,0,args,val
+endm
+
+SHELLThunk macro func,args,val
+ Thunk SHELL,func,0,args,val
+endm
+
+MMediaThunk macro func,args,val
+ Thunk MMEDIA,func,0,args,val
+endm
+
+WinsockThunk macro func,args,val
+ Thunk WINSOCK,func,0,args,val
+endm
+
+ToolHelpThunk macro func,args,val
+ Thunk TOOLHELP,func,0,args,val
+endm
+
+CommdlgThunk macro func,args,val
+ Thunk COMMDLG,func,SetWowCommDlg,args,val
+endm
+
+ */
diff --git a/private/mvdm/inc/wowclip.h b/private/mvdm/inc/wowclip.h
new file mode 100644
index 000000000..0c7a01b10
--- /dev/null
+++ b/private/mvdm/inc/wowclip.h
@@ -0,0 +1,28 @@
+/*++ BUILD Version: 0001
+ *
+ * MVDM v1.0
+ *
+ * Copyright (c) 1991, Microsoft Corporation
+ *
+ * WOWCLIP.H
+ *
+ * History:
+ * 09-22-92 Craig Jones (v-cjones)
+ * Created.
+--*/
+
+/* XLATOFF */
+#pragma pack(2)
+/* XLATON */
+
+typedef struct tagMETAFILEPICT16 { /* mfp16wow32 */
+ WORD mm;
+ WORD xExt;
+ WORD yExt;
+ HMEM16 hMF;
+} METAFILEPICT16;
+typedef METAFILEPICT16 UNALIGNED *LPMETAFILEPICT16;
+
+/* XLATOFF */
+#pragma pack()
+/* XLATON */
diff --git a/private/mvdm/inc/wowcmdlg.h b/private/mvdm/inc/wowcmdlg.h
new file mode 100644
index 000000000..144aafc52
--- /dev/null
+++ b/private/mvdm/inc/wowcmdlg.h
@@ -0,0 +1,198 @@
+/*++ BUILD Version: 0001
+ *
+ * WOW v1.0
+ *
+ * Copyright (c) 1993, Microsoft Corporation
+ *
+ * WOWCMDLG.H
+ * 16-bit Commdlg API argument structures
+ *
+ * History:
+ * John Vert (jvert) 30-Dec-1992
+ * Created
+--*/
+
+//#include <windows.h>
+//#include <winsock.h>
+
+/* XLATOFF */
+#pragma pack(2)
+/* XLATON */
+
+/*++
+ *
+ * Commdlg data structures
+ *
+--*/
+
+typedef struct _FINDREPLACE16 { /* fr16 */
+ DWORD lStructSize;
+ HWND16 hwndOwner;
+ HAND16 hInstance;
+ DWORD Flags;
+ VPSZ lpstrFindWhat;
+ VPSZ lpstrReplaceWith;
+ WORD wFindWhatLen;
+ WORD wReplaceWithLen;
+ LONG lCustData;
+ VPPROC lpfnHook;
+ VPCSTR lpTemplateName;
+} FINDREPLACE16;
+typedef FINDREPLACE16 UNALIGNED *PFINDREPLACE16;
+typedef VPVOID VPFINDREPLACE;
+
+typedef struct _OPENFILENAME16 { /* of16 */
+ DWORD lStructSize;
+ HWND16 hwndOwner;
+ HAND16 hInstance;
+ VPCSTR lpstrFilter;
+ VPSZ lpstrCustomFilter;
+ DWORD nMaxCustFilter;
+ DWORD nFilterIndex;
+ VPSZ lpstrFile;
+ DWORD nMaxFile;
+ VPSZ lpstrFileTitle;
+ DWORD nMaxFileTitle;
+ VPCSTR lpstrInitialDir;
+ VPCSTR lpstrTitle;
+ DWORD Flags;
+ USHORT nFileOffset;
+ USHORT nFileExtension;
+ VPCSTR lpstrDefExt;
+ LONG lCustData;
+ VPPROC lpfnHook;
+ VPCSTR lpTemplateName;
+} OPENFILENAME16;
+typedef OPENFILENAME16 UNALIGNED *POPENFILENAME16;
+typedef VPVOID VPOPENFILENAME;
+
+typedef struct _CHOOSECOLORDATA16 { /* cc16 */
+ DWORD lStructSize;
+ HWND16 hwndOwner;
+ HAND16 hInstance;
+ DWORD rgbResult;
+ VPDWORD lpCustColors;
+ DWORD Flags;
+ LONG lCustData;
+ VPPROC lpfnHook;
+ VPCSTR lpTemplateName;
+} CHOOSECOLORDATA16;
+typedef CHOOSECOLORDATA16 UNALIGNED *PCHOOSECOLORDATA16;
+typedef VPVOID VPCHOOSECOLORDATA;
+
+typedef struct _CHOOSEFONTDATA16 { /* cf16 */
+ DWORD lStructSize;
+ HWND16 hwndOwner;
+ HDC16 hDC;
+ VPLOGFONT16 lpLogFont;
+ SHORT iPointSize;
+ DWORD Flags;
+ DWORD rgbColors;
+ LONG lCustData;
+ VPPROC lpfnHook;
+ VPCSTR lpTemplateName;
+ HAND16 hInstance;
+ VPSZ lpszStyle;
+ WORD nFontType;
+ SHORT nSizeMin;
+ SHORT nSizeMax;
+} CHOOSEFONTDATA16;
+typedef CHOOSEFONTDATA16 UNALIGNED *PCHOOSEFONTDATA16;
+typedef VPVOID VPCHOOSEFONTDATA;
+
+typedef struct _PRINTDLGDATA16 { /* pd16 */
+ DWORD lStructSize;
+ HWND16 hwndOwner;
+ HAND16 hDevMode;
+ HAND16 hDevNames;
+ HDC16 hDC;
+ DWORD Flags;
+ WORD nFromPage;
+ WORD nToPage;
+ WORD nMinPage;
+ WORD nMaxPage;
+ WORD nCopies;
+ HAND16 hInstance;
+ LONG lCustData;
+ VPPROC lpfnPrintHook;
+ VPPROC lpfnSetupHook;
+ VPCSTR lpPrintTemplateName;
+ VPCSTR lpSetupTemplateName;
+ HAND16 hPrintTemplate;
+ HAND16 hSetupTemplate;
+} PRINTDLGDATA16;
+typedef PRINTDLGDATA16 UNALIGNED *PPRINTDLGDATA16;
+typedef VPVOID VPPRINTDLGDATA;
+
+typedef struct _DEVNAMES16 { /* dn16 */
+ WORD wDriverOffset;
+ WORD wDeviceOffset;
+ WORD wOutputOffset;
+ WORD wDefault;
+} DEVNAMES16;
+typedef DEVNAMES16 UNALIGNED *PDEVNAMES16;
+typedef VPVOID VPDEVNAMES;
+
+/*++
+ *
+ * Commdlg API IDs (equal to ordinal numbers)
+ *
+--*/
+#define FUN_GETOPENFILENAME 1
+#define FUN_GETSAVEFILENAME 2
+#define FUN_CHOOSECOLOR 5
+#define FUN_FINDTEXT 11
+#define FUN_REPLACETEXT 12
+#define FUN_CHOOSEFONT 15
+#define FUN_PRINTDLG 20
+#define FUN_WOWCOMMDLGEXTENDEDERROR 26
+#define FUN_GETFILETITLE 27
+
+
+/*++
+
+ Commdlg function prototypes - the seemingly unimportant number in the
+ comment on each function MUST match the ones in the list above!!!
+
+ !! BE WARNED !!
+
+--*/
+
+typedef struct _GETOPENFILENAME16 { /* cd1 */
+ VPOPENFILENAME lpof;
+} GETOPENFILENAME16;
+typedef GETOPENFILENAME16 UNALIGNED *PGETOPENFILENAME16;
+
+typedef struct _GETSAVEFILENAME16 { /* cd2 */
+ VPOPENFILENAME lpcf;
+} GETSAVEFILENAME16;
+typedef GETSAVEFILENAME16 UNALIGNED *PGETSAVEFILENAME16;
+
+typedef struct _CHOOSECOLOR16 { /* cd5 */
+ VPCHOOSECOLORDATA lpcc;
+} CHOOSECOLOR16;
+typedef CHOOSECOLOR16 UNALIGNED *PCHOOSECOLOR16;
+
+typedef struct _FINDTEXT16 { /* cd11 */
+ VPFINDREPLACE lpfr;
+} FINDTEXT16;
+typedef FINDTEXT16 UNALIGNED *PFINDTEXT16;
+
+typedef struct _REPLACETEXT16 { /* cd12 */
+ VPFINDREPLACE lpfr;
+} REPLACETEXT16;
+typedef REPLACETEXT16 UNALIGNED *PREPLACETEXT16;
+
+typedef struct _CHOOSEFONT16 { /* cd15 */
+ VPCHOOSEFONTDATA lpcf;
+} CHOOSEFONT16;
+typedef CHOOSEFONT16 UNALIGNED *PCHOOSEFONT16;
+
+typedef struct _PRINTDLG16 { /* cd20 */
+ VPPRINTDLGDATA lppd;
+} PRINTDLG16;
+typedef PRINTDLG16 UNALIGNED *PPRINTDLG16;
+
+/* XLATOFF */
+#pragma pack()
+/* XLATON */
diff --git a/private/mvdm/inc/wowcmpat.h b/private/mvdm/inc/wowcmpat.h
new file mode 100644
index 000000000..3862bc6ef
--- /dev/null
+++ b/private/mvdm/inc/wowcmpat.h
@@ -0,0 +1,80 @@
+/*++ BUILD Version: 0001
+ *
+ * MVDM v1.0
+ *
+ * Copyright (c) 1991, Microsoft Corporation
+ *
+ * WOWCMPAT.H
+ * WOW compatibility flags
+ *
+ * History:
+ * 11-June-1993 Neil Sandlin (neilsa)
+ * Created.
+--*/
+
+//
+// WOW compatibility flags bit definitions. These flags
+// are kept in CURRENTPTD->dwWOWCompatFlags.
+//
+
+#define WOWCF_GRAINYTICS 0x80000000 // For apps that don't trust small GetTickCount deltas
+#define WOWCF_FAKEJOURNALRECORDHOOK 0x40000000 // Used for MS Mail's MAILSPL
+#define WOWCF_EDITCTRLWNDWORDS 0x20000000 // Used for Clip-Art Window Shopper SHOPPER
+#define WOWCF_SYNCHRONOUSDOSAPP 0x10000000 // Used for BeyondMail installation
+#define WOWCF_NOTDOSSPAWNABLE 0x08000000 // For apps that can't be spawned by dos as wowapps
+#define WOWCF_RESETPAPER29ANDABOVE 0x04000000 // Used for WordPerfect DC_PAPERS
+#define WOWCF_4PLANECONVERSION 0x02000000 // Used for PhotoShop 4pl-1bpp to 1pl-4bpp
+#define WOWCF_MGX_ESCAPES 0x01000000 // Used for MicroGraphax Escapes
+#define WOWCF_HIRES 0x00800000 // Used for HIRES display cards
+#define WOWCF_SANITIZEDOTWRSFILES 0x00400000 // For WordPerfect printing on CONNECTED printers
+#define WOWCF_SIMPLEREGION 0x00200000 // used to force simple region from GetClipBox
+#define WOWCF_NOWAITFORINPUTIDLE 0x00100000 // InstallShield setup toolkit 3.00.077?.0 - 3.00.099.0 deadlock without this
+#define WOWCF_DSBASEDSTRINGPOINTERS 0x00080000 // used for winworks2.0a so that it gets DS based string pointers
+#define WOWCF_LIMIT_MEM_FREE_SPACE 0x00040000 // For apps that can't handle huge values returned by GetFreeSpace() (Automap Streets)
+#define WOWCF_DONTRELEASECACHEDDC 0x00020000 // improv chart tool uses a released dc to get text extents, the dc is still usable on win3.1
+#define WOWCF_FORCETWIPSESCAPE 0x00010000 // PM5, force twips in Escape() of DOWNLOADFACE, GETFACENAME
+#define WOWCF_LB_NONNULLLPARAM 0x00008000 // SuperProject: sets lParam of LB_GETTEXLEN message
+#define WOWCF_FORCENOPOSTSCRIPT 0x00004000 // GetTechnology wont say PostScript.
+#define WOWCF_SETNULLMESSAGE 0x00002000 // Winproj Tutorial: sets lpmsg->message = 0 in peekmessage
+#define WOWCF_GWLINDEX2TO4 0x00001000 // PowerBuild30 uses index 2 on [S/G]etWindowLong for LISTBOXs, change it to 4 for NT. This is because, it is 16 bits on Win 31. and 32 bits on NT.
+#define WOWCF_NEEDSTARTPAGE 0x00000800 // PhotoShop needs it
+#define WOWCF_NEEDIGNORESTARTPAGE 0x00000400 // XPress needs it
+#define WOWCF_NOPC_RECTANGLE 0x00000200 // QP draws bad if GetDeviceCaps(POLYGONALCAPS) sets PC_RECTANGLE
+#define WOWCF_NOFIRSTSAVE 0x00000100 // Wordperfect needs it for meta files
+#define WOWCF_ADD_MSTT 0x00000080 // FH4.0 needs to print on PS drivers
+#define WOWCF_UNLOADNETFONTS 0x00000040 // Need to track an unload font loaded over net
+#define WOWCF_GETDUMMYDC 0x00000020 // Corel Draw passes a NULL hDC to EnumMetaFile, we'll create a dummy to keep GDI32 happy.
+#define WOWCF_DBASEHANDLEBUG 0x00000010 // Borland dBase handle bug
+#define WOWCF_NOCBDIRTHUNK 0x00000008 // don't thunk CB_DIR lParam when sent to a subclassed window in PagePlus 3.0
+#define WOWCF_WMMDIACTIVATEBUG 0x00000004 // Corel Chart doesn't pass correct params for WM_MDIACTIVATE (see ThunkWMMsg16())
+#define WOWCF_UNIQUEHDCHWND 0x00000002 // For apps that assume that an hDC != hWnd
+#define WOWCF_GWLCLRTOPMOST 0x00000001 // Lotus Approach needs the WS_EX_TOPMOST bit cleared on GWL of NETDDE AGENT window
+
+
+
+// Extra WOW compatibility flags bit definitions (WOWCFEX_). These flags
+// are kept in CURRENTPTD->dwWOWCompatFlagsEx.
+//
+
+#define WOWCFEX_SENDPOSTEDMSG 0x80000000 // Lotus MM Reader.exe has message synchronization problem -- used to convert PostMessage() calls to SendMessage()
+#define WOWCFEX_BOGUSPOINTER 0x40000000 // QuarkExpress v3.31 passes a hard coded 7FFF:0000 as the pointer to a RECT struct in an EM_GETRECT message
+#define WOWCFEX_GETVERSIONHACK 0x20000000 // Set for programs we *may* wish to return 3.95 from GetVersion for. WK32WowShouldWeSayWin95 restricts this further.
+#define WOWCFEX_FIXDCFONT4MENUSIZE 0x10000000 // WP tutorial assumes that the font used to draw the menus is the same as the font selected into the hDc for the desktop window (hwnd == 0). This hack forces the use of the correct hDC.
+#define WOWCFEX_RESTOREEXPLORER 0x08000000 // Symantec Q&A Install "restores" shell= by restoring saved copy of system.ini, fix it to explorer.exe
+#define WOWCFEX_LONGWINEXECTAIL 0x04000000 // Intergraph Transcend setup uses too-long command tail with WinExec, don't fail if this flag is set.
+#define WOWCFEX_FORCEINCDPMI 0x02000000 // Power Builder 4.0 needs to see DPMI alloc's with ever increasing linear address's.
+#define WOWCFEX_SETCAPSTACK 0x01000000 // MS Works has unintialized variable. Hack stack to work around it.
+#define WOWCFEX_NODIBSHERE 0x00800000 // PhotoShop 2.5 has bug getting DIB's from clipboard
+#define WOWCFEX_PIXELMETRICS 0x00400000 // Freelance Tutorial, BorderWidth: winini metrics should be returned as pixels, not TWIPS
+#define WOWCFEX_DEFWNDPROCNCCALCSIZE 0x00200000 // Pass WM_NCCALCSIZE to DefWindowProc for Mavis Beacon so USER 32 will set corect window flags.
+#define WOWCFEX_DIBDRVIMAGESIZEZERO 0x00100000 // Return memory DC for dib.drv biSizeImage == 0 - Director 4.01
+#define WOWCFEX_GLOBALDELETEATOM 0x00080000 // For Envoy viewer that ships with Word perfect office
+#define WOWCFEX_IGNORECLIENTSHUTDOWN 0x00040000 // TurboCAD picks up saved 32-bit FS (x3b) and passes it as msg to DefFrameProc
+#define WOWCFEX_ZAPGPPSDEFBLANKS 0x00020000 // Peachtree Accounting depends on GetPrivateProfileString zapping trailing blanks in caller's lpszDefault.
+#define WOWCFEX_FAKECLASSINFOFAIL 0x00010000 // A bug in PageMaker 50a depends on the GetClassInfo failing in Win3.1 where it succeeds on NT
+#define WOWCFEX_SAMETASKFILESHARE 0x00008000 // Broderbund Living Books install opens "install.txt" DENY ALL, and then tries to open it again
+#define WOWCFEX_SAYITSNOTTHERE 0x00004000 // CrossTalk 2.2 hangs if it finds Printer/Device entry in xtalk.ini
+#define WOWCFEX_BROKENFLATPOINTER 0x00002000 // Adobe Premiere 4.0 has a bug in its aliasing code which can touch unallocated memory
+
+// Note: This was put at 0x00000001 because it was back ported to 3.51 SP5
+#define WOWCFEX_FORMFEEDHACK 0x00000001 // For apps that send a final form feed char to printer via Escape(PASSTHROUGH)
diff --git a/private/mvdm/inc/wowcomm.h b/private/mvdm/inc/wowcomm.h
new file mode 100644
index 000000000..0490fef91
--- /dev/null
+++ b/private/mvdm/inc/wowcomm.h
@@ -0,0 +1,95 @@
+/*++ BUILD Version: 0002
+ *
+ * WOW v1.0
+ *
+ * Copyright (c) 1991, Microsoft Corporation
+ *
+ * WOWCOMM.H
+ * Constants, macros, etc common to WOW16/WOW32
+ *
+ * History:
+ * Created 28-Apr-1993 by Craig Jones (v-cjones)
+ *
+--*/
+#ifndef __WOWCOMM__ // has this been included before?
+#define __WOWCOMM__
+
+#ifndef UNALIGNED // this makes UNALIGNED visible only to 32-bit stuff
+#define UNALIGNED // and invisible to 16-bit stuff
+#endif
+
+/* XLATOFF */
+#pragma pack(1)
+/* XLATON */
+
+// COMDEB - Communications Device Equipment Block. (copied from ibmcom.inc)
+//
+// This is essentially a superset of the DCB used outside of this
+// module. The DCB is contained within the DEB as the first fields.
+// The fields which follow are data and status fields which
+// are unique to this implementation.
+//
+// AltQInAddr and AltQOutAddr are alternate queue pointers which are used when
+// in "supervisor" mode. Supervisor mode is a processor mode other than the
+// one which Windows normally runs in. In standard mode Windows, supervisor
+// mode is REAL mode. In enhanced mode Windows, supervisor mode is RING 0
+// protected mode. For more details see comments in IBMINT.ASM.
+
+// RS232 Data Equip Block
+typedef struct _COMDEB16 { /* cdeb16 */
+ BYTE ComDCB; // size of this struct
+ WORD ComErr; // Non-zero if I/O error
+ WORD Port; // Base I/O Address
+ WORD NotifyHandle;
+ WORD NotifyFlags;
+ WORD RecvTrigger; // char count threshold for calling
+ WORD SendTrigger; // char count threshold for calling
+
+// The following fields are specific to com ports only
+ WORD IRQhook; // ptr to IRQ_Hook_Struc
+ WORD NextDEB; // ptr to next DEB that is sharing IRQ
+ WORD XOffPoint; // Q count where XOff is sent
+ WORD EvtMask; // Mask of events to check for
+ WORD EvtWord; // Event flags
+ DWORD QInAddr; // Address of the queue
+ DWORD AltQInAddr; // Addr of queue in "supervisor" mode
+ WORD QInSize; // Length of queue in bytes
+ DWORD QOutAddr; // Address of the queue
+ DWORD AltQOutAddr; // Addr of queue in "supervisor" mode
+ WORD QOutSize; // Length of queue in bytes
+ WORD QInCount; // Number of bytes currently in queue
+ WORD QInGet; // Offset into queue to get bytes from
+ WORD QInPut; // Offset into queue to put bytes in
+ WORD QOutCount; // Number of bytes currently in queue
+ WORD QOutGet; // Offset into queue to get bytes from
+ WORD QOutPut; // Offset into queue to put bytes in
+ BYTE EFlags; // Extended flags
+ BYTE MSRShadow; // Modem Status Register Shadow
+ BYTE ErrorMask; // Default error-checking mask
+ BYTE RxMask; // Character mask
+ BYTE ImmedChar; // Char to be transmitted immediately
+ BYTE HSFlag; // Handshake flag
+ BYTE HHSLines; // 8250 DTR/RTS bits for handshaking
+ BYTE OutHHSLines; // Lines that must be high to output
+ BYTE MSRMask; // Mask of Modem Lines to check
+ BYTE MSRInfinite; // Mask of MSR lines that must be high
+ BYTE IntVecNum; // Interrupt vector number
+ BYTE LSRShadow; // Line Status Register shadow
+ WORD QOutMod; // Characters sent mod xOnLim ENQ/ETX [rkh]
+ DWORD VCD_data;
+ BYTE VCDflags;
+ BYTE MiscFlags; // still more flags
+} COMDEB16;
+typedef COMDEB16 UNALIGNED *PCOMDEB16;
+
+// In 3.0 MSRShadow had this relationship to EvtWord and major COM apps all
+// use this offset of 35 to get to MSRShadow so that they can determine the
+// current status of the Modem Status bits. We need to maintain this offset
+// so that these apps will continue to run.
+
+/* XLATOFF */
+#pragma pack()
+/* XLATON */
+
+#endif // __WOWCOMM__
+
diff --git a/private/mvdm/inc/wowddeml.h b/private/mvdm/inc/wowddeml.h
new file mode 100644
index 000000000..2538ad4ac
--- /dev/null
+++ b/private/mvdm/inc/wowddeml.h
@@ -0,0 +1,262 @@
+/*++ BUILD Version: 0001
+ *
+ * WOW v1.0
+ *
+ * Copyright (c) 1991, Microsoft Corporation
+ *
+ * WOWDDEML.H
+ * 16-bit DDEML API argument structures
+ *
+ * History:
+ * Created 28-Dec-1992 by Chandan S. Chauhan (ChandanC)
+ *
+--*/
+
+/* DDEML API IDs
+ */
+#define FUN_DDEINITIALIZE 2
+#define FUN_DDEUNINITIALIZE 3
+#define FUN_DDECONNECTLIST 4
+#define FUN_DDEQUERYNEXTSERVER 5
+#define FUN_DDEDISCONNECTLIST 6
+#define FUN_DDECONNECT 7
+#define FUN_DDEDISCONNECT 8
+#define FUN_DDEQUERYCONVINFO 9
+#define FUN_DDESETUSERHANDLE 10
+#define FUN_DDECLIENTTRANSACTION 11
+#define FUN_DDEABANDONTRANSACTION 12
+#define FUN_DDEPOSTADVISE 13
+#define FUN_DDECREATEDATAHANDLE 14
+#define FUN_DDEADDDATA 15
+#define FUN_DDEGETDATA 16
+#define FUN_DDEACCESSDATA 17
+#define FUN_DDEUNACCESSDATA 18
+#define FUN_DDEFREEDATAHANDLE 19
+#define FUN_DDEGETLASTERROR 20
+#define FUN_DDECREATESTRINGHANDLE 21
+#define FUN_DDEFREESTRINGHANDLE 22
+#define FUN_DDEQUERYSTRING 23
+#define FUN_DDEKEEPSTRINGHANDLE 24
+
+#define FUN_DDEENABLECALLBACK 26
+#define FUN_DDENAMESERVICE 27
+
+#define FUN_CLIENTWNDPROC 28 ;Internal
+#define FUN_SERVERWNDPROC 29 ;Internal
+#define FUN_SUBFRAMEWNDPROC 30 ;Internal
+#define FUN_DMGWNDPROC 31 ;Internal
+#define FUN_CONVLISTWNDPROC 32 ;Internal
+#define FUN_MONITORWNDPROC 33 ;Internal
+#define FUN_DDESENDHOOKPROC 34 ;Internal
+#define FUN_DDEPOSTHOOKPROC 35 ;Internal
+
+#define FUN_DDECMPSTRINGHANDLES 36
+#define FUN_DDERECONNECT 37
+
+#define FUN_INITENUM 38 ;Internal
+#define FUN_TERMDLGPROC 39 ;Internal
+#define FUN_EmptyQTimerProc 40 ;Internal
+
+
+/* XLATOFF */
+#pragma pack(2)
+/* XLATON */
+
+typedef struct _CONVCONTEXT16 { /* di2 */
+ WORD cb;
+ WORD wFlags;
+ WORD wCountryID;
+ INT16 iCodePage;
+ DWORD dwLangID;
+ DWORD dwSecurity;
+} CONVCONTEXT16;
+typedef CONVCONTEXT16 UNALIGNED *PCONVCONTEXT16;
+typedef VPVOID VPCONVCONTEXT16;
+
+typedef struct _DDEINITIALIZE16 { /* d2 */
+ DWORD f4;
+ DWORD f3;
+ VPVOID f2;
+ VPVOID f1;
+} DDEINITIALIZE16;
+typedef DDEINITIALIZE16 UNALIGNED *PDDEINITIALIZE16;
+
+typedef struct _DDEUNINITIALIZE16 { /* d3 */
+ DWORD f1;
+} DDEUNINITIALIZE16;
+typedef DDEUNINITIALIZE16 UNALIGNED *PDDEUNINITIALIZE16;
+
+typedef struct _DDECONNECTLIST16 { /* d4 */
+ VPVOID f5;
+ DWORD f4;
+ DWORD f3;
+ DWORD f2;
+ DWORD f1;
+} DDECONNECTLIST16;
+typedef DDECONNECTLIST16 UNALIGNED *PDDECONNECTLIST16;
+
+typedef struct _DDEQUERYNEXTSERVER16 { /* d5 */
+ DWORD f2;
+ DWORD f1;
+} DDEQUERYNEXTSERVER16;
+typedef DDEQUERYNEXTSERVER16 UNALIGNED *PDDEQUERYNEXTSERVER16;
+
+typedef struct _DDEDISCONNECTLIST16 { /* d6 */
+ DWORD f1;
+} DDEDISCONNECTLIST16;
+typedef DDEDISCONNECTLIST16 UNALIGNED *PDDEDISCONNECTLIST16;
+
+typedef struct _DDECONNECT16 { /* d7 */
+ VPVOID f4;
+ DWORD f3;
+ DWORD f2;
+ DWORD f1;
+} DDECONNECT16;
+typedef DDECONNECT16 UNALIGNED *PDDECONNECT16;
+
+typedef struct _DDEDISCONNECT16 { /* d8 */
+ DWORD f1;
+} DDEDISCONNECT16;
+typedef DDEDISCONNECT16 UNALIGNED *PDDEDISCONNECT16;
+
+typedef struct _DDEQUERYCONVINFO16 { /* d9 */
+ VPVOID f3;
+ DWORD f2;
+ DWORD f1;
+} DDEQUERYCONVINFO16;
+typedef DDEQUERYCONVINFO16 UNALIGNED *PDDEQUERYCONVINFO16;
+
+typedef struct _DDESETUSERHANDLE16 { /* d10 */
+ DWORD f3;
+ DWORD f2;
+ DWORD f1;
+} DDESETUSERHANDLE16;
+typedef DDESETUSERHANDLE16 UNALIGNED *PDDESETUSERHANDLE16;
+
+typedef struct _DDECLIENTTRANSACTION16 { /* d11 */
+ VPVOID f8;
+ DWORD f7;
+ WORD f6;
+ WORD f5;
+ DWORD f4;
+ DWORD f3;
+ DWORD f2;
+ VPVOID f1;
+} DDECLIENTTRANSACTION16;
+typedef DDECLIENTTRANSACTION16 UNALIGNED *PDDECLIENTTRANSACTION16;
+
+typedef struct _DDEABANDONTRANSACTION16 { /* d12 */
+ DWORD f3;
+ DWORD f2;
+ DWORD f1;
+} DDEABANDONTRANSACTION16;
+typedef DDEABANDONTRANSACTION16 UNALIGNED *PDDEABANDONTRANSACTION16;
+
+typedef struct _DDEPOSTADVISE16 { /* d13 */
+ DWORD f3;
+ DWORD f2;
+ DWORD f1;
+} DDEPOSTADVISE16;
+typedef DDEPOSTADVISE16 UNALIGNED *PDDEPOSTADVISE16;
+
+typedef struct _DDECREATEDATAHANDLE16 { /* d14 */
+ WORD f7;
+ WORD f6;
+ DWORD f5;
+ DWORD f4;
+ DWORD f3;
+ VPVOID f2;
+ DWORD f1;
+} DDECREATEDATAHANDLE16;
+typedef DDECREATEDATAHANDLE16 UNALIGNED *PDDECREATEDATAHANDLE16;
+
+typedef struct _DDEADDDATA16 { /* d15 */
+ DWORD f4;
+ DWORD f3;
+ VPVOID f2;
+ DWORD f1;
+} DDEADDDATA16;
+typedef DDEADDDATA16 UNALIGNED *PDDEADDDATA16;
+
+typedef struct _DDEGETDATA16 { /* d16 */
+ DWORD f4;
+ DWORD f3;
+ VPVOID f2;
+ DWORD f1;
+} DDEGETDATA16;
+typedef DDEGETDATA16 UNALIGNED *PDDEGETDATA16;
+
+typedef struct _DDEACCESSDATA16 { /* d17 */
+ VPVOID f2;
+ DWORD f1;
+} DDEACCESSDATA16;
+typedef DDEACCESSDATA16 UNALIGNED *PDDEACCESSDATA16;
+
+typedef struct _DDEUNACCESSDATA16 { /* d18 */
+ DWORD f1;
+} DDEUNACCESSDATA16;
+typedef DDEUNACCESSDATA16 UNALIGNED *PDDEUNACCESSDATA16;
+
+typedef struct _DDEFREEDATAHANDLE16 { /* d19 */
+ DWORD f1;
+} DDEFREEDATAHANDLE16;
+typedef DDEFREEDATAHANDLE16 UNALIGNED *PDDEFREEDATAHANDLE16;
+
+typedef struct _DDEGETLASTERROR16 { /* d20 */
+ DWORD f1;
+} DDEGETLASTERROR16;
+typedef DDEGETLASTERROR16 UNALIGNED *PDDEGETLASTERROR16;
+
+typedef struct _DDECREATESTRINGHANDLE16 { /* d21 */
+ INT16 f3;
+ VPVOID f2;
+ DWORD f1;
+} DDECREATESTRINGHANDLE16;
+typedef DDECREATESTRINGHANDLE16 UNALIGNED *PDDECREATESTRINGHANDLE16;
+
+typedef struct _DDEFREESTRINGHANDLE16 { /* d22 */
+ DWORD f2;
+ DWORD f1;
+} DDEFREESTRINGHANDLE16;
+typedef DDEFREESTRINGHANDLE16 UNALIGNED *PDDEFREESTRINGHANDLE16;
+
+typedef struct _DDEQUERYSTRING16 { /* d23 */
+ INT16 f5;
+ DWORD f4;
+ VPVOID f3;
+ DWORD f2;
+ DWORD f1;
+} DDEQUERYSTRING16;
+typedef DDEQUERYSTRING16 UNALIGNED *PDDEQUERYSTRING16;
+
+typedef struct _DDEKEEPSTRINGHANDLE16 { /* d24 */
+ DWORD f2;
+ DWORD f1;
+} DDEKEEPSTRINGHANDLE16;
+typedef DDEKEEPSTRINGHANDLE16 UNALIGNED *PDDEKEEPSTRINGHANDLE16;
+
+typedef struct _DDEENABLECALLBACK16 { /* d26 */
+ WORD f3;
+ DWORD f2;
+ DWORD f1;
+} DDEENABLECALLBACK16;
+typedef DDEENABLECALLBACK16 UNALIGNED *PDDEENABLECALLBACK16;
+
+typedef struct _DDENAMESERVICE16 { /* d27 */
+ WORD f4;
+ DWORD f3;
+ DWORD f2;
+ DWORD f1;
+} DDENAMESERVICE16;
+typedef DDENAMESERVICE16 UNALIGNED *PDDENAMESERVICE16;
+
+typedef struct _DDECMPSTRINGHANDLES16 { /* d36 */
+ DWORD f2;
+ DWORD f1;
+} DDECMPSTRINGHANDLES16;
+typedef DDECMPSTRINGHANDLES16 UNALIGNED *PDDECMPSTRINGHANDLES16;
+
+typedef struct _DDERECONNECT16 { /* d37 */
+ DWORD f1;
+} DDERECONNECT16;
+typedef DDERECONNECT16 UNALIGNED *PDDERECONNECT16;
diff --git a/private/mvdm/inc/wowexp.h b/private/mvdm/inc/wowexp.h
new file mode 100644
index 000000000..be7b805ab
--- /dev/null
+++ b/private/mvdm/inc/wowexp.h
@@ -0,0 +1,15 @@
+/*++ BUILD Version: 0001
+ *
+ * MVDM v1.0
+ *
+ * Copyright (c) 1991, Microsoft Corporation
+ *
+ * WOWEXP.H
+ * WOW32 exports
+ *
+ * History:
+ * 10-May-1991 Jeff Parsons (jeffpar)
+ * Created.
+--*/
+
+extern VOID FAR PASCAL W32Dispatch(VOID);
diff --git a/private/mvdm/inc/wowfax.h b/private/mvdm/inc/wowfax.h
new file mode 100644
index 000000000..dddc1ac7e
--- /dev/null
+++ b/private/mvdm/inc/wowfax.h
@@ -0,0 +1,302 @@
+//****************************************************************************
+// WOW fax support. Common file. Conditionally shared between wow16, wow32,
+// wowfax and wowfaxui
+//
+// 16bit structures are share between wow16 and wow32 only. Though they get
+// included while compiling 32bit printdrivers wowfax and wowfaxui, yet they
+// are incorrect and inaccessible from those dlls.
+//
+//
+// History:
+// 02-jan-95 nandurir created.
+// 01-feb-95 reedb Clean-up, support printer install and bug fixes.
+//
+//****************************************************************************
+
+//***************************************************************************
+// WM_DDRV_ defines - Common to wowexec,wow32,wowfax,wowfaxui. If you add
+// a message, be sure to add it to the debug strings also.
+//***************************************************************************
+
+#define WM_DDRV_FIRST (WM_USER+0x100+1) // begin DDRV range
+#define WM_DDRV_LOAD (WM_USER+0x100+1)
+#define WM_DDRV_ENABLE (WM_USER+0x100+2)
+#define WM_DDRV_STARTDOC (WM_USER+0x100+3)
+#define WM_DDRV_PRINTPAGE (WM_USER+0x100+4)
+#define WM_DDRV_ESCAPE (WM_USER+0x100+5)
+#define WM_DDRV_DISABLE (WM_USER+0x100+6)
+#define WM_DDRV_INITFAXINFO16 (WM_USER+0x100+7)
+#define WM_DDRV_ENDDOC (WM_USER+0x100+8)
+#define WM_DDRV_SUBCLASS (WM_USER+0x100+9)
+#define WM_DDRV_EXTDMODE (WM_USER+0x100+10)
+#define WM_DDRV_DEVCAPS (WM_USER+0x100+11)
+#define WM_DDRV_FREEFAXINFO16 (WM_USER+0x100+12)
+#define WM_DDRV_UNLOAD (WM_USER+0x100+20)
+#define WM_DDRV_LAST (WM_USER+0x100+20) // end DDRV range
+
+#ifdef DEBUG
+#ifdef DEFINE_DDRV_DEBUG_STRINGS
+char *szWmDdrvDebugStrings[] =
+{
+ "WM_DDRV_LOAD",
+ "WM_DDRV_ENABLE",
+ "WM_DDRV_STARTDOC",
+ "WM_DDRV_PRINTPAGE",
+ "WM_DDRV_ESCAPE",
+ "WM_DDRV_DISABLE",
+ "WM_DDRV_INITFAXINFO16",
+ "WM_DDRV_ENDDOC",
+ "WM_DDRV_SUBCLASS",
+ "WM_DDRV_EXTDMODE",
+ "WM_DDRV_DEVCAPS",
+ "WM_DDRV_FREEFAXINFO16",
+ "UNKNOWN MESSAGE",
+ "UNKNOWN MESSAGE",
+ "UNKNOWN MESSAGE",
+ "UNKNOWN MESSAGE",
+ "UNKNOWN MESSAGE",
+ "UNKNOWN MESSAGE",
+ "UNKNOWN MESSAGE",
+ "WM_DDRV_UNLOAD"
+};
+#endif
+#endif // #define(DEBUG)
+
+// WOWFAX component file names. Unicode and ANSII
+#define WOWFAX_DLL_NAME L"WOWFAX.DLL"
+#define WOWFAXUI_DLL_NAME L"WOWFAXUI.DLL"
+#define WOWFAX_DLL_NAME_A "WOWFAX.DLL"
+#define WOWFAXUI_DLL_NAME_A "WOWFAXUI.DLL"
+
+//***************************************************************************
+// wow16 ie wowfax.c defines WOWFAX16 to include 16bit print.h etc
+//
+//***************************************************************************
+
+#if defined(_WOWFAX16_)
+
+#include "\nt\private\mvdm\wow16\inc\print.h"
+#include "\nt\private\mvdm\wow16\inc\gdidefs.inc"
+
+#define LPTSTR LPSTR
+#define TEXT(x) x
+#define SRCCOPY 0x00CC0020L
+
+//
+// the following UNALIGNED definition is required because this file
+// in included in wow16\test\shell\wowfax.h
+//
+
+#ifndef UNALIGNED
+
+#if defined(MIPS) || defined(_ALPHA_) // winnt
+#define UNALIGNED __unaligned // winnt
+#else // winnt
+#define UNALIGNED // winnt
+#endif // winnt
+
+#endif
+
+
+#endif // defined(wowfax16)
+
+//***************************************************************************
+// WOWFAXINFO16 common to wow16 and wow32
+// Struct cannot be accessed from 32bit wowfax/wowfaxui dlls
+//***************************************************************************
+
+#define WFINFO16_ENABLED 0x01
+
+/* XLATOFF */
+#pragma pack(2)
+/* XLATON */
+
+typedef struct _WOWFAXINFO16 { /* winfo16 */
+ WORD hmem;
+ WORD flState;
+ WORD hInst;
+
+ WORD (FAR PASCAL *lpEnable)(LPVOID,short,LPSTR,LPSTR,LPVOID);
+ VOID (FAR PASCAL *lpDisable)(LPVOID);
+ int (FAR PASCAL *lpControl)(LPVOID, short, LPVOID, LPVOID);
+ BOOL (FAR PASCAL *lpBitblt)(LPVOID,WORD,WORD,LPVOID,
+ WORD,WORD,WORD,WORD,long,LPVOID,LPVOID);
+ WORD (FAR PASCAL *lpExtDMode)(HWND, HANDLE, LPVOID, LPSTR, LPSTR,
+ LPVOID, LPSTR , WORD);
+ DWORD (FAR PASCAL *lpDevCaps)(LPSTR, LPSTR, WORD, LPSTR, LPVOID);
+
+ WORD hmemdevice;
+ DWORD cData;
+ WORD hwndui;
+ DWORD retvalue;
+ WORD wCmd;
+
+ // The following pointers provide offsets into the mapped file
+ // section used for inter process communication. They point to
+ // objects which have a variable length.
+ LPVOID lpDevice;
+ LPVOID lpDriverName;
+ LPVOID lpPortName;
+ LPVOID lpIn;
+ LPVOID lpOut;
+
+ // Since we have a max length (CCHDEVICENAME) we'll pass
+ // the printer/device name in this fixed length buffer.
+ char szDeviceName[CCHDEVICENAME+1];
+
+} WOWFAXINFO16;
+
+typedef WOWFAXINFO16 UNALIGNED FAR *LPWOWFAXINFO16;
+
+//***************************************************************************
+// GDIINFO16 common to wow16 and wow32
+// - this structure copied from wow16\inc\gdidefs.inc
+// - PTTYPE has been replaced with POINT
+//
+// Struct cannot be accessed from 32bit wowfax/wowfaxui dlls. the
+// definition itself will be incorrect.
+//
+//***************************************************************************
+
+#ifndef _DEF_WOW32_
+#define POINT16 POINT
+#endif
+
+typedef struct _GDIINFO16{ /* gdii16 */
+ short int dpVersion;
+ short int dpTechnology;
+ short int dpHorzSize;
+ short int dpVertSize;
+ short int dpHorzRes;
+ short int dpVertRes;
+ short int dpBitsPixel;
+ short int dpPlanes;
+ short int dpNumBrushes;
+ short int dpNumPens;
+ short int futureuse;
+ short int dpNumFonts;
+ short int dpNumColors;
+ short int dpDEVICEsize;
+ unsigned short int dpCurves;
+ unsigned short int dpLines;
+ unsigned short int dpPolygonals;
+ unsigned short int dpText;
+ unsigned short int dpClip;
+ unsigned short int dpRaster;
+ short int dpAspectX;
+ short int dpAspectY;
+ short int dpAspectXY;
+ short int dpStyleLen;
+ POINT16 dpMLoWin;
+ POINT16 dpMLoVpt;
+ POINT16 dpMHiWin;
+ POINT16 dpMHiVpt;
+ POINT16 dpELoWin;
+ POINT16 dpELoVpt;
+ POINT16 dpEHiWin;
+ POINT16 dpEHiVpt;
+ POINT16 dpTwpWin;
+ POINT16 dpTwpVpt;
+ short int dpLogPixelsX;
+ short int dpLogPixelsY;
+ short int dpDCManage;
+ unsigned short int dpCaps1;
+ short int futureuse4;
+ short int futureuse5;
+ short int futureuse6;
+ short int futureuse7;
+ WORD dpNumPalReg;
+ WORD dpPalReserved;
+ WORD dpColorRes;
+} GDIINFO16;
+
+typedef GDIINFO16 UNALIGNED FAR *LPGDIINFO16;
+
+
+/* XLATOFF */
+#pragma pack()
+/* XLATON */
+
+#ifndef _WOWFAX16_
+
+//***************************************************************************
+// WOWFAXINFO - common to wow32,wowfax,wowfaxui. This defines the header of
+// shared memory section.
+//
+//***************************************************************************
+
+typedef struct _WOWFAXINFO { /* faxi */
+ HWND hwnd;
+ DWORD tid;
+ WNDPROC proc16;
+ LPBYTE lpinfo16;
+
+ UINT msg;
+ WPARAM hdc;
+
+ WORD wCmd;
+ DWORD cData;
+ HWND hwndui;
+ DWORD retvalue;
+ DWORD status;
+
+ // The following pointers provide offsets into the mapped file
+ // section used for inter process communication. They point to
+ // objects which have a variable length.
+ LPVOID lpDevice;
+ LPVOID lpDriverName;
+ LPVOID lpPortName;
+ LPVOID lpIn;
+ LPVOID lpOut;
+
+ // Since we have a max length (CCHDEVICENAME) we'll pass
+ // the printer/device name in this fixed length buffer.
+ WCHAR szDeviceName[CCHDEVICENAME+1];
+
+ UINT bmPixPerByte;
+ UINT bmWidthBytes;
+ UINT bmHeight;
+ LPBYTE lpbits;
+
+} WOWFAXINFO, FAR *LPWOWFAXINFO;
+
+#endif // _WOWFAX16_
+
+#define WOWFAX_CLASS TEXT("WOWFaxClass")
+
+VOID GetFaxDataMapName(DWORD idMap, LPTSTR lpT);
+
+//***************************************************************************
+// Common functions for wow32, wowfax and wowfaxui.
+//***************************************************************************
+
+#ifdef WOWFAX_INC_COMMON_CODE
+
+#define WOWFAX_MAPPREFIX TEXT("wfm")
+#define WOWFAX_HEXDIGITS TEXT("0123456789abcdef")
+
+//***************************************************************************
+// GetFaxDataMapName - given idMap, generates the sharedmem Map Name.
+// A process can access the relevant data by opening the file
+// identified by idMap
+//***************************************************************************
+
+VOID GetFaxDataMapName(DWORD idMap, LPTSTR lpT)
+{
+ int i;
+ int cb = lstrlen(WOWFAX_MAPPREFIX);
+ LPBYTE lpid = (LPBYTE)&idMap;
+ LPTSTR lphexT = WOWFAX_HEXDIGITS;
+
+ lstrcpy(lpT, WOWFAX_MAPPREFIX);
+ for (i = 0; i < sizeof(idMap) ; i++) {
+ lpT[(i * 2) + cb] = lphexT[lpid[i] & 0xf];
+ lpT[(i * 2) + cb + 1] = lphexT[(lpid[i] & 0xf0) >> 4];
+ }
+
+ lpT[(i * 2) + cb] = 0;
+}
+
+#endif // WOWFAX_INC_COMMON_CODE
+
+
diff --git a/private/mvdm/inc/wowgdi.h b/private/mvdm/inc/wowgdi.h
new file mode 100644
index 000000000..a81fa770b
--- /dev/null
+++ b/private/mvdm/inc/wowgdi.h
@@ -0,0 +1,1926 @@
+/*++ BUILD Version: 0001
+ *
+ * WOW v1.0
+ *
+ * Copyright (c) 1991, Microsoft Corporation
+ *
+ * WOWGDI.H
+ * 16-bit GDI API argument structures
+ *
+ * History:
+ * Created 02-Feb-1991 by Jeff Parsons (jeffpar)
+ * Added Win 31 19-March-1992 Chandan S. Chauhan (ChandanC)
+ *
+--*/
+
+
+/* GDI API IDs
+ */
+#define FUN_ADDFONTRESOURCE 119 //
+#define FUN_ANIMATEPALETTE 367 //
+#define FUN_ARC 23 //
+#define FUN_BITBLT 34 //
+#define FUN_BRUTE 213 // No proto
+#define FUN_CHORD 348 //
+#define FUN_CLOSEJOB 243 // No proto
+#define FUN_CLOSEMETAFILE 126 //
+#define FUN_COMBINERGN 47 //
+#define FUN_COMPATIBLEBITMAP 157 // Internal
+#define FUN_COPY 250 // Internal
+#define FUN_COPYMETAFILE 151 //
+#define FUN_CREATEBITMAP 48 //
+#define FUN_CREATEBITMAPINDIRECT 49 //
+#define FUN_CREATEBRUSHINDIRECT 50 //
+#define FUN_CREATECOMPATIBLEBITMAP 51 //
+#define FUN_CREATECOMPATIBLEDC 52 //
+#define FUN_CREATEDC 53 //
+#define FUN_CREATEDIBITMAP 442 //
+#define FUN_CREATEDIBPATTERNBRUSH 445 //
+#define FUN_CREATEDISCARDABLEBITMAP 156 //
+#define FUN_CREATEELLIPTICRGN 54 //
+#define FUN_CREATEELLIPTICRGNINDIRECT 55 //
+#define FUN_CREATEFONT 56 //
+#define FUN_CREATEFONTINDIRECT 57 //
+#define FUN_CREATEHATCHBRUSH 58 //
+#define FUN_CREATEIC 153 //
+#define FUN_CREATEMETAFILE 125 //
+#define FUN_CREATEPALETTE 360 //
+#define FUN_CREATEPATTERNBRUSH 60 //
+#define FUN_CREATEPEN 61 //
+#define FUN_CREATEPENINDIRECT 62 //
+#define FUN_CREATEPOLYGONRGN 63 //
+#define FUN_CREATEPOLYPOLYGONRGN 451 //
+#define FUN_CREATEPQ 230 // No proto
+#define FUN_CREATEREALBITMAP 408 // Internal
+#define FUN_CREATEREALBITMAPINDIRECT 406 // Internal
+#define FUN_CREATERECTRGN 64 //
+#define FUN_CREATERECTRGNINDIRECT 65 //
+#define FUN_CREATEROUNDRECTRGN 444 //
+#define FUN_CREATESOLIDBRUSH 66 //
+#define FUN_CREATEUSERBITMAP 407 // Internal
+#define FUN_CREATEUSERDISCARDABLEBITMAP 409 // Internal
+#define FUN_DEATH 121 // Internal
+#define FUN_DELETEABOVELINEFONTS 186 // Internal
+#define FUN_DELETEDC 68 //
+#define FUN_DELETEJOB 244 // No proto
+#define FUN_DELETEMETAFILE 127 //
+#define FUN_DELETEOBJECT 69 //
+#define FUN_DELETEPQ 235 // No proto
+#define FUN_DEVICECOLORMATCH 449 // Internal
+#define FUN_DEVICEMODE 452 //
+#define FUN_DMBITBLT 201 // No proto
+#define FUN_DMCOLORINFO 202 // No proto
+#define FUN_DMENUMDFONTS 206 // No proto
+#define FUN_DMENUMOBJ 207 // No proto
+#define FUN_DMOUTPUT 208 // No proto
+#define FUN_DMPIXEL 209 // No proto
+#define FUN_DMREALIZEOBJECT 210 // No proto
+#define FUN_DMSCANLR 212 // No proto
+#define FUN_DMSTRBLT 211 // No proto
+#define FUN_DMTRANSPOSE 220 // No proto
+#define FUN_DPTOLP 67 //
+#define FUN_DPXLATE 138 // Internal
+#define FUN_ELLIPSE 24 //
+#define FUN_ENDSPOOLPAGE 247 // No proto
+#define FUN_ENUMCALLBACK 158 // Internal
+#define FUN_ENUMFONTS 70 //
+#define FUN_ENUMMETAFILE 175 //
+#define FUN_ENUMOBJECTS 71 //
+#define FUN_EQUALRGN 72 //
+#define FUN_ESCAPE 38 //
+#define FUN_EXCLUDECLIPRECT 21 //
+#define FUN_EXCLUDEVISRECT 73 // Internal
+#define FUN_EXTDEVICEMODE 453 //
+#define FUN_DEVICECAPABILITIES 454
+//#define FUN_ADVANCEDSETUPDIALOG 455
+#define FUN_EXTFLOODFILL 372 // Internal, proto
+#define FUN_EXTRACTPQ 232 // No proto
+#define FUN_EXTTEXTOUT 351 //
+#define FUN_FASTWINDOWFRAME 400 // Internal
+#define FUN_FILLRGN 40 //
+#define FUN_FINALGDIINIT 405 // Internal
+#define FUN_FLOODFILL 25 //
+#define FUN_FRAMERGN 41 //
+#define FUN_GDIFLUSH 263 // New Private
+#define FUN_GDIINIT2 403 // Internal
+#define FUN_GDIMOVEBITMAP 401 // Internal
+#define FUN_GDIREALIZEPALETTE 362 // Internal
+#define FUN_GDISELECTPALETTE 361 // Internal
+#define FUN_GDI_WEP 0 // Export by name
+#define FUN_GETASPECTRATIOFILTER 353 //
+#define FUN_GETBITMAPBITS 74 //
+#define FUN_GETBITMAPDIMENSION 162 //
+#define FUN_GETBKCOLOR 75 //
+#define FUN_GETBKMODE 76 //
+#define FUN_GETBRUSHORG 149 //
+#define FUN_GETCHARWIDTH 350 //
+#define FUN_GETCLIPBOX 77 //
+#define FUN_GETCLIPRGN 173 // Internal
+#define FUN_GETCURLOGFONT 411 // Internal
+#define FUN_GETCURRENTOBJECT 261 // New Private
+#define FUN_GETCURRENTPOSITION 78 //
+#define FUN_GETDCORG 79 //
+#define FUN_GETDCSTATE 179 // Internal
+#define FUN_GETDEVICECAPS 80 //
+#define FUN_GETDIBITS 441 //
+#define FUN_GETENVIRONMENT 133 //
+#define FUN_GETMAPMODE 81 //
+#define FUN_GETMETAFILE 124 //
+#define FUN_GETMETAFILEBITS 159 //
+#define FUN_GETNEARESTCOLOR 154 //
+#define FUN_GETNEARESTPALETTEINDEX 370 //
+#define FUN_GETOBJECT 82 //
+#define FUN_GETOBJECTTYPE 260 // New Private
+#define FUN_GETPALETTEENTRIES 363 //
+#define FUN_GETPHYSICALFONTHANDLE 352 // Internal
+#define FUN_GETPIXEL 83 //
+#define FUN_GETPOLYFILLMODE 84 //
+#define FUN_GETREGIONDATA 262 // New Private
+#define FUN_GETRELABS 86 // Internal
+#define FUN_GETRGNBOX 134 //
+#define FUN_GETROP2 85 //
+#define FUN_GETSPOOLJOB 245 // No proto
+#define FUN_GETSTOCKOBJECT 87 //
+#define FUN_GETSTRETCHBLTMODE 88 //
+#define FUN_GETSYSTEMPALETTEENTRIES 375 //
+#define FUN_GETSYSTEMPALETTEUSE 374 //
+#define FUN_GETTEXTALIGN 345 //
+#define FUN_GETTEXTCHARACTEREXTRA 89 //
+#define FUN_GETTEXTCOLOR 90 //
+#define FUN_GETTEXTEXTENT 91 //
+#define FUN_GETTEXTFACE 92 //
+#define FUN_GETTEXTMETRICS 93 //
+#define FUN_GETVIEWPORTEXT 94 //
+#define FUN_GETVIEWPORTORG 95 //
+#define FUN_GETWINDOWEXT 96 //
+#define FUN_GETWINDOWORG 97 //
+#define FUN_GSV 137 // Internal
+#define FUN_INQUIREVISRGN 131 // Internal
+#define FUN_INSERTPQ 233 // No proto
+#define FUN_INTERNALCREATEDC 118 // Internal
+#define FUN_INTERSECTCLIPRECT 22 //
+#define FUN_INTERSECTVISRECT 98 // Internal
+#define FUN_INVERTRGN 42 //
+#define FUN_ISDCCURRENTPALETTE 412 // Internal
+#define FUN_ISDCDIRTY 169 // Internal
+#define FUN_ISVALIDMETAFILE 410 // Internal
+#define FUN_LINEDDA 100 //
+#define FUN_LINETO 19 //
+#define FUN_LPTODP 99 //
+#define FUN_LVBUNION 171 // Internal
+#define FUN_MFDRAWTEXT 347 // Internal
+#define FUN_MINPQ 231 // No proto
+#define FUN_MOVETO 20 //
+#define FUN_MULDIV 128 //
+#define FUN_OFFSETCLIPRGN 32 //
+#define FUN_OFFSETORG 143 // Internal
+#define FUN_OFFSETRGN 101 //
+#define FUN_OFFSETVIEWPORTORG 17 //
+#define FUN_OFFSETVISRGN 102 // Internal
+#define FUN_OFFSETWINDOWORG 15 //
+#define FUN_OPENJOB 240 // No proto
+#define FUN_PAINTRGN 43 //
+#define FUN_PATBLT 29 //
+#define FUN_PIE 26 //
+#define FUN_PIXTOLINE 164 // Internal
+#define FUN_PLAYMETAFILE 123 //
+#define FUN_PLAYMETAFILERECORD 176 //
+#define FUN_POLYGON 36 //
+#define FUN_POLYLINE 37 //
+#define FUN_POLYPOLYGON 450 //
+#define FUN_POLYPOLYLINEWOW 490 //
+#define FUN_PTINREGION 161 //
+#define FUN_PTVISIBLE 103 //
+#define FUN_QUERYABORT 155 // Internal
+#define FUN_QUERYJOB 248 // Internal
+#define FUN_RCOS 177 // Internal
+#define FUN_REALIZEDEFAULTPALETTE 365 // Internal
+#define FUN_RECTANGLE 27 //
+#define FUN_RECTINREGION 181 //
+#define FUN_RECTSTUFF 142 // Internal
+#define FUN_RECTVISIBLE 104 //
+#define FUN_REMOVEFONTRESOURCE 136 //
+#define FUN_RESIZEPALETTE 368 //
+#define FUN_RESTOREDC 39 //
+#define FUN_RESTOREVISRGN 130 // Internal
+#define FUN_RESURRECTION 122 // Internal
+#define FUN_ROUNDRECT 28 //
+#define FUN_RSIN 178 // Internal
+#define FUN_SAVEDC 30 //
+#define FUN_SAVEVISRGN 129 // Internal
+#define FUN_SCALEEXT 140 // Internal
+#define FUN_SCALEVIEWPORTEXT 18 //
+#define FUN_SCALEWINDOWEXT 16 //
+#define FUN_SCANLR 135 // Internal
+#define FUN_SELECTCLIPRGN 44 //
+#define FUN_SELECTOBJECT 45 //
+#define FUN_SELECTVISRGN 105 // Internal
+#define FUN_SETBITMAPBITS 106 //
+#define FUN_SETBITMAPDIMENSION 163 //
+#define FUN_SETBKCOLOR 1 //
+#define FUN_SETBKMODE 2 //
+#define FUN_SETBRUSHORG 148 //
+#define FUN_SETDCORG 117 // Internal
+#define FUN_SETDCSTATE 180 // Internal
+#define FUN_SETDCSTATUS 170 // Internal
+#define FUN_SETDIBITS 440 //
+#define FUN_SETDIBITSTODEVICE 443 //
+#define FUN_SETENVIRONMENT 132 //
+#define FUN_SETMAPMODE 3 //
+#define FUN_SETMAPPERFLAGS 349 //
+#define FUN_SETMETAFILEBITS 160 //
+#define FUN_SETPALETTEENTRIES 364 //
+#define FUN_SETPIXEL 31 //
+#define FUN_SETPOLYFILLMODE 6 //
+#define FUN_SETRECTRGN 172 //
+#define FUN_SETRELABS 5 // Internal
+#define FUN_SETROP2 4 //
+#define FUN_SETSTRETCHBLTMODE 7 //
+#define FUN_SETSYSTEMPALETTEUSE 373 //
+#define FUN_SETTEXTALIGN 346 //
+#define FUN_SETTEXTCHARACTEREXTRA 8 //
+#define FUN_SETTEXTCOLOR 9 //
+#define FUN_SETTEXTJUSTIFICATION 10 //
+#define FUN_SETVIEWPORTEXT 14 //
+#define FUN_SETVIEWPORTORG 13 //
+#define FUN_SETWINDOWEXT 12 //
+#define FUN_SETWINDOWORG 11 //
+#define FUN_SETWINVIEWEXT 139 // Internal
+#define FUN_SHRINKGDIHEAP 354 // Internal
+#define FUN_SIZEPQ 234 // No proto
+#define FUN_STARTSPOOLPAGE 246 // No proto
+#define FUN_STRETCHBLT 35 //
+#define FUN_STRETCHDIBITS 439 //
+#define FUN_STUFFINREGION 185 // Internal
+#define FUN_STUFFVISIBLE 184 // Internal
+#define FUN_TEXTOUT 33 //
+#define FUN_UNREALIZEOBJECT 150 //
+#define FUN_UPDATECOLORS 366 //
+#define FUN_WORDSET 141 // Internal
+#define FUN_WRITEDIALOG 242 // No proto
+#define FUN_WRITESPOOL 241 // No proto
+#define FUN_ABORTDOC 382
+#define FUN_CREATESCALABLEFONTRESOURCE 310
+#define FUN_ENDDOC 378
+#define FUN_ENDPAGE 380
+#define FUN_ENUMFONTFAMILIES 330
+#define FUN_GETASPECTRATIOFILTEREX 486
+#define FUN_GETBITMAPDIMENSIONEX 468
+#define FUN_GETBOUNDSRECT 194
+#define FUN_GETBRUSHORGEX 469
+#define FUN_GETCHARABCWIDTHS 307
+#define FUN_GETCURRENTPOSITIONEX 470
+#define FUN_GETFONTDATA 311
+#define FUN_GETGLYPHOUTLINE 309
+#define FUN_GETOUTLINETEXTMETRICS 308
+#define FUN_GETRASTERIZERCAPS 313
+#define FUN_GETEXTEXTENTEX 188
+#define FUN_GETEXTEXTENTPOINT 471
+#define FUN_GETVIEWPORTEXTEX 472
+#define FUN_GETVIEWPORTORGEX 473
+#define FUN_GETWINDOWEXTEX 474
+#define FUN_GETWINDOWORGEX 475
+#define FUN_ISGDIOBJECT 462
+#define FUN_MOVETOEX 483
+#define FUN_OFFSETVIEWPORTORGEX 476
+#define FUN_OFFSETWINDOWORGEX 477
+#define FUN_QUERYABORT 155
+#define FUN_RESETDC 376
+#define FUN_SCALEVIEWPORTEXTEX 484
+#define FUN_SCALEWINDOWEXTEX 485
+#define FUN_SETABORTPROC 381
+#define FUN_SETBITMAPDIMENSIONEX 478
+#define FUN_SETBOUNDSRECT 193
+#define FUN_SETMETAFILEBITSBETTER 196
+#define FUN_SETVIEWPORTEXTEX 479
+#define FUN_SETVIEWPORTORGEX 480
+#define FUN_SETWINDOWEXTEX 481
+#define FUN_SETWINDOWORGEX 482
+#define FUN_SPOOLFILE 254
+#define FUN_STARTDOC 377
+#define FUN_STARTPAGE 379
+#define FUN_BITMAPBITS 46
+#define FUN_SETDCHOOK 190
+#define FUN_GETDCHOOK 191
+#define FUN_SETHOOKFLAGS 192
+#define FUN_SELECTBITMAP 195
+#define FUN_DMEXTTEXTOUT 214
+#define FUN_DMGETCHARWIDTH 215
+#define FUN_DMSTRETCHBLT 216
+#define FUN_DMDIBBITS 217
+#define FUN_DMSTRETCHDIBITS 218
+#define FUN_DMSETDIBTODEV 219
+#define FUN_DELETESPOOLPAGE 253
+#define FUN_ENGINEENUMERATEFONT 300 ;Internal
+#define FUN_ENGINEDELETEFONT 301
+#define FUN_ENGINEREALIZEFONT 302
+#define FUN_ENGINEGETCHARWIDTH 303
+#define FUN_ENGINESETFONTCONTEXT 304
+#define FUN_ENGINEGETGLYPHBMP 305
+#define FUN_ENGINEMAKEFONTDIR 306
+#define FUN_ENGINEEXTTEXTOUT 314 ;internal
+#define FUN_GETKERNINGPAIRS 332
+#define FUN_FTRAPPING0 355 ;Internal
+#define FUN_GDISEEGDIDO 452
+#define FUN_GDITASKTERMINATION 460
+#define FUN_SETOBJECTOWNER 461
+#define FUN_MAKEOBJECTPRIVATE 463
+#define FUN_FIXUPBOGUSPUBLISHERMETAFILE 464
+#define FUN_RECTVISIBLE_EHH 465
+#define FUN_RECTINREGION_EHH 466
+#define FUN_UNICODETOANSI 467 ;Internal
+#define FUN_CONVERTOUTLINEFONTFILE 312
+#define FUN_GETTEXTEXTENTPOINT 471
+#define FUN_CREATEDIBSECTION 489
+
+// the chicago ordinals for Get/SetDIBColorTable are 603,602 respectively. I use 487
+// and 488, which are other wise unused, to keep the table from expanding by over
+// 100 entries. erick 5/10/94
+
+#define FUN_GETDIBCOLORTABLE 487
+#define FUN_SETDIBCOLORTABLE 488
+
+
+/* XLATOFF */
+#pragma pack(2)
+/* XLATON */
+
+typedef struct _ADDFONTRESOURCE16 { /* g119 */
+ VPSZ f1;
+} ADDFONTRESOURCE16;
+typedef ADDFONTRESOURCE16 UNALIGNED *PADDFONTRESOURCE16;
+
+typedef struct _ANIMATEPALETTE16 { /* g367 */
+ VPPALETTEENTRY16 f4;
+ WORD f3;
+ WORD f2;
+ HPAL16 f1;
+} ANIMATEPALETTE16;
+typedef ANIMATEPALETTE16 UNALIGNED *PANIMATEPALETTE16;
+
+typedef struct _ARC16 { /* g23 */
+ SHORT f9;
+ SHORT f8;
+ SHORT f7;
+ SHORT f6;
+ SHORT f5;
+ SHORT f4;
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} ARC16;
+typedef ARC16 UNALIGNED *PARC16;
+
+typedef struct _BITBLT16 { /* g34 */
+ DWORD f9;
+ SHORT f8;
+ SHORT f7;
+ HDC16 f6;
+ SHORT f5;
+ SHORT f4;
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} BITBLT16;
+typedef BITBLT16 UNALIGNED *PBITBLT16;
+
+typedef struct _CHORD16 { /* g348 */
+ SHORT f9;
+ SHORT f8;
+ SHORT f7;
+ SHORT f6;
+ SHORT f5;
+ SHORT f4;
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} CHORD16;
+typedef CHORD16 UNALIGNED *PCHORD16;
+
+typedef struct _SETRELABS16 { /* g5 */
+ SHORT f2;
+ HDC16 f1;
+} SETRELABS16;
+typedef SETRELABS16 UNALIGNED *PSETRELABS16;
+
+typedef struct _GETRELABS16 { /* g86 */
+ HDC16 f1;
+} GETRELABS16;
+typedef GETRELABS16 UNALIGNED *PGETRELABS16;
+
+typedef struct _CLOSEMETAFILE16 { /* g126 */
+ HAND16 f1;
+} CLOSEMETAFILE16;
+typedef CLOSEMETAFILE16 UNALIGNED *PCLOSEMETAFILE16;
+
+typedef struct _COMBINERGN16 { /* g47 */
+ SHORT f4;
+ HRGN16 f3;
+ HRGN16 f2;
+ HRGN16 f1;
+} COMBINERGN16;
+typedef COMBINERGN16 UNALIGNED *PCOMBINERGN16;
+
+typedef struct _COPYMETAFILE16 { /* g151 */
+ VPSZ f2;
+ HAND16 f1;
+} COPYMETAFILE16;
+typedef COPYMETAFILE16 UNALIGNED *PCOPYMETAFILE16;
+
+typedef struct _CREATEBITMAP16 { /* g48 */
+ VPBYTE f5;
+ WORD f4;
+ WORD f3;
+ SHORT f2;
+ SHORT f1;
+} CREATEBITMAP16;
+typedef CREATEBITMAP16 UNALIGNED *PCREATEBITMAP16;
+
+typedef struct _CREATEUSERBITMAP16 { /* g407 */
+ VPBYTE f5;
+ WORD f4;
+ WORD f3;
+ SHORT f2;
+ SHORT f1;
+} CREATEUSERBITMAP16, *PCREATEUSERBITMAP16;
+
+typedef struct _CREATEBITMAPINDIRECT16 { /* g49 */
+ VPBITMAP16 f1;
+} CREATEBITMAPINDIRECT16;
+typedef CREATEBITMAPINDIRECT16 UNALIGNED *PCREATEBITMAPINDIRECT16;
+
+typedef struct _CREATEBRUSHINDIRECT16 { /* g50 */
+ VPLOGBRUSH16 f1;
+} CREATEBRUSHINDIRECT16;
+typedef CREATEBRUSHINDIRECT16 UNALIGNED *PCREATEBRUSHINDIRECT16;
+
+typedef struct _CREATECOMPATIBLEBITMAP16 { /* g51 */
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} CREATECOMPATIBLEBITMAP16;
+typedef CREATECOMPATIBLEBITMAP16 UNALIGNED *PCREATECOMPATIBLEBITMAP16;
+
+typedef struct _CREATECOMPATIBLEDC16 { /* g52 */
+ HDC16 f1;
+} CREATECOMPATIBLEDC16;
+typedef CREATECOMPATIBLEDC16 UNALIGNED *PCREATECOMPATIBLEDC16;
+
+typedef struct _CREATEDC16 { /* g53 */
+ VPDEVMODE31 f4;
+ VPSZ f3;
+ VPSZ f2;
+ VPSZ f1;
+} CREATEDC16;
+typedef CREATEDC16 UNALIGNED *PCREATEDC16;
+
+typedef struct _CREATEDIBITMAP16 { /* g442 */
+ WORD f6;
+ VPBITMAPINFO16 f5;
+ VPBYTE f4;
+ DWORD f3;
+ VPBITMAPINFOHEADER16 f2;
+ HDC16 f1;
+} CREATEDIBITMAP16;
+typedef CREATEDIBITMAP16 UNALIGNED *PCREATEDIBITMAP16;
+
+typedef struct _CREATEDIBSECTION16 { /* g489 */
+ DWORD f6;
+ DWORD f5;
+ VPBYTE f4;
+ WORD f3;
+ VPBITMAPINFO16 f2;
+ HDC16 f1;
+} CREATEDIBSECTION16;
+typedef CREATEDIBSECTION16 UNALIGNED *PCREATEDIBSECTION16;
+
+typedef struct _GETDIBCOLORTABLE16 { /* g603 */
+ VPBYTE f4;
+ WORD f3;
+ WORD f2;
+ HDC16 f1;
+} GETDIBCOLORTABLE16;
+typedef GETDIBCOLORTABLE16 UNALIGNED *PGETDIBCOLORTABLE16;
+
+typedef struct _SETDIBCOLORTABLE16 { /* g602 */
+ VPBYTE f4;
+ WORD f3;
+ WORD f2;
+ HDC16 f1;
+} SETDIBCOLORTABLE16;
+typedef SETDIBCOLORTABLE16 UNALIGNED *PSETDIBCOLORTABLE16;
+
+typedef struct _CREATEDIBPATTERNBRUSH16 { /* g445 */
+ WORD f2;
+ VPVOID f1;
+} CREATEDIBPATTERNBRUSH16;
+typedef CREATEDIBPATTERNBRUSH16 UNALIGNED *PCREATEDIBPATTERNBRUSH16;
+
+typedef struct _CREATEDISCARDABLEBITMAP16 { /* g156 */
+ SHORT height;
+ SHORT width;
+ HDC16 hdc;
+} CREATEDISCARDABLEBITMAP16;
+typedef CREATEDISCARDABLEBITMAP16 UNALIGNED *PCREATEDISCARDABLEBITMAP16;
+
+typedef struct _CREATEELLIPTICRGN16 { /* g54 */
+ SHORT f4;
+ SHORT f3;
+ SHORT f2;
+ SHORT f1;
+} CREATEELLIPTICRGN16;
+typedef CREATEELLIPTICRGN16 UNALIGNED *PCREATEELLIPTICRGN16;
+
+typedef struct _CREATEELLIPTICRGNINDIRECT16 { /* g55 */
+ VPRECT16 f1;
+} CREATEELLIPTICRGNINDIRECT16;
+typedef CREATEELLIPTICRGNINDIRECT16 UNALIGNED *PCREATEELLIPTICRGNINDIRECT16;
+
+typedef struct _CREATEFONT16 { /* g56 */
+ VPSZ f14;
+ WORD f13;
+ WORD f12;
+ WORD f11;
+ WORD f10;
+ WORD f9;
+ WORD f8;
+ WORD f7;
+ WORD f6;
+ SHORT f5;
+ SHORT f4;
+ SHORT f3;
+ SHORT f2;
+ SHORT f1;
+} CREATEFONT16;
+typedef CREATEFONT16 UNALIGNED *PCREATEFONT16;
+
+typedef struct _CREATEFONTINDIRECT16 { /* g57 */
+ VPLOGFONT16 f1;
+} CREATEFONTINDIRECT16;
+typedef CREATEFONTINDIRECT16 UNALIGNED *PCREATEFONTINDIRECT16;
+
+typedef struct _CREATEHATCHBRUSH16 { /* g58 */
+ DWORD f2;
+ SHORT f1;
+} CREATEHATCHBRUSH16;
+typedef CREATEHATCHBRUSH16 UNALIGNED *PCREATEHATCHBRUSH16;
+
+typedef struct _CREATEIC16 { /* g153 */
+ VPDEVMODE31 f4;
+ VPSZ f3;
+ VPSZ f2;
+ VPSZ f1;
+} CREATEIC16;
+typedef CREATEIC16 UNALIGNED *PCREATEIC16;
+
+typedef struct _CREATEMETAFILE16 { /* g125 */
+ VPSZ f1;
+} CREATEMETAFILE16;
+typedef CREATEMETAFILE16 UNALIGNED *PCREATEMETAFILE16;
+
+typedef struct _CREATEPALETTE16 { /* g360 */
+ VPLOGPALETTE16 f1;
+} CREATEPALETTE16;
+typedef CREATEPALETTE16 UNALIGNED *PCREATEPALETTE16;
+
+typedef struct _CREATEPATTERNBRUSH16 { /* g60 */
+ HBM16 f1;
+} CREATEPATTERNBRUSH16;
+typedef CREATEPATTERNBRUSH16 UNALIGNED *PCREATEPATTERNBRUSH16;
+
+typedef struct _CREATEPEN16 { /* g61 */
+ DWORD f3;
+ SHORT f2;
+ SHORT f1;
+} CREATEPEN16;
+typedef CREATEPEN16 UNALIGNED *PCREATEPEN16;
+
+typedef struct _CREATEPENINDIRECT16 { /* g62 */
+ VPLOGPEN16 f1;
+} CREATEPENINDIRECT16;
+typedef CREATEPENINDIRECT16 UNALIGNED *PCREATEPENINDIRECT16;
+
+typedef struct _CREATEPOLYGONRGN16 { /* g63 */
+ SHORT f3;
+ SHORT f2;
+ VPPOINT16 f1;
+} CREATEPOLYGONRGN16;
+typedef CREATEPOLYGONRGN16 UNALIGNED *PCREATEPOLYGONRGN16;
+
+typedef struct _CREATEPOLYPOLYGONRGN16 { /* g451 */
+ SHORT f4;
+ SHORT f3;
+ VPSHORT f2;
+ VPPOINT16 f1;
+} CREATEPOLYPOLYGONRGN16;
+typedef CREATEPOLYPOLYGONRGN16 UNALIGNED *PCREATEPOLYPOLYGONRGN16;
+
+typedef struct _CREATERECTRGN16 { /* g64 */
+ SHORT f4;
+ SHORT f3;
+ SHORT f2;
+ SHORT f1;
+} CREATERECTRGN16;
+typedef CREATERECTRGN16 UNALIGNED *PCREATERECTRGN16;
+
+typedef struct _CREATERECTRGNINDIRECT16 { /* g65 */
+ VPRECT16 f1;
+} CREATERECTRGNINDIRECT16;
+typedef CREATERECTRGNINDIRECT16 UNALIGNED *PCREATERECTRGNINDIRECT16;
+
+typedef struct _CREATEROUNDRECTRGN16 { /* g444 */
+ SHORT f6;
+ SHORT f5;
+ SHORT f4;
+ SHORT f3;
+ SHORT f2;
+ SHORT f1;
+} CREATEROUNDRECTRGN16;
+typedef CREATEROUNDRECTRGN16 UNALIGNED *PCREATEROUNDRECTRGN16;
+
+typedef struct _CREATESOLIDBRUSH16 { /* g66 */
+ DWORD f1;
+} CREATESOLIDBRUSH16;
+typedef CREATESOLIDBRUSH16 UNALIGNED *PCREATESOLIDBRUSH16;
+
+typedef struct _DELETEDC16 { /* g68 */
+ HDC16 f1;
+} DELETEDC16;
+typedef DELETEDC16 UNALIGNED *PDELETEDC16;
+
+typedef struct _DELETEMETAFILE16 { /* g127 */
+ HAND16 f1;
+} DELETEMETAFILE16;
+typedef DELETEMETAFILE16 UNALIGNED *PDELETEMETAFILE16;
+
+typedef struct _DELETEOBJECT16 { /* g69 */
+ HAND16 f1;
+} DELETEOBJECT16;
+typedef DELETEOBJECT16 UNALIGNED *PDELETEOBJECT16;
+
+typedef struct _DEVICEMODE16 { /* g452 */
+ VPSZ f4;
+ VPSZ f3;
+ HAND16 f2;
+ HWND16 f1;
+} DEVICEMODE16;
+typedef DEVICEMODE16 UNALIGNED *PDEVICEMODE16;
+
+typedef struct _EXTDEVICEMODE16 { /* g453 */
+ SHORT f8;
+ VPSZ f7;
+ VPDEVMODE31 f6;
+ VPSZ f5;
+ VPSZ f4;
+ VPDEVMODE31 f3;
+ HAND16 f2;
+ HWND16 f1;
+} EXTDEVICEMODE16;
+typedef EXTDEVICEMODE16 UNALIGNED *PEXTDEVICEMODE16;
+
+typedef struct _DEVICECAPABILITIES16 { /* g454 */
+ VPDEVMODE31 f5;
+ VPSZ f4;
+ SHORT f3;
+ VPSZ f2;
+ VPSZ f1;
+} DEVICECAPABILITIES16;
+typedef DEVICECAPABILITIES16 UNALIGNED *PDEVICECAPABILITIES16;
+
+//typedef struct _ADVANCEDSETUPDIALOG16 { /* g455 */
+// VPSZ f4;
+// VPSZ f3;
+// HAND16 f2;
+// HWND16 f1;
+//} ADVANCEDSETUPDIALOG16;
+//typedef ADVANCEDSETUPDIALOG16 UNALIGNED *PADVANCEDSETUPDIALOG16;
+
+typedef struct _DPTOLP16 { /* g67 */
+ SHORT f3;
+ VPPOINT16 f2;
+ HDC16 f1;
+} DPTOLP16;
+typedef DPTOLP16 UNALIGNED *PDPTOLP16;
+
+typedef struct _ELLIPSE16 { /* g24 */
+ SHORT y2;
+ SHORT x2;
+ SHORT y1;
+ SHORT x1;
+ HDC16 hdc;
+} ELLIPSE16;
+typedef ELLIPSE16 UNALIGNED *PELLIPSE16;
+
+typedef struct _ENUMFONTS16 { /* g70 */
+ VPBYTE f4;
+ VPPROC f3;
+ VPSZ f2;
+ HDC16 f1;
+} ENUMFONTS16;
+typedef ENUMFONTS16 UNALIGNED *PENUMFONTS16;
+
+typedef struct _ENUMMETAFILE16 { /* g175 */
+ VPBYTE f4;
+ VPPROC f3;
+ HAND16 f2;
+ HDC16 f1;
+} ENUMMETAFILE16;
+typedef ENUMMETAFILE16 UNALIGNED *PENUMMETAFILE16;
+
+typedef struct _ENUMOBJECTS16 { /* g71 */
+ VPBYTE f4;
+ VPPROC f3;
+ SHORT f2;
+ HDC16 f1;
+} ENUMOBJECTS16;
+typedef ENUMOBJECTS16 UNALIGNED *PENUMOBJECTS16;
+
+typedef struct _EQUALRGN16 { /* g72 */
+ HRGN16 f2;
+ HRGN16 f1;
+} EQUALRGN16;
+typedef EQUALRGN16 UNALIGNED *PEQUALRGN16;
+
+typedef struct _ESCAPE16 { /* g38 */
+ VPSTR f5;
+ VPSTR f4;
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} ESCAPE16;
+typedef ESCAPE16 UNALIGNED *PESCAPE16;
+
+typedef struct _EXCLUDECLIPRECT16 { /* g21 */
+ SHORT f5;
+ SHORT f4;
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} EXCLUDECLIPRECT16;
+typedef EXCLUDECLIPRECT16 UNALIGNED *PEXCLUDECLIPRECT16;
+
+typedef struct _EXTFLOODFILL16 { /* g372 */
+ WORD f5;
+ DWORD f4;
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} EXTFLOODFILL16;
+typedef EXTFLOODFILL16 UNALIGNED *PEXTFLOODFILL16;
+
+typedef struct _EXTTEXTOUT16 { /* g351 */
+ VPSHORT f8;
+ WORD f7;
+ VPSTR f6;
+ VPRECT16 f5;
+ WORD f4;
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} EXTTEXTOUT16;
+typedef EXTTEXTOUT16 UNALIGNED *PEXTTEXTOUT16;
+
+typedef struct _FILLRGN16 { /* g40 */
+ HBRSH16 f3;
+ HRGN16 f2;
+ HDC16 f1;
+} FILLRGN16;
+typedef FILLRGN16 UNALIGNED *PFILLRGN16;
+
+typedef struct _FLOODFILL16 { /* g25 */
+ DWORD f4;
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} FLOODFILL16;
+typedef FLOODFILL16 UNALIGNED *PFLOODFILL16;
+
+typedef struct _FRAMERGN16 { /* g41 */
+ SHORT f5;
+ SHORT f4;
+ HBRSH16 f3;
+ HRGN16 f2;
+ HDC16 f1;
+} FRAMERGN16;
+typedef FRAMERGN16 UNALIGNED *PFRAMERGN16;
+
+typedef struct _GETASPECTRATIOFILTER16 { /* g353 */
+ HDC16 f1;
+} GETASPECTRATIOFILTER16;
+typedef GETASPECTRATIOFILTER16 UNALIGNED *PGETASPECTRATIOFILTER16;
+
+typedef struct _GETASPECTRATIOFILTEREX16 { /* g486 */
+ VPVOID f2;
+ HDC16 f1;
+} GETASPECTRATIOFILTEREX16;
+typedef GETASPECTRATIOFILTEREX16 UNALIGNED *PGETASPECTRATIOFILTEREX16;
+
+typedef struct _GETBITMAPBITS16 { /* g74 */
+ VPSTR f3;
+ LONG f2;
+ HBM16 f1;
+} GETBITMAPBITS16;
+typedef GETBITMAPBITS16 UNALIGNED *PGETBITMAPBITS16;
+
+typedef struct _GETBITMAPDIMENSION16 { /* g162 */
+ HBM16 f1;
+} GETBITMAPDIMENSION16;
+typedef GETBITMAPDIMENSION16 UNALIGNED *PGETBITMAPDIMENSION16;
+
+typedef struct _GETBKCOLOR16 { /* g75 */
+ HDC16 f1;
+} GETBKCOLOR16;
+typedef GETBKCOLOR16 UNALIGNED *PGETBKCOLOR16;
+
+typedef struct _GETBKMODE16 { /* g76 */
+ HDC16 f1;
+} GETBKMODE16;
+typedef GETBKMODE16 UNALIGNED *PGETBKMODE16;
+
+typedef struct _GETBRUSHORG16 { /* g149 */
+ HDC16 f1;
+} GETBRUSHORG16;
+typedef GETBRUSHORG16 UNALIGNED *PGETBRUSHORG16;
+
+typedef struct _GETCHARWIDTH16 { /* g350 */
+ VPSHORT lpIntBuffer;
+ WORD wLastChar;
+ WORD wFirstChar;
+ HDC16 hDC;
+} GETCHARWIDTH16;
+typedef GETCHARWIDTH16 UNALIGNED *PGETCHARWIDTH16;
+
+typedef struct _GETCLIPBOX16 { /* g77 */
+ VPRECT16 f2;
+ HDC16 f1;
+} GETCLIPBOX16;
+typedef GETCLIPBOX16 UNALIGNED *PGETCLIPBOX16;
+
+typedef struct _GETCURRENTOBJECT16 { /* g261 */
+ WORD f2;
+ HDC16 f1;
+} GETCURRENTOBJECT16;
+typedef GETCURRENTOBJECT16 UNALIGNED *PGETCURRENTOBJECT16;
+
+typedef struct _GETCURRENTPOSITION16 { /* g78 */
+ HDC16 f1;
+} GETCURRENTPOSITION16;
+typedef GETCURRENTPOSITION16 UNALIGNED *PGETCURRENTPOSITION16;
+
+typedef struct _GETDCORG16 { /* g79 */
+ HDC16 f1;
+} GETDCORG16;
+typedef GETDCORG16 UNALIGNED *PGETDCORG16;
+
+typedef struct _GETDEVICECAPS16 { /* g80 */
+ SHORT f2;
+ HDC16 f1;
+} GETDEVICECAPS16;
+typedef GETDEVICECAPS16 UNALIGNED *PGETDEVICECAPS16;
+
+typedef struct _GETDIBITS16 { /* g441 */
+ WORD f7;
+ VPBITMAPINFO16 f6;
+ VPSTR f5;
+ WORD f4;
+ WORD f3;
+ HAND16 f2;
+ HDC16 f1;
+} GETDIBITS16;
+typedef GETDIBITS16 UNALIGNED *PGETDIBITS16;
+
+typedef struct _GETENVIRONMENT16 { /* g133 */
+ WORD f3;
+ VPSTR f2;
+ VPSTR f1;
+} GETENVIRONMENT16;
+typedef GETENVIRONMENT16 UNALIGNED *PGETENVIRONMENT16;
+
+typedef struct _GETKERNINGPAIRS16 { /* g332 */
+ VPSTR f3;
+ WORD f2;
+ WORD f1;
+} GETKERNINGPAIRS16;
+typedef GETKERNINGPAIRS16 UNALIGNED *PGETKERNINGPAIRS16;
+
+
+typedef struct _GETMAPMODE16 { /* g81 */
+ HDC16 f1;
+} GETMAPMODE16;
+typedef GETMAPMODE16 UNALIGNED *PGETMAPMODE16;
+
+typedef struct _GETMETAFILE16 { /* g124 */
+ VPSTR f1;
+} GETMETAFILE16;
+typedef GETMETAFILE16 UNALIGNED *PGETMETAFILE16;
+
+typedef struct _GETMETAFILEBITS16 { /* g159 */
+ HAND16 f1;
+} GETMETAFILEBITS16;
+typedef GETMETAFILEBITS16 UNALIGNED *PGETMETAFILEBITS16;
+
+typedef struct _GETNEARESTCOLOR16 { /* g154 */
+ DWORD f2;
+ HDC16 f1;
+} GETNEARESTCOLOR16;
+typedef GETNEARESTCOLOR16 UNALIGNED *PGETNEARESTCOLOR16;
+
+typedef struct _GETNEARESTPALETTEINDEX16 { /* g370 */
+ DWORD f2;
+ HPAL16 f1;
+} GETNEARESTPALETTEINDEX16;
+typedef GETNEARESTPALETTEINDEX16 UNALIGNED *PGETNEARESTPALETTEINDEX16;
+
+typedef struct _GETOBJECT16 { /* g82 */
+ VPSTR f3;
+ SHORT f2;
+ HAND16 f1;
+} GETOBJECT16;
+typedef GETOBJECT16 UNALIGNED *PGETOBJECT16;
+
+typedef struct _GETOBJECTTYPE16 { /* g260 */
+ HDC16 f1;
+} GETOBJECTTYPE16;
+typedef GETOBJECTTYPE16 UNALIGNED *PGETOBJECTTYPE16;
+
+typedef struct _GETPALETTEENTRIES16 { /* g363 */
+ VPPALETTEENTRY16 f4;
+ WORD f3;
+ WORD f2;
+ HPAL16 f1;
+} GETPALETTEENTRIES16;
+typedef GETPALETTEENTRIES16 UNALIGNED *PGETPALETTEENTRIES16;
+
+typedef struct _GETPIXEL16 { /* g83 */
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} GETPIXEL16;
+typedef GETPIXEL16 UNALIGNED *PGETPIXEL16;
+
+typedef struct _GETPOLYFILLMODE16 { /* g84 */
+ HDC16 f1;
+} GETPOLYFILLMODE16;
+typedef GETPOLYFILLMODE16 UNALIGNED *PGETPOLYFILLMODE16;
+
+typedef struct _GETREGIONDATA16 { /* g262 */
+ VPSTR f3;
+ DWORD f2;
+ HRGN16 f1;
+} GETREGIONDATA16;
+typedef GETREGIONDATA16 UNALIGNED *PGETREGIONDATA16;
+
+typedef struct _GETRGNBOX16 { /* g134 */
+ VPRECT16 f2;
+ HRGN16 f1;
+} GETRGNBOX16;
+typedef GETRGNBOX16 UNALIGNED *PGETRGNBOX16;
+
+typedef struct _GETROP216 { /* g85 */
+ HDC16 f1;
+} GETROP216;
+typedef GETROP216 UNALIGNED *PGETROP216;
+
+typedef struct _GETSTOCKOBJECT16 { /* g87 */
+ SHORT f1;
+} GETSTOCKOBJECT16;
+typedef GETSTOCKOBJECT16 UNALIGNED *PGETSTOCKOBJECT16;
+
+typedef struct _GETSTRETCHBLTMODE16 { /* g88 */
+ HDC16 f1;
+} GETSTRETCHBLTMODE16;
+typedef GETSTRETCHBLTMODE16 UNALIGNED *PGETSTRETCHBLTMODE16;
+
+typedef struct _GETSYSTEMPALETTEENTRIES16 { /* g375 */
+ VPPALETTEENTRY16 f4;
+ WORD f3;
+ WORD f2;
+ HDC16 f1;
+} GETSYSTEMPALETTEENTRIES16;
+typedef GETSYSTEMPALETTEENTRIES16 UNALIGNED *PGETSYSTEMPALETTEENTRIES16;
+
+typedef struct _GETSYSTEMPALETTEUSE16 { /* g374 */
+ HDC16 f1;
+} GETSYSTEMPALETTEUSE16;
+typedef GETSYSTEMPALETTEUSE16 UNALIGNED *PGETSYSTEMPALETTEUSE16;
+
+typedef struct _GETTEXTALIGN16 { /* g345 */
+ HDC16 f1;
+} GETTEXTALIGN16;
+typedef GETTEXTALIGN16 UNALIGNED *PGETTEXTALIGN16;
+
+typedef struct _GETTEXTCHARACTEREXTRA16 { /* g89 */
+ HDC16 f1;
+} GETTEXTCHARACTEREXTRA16;
+typedef GETTEXTCHARACTEREXTRA16 UNALIGNED *PGETTEXTCHARACTEREXTRA16;
+
+typedef struct _GETTEXTCOLOR16 { /* g90 */
+ HDC16 f1;
+} GETTEXTCOLOR16;
+typedef GETTEXTCOLOR16 UNALIGNED *PGETTEXTCOLOR16;
+
+typedef struct _GETTEXTEXTENT16 { /* g91 */
+ SHORT f3;
+ VPSTR f2;
+ HDC16 f1;
+} GETTEXTEXTENT16;
+typedef GETTEXTEXTENT16 UNALIGNED *PGETTEXTEXTENT16;
+
+typedef struct _GETTEXTFACE16 { /* g92 */
+ VPSTR f3;
+ SHORT f2;
+ HDC16 f1;
+} GETTEXTFACE16;
+typedef GETTEXTFACE16 UNALIGNED *PGETTEXTFACE16;
+
+typedef struct _GETTEXTMETRICS16 { /* g93 */
+ VPTEXTMETRIC16 f2;
+ HDC16 f1;
+} GETTEXTMETRICS16;
+typedef GETTEXTMETRICS16 UNALIGNED *PGETTEXTMETRICS16;
+
+typedef struct _GETVIEWPORTEXT16 { /* g94 */
+ HDC16 f1;
+} GETVIEWPORTEXT16;
+typedef GETVIEWPORTEXT16 UNALIGNED *PGETVIEWPORTEXT16;
+
+typedef struct _GETVIEWPORTORG16 { /* g95 */
+ HDC16 f1;
+} GETVIEWPORTORG16;
+typedef GETVIEWPORTORG16 UNALIGNED *PGETVIEWPORTORG16;
+
+typedef struct _GETWINDOWEXT16 { /* g96 */
+ HDC16 f1;
+} GETWINDOWEXT16;
+typedef GETWINDOWEXT16 UNALIGNED *PGETWINDOWEXT16;
+
+typedef struct _GETWINDOWORG16 { /* g97 */
+ HDC16 f1;
+} GETWINDOWORG16;
+typedef GETWINDOWORG16 UNALIGNED *PGETWINDOWORG16;
+
+typedef struct _INTERSECTCLIPRECT16 { /* g22 */
+ SHORT f5;
+ SHORT f4;
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} INTERSECTCLIPRECT16;
+typedef INTERSECTCLIPRECT16 UNALIGNED *PINTERSECTCLIPRECT16;
+
+typedef struct _INVERTRGN16 { /* g42 */
+ HRGN16 f2;
+ HDC16 f1;
+} INVERTRGN16;
+typedef INVERTRGN16 UNALIGNED *PINVERTRGN16;
+
+typedef struct _LINEDDA16 { /* g100 */
+ VPSTR f6;
+ VPPROC f5;
+ SHORT f4;
+ SHORT f3;
+ SHORT f2;
+ SHORT f1;
+} LINEDDA16;
+typedef LINEDDA16 UNALIGNED *PLINEDDA16;
+
+typedef struct _LINETO16 { /* g19 */
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} LINETO16;
+typedef LINETO16 UNALIGNED *PLINETO16;
+
+typedef struct _LPTODP16 { /* g99 */
+ SHORT f3;
+ VPPOINT16 f2;
+ HDC16 f1;
+} LPTODP16;
+typedef LPTODP16 UNALIGNED *PLPTODP16;
+
+typedef struct _MOVETO16 { /* g20 */
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} MOVETO16;
+typedef MOVETO16 UNALIGNED *PMOVETO16;
+
+typedef struct _MULDIV16 { /* g128 */
+ SHORT f3;
+ SHORT f2;
+ SHORT f1;
+} MULDIV16;
+typedef MULDIV16 UNALIGNED *PMULDIV16;
+
+typedef struct _OFFSETCLIPRGN16 { /* g32 */
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} OFFSETCLIPRGN16;
+typedef OFFSETCLIPRGN16 UNALIGNED *POFFSETCLIPRGN16;
+
+typedef struct _OFFSETRGN16 { /* g101 */
+ SHORT f3;
+ SHORT f2;
+ HRGN16 f1;
+} OFFSETRGN16;
+typedef OFFSETRGN16 UNALIGNED *POFFSETRGN16;
+
+typedef struct _OFFSETVIEWPORTORG16 { /* g17 */
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} OFFSETVIEWPORTORG16;
+typedef OFFSETVIEWPORTORG16 UNALIGNED *POFFSETVIEWPORTORG16;
+
+typedef struct _OFFSETWINDOWORG16 { /* g15 */
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} OFFSETWINDOWORG16;
+typedef OFFSETWINDOWORG16 UNALIGNED *POFFSETWINDOWORG16;
+
+typedef struct _PAINTRGN16 { /* g43 */
+ HRGN16 f2;
+ HDC16 f1;
+} PAINTRGN16;
+typedef PAINTRGN16 UNALIGNED *PPAINTRGN16;
+
+typedef struct _PATBLT16 { /* g29 */
+ DWORD dwRop;
+ SHORT nHeight;
+ SHORT nWidth;
+ SHORT y;
+ SHORT x;
+ HDC16 hdc;
+} PATBLT16;
+typedef PATBLT16 UNALIGNED *PPATBLT16;
+
+typedef struct _PIE16 { /* g26 */
+ SHORT f9;
+ SHORT f8;
+ SHORT f7;
+ SHORT f6;
+ SHORT f5;
+ SHORT f4;
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} PIE16;
+typedef PIE16 UNALIGNED *PPIE16;
+
+typedef struct _PLAYMETAFILE16 { /* g123 */
+ HAND16 f2;
+ HDC16 f1;
+} PLAYMETAFILE16;
+typedef PLAYMETAFILE16 UNALIGNED *PPLAYMETAFILE16;
+
+typedef struct _PLAYMETAFILERECORD16 { /* g176 */
+ WORD f4;
+ VPMETARECORD16 f3;
+ VPHANDLETABLE16 f2;
+ HDC16 f1;
+} PLAYMETAFILERECORD16;
+typedef PLAYMETAFILERECORD16 UNALIGNED *PPLAYMETAFILERECORD16;
+
+typedef struct _POLYGON16 { /* g36 */
+ SHORT f3;
+ VPPOINT16 f2;
+ HDC16 f1;
+} POLYGON16;
+typedef POLYGON16 UNALIGNED *PPOLYGON16;
+
+typedef struct _POLYLINE16 { /* g37 */
+ SHORT f3;
+ VPPOINT16 f2;
+ HDC16 f1;
+} POLYLINE16;
+typedef POLYLINE16 UNALIGNED *PPOLYLINE16;
+
+typedef struct _POLYPOLYGON16 { /* g450 */
+ SHORT f4;
+ VPSHORT f3;
+ VPPOINT16 f2;
+ HDC16 f1;
+} POLYPOLYGON16;
+typedef POLYPOLYGON16 UNALIGNED *PPOLYPOLYGON16;
+
+typedef struct _POLYPOLYLINEWOW16 { /* g490 */
+ DWORD f4;
+ VPDWORD f3;
+ VPDWORD f2;
+ HDC16 f1;
+} POLYPOLYLINEWOW16;
+typedef POLYPOLYLINEWOW16 UNALIGNED *PPOLYPOLYLINEWOW16;
+
+typedef struct _PTINREGION16 { /* g161 */
+ SHORT f3;
+ SHORT f2;
+ HRGN16 f1;
+} PTINREGION16;
+typedef PTINREGION16 UNALIGNED *PPTINREGION16;
+
+typedef struct _PTVISIBLE16 { /* g103 */
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} PTVISIBLE16;
+typedef PTVISIBLE16 UNALIGNED *PPTVISIBLE16;
+
+typedef struct _RECTANGLE16 { /* g27 */
+ SHORT y2;
+ SHORT x2;
+ SHORT y1;
+ SHORT x1;
+ HDC16 hdc;
+} RECTANGLE16;
+typedef RECTANGLE16 UNALIGNED *PRECTANGLE16;
+
+typedef struct _RECTINREGION16 { /* g181 */
+ VPRECT16 f2;
+ HRGN16 f1;
+} RECTINREGION16;
+typedef RECTINREGION16 UNALIGNED *PRECTINREGION16;
+
+typedef struct _RECTVISIBLE16 { /* g104 */
+ VPRECT16 f2;
+ HDC16 f1;
+} RECTVISIBLE16;
+typedef RECTVISIBLE16 UNALIGNED *PRECTVISIBLE16;
+
+typedef struct _REMOVEFONTRESOURCE16 { /* g136 */
+ VPSTR f1;
+} REMOVEFONTRESOURCE16;
+typedef REMOVEFONTRESOURCE16 UNALIGNED *PREMOVEFONTRESOURCE16;
+
+typedef struct _RESIZEPALETTE16 { /* g368 */
+ WORD f2;
+ HPAL16 f1;
+} RESIZEPALETTE16;
+typedef RESIZEPALETTE16 UNALIGNED *PRESIZEPALETTE16;
+
+typedef struct _RESTOREDC16 { /* g39 */
+ SHORT f2;
+ HDC16 f1;
+} RESTOREDC16;
+typedef RESTOREDC16 UNALIGNED *PRESTOREDC16;
+
+typedef struct _ROUNDRECT16 { /* g28 */
+ SHORT f7;
+ SHORT f6;
+ SHORT f5;
+ SHORT f4;
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} ROUNDRECT16;
+typedef ROUNDRECT16 UNALIGNED *PROUNDRECT16;
+
+typedef struct _SAVEDC16 { /* g30 */
+ HDC16 f1;
+} SAVEDC16;
+typedef SAVEDC16 UNALIGNED *PSAVEDC16;
+
+typedef struct _SCALEVIEWPORTEXT16 { /* g18 */
+ SHORT f5;
+ SHORT f4;
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} SCALEVIEWPORTEXT16;
+typedef SCALEVIEWPORTEXT16 UNALIGNED *PSCALEVIEWPORTEXT16;
+
+typedef struct _SCALEWINDOWEXT16 { /* g16 */
+ SHORT f5;
+ SHORT f4;
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} SCALEWINDOWEXT16;
+typedef SCALEWINDOWEXT16 UNALIGNED *PSCALEWINDOWEXT16;
+
+typedef struct _SELECTCLIPRGN16 { /* g44 */
+ HRGN16 f2;
+ HDC16 f1;
+} SELECTCLIPRGN16;
+typedef SELECTCLIPRGN16 UNALIGNED *PSELECTCLIPRGN16;
+
+typedef struct _SELECTOBJECT16 { /* g45 */
+ HAND16 f2;
+ HDC16 f1;
+} SELECTOBJECT16;
+typedef SELECTOBJECT16 UNALIGNED *PSELECTOBJECT16;
+
+typedef struct _SETBITMAPBITS16 { /* g106 */
+ VPSTR f3;
+ DWORD f2;
+ HBM16 f1;
+} SETBITMAPBITS16;
+typedef SETBITMAPBITS16 UNALIGNED *PSETBITMAPBITS16;
+
+typedef struct _SETBITMAPDIMENSION16 { /* g163 */
+ SHORT f3;
+ SHORT f2;
+ HBM16 f1;
+} SETBITMAPDIMENSION16;
+typedef SETBITMAPDIMENSION16 UNALIGNED *PSETBITMAPDIMENSION16;
+
+typedef struct _SETBKCOLOR16 { /* g1 */
+ DWORD f2;
+ HDC16 f1;
+} SETBKCOLOR16;
+typedef SETBKCOLOR16 UNALIGNED *PSETBKCOLOR16;
+
+typedef struct _SETBKMODE16 { /* g2 */
+ SHORT f2;
+ HDC16 f1;
+} SETBKMODE16;
+typedef SETBKMODE16 UNALIGNED *PSETBKMODE16;
+
+typedef struct _SETBRUSHORG16 { /* g148 */
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} SETBRUSHORG16;
+typedef SETBRUSHORG16 UNALIGNED *PSETBRUSHORG16;
+
+typedef struct _SETDIBITS16 { /* g440 */
+ WORD f7;
+ VPBITMAPINFO16 f6;
+ VPSTR f5;
+ WORD f4;
+ WORD f3;
+ HAND16 f2;
+ HDC16 f1;
+} SETDIBITS16;
+typedef SETDIBITS16 UNALIGNED *PSETDIBITS16;
+
+typedef struct _SETDIBITSTODEVICE16 { /* g443 */
+ WORD f12;
+ VPBITMAPINFO16 f11;
+ VPSTR f10;
+ WORD f9;
+ WORD f8;
+ WORD f7;
+ WORD f6;
+ WORD f5;
+ WORD f4;
+ WORD f3;
+ WORD f2;
+ HDC16 f1;
+} SETDIBITSTODEVICE16;
+typedef SETDIBITSTODEVICE16 UNALIGNED *PSETDIBITSTODEVICE16;
+
+typedef struct _SETENVIRONMENT16 { /* g132 */
+ WORD f3;
+ VPSTR f2;
+ VPSTR f1;
+} SETENVIRONMENT16;
+typedef SETENVIRONMENT16 UNALIGNED *PSETENVIRONMENT16;
+
+typedef struct _SETMAPMODE16 { /* g3 */
+ SHORT f2;
+ HDC16 f1;
+} SETMAPMODE16;
+typedef SETMAPMODE16 UNALIGNED *PSETMAPMODE16;
+
+typedef struct _SETMAPPERFLAGS16 { /* g349 */
+ DWORD f2;
+ HDC16 f1;
+} SETMAPPERFLAGS16;
+typedef SETMAPPERFLAGS16 UNALIGNED *PSETMAPPERFLAGS16;
+
+typedef struct _SETMETAFILEBITS16 { /* g160 */
+ HAND16 f1;
+} SETMETAFILEBITS16;
+typedef SETMETAFILEBITS16 UNALIGNED *PSETMETAFILEBITS16;
+
+typedef struct _SETPALETTEENTRIES16 { /* g364 */
+ VPPALETTEENTRY16 f4;
+ WORD f3;
+ WORD f2;
+ HPAL16 f1;
+} SETPALETTEENTRIES16;
+typedef SETPALETTEENTRIES16 UNALIGNED *PSETPALETTEENTRIES16;
+
+typedef struct _SETPIXEL16 { /* g31 */
+ DWORD f4;
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} SETPIXEL16;
+typedef SETPIXEL16 UNALIGNED *PSETPIXEL16;
+
+typedef struct _SETPOLYFILLMODE16 { /* g6 */
+ SHORT f2;
+ HDC16 f1;
+} SETPOLYFILLMODE16;
+typedef SETPOLYFILLMODE16 UNALIGNED *PSETPOLYFILLMODE16;
+
+typedef struct _SETRECTRGN16 { /* g172 */
+ SHORT f5;
+ SHORT f4;
+ SHORT f3;
+ SHORT f2;
+ HRGN16 f1;
+} SETRECTRGN16;
+typedef SETRECTRGN16 UNALIGNED *PSETRECTRGN16;
+
+typedef struct _SETROP216 { /* g4 */
+ SHORT f2;
+ HDC16 f1;
+} SETROP216;
+typedef SETROP216 UNALIGNED *PSETROP216;
+
+typedef struct _SETSTRETCHBLTMODE16 { /* g7 */
+ SHORT f2;
+ HDC16 f1;
+} SETSTRETCHBLTMODE16;
+typedef SETSTRETCHBLTMODE16 UNALIGNED *PSETSTRETCHBLTMODE16;
+
+typedef struct _SETSYSTEMPALETTEUSE16 { /* g373 */
+ WORD f2;
+ HDC16 f1;
+} SETSYSTEMPALETTEUSE16;
+typedef SETSYSTEMPALETTEUSE16 UNALIGNED *PSETSYSTEMPALETTEUSE16;
+
+typedef struct _SETTEXTALIGN16 { /* g346 */
+ WORD f2;
+ HDC16 f1;
+} SETTEXTALIGN16;
+typedef SETTEXTALIGN16 UNALIGNED *PSETTEXTALIGN16;
+
+typedef struct _SETTEXTCHARACTEREXTRA16 { /* g8 */
+ SHORT f2;
+ HDC16 f1;
+} SETTEXTCHARACTEREXTRA16;
+typedef SETTEXTCHARACTEREXTRA16 UNALIGNED *PSETTEXTCHARACTEREXTRA16;
+
+typedef struct _SETTEXTCOLOR16 { /* g9 */
+ DWORD f2;
+ HDC16 f1;
+} SETTEXTCOLOR16;
+typedef SETTEXTCOLOR16 UNALIGNED *PSETTEXTCOLOR16;
+
+typedef struct _SETTEXTJUSTIFICATION16 { /* g10 */
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} SETTEXTJUSTIFICATION16;
+typedef SETTEXTJUSTIFICATION16 UNALIGNED *PSETTEXTJUSTIFICATION16;
+
+typedef struct _SETVIEWPORTEXT16 { /* g14 */
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} SETVIEWPORTEXT16;
+typedef SETVIEWPORTEXT16 UNALIGNED *PSETVIEWPORTEXT16;
+
+typedef struct _SETVIEWPORTORG16 { /* g13 */
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} SETVIEWPORTORG16;
+typedef SETVIEWPORTORG16 UNALIGNED *PSETVIEWPORTORG16;
+
+typedef struct _SETWINDOWEXT16 { /* g12 */
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} SETWINDOWEXT16;
+typedef SETWINDOWEXT16 UNALIGNED *PSETWINDOWEXT16;
+
+typedef struct _SETWINDOWORG16 { /* g11 */
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} SETWINDOWORG16;
+typedef SETWINDOWORG16 UNALIGNED *PSETWINDOWORG16;
+
+typedef struct _STRETCHBLT16 { /* g35 */
+ DWORD f11;
+ SHORT f10;
+ SHORT f9;
+ SHORT f8;
+ SHORT f7;
+ HDC16 f6;
+ SHORT f5;
+ SHORT f4;
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} STRETCHBLT16;
+typedef STRETCHBLT16 UNALIGNED *PSTRETCHBLT16;
+
+typedef struct _STRETCHDIBITS16 { /* g439 */
+ DWORD f13;
+ WORD f12;
+ VPBITMAPINFO16 f11;
+ VPSTR f10;
+ WORD f9;
+ WORD f8;
+ WORD f7;
+ WORD f6;
+ WORD f5;
+ WORD f4;
+ WORD f3;
+ WORD f2;
+ HDC16 f1;
+} STRETCHDIBITS16;
+typedef STRETCHDIBITS16 UNALIGNED *PSTRETCHDIBITS16;
+
+typedef struct _TEXTOUT16 { /* g33 */
+ SHORT f5;
+ VPSTR f4;
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} TEXTOUT16;
+typedef TEXTOUT16 UNALIGNED *PTEXTOUT16;
+
+typedef struct _UNREALIZEOBJECT16 { /* g150 */
+ HBRSH16 f1;
+} UNREALIZEOBJECT16;
+typedef UNREALIZEOBJECT16 UNALIGNED *PUNREALIZEOBJECT16;
+
+typedef struct _UPDATECOLORS16 { /* g366 */
+ HDC16 f1;
+} UPDATECOLORS16;
+typedef UPDATECOLORS16 UNALIGNED *PUPDATECOLORS16;
+
+// These are new functions for win 31
+
+typedef struct _ABORTDOC16 { /* g382 */
+ HDC16 f1;
+} ABORTDOC16;
+typedef ABORTDOC16 UNALIGNED *PABORTDOC16;
+
+typedef struct _CREATESCALABLEFONTRESOURCE16 { /* g510 */
+ VPSZ f4;
+ VPSZ f3;
+ VPSZ f2;
+ WORD f1;
+} CREATESCALABLEFONTRESOURCE16;
+typedef CREATESCALABLEFONTRESOURCE16 UNALIGNED *PCREATESCALABLEFONTRESOURCE16;
+
+typedef struct _ENDDOC16 { /* g378 */
+ HDC16 f1;
+} ENDDOC16;
+typedef ENDDOC16 UNALIGNED *PENDDOC16;
+
+typedef struct _ENDPAGE16 { /* g380 */
+ HDC16 f1;
+} ENDPAGE16;
+typedef ENDPAGE16 UNALIGNED *PENDPAGE16;
+
+typedef struct _ENUMFONTFAMILIES16 { /* g330 */
+ VPBYTE f4;
+ VPPROC f3;
+ VPSZ f2;
+ HDC16 f1;
+} ENUMFONTFAMILIES16;
+typedef ENUMFONTFAMILIES16 UNALIGNED *PENUMFONTFAMILIES16;
+
+typedef struct _GETBITMAPDIMENSIONEX16 { /* g468 */
+ VPVOID f2;
+ WORD f1;
+} GETBITMAPDIMENSIONEX16;
+typedef GETBITMAPDIMENSIONEX16 UNALIGNED *PGETBITMAPDIMENSIONEX16;
+
+typedef struct _GETBOUNDSRECT16 { /* g194 */
+ WORD f3;
+ VPRECT16 f2;
+ HDC16 f1;
+} GETBOUNDSRECT16;
+typedef GETBOUNDSRECT16 UNALIGNED *PGETBOUNDSRECT16;
+
+typedef struct _GETBRUSHORGEX16 { /* g469 */
+ VPPOINT16 f2;
+ HDC16 f1;
+} GETBRUSHORGEX16;
+typedef GETBRUSHORGEX16 UNALIGNED *PGETBRUSHORGEX16;
+
+typedef struct _GETCHARABCWIDTHS16 { /* g307 */
+ VPVOID f4;
+ WORD f3;
+ WORD f2;
+ HDC16 f1;
+} GETCHARABCWIDTHS16;
+typedef GETCHARABCWIDTHS16 UNALIGNED *PGETCHARABCWIDTHS16;
+
+typedef struct _GETCURRENTPOSITIONEX16 { /* g470 */
+ VPPOINT16 f2;
+ HDC16 f1;
+} GETCURRENTPOSITIONEX16;
+typedef GETCURRENTPOSITIONEX16 UNALIGNED *PGETCURRENTPOSITIONEX16;
+
+typedef struct _GETFONTDATA16 { /* g311 */
+ DWORD f5;
+ VPVOID f4;
+ DWORD f3;
+ DWORD f2;
+ HDC16 f1;
+} GETFONTDATA16;
+typedef GETFONTDATA16 UNALIGNED *PGETFONTDATA16;
+
+typedef struct _GETGLYPHOUTLINE16 { /* g309 */
+ VPVOID f7;
+ VPVOID f6;
+ DWORD f5;
+ VPVOID f4;
+ WORD f3;
+ WORD f2;
+ HDC16 f1;
+} GETGLYPHOUTLINE16;
+typedef GETGLYPHOUTLINE16 UNALIGNED *PGETGLYPHOUTLINE16;
+
+typedef struct _GETOULTLINETEXTMETRICS16 { /* g1000 */
+ VPVOID f3;
+ WORD f2;
+ HDC16 f1;
+} GETOULTLINETEXTMETRICS16;
+typedef GETOULTLINETEXTMETRICS16 UNALIGNED *PGETOULTLINETEXTMETRICS16;
+
+typedef struct _GETRASTERIZERCAPS16 { /* g313 */
+ SHORT f2;
+ VPVOID f1;
+} GETRASTERIZERCAPS16;
+typedef GETRASTERIZERCAPS16 UNALIGNED *PGETRASTERIZERCAPS16;
+
+typedef struct _GETTEXTEXTENTEX16 { /* g2000 */
+ VPVOID f6;
+ VPVOID f5;
+ SHORT f4;
+ SHORT f3;
+ VPSZ f2;
+ HDC16 f1;
+} GETTEXTEXTENTEX16;
+typedef GETTEXTEXTENTEX16 UNALIGNED *PGETTEXTEXTENTEX16;
+
+typedef struct _GETTEXTEXTENTPOINT16 { /* gxx */
+ VPVOID f4;
+ SHORT f3;
+ VPSZ f2;
+ HDC16 f1;
+} GETTEXTEXTENTPOINT16;
+typedef GETTEXTEXTENTPOINT16 UNALIGNED *PGETTEXTEXTENTPOINT16;
+
+typedef struct _GETVIEWPORTEXTEX16 { /* g472 */
+ VPVOID f2;
+ HDC16 f1;
+} GETVIEWPORTEXTEX16;
+typedef GETVIEWPORTEXTEX16 UNALIGNED *PGETVIEWPORTEXTEX16;
+
+typedef struct _GETVIEWPORTORGEX16 { /* g473 */
+ VPPOINT16 f2;
+ HDC16 f1;
+} GETVIEWPORTORGEX16;
+typedef GETVIEWPORTORGEX16 UNALIGNED *PGETVIEWPORTORGEX16;
+
+typedef struct _GETWINDOWEXTEX16 { /* g474 */
+ VPVOID f2;
+ HDC16 f1;
+} GETWINDOWEXTEX16;
+typedef GETWINDOWEXTEX16 UNALIGNED *PGETWINDOWEXTEX16;
+
+typedef struct _GETWINDOWORGEX16 { /* g475 */
+ VPPOINT16 f2;
+ HDC16 f1;
+} GETWINDOWORGEX16;
+typedef GETWINDOWORGEX16 UNALIGNED *PGETWINDOWORGEX16;
+
+typedef struct _ISGDIOBJECT16 { /* g462 */
+ WORD f1;
+} ISGDIOBJECT16;
+typedef ISGDIOBJECT16 UNALIGNED *PISGDIOBJECT16;
+
+typedef struct _MOVETOEX16 { /* g483 */
+ VPPOINT16 f4;
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} MOVETOEX16;
+typedef MOVETOEX16 UNALIGNED *PMOVETOEX16;
+
+typedef struct _OFFSETVIEWPORTORGEX16 { /* g476 */
+ VPPOINT16 f4;
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} OFFSETVIEWPORTORGEX16;
+typedef OFFSETVIEWPORTORGEX16 UNALIGNED *POFFSETVIEWPORTORGEX16;
+
+typedef struct _OFFSETWINDOWORGEX16 { /* g477 */
+ VPPOINT16 f4;
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} OFFSETWINDOWORGEX16;
+typedef OFFSETWINDOWORGEX16 UNALIGNED *POFFSETWINDOWORGEX16;
+
+typedef struct _QUERTABORT16 { /* gxxx */
+ SHORT f2;
+ HDC16 f1;
+} QUERTABORT16;
+typedef QUERTABORT16 UNALIGNED *PQUERTABORT16;
+
+typedef struct _RESETDC16 { /* g376 */
+ VPVOID f2;
+ HDC16 f1;
+} RESETDC16;
+typedef RESETDC16 UNALIGNED *PRESETDC16;
+
+typedef struct _SCALEVIEWPORTEXTEX16 { /* g484 */
+ VPVOID f6;
+ SHORT f5;
+ SHORT f4;
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} SCALEVIEWPORTEXTEX16;
+typedef SCALEVIEWPORTEXTEX16 UNALIGNED *PSCALEVIEWPORTEXTEX16;
+
+typedef struct _SCALEWINDOWEXTEX16 { /* g485 */
+ VPVOID f6;
+ SHORT f5;
+ SHORT f4;
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} SCALEWINDOWEXTEX16;
+typedef SCALEWINDOWEXTEX16 UNALIGNED *PSCALEWINDOWEXTEX16;
+
+typedef struct _SETABORTPROC16 { /* g381 */
+ VPVOID f2;
+ HDC16 f1;
+} SETABORTPROC16;
+typedef SETABORTPROC16 UNALIGNED *PSETABORTPROC16;
+
+typedef struct _SETBITMAPDIMENSIONEX16 { /* g478 */
+ VPVOID f4;
+ SHORT f3;
+ SHORT f2;
+ WORD f1;
+} SETBITMAPDIMENSIONEX16;
+typedef SETBITMAPDIMENSIONEX16 UNALIGNED *PSETBITMAPDIMENSIONEX16;
+
+typedef struct _SETBOUNDSRECT16 { /* g193 */
+ WORD f3;
+ VPRECT16 f2;
+ HDC16 f1;
+} SETBOUNDSRECT16;
+typedef SETBOUNDSRECT16 UNALIGNED *PSETBOUNDSRECT16;
+
+typedef struct _SETMETAFILEBITSBETTER16 { /* g196 */
+ WORD f1;
+} SETMETAFILEBITSBETTER16;
+typedef SETMETAFILEBITSBETTER16 UNALIGNED *PSETMETAFILEBITSBETTER16;
+
+typedef struct _SETVIEWPORTEXTEX16 { /* g479 */
+ VPVOID f4;
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} SETVIEWPORTEXTEX16;
+typedef SETVIEWPORTEXTEX16 UNALIGNED *PSETVIEWPORTEXTEX16;
+
+typedef struct _SETVIEWPORTORGEX16 { /* g480 */
+ VPPOINT16 f4;
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} SETVIEWPORTORGEX16;
+typedef SETVIEWPORTORGEX16 UNALIGNED *PSETVIEWPORTORGEX16;
+
+typedef struct _SETWINDOWEXTEX16 { /* g481 */
+ VPVOID f4;
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} SETWINDOWEXTEX16;
+typedef SETWINDOWEXTEX16 UNALIGNED *PSETWINDOWEXTEX16;
+
+typedef struct _SETWINDOWORGEX16 { /* g482 */
+ VPPOINT16 f4;
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} SETWINDOWORGEX16;
+typedef SETWINDOWORGEX16 UNALIGNED *PSETWINDOWORGEX16;
+
+typedef struct _SPOOLFILE16 { /* g254 */
+ VPSZ f4;
+ VPSZ f3;
+ VPSZ f2;
+ VPSZ f1;
+} SPOOLFILE16;
+typedef SPOOLFILE16 UNALIGNED *PSPOOLFILE16;
+
+typedef struct _STARTDOC16 { /* g377 */
+ VPVOID f2;
+ HDC16 f1;
+} STARTDOC16;
+typedef STARTDOC16 UNALIGNED *PSTARTDOC16;
+
+typedef struct _STARTPAGE16 { /* g379 */
+ HDC16 f1;
+} STARTPAGE16;
+typedef STARTPAGE16 UNALIGNED *PSTARTPAGE16;
+
+typedef struct _GETOUTLINETEXTMETRICS16 { /* g308 */
+ VPVOID f3;
+ WORD f2;
+ HDC16 f1;
+} GETOUTLINETEXTMETRICS16;
+typedef GETOUTLINETEXTMETRICS16 UNALIGNED *PGETOUTLINETEXTMETRICS16;
+
+typedef struct _DOCINFO16 { /* di16wow32 */
+ SHORT cbSize;
+ VPSZ lpszDocName;
+ VPSZ lpszOutput;
+} DOCINFO16;
+typedef DOCINFO16 UNALIGNED *LPDOCINFO16;
+
+typedef struct _SIZE16 { /* sz16wow32 */
+ SHORT cx;
+ SHORT cy;
+} SIZE16;
+typedef SIZE16 UNALIGNED *PSIZE16;
+typedef VPVOID VPSIZE16;
+
+typedef struct _INQUIREVISRGN16 { /* g131 */
+ HDC16 f1;
+}INQUIREVISRGN16;
+typedef INQUIREVISRGN16 UNALIGNED *PINQUIREVISRGN16;
+
+typedef struct _GETCLIPRGN16 { /* g173 */
+ HDC16 f1;
+}GETCLIPRGN16;
+typedef GETCLIPRGN16 UNALIGNED *PGETCLIPRGN16;
+
+
+typedef struct _OPENJOB16 { /* g240 */
+ WORD f3;
+ VPSZ f2;
+ VPSZ f1;
+} OPENJOB16;
+typedef OPENJOB16 UNALIGNED *POPENJOB16;
+
+typedef struct _STARTSPOOLPAGE16 { /* g246 */
+ HAND16 f1;
+} STARTSPOOLPAGE16;
+typedef STARTSPOOLPAGE16 UNALIGNED *PSTARTSPOOLPAGE16;
+
+typedef struct _ENDSPOOLPAGE16 { /* g247 */
+ HAND16 f1;
+} ENDSPOOLPAGE16;
+typedef ENDSPOOLPAGE16 UNALIGNED *PENDSPOOLPAGE16;
+
+typedef struct _CLOSEJOB16 { /* g243 */
+ HAND16 f1;
+} CLOSEJOB16;
+typedef CLOSEJOB16 UNALIGNED *PCLOSEJOB16;
+
+typedef struct _WRITESPOOL16 { /* g241 */
+ WORD f3;
+ VPSZ f2;
+ HAND16 f1;
+} WRITESPOOL16;
+typedef WRITESPOOL16 UNALIGNED *PWRITESPOOL16;
+
+typedef struct _DELETEJOB16 { /* g244 */
+ WORD f2;
+ HAND16 f1;
+} DELETEJOB16;
+typedef DELETEJOB16 UNALIGNED *PDELETEJOB16;
+
+typedef struct _WRITEDIALOG16 { /* g242 */
+ WORD f3;
+ VPSZ f2;
+ HAND16 f1;
+} WRITEDIALOG16;
+typedef WRITEDIALOG16 UNALIGNED *PWRITEDIALOG16;
+
+typedef struct _DMBITBLT16 { /* g201 */
+ VPSZ pdrawmode;
+ VPSZ pbrush;
+ LONG rop;
+ WORD exty;
+ WORD extx;
+ WORD srcy;
+ WORD srcx;
+ VPSZ pbitmapsrc;
+ WORD desty;
+ WORD destx;
+ VPSZ pbitmapdest;
+} DMBITBLT16;
+typedef DMBITBLT16 UNALIGNED *PDMBITBLT16;
+
+typedef struct _GETCURLOGFONT16 { /* g411 */
+ HAND16 hDC;
+} GETCURLOGFONT16;
+typedef GETCURLOGFONT16 UNALIGNED *PGETCURLOGFONT16;
+
+/* XLATOFF */
+#pragma pack()
+/* XLATON */
diff --git a/private/mvdm/inc/wowinfo.h b/private/mvdm/inc/wowinfo.h
new file mode 100644
index 000000000..ba07213f9
--- /dev/null
+++ b/private/mvdm/inc/wowinfo.h
@@ -0,0 +1,58 @@
+/*++ BUILD Version: 0002
+ *
+ * WOW v1.0
+ *
+ * Copyright (c) 1991, Microsoft Corporation
+ *
+ * WOWINFO.H
+ * 16-bit Kernel API argument structures
+ *
+ * History:
+ * Created 1-jun-1992 by Matt Felton (mattfe)
+--*/
+
+// the following UNALIGNED definition is required because wowinfo.h is
+// included in 'wowexec.c'
+//
+// these lines are from ntdef.h
+//
+
+#ifndef UNALIGNED
+
+#if defined(MIPS) || defined(_ALPHA_) // winnt
+#define UNALIGNED __unaligned // winnt
+#else // winnt
+#define UNALIGNED // winnt
+#endif // winnt
+
+#endif
+
+/* XLATOFF */
+#pragma pack(2)
+/* XLATON */
+
+typedef struct _WOWINFO { /**/
+ LPSTR lpCmdLine;
+ LPSTR lpAppName;
+ LPSTR lpEnv;
+ DWORD iTask;
+ USHORT CmdLineSize;
+ USHORT AppNameSize;
+ USHORT EnvSize;
+ USHORT CurDrive;
+ LPSTR lpCurDir;
+ USHORT CurDirSize;
+ USHORT wShowWindow;
+} WOWINFO;
+typedef WOWINFO UNALIGNED *PWOWINFO;
+
+#define MAXENVIRONMENTSIZE 2048 // Max Size of Environment coped with.
+
+
+/* XLATOFF */
+#pragma pack()
+/* XLATON */
+
+#define WM_WOWEXECSTARTAPP (WM_USER) // also in windows\inc\vdmapi.h
+#define WM_WOWEXECHEARTBEAT (WM_USER+1) // To deliver timer ticks
+#define WM_WOWEXECEXITEXEC (WM_USER+2) // To help do ExitWindowsExec()
diff --git a/private/mvdm/inc/wowint.h b/private/mvdm/inc/wowint.h
new file mode 100644
index 000000000..78a4a15dd
--- /dev/null
+++ b/private/mvdm/inc/wowint.h
@@ -0,0 +1,28 @@
+/*++ BUILD Version: 0001
+ *
+ * WOW v1.0
+ *
+ * Copyright (c) 1992, Microsoft Corporation
+ *
+ * WOWINT.H
+ * 16-bit Internal API argument structures
+ *
+ * History:
+ * Created 22-Apr-1992 by FritzS
+ *
+--*/
+
+#define FUN_SETTABLE 0 //
+
+
+/* XLATOFF */
+#pragma pack(2)
+/* XLATON */
+
+typedef struct _WOWSETTABLE16 { /* i0 */
+ VPSZ f1;
+} WOWSETTABLE16, *PWOWSETTABLE16;
+
+/* XLATOFF */
+#pragma pack()
+/* XLATON */
diff --git a/private/mvdm/inc/wowkbd.h b/private/mvdm/inc/wowkbd.h
new file mode 100644
index 000000000..1170b5c6e
--- /dev/null
+++ b/private/mvdm/inc/wowkbd.h
@@ -0,0 +1,115 @@
+/*++ BUILD Version: 0001
+ *
+ * WOW v1.0
+ *
+ * Copyright (c) 1991, Microsoft Corporation
+ *
+ * WOWKBD.H
+ * 16-bit Keyboard API argument structures
+ *
+ * History:
+ * Created 02-Feb-1991 by Jeff Parsons (jeffpar)
+--*/
+
+
+/* Keyboard API IDs
+ */
+#define FUN_ANSITOOEM 5 //
+#define FUN_ANSITOOEMBUFF 134 //
+#define FUN_DISABLE 3 // Internal
+#define FUN_ENABLE 2 // Internal
+#define FUN_ENABLEKBSYSREQ 136 // Internal
+#define FUN_GETKBCODEPAGE 132 //
+#define FUN_GETKEYBOARDTYPE 130 //
+#define FUN_GETKEYNAMETEXT 133 //
+#define FUN_GETTABLESEG 126 // Internal
+#define FUN_INQUIRE 1 // Internal
+#define FUN_KEYBOARD_WEP 0 // Export by name
+#define FUN_MAPVIRTUALKEY 131 //
+#define FUN_NEWTABLE 127 // Internal
+#define FUN_OEMKEYSCAN 128 //
+#define FUN_OEMTOANSI 6 //
+#define FUN_OEMTOANSIBUFF 135 //
+#define FUN_SCREENSWITCHENABLE 100 // Internal
+#define FUN_SETSPEED 7 // Internal
+#define FUN_TOASCII 4 //
+#define FUN_VKKEYSCAN 129 //
+#define FUN_GETBIOSKEYPROC 137 //
+
+
+/* XLATOFF */
+#pragma pack(2)
+/* XLATON */
+
+typedef struct _ANSITOOEM16 { /* kb5 */
+ VPSTR f2;
+ VPSTR f1;
+} ANSITOOEM16;
+typedef ANSITOOEM16 UNALIGNED *PANSITOOEM16;
+
+typedef struct _ANSITOOEMBUFF16 { /* kb134 */
+ SHORT f3;
+ VPSTR f2;
+ VPSTR f1;
+} ANSITOOEMBUFF16;
+typedef ANSITOOEMBUFF16 UNALIGNED *PANSITOOEMBUFF16;
+
+#ifdef NULLSTRUCT
+typedef struct _GETKBCODEPAGE16 { /* kb132 */
+} GETKBCODEPAGE16;
+typedef GETKBCODEPAGE16 UNALIGNED *PGETKBCODEPAGE16;
+#endif
+
+typedef struct _GETKEYBOARDTYPE16 { /* kb130 */
+ SHORT f1;
+} GETKEYBOARDTYPE16;
+typedef GETKEYBOARDTYPE16 UNALIGNED *PGETKEYBOARDTYPE16;
+
+typedef struct _GETKEYNAMETEXT16 { /* kb133 */
+ SHORT f3;
+ VPSTR f2;
+ LONG f1;
+} GETKEYNAMETEXT16;
+typedef GETKEYNAMETEXT16 UNALIGNED *PGETKEYNAMETEXT16;
+
+typedef struct _MAPVIRTUALKEY16 { /* kb131 */
+ WORD f2;
+ WORD f1;
+} MAPVIRTUALKEY16;
+typedef MAPVIRTUALKEY16 UNALIGNED *PMAPVIRTUALKEY16;
+
+typedef struct _OEMKEYSCAN16 { /* kb128 */
+ WORD f1;
+} OEMKEYSCAN16;
+typedef OEMKEYSCAN16 UNALIGNED *POEMKEYSCAN16;
+
+typedef struct _OEMTOANSI16 { /* kb6 */
+ VPSTR f2;
+ VPSTR f1;
+} OEMTOANSI16;
+typedef OEMTOANSI16 UNALIGNED *POEMTOANSI16;
+
+typedef struct _OEMTOANSIBUFF16 { /* kb135 */
+ SHORT f3;
+ VPSTR f2;
+ VPSTR f1;
+} OEMTOANSIBUFF16;
+typedef OEMTOANSIBUFF16 UNALIGNED *POEMTOANSIBUFF16;
+
+typedef struct _TOASCII16 { /* kb4 */
+ WORD f5;
+ VPVOID f4;
+ VPSTR f3;
+ WORD f2;
+ WORD f1;
+} TOASCII16;
+typedef TOASCII16 UNALIGNED *PTOASCII16;
+
+typedef struct _VKKEYSCAN16 { /* kb129 */
+ WORD f1;
+} VKKEYSCAN16;
+typedef VKKEYSCAN16 UNALIGNED *PVKKEYSCAN16;
+
+/* XLATOFF */
+#pragma pack()
+/* XLATON */
diff --git a/private/mvdm/inc/wowkrn.h b/private/mvdm/inc/wowkrn.h
new file mode 100644
index 000000000..df1bf022d
--- /dev/null
+++ b/private/mvdm/inc/wowkrn.h
@@ -0,0 +1,1370 @@
+/*++ BUILD Version: 0002
+ *
+ * WOW v1.0
+ *
+ * Copyright (c) 1991, Microsoft Corporation
+ *
+ * WOWKRN.H
+ * 16-bit Kernel API argument structures
+ *
+ * History:
+ * Created 02-Feb-1991 by Jeff Parsons (jeffpar)
+ * 01-May-91 Matt Felton (mattfe) added Private Callback CHECKLOADMODULEDRV
+--*/
+
+
+/* Kernel API IDs
+ */
+#define FUN_A20PROC 165 // Internal
+#define FUN_ACCESSRESOURCE 64 //
+#define FUN_ADDATOM 70 //
+#define FUN_ALLOCALIAS 172 // No proto
+#define FUN_ALLOCCSTODSALIAS 170 // No proto
+#define FUN_ALLOCDSTOCSALIAS 171 //
+#define FUN_ALLOCRESOURCE 66 //
+#define FUN_ALLOCSELECTOR 175 //
+#define FUN_ALLOCSELECTORARRAY 206 // Internal
+#define FUN_CALLPROCINSTANCE 53 // Internal
+#define FUN_CATCH 55 //
+#define FUN_CVWBREAK 205 // No proto
+#define FUN_DEBUGBREAK 203 //
+#define FUN_DEBUGDEFINESEGMENT 212 // Internal
+#define FUN_DEFINEHANDLETABLE 94 // No proto
+#define FUN_DELETEATOM 71 //
+#define FUN_DELETEPATHNAME 76 // Internal
+#define FUN_DIRECTEDYIELD 150 // Internal
+#define FUN_DIRECTRESALLOC 168 // Internal
+#define FUN_DISABLEDOS 42 // Internal
+#define FUN_DISABLEKERNEL 125 // Internal
+#define FUN_DOS3CALL 102 // No proto
+#define FUN_DOSIGNAL 139 // Internal
+#define FUN_EMSCOPY 160 // Internal
+#define FUN_ENABLEDOS 41 // Internal
+#define FUN_ENABLEKERNEL 124 // Internal
+#define FUN_EXITKERNEL 2 // Internal
+#define FUN_FARVALIDATEPOINTER 210 // Internal
+#define FUN_FATALAPPEXIT 137 // Internal
+#define FUN_FATALEXIT 1 //
+#define FUN_FILECDR 130 // Internal
+#define FUN_FINDATOM 69 //
+#define FUN_FINDRESOURCE 60 //
+#define FUN_FREELIBRARY 96 //
+#define FUN_FREEMODULE 46 //
+#define FUN_FREEPROCINSTANCE 52 //
+#define FUN_FREERESOURCE 63 //
+#define FUN_FREESELECTOR 176 //
+#define FUN_GETATOMHANDLE 73 //
+#define FUN_GETATOMNAME 72 //
+#define FUN_GETCODEHANDLE 93 //
+#define FUN_GETCODEINFO 104 // Internal, proto
+#define FUN_GETCURPID 157 // Internal
+#define FUN_GETCURRENTPDB 37 // Internal, proto
+#define FUN_GETCURRENTTASK 36 //
+#define FUN_GETDOSENVIRONMENT 131 //
+#define FUN_GETDRIVETYPE 136 //
+#define FUN_GETEXEPTR 133 // Internal
+#define FUN_GETEXEVERSION 105 // Internal
+#define FUN_GETEXPWINVER 167 // Internal
+#define FUN_GETFREEMEMINFO 214 // Internal
+#define FUN_GETFREESPACE 169 //
+#define FUN_GETHEAPSPACES 138 // Internal
+#define FUN_GETINSTANCEDATA 54 //
+#define FUN_GETLASTCRITICALERROR 211 // Internal
+#define FUN_GETLASTDISKCHANGE 98 // Internal
+#define FUN_GETLPERRMODE 99 // Internal
+#define FUN_GETMODULEFILENAME 49 //
+#define FUN_GETMODULEHANDLE 47 //
+#define FUN_GETMODULEUSAGE 48 //
+#define FUN_GETNUMTASKS 152 //
+#define FUN_GETPRIVATEPROFILEINT 127 //
+#define FUN_GETPRIVATEPROFILESTRING 128 //
+#define FUN_GETPROCADDRESS 50 //
+#define FUN_GETPROFILEINT 57 //
+#define FUN_GETPROFILESTRING 58 //
+#define FUN_GETSELECTORBASE 186 // Internal
+#define FUN_GETSELECTORLIMIT 188 // Internal
+#define FUN_GETSETKERNELDOSPROC 209 // Internal
+#define FUN_GETSYSTEMDIRECTORY 135 //
+#define FUN_GETTASKDS 155 // Internal
+#define FUN_GETTASKQUEUE 35 // Internal
+#define FUN_GETTASKQUEUEDS 118 // Internal
+#define FUN_GETTASKQUEUEES 119 // Internal
+#define FUN_GETTEMPDRIVE 92 //
+#define FUN_GETTEMPFILENAME 97 //
+#define FUN_GETVERSION 3 //
+#define FUN_GETVERSIONEX 149 //
+#define FUN_GETWINDOWSDIRECTORY 134 //
+#define FUN_GETWINFLAGS 132 //
+#define FUN_GLOBALALLOC 15 //
+#define FUN_GLOBALCOMPACT 25 //
+#define FUN_GLOBALDOSALLOC 184 // No proto
+#define FUN_GLOBALDOSFREE 185 // No proto
+#define FUN_GLOBALFIX 197 //
+#define FUN_GLOBALFLAGS 22 //
+#define FUN_GLOBALFREE 17 //
+#define FUN_GLOBALFREEALL 26 // Internal
+#define FUN_GLOBALHANDLE 21 //
+#define FUN_GLOBALHANDLENORIP 159 // Internal
+#define FUN_GLOBALLOCK 18 //
+#define FUN_GLOBALLRUNEWEST 164 //
+#define FUN_GLOBALLRUOLDEST 163 //
+#define FUN_GLOBALMASTERHANDLE 28 // Internal
+#define FUN_GLOBALNOTIFY 154 //
+#define FUN_GLOBALPAGELOCK 191 //
+#define FUN_GLOBALPAGEUNLOCK 192 //
+#define FUN_GLOBALREALLOC 16 //
+#define FUN_GLOBALSIZE 20 //
+#define FUN_GLOBALUNFIX 198 //
+#define FUN_GLOBALUNLOCK 19 //
+#define FUN_GLOBALUNWIRE 112 //
+#define FUN_GLOBALWIRE 111 //
+#define FUN_INITATOMTABLE 68 //
+#define FUN_INITLIB 116 // Internal
+#define FUN_INITTASK 91 // Internal
+#define FUN_INITTASK1 141 // Internal
+#define FUN_ISDBCSLEADBYTE 207 // Internal
+#define FUN_ISTASKLOCKED 122 // Internal
+#define FUN_ISWINOLDAPTASK 158 // Internal
+#define FUN_KBDRST 123 // Internal
+#define FUN_LIMITEMSPAGES 156 //
+#define FUN_LOADLIBRARY 95 //
+#define FUN_LOADMODULE 45 //
+#define FUN_LOADRESOURCE 61 //
+#define FUN_LOCALALLOC 5 //
+#define FUN_LOCALCOMPACT 13 //
+#define FUN_LOCALCOUNTFREE 161 // Internal
+#define FUN_LOCALFLAGS 12 //
+#define FUN_LOCALFREE 7 //
+#define FUN_LOCALHANDLE 11 //
+#define FUN_LOCALHANDLEDELTA 208 // Internal
+#define FUN_LOCALHEAPSIZE 162 // Internal
+#define FUN_LOCALINIT 4 //
+#define FUN_LOCALLOCK 8 //
+#define FUN_LOCALNOTIFY 14 // Internal, proto
+#define FUN_LOCALREALLOC 6 //
+#define FUN_LOCALSHRINK 121 //
+#define FUN_LOCALSIZE 10 //
+#define FUN_LOCALUNLOCK 9 //
+#define FUN_LOCKCURRENTTASK 33 // Internal
+#define FUN_LOCKRESOURCE 62 //
+#define FUN_LOCKSEGMENT 23 //
+#define FUN_LONGPTRADD 180 // No proto
+#define FUN_LSTRCAT 89 //
+#define FUN_LSTRCPY 88 //
+#define FUN_LSTRLEN 90 //
+#define FUN_MAKEPROCINSTANCE 51 //
+#define FUN_MEMORYFREED 126 // Internal
+#define FUN_NETBIOSCALL 103 // No proto
+#define FUN_NOHOOKDOSCALL 101 // Internal
+#define FUN_OLDYIELD 117 // Internal
+#define FUN_OPENFILE 74 //
+#define FUN_OPENPATHNAME 75 // Internal
+#define FUN_OUTPUTDEBUGSTRING 115 //
+#define FUN_PATCHCODEHANDLE 110 // Internal
+#define FUN_POSTEVENT 31 // Internal
+#define FUN_PRESTOCHANGOSELECTOR 177 // Internal
+#define FUN_REGISTERPTRACE 202 // Internal
+#define FUN_REGENUMKEY32 216
+#define FUN_REGOPENKEY32 217
+#define FUN_REGCLOSEKEY32 220
+#define FUN_REGENUMVALUE32 223
+#define FUN_REPLACEINST 201 // Internal
+#define FUN_RESERVED1 77 // ANSINEXT
+#define FUN_RESERVED2 78 // ANSIPREV
+#define FUN_RESERVED3 79 // ANSIUPPER
+#define FUN_RESERVED4 80 // ANSILOWER
+#define FUN_RESERVED5 87 // LSTRORIGINAL
+#define FUN_SELECTORACCESSRIGHTS 196 // No proto
+#define FUN_SETERRORMODE 107 //
+#define FUN_SETHANDLECOUNT 199 //
+#define FUN_SETPRIORITY 32 // Internal
+#define FUN_SETRESOURCEHANDLER 67 //
+#define FUN_SETSELECTORBASE 187 // Internal
+#define FUN_SETSELECTORLIMIT 189 // Internal
+#define FUN_SETSIGHANDLER 140 // Internal
+#define FUN_SETSWAPAREASIZE 106 //
+#define FUN_SETTASKQUEUE 34 // Internal
+#define FUN_SETTASKSIGNALPROC 38 // Internal
+#define FUN_SIZEOFRESOURCE 65 //
+#define FUN_SWAPRECORDING 204 //
+#define FUN_SWITCHSTACKBACK 109 // Internal, proto
+#define FUN_SWITCHSTACKTO 108 // Internal, proto
+#define FUN_THROW 56 //
+#define FUN_UNDEFDYNLINK 120 // Internal
+#define FUN_UNLOCKSEGMENT 24 //
+#define FUN_VALIDATECODESEGMENTS 100 //
+#define FUN_VALIDATEFREESPACES 200 //
+#define FUN_WAITEVENT 30 // Internal
+#define FUN_WINEXEC 166 //
+#define FUN_WINOLDAPCALL 151 // Internal
+#define FUN_WRITEOUTPROFILES 213 // Internal
+#define FUN_WRITEPRIVATEPROFILESTRING 129 //
+#define FUN_WRITEPROFILESTRING 59 //
+#define FUN_YIELD 29 //
+#define FUN__LCLOSE 81 //
+#define FUN__LCREAT 83 //
+#define FUN__LLSEEK 84 //
+#define FUN__LOPEN 85 //
+#define FUN__LREAD 82 //
+#define FUN__LWRITE 86 //
+#define FUN___0000h 183 // No proto
+#define FUN___0040h 193 // No proto
+#define FUN___A000h 174 // No proto
+#define FUN___AHINCR 114 // No proto
+#define FUN___AHSHIFT 113 // No proto
+#define FUN___B000h 181 // No proto
+#define FUN___B800h 182 // No proto
+#define FUN___C000h 195 // No proto
+#define FUN___D000h 179 // No proto
+#define FUN___E000h 190 // No proto
+#define FUN___F000h 194 // No proto
+#define FUN___ROMBIOS 173 // No proto
+#define FUN___WINFLAGS 178 // No proto
+
+// private kernel thunks
+#define FUN_WOWSHOULDWESAYWIN95 215 // internal
+#define FUN_WOWINITTASK 287 // internal
+#define FUN_WOWKILLTASK 288 // internal
+#define FUN_WOWFREERESOURCE 218 // internal
+#define FUN_WOWFILEREAD 219 // internal
+#define FUN_WOWFILEWRITE 290 // internal
+#define FUN_WOWFILELSEEK 221 // internal
+#define FUN_WOWKERNELTRACE 222 // internal
+#define FUN_WOWGETNEXTVDMCOMMAND 293 // internal
+#define FUN_WOWREGISTERSHELLWINDOWHANDLE 224 // internal
+#define FUN_WOWLOADMODULE 225 // internal
+#define FUN_WOWQUERYPERFORMANCECOUNTER 226 // internal
+#define FUN_WOWOUTPUTDEBUGSTRING 227 // internal
+#define FUN_WOWCURSORICONOP 228 // internal
+#define FUN_WOWFAILEDEXEC 229 // internal
+#define FUN_WOWGETFASTADDRESS 230 // internal
+#define FUN_WOWCLOSECOMPORT 231 // internal
+#define FUN_WOWDELFILE 232 // internal
+#define FUN_VIRTUALALLOC 233 // internal
+#define FUN_VIRTUALFREE 234 // internal
+#define FUN_VIRTUALLOCK 235 // internal
+#define FUN_VIRTUALUNLOCK 236 // internal
+#define FUN_GLOBALMEMORYSTATUS 237 // internal
+#define FUN_WOWGETFASTCBRETADDRESS 238 // internal
+#define FUN_WOWGETTABLEOFFSETS 239 // internal
+#define FUN_WOWKILLREMOTETASK 240 // internal
+#define FUN_WOWNOTIFYWOW32 241 // internal
+#define FUN_WOWFILEOPEN 242 // internal
+#define FUN_WOWFILECLOSE 243 // internal
+#define FUN_WOWSETIDLEHOOK 244 // internal: set the hook for system idle detection
+#define FUN_KSYSERRORBOX 245 // Internal
+#define FUN_WOWISKNOWNDLL 246 // internal
+#define FUN_WOWDDEFREEHANDLE 247 // internal
+#define FUN_WOWFILEGETATTRIBUTES 248 // internal
+#define FUN_WOWFILEGETDATETIME 249 // internal
+#define FUN_WOWFILELOCK 250 // internal
+#define FUN_LOADLIBRARYEX32W 251 //
+#define FUN_FREELIBRARY32W 252 //
+#define FUN_GETPROCADDRESS32W 253 //
+#define FUN_GETVDMPOINTER32W 254 //
+#define FUN_ICALLPROC32W 255 //
+
+#define FUN_EXITWINDOWSEXECCONTINUE 256 // To continue ExitWindowsExec in USER
+
+#define FUN_WOWFINDFIRST 257 // internal
+#define FUN_WOWFINDNEXT 258 // internal
+#define FUN_WOWSETDEFAULTDRIVE 259 // internal
+#define FUN_WOWGETCURRENTDIRECTORY 260 // internal
+#define FUN_WOWSETCURRENTDIRECTORY 261 // internal
+#define FUN_WOWWAITFORMSGANDEVENT 262 // internal
+#define FUN_WOWMSGBOX 263 // internal
+#define FUN_WOWGETFLATADDRESSARRAY 264 // internal
+#define FUN_WOWGETCURRENTDATE 265 // internal
+
+#define FUN_WOWDEVICEIOCTL 267 // internal
+#define FUN_WOWFILESETATTRIBUTES 268 // internal
+#define FUN_WOWFILESETDATETIME 269 // internal
+#define FUN_WOWFILECREATE 270 // internal
+#define FUN_WOWDOSWOWINIT 271 // internal
+#define FUN_WOWCHECKUSERGDI 272 // internal
+#define FUN_WOWPARTYBYNUMBER 273 // internal
+#define FUN_GETSHORTPATHNAME 274
+#define FUN_FINDANDRELEASEDIB 275 // internal
+#define FUN_WOWRESERVEHTASK 276 // internal
+
+/* XLATOFF */
+#pragma pack(2)
+/* XLATON */
+
+typedef struct _ACCESSRESOURCE16 { /* k64 */
+ HAND16 f2;
+ HAND16 f1;
+} ACCESSRESOURCE16;
+typedef ACCESSRESOURCE16 UNALIGNED *PACCESSRESOURCE16;
+
+typedef struct _ADDATOM16 { /* k70 */
+ VPSTR f1;
+} ADDATOM16;
+typedef ADDATOM16 UNALIGNED *PADDATOM16;
+
+typedef struct _ALLOCDSTOCSALIAS16 { /* k171 */
+ WORD f1;
+} ALLOCDSTOCSALIAS16;
+typedef ALLOCDSTOCSALIAS16 UNALIGNED *PALLOCDSTOCSALIAS16;
+
+typedef struct _ALLOCRESOURCE16 { /* k66 */
+ DWORD f3;
+ HAND16 f2;
+ HAND16 f1;
+} ALLOCRESOURCE16;
+typedef ALLOCRESOURCE16 UNALIGNED *PALLOCRESOURCE16;
+
+typedef struct _ALLOCSELECTOR16 { /* k175 */
+ WORD f1;
+} ALLOCSELECTOR16;
+typedef ALLOCSELECTOR16 UNALIGNED *PALLOCSELECTOR16;
+
+typedef struct _CATCH16 { /* k55 */
+ VPCATCHBUF16 f1;
+} CATCH16;
+typedef CATCH16 UNALIGNED *PCATCH16;
+
+#ifdef NULLSTRUCT
+typedef struct _DEBUGBREAK16 { /* k203 */
+} DEBUGBREAK16;
+typedef DEBUGBREAK16 UNALIGNED *PDEBUGBREAK16;
+#endif
+
+typedef struct _DELETEATOM16 { /* k71 */
+ ATOM f1;
+} DELETEATOM16;
+typedef DELETEATOM16 UNALIGNED *PDELETEATOM16;
+
+typedef struct _EXITKERNEL16 { /* k2 */
+ WORD wExitCode;
+} EXITKERNEL16;
+typedef EXITKERNEL16 UNALIGNED *PEXITKERNEL16;
+
+typedef struct _FATALEXIT16 { /* k1 */
+ SHORT f1;
+} FATALEXIT16;
+typedef FATALEXIT16 UNALIGNED *PFATALEXIT16;
+
+typedef struct _FINDATOM16 { /* k69 */
+ VPSTR f1;
+} FINDATOM16;
+typedef FINDATOM16 UNALIGNED *PFINDATOM16;
+
+typedef struct _FINDRESOURCE16 { /* k60 */
+ VPSTR f3;
+ VPSTR f2;
+ HAND16 f1;
+} FINDRESOURCE16;
+typedef FINDRESOURCE16 UNALIGNED *PFINDRESOURCE16;
+
+typedef struct _FREELIBRARY16 { /* k96 */
+ HAND16 f1;
+} FREELIBRARY16;
+typedef FREELIBRARY16 UNALIGNED *PFREELIBRARY16;
+
+typedef struct _FREEMODULE16 { /* k46 */
+ HAND16 f1;
+} FREEMODULE16;
+typedef FREEMODULE16 UNALIGNED *PFREEMODULE16;
+
+typedef struct _FREEPROCINSTANCE16 { /* k52 */
+ VPPROC f1;
+} FREEPROCINSTANCE16;
+typedef FREEPROCINSTANCE16 UNALIGNED *PFREEPROCINSTANCE16;
+
+typedef struct _FREERESOURCE16 { /* k63 */
+ HAND16 f1;
+} FREERESOURCE16;
+typedef FREERESOURCE16 UNALIGNED *PFREERESOURCE16;
+
+typedef struct _FREESELECTOR16 { /* k176 */
+ WORD f1;
+} FREESELECTOR16;
+typedef FREESELECTOR16 UNALIGNED *PFREESELECTOR16;
+
+typedef struct _GETATOMHANDLE16 { /* k73 */
+ ATOM f1;
+} GETATOMHANDLE16;
+typedef GETATOMHANDLE16 UNALIGNED *PGETATOMHANDLE16;
+
+typedef struct _GETATOMNAME16 { /* k72 */
+ SHORT f3;
+ VPSTR f2;
+ ATOM f1;
+} GETATOMNAME16;
+typedef GETATOMNAME16 UNALIGNED *PGETATOMNAME16;
+
+typedef struct _GETCODEHANDLE16 { /* k93 */
+ VPPROC f1;
+} GETCODEHANDLE16;
+typedef GETCODEHANDLE16 UNALIGNED *PGETCODEHANDLE16;
+
+typedef struct _GETCODEINFO16 { /* k104 */
+ VPVOID vpSegInfo;
+ VPPROC vpProc;
+} GETCODEINFO16;
+typedef GETCODEINFO16 UNALIGNED *PGETCODEINFO16;
+
+#ifdef NULLSTRUCT
+typedef struct _GETCURRENTPDB16 { /* k37 */
+} GETCURRENTPDB16;
+typedef GETCURRENTPDB16 UNALIGNED *PGETCURRENTPDB16;
+#endif
+
+#ifdef NULLSTRUCT
+typedef struct _GETCURRENTTASK16 { /* k36 */
+} GETCURRENTTASK16;
+typedef GETCURRENTTASK16 UNALIGNED *PGETCURRENTTASK16;
+#endif
+
+#ifdef NULLSTRUCT
+typedef struct _GETDOSENVIRONMENT16 { /* k131 */
+} GETDOSENVIRONMENT16;
+typedef GETDOSENVIRONMENT16 UNALIGNED *PGETDOSENVIRONMENT16;
+#endif
+
+typedef struct _GETDRIVETYPE16 { /* k136 */
+ SHORT f1;
+} GETDRIVETYPE16;
+typedef GETDRIVETYPE16 UNALIGNED *PGETDRIVETYPE16;
+
+typedef struct _GETFREESPACE16 { /* k169 */
+ WORD f1;
+} GETFREESPACE16;
+typedef GETFREESPACE16 UNALIGNED *PGETFREESPACE16;
+
+typedef struct _GETINSTANCEDATA16 { /* k54 */
+ SHORT f3;
+ WORD f2;
+ HAND16 f1;
+} GETINSTANCEDATA16;
+typedef GETINSTANCEDATA16 UNALIGNED *PGETINSTANCEDATA16;
+
+typedef struct _GETMODULEFILENAME16 { /* k49 */
+ SHORT f3;
+ VPSTR f2;
+ HAND16 f1;
+} GETMODULEFILENAME16;
+typedef GETMODULEFILENAME16 UNALIGNED *PGETMODULEFILENAME16;
+
+typedef struct _WOWGETMODULEHANDLE16 { /* k47 */
+ VPSTR lpszModuleName;
+} WOWGETMODULEHANDLE16;
+typedef WOWGETMODULEHANDLE16 UNALIGNED *PWOWGETMODULEHANDLE16;
+
+typedef struct _GETMODULEUSAGE16 { /* k48 */
+ HAND16 f1;
+} GETMODULEUSAGE16;
+typedef GETMODULEUSAGE16 UNALIGNED *PGETMODULEUSAGE16;
+
+#ifdef NULLSTRUCT
+typedef struct _GETNUMTASKS16 { /* k152 */
+} GETNUMTASKS16;
+typedef GETNUMTASKS16 UNALIGNED *PGETNUMTASKS16;
+#endif
+
+typedef struct _GETPRIVATEPROFILEINT16 { /* k127 */
+ VPSTR f4;
+ SHORT f3;
+ VPSTR f2;
+ VPSTR f1;
+} GETPRIVATEPROFILEINT16;
+typedef GETPRIVATEPROFILEINT16 UNALIGNED *PGETPRIVATEPROFILEINT16;
+
+typedef struct _GETPRIVATEPROFILESTRING16 { /* k128 */
+ VPSTR f6;
+ USHORT f5;
+ VPSTR f4;
+ VPSTR f3;
+ VPSTR f2;
+ VPSTR f1;
+} GETPRIVATEPROFILESTRING16;
+typedef GETPRIVATEPROFILESTRING16 UNALIGNED *PGETPRIVATEPROFILESTRING16;
+
+typedef struct _GETPROCADDRESS16 { /* k50 */
+ VPSTR f2;
+ HAND16 f1;
+} GETPROCADDRESS16;
+typedef GETPROCADDRESS16 UNALIGNED *PGETPROCADDRESS16;
+
+typedef struct _GETPROFILEINT16 { /* k57 */
+ SHORT f3;
+ VPSTR f2;
+ VPSTR f1;
+} GETPROFILEINT16;
+typedef GETPROFILEINT16 UNALIGNED *PGETPROFILEINT16;
+
+typedef struct _GETPROFILESTRING16 { /* k58 */
+ USHORT f5;
+ VPSTR f4;
+ VPSTR f3;
+ VPSTR f2;
+ VPSTR f1;
+} GETPROFILESTRING16;
+typedef GETPROFILESTRING16 UNALIGNED *PGETPROFILESTRING16;
+
+typedef struct _GETSYSTEMDIRECTORY16 { /* k135 */
+ WORD f2;
+ VPSTR f1;
+} GETSYSTEMDIRECTORY16;
+typedef GETSYSTEMDIRECTORY16 UNALIGNED *PGETSYSTEMDIRECTORY16;
+
+typedef struct _GETTEMPDRIVE16 { /* k92 */
+ WORD f1;
+} GETTEMPDRIVE16;
+typedef GETTEMPDRIVE16 UNALIGNED *PGETTEMPDRIVE16;
+
+typedef struct _GETTEMPFILENAME16 { /* k97 */
+ VPSTR f4;
+ WORD f3;
+ VPSTR f2;
+ WORD f1;
+} GETTEMPFILENAME16;
+typedef GETTEMPFILENAME16 UNALIGNED *PGETTEMPFILENAME16;
+
+#ifdef NULLSTRUCT
+typedef struct _GETVERSION16 { /* k3 */
+} GETVERSION16;
+typedef GETVERSION16 UNALIGNED *PGETVERSION16;
+#endif
+
+typedef struct _GETVERSIONEX16 { /* k149 */
+ VPVOID lpVersionInfo;
+} GETVERSIONEX16;
+typedef GETVERSIONEX16 UNALIGNED *PGETVERSIONEX16;
+
+typedef struct _GETWINDOWSDIRECTORY16 { /* k134 */
+ WORD f2;
+ VPSTR f1;
+} GETWINDOWSDIRECTORY16;
+typedef GETWINDOWSDIRECTORY16 UNALIGNED *PGETWINDOWSDIRECTORY16;
+
+#ifdef NULLSTRUCT
+typedef struct _GETWINFLAGS16 { /* k132 */
+} GETWINFLAGS16;
+typedef GETWINFLAGS16 UNALIGNED *PGETWINFLAGS16;
+#endif
+
+typedef struct _GLOBALALLOC16 { /* k15 */
+ DWORD f2;
+ WORD f1;
+} GLOBALALLOC16;
+typedef GLOBALALLOC16 UNALIGNED *PGLOBALALLOC16;
+
+typedef struct _GLOBALCOMPACT16 { /* k25 */
+ DWORD f1;
+} GLOBALCOMPACT16;
+typedef GLOBALCOMPACT16 UNALIGNED *PGLOBALCOMPACT16;
+
+typedef struct _GLOBALFIX16 { /* k197 */
+ HAND16 f1;
+} GLOBALFIX16;
+typedef GLOBALFIX16 UNALIGNED *PGLOBALFIX16;
+
+typedef struct _GLOBALFLAGS16 { /* k22 */
+ HAND16 f1;
+} GLOBALFLAGS16;
+typedef GLOBALFLAGS16 UNALIGNED *PGLOBALFLAGS16;
+
+typedef struct _GLOBALFREE16 { /* k17 */
+ HAND16 f1;
+} GLOBALFREE16;
+typedef GLOBALFREE16 UNALIGNED *PGLOBALFREE16;
+
+typedef struct _GLOBALHANDLE16 { /* k21 */
+ WORD f1;
+} GLOBALHANDLE16;
+typedef GLOBALHANDLE16 UNALIGNED *PGLOBALHANDLE16;
+
+typedef struct _GLOBALLOCK16 { /* k18 */
+ HAND16 f1;
+} GLOBALLOCK16;
+typedef GLOBALLOCK16 UNALIGNED *PGLOBALLOCK16;
+
+typedef struct _GLOBALLRUNEWEST16 { /* k164 */
+ HAND16 f1;
+} GLOBALLRUNEWEST16;
+typedef GLOBALLRUNEWEST16 UNALIGNED *PGLOBALLRUNEWEST16;
+
+typedef struct _GLOBALLRUOLDEST16 { /* k163 */
+ HAND16 f1;
+} GLOBALLRUOLDEST16;
+typedef GLOBALLRUOLDEST16 UNALIGNED *PGLOBALLRUOLDEST16;
+
+typedef struct _GLOBALNOTIFY16 { /* k154 */
+ VPPROC f1;
+} GLOBALNOTIFY16;
+typedef GLOBALNOTIFY16 UNALIGNED *PGLOBALNOTIFY16;
+
+typedef struct _GLOBALPAGELOCK16 { /* k191 */
+ HAND16 f1;
+} GLOBALPAGELOCK16;
+typedef GLOBALPAGELOCK16 UNALIGNED *PGLOBALPAGELOCK16;
+
+typedef struct _GLOBALPAGEUNLOCK16 { /* k192 */
+ HAND16 f1;
+} GLOBALPAGEUNLOCK16;
+typedef GLOBALPAGEUNLOCK16 UNALIGNED *PGLOBALPAGEUNLOCK16;
+
+typedef struct _GLOBALREALLOC16 { /* k16 */
+ WORD f3;
+ DWORD f2;
+ HAND16 f1;
+} GLOBALREALLOC16;
+typedef GLOBALREALLOC16 UNALIGNED *PGLOBALREALLOC16;
+
+typedef struct _GLOBALSIZE16 { /* k20 */
+ HAND16 f1;
+} GLOBALSIZE16;
+typedef GLOBALSIZE16 UNALIGNED *PGLOBALSIZE16;
+
+typedef struct _GLOBALUNFIX16 { /* k198 */
+ HAND16 f1;
+} GLOBALUNFIX16;
+typedef GLOBALUNFIX16 UNALIGNED *PGLOBALUNFIX16;
+
+typedef struct _GLOBALUNLOCK16 { /* k19 */
+ HAND16 f1;
+} GLOBALUNLOCK16;
+typedef GLOBALUNLOCK16 UNALIGNED *PGLOBALUNLOCK16;
+
+typedef struct _GLOBALUNWIRE16 { /* k112 */
+ HAND16 f1;
+} GLOBALUNWIRE16;
+typedef GLOBALUNWIRE16 UNALIGNED *PGLOBALUNWIRE16;
+
+typedef struct _GLOBALWIRE16 { /* k111 */
+ HAND16 f1;
+} GLOBALWIRE16;
+typedef GLOBALWIRE16 UNALIGNED *PGLOBALWIRE16;
+
+typedef struct _INITATOMTABLE16 { /* k68 */
+ SHORT f1;
+} INITATOMTABLE16;
+typedef INITATOMTABLE16 UNALIGNED *PINITATOMTABLE16;
+
+#ifdef NULLSTRUCT
+typedef struct _INITTASK16 { /* k91 */
+} INITTASK16;
+typedef INITTASK16 UNALIGNED *PINITTASK16;
+#endif
+
+typedef struct _LIMITEMSPAGES16 { /* k156 */
+ DWORD f1;
+} LIMITEMSPAGES16;
+typedef LIMITEMSPAGES16 UNALIGNED *PLIMITEMSPAGES16;
+
+typedef struct _LOADLIBRARY16 { /* k95 */
+ VPSTR f1;
+} LOADLIBRARY16;
+typedef LOADLIBRARY16 UNALIGNED *PLOADLIBRARY16;
+
+typedef struct _LOADMODULE16 { /* k45 */
+ VPVOID f2;
+ VPSTR f1;
+} LOADMODULE16;
+typedef LOADMODULE16 UNALIGNED *PLOADMODULE16;
+
+typedef struct _LOADRESOURCE16 { /* k61 */
+ HAND16 f2;
+ HAND16 f1;
+} LOADRESOURCE16;
+typedef LOADRESOURCE16 UNALIGNED *PLOADRESOURCE16;
+
+typedef struct _LOCALALLOC16 { /* k5 */
+ WORD f2;
+ WORD f1;
+} LOCALALLOC16;
+typedef LOCALALLOC16 UNALIGNED *PLOCALALLOC16;
+
+typedef struct _LOCALCOMPACT16 { /* k13 */
+ WORD f1;
+} LOCALCOMPACT16;
+typedef LOCALCOMPACT16 UNALIGNED *PLOCALCOMPACT16;
+
+typedef struct _LOCALFLAGS16 { /* k12 */
+ HAND16 f1;
+} LOCALFLAGS16;
+typedef LOCALFLAGS16 UNALIGNED *PLOCALFLAGS16;
+
+typedef struct _LOCALFREE16 { /* k7 */
+ HAND16 f1;
+} LOCALFREE16;
+typedef LOCALFREE16 UNALIGNED *PLOCALFREE16;
+
+typedef struct _LOCALHANDLE16 { /* k11 */
+ WORD f1;
+} LOCALHANDLE16;
+typedef LOCALHANDLE16 UNALIGNED *PLOCALHANDLE16;
+
+typedef struct _LOCALINIT16 { /* k4 */
+ WORD f3;
+ WORD f2;
+ WORD f1;
+} LOCALINIT16;
+typedef LOCALINIT16 UNALIGNED *PLOCALINIT16;
+
+typedef struct _LOCALLOCK16 { /* k8 */
+ HAND16 f1;
+} LOCALLOCK16;
+typedef LOCALLOCK16 UNALIGNED *PLOCALLOCK16;
+
+typedef struct _LOCALNOTIFY16 { /* k14 */
+ VPPROC f1;
+} LOCALNOTIFY16;
+typedef LOCALNOTIFY16 UNALIGNED *PLOCALNOTIFY16;
+
+typedef struct _LOCALREALLOC16 { /* k6 */
+ WORD f3;
+ WORD f2;
+ HAND16 f1;
+} LOCALREALLOC16;
+typedef LOCALREALLOC16 UNALIGNED *PLOCALREALLOC16;
+
+typedef struct _LOCALSHRINK16 { /* k121 */
+ WORD f2;
+ HAND16 f1;
+} LOCALSHRINK16;
+typedef LOCALSHRINK16 UNALIGNED *PLOCALSHRINK16;
+
+typedef struct _LOCALSIZE16 { /* k10 */
+ HAND16 f1;
+} LOCALSIZE16;
+typedef LOCALSIZE16 UNALIGNED *PLOCALSIZE16;
+
+typedef struct _LOCALUNLOCK16 { /* k9 */
+ HAND16 f1;
+} LOCALUNLOCK16;
+typedef LOCALUNLOCK16 UNALIGNED *PLOCALUNLOCK16;
+
+typedef struct _LOCKRESOURCE16 { /* k62 */
+ HAND16 f1;
+} LOCKRESOURCE16;
+typedef LOCKRESOURCE16 UNALIGNED *PLOCKRESOURCE16;
+
+typedef struct _LOCKSEGMENT16 { /* k23 */
+ WORD f1;
+} LOCKSEGMENT16;
+typedef LOCKSEGMENT16 UNALIGNED *PLOCKSEGMENT16;
+
+typedef struct _LSTRCAT16 { /* k89 */
+ VPSTR f2;
+ VPSTR f1;
+} LSTRCAT16;
+typedef LSTRCAT16 UNALIGNED *PLSTRCAT16;
+
+typedef struct _LSTRCPY16 { /* k88 */
+ VPSTR f2;
+ VPSTR f1;
+} LSTRCPY16;
+typedef LSTRCPY16 UNALIGNED *PLSTRCPY16;
+
+typedef struct _LSTRLEN16 { /* k90 */
+ VPSTR f1;
+} LSTRLEN16;
+typedef LSTRLEN16 UNALIGNED *PLSTRLEN16;
+
+typedef struct _MAKEPROCINSTANCE16 { /* k51 */
+ HAND16 f2;
+ VPPROC f1;
+} MAKEPROCINSTANCE16;
+typedef MAKEPROCINSTANCE16 UNALIGNED *PMAKEPROCINSTANCE16;
+
+typedef struct _OPENFILE16 { /* k74 */
+ WORD f3;
+ VPOFSTRUCT16 f2;
+ VPSTR f1;
+} OPENFILE16;
+typedef OPENFILE16 UNALIGNED *POPENFILE16;
+
+typedef struct _OUTPUTDEBUGSTRING16 { /* k115 */
+ VPSTR vpString;
+} OUTPUTDEBUGSTRING16;
+typedef OUTPUTDEBUGSTRING16 UNALIGNED *POUTPUTDEBUGSTRING16;
+
+typedef struct _SETERRORMODE16 { /* k107 */
+ WORD f1;
+} SETERRORMODE16;
+typedef SETERRORMODE16 UNALIGNED *PSETERRORMODE16;
+
+typedef struct _SETHANDLECOUNT16 { /* k199 */
+ WORD f1;
+} SETHANDLECOUNT16;
+typedef SETHANDLECOUNT16 UNALIGNED *PSETHANDLECOUNT16;
+
+typedef struct _SETRESOURCEHANDLER16 { /* k67 */
+ VPPROC f3;
+ VPSTR f2;
+ HAND16 f1;
+} SETRESOURCEHANDLER16;
+typedef SETRESOURCEHANDLER16 UNALIGNED *PSETRESOURCEHANDLER16;
+
+typedef struct _SETSWAPAREASIZE16 { /* k106 */
+ WORD f1;
+} SETSWAPAREASIZE16;
+typedef SETSWAPAREASIZE16 UNALIGNED *PSETSWAPAREASIZE16;
+
+typedef struct _SIZEOFRESOURCE16 { /* k65 */
+ HAND16 f2;
+ HAND16 f1;
+} SIZEOFRESOURCE16;
+typedef SIZEOFRESOURCE16 UNALIGNED *PSIZEOFRESOURCE16;
+
+typedef struct _SWAPRECORDING16 { /* k204 */
+ WORD f1;
+} SWAPRECORDING16;
+typedef SWAPRECORDING16 UNALIGNED *PSWAPRECORDING16;
+
+#ifdef NULLSTRUCT
+typedef struct _SWITCHSTACKBACK16 { /* k109 */
+} SWITCHSTACKBACK16;
+typedef SWITCHSTACKBACK16 UNALIGNED *PSWITCHSTACKBACK16;
+#endif
+
+typedef struct _SWITCHSTACKTO16 { /* k108 */
+ WORD f3;
+ WORD f2;
+ WORD f1;
+} SWITCHSTACKTO16;
+typedef SWITCHSTACKTO16 UNALIGNED *PSWITCHSTACKTO16;
+
+typedef struct _THROW16 { /* k56 */
+ SHORT f2;
+ VPCATCHBUF16 f1;
+} THROW16;
+typedef THROW16 UNALIGNED *PTHROW16;
+
+typedef struct _UNLOCKSEGMENT16 { /* k24 */
+ WORD f1;
+} UNLOCKSEGMENT16;
+typedef UNLOCKSEGMENT16 UNALIGNED *PUNLOCKSEGMENT16;
+
+#ifdef NULLSTRUCT
+typedef struct _VALIDATECODESEGMENTS16 { /* k100 */
+} VALIDATECODESEGMENTS16;
+typedef VALIDATECODESEGMENTS16 UNALIGNED *PVALIDATECODESEGMENTS16;
+#endif
+
+#ifdef NULLSTRUCT
+typedef struct _VALIDATEFREESPACES16 { /* k200 */
+} VALIDATEFREESPACES16;
+typedef VALIDATEFREESPACES16 UNALIGNED *PVALIDATEFREESPACES16;
+#endif
+
+typedef struct _WAITEVENT16 { /* k30 */
+ WORD wTaskID;
+} WAITEVENT16;
+typedef WAITEVENT16 UNALIGNED *PWAITEVENT16;
+
+typedef struct _WINEXEC16 { /* k166 */
+ WORD f2;
+ VPSTR f1;
+} WINEXEC16;
+typedef WINEXEC16 UNALIGNED *PWINEXEC16;
+
+typedef struct _WRITEPRIVATEPROFILESTRING16 { /* k129 */
+ VPSTR f4;
+ VPSTR f3;
+ VPSTR f2;
+ VPSTR f1;
+} WRITEPRIVATEPROFILESTRING16;
+typedef WRITEPRIVATEPROFILESTRING16 UNALIGNED *PWRITEPRIVATEPROFILESTRING16;
+
+typedef struct _WRITEPROFILESTRING16 { /* k59 */
+ VPSTR f3;
+ VPSTR f2;
+ VPSTR f1;
+} WRITEPROFILESTRING16;
+typedef WRITEPROFILESTRING16 UNALIGNED *PWRITEPROFILESTRING16;
+
+#ifdef NULLSTRUCT
+typedef struct _YIELD16 { /* k29 */
+} YIELD16;
+typedef YIELD16 UNALIGNED *PYIELD16;
+#endif
+
+typedef struct __LCLOSE16 { /* k81 */
+ SHORT f1;
+} _LCLOSE16;
+typedef _LCLOSE16 UNALIGNED *P_LCLOSE16;
+
+typedef struct __LCREAT16 { /* k83 */
+ SHORT f2;
+ VPSTR f1;
+} _LCREAT16;
+typedef _LCREAT16 UNALIGNED *P_LCREAT16;
+
+typedef struct __LLSEEK16 { /* k84 */
+ SHORT f3;
+ LONG f2;
+ SHORT f1;
+} _LLSEEK16;
+typedef _LLSEEK16 UNALIGNED *P_LLSEEK16;
+
+typedef struct __LOPEN16 { /* k85 */
+ SHORT f2;
+ VPSTR f1;
+} _LOPEN16;
+typedef _LOPEN16 UNALIGNED *P_LOPEN16;
+
+typedef struct __LREAD16 { /* k82 */
+ SHORT f3;
+ VPSTR f2;
+ SHORT f1;
+} _LREAD16;
+typedef _LREAD16 UNALIGNED *P_LREAD16;
+
+typedef struct __LWRITE16 { /* k86 */
+ SHORT f3;
+ VPSTR f2;
+ SHORT f1;
+} _LWRITE16;
+typedef _LWRITE16 UNALIGNED *P_LWRITE16;
+
+typedef struct _FILEIOREAD16 { /* K211 */
+ DWORD lpSFT;
+ DWORD lpPDB;
+ DWORD bufsize;
+ DWORD lpBuf;
+ WORD fh;
+} FILEIOREAD16;
+typedef FILEIOREAD16 UNALIGNED *PFILEIOREAD16;
+
+typedef struct _FILEIOWRITE16 { /* K290 */
+ DWORD lpSFT;
+ DWORD lpPDB;
+ DWORD bufsize;
+ DWORD lpBuf;
+ WORD fh;
+} FILEIOWRITE16;
+typedef FILEIOWRITE16 UNALIGNED *PFILEIOWRITE16;
+
+typedef struct _FILEIOLSEEK16 { /* K213 */
+ DWORD lpSFT;
+ DWORD lpPDB;
+ WORD mode;
+ DWORD fileOffset;
+ WORD fh;
+} FILEIOLSEEK16;
+typedef FILEIOLSEEK16 UNALIGNED *PFILEIOLSEEK16;
+
+typedef struct _KERNELTRACE16 { /* K214 */
+ DWORD lpUserArgs;
+ WORD cParms;
+ VPSTR lpRoutineName;
+} KERNELTRACE16;
+typedef KERNELTRACE16 UNALIGNED *PKERNELTRACE16;
+
+typedef struct _WOWGETNEXTVDMCOMMAND16 { /* k293 */
+ VPVOID lpWowInfo;
+} WOWGETNEXTVDMCOMMAND16;
+typedef WOWGETNEXTVDMCOMMAND16 UNALIGNED *PWOWGETNEXTVDMCOMMAND16;
+
+typedef struct _WOWREGISTERSHELLWINDOWHANDLE16 { /* k504 */
+ HWND16 hwndFax;
+ VPWORD lpwCmdShow;
+ HWND16 hwndShell;
+} WOWREGISTERSHELLWINDOWHANDLE16;
+typedef WOWREGISTERSHELLWINDOWHANDLE16 UNALIGNED *PWOWREGISTERSHELLWINDOWHANDLE16;
+
+typedef struct _WOWLOADMODULE16 { /* k505 */
+ VPSTR lpWinOldAppCmd;
+ VPVOID lpParameterBlock;
+ VPSTR lpModuleName;
+} WOWLOADMODULE16;
+typedef WOWLOADMODULE16 UNALIGNED *PWOWLOADMODULE16;
+
+typedef struct _WOWQUERYPERFORMANCECOUNTER16 { /* k506 */
+ VPVOID lpPerformanceFrequency;
+ VPVOID lpPerformanceCounter;
+} WOWQUERYPERFORMANCECOUNTER16;
+typedef WOWQUERYPERFORMANCECOUNTER16 UNALIGNED *PWOWQUERYPERFORMANCECOUNTER16;
+
+typedef struct _WOWCURSORICONOP16 { /* K507 */
+ WORD wFuncId;
+ WORD h16;
+} WOWCURSORICONOP16;
+typedef WOWCURSORICONOP16 UNALIGNED *PWOWCURSORICONOP16;
+
+
+typedef struct _WOWINITTASK16 { /* K287 */
+ DWORD dwExpWinVer;
+} WOWINITTASK16;
+typedef WOWINITTASK16 UNALIGNED *PWOWINITTASK16;
+
+typedef struct _PARAMETERBLOCK16 { /* lpParameterBlock */
+ WORD wEnvSeg;
+ VPVOID lpCmdLine;
+ VPVOID lpCmdShow;
+ DWORD dwReserved;
+} PARAMETERBLOCK16;
+typedef PARAMETERBLOCK16 UNALIGNED *PPARAMETERBLOCK16;
+
+typedef struct _DIRECTEDYIELD16 { /* k150 */
+ WORD hTask16;
+} DIRECTEDYIELD16;
+typedef DIRECTEDYIELD16 UNALIGNED *PDIRECTEDYIELD16;
+
+typedef struct _POSTEVENT16 { /* k31 */
+ WORD hTask16;
+} POSTEVENT16;
+typedef POSTEVENT16 UNALIGNED *PPOSTEVENT16;
+
+typedef struct _SETPRIORITY16 { /* k32 */
+ WORD wPriority;
+ WORD hTask16;
+} SETPRIORITY16;
+typedef SETPRIORITY16 UNALIGNED *PSETPRIORITY16;
+
+typedef struct _LOCKCURRENTTASK16 { /* k33 */
+ WORD fLock;
+} LOCKCURRENTTASK16;
+typedef LOCKCURRENTTASK16 UNALIGNED *PLOCKCURRENTTASK16;
+
+typedef struct _SETTASKQUEUE16 { /* k34 */
+ WORD hQueue;
+ WORD hTask16;
+} SETTASKQUEUE16;
+typedef SETTASKQUEUE16 UNALIGNED *PSETTASKQUEUE16;
+
+typedef struct _WOWCLOSECOMPORT16 { /* k509 */
+ WORD wPortId;
+} WOWCLOSECOMPORT16;
+typedef WOWCLOSECOMPORT16 UNALIGNED *PWOWCLOSECOMPORT16;
+
+typedef struct _WOWDELFILE16 { /* k510 */
+ VPSTR lpFile;
+} WOWDELFILE16;
+typedef WOWDELFILE16 UNALIGNED *PWOWDELFILE16;
+
+typedef struct _FILEIOOPEN16 { /* k242 */
+ DWORD lpSFT;
+ DWORD lpPDB;
+ WORD wAccess;
+ WORD pszPathOffset;
+ WORD pszPathSegment;
+} FILEIOOPEN16;
+typedef FILEIOOPEN16 UNALIGNED *PFILEIOOPEN16;
+
+typedef struct _FILEIOCLOSE16 { /* k243 */
+ DWORD lpSFT;
+ DWORD lpPDB;
+ WORD hFile;
+} FILEIOCLOSE16;
+typedef FILEIOCLOSE16 UNALIGNED *PFILEIOCLOSE16;
+
+typedef struct _FILEIOGETATTRIBUTES16 { /* k248 */
+ WORD pszPathOffset;
+ WORD pszPathSegment;
+} FILEIOGETATTRIBUTES16;
+typedef FILEIOGETATTRIBUTES16 UNALIGNED *PFILEIOGETATTRIBUTES16;
+
+typedef struct _FILEIOGETDATETIME16 { /* k249 */
+ DWORD lpSFT;
+ DWORD lpPDB;
+ WORD fh;
+} FILEIOGETDATETIME16;
+typedef FILEIOGETDATETIME16 UNALIGNED *PFILEIOGETDATETIME16;
+
+typedef struct _FILEIOLOCK16 { /* k250 */
+ DWORD lpSFT;
+ DWORD lpPDB;
+ DWORD cbRegionLength;
+ DWORD cbRegionOffset;
+ WORD fh;
+ WORD ax;
+} FILEIOLOCK16;
+typedef FILEIOLOCK16 UNALIGNED *PFILEIOLOCK16;
+
+typedef struct _VIRTUALALLOC16 { /* i1 */
+ DWORD fdwProtect;
+ DWORD fdwAllocationType;
+ DWORD cbSize;
+ DWORD lpvAddress;
+} VIRTUALALLOC16;
+typedef VIRTUALALLOC16 UNALIGNED *PVIRTUALALLOC16;
+
+typedef struct _VIRTUALFREE16 { /* i2 */
+ DWORD fdwFreeType;
+ DWORD cbSize;
+ DWORD lpvAddress;
+} VIRTUALFREE16;
+typedef VIRTUALFREE16 UNALIGNED *PVIRTUALFREE16;
+
+typedef struct _VIRTUALLOCK16 { /* i3 */
+ DWORD cbSize;
+ DWORD lpvAddress;
+} VIRTUALLOCK16;
+typedef VIRTUALLOCK16 UNALIGNED *PVIRTUALLOCK16;
+
+typedef struct _VIRTUALUNLOCK16 { /* i4 */
+ DWORD cbSize;
+ DWORD lpvAddress;
+} VIRTUALUNLOCK16;
+typedef VIRTUALUNLOCK16 UNALIGNED *PVIRTUALUNLOCK16;
+
+typedef struct _GLOBALMEMORYSTATUS16 { /* i5 */
+ VPVOID lpmstMemStat;
+} GLOBALMEMORYSTATUS16;
+typedef GLOBALMEMORYSTATUS16 UNALIGNED *PGLOBALMEMORYSTATUS16;
+
+typedef struct _WOWGETTABLEOFFSETS16 { /* i6 */
+ VPVOID vpThunkTableOffsets;
+} WOWGETTABLEOFFSETS16;
+typedef WOWGETTABLEOFFSETS16 UNALIGNED *PWOWGETTABLEOFFSETS16;
+
+typedef struct _WOWKILLREMOTETASK16 { /* k511 */
+ VPVOID lpBuffer;
+} WOWKILLREMOTETASK16;
+typedef WOWKILLREMOTETASK16 UNALIGNED *PWOWKILLREMOTETASK16;
+
+typedef struct _WOWNOTIFYWOW3216 { /* k512 */
+ VPVOID Int21Handler;
+ VPVOID lpnum_tasks;
+ VPVOID lpcurTDB;
+ VPVOID lpDebugWOW;
+ VPVOID lpLockTDB;
+ VPVOID lptopPDB;
+ VPVOID lpCurDirOwner;
+} WOWNOTIFYWOW3216;
+typedef WOWNOTIFYWOW3216 UNALIGNED *PWOWNOTIFYWOW3216;
+
+typedef struct _KSYSERRORBOX16 { /* k245 */
+ SHORT sBtn3;
+ SHORT sBtn2;
+ SHORT sBtn1;
+ VPSZ vpszCaption;
+ VPSZ vpszText;
+} KSYSERRORBOX16;
+typedef KSYSERRORBOX16 UNALIGNED *PKSYSERRORBOX16;
+
+
+typedef struct _WOWDDEFREEHANDLE16 { /* kdde */
+ WORD h16;
+} WOWDDEFREEHANDLE16;
+typedef WOWDDEFREEHANDLE16 UNALIGNED *PWOWDDEFREEHANDLE16;
+
+typedef struct _WOWISKNOWNDLL16 { /* k246 */
+ VPVOID lplpszKnownDLLPath;
+ VPVOID lpszPath;
+} WOWISKNOWNDLL16;
+
+typedef struct _LOADLIBRARYEX32 { /* k248 */
+ DWORD dwFlags;
+ DWORD hFile;
+ VPVOID lpszLibFile;
+} LOADLIBRARYEX32;
+typedef LOADLIBRARYEX32 UNALIGNED *PLOADLIBRARYEX32;
+
+typedef struct _FREELIBRARY32 { /* k249 */
+ DWORD hLibModule;
+} FREELIBRARY32;
+typedef FREELIBRARY32 UNALIGNED *PFREELIBRARY32;
+
+
+typedef struct _GETPROCADDRESS32 { /* k250 */
+ VPVOID lpszProc;
+ DWORD hModule;
+} GETPROCADDRESS32;
+typedef GETPROCADDRESS32 UNALIGNED *PGETPROCADDRESS32;
+
+typedef struct _GETVDMPOINTER32 { /* k251 */
+ SHORT fMode;
+ VPVOID lpAddress;
+} GETVDMPOINTER32;
+typedef GETVDMPOINTER32 UNALIGNED *PGETVDMPOINTER32;
+
+
+typedef struct _ICALLPROC32 { /* k252 */
+ WORD rbp;
+ DWORD retaddr;
+ DWORD cParams;
+ DWORD fAddressConvert;
+ DWORD lpProcAddress;
+ DWORD p1;
+ DWORD p2;
+ DWORD p3;
+ DWORD p4;
+ DWORD p5;
+ DWORD p6;
+ DWORD p7;
+ DWORD p8;
+ DWORD p9;
+ DWORD p10;
+ DWORD p11;
+ DWORD p12;
+ DWORD p13;
+ DWORD p14;
+ DWORD p15;
+ DWORD p16;
+ DWORD p17;
+ DWORD p18;
+ DWORD p19;
+ DWORD p20;
+ DWORD p21;
+ DWORD p22;
+ DWORD p23;
+ DWORD p24;
+ DWORD p25;
+ DWORD p26;
+ DWORD p27;
+ DWORD p28;
+ DWORD p29;
+ DWORD p30;
+ DWORD p31;
+ DWORD p32;
+} ICALLPROC32;
+typedef ICALLPROC32 UNALIGNED *PICALLPROC32;
+
+#define CPEX32_DEST_CDECL 0x8000L
+#define CPEX32_SOURCE_CDECL 0x4000L
+
+typedef struct _WOWFINDFIRST16 { /* k257 */
+ DWORD lpDTA;
+ WORD pszPathOffset;
+ WORD pszPathSegment;
+ WORD wAttributes;
+} WOWFINDFIRST16;
+typedef WOWFINDFIRST16 UNALIGNED *PWOWFINDFIRST16;
+
+typedef struct _WOWFINDNEXT16 { /* k258 */
+ DWORD lpDTA;
+} WOWFINDNEXT16;
+typedef WOWFINDNEXT16 UNALIGNED *PWOWFINDNEXT16;
+
+typedef struct _WOWSETDEFAULTDRIVE16 { /* k259 */
+ WORD wDriveNum;
+} WOWSETDEFAULTDRIVE16;
+typedef WOWSETDEFAULTDRIVE16 UNALIGNED *PWOWSETDEFAULTDRIVE16;
+
+typedef struct _WOWGETCURRENTDIRECTORY16 { /* k260 */
+ DWORD lpCurDir;
+ WORD wDriveNum;
+} WOWGETCURRENTDIRECTORY16;
+typedef WOWGETCURRENTDIRECTORY16 UNALIGNED *PWOWGETCURRENTDIRECTORY16;
+
+typedef struct _WOWSETCURRENTDIRECTORY16 { /* k261 */
+ DWORD lpCurDir;
+} WOWSETCURRENTDIRECTORY16;
+typedef WOWSETCURRENTDIRECTORY16 UNALIGNED *PWOWSETCURRENTDIRECTORY16;
+
+typedef struct _WOWWAITFORMSGANDEVENT16 { /* k262 */
+ HWND16 hwnd;
+} WOWWAITFORMSGANDEVENT16;
+typedef WOWWAITFORMSGANDEVENT16 UNALIGNED *PWOWWAITFORMSGANDEVENT16;
+
+typedef struct _WOWMSGBOX16 { /* k263 */
+ DWORD dwOptionalStyle;
+ VPSZ pszTitle;
+ VPSZ pszMsg;
+} WOWMSGBOX16;
+typedef WOWMSGBOX16 UNALIGNED *PWOWMSGBOX16;
+
+typedef struct _WOWDEVICEIOCTL16 { /* k267 */
+ WORD wCmd;
+ WORD wDriveNum;
+} WOWDEVICEIOCTL16;
+typedef WOWDEVICEIOCTL16 UNALIGNED *PWOWDEVICEIOCTL16;
+
+typedef struct _WOWFILESETATTRIBUTES16 { /* k268 */
+ WORD pszPathOffset;
+ WORD pszPathSegment;
+ WORD wAttributes;
+} WOWFILESETATTRIBUTES16;
+typedef WOWFILESETATTRIBUTES16 UNALIGNED *PWOWFILESETATTRIBUTES16;
+
+typedef struct _WOWFILESETDATETIME16 { /* k269 */
+ DWORD lpSFT;
+ DWORD lpPDB;
+ WORD date;
+ WORD time;
+ WORD fh;
+} WOWFILESETDATETIME16;
+typedef WOWFILESETDATETIME16 UNALIGNED *PWOWFILESETDATETIME16;
+
+typedef struct _WOWFILECREATE16 { /* k270 */
+ DWORD lpSFT;
+ DWORD lpPDB;
+ WORD pszPathOffset;
+ WORD pszPathSegment;
+ WORD wAttributes;
+} WOWFILECREATE16;
+typedef WOWFILECREATE16 UNALIGNED *PWOWFILECREATE16;
+
+typedef struct _WOWDOSWOWINIT16 { /* k271 */
+ VPVOID lpDosWowData;
+} WOWDOSWOWINIT16;
+typedef WOWDOSWOWINIT16 UNALIGNED *PWOWDOSWOWINIT16;
+
+typedef struct _WOWCHECKUSERGDI16 { /* k272 */
+ WORD pszPathOffset;
+ WORD pszPathSegment;
+} WOWCHECKUSERGDI16;
+typedef WOWCHECKUSERGDI16 UNALIGNED *PWOWCHECKUSERGDI16;
+
+typedef struct _WOWPARTYBYNUMBER16 { /* k273 */
+ VPSZ psz;
+ DWORD dw;
+} WOWPARTYBYNUMBER16;
+typedef WOWPARTYBYNUMBER16 UNALIGNED *PWOWPARTYBYNUMBER16;
+
+typedef struct _WOWSHOULDWESAYWIN9516 { /* k215 */
+ WORD wCallerDS;
+ VPSZ pszFilename;
+} WOWSHOULDWESAYWIN9516;
+typedef WOWSHOULDWESAYWIN9516 UNALIGNED *PWOWSHOULDWESAYWIN9516;
+
+typedef struct _GETSHORTPATHNAME16 { /* k274 */
+ WORD cchShortPath;
+ VPSZ pszShortPath;
+ VPSZ pszLongPath;
+} GETSHORTPATHNAME16;
+typedef GETSHORTPATHNAME16 UNALIGNED *PGETSHORTPATHNAME16;
+
+typedef struct _FINDANDRELEASEDIB16 { /* k275 */
+ WORD wFunId;
+ HAND16 hdib; /* handle which we are messing with */
+} FINDANDRELEASEDIB16;
+typedef FINDANDRELEASEDIB16 UNALIGNED *PFINDANDRELEASEDIB16;
+
+
+typedef struct _WOWRESERVEHTASK16 { /* k276 */
+ WORD htask;
+} WOWRESERVEHTASK16;
+typedef WOWRESERVEHTASK16 UNALIGNED *PWOWRESERVEHTASK16;
+
+typedef struct _REGENUMKEY3216 { /* k216 */
+ DWORD cchName;
+ VPSTR lpszName;
+ DWORD iSubKey;
+ DWORD hKey;
+} REGENUMKEY3216;
+typedef REGENUMKEY3216 UNALIGNED *PREGENUMKEY3216;
+
+typedef struct _REGOPENKEY3216 { /* k217 */
+ VPVOID phkResult;
+ VPSTR lpszSubKey;
+ DWORD hKey;
+} REGOPENKEY3216;
+typedef REGOPENKEY3216 UNALIGNED *PREGOPENKEY3216;
+
+typedef struct _REGCLOSEKEY3216 { /* k220 */
+ DWORD hKey;
+} REGCLOSEKEY3216;
+typedef REGCLOSEKEY3216 UNALIGNED *PREGCLOSEKEY3216;
+
+typedef struct _REGENUMVALUE3216 { /* k223 */
+ VPVOID lpcbData;
+ VPVOID lpbData;
+ DWORD lpdwType;
+ DWORD lpdwReserved;
+ DWORD lpcchValue;
+ VPSTR lpszValue;
+ DWORD iValue;
+ DWORD hKey;
+} REGENUMVALUE3216;
+typedef REGENUMVALUE3216 UNALIGNED *PREGENUMVALUE3216;
+
+/* XLATOFF */
+#pragma pack()
+/* XLATON */
diff --git a/private/mvdm/inc/wowmmcb.h b/private/mvdm/inc/wowmmcb.h
new file mode 100644
index 000000000..64e0f7f27
--- /dev/null
+++ b/private/mvdm/inc/wowmmcb.h
@@ -0,0 +1,82 @@
+/* --------------------------------------------------------------------
+** Module : wowmmcb.h
+**
+** Description : Interrupt callback stuff for Multi-Media.
+**
+** History: : Created 09-Nov-1992 by StephenE
+**
+** --------------------------------------------------------------------
+*/
+#ifndef WOWMMCB_H
+#define WOWMMCB_H
+
+/*
+** This header file will go through both 16 bit and 32 bit compilers.
+** In 16 bit land UNALIGNED is not required, on 32 bit land UNALIGNED
+** would have been #defined by the time this file was #included because
+** this file is always included after wow32.h. This means the following
+** #define is always a no-op with 16 bit compilers and ignored with
+** 32 bit compilers.
+*/
+#ifndef UNALIGNED
+#define UNALIGNED
+#endif
+
+extern void call_ica_hw_interrupt(int, int, int);
+
+/* --------------------------------------------------------------------
+** Hardware Interrupts:
+**
+** IRQ: Interrupt: ICA: Line: Description:
+** -------------------------------------------------------------------
+** IRQ0 0x08 0 0 Timer Tick every 18.2 times per second.
+** IRQ1 0x09 0 1 Keyboard service required.
+** IRQ2 0x0A 0 2 INT from slave 8259A.
+** IRQ8 0x70 1 0 Real time clock service.
+** IRQ9 0x71 1 1 Software redirected to IRQ2.
+** IRQ10 0x72 1 2 Reserved.
+** IRQ11 0x73 1 3 Reserved.
+** IRQ12 0x74 1 4 Reserved.
+** IRQ13 0x75 1 5 Numeric co-processor
+** IRQ14 0x76 1 6 Fixed disk controller
+** IRQ15 0x77 1 7 Reserved.
+** IRQ3 0x0B 0 3 Com2 service request.
+** IRQ4 0x0C 0 4 Com1 service request.
+** IRQ5 0x0D 0 5 Data request from LPT2:
+** IRQ6 0x0E 0 6 Floppy disk service required.
+** IRQ7 0x0F 0 7 Data request from LPT1:
+**
+** --------------------------------------------------------------------
+*/
+
+#define MULTIMEDIA_LINE 2
+#define MULTIMEDIA_ICA 1
+#define MULTIMEDIA_INTERRUPT 0x72
+
+#define CALLBACK_ARGS_SIZE 16
+
+typedef struct _CALLBACK_ARGS { /* cbargs */
+ DWORD dwFlags; // Flags to identify the type of callback.
+ DWORD dwFunctionAddr; // 16:16 address of the function to be called
+ WORD wHandle; // The handle or ID of the device
+ WORD wMessage; // The message to be passed to function
+ DWORD dwInstance; // User data
+ DWORD dwParam1; // Device data 1
+ DWORD dwParam2; // Device data 2
+} CALLBACK_ARGS;
+
+typedef struct _CALLBACK_DATA { /* cbdata */
+ WORD wRecvCount; // The number of interrupts received
+ WORD wSendCount; // The number of interrupts sent
+ CALLBACK_ARGS args[CALLBACK_ARGS_SIZE]; // Interrupt arguments
+ WORD wIntsCount; // The number of interrupts received
+} CALLBACK_DATA;
+
+typedef CALLBACK_DATA FAR *VPCALLBACK_DATA; // 16:16 pointer type
+typedef CALLBACK_ARGS FAR *VPCALLBACK_ARGS; // 16:16 pointer type
+
+typedef CALLBACK_DATA UNALIGNED *PCALLBACK_DATA; // 0:32 pointer type
+typedef CALLBACK_ARGS UNALIGNED *PCALLBACK_ARGS; // 0:32 pointer type
+
+VOID FAR PASCAL Notify_Callback_Data( VPCALLBACK_DATA vpCallbackData );
+#endif
diff --git a/private/mvdm/inc/wowmmed.h b/private/mvdm/inc/wowmmed.h
new file mode 100644
index 000000000..bc26f71ed
--- /dev/null
+++ b/private/mvdm/inc/wowmmed.h
@@ -0,0 +1,1665 @@
+/*++ BUILD Version: 0001
+ *
+ * WOW v1.0
+ *
+ * Copyright (c) 1991, Microsoft Corporation
+ *
+ * WOWMMED.H
+ * 16-bit MultiMedia API argument structures
+ *
+ * History:
+ * Created 21-Jan-1992 by Mike Tricker (MikeTri), based on the work by jeffpar
+--*/
+/*++
+
+ General MultiMedia related information
+
+ Moved all the typedefs for H* and VP* back to WOW.H - MikeTri 090492
+
+--*/
+
+typedef WORD MMVER16; // major (high byte), minor (low byte)
+
+#ifndef _INC_MMSYSTEM
+typedef DWORD FOURCC; // a four character code
+typedef LONG LPARAM;
+#endif
+
+#define MAXPNAMELEN 32 // max product name length (including NULL)
+
+/* XLATOFF */
+#pragma pack(1)
+/* XLATON */
+
+
+/*
+ * MultiMedia Data Structures - MikeTri 10-Feb-1992
+ *
+ */
+
+
+typedef struct _AUXCAPS16 { /* ac16 */
+ WORD wMid;
+ WORD wPid;
+ MMVER16 vDriverVersion;
+ char szPname[MAXPNAMELEN];
+ WORD wTechnology;
+ DWORD dwSupport;
+} AUXCAPS16;
+typedef AUXCAPS16 UNALIGNED *PAUXCAPS16;
+typedef VPVOID VPAUXCAPS16;
+
+typedef struct _DRVCONFIGINFO16 { /* dci16 */
+ DWORD dwDCISize;
+ VPCSTR lpszDCISectionName;
+ VPCSTR lpszDCIAliasName;
+} DRVCONFIGINFO16;
+typedef DRVCONFIGINFO16 UNALIGNED *PDRVCONFIGINFO16;
+typedef VPVOID VPDRVCONFIGINFO16;
+
+typedef struct _JOYCAPS16 { /* jc16 */
+ WORD wMid;
+ WORD wPid;
+ char szPname[MAXPNAMELEN];
+ WORD wXmin;
+ WORD wXmax;
+ WORD wYmin;
+ WORD wYmax;
+ WORD wZmin;
+ WORD wZmax;
+ WORD wNumButtons;
+ WORD wPeriodMin;
+ WORD wPeriodMax;
+} JOYCAPS16;
+typedef JOYCAPS16 UNALIGNED *PJOYCAPS16;
+typedef VPVOID VPJOYCAPS16;
+
+typedef struct _JOYINFO16 { /* ji16 */
+ WORD wXpos;
+ WORD wYpos;
+ WORD wZpos;
+ WORD wButtons;
+} JOYINFO16;
+typedef JOYINFO16 UNALIGNED *PJOYINFO16;
+typedef VPVOID VPJOYINFO16;
+
+typedef struct _MCI_ANIM_OPEN_PARMS16 { /* maop16 */
+ DWORD dwCallback;
+ WORD wDeviceID;
+ WORD wReserved0;
+ VPCSTR lpstrDeviceType;
+ VPCSTR lpstrElementName;
+ VPCSTR lpstrAlias;
+ DWORD dwStyle;
+ HWND16 hWndParent; // Keeps consistent, and is equivalent anyway
+ WORD wReserved1;
+} MCI_ANIM_OPEN_PARMS16;
+typedef MCI_ANIM_OPEN_PARMS16 UNALIGNED *PMCI_ANIM_OPEN_PARMS16;
+typedef VPVOID VPMCI_ANIM_OPEN_PARMS16;
+
+typedef struct _MCI_ANIM_PLAY_PARMS16 { /* mapp16 */
+ DWORD dwCallback;
+ DWORD dwFrom;
+ DWORD dwTo;
+ DWORD dwSpeed;
+} MCI_ANIM_PLAY_PARMS16;
+typedef MCI_ANIM_PLAY_PARMS16 UNALIGNED *PMCI_ANIM_PLAY_PARMS16;
+typedef VPVOID VPMCA_ANIM_PLAY_PARMS16;
+
+typedef struct _MCI_ANIM_RECT_PARMS16 { /* marp16 */
+ DWORD dwCallback;
+ RECT16 rc;
+} MCI_ANIM_RECT_PARMS16;
+typedef MCI_ANIM_RECT_PARMS16 UNALIGNED *PMCI_ANIM_RECT_PARMS16;
+typedef VPVOID VPMCI_ANIM_RECT_PARMS16;
+
+typedef struct _MCI_ANIM_STEP_PARMS16 { /* masp16 */
+ DWORD dwCallback;
+ DWORD dwFrames;
+} MCI_ANIM_STEP_PARMS16;
+typedef MCI_ANIM_STEP_PARMS16 UNALIGNED *PMCI_ANIM_STEP_PARMS16;
+typedef VPVOID VPMCI_ANIM_STEP_PARMS16;
+
+typedef struct _MCI_ANIM_UPDATE_PARMS16 { /* maup16 */
+ DWORD dwCalback;
+ RECT16 rc;
+ HDC16 hDC;
+} MCI_ANIM_UPDATE_PARMS16;
+typedef MCI_ANIM_UPDATE_PARMS16 UNALIGNED *PMCI_ANIM_UPDATE_PARMS16;
+typedef VPVOID VPMCI_ANIM_UPDATE_PARMS16;
+
+typedef struct _MCI_ANIM_WINDOW_PARMS16 { /* mawp16 */
+ DWORD dwCallabck;
+ HWND16 hWnd;
+ WORD wReserved1;
+ WORD nCmdShow;
+ WORD wReserved2;
+ VPCSTR lpstrText;
+} MCI_ANIM_WINDOW_PARMS16;
+typedef MCI_ANIM_WINDOW_PARMS16 UNALIGNED *PMCI_ANIM_WINDOW_PARMS16;
+typedef VPVOID VPMCI_ANIM_WINDOW_PARMS16;
+
+typedef struct _MCI_BREAK_PARMS16 { /* mbp16 */
+ DWORD dwCallback;
+ INT16 nVirtKey;
+ WORD wReserved0;
+ HWND16 hwndBreak;
+ WORD wReserved1;
+} MCI_BREAK_PARMS16;
+typedef MCI_BREAK_PARMS16 UNALIGNED *PMCI_BREAK_PARMS16;
+typedef VPVOID VPMCI_BREAK_PARMS16;
+
+typedef struct _MCI_GENERIC_PARMS16 { /* mgp16 */
+ DWORD dwCallback;
+} MCI_GENERIC_PARMS16;
+typedef MCI_GENERIC_PARMS16 UNALIGNED *PMCI_GENERIC_PARMS16;
+typedef VPVOID VPMCI_GENERIC_PARMS16;
+
+typedef struct _MCI_GETDEVCAPS_PARMS16 { /* mgdp16 */
+ DWORD dwCallback;
+ DWORD dwReturn;
+ DWORD dwItem;
+} MCI_GETDEVCAPS_PARMS16;
+typedef MCI_GETDEVCAPS_PARMS16 UNALIGNED *PMCI_GETDEVCAPS_PARMS16;
+typedef VPVOID VPMCI_GETDEVCAPS_PARMS16;
+
+typedef struct _MCI_INFO_PARMS16 { /* mip16 */
+ DWORD dwCallback;
+ VPSTR lpstrReturn;
+ DWORD dwRetSize;
+} MCI_INFO_PARMS16;
+typedef MCI_INFO_PARMS16 UNALIGNED *PMCI_INFO_PARMS16;
+typedef VPVOID VPMCI_INFO_PARMS16;
+
+typedef struct _MCI_LOAD_PARMS16 { /* mlp16 */
+ DWORD dwCallback;
+ VPCSTR lpfilename;
+} MCI_LOAD_PARMS16;
+typedef MCI_LOAD_PARMS16 UNALIGNED *PMCI_LOAD_PARMS16;
+typedef VPVOID VPMCI_LOAD_PARMS16;
+
+typedef struct _MCI_OPEN_PARMS16 { /* mop16 */
+ DWORD dwCallback;
+ WORD wDeviceID;
+ WORD wReserved0;
+ VPCSTR lpstrDeviceType;
+ VPCSTR lpstrElementName;
+ VPCSTR lpstrAlias;
+} MCI_OPEN_PARMS16;
+typedef MCI_OPEN_PARMS16 UNALIGNED *PMCI_OPEN_PARMS16;
+typedef VPVOID VPMCI_OPEN_PARMS16;
+
+typedef struct _MCI_OVLY_LOAD_PARMS16 { /* molp16 */
+ DWORD dwCallback;
+ VPCSTR lpfilename;
+ RECT16 rc;
+} MCI_OVLY_LOAD_PARMS16;
+typedef MCI_OVLY_LOAD_PARMS16 UNALIGNED *PMCI_OVLY_LOAD_PARMS16;
+typedef VPVOID VPMCI_OVLY_LOAD_PARMS16;
+
+typedef struct _MCI_OVLY_OPEN_PARMS16 { /* moop16 */
+ DWORD dwCallabck;
+ WORD wDeviceID;
+ WORD wReserved0;
+ VPCSTR lpstrDeviceType;
+ VPCSTR lpstrElementName;
+ VPCSTR lpstrAlias;
+ DWORD dwStyle;
+ HWND16 hWndParent; // The book is wrong
+ WORD wReserved1;
+} MCI_OVLY_OPEN_PARMS16;
+typedef MCI_OVLY_OPEN_PARMS16 UNALIGNED *PMCI_OVLY_OPEN_PARMS16;
+typedef VPVOID VPMCI_OVLY_OPEN_PARMS16;
+
+typedef struct _MCI_OVLY_RECT_PARMS16 { /* morp16 */
+ DWORD dwCallback;
+ RECT16 rc;
+} MCI_OVLY_RECT_PARMS16;
+typedef MCI_OVLY_RECT_PARMS16 UNALIGNED *PMCI_OVLY_RECT_PARMS16;
+typedef VPVOID VPMCI_OVLY_RECT_PARMS16;
+
+typedef struct _MCI_OVLY_SAVE_PARMS16 { /* mosp16 */
+ DWORD dwCallback;
+ VPCSTR lpfilename;
+ RECT16 rc;
+} MCI_OVLY_SAVE_PARMS16;
+typedef MCI_OVLY_SAVE_PARMS16 UNALIGNED *PMCI_OVLY_SAVE_PARMS16;
+typedef VPVOID VPMCI_OVLY_SAVE_PARMS16;
+
+typedef struct _MCI_OVLY_WINDOW_PARMS16 { /* mowp16 */
+ DWORD dwCallabck;
+ HWND16 hWnd;
+ WORD wReserved1;
+ WORD nCmdShow;
+ WORD wReserved2;
+ VPCSTR lpstrText;
+} MCI_OVLY_WINDOW_PARMS16;
+typedef MCI_OVLY_WINDOW_PARMS16 UNALIGNED *PMCI_OVLY_WINDOW_PARMS16;
+typedef VPVOID VPMCI_OVLY_WINDOW_PARMS16;
+
+typedef struct _MCI_PLAY_PARMS16 { /* mplp16 */
+ DWORD dwCallback;
+ DWORD dwFrom;
+ DWORD dwTo;
+} MCI_PLAY_PARMS16;
+typedef MCI_PLAY_PARMS16 UNALIGNED *PMCI_PLAY_PARMS16;
+typedef VPVOID VPMCI_PLAY_PARMS16;
+
+typedef struct _MCI_RECORD_PARMS16 { /* mrecp16 */
+ DWORD dwCallabck;
+ DWORD dwFrom;
+ DWORD dwTo;
+} MCI_RECORD_PARMS16;
+typedef MCI_RECORD_PARMS16 UNALIGNED *PMCI_RECORD_PARMS16;
+typedef VPVOID VPMCI_RECORD_PARMS16;
+
+typedef struct _MCI_SAVE_PARMS16 { /* msavp16 */
+ DWORD dwCallback;
+ VPCSTR lpfilename; // MMSYSTEM.H differs from the book
+} MCI_SAVE_PARMS16;
+typedef MCI_SAVE_PARMS16 UNALIGNED *PMCI_SAVE_PARMS16;
+typedef VPVOID VPMCI_SAVE_PARMS16;
+
+typedef struct _MCI_SEEK_PARMS16 { /* msep16 */
+ DWORD dwCallback;
+ DWORD dwTo;
+} MCI_SEEK_PARMS16;
+typedef MCI_SEEK_PARMS16 UNALIGNED *PMCI_SEEK_PARMS16;
+typedef VPVOID VPMCI_SEEK_PARMS16;
+
+typedef struct _MCI_SEQ_SET_PARMS16 { /* mssp16 */
+ DWORD dwCallback;
+ DWORD dwTimeFormat;
+ DWORD dwAudio;
+ DWORD dwTempo;
+ DWORD dwPort;
+ DWORD dwSlave;
+ DWORD dwMaster;
+ DWORD dwOffset;
+} MCI_SEQ_SET_PARMS16;
+typedef MCI_SEQ_SET_PARMS16 UNALIGNED *PMCI_SEQ_SET_PARMS16;
+typedef VPVOID VPMCI_SEQ_SET_PARMS16;
+
+typedef struct _MCI_SET_PARMS16 { /* msetp16 */
+ DWORD dwCallback;
+ DWORD dwTimeFormat;
+ DWORD dwAudio;
+} MCI_SET_PARMS16;
+typedef MCI_SET_PARMS16 UNALIGNED *PMCI_SET_PARMS16;
+typedef VPVOID VPMCI_SET_PARMS16;
+
+typedef struct _MCI_SOUND_PARMS16 { /* msoup16 */
+ DWORD dwCallback;
+ VPCSTR lpstrSoundName;
+} MCI_SOUND_PARMS16;
+typedef MCI_SOUND_PARMS16 UNALIGNED *PMCI_SOUND_PARMS16;
+typedef VPVOID VPMCI_SOUND_PARMS16;
+
+typedef struct _MCI_STATUS_PARMS16 { /* mstp16 */
+ DWORD dwCallback;
+ DWORD dwReturn;
+ DWORD dwItem;
+ DWORD dwTrack;
+} MCI_STATUS_PARMS16;
+typedef MCI_STATUS_PARMS16 UNALIGNED *PMCI_STATUS_PARMS16;
+typedef VPVOID VPMCI_STATUS_PARMS16;
+
+typedef struct _MCI_SYSINFO_PARMS16 { /* msyip16 */
+ DWORD dwCallback;
+ VPSTR lpstrReturn;
+ DWORD dwRetSize;
+ DWORD dwNumber;
+ WORD wDeviceType;
+ WORD wReserved0;
+} MCI_SYSINFO_PARMS16;
+typedef MCI_SYSINFO_PARMS16 UNALIGNED *PMCI_SYSINFO_PARMS16;
+typedef VPVOID VPMCI_SYSINFO_PARMS16;
+
+typedef struct _MCI_VD_ESCAPE_PARMS16 { /* mvep16 */
+ DWORD dwCallback;
+ VPCSTR lpstrCommand;
+} MCI_VD_ESCAPE_PARMS16;
+typedef MCI_VD_ESCAPE_PARMS16 UNALIGNED *PMCI_VD_ESCAPE_PARMS16;
+typedef VPVOID VPMCI_VD_ESCAPE_PARMS16;
+
+typedef struct _MCI_VD_PLAY_PARMS16 { /* mvpp16 */
+ DWORD dwCallback;
+ DWORD dwFrom;
+ DWORD dwTo;
+ DWORD dwSpeed;
+} MCI_VD_PLAY_PARMS16;
+typedef MCI_VD_PLAY_PARMS16 UNALIGNED *PMCI_VD_PLAY_PARMS16;
+typedef VPVOID VPMCI_VD_PLAY_PARMS16;
+
+typedef struct _MCI_VD_STEP_PARMS16 { /* mvsp16 */
+ DWORD dwCallback;
+ DWORD dwFrames;
+} MCI_VD_STEP_PARMS16;
+typedef MCI_VD_STEP_PARMS16 UNALIGNED *PMCI_VD_STEP_PARMS16;
+typedef VPVOID VPMCI_VD_STEP_PARMS16;
+
+typedef struct _MCI_VD_DELETE_PARMS16 { /* mvdp16 */
+ DWORD dwCallback;
+ DWORD dwFrom;
+ DWORD dwTo;
+} MCI_VD_DELETE_PARMS16;
+typedef MCI_VD_DELETE_PARMS16 UNALIGNED *PMCI_VD_DELETE_PARMS16;
+typedef VPVOID VPMCI_VD_DELETE_PARMS16;
+
+typedef struct _MCI_WAVE_OPEN_PARMS16 { /* mwop16 */
+ DWORD dwCallback;
+ WORD wDeviceID;
+ WORD wReserved0;
+ VPCSTR lpstrDeviceType;
+ VPCSTR lpstrElementName;
+ VPCSTR lpstrAlias;
+ DWORD dwBufferSeconds;
+} MCI_WAVE_OPEN_PARMS16;
+typedef MCI_WAVE_OPEN_PARMS16 UNALIGNED *PMCI_WAVE_OPEN_PARMS16;
+typedef VPVOID VPMCI_WAVE_OPEN_PARMS16;
+
+typedef struct _MCI_WAVE_SET_PARMS16 { /* mwsp16 */
+ DWORD dwCallback;
+ DWORD dwTimeFormat;
+ DWORD dwAudio;
+ WORD wInput;
+ WORD wReserved0;
+ WORD wOutput;
+ WORD wReserved1;
+ WORD wFormatTag;
+ WORD wReserved2;
+ WORD nChannels;
+ WORD wReserved3;
+ DWORD nSamplesPerSecond;
+ DWORD nAvgBytesPerSec;
+ WORD nBlockAlign;
+ WORD wReserved4;
+ WORD wBitsPerSample;
+ WORD wReserved5;
+} MCI_WAVE_SET_PARMS16;
+typedef MCI_WAVE_SET_PARMS16 UNALIGNED *PMCI_WAVE_SET_PARMS16;
+typedef VPVOID VPMCI_WAVE_SET_PARMS16;
+
+typedef struct _MIDIHDR16 { /* mhdr16 */
+ VPSTR lpData;
+ DWORD dwBufferLength;
+ DWORD dwBytesRecorded;
+ DWORD dwUser;
+ DWORD dwFlags;
+ struct _MIDIHDR16 far *lpNext;
+ DWORD reserved;
+} MIDIHDR16;
+typedef MIDIHDR16 UNALIGNED *PMIDIHDR16;
+typedef VPVOID VPMIDIHDR16;
+
+typedef struct _MIDIINCAPS16 { /* mic16 */
+ WORD wMid;
+ WORD wPid;
+ MMVER16 vDriverVersion;
+ char szPname[MAXPNAMELEN];
+} MIDIINCAPS16;
+typedef MIDIINCAPS16 UNALIGNED *PMIDIINCAPS16;
+typedef VPVOID VPMIDIINCAPS16;
+
+typedef struct _MIDIOUTCAPS16 { /* moc16 */
+ WORD wMid;
+ WORD wPid;
+ MMVER16 vDriverVersion;
+ char szPname[MAXPNAMELEN];
+ WORD wTechnology;
+ WORD wVoices;
+ WORD wNotes;
+ WORD wChannelMask;
+ DWORD dwSupport;
+} MIDIOUTCAPS16;
+typedef MIDIOUTCAPS16 UNALIGNED *PMIDIOUTCAPS16;
+typedef VPVOID VPMIDIOUTCAPS16;
+
+typedef struct _MMCKINFO16 { /* mcki16 */
+ FOURCC ckid;
+ DWORD cksize;
+ FOURCC fccType;
+ DWORD dwDataOffset;
+ DWORD dwFlags;
+} MMCKINFO16;
+typedef MMCKINFO16 UNALIGNED *PMMCKINFO16;
+typedef VPVOID VPMMCKINFO16;
+
+typedef struct _MMIOINFO16 { /* mioi16 */
+ DWORD dwFlags;
+ FOURCC fccIOProc;
+ VPMMIOPROC16 pIOProc;
+ WORD wErrorRet;
+ HTASK16 htask; // Header file MMSYSTEM.H differs from book
+ LONG cchBuffer;
+ VPSTR pchBuffer;
+ VPSTR pchNext;
+ VPSTR pchEndRead;
+ VPSTR pchEndWrite;
+ LONG lBufOffset;
+ LONG lDiskOffset;
+ DWORD adwInfo[3]; // The book says [4], MMSYSTEM.H doesn't
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+ HMMIO16 hmmio;
+} MMIOINFO16;
+typedef MMIOINFO16 UNALIGNED *PMMIOINFO16;
+typedef VPVOID VPMMIOINFO16;
+
+typedef struct _MMPACTION16 { /* mpa16 */
+ BYTE bMenuItem;
+ BYTE bActionCode;
+ WORD wTextOffset;
+} MMPACTION16;
+typedef MMPACTION16 UNALIGNED *PMMPACTION16;
+typedef VPVOID VPMMPACTION16;
+
+typedef struct _MMPLABEL16 { /* mpl16 */
+ WORD wFrameNum;
+ WORD wTextOffset;
+} MMPLABEL16;
+typedef MMPLABEL16 UNALIGNED *PMMPLABEL16;
+typedef VPVOID VPMMPLABEL16;
+
+typedef struct _MMPMOVIEINFO16 { /* mpmi16 */
+ DWORD dwFileVersion;
+ DWORD dwTotalFrames;
+ DWORD dwInitialFramesPerSecond;
+ WORD wPixelDepth;
+ DWORD dwMovieExtentX;
+ DWORD dwMovieExtentY;
+ char chFullMacName[128];
+} MMPMOVIEINFO16;
+typedef MMPMOVIEINFO16 UNALIGNED *PMMPMOVIEINFO16;
+typedef VPVOID VPMMPMOVIEINFO16;
+
+/* XLATOFF */
+typedef struct _MMTIME16 { /* mmt16 */
+ WORD wType;
+ union {
+ DWORD ms;
+ DWORD sample;
+ DWORD cb;
+ struct {
+ BYTE hour;
+ BYTE min;
+ BYTE sec;
+ BYTE frame;
+ BYTE fps;
+ BYTE dummy;
+ } smpte;
+ struct {
+ DWORD songptrpos;
+ } midi;
+ } u;
+} MMTIME16;
+typedef MMTIME16 UNALIGNED *PMMTIME16;
+/* XLATON */
+typedef VPVOID VPMMTIME16;
+
+typedef struct _TIMECAPS16 { /* timc16 */
+ WORD wPeriodMin;
+ WORD wPeriodMax;
+} TIMECAPS16;
+typedef TIMECAPS16 UNALIGNED *PTIMECAPS16;
+typedef VPVOID VPTIMECAPS16;
+
+typedef struct _WAVEFORMAT16 { /* wft16 */
+ WORD wFormatTag;
+ WORD nChannels;
+ DWORD nSamplesPerSec;
+ DWORD nAvgBytesPerSec;
+ WORD nBlockAlign;
+} WAVEFORMAT16;
+typedef WAVEFORMAT16 UNALIGNED *PWAVEFORMAT16;
+typedef VPVOID VPWAVEFORMAT16;
+
+typedef struct _PCMWAVEFORMAT16 { /* pwf16 */
+ WAVEFORMAT16 wf;
+ WORD wBitsPerSample;
+} PCMWAVEFORMAT16;
+typedef PCMWAVEFORMAT16 UNALIGNED *PPCMWAVEFORMAT16;
+typedef VPVOID VPPCMWAVEFORMAT16;
+
+typedef struct _WAVEHDR16 { /* whd16 */
+ VPSTR lpData;
+ DWORD dwBufferLength;
+ DWORD dwBytesRecorded;
+ DWORD dwUser;
+ DWORD dwFlags;
+ DWORD dwLoops;
+ struct _WAVEHDR16 far *lpNext;
+ DWORD reserved;
+} WAVEHDR16;
+typedef WAVEHDR16 UNALIGNED *PWAVEHDR16;
+typedef VPVOID VPWAVEHDR16;
+
+typedef struct _WAVEINCAPS16 { /* wic16 */
+ WORD wMid;
+ WORD wPid;
+ MMVER16 vDriverVersion;
+ char szPname[MAXPNAMELEN];
+ DWORD dwFormats;
+ WORD wChannels;
+} WAVEINCAPS16;
+typedef WAVEINCAPS16 UNALIGNED *PWAVEINCAPS16;
+typedef VPVOID VPWAVEINCAPS16;
+
+typedef struct _WAVEOUTCAPS16 { /* woc16 */
+ WORD wMid;
+ WORD wPid;
+ MMVER16 vDriverVersion;
+ char szPname[MAXPNAMELEN];
+ DWORD dwFormats;
+ WORD wChannels;
+ DWORD dwSupport;
+} WAVEOUTCAPS16;
+typedef WAVEOUTCAPS16 UNALIGNED *PWAVEOUTCAPS16;
+typedef VPVOID VPWAVEOUTCAPS16;
+
+/* XLATOFF */
+#pragma pack()
+/* XLATON */
+
+/*
+ * MultiMedia Window messages - MikeTri 10-Feb-1992
+ */
+
+//#define MM_JOY1MOVE 0x03A0 // Joystick
+//#define MM_JOY2MOVE 0x03A1
+//#define MM_JOY1ZMOVE 0x03A2
+//#define MM_JOY2ZMOVE 0x03A3
+//#define MM_JOY1BUTTONDOWN 0x03B5
+//#define MM_JOY2BUTTONDOWN 0x03B6
+//#define MM_JOY1BUTTONUP 0x03B7
+//#define MM_JOY2BUTTONUP 0x03B8
+
+//#define MM_MCINOTIFY 0x03B9 // MCI
+//#define MM_MCISYSTEM_STRING 0x03CA
+
+//#define MM_WOM_OPEN 0x03BB // Waveform Output
+//#define MM_WOM_CLOSE 0x03BC
+//#define MM_WOM_DONE 0x03BD
+
+//#define MM_WIM_OPEN 0x03BE // Waveform Input
+//#define MM_WIM_CLOSE 0x03BF
+//#define MM_WIM_DATA 0x03C0
+
+//#define MM_MIM_OPEN 0x03C1 // MIDI Input
+//#define MM_MIM_CLOSE 0x03C2
+//#define MM_MIM_DATA 0x03C3
+//#define MM_MIM_LONGDATA 0x03C4
+//#define MM_MIM_ERROR 0x03C5
+//#define MM_MIM_LONGERROR 0x03C6
+
+//#define MM_MOM_OPEN 0x03C7 // MIDI Output
+//#define MM_MOM_CLOSE 0x03C8
+//#define MM_MOM_DONE 0x03C9
+
+/*
+ * End of MultiMedia Window messages - MikeTri
+ */
+
+/*++
+
+ MultiMedia API IDs - start adding all the other APIs - Mike, 04-Feb-1992
+
+ This is the complete exported list, in MMSYSTEM order
+
+ Well, actually it isn't anymore - various ones have been removed which
+ we aren't supporting, and because of the joys of H2INC I can't leave them
+ here as comments. So - if they need to be added again check in the
+ function prototypes below this list for the correct formats.
+
+ Need to recheck the numbers before compiling this lot... - this raises the
+ point that if we add any more they ought to go at the end of the list,
+ otherwise we end up juggling numbers, which is a drag.
+
+--*/
+
+
+#define FUN_MMCALLPROC32 2 //
+#define FUN_MMSYSTEMGETVERSION 5 //
+
+#define FUN_OUTPUTDEBUGSTR 30 //
+#define FUN_DRIVERCALLBACK 31 //
+#define FUN_NOTIFY_CALLBACK_DATA 32 //
+
+#define FUN_JOYGETNUMDEVS 101 //
+#define FUN_JOYGETDEVCAPS 102 //
+#define FUN_JOYGETPOS 103 //
+#define FUN_JOYGETTHRESHOLD 104 //
+#define FUN_JOYRELEASECAPTURE 105 //
+#define FUN_JOYSETCAPTURE 106 //
+#define FUN_JOYSETTHRESHOLD 107 //
+#define FUN_JOYSETCALIBRATION 109 //
+
+#define FUN_MIDIOUTGETNUMDEVS 201 //
+#define FUN_MIDIOUTGETDEVCAPS 202 //
+#define FUN_MIDIOUTGETERRORTEXT 203 //
+#define FUN_MIDIOUTOPEN 204 //
+#define FUN_MIDIOUTCLOSE 205 //
+#define FUN_MIDIOUTPREPAREHEADER32 206 //
+#define FUN_MIDIOUTUNPREPAREHEADER32 207 //
+#define FUN_MIDIOUTSHORTMSG 208 //
+#define FUN_MIDIOUTLONGMSG 209 //
+#define FUN_MIDIOUTRESET 210 //
+#define FUN_MIDIOUTGETVOLUME 211 //
+#define FUN_MIDIOUTSETVOLUME 212 //
+#define FUN_MIDIOUTCACHEPATCHES 213 //
+#define FUN_MIDIOUTCACHEDRUMPATCHES 214 //
+#define FUN_MIDIOUTGETID 215 //
+#define FUN_MIDIOUTMESSAGE32 216 //
+
+#define FUN_MIDIINGETNUMDEVS 301 //
+#define FUN_MIDIINGETDEVCAPS 302 //
+#define FUN_MIDIINGETERRORTEXT 303 //
+#define FUN_MIDIINOPEN 304 //
+#define FUN_MIDIINCLOSE 305 //
+#define FUN_MIDIINPREPAREHEADER32 306 //
+#define FUN_MIDIINUNPREPAREHEADER32 307 //
+#define FUN_MIDIINADDBUFFER 308 //
+#define FUN_MIDIINSTART 309 //
+#define FUN_MIDIINSTOP 310 //
+#define FUN_MIDIINRESET 311 //
+#define FUN_MIDIINGETID 312 //
+#define FUN_MIDIINMESSAGE32 313 //
+
+#define FUN_AUXGETNUMDEVS 350 //
+#define FUN_AUXGETDEVCAPS 351 //
+#define FUN_AUXGETVOLUME 352 //
+#define FUN_AUXSETVOLUME 353 //
+#define FUN_AUXOUTMESSAGE32 354 //
+
+#define FUN_WAVEOUTGETNUMDEVS 401 //
+#define FUN_WAVEOUTGETDEVCAPS 402 //
+#define FUN_WAVEOUTGETERRORTEXT 403 //
+#define FUN_WAVEOUTOPEN 404 //
+#define FUN_WAVEOUTCLOSE 405 //
+#define FUN_WAVEOUTPREPAREHEADER32 406 //
+#define FUN_WAVEOUTUNPREPAREHEADER32 407 //
+#define FUN_WAVEOUTWRITE 408 //
+#define FUN_WAVEOUTPAUSE 409 //
+#define FUN_WAVEOUTRESTART 410 //
+#define FUN_WAVEOUTRESET 411 //
+#define FUN_WAVEOUTGETPOSITION 412 //
+#define FUN_WAVEOUTGETPITCH 413 //
+#define FUN_WAVEOUTSETPITCH 414 //
+#define FUN_WAVEOUTGETVOLUME 415 //
+#define FUN_WAVEOUTSETVOLUME 416 //
+#define FUN_WAVEOUTGETPLAYBACKRATE 417 //
+#define FUN_WAVEOUTSETPLAYBACKRATE 418 //
+#define FUN_WAVEOUTBREAKLOOP 419 //
+#define FUN_WAVEOUTGETID 420 //
+#define FUN_WAVEOUTMESSAGE32 421 //
+
+#define FUN_WAVEINGETNUMDEVS 501 //
+#define FUN_WAVEINGETDEVCAPS 502 //
+#define FUN_WAVEINGETERRORTEXT 503 //
+#define FUN_WAVEINOPEN 504 //
+#define FUN_WAVEINCLOSE 505 //
+#define FUN_WAVEINPREPAREHEADER32 506 //
+#define FUN_WAVEINUNPREPAREHEADER32 507 //
+#define FUN_WAVEINADDBUFFER 508 //
+#define FUN_WAVEINSTART 509 //
+#define FUN_WAVEINSTOP 510 //
+#define FUN_WAVEINRESET 511 //
+#define FUN_WAVEINGETPOSITION 512 //
+#define FUN_WAVEINGETID 513 //
+#define FUN_WAVEINMESSAGE32 514 //
+
+#define FUN_TIMEGETSYSTEMTIME 601 //
+#define FUN_TIMEGETTIME 607 //
+#define FUN_TIMESETEVENT 602 //
+#define FUN_TIMEKILLEVENT 603 //
+#define FUN_TIMEGETDEVCAPS 604 //
+#define FUN_TIMEBEGINPERIOD 605 //
+#define FUN_TIMEENDPERIOD 606 //
+
+#define FUN_MCISENDCOMMAND 701 //
+#define FUN_MCISENDSTRING 702 //
+#define FUN_MCIGETDEVICEID 703 //
+#define FUN_MCIGETERRORSTRING 706 //
+#define FUN_MCIEXECUTE 712 //
+#define FUN_MCISETYIELDPROC 714 //
+#define FUN_MCIGETDEVICEIDFROMELEMENTID 715 //
+#define FUN_MCIGETYIELDPROC 716 //
+#define FUN_MCIGETCREATORTASK 717 //
+
+#define FUN_MMIOOPEN 1210 //
+#define FUN_MMIOCLOSE 1211 //
+#define FUN_MMIOREAD 1212 //
+#define FUN_MMIOWRITE 1213 //
+#define FUN_MMIOSEEK 1214 //
+#define FUN_MMIOGETINFO 1215 //
+#define FUN_MMIOSETINFO 1216 //
+#define FUN_MMIOSETBUFFER 1217 //
+#define FUN_MMIOFLUSH 1218 //
+#define FUN_MMIOADVANCE 1219 //
+#define FUN_MMIOSTRINGTOFOURCC 1220 //
+#define FUN_MMIOINSTALLIOPROC 1221 //
+#define FUN_MMIOSENDMESSAGE 1222 //
+
+#define FUN_MMIODESCEND 1223 //
+#define FUN_MMIOASCEND 1224 //
+#define FUN_MMIOCREATECHUNK 1225 //
+#define FUN_MMIORENAME 1226 //
+
+/* XLATOFF */
+#pragma pack(2)
+/* XLATON */
+
+/*++
+
+ Function prototypes - the seemingly unimportant number in the comment on
+ each function MUST match the ones in the list above - otherwise you will
+ turn into a frog, and 16 bit MultiMedia will wave its feet in the air...
+
+ !! BE WARNED !!
+
+--*/
+
+typedef struct _MMCALLPROC3216 { /* mm2 */
+ DWORD fSetCurrentDirectory; /* Set the current directory ? */
+ DWORD lpProcAddress; /* function to call */
+ DWORD p1; /* dwParam2 */
+ DWORD p2; /* dwParam1 */
+ DWORD p3; /* dwInstance */
+ DWORD p4; /* uMsg */
+ DWORD p5; /* uDevId */
+} MMCALLPROC3216;
+typedef MMCALLPROC3216 UNALIGNED *PMMCALLPROC3216;
+
+
+#ifdef NULLSTRUCT
+typedef struct _MMSYSTEMGETVERSION16 { /* mm5 */
+} MMSYSTEMGETVERSION16;
+typedef MMSYSTEMGETVERSION16 UNALIGNED *PMMSYSTEMGETVERSION;
+#endif
+
+typedef struct _OUTPUTDEBUGSTR16 { /* mm30 */
+ VPSTR f1;
+} OUTPUTDEBUGSTR16;
+typedef OUTPUTDEBUGSTR16 UNALIGNED *POUTPUTDEBUGSTR16;
+
+typedef struct _DRIVERCALLBACK16 { /* mm31 */
+ DWORD f7;
+ DWORD f6;
+ DWORD f5;
+ DWORD f4;
+ HDRVR16 f3;
+ DWORD f2;
+ DWORD f1;
+} DRIVERCALLBACK16;
+typedef DRIVERCALLBACK16 UNALIGNED *PDRIVERCALLBACK16;
+
+
+typedef struct _NOTIFY_CALLBACK_DATA16 { /* mm32 */
+ VPCALLBACK_DATA f1;
+} NOTIFY_CALLBACK_DATA16;
+typedef NOTIFY_CALLBACK_DATA16 UNALIGNED *PNOTIFY_CALLBACK_DATA16;
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#ifdef NULLSTRUCT
+typedef struct _STACKLEAVE16 { mm33
+} STACKLEAVE16;
+typedef STACKLEAVE16 UNALIGNED *PSTACKLEAVE16;
+#endif
+
+------------------------------------------------------------------------------*/
+
+#ifdef NULLSTRUCT
+typedef struct _JOYGETNUMDEVS16 { /* mm101 */
+} JOYGETNUMDEVS16;
+typedef JOYGETNUMDEVS16 UNALIGNED *PJOYGETNUMDEVS16;
+#endif
+
+typedef struct _JOYGETDEVCAPS16 { /* mm102 */
+ WORD f3;
+ VPJOYCAPS16 f2;
+ WORD f1;
+} JOYGETDEVCAPS16;
+typedef JOYGETDEVCAPS16 UNALIGNED *PJOYGETDEVCAPS16;
+
+typedef struct _JOYGETPOS16 { /* mm103 */
+ VPJOYINFO16 f2;
+ WORD f1;
+} JOYGETPOS16;
+typedef JOYGETPOS16 UNALIGNED *PJOYGETPOS16;
+
+typedef struct _JOYGETTHRESHOLD16 { /* mm104 */
+ VPWORD f2;
+ WORD f1;
+} JOYGETTHRESHOLD16;
+typedef JOYGETTHRESHOLD16 UNALIGNED *PJOYGETTHRESHOLD16;
+
+typedef struct _JOYRELEASECAPTURE16 { /* mm105 */
+ WORD f1;
+} JOYRELEASECAPTURE16;
+typedef JOYRELEASECAPTURE16 UNALIGNED *PJOYRELEASECAPTURE16;
+
+typedef struct _JOYSETCAPTURE16 { /* mm106 */
+ BOOL16 f4;
+ WORD f3;
+ WORD f2;
+ HWND16 f1;
+} JOYSETCAPTURE16;
+typedef JOYSETCAPTURE16 UNALIGNED *PJOYSETCAPTURE16;
+
+typedef struct _JOYSETTHRESHOLD16 { /* mm107 */
+ WORD f2;
+ WORD f1;
+} JOYSETTHRESHOLD16;
+typedef JOYSETTHRESHOLD16 UNALIGNED *PJOYSETTHRESHOLD16;
+
+typedef struct _JOYSETCALIBRATION16 { /* mm109 */
+ VPWORD f7;
+ VPWORD f6;
+ VPWORD f5;
+ VPWORD f4;
+ VPWORD f3;
+ VPWORD f2;
+ WORD f1;
+} JOYSETCALIBRATION16;
+typedef JOYSETCALIBRATION16 UNALIGNED *PJOYSETCALIBRATION16;
+
+#ifdef NULLSTRUCT
+typedef struct _MIDIOUTGETNUMDEVS16 { /* mm201 */
+} MIDIOUTGETNUMDEVS16;
+typedef MIDIOUTGETNUMDEVS16 UNALIGNED *PMIDIOUTGETNUMDEVS16;
+#endif
+
+typedef struct _MIDIOUTGETDEVCAPS16 { /* mm202 */
+ WORD f3;
+ VPMIDIOUTCAPS16 f2;
+ WORD f1;
+} MIDIOUTGETDEVCAPS16;
+typedef MIDIOUTGETDEVCAPS16 UNALIGNED *PMIDIOUTGETDEVCAPS16;
+
+typedef struct _MIDIOUTGETERRORTEXT16 { /* mm203 */
+ WORD f3;
+ VPSTR f2;
+ WORD f1;
+} MIDIOUTGETERRORTEXT16;
+typedef MIDIOUTGETERRORTEXT16 UNALIGNED *PMIDIOUTGETERRORTEXT16;
+
+typedef struct _MIDIOUTOPEN16 { /* mm204 */
+ DWORD f5;
+ DWORD f4;
+ DWORD f3;
+ WORD f2;
+ VPHMIDIOUT16 f1;
+} MIDIOUTOPEN16;
+typedef MIDIOUTOPEN16 UNALIGNED *PMIDIOUTOPEN16;
+
+typedef struct _MIDIOUTCLOSE16 { /* mm205 */
+ HMIDIOUT16 f1;
+} MIDIOUTCLOSE16;
+typedef MIDIOUTCLOSE16 UNALIGNED *PMIDIOUTCLOSE16;
+
+typedef struct _MIDIOUTPREPAREHEADER3216 { /* mm206 */
+ WORD f3;
+ VPMIDIHDR16 f2;
+ HMIDIOUT16 f1;
+} MIDIOUTPREPAREHEADER3216;
+typedef MIDIOUTPREPAREHEADER3216 UNALIGNED *PMIDIOUTPREPAREHEADER3216;
+
+typedef struct _MIDIOUTUNPREPAREHEADER3216 { /* mm207 */
+ WORD f3;
+ VPMIDIHDR16 f2;
+ HMIDIOUT16 f1;
+} MIDIOUTUNPREPAREHEADER3216;
+typedef MIDIOUTUNPREPAREHEADER3216 UNALIGNED *PMIDIOUTUNPREPAREHEADER3216;
+
+typedef struct _MIDIOUTSHORTMSG16 { /* mm208 */
+ DWORD f2;
+ HMIDIOUT16 f1;
+} MIDIOUTSHORTMSG16;
+typedef MIDIOUTSHORTMSG16 UNALIGNED *PMIDIOUTSHORTMSG16;
+
+typedef struct _MIDIOUTLONGMSG16 { /* mm209 */
+ WORD f3;
+ VPMIDIHDR16 f2;
+ HMIDIOUT16 f1;
+} MIDIOUTLONGMSG16;
+typedef MIDIOUTLONGMSG16 UNALIGNED *PMIDIOUTLONGMSG16;
+
+typedef struct _MIDIOUTRESET16 { /* mm210 */
+ HMIDIOUT16 f1;
+} MIDIOUTRESET16;
+typedef MIDIOUTRESET16 UNALIGNED *PMIDIOUTRESET16;
+
+typedef struct _MIDIOUTGETVOLUME16 { /* mm211 */
+ VPDWORD f2;
+ WORD f1;
+} MIDIOUTGETVOLUME16;
+typedef MIDIOUTGETVOLUME16 UNALIGNED *PMIDIOUTGETVOLUME16;
+
+typedef struct _MIDIOUTSETVOLUME16 { /* mm212 */
+ DWORD f2;
+ WORD f1;
+} MIDIOUTSETVOLUME16;
+typedef MIDIOUTSETVOLUME16 UNALIGNED *PMIDIOUTSETVOLUME16;
+
+typedef struct _MIDIOUTCACHEPATCHES16 { /* mm213 */
+ WORD f4;
+ VPPATCHARRAY16 f3;
+ WORD f2;
+ HMIDIOUT16 f1;
+} MIDIOUTCACHEPATCHES16;
+typedef MIDIOUTCACHEPATCHES16 UNALIGNED *PMIDIOUTCACHEPATCHES16;
+
+typedef struct _MIDIOUTCACHEDRUMPATCHES16 { /* mm214 */
+ WORD f4;
+ VPKEYARRAY16 f3;
+ WORD f2;
+ HMIDIOUT16 f1;
+} MIDIOUTCACHEDRUMPATCHES16;
+typedef MIDIOUTCACHEDRUMPATCHES16 UNALIGNED *PMIDIOUTCACHEDRUMPATCHES16;
+
+typedef struct _MIDIOUTGETID16 { /* mm215 */
+ VPWORD f2;
+ HMIDIOUT16 f1;
+} MIDIOUTGETID16;
+typedef MIDIOUTGETID16 UNALIGNED *PMIDIOUTGETID16;
+
+typedef struct _MIDIOUTMESSAGE3216 { /* mm216 */
+ DWORD f4;
+ DWORD f3;
+ WORD f2;
+ HMIDIOUT16 f1;
+} MIDIOUTMESSAGE3216;
+typedef MIDIOUTMESSAGE3216 UNALIGNED *PMIDIOUTMESSAGE3216;
+
+#ifdef NULLSTRUCT
+typedef struct _MIDIINGETNUMDEVS16 { /* mm301 */
+} MIDIINGETNUMDEVS16;
+typedef MIDIINGETNUMDEVS16 UNALIGNED *PMIDIINGETNUMDEVS16;
+#endif
+
+typedef struct _MIDIINGETDEVCAPS16 { /* mm302 */
+ WORD f3;
+ VPMIDIINCAPS16 f2;
+ WORD f1;
+} MIDIINGETDEVCAPS16;
+typedef MIDIINGETDEVCAPS16 UNALIGNED *PMIDIINGETDEVCAPS16;
+
+typedef struct _MIDIINGETERRORTEXT16 { /* mm303 */
+ WORD f3;
+ VPSTR f2;
+ WORD f1;
+} MIDIINGETERRORTEXT16;
+typedef MIDIINGETERRORTEXT16 UNALIGNED *PMIDIINGETERRORTEXT16;
+
+typedef struct _MIDIINOPEN16 { /* mm304 */
+ DWORD f5;
+ DWORD f4;
+ DWORD f3;
+ WORD f2;
+ VPHMIDIIN16 f1;
+} MIDIINOPEN16;
+typedef MIDIINOPEN16 UNALIGNED *PMIDIINOPEN16;
+
+typedef struct _MIDIINCLOSE16 { /* mm305 */
+ HMIDIIN16 f1;
+} MIDIINCLOSE16;
+typedef MIDIINCLOSE16 UNALIGNED *PMIDIINCLOSE16;
+
+typedef struct _MIDIINPREPAREHEADER3216 { /* mm306 */
+ WORD f3;
+ VPMIDIHDR16 f2;
+ HMIDIIN16 f1;
+} MIDIINPREPAREHEADER3216;
+typedef MIDIINPREPAREHEADER3216 UNALIGNED *PMIDIINPREPAREHEADER3216;
+
+typedef struct _MIDIINUNPREPAREHEADER3216 { /* mm307 */
+ WORD f3;
+ VPMIDIHDR16 f2;
+ HMIDIIN16 f1;
+} MIDIINUNPREPAREHEADER3216;
+typedef MIDIINUNPREPAREHEADER3216 UNALIGNED *PMIDIINUNPREPAREHEADER3216;
+
+typedef struct _MIDIINADDBUFFER16 { /* mm308 */
+ WORD f3;
+ VPMIDIHDR16 f2;
+ HMIDIIN16 f1;
+} MIDIINADDBUFFER16;
+typedef MIDIINADDBUFFER16 UNALIGNED *PMIDIINADDBUFFER16;
+
+typedef struct _MIDIINSTART16 { /* mm309 */
+ HMIDIIN16 f1;
+} MIDIINSTART16;
+typedef MIDIINSTART16 UNALIGNED *PMIDIINSTART16;
+
+typedef struct _MIDIINSTOP16 { /* mm310 */
+ HMIDIIN16 f1;
+} MIDIINSTOP16;
+typedef MIDIINSTOP16 UNALIGNED *PMIDIINSTOP16;
+
+typedef struct _MIDIINRESET16 { /* mm311 */
+ HMIDIIN16 f1;
+} MIDIINRESET16;
+typedef MIDIINRESET16 UNALIGNED *PMIDIINRESET16;
+
+typedef struct _MIDIINGETID16 { /* mm312 */
+ VPWORD f2;
+ HMIDIIN16 f1;
+} MIDIINGETID16;
+typedef MIDIINGETID16 UNALIGNED *PMIDIINGETID16;
+
+typedef struct _MIDIINMESSAGE3216 { /* mm313 */
+ DWORD f4;
+ DWORD f3;
+ WORD f2;
+ HMIDIIN16 f1;
+} MIDIINMESSAGE3216;
+typedef MIDIINMESSAGE3216 UNALIGNED *PMIDIINMESSAGE3216;
+
+#ifdef NULLSTRUCT
+typedef struct _AUXGETNUMDEVS16 { /* mm350 */
+} AUXGETNUMDEVS16;
+typedef AUXGETNUMDEVS16 UNALIGNED *PAUGGETNUMDEVS16;
+#endif
+
+typedef struct _AUXGETDEVCAPS16 { /* mm351 */
+ WORD f3;
+ VPAUXCAPS16 f2;
+ WORD f1;
+} AUXGETDEVCAPS16;
+typedef AUXGETDEVCAPS16 UNALIGNED *PAUXGETDEVCAPS16;
+
+typedef struct _AUXGETVOLUME16 { /* mm352 */
+ VPDWORD f2;
+ WORD f1;
+} AUXGETVOLUME16;
+typedef AUXGETVOLUME16 UNALIGNED *PAUXGETVOLUME16;
+
+typedef struct _AUXSETVOLUME16 { /* mm353 */
+ DWORD f2;
+ WORD f1;
+} AUXSETVOLUME16;
+typedef AUXSETVOLUME16 UNALIGNED *PAUXSETVOLUME16;
+
+typedef struct _AUXOUTMESSAGE3216 { /* mm354 */
+ DWORD f4;
+ DWORD f3;
+ WORD f2;
+ WORD f1;
+} AUXOUTMESSAGE3216;
+typedef AUXOUTMESSAGE3216 UNALIGNED *PAUXOUTMESSAGE3216;
+
+#ifdef NULLSTRUCT
+typedef struct _WAVEOUTGETNUMDEVS16 { /* mm401 */
+} WAVEOUTGETNUMDEVS16;
+typedef WAVEOUTGETNUMDEVS16 UNALIGNED *PWAVEOUTGETNUMDEVS16;
+#endif
+
+typedef struct _WAVEOUTGETDEVCAPS16 { /* mm402 */
+ WORD f3;
+ VPWAVEOUTCAPS16 f2;
+ WORD f1;
+} WAVEOUTGETDEVCAPS16;
+typedef WAVEOUTGETDEVCAPS16 UNALIGNED *PWAVEOUTGETDEVCAPS16;
+
+typedef struct _WAVEOUTGETERRORTEXT16 { /* mm403 */
+ WORD f3;
+ VPSTR f2;
+ WORD f1;
+} WAVEOUTGETERRORTEXT16;
+typedef WAVEOUTGETERRORTEXT16 UNALIGNED *PWAVEOUTGETERRORTEXT16;
+
+typedef struct _WAVEOUTOPEN16 { /* mm404 */
+ DWORD f6;
+ DWORD f5;
+ DWORD f4;
+ VPWAVEFORMAT16 f3;
+ WORD f2;
+ VPHWAVEOUT16 f1;
+} WAVEOUTOPEN16;
+typedef WAVEOUTOPEN16 UNALIGNED *PWAVEOUTOPEN16;
+
+typedef struct _WAVEOUTCLOSE16 { /* mm405 */
+ HWAVEOUT16 f1;
+} WAVEOUTCLOSE16;
+typedef WAVEOUTCLOSE16 UNALIGNED *PWAVEOUTCLOSE16;
+
+typedef struct _WAVEOUTPREPAREHEADER3216 { /* mm406 */
+ WORD f3;
+ VPWAVEHDR16 f2;
+ HWAVEOUT16 f1;
+} WAVEOUTPREPAREHEADER3216;
+typedef WAVEOUTPREPAREHEADER3216 UNALIGNED *PWAVEOUTPREPAREHEADER3216;
+
+typedef struct _WAVEOUTUNPREPAREHEADER3216 { /* mm407 */
+ WORD f3;
+ VPWAVEHDR16 f2;
+ HWAVEOUT16 f1;
+} WAVEOUTUNPREPAREHEADER3216;
+typedef WAVEOUTUNPREPAREHEADER3216 UNALIGNED *PWAVEOUTUNPREPAREHEADER3216;
+
+typedef struct _WAVEOUTWRITE16 { /* mm408 */
+ WORD f3;
+ VPWAVEHDR16 f2;
+ HWAVEOUT16 f1;
+} WAVEOUTWRITE16;
+typedef WAVEOUTWRITE16 UNALIGNED *PWAVEOUTWRITE16;
+
+typedef struct _WAVEOUTPAUSE16 { /* mm409 */
+ HWAVEOUT16 f1;
+} WAVEOUTPAUSE16;
+typedef WAVEOUTPAUSE16 UNALIGNED *PWAVEOUTPAUSE16;
+
+typedef struct _WAVEOUTRESTART16 { /* mm410 */
+ HWAVEOUT16 f1;
+} WAVEOUTRESTART16;
+typedef WAVEOUTRESTART16 UNALIGNED *PWAVEOUTRESTART16;
+
+typedef struct _WAVEOUTRESET16 { /* mm411 */
+ HWAVEOUT16 f1;
+} WAVEOUTRESET16;
+typedef WAVEOUTRESET16 UNALIGNED *PWAVEOUTRESET16;
+
+typedef struct _WAVEOUTGETPOSITION16 { /* mm412 */
+ WORD f3;
+ VPMMTIME16 f2;
+ HWAVEOUT16 f1;
+} WAVEOUTGETPOSITION16;
+typedef WAVEOUTGETPOSITION16 UNALIGNED *PWAVEOUTGETPOSITION16;
+
+typedef struct _WAVEOUTGETPITCH16 { /* mm413 */
+ VPDWORD f2;
+ HWAVEOUT16 f1;
+} WAVEOUTGETPITCH16;
+typedef WAVEOUTGETPITCH16 UNALIGNED *PWAVEOUTGETPITCH16;
+
+typedef struct _WAVEOUTSETPITCH16 { /* mm414 */
+ DWORD f2;
+ HWAVEOUT16 f1;
+} WAVEOUTSETPITCH16;
+typedef WAVEOUTSETPITCH16 UNALIGNED *PWAVEOUTSETPITCH16;
+
+typedef struct _WAVEOUTGETVOLUME16 { /* mm415 */
+ VPDWORD f2;
+ WORD f1;
+} WAVEOUTGETVOLUME16;
+typedef WAVEOUTGETVOLUME16 UNALIGNED *PWAVEOUTGETVOLUME16;
+
+typedef struct _WAVEOUTSETVOLUME16 { /* mm416 */
+ DWORD f2;
+ WORD f1;
+} WAVEOUTSETVOLUME16;
+typedef WAVEOUTSETVOLUME16 UNALIGNED *PWAVEOUTSETVOLUME16;
+
+typedef struct _WAVEOUTGETPLAYBACKRATE16 { /* mm417 */
+ VPDWORD f2;
+ HWAVEOUT16 f1;
+} WAVEOUTGETPLAYBACKRATE16;
+typedef WAVEOUTGETPLAYBACKRATE16 UNALIGNED *PWAVEOUTGETPLAYBACKRATE16;
+
+typedef struct _WAVEOUTSETPLAYBACKRATE16 { /* mm418 */
+ DWORD f2;
+ HWAVEOUT16 f1;
+} WAVEOUTSETPLAYBACKRATE16;
+typedef WAVEOUTSETPLAYBACKRATE16 UNALIGNED *PWAVEOUTSETPLAYBACKRATE16;
+
+typedef struct _WAVEOUTBREAKLOOP16 { /* mm419 */
+ HWAVEOUT16 f1;
+} WAVEOUTBREAKLOOP16;
+typedef WAVEOUTBREAKLOOP16 UNALIGNED *PWAVEOUTBREAKLOOP16;
+
+typedef struct _WAVEOUTGETID16 { /* mm420 */
+ VPWORD f2;
+ HWAVEOUT16 f1;
+} WAVEOUTGETID16;
+typedef WAVEOUTGETID16 UNALIGNED *PWAVEOUTGETID16;
+
+typedef struct _WAVEOUTMESSAGE3216 { /* mm421 */
+ DWORD f4;
+ DWORD f3;
+ WORD f2;
+ HWAVEOUT16 f1;
+} WAVEOUTMESSAGE3216;
+typedef WAVEOUTMESSAGE3216 UNALIGNED *PWAVEOUTMESSAGE3216;
+
+#ifdef NULLSTRUCT
+typedef struct _WAVEINGETNUMDEVS16 { /* mm501 */
+} WAVEINGETNUMDEVS16;
+typedef WAVEINGETNUMDEVS16 UNALIGNED *PWAVEINGETNUMDEVS16;
+#endif
+
+typedef struct _WAVEINGETDEVCAPS16 { /* mm502 */
+ WORD f3;
+ VPWAVEINCAPS16 f2;
+ WORD f1;
+} WAVEINGETDEVCAPS16;
+typedef WAVEINGETDEVCAPS16 UNALIGNED *PWAVEINGETDEVCAPS16;
+
+typedef struct _WAVEINGETERRORTEXT16 { /* mm503 */
+ WORD f3;
+ VPSTR f2;
+ WORD f1;
+} WAVEINGETERRORTEXT16;
+typedef WAVEINGETERRORTEXT16 UNALIGNED *PWAVEINGETERRORTEXT16;
+
+typedef struct _WAVEINOPEN16 { /* mm504 */
+ DWORD f6;
+ DWORD f5;
+ DWORD f4;
+ VPWAVEFORMAT16 f3;
+ WORD f2;
+ VPHWAVEIN16 f1;
+} WAVEINOPEN16;
+typedef WAVEINOPEN16 UNALIGNED *PWAVEINOPEN16;
+
+typedef struct _WAVEINCLOSE16 { /* mm505 */
+ HWAVEIN16 f1;
+} WAVEINCLOSE16;
+typedef WAVEINCLOSE16 UNALIGNED *PWAVEINCLOSE16;
+
+typedef struct _WAVEINPREPAREHEADER3216 { /* mm506 */
+ WORD f3;
+ VPWAVEHDR16 f2;
+ HWAVEIN16 f1;
+} WAVEINPREPAREHEADER3216;
+typedef WAVEINPREPAREHEADER3216 UNALIGNED *PWAVEINPREPAREHEADER3216;
+
+typedef struct _WAVEINUNPREPAREHEADER3216 { /* mm507 */
+ WORD f3;
+ VPWAVEHDR16 f2;
+ HWAVEIN16 f1;
+} WAVEINUNPREPAREHEADER3216;
+typedef WAVEINUNPREPAREHEADER3216 UNALIGNED *PWAVEINUNPREPAREHEADER3216;
+
+typedef struct _WAVEINADDBUFFER16 { /* mm508 */
+ WORD f3;
+ VPWAVEHDR16 f2;
+ HWAVEIN16 f1;
+} WAVEINADDBUFFER16;
+typedef WAVEINADDBUFFER16 UNALIGNED *PWAVEINADDBUFFER16;
+
+typedef struct _WAVEINSTART16 { /* mm509 */
+ HWAVEIN16 f1;
+} WAVEINSTART16;
+typedef WAVEINSTART16 UNALIGNED *PWAVEINSTART16;
+
+typedef struct _WAVEINSTOP16 { /* mm510 */
+ HWAVEIN16 f1;
+} WAVEINSTOP16;
+typedef WAVEINSTOP16 UNALIGNED *PWAVEINSTOP16;
+
+typedef struct _WAVEINRESET16 { /* mm511 */
+ HWAVEIN16 f1;
+} WAVEINRESET16;
+typedef WAVEINRESET16 UNALIGNED *PWAVEINRESET16;
+
+typedef struct _WAVEINGETPOSITION16 { /* mm512 */
+ WORD f3;
+ VPMMTIME16 f2;
+ HWAVEIN16 f1;
+} WAVEINGETPOSITION16;
+typedef WAVEINGETPOSITION16 UNALIGNED *PWAVEINGETPOSITION16;
+
+typedef struct _WAVEINGETID16 { /* mm513 */
+ VPWORD f2;
+ HWAVEIN16 f1;
+} WAVEINGETID16;
+typedef WAVEINGETID16 UNALIGNED *PWAVEINGETID16;
+
+typedef struct _WAVEINMESSAGE3216 { /* mm514 */
+ DWORD f4;
+ DWORD f3;
+ WORD f2;
+ HWAVEIN16 f1;
+} WAVEINMESSAGE3216;
+typedef WAVEINMESSAGE3216 UNALIGNED *PWAVEINMESSAGE3216;
+
+typedef struct _TIMEGETSYSTEMTIME16 { /* mm601 */
+ WORD f2;
+ VPMMTIME16 f1;
+} TIMEGETSYSTEMTIME16;
+typedef TIMEGETSYSTEMTIME16 UNALIGNED *PTIMEGETSYSTEMTIME16;
+
+#ifdef NULLSTRUCT
+typedef struct _TIMEGETTIME16 { /* mm607 */
+} TIMEGETTIME16;
+typedef TIMEGETTIME16 UNALIGNED *PTIMEGETTIME16;
+#endif
+
+typedef struct _TIMESETEVENT16 { /* mm602 */
+ WORD f5;
+ DWORD f4;
+ VPTIMECALLBACK16 f3;
+ WORD f2;
+ WORD f1;
+} TIMESETEVENT16;
+typedef TIMESETEVENT16 UNALIGNED *PTIMESETEVENT16;
+
+typedef struct _TIMEKILLEVENT16 { /* mm603 */
+ WORD f1;
+} TIMEKILLEVENT16;
+typedef TIMEKILLEVENT16 UNALIGNED *PTIMEKILLEVENT16;
+
+typedef struct _TIMEGETDEVCAPS16 { /* mm604 */
+ WORD f2;
+ VPTIMECAPS16 f1;
+} TIMEGETDEVCAPS16;
+typedef TIMEGETDEVCAPS16 UNALIGNED *PTIMEGETDEVCAPS16;
+
+typedef struct _TIMEBEGINPERIOD16 { /* mm605 */
+ WORD f1;
+} TIMEBEGINPERIOD16;
+typedef TIMEBEGINPERIOD16 UNALIGNED *PTIMEBEGINPERIOD16;
+
+typedef struct _TIMEENDPERIOD16 { /* mm606 */
+ WORD f1;
+} TIMEENDPERIOD16;
+typedef TIMEENDPERIOD16 UNALIGNED *PTIMEENDPERIOD16;
+
+typedef struct _MCISENDCOMMAND16 { /* mm701 */
+ DWORD f4;
+ DWORD f3;
+ WORD f2;
+ WORD f1;
+} MCISENDCOMMAND16;
+typedef MCISENDCOMMAND16 UNALIGNED *PMCISENDCOMMAND16;
+
+typedef struct _MCISENDSTRING16 { /* mm702 */
+ HWND16 f4;
+ WORD f3;
+ VPSTR f2;
+ VPCSTR f1;
+} MCISENDSTRING16;
+typedef MCISENDSTRING16 UNALIGNED *PMCISENDSTRING16;
+
+typedef struct _MCIGETDEVICEID16 { /* mm703 */
+ VPCSTR f1;
+} MCIGETDEVICEID16;
+typedef MCIGETDEVICEID16 UNALIGNED *PMCIGETDEVICEID16;
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+typedef struct _MCIPARSECOMMAND16 { mm704
+ BOOL16 f6;
+ VPWORD f5;
+ VPSTR f4;
+ VPCSTR f3;
+ VPSTR f2;
+ WORD f1;
+} MCIPARSECOMMAND16;
+typedef MCIPARSECOMMAND16 UNALIGNED *PMCIPARSECOMMAND16;
+
+typedef struct _MCILOADCOMMANDRESOURCE16 { mm705
+ WORD f3;
+ VPCSTR f2;
+ HAND16 f1;
+} MCILOADCOMMANDRESOURCE16;
+typedef MCILOADCOMMANDRESOURCE16 UNALIGNED *PMCILOADCOMMANDRESOURCE16;
+
+------------------------------------------------------------------------------*/
+
+typedef struct _MCIGETERRORSTRING16 { /* mm706 */
+ WORD f3;
+ VPSTR f2;
+ DWORD f1;
+} MCIGETERRORSTRING16;
+typedef MCIGETERRORSTRING16 UNALIGNED *PMCIGETERRORSTRING16;
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+typedef struct _MCISETDRIVERDATA16 { mm707
+ DWORD f2;
+ WORD f1;
+} MCISETDRIVERDATA16;
+typedef MCISETDRIVERDATA16 UNALIGNED *PMCISETDRIVERDATA16;
+
+typedef struct _MCIGETDRIVERDATA16 { mm708
+ WORD f1;
+} MCIGETDRIVERDATA16;
+typedef MCIGETDRIVERDATA16 UNALIGNED *PMCIGETDRIVERDATA16;
+
+typedef struct _MCIDRIVERYIELD16 { mm710
+ WORD f1;
+} MCIDRIVERYIELD16;
+typedef MCIDRIVERYIELD16 UNALIGNED *PMCIDRIVERYIELD16;
+
+typedef struct _MCIDRIVERNOTIFY16 { mm711
+ WORD f3;
+ WORD f2;
+ HWND16 f1;
+} MCIDRIVERNOTIFY16;
+typedef MCIDRIVERNOTIFY16 UNALIGNED *PMCIDRIVERNOTIFY16;
+
+------------------------------------------------------------------------------*/
+
+typedef struct _MCIEXECUTE16 { /* mm712 */
+ VPCSTR f1;
+} MCIEXECUTE16;
+typedef MCIEXECUTE16 UNALIGNED *PMCIEXECUTE16;
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+typedef struct _MCIFREECOMMANDRESOURCE16 { mm713
+ WORD f1;
+} MCIFREECOMMANDRESOURCE16;
+typedef MCIFREECOMMANDRESOURCE16 UNALIGNED *PMCIFREECOMMANDRESOURCE16;
+
+------------------------------------------------------------------------------*/
+
+typedef struct _MCISETYIELDPROC16 { /* mm714 */
+ DWORD f3;
+ DWORD f2; //YIELDPROC
+ WORD f1;
+} MCISETYIELDPROC16;
+typedef MCISETYIELDPROC16 UNALIGNED *PMCISETYIELDPROC16;
+
+
+typedef struct _MCIGETDEVICEIDFROMELEMENTID16 { /* mm715 */
+ VPCSTR f2;
+ DWORD f1;
+} MCIGETDEVICEIDFROMELEMENTID16;
+typedef MCIGETDEVICEIDFROMELEMENTID16 UNALIGNED *PMCIGETDEVICEIDFROMELEMENTID16;
+
+typedef struct _MCIGETYIELDPROC16 { /* mm716 */
+ VPDWORD f2;
+ WORD f1;
+} MCIGETYIELDPROC16;
+typedef MCIGETYIELDPROC16 UNALIGNED *PMCIGETYIELDPROC16;
+
+
+typedef struct _MCIGETCREATORTASK16 { /* mm717 */
+ WORD f1;
+} MCIGETCREATORTASK16;
+typedef MCIGETCREATORTASK16 UNALIGNED *PMCIGETCREATORTASK16;
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ The following calls have all been zapped for the time being.
+
+typedef struct _MMTASKCREATE16 { mm900
+ DWORD f3;
+ HAND16 f2;
+ VPTASKCALLBACK16 f1;
+} MMTASKCREATE16;
+typedef MMTASKCREATE16 UNALIGNED *PMMTASKCREATE16;
+
+typedef struct _MMTASKBLOCK16 { mm902
+ HAND16 f1;
+} MMTASKBLOCK16;
+typedef MMTASKBLOCK16 UNALIGNED *PMMTASKBLOCK16;
+
+typedef struct _MMTASKSIGNAL16 { mm903
+ HAND16 f1;
+} MMTASKSIGNAL16;
+typedef MMTASKSIGNAL16 UNALIGNED *PMMTASKSIGNAL16;
+
+#ifdef NULLSTRUCT
+typedef struct _MMGETCURRENTTASK16 { mm904
+} MMGETCURRENTTASK16;
+typedef MMGETCURRENTTASK16 UNALIGNED *PMMGETCURRENTTASK16;
+#endif
+
+#ifdef NULLSTRUCT
+typedef struct _MMTASKYIELD16 { mm905
+} MMTASKYIELD16;
+typedef MMTASKYIELD16 UNALIGNED *PMMTASKYIELD16;
+#endif
+
+typedef struct _DRVCLOSE16 { mm1100
+ DWORD f3;
+ DWORD f2;
+ HDRVR16 f1;
+} DRVCLOSE16;
+typedef DRVCLOSE16 UNALIGNED *PDRVCLOSE16;
+
+typedef struct _DRVOPEN16 { mm1101
+ DWORD f3;
+ VPSTR f2;
+ VPSTR f1;
+} DRVOPEN16;
+typedef DRVOPEN16 UNALIGNED *PDRVOPEN16;
+
+typedef struct _DRVSENDMESSAGE16 { mm1102
+ DWORD f4;
+ DWORD f3;
+ WORD f2;
+ HDRVR16 f1;
+} DRVSENDMESSAGE16;
+typedef DRVSENDMESSAGE16 UNALIGNED *PDRVSENDMESSAGE16;
+
+typedef struct _DRVGETMODULEHANDLE16 { mm1103
+ HDRVR16 f1;
+} DRVGETMODULEHANDLE16;
+typedef DRVGETMODULEHANDLE16 UNALIGNED *PDRVGETMODULEHANDLE;
+
+#ifdef NULLSTRUCT
+typedef struct _DRVDEFDRIVERPROC16{ mm1104
+} DRVDEFDRIVERPROC16;
+typedef DRVDEFDRIVERPROC16 UNALIGNED *PDRVDEFDRIVERPROC;
+#endif
+
+------------------------------------------------------------------------------*/
+
+typedef struct _MMIOOPEN16 { /* mm1210 */
+ DWORD f3;
+ VPMMIOINFO16 f2;
+ VPSTR f1;
+} MMIOOPEN16;
+typedef MMIOOPEN16 UNALIGNED *PMMIOOPEN16;
+
+typedef struct _MMIOCLOSE16 { /* mm1211 */
+ WORD f2;
+ HMMIO16 f1;
+} MMIOCLOSE16;
+typedef MMIOCLOSE16 UNALIGNED *PMMIOCLOSE16;
+
+typedef struct _MMIOREAD16 { /* mm1212 */
+ LONG f3;
+ HPSTR16 f2;
+ HMMIO16 f1;
+} MMIOREAD16;
+typedef MMIOREAD16 UNALIGNED *PMMIOREAD16;
+
+typedef struct _MMIOWRITE16 { /* mm1213 */
+ LONG f3;
+ HPSTR16 f2;
+ HMMIO16 f1;
+} MMIOWRITE16;
+typedef MMIOWRITE16 UNALIGNED *PMMIOWRITE16;
+
+typedef struct _MMIOSEEK16 { /* mm1214 */
+ INT16 f3;
+ LONG f2;
+ HMMIO16 f1;
+} MMIOSEEK16;
+typedef MMIOSEEK16 UNALIGNED *PMMIOSEEK16;
+
+typedef struct _MMIOGETINFO16 { /* mm1215 */
+ WORD f3;
+ VPMMIOINFO16 f2;
+ HMMIO16 f1;
+} MMIOGETINFO16;
+typedef MMIOGETINFO16 UNALIGNED *PMMIOGETINFO16;
+
+typedef struct _MMIOSETINFO16 { /* mm1216 */
+ WORD f3;
+ VPMMIOINFO16 f2;
+ HMMIO16 f1;
+} MMIOSETINFO16;
+typedef MMIOSETINFO16 UNALIGNED *PMMIOSETINFO16;
+
+typedef struct _MMIOSETBUFFER16 { /* mm1217 */
+ WORD f4;
+ LONG f3;
+ VPSTR f2;
+ HMMIO16 f1;
+} MMIOSETBUFFER16;
+typedef MMIOSETBUFFER16 UNALIGNED *PMMIOSETBUFFER16;
+
+typedef struct _MMIOFLUSH16 { /* mm1218 */
+ WORD f2;
+ HMMIO16 f1;
+} MMIOFLUSH16;
+typedef MMIOFLUSH16 UNALIGNED *PMMIOFLUSH16;
+
+typedef struct _MMIOADVANCE16 { /* mm1219 */
+ WORD f3;
+ VPMMIOINFO16 f2;
+ HMMIO16 f1;
+} MMIOADVANCE16;
+typedef MMIOADVANCE16 UNALIGNED *PMMIOADVANCE16;
+
+typedef struct _MMIOSTRINGTOFOURCC16 { /* mm1220 */
+ WORD f2;
+ VPCSTR f1;
+} MMIOSTRINGTOFOURCC16;
+typedef MMIOSTRINGTOFOURCC16 UNALIGNED *PMMIOSTRINGTOFOURCC16;
+
+typedef struct _MMIOINSTALLIOPROC16 { /* mm1221 */
+ DWORD f3;
+ VPMMIOPROC16 f2;
+ FOURCC f1;
+} MMIOINSTALLIOPROC16;
+typedef MMIOINSTALLIOPROC16 UNALIGNED *PMMIOINSTALLIOPROC16;
+
+typedef struct _MMIOSENDMESSAGE16 { /* mm1222 */
+ LPARAM f4;
+ LPARAM f3;
+ WORD f2;
+ HMMIO16 f1;
+} MMIOSENDMESSAGE16;
+typedef MMIOSENDMESSAGE16 UNALIGNED *PMMIOSENDMESSAGE16;
+
+typedef struct _MMIODESCEND16 { /* mm1223 */
+ WORD f4;
+ VPMMCKINFO16 f3;
+ VPMMCKINFO16 f2;
+ HMMIO16 f1;
+} MMIODESCEND16;
+typedef MMIODESCEND16 UNALIGNED *PMMIODESCEND16;
+
+typedef struct _MMIOASCEND16 { /* mm1224 */
+ WORD f3;
+ VPMMCKINFO16 f2;
+ HMMIO16 f1;
+} MMIOASCEND16;
+typedef MMIOASCEND16 UNALIGNED *PMMIOASCEND16;
+
+typedef struct _MMIOCREATECHUNK16 { /* mm1225 */
+ WORD f3;
+ VPMMCKINFO16 f2;
+ HMMIO16 f1;
+} MMIOCREATECHUNK16;
+typedef MMIOCREATECHUNK16 UNALIGNED *PMMIOCREATECHUNK16;
+
+typedef struct _MMIORENAME16 { /* mm1226 */
+ DWORD f4;
+ VPMMIOINFO16 f3;
+ VPCSTR f2;
+ VPCSTR f1;
+} MMIORENAME16;
+typedef MMIORENAME16 UNALIGNED *PMMIORENAME16;
+
+/* XLATOFF */
+#pragma pack()
+/* XLATON */
+
diff --git a/private/mvdm/inc/wowshell.h b/private/mvdm/inc/wowshell.h
new file mode 100644
index 000000000..15d269742
--- /dev/null
+++ b/private/mvdm/inc/wowshell.h
@@ -0,0 +1,172 @@
+/*++ BUILD Version: 0001
+ *
+ * WOW v1.0
+ *
+ * Copyright (c) 1991, Microsoft Corporation
+ *
+ * WOWSHELL.H
+ * 16-bit SHELL API argument structures
+ *
+ * History:
+ * Created 14-April-1992 by Chandan S. Chauhan (ChandanC)
+ *
+--*/
+
+/* SHELL API IDs
+ */
+#define FUN_REGOPENKEY 1
+#define FUN_REGCREATEKEY 2
+#define FUN_REGCLOSEKEY 3
+#define FUN_REGDELETEKEY 4
+#define FUN_REGSETVALUE 5
+#define FUN_REGQUERYVALUE 6
+#define FUN_REGENUMKEY 7
+#define FUN_DRAGACCEPTFILES 9
+#define FUN_DRAGQUERYFILE 11
+#define FUN_DRAGFINISH 12
+#define FUN_DRAGQUERYPOINT 13
+#define FUN_SHELLEXECUTE 20
+#define FUN_FINDEXECUTABLE 21
+#define FUN_SHELLABOUT 22
+#define FUN_WCI 32
+#define FUN_ABOUTDLGPROC 33
+#define FUN_EXTRACTICON 34
+#define FUN_EXTRACTASSOCIATEDICON 36
+#define FUN_DOENVIRONMENTSUBST 37
+#define FUN_FINDENVIRONMENTSTRING 38
+#define FUN_INTERNALEXTRACTICON 39
+#define FUN_HERETHARBETYGARS 100
+#define FUN_FINDEXEDLGPROC 101
+#define FUN_REGISTERSHELLHOOK 102
+#define FUN_SHELLHOOKPROC 103
+
+
+/* XLATOFF */
+#pragma pack(2)
+/* XLATON */
+
+typedef struct _REGOPENKEY16 { /* s1 */
+ VPVOID f3;
+ VPVOID f2;
+ DWORD f1;
+} REGOPENKEY16;
+typedef REGOPENKEY16 UNALIGNED *PREGOPENKEY16;
+
+typedef struct _REGCREATEKEY16 { /* s2 */
+ VPVOID f3;
+ VPVOID f2;
+ DWORD f1;
+} REGCREATEKEY16;
+typedef REGCREATEKEY16 UNALIGNED *PREGCREATEKEY16;
+
+typedef struct _REGCLOSEKEY16 { /* s3 */
+ DWORD f1;
+} REGCLOSEKEY16;
+typedef REGCLOSEKEY16 UNALIGNED *PREGCLOSEKEY16;
+
+typedef struct _REGDELETEKEY16 { /* s4 */
+ VPVOID f2;
+ DWORD f1;
+} REGDELETEKEY16;
+typedef REGDELETEKEY16 UNALIGNED *PREGDELETEKEY16;
+
+typedef struct _REGSETVALUE16 { /* s5 */
+ DWORD f5;
+ VPVOID f4;
+ DWORD f3;
+ VPVOID f2;
+ DWORD f1;
+} REGSETVALUE16;
+typedef REGSETVALUE16 UNALIGNED *PREGSETVALUE16;
+
+typedef struct _REGQUERYVALUE16 { /* s6 */
+ VPVOID f4;
+ VPVOID f3;
+ VPVOID f2;
+ DWORD f1;
+} REGQUERYVALUE16;
+typedef REGQUERYVALUE16 UNALIGNED *PREGQUERYVALUE16;
+
+typedef struct _REGENUMKEY16 { /* s7 */
+ DWORD f4;
+ VPVOID f3;
+ DWORD f2;
+ DWORD f1;
+} REGENUMKEY16;
+typedef REGENUMKEY16 UNALIGNED *PREGENUMKEY16;
+
+typedef struct _DRAGACCEPTFILES16 { /* s9 */
+ SHORT f2;
+ HAND16 f1;
+} DRAGACCEPTFILES16;
+typedef DRAGACCEPTFILES16 UNALIGNED *PDRAGACCEPTFILES16;
+
+typedef struct _DRAGQUERYFILE16 { /* s11 */
+ WORD f4;
+ VPVOID f3;
+ WORD f2;
+ HAND16 f1;
+} DRAGQUERYFILE16;
+typedef DRAGQUERYFILE16 UNALIGNED *PDRAGQUERYFILE16;
+
+typedef struct _DRAGFINISH16 { /* s12 */
+ HAND16 f1;
+} DRAGFINISH16;
+typedef DRAGFINISH16 UNALIGNED *PDRAGFINISH16;
+
+typedef struct _DRAGQUERYPOINT16 { /* s13 */
+ VPVOID f2;
+ HAND16 f1;
+} DRAGQUERYPOINT16;
+typedef DRAGQUERYPOINT16 UNALIGNED *PDRAGQUERYPOINT16;
+
+typedef struct _SHELLABOUT16 { /* s22 */
+ HAND16 f4;
+ VPVOID f3;
+ VPVOID f2;
+ HAND16 f1;
+} SHELLABOUT16;
+typedef SHELLABOUT16 UNALIGNED *PSHELLABOUT16;
+
+
+typedef struct _SHELLEXECUTE16 { /* s20 */
+ WORD f6;
+ VPVOID f5;
+ VPVOID f4;
+ VPVOID f3;
+ VPVOID f2;
+ HAND16 f1;
+} SHELLEXECUTE16;
+typedef SHELLEXECUTE16 UNALIGNED *PSHELLEXECUTE16;
+
+typedef struct _FINDEXECUTABLE16 { /* s21 */
+ VPVOID f3;
+ VPVOID f2;
+ VPVOID f1;
+} FINDEXECUTABLE16;
+typedef FINDEXECUTABLE16 UNALIGNED *PFINDEXECUTABLE16;
+
+typedef struct _EXTRACTICON16 { /* s34 */
+ WORD f3;
+ VPVOID f2;
+ HAND16 f1;
+} EXTRACTICON16;
+typedef EXTRACTICON16 UNALIGNED *PEXTRACTICON16;
+
+typedef struct _EXTRACTASSOCIATEDICON16 { /* s36 */
+ VPVOID f3;
+ VPVOID f2;
+ HAND16 f1;
+} EXTRACTASSOCIATEDICON16;
+typedef EXTRACTASSOCIATEDICON16 UNALIGNED *PEXTRACTASSOCIATEDICON16;
+
+typedef struct _DOENVIRONMENTSUBST16 { /* s37 */
+ WORD cch;
+ VPVOID vpsz;
+} DOENVIRONMENTSUBST16;
+typedef DOENVIRONMENTSUBST16 UNALIGNED *PDOENVIRONMENTSUBST16;
+
+/* XLATOFF */
+#pragma pack()
+/* XLATON */
+
diff --git a/private/mvdm/inc/wowsnd.h b/private/mvdm/inc/wowsnd.h
new file mode 100644
index 000000000..7e469c23d
--- /dev/null
+++ b/private/mvdm/inc/wowsnd.h
@@ -0,0 +1,146 @@
+/*++ BUILD Version: 0001
+ *
+ * WOW v1.0
+ *
+ * Copyright (c) 1991, Microsoft Corporation
+ *
+ * WOWSND.H
+ * 16-bit Sound API argument structures
+ *
+ * History:
+ * Created 02-Feb-1991 by Jeff Parsons (jeffpar)
+--*/
+
+
+/* Sound API IDs
+ */
+#define FUN_CLOSESOUND 2 //
+#define FUN_COUNTVOICENOTES 13 //
+#define FUN_DOBEEP 17 // Internal
+#define FUN_GETTHRESHOLDEVENT 14 //
+#define FUN_GETTHRESHOLDSTATUS 15 //
+#define FUN_MYOPENSOUND 18 // Internal
+#define FUN_OPENSOUND 1 //
+#define FUN_SETSOUNDNOISE 7 //
+#define FUN_SETVOICEACCENT 5 //
+#define FUN_SETVOICEENVELOPE 6 //
+#define FUN_SETVOICENOTE 4 //
+#define FUN_SETVOICEQUEUESIZE 3 //
+#define FUN_SETVOICESOUND 8 //
+#define FUN_SETVOICETHRESHOLD 16 //
+#define FUN_SOUND_WEP 0 // Export by name
+#define FUN_STARTSOUND 9 //
+#define FUN_STOPSOUND 10 //
+#define FUN_SYNCALLVOICES 12 //
+#define FUN_WAITSOUNDSTATE 11 //
+
+
+/* XLATOFF */
+#pragma pack(2)
+/* XLATON */
+
+#ifdef NULLSTRUCT
+typedef struct _CLOSESOUND16 { /* s2 */
+} CLOSESOUND16;
+typedef CLOSESOUND16 UNALIGNED *PCLOSESOUND16;
+#endif
+
+typedef struct _COUNTVOICENOTES16 { /* s13 */
+ SHORT f1;
+} COUNTVOICENOTES16;
+typedef COUNTVOICENOTES16 UNALIGNED *PCOUNTVOICENOTES16;
+
+#ifdef NULLSTRUCT
+typedef struct _GETTHRESHOLDEVENT16 { /* s14 */
+} GETTHRESHOLDEVENT16;
+typedef GETTHRESHOLDEVENT16 UNALIGNED *PGETTHRESHOLDEVENT16;
+#endif
+
+#ifdef NULLSTRUCT
+typedef struct _GETTHRESHOLDSTATUS16 { /* s15 */
+} GETTHRESHOLDSTATUS16;
+typedef GETTHRESHOLDSTATUS16 UNALIGNED *PGETTHRESHOLDSTATUS16;
+#endif
+
+#ifdef NULLSTRUCT
+typedef struct _OPENSOUND16 { /* s1 */
+} OPENSOUND16;
+typedef OPENSOUND16 UNALIGNED *POPENSOUND16;
+#endif
+
+typedef struct _SETSOUNDNOISE16 { /* s7 */
+ SHORT f1;
+ SHORT f2;
+} SETSOUNDNOISE16;
+typedef SETSOUNDNOISE16 UNALIGNED *PSETSOUNDNOISE16;
+
+typedef struct _SETVOICEACCENT16 { /* s5 */
+ SHORT f1;
+ SHORT f2;
+ SHORT f3;
+ SHORT f4;
+ SHORT f5;
+} SETVOICEACCENT16;
+typedef SETVOICEACCENT16 UNALIGNED *PSETVOICEACCENT16;
+
+typedef struct _SETVOICEENVELOPE16 { /* s6 */
+ SHORT f1;
+ SHORT f2;
+ SHORT f3;
+} SETVOICEENVELOPE16;
+typedef SETVOICEENVELOPE16 UNALIGNED *PSETVOICEENVELOPE16;
+
+typedef struct _SETVOICENOTE16 { /* s4 */
+ SHORT f1;
+ SHORT f2;
+ SHORT f3;
+ SHORT f4;
+} SETVOICENOTE16;
+typedef SETVOICENOTE16 UNALIGNED *PSETVOICENOTE16;
+
+typedef struct _SETVOICEQUEUESIZE16 { /* s3 */
+ SHORT f1;
+ SHORT f2;
+} SETVOICEQUEUESIZE16;
+typedef SETVOICEQUEUESIZE16 UNALIGNED *PSETVOICEQUEUESIZE16;
+
+typedef struct _SETVOICESOUND16 { /* s8 */
+ SHORT f1;
+ LONG f2;
+ SHORT f3;
+} SETVOICESOUND16;
+typedef SETVOICESOUND16 UNALIGNED *PSETVOICESOUND16;
+
+typedef struct _SETVOICETHRESHOLD16 { /* s16 */
+ SHORT f1;
+ SHORT f2;
+} SETVOICETHRESHOLD16;
+typedef SETVOICETHRESHOLD16 UNALIGNED *PSETVOICETHRESHOLD16;
+
+#ifdef NULLSTRUCT
+typedef struct _STARTSOUND16 { /* s9 */
+} STARTSOUND16;
+typedef STARTSOUND16 UNALIGNED *PSTARTSOUND16;
+#endif
+
+#ifdef NULLSTRUCT
+typedef struct _STOPSOUND16 { /* s10 */
+} STOPSOUND16;
+typedef STOPSOUND16 UNALIGNED *PSTOPSOUND16;
+#endif
+
+#ifdef NULLSTRUCT
+typedef struct _SYNCALLVOICES16 { /* s12 */
+} SYNCALLVOICES16;
+typedef SYNCALLVOICES16 UNALIGNED *PSYNCALLVOICES16;
+#endif
+
+typedef struct _WAITSOUNDSTATE16 { /* s11 */
+ SHORT f1;
+} WAITSOUNDSTATE16;
+typedef WAITSOUNDSTATE16 UNALIGNED *PWAITSOUNDSTATE16;
+
+/* XLATOFF */
+#pragma pack()
+/* XLATON */
+
diff --git a/private/mvdm/inc/wowth.h b/private/mvdm/inc/wowth.h
new file mode 100644
index 000000000..f8e9b4333
--- /dev/null
+++ b/private/mvdm/inc/wowth.h
@@ -0,0 +1,39 @@
+/*++ BUILD Version: 0001
+ *
+ * WOW v1.0
+ *
+ * Copyright (c) 1991, Microsoft Corporation
+ *
+ * WOWTH.H
+ * 16-bit ToolHelp thunked API argument structures
+ *
+ * History:
+ * 12-Nov-92 Dave Hart (davehart) created using wowkrn.h as template
+--*/
+
+
+/* ToolHelp API IDs
+ */
+#define FUN_CLASSFIRST 1
+#define FUN_CLASSNEXT 2
+
+
+/* XLATOFF */
+#pragma pack(2)
+/* XLATON */
+
+
+typedef struct _CLASSFIRST16 { /* th1 */
+ VPVOID f1;
+} CLASSFIRST16;
+typedef CLASSFIRST16 UNALIGNED *PCLASSFIRST16;
+
+typedef struct _CLASSNEXT16 { /* th2 */
+ VPVOID f1;
+} CLASSNEXT16;
+typedef CLASSNEXT16 UNALIGNED *PCLASSNEXT16;
+
+
+/* XLATOFF */
+#pragma pack()
+/* XLATON */
diff --git a/private/mvdm/inc/wowusr.h b/private/mvdm/inc/wowusr.h
new file mode 100644
index 000000000..b5f487c30
--- /dev/null
+++ b/private/mvdm/inc/wowusr.h
@@ -0,0 +1,3214 @@
+/*++ BUILD Version: 0001
+ *
+ * WOW v1.0
+ *
+ * Copyright (c) 1991, Microsoft Corporation
+ *
+ * WOWUSR.H
+ * 16-bit User API argument structures
+ *
+ * History:
+ * Created 02-Feb-1991 by Jeff Parsons (jeffpar)
+ * Added Win 3.1 APIs on 19-March-1992 Chandan S. Chauhan (ChandanC)
+ *
+--*/
+
+/* User API IDs
+ */
+#define FUN_ADJUSTWINDOWRECT 102 //
+#define FUN_ADJUSTWINDOWRECTEX 454 //
+#define FUN_ANSILOWER 432 //
+#define FUN_ANSILOWERBUFF 438 //
+#define FUN_ANSINEXT 472 //
+#define FUN_ANSIPREV 473 //
+#define FUN_ANSIUPPER 431 //
+#define FUN_ANSIUPPERBUFF 437 //
+#define FUN_ANYPOPUP 52 //
+#define FUN_APPENDMENU 411 //
+#define FUN_ARRANGEICONICWINDOWS 170 // Internal, proto
+#define FUN_BEGINDEFERWINDOWPOS 259 // Internal, proto
+#define FUN_BEGINPAINT 39 //
+#define FUN_BRINGWINDOWTOTOP 45 //
+#define FUN_BROADCASTMESSAGE 355 // Internal
+#define FUN_BUILDCOMMDCB 213 //
+#define FUN_BUTTONWNDPROC 303 // Internal
+#define FUN_CALCCHILDSCROLL 462 // Internal
+#define FUN_CALLMSGFILTER 123 //
+#define FUN_CALLWINDOWPROC 122 //
+#define FUN_CARETBLINKPROC 311 // Internal
+#define FUN_CASCADECHILDWINDOWS 198 // Internal
+#define FUN_CHANGECLIPBOARDCHAIN 149 //
+#define FUN_CHANGEMENU 153 //
+#define FUN_CHECKDLGBUTTON 97 //
+#define FUN_CHECKMENUITEM 154 //
+#define FUN_CHECKRADIOBUTTON 96 //
+#define FUN_CHILDWINDOWFROMPOINT 191 //
+#define FUN_CLEARCOMMBREAK 211 //
+#define FUN_CLIENTTOSCREEN 28 //
+#define FUN_CLIPCURSOR 16 //
+#define FUN_CLOSECLIPBOARD 138 //
+#define FUN_CLOSECOMM 207 //
+#define FUN_CLOSEWINDOW 43 //
+#define FUN_COMBOBOXCTLWNDPROC 344 // Internal
+#define FUN_COMPUPDATERECT 316 // Internal
+#define FUN_COMPUPDATERGN 317 // Internal
+#define FUN_CONTROLPANELINFO 273 // Internal
+#define FUN_CONTSCROLL 310 // Internal
+#define FUN_COPYRECT 74 //
+#define FUN_COUNTCLIPBOARDFORMATS 143 //
+#define FUN_CREATECARET 163 //
+#define FUN_CREATECURSOR 406 //
+#define FUN_CREATECURSORICONINDIRECT 408 // Internal
+#define FUN_CREATEDIALOG 89 //
+#define FUN_CREATEDIALOGINDIRECT 219 //
+#define FUN_CREATEDIALOGINDIRECTPARAM 242 //
+#define FUN_CREATEDIALOGPARAM 241 //
+#define FUN_CREATEICON 407 //
+#define FUN_CREATEMENU 151 //
+#define FUN_CREATEPOPUPMENU 415 //
+#define FUN_CREATEWINDOW 41 //
+#define FUN_CREATEWINDOWEX 452 //
+#define FUN_DEFDLGPROC 308 //
+#define FUN_DEFDLGPROCTHUNK 534 //
+#define FUN_DEFERWINDOWPOS 260 // Internal, proto
+#define FUN_DEFFRAMEPROC 445 //
+#define FUN_DEFHOOKPROC 235 //
+#define FUN_DEFMDICHILDPROC 447 //
+#define FUN_DEFWINDOWPROC 107 //
+#define FUN_DELETEMENU 413 //
+#define FUN_DESKTOPWNDPROC 305 // Internal
+#define FUN_DESTROYCARET 164 //
+#define FUN_DESTROYCURSOR 458 //
+#define FUN_DESTROYICON 457 //
+#define FUN_DESTROYMENU 152 //
+#define FUN_DESTROYWINDOW 53 //
+#define FUN_DIALOGBOX 87 //
+#define FUN_DIALOGBOXINDIRECT 218 //
+#define FUN_DIALOGBOXINDIRECTPARAM 240 //
+#define FUN_DIALOGBOXPARAM 239 //
+#define FUN_DISABLEOEMLAYER 4 // Internal
+#define FUN_DISPATCHMESSAGE 114 //
+#define FUN_DLGDIRLIST 100 //
+#define FUN_DLGDIRLISTCOMBOBOX 195 //
+#define FUN_DLGDIRSELECT 99 //
+#define FUN_DLGDIRSELECTCOMBOBOX 194 //
+#define FUN_DRAGDETECT 465 // Internal
+#define FUN_DRAGOBJECT 464 // Internal
+#define FUN_DRAWFOCUSRECT 466 //
+#define FUN_DRAWICON 84 //
+#define FUN_DRAWMENUBAR 160 //
+#define FUN_DRAWTEXT 85 //
+#define FUN_DUMPICON 459 // Internal
+#define FUN_EDITWNDPROC 301 // Internal
+#define FUN_EMPTYCLIPBOARD 139 //
+#define FUN_ENABLEHARDWAREINPUT 331 //
+#define FUN_ENABLEMENUITEM 155 //
+#define FUN_ENABLEOEMLAYER 3 // Internal
+#define FUN_ENABLEWINDOW 34 //
+#define FUN_ENDDEFERWINDOWPOS 261 // Internal, proto
+#define FUN_ENDDIALOG 88 //
+#define FUN_ENDMENU 187 // Internal
+#define FUN_ENDPAINT 40 //
+#define FUN_ENUMCHILDWINDOWS 55 //
+#define FUN_ENUMCLIPBOARDFORMATS 144 //
+#define FUN_ENUMPROPS 27 //
+#define FUN_ENUMTASKWINDOWS 225 //
+#define FUN_ENUMWINDOWS 54 //
+#define FUN_EQUALRECT 244 //
+#define FUN_ESCAPECOMMFUNCTION 214 //
+#define FUN_EXCLUDEUPDATERGN 238 //
+#define FUN_EXITWINDOWS 7 // Internal, proto
+#define FUN_FARCALLNETDRIVER 500 // Internal
+#define FUN_FILEPORTDLGPROC 346 // Internal
+#define FUN_FILLRECT 81 //
+#define FUN_FILLWINDOW 324 // Internal
+#define FUN_FINALUSERINIT 400 // Internal
+#define FUN_FINDWINDOW 50 //
+#define FUN_FLASHWINDOW 105 //
+#define FUN_FLUSHCOMM 215 //
+#define FUN_FRAMERECT 83 //
+#define FUN_GETACTIVEWINDOW 60 //
+#define FUN_GETASYNCKEYSTATE 249 //
+#define FUN_GETCAPTURE 236 //
+#define FUN_GETCARETBLINKTIME 169 //
+#define FUN_GETCARETPOS 183 //
+#define FUN_GETCLASSINFO 404 //
+#define FUN_GETCLASSLONG 131 //
+#define FUN_GETCLASSNAME 58 //
+#define FUN_GETCLASSWORD 129 //
+#define FUN_GETCLIENTRECT 33 //
+#define FUN_GETCLIPBOARDDATA 142 //
+#define FUN_GETCLIPBOARDFORMATNAME 146 //
+#define FUN_GETCLIPBOARDOWNER 140 //
+#define FUN_GETCLIPBOARDVIEWER 148 //
+#define FUN_GETCOMMERROR 203 //
+#define FUN_GETCOMMEVENTMASK 209 //
+#define FUN_GETCOMMSTATE 202 //
+#define FUN_GETCONTROLBRUSH 326 // Internal
+#define FUN_GETCURRENTTIME 15 //
+#define FUN_GETSYSTEMMSECCOUNT 15 // This system.drv rtn gets thunked to GetCurrentTime
+#define FUN_GETCURSORPOS 17 //
+#define FUN_GETDC 66 //
+#define FUN_GETDESKTOPHWND 278 // Internal, proto
+#define FUN_GETDESKTOPWINDOW 286 //
+#define FUN_GETDIALOGBASEUNITS 243 //
+#define FUN_GETDLGCTRLID 277 // Internal, proto
+#define FUN_GETDLGITEM 91 //
+#define FUN_GETDLGITEMINT 95 //
+#define FUN_GETDLGITEMTEXT 93 //
+#define FUN_GETDOUBLECLICKTIME 21 //
+#define FUN_GETFILEPORTNAME 343 // Internal
+#define FUN_GETFOCUS 23 //
+#define FUN_GETICONID 455 // Internal
+#define FUN_GETINPUTSTATE 335 //
+#define FUN_GETINTERNALWINDOWPOS 460 // Internal
+#define FUN_GETKEYBOARDSTATE 222 //
+#define FUN_GETKEYSTATE 106 //
+#define FUN_GETLASTACTIVEPOPUP 287 //
+#define FUN_GETMENU 157 //
+#define FUN_GETMENUCHECKMARKDIMENSIONS 417 //
+#define FUN_GETMENUITEMCOUNT 263 //
+#define FUN_GETMENUITEMID 264 //
+#define FUN_GETMENUSTATE 250 //
+#define FUN_GETMENUSTRING 161 //
+#define FUN_GETMESSAGE 108 //
+#define FUN_GETMESSAGE2 323 // Internal
+#define FUN_GETMESSAGEPOS 119 //
+#define FUN_GETMESSAGETIME 120 //
+#define FUN_GETMOUSEEVENTPROC 337 // Internal
+#define FUN_GETNEXTDLGGROUPITEM 227 //
+#define FUN_GETNEXTDLGTABITEM 228 //
+#define FUN_GETNEXTQUEUEWINDOW 274 // Internal
+#define FUN_GETNEXTWINDOW 230 //
+#define FUN_GETPARENT 46 //
+#define FUN_GETPRIORITYCLIPBOARDFORMAT 402 //
+#define FUN_GETPROP 25 //
+#define FUN_GETQUEUESTATUS 334 // Internal
+#define FUN_GETSCROLLPOS 63 //
+#define FUN_GETSCROLLRANGE 65 //
+#define FUN_GETSUBMENU 159 //
+#define FUN_GETSYSCOLOR 180 //
+#define FUN_GETSYSMODALWINDOW 189 //
+#define FUN_GETSYSTEMMENU 156 //
+#define FUN_GETSYSTEMMETRICS 179 //
+#define FUN_GETTABBEDTEXTEXTENT 197 //
+#define FUN_GETTASKFROMHWND 117 // Internal
+#define FUN_GETTICKCOUNT 13 //
+#define FUN_GETTIMERRESOLUTION 14 // Internal
+#define FUN_GETTOPWINDOW 229 //
+#define FUN_GETUPDATERECT 190 //
+#define FUN_GETUPDATERGN 237 //
+#define FUN_GETWC2 318 // Internal
+#define FUN_GETWINDOW 262 //
+#define FUN_GETWINDOWDC 67 //
+#define FUN_GETWINDOWLONG 135 //
+#define FUN_GETWINDOWRECT 32 //
+#define FUN_GETWINDOWTASK 224 //
+#define FUN_GETWINDOWTEXT 36 //
+#define FUN_GETWINDOWTEXTLENGTH 38 //
+#define FUN_GETWINDOWWORD 133 //
+#define FUN_GLOBALADDATOM 268 //
+#define FUN_GLOBALDELETEATOM 269 //
+#define FUN_GLOBALFINDATOM 270 //
+#define FUN_GLOBALGETATOMNAME 271 //
+#define FUN_GRAYSTRING 185 //
+#define FUN_HIDECARET 166 //
+#define FUN_HILITEMENUITEM 162 //
+#define FUN_ICONSIZE 86 // Internal
+#define FUN_INFLATERECT 78 //
+#define FUN_INITAPP 5 // No proto
+#define FUN_INSENDMESSAGE 192 //
+#define FUN_INSERTMENU 410 //
+#define FUN_INTERSECTRECT 79 //
+#define FUN_INVALIDATERECT 125 //
+#define FUN_INVALIDATERGN 126 //
+#define FUN_INVERTRECT 82 //
+#define FUN_ISCHARALPHA 433 //
+#define FUN_ISCHARALPHANUMERIC 434 //
+#define FUN_ISCHARLOWER 436 //
+#define FUN_ISCHARUPPER 435 //
+#define FUN_ISCHILD 48 //
+#define FUN_ISCLIPBOARDFORMATAVAILABLE 193 //
+#define FUN_ISDIALOGMESSAGE 90 //
+#define FUN_ISDLGBUTTONCHECKED 98 //
+#define FUN_ISICONIC 31 //
+#define FUN_ISRECTEMPTY 75 //
+#define FUN_ISTWOBYTECHARPREFIX 51 // Internal, proto
+#define FUN_ISUSERIDLE 333 // Internal
+#define FUN_ISWINDOW 47 //
+#define FUN_ISWINDOWENABLED 35 //
+#define FUN_ISWINDOWVISIBLE 49 //
+#define FUN_ISZOOMED 272 //
+#define FUN_KILLSYSTEMTIMER 182 // Internal
+#define FUN_KILLTIMER 12 //
+#define FUN_KILLTIMER2 327 // Internal
+#define FUN_LBOXCARETBLINKER 453 // Internal
+#define FUN_LBOXCTLWNDPROC 307 // Internal
+#define FUN_LOADACCELERATORS 177 //
+#define FUN_LOADBITMAP 175 //
+#define FUN_LOADCURSOR 173 //
+#define FUN_LOADCURSORICONHANDLER 336 // Internal
+#define FUN_LOADDIBCURSORHANDLER 356 // Internal
+#define FUN_LOADDIBICONHANDLER 357 // Internal
+#define FUN_LOADICON 174 //
+#define FUN_LOADICONHANDLER 456 // Internal
+#define FUN_LOADMENU 150 //
+#define FUN_LOADMENUINDIRECT 220 //
+#define FUN_LOADSTRING 176 //
+#define FUN_LOCKMYTASK 276 // Internal
+#define FUN_LOOKUPMENUHANDLE 217 // Internal
+#define FUN_LSTRCMP 430 //
+#define FUN_LSTRCMPI 471 //
+#define FUN_MAPDIALOGRECT 103 //
+#define FUN_MB_DLGPROC 409 // Internal
+#define FUN_MDICLIENTWNDPROC 444 // Internal
+#define FUN_MENUITEMSTATE 329 // Internal
+#define FUN_MENUWNDPROC 306 // Internal
+#define FUN_MESSAGEBEEP 104 //
+#define FUN_MESSAGEBOX 1 //
+#define FUN_MODIFYMENU 414 //
+#define FUN_MOVEWINDOW 56 //
+#define FUN_OFFSETRECT 77 //
+#define FUN_OLDEXITWINDOWS 2 // Internal
+#define FUN_OPENCLIPBOARD 137 //
+#define FUN_OPENCOMM 200 //
+#define FUN_OPENICON 44 //
+#define FUN_PAINTRECT 325 // Internal
+#define FUN_PEEKMESSAGE 109 //
+#define FUN_POSTAPPMESSAGE 116 //
+#define FUN_POSTMESSAGE 110 //
+#define FUN_POSTMESSAGE2 313 // Internal
+#define FUN_POSTQUITMESSAGE 6 //
+#define FUN_PTINRECT 76 //
+#define FUN_READCOMM 204 //
+#define FUN_REALIZEPALETTE 283 //
+#define FUN_REGISTERCLASS 57 //
+#define FUN_REGISTERCLIPBOARDFORMAT 145 //
+#define FUN_REGISTERWINDOWMESSAGE 118 //
+#define FUN_RELEASECAPTURE 19 //
+#define FUN_RELEASEDC 68 //
+#define FUN_REMOVEMENU 412 //
+#define FUN_REMOVEPROP 24 //
+#define FUN_REPAINTSCREEN 275 // No proto
+#define FUN_REPLYMESSAGE 115 //
+#define FUN_SBWNDPROC 304 // Internal
+#define FUN_SCREENTOCLIENT 29 //
+#define FUN_SCROLLCHILDREN 463 // Internal
+#define FUN_SCROLLDC 221 //
+#define FUN_SCROLLWINDOW 61 //
+#define FUN_SELECTPALETTE 282 //
+#define FUN_SENDDLGITEMMESSAGE 101 //
+#define FUN_SENDMESSAGE 111 //
+#define FUN_SENDMESSAGE2 312 // Internal
+#define FUN_SETACTIVEWINDOW 59 //
+#define FUN_SETCAPTURE 18 //
+#define FUN_SETCARETBLINKTIME 168 //
+#define FUN_SETCARETPOS 165 //
+#define FUN_SETCLASSLONG 132 //
+#define FUN_SETCLASSWORD 130 //
+#define FUN_SETCLIPBOARDDATA 141 //
+#define FUN_SETCLIPBOARDVIEWER 147 //
+#define FUN_SETCOMMBREAK 210 //
+#define FUN_SETCOMMEVENTMASK 208 //
+#define FUN_SETCOMMSTATE 201 //
+#define FUN_SETCURSOR 69 //
+#define FUN_SETCURSORPOS 70 //
+#define FUN_SETDESKPATTERN 279 // Internal
+#define FUN_SETDESKWALLPAPER 285 // Internal
+#define FUN_SETDLGITEMINT 94 //
+#define FUN_SETDLGITEMTEXT 92 //
+#define FUN_SETDOUBLECLICKTIME 20 //
+#define FUN_SETEVENTHOOK 321 // Internal
+#define FUN_SETFOCUS 22 //
+#define FUN_SETGETKBDSTATE 330 // Internal
+#define FUN_SETGRIDGRANULARITY 284 // Internal
+#define FUN_SETINTERNALWINDOWPOS 461 // Internal
+#define FUN_SETKEYBOARDSTATE 223 //
+#define FUN_SETMENU 158 //
+#define FUN_SETMENUITEMBITMAPS 418 //
+#define FUN_SETMESSAGEQUEUE 266 //
+#define FUN_SETPARENT 233 //
+#define FUN_SETPROP 26 //
+#define FUN_SETRECT 72 //
+#define FUN_SETRECTEMPTY 73 //
+#define FUN_SETSCROLLPOS 62 //
+#define FUN_SETSCROLLRANGE 64 //
+#define FUN_SETSYSCOLORS 181 //
+#define FUN_SETSYSMODALWINDOW 188 //
+#define FUN_SETSYSTEMMENU 280 // Internal
+#define FUN_SETSYSTEMTIMER 11 // Internal
+#define FUN_SETTIMER 10 //
+#define FUN_SETTIMER2 328 // Internal
+#define FUN_SETWC2 319 // Internal
+#define FUN_SETWINDOWLONG 136 //
+#define FUN_SETWINDOWPOS 232 //
+#define FUN_SETWINDOWSHOOKINTERNAL 121 // Internal
+#define FUN_SETWINDOWTEXT 37 //
+#define FUN_SETWINDOWWORD 134 //
+#define FUN_SHOWCARET 167 //
+#define FUN_SHOWCURSOR 71 //
+#define FUN_SHOWOWNEDPOPUPS 265 //
+#define FUN_SHOWSCROLLBAR 267 //
+#define FUN_SHOWWINDOW 42 //
+#define FUN_SIGNALPROC 314 // Internal
+#define FUN_SNAPWINDOW 281 // Internal
+#define FUN_STATICWNDPROC 302 // Internal
+#define FUN_STRINGFUNC 470 // Internal
+#define FUN_SWAPMOUSEBUTTON 186 //
+#define FUN_SWITCHTOTHISWINDOW 172 // Internal
+#define FUN_SWITCHWNDPROC 347 // Internal
+#define FUN_SYSERRORBOX 320 // Internal
+#define FUN_TABBEDTEXTOUT 196 //
+#define FUN_TABTHETEXTOUTFORWIMPS 354 // Internal
+#define FUN_TILECHILDWINDOWS 199 // Internal
+#define FUN_TITLEWNDPROC 345 // Internal
+#define FUN_TRACKPOPUPMENU 416 //
+#define FUN_TRANSLATEACCELERATOR 178 //
+#define FUN_TRANSLATEMDISYSACCEL 451 //
+#define FUN_TRANSLATEMESSAGE 113 //
+#define FUN_TRANSMITCOMMCHAR 206 //
+#define FUN_UNGETCOMMCHAR 212 //
+#define FUN_UNHOOKWINDOWSHOOK 234 //
+#define FUN_UNIONRECT 80 //
+#define FUN_UNREGISTERCLASS 403 //
+#define FUN_UPDATEWINDOW 124 //
+#define FUN_USERYIELD 332 // Internal
+#define FUN_VALIDATERECT 127 //
+#define FUN_VALIDATERGN 128 //
+#define FUN_WAITMESSAGE 112 //
+#define FUN_WINDOWFROMPOINT 30 //
+#define FUN_WINFARFRAME 340 // Internal
+#define FUN_WINHELP 171 //
+#define FUN_WINOLDAPPHACKOMATIC 322 // Internal
+#define FUN_WNETADDCONNECTION 517 // Internal
+#define FUN_WNETBROWSEDIALOG 515 // Internal
+#define FUN_WNETCANCELCONNECTION 518 // Internal
+#define FUN_WNETCANCELJOB 506 // Internal
+#define FUN_WNETCLOSEJOB 502 // Internal
+#define FUN_WNETDEVICEMODE 514 // Internal
+#define FUN_WNETGETCAPS 513 // Internal
+#define FUN_WNETGETCONNECTION 512 // Internal
+#define FUN_WNETGETERROR 519 // Internal
+#define FUN_WNETGETERRORTEXT 520 // Internal
+#define FUN_WNETGETUSER 516 // Internal
+#define FUN_WNETHOLDJOB 504 // Internal
+#define FUN_WNETLOCKQUEUEDATA 510 // Internal
+#define FUN_WNETOPENJOB 501 // Internal
+#define FUN_WNETRELEASEJOB 505 // Internal
+#define FUN_WNETSETJOBCOPIES 507 // Internal
+#define FUN_WNETUNLOCKQUEUEDATA 511 // Internal
+#define FUN_WNETUNWATCHQUEUE 509 // Internal
+#define FUN_WNETWATCHQUEUE 508 // Internal
+#define FUN_WRITECOMM 205 //
+#define FUN_WVSPRINTF 421 //
+#define FUN_XCSTODS 315 // Internal
+#define FUN__FFFE_FARFRAME 341 // No proto
+#define FUN__WSPRINTF 420 //
+#define FUN_SETWINDOWSHOOKEX 291 // win31 api
+#define FUN_UNHOOKWINDOWSHOOKEX 292 // win31 api
+#define FUN_CALLNEXTHOOKEX 293 // win31 api
+#define FUN_CLOSEDRIVER 253
+#define FUN_COPYCURSOR 369
+#define FUN_COPYICON 368
+#define FUN_DEFDRIVERPROC 255
+#define FUN_ENABLESCROLLBAR 482
+#define FUN_GETCLIPCURSOR 309
+#define FUN_GETCURSOR 247
+#define FUN_GETDCEX 359
+#define FUN_GETDRIVERMODULEHANDLE 254
+#define FUN_GETDRIVERINFO 256
+#define FUN_GETFREESYSTEMRESOURCES 284
+#define FUN_GETMESSAGEEXTRAINFO 288
+#define FUN_GETNEXTDRIVER 257
+#define FUN_GETOPENCLIPBOARDWINDOW 248
+#define FUN_GETQUEUESTATUS 334
+#define FUN_GETSYSTEMDEBUGSTATE 231
+#define FUN_GETTIMERRESOLUTION 14
+#define FUN_GETWINDOWPLACEMENT 370
+#define FUN_ISMENU 358
+#define FUN_LOCKINPUT 226
+#define FUN_LOCKWINDOWUPDATE 294
+#define FUN_MAPWINDOWPOINTS 258
+#define FUN_OPENDRIVER 252
+#define FUN_QUERYSENDMESSAGE 184
+#define FUN_REDRAWWINDOW 290
+#define FUN_SCROLLWINDOWEX 319
+#define FUN_SENDDRIVERMESSAGE 251
+#define FUN_SETWINDOWPLACEMENT 371
+#define FUN_SUBTRACTRECT 373
+#define FUN_SYSTEMPARAMETERSINFO 483
+
+#define FUN_TILECHILDWzINDOWS 199
+#define FUN_USERSEEUSERDO 216
+#define FUN_ENABLECOMMNOTIFICATION 245
+#define FUN_EXITWINDOWSEXEC 246
+#define FUN_OLDSETDESKPATTERN 279
+#define FUN_OLDSETDESKWALLPAPER 285
+#define FUN_KEYBD_EVENT 289
+#define FUN_MOUSE_EVENT 299
+#define FUN_BOZOSLIVEHERE 301
+#define FUN_MENUWINDOWPROC 306
+#define FUN_GETINTERNALICONHEADER 372
+#define FUN_DLGDIRSELECTEX 422
+#define FUN_DLGDIRSELECTCOMBOBOXEX 423
+#define FUN_GETUSERLOCALOBJTYPE 480
+#define FUN_HARDWARE_EVENT 481
+#define FUN_DCHOOK 362
+#define FUN_WNETERRORTEXT 499
+#define FUN_WNETABORTJOB 503
+#define FUN_WNETENABLE 521
+#define FUN_WNETDISABLE 522
+#define FUN_WNETRESTORECONNECTION 523
+#define FUN_WNETWRITEJOB 524
+#define FUN_WNETCONNECTDIALOG 525
+#define FUN_WNETDISCONNECTDIALOG 526
+#define FUN_WNETCONNECTIONDIALOG 527
+#define FUN_WNETVIEWQUEUEDIALOG 528
+#define FUN_WNETPROPERTYDIALOG 529
+#define FUN_WNETGETDIRECTORYTYPE 530
+#define FUN_WNETDIRECTORYNOTIFY 531
+#define FUN_WNETGETPROPERTYTEXT 532
+#define FUN_NOTIFYWOW 533
+#define FUN_WOWGETIDFROMDIRECTORY 534
+#define FUN_WOWWORDBREAKPROC 535
+#define FUN_MOUSEEVENT 537
+#define FUN_KEYBDEVENT 538
+
+/* XLATOFF */
+#pragma pack(2)
+/* XLATON */
+
+typedef struct _ADJUSTWINDOWRECT16 { /* u102 */
+ BOOL16 f3;
+ LONG f2;
+ VPRECT16 f1;
+} ADJUSTWINDOWRECT16;
+typedef ADJUSTWINDOWRECT16 UNALIGNED *PADJUSTWINDOWRECT16;
+
+typedef struct _ADJUSTWINDOWRECTEX16 { /* u454 */
+ DWORD f4;
+ BOOL16 f3;
+ LONG f2;
+ VPRECT16 f1;
+} ADJUSTWINDOWRECTEX16;
+typedef ADJUSTWINDOWRECTEX16 UNALIGNED *PADJUSTWINDOWRECTEX16;
+
+typedef struct _ANSILOWER16 { /* u432 */
+ VPSTR f1;
+} ANSILOWER16;
+typedef ANSILOWER16 UNALIGNED *PANSILOWER16;
+
+typedef struct _ANSILOWERBUFF16 { /* u438 */
+ WORD f2;
+ VPSTR f1;
+} ANSILOWERBUFF16;
+typedef ANSILOWERBUFF16 UNALIGNED *PANSILOWERBUFF16;
+
+typedef struct _ANSINEXT16 { /* u472 */
+ VPSTR f1;
+} ANSINEXT16;
+typedef ANSINEXT16 UNALIGNED *PANSINEXT16;
+
+typedef struct _ANSIPREV16 { /* u473 */
+ VPSTR f2;
+ VPSTR f1;
+} ANSIPREV16;
+typedef ANSIPREV16 UNALIGNED *PANSIPREV16;
+
+typedef struct _ANSIUPPER16 { /* u431 */
+ VPSTR f1;
+} ANSIUPPER16;
+typedef ANSIUPPER16 UNALIGNED *PANSIUPPER16;
+
+typedef struct _ANSIUPPERBUFF16 { /* u437 */
+ WORD f2;
+ VPSTR f1;
+} ANSIUPPERBUFF16;
+typedef ANSIUPPERBUFF16 UNALIGNED *PANSIUPPERBUFF16;
+
+#ifdef NULLSTRUCT
+typedef struct _ANYPOPUP16 { /* u52 */
+} ANYPOPUP16;
+typedef ANYPOPUP16 UNALIGNED *PANYPOPUP16;
+#endif
+
+typedef struct _APPENDMENU16 { /* u411 */
+ VPSTR f4;
+ WORD f3;
+ WORD f2;
+ HMENU16 f1;
+} APPENDMENU16;
+typedef APPENDMENU16 UNALIGNED *PAPPENDMENU16;
+
+typedef struct _ARRANGEICONICWINDOWS16 { /* u170 */
+ HWND16 hwnd;
+} ARRANGEICONICWINDOWS16;
+typedef ARRANGEICONICWINDOWS16 UNALIGNED *PARRANGEICONICWINDOWS16;
+
+typedef struct _BEGINDEFERWINDOWPOS16 { /* u259 */
+ SHORT f1;
+} BEGINDEFERWINDOWPOS16;
+typedef BEGINDEFERWINDOWPOS16 UNALIGNED *PBEGINDEFERWINDOWPOS16;
+
+typedef struct _BEGINPAINT16 { /* u39 */
+ VPPAINTSTRUCT16 vpPaint;
+ HWND16 hwnd;
+} BEGINPAINT16;
+typedef BEGINPAINT16 UNALIGNED *PBEGINPAINT16;
+
+typedef struct _BRINGWINDOWTOTOP16 { /* u45 */
+ HWND16 f1;
+} BRINGWINDOWTOTOP16;
+typedef BRINGWINDOWTOTOP16 UNALIGNED *PBRINGWINDOWTOTOP16;
+
+typedef struct _BROADCASTMESSAGE16 { /* u355 */
+ LONG f4;
+ WORD f3;
+ WORD f2;
+ HWND16 f1;
+} BROADCASTMESSAGE16;
+typedef BROADCASTMESSAGE16 UNALIGNED *PBROADCASTMESSAGE16;
+
+typedef struct _BUILDCOMMDCB16 { /* u213 */
+ VPDCB16 f2;
+ VPSTR f1;
+} BUILDCOMMDCB16;
+typedef BUILDCOMMDCB16 UNALIGNED *PBUILDCOMMDCB16;
+
+typedef struct _CALCCHILDSCROLL16 { /* u462 */
+ WORD f2;
+ HWND16 f1;
+} CALCCHILDSCROLL16;
+typedef CALCCHILDSCROLL16 UNALIGNED *PCALCCHILDSCROLL16;
+
+typedef struct _CALLMSGFILTER16 { /* u123 */
+ SHORT f2;
+ VPMSG16 f1;
+} CALLMSGFILTER16;
+typedef CALLMSGFILTER16 UNALIGNED *PCALLMSGFILTER16;
+
+typedef struct _CALLWINDOWPROC16 { /* u122 */
+ LONG f5;
+ WORD f4;
+ WORD f3;
+ HWND16 f2;
+ VPPROC f1;
+} CALLWINDOWPROC16;
+typedef CALLWINDOWPROC16 UNALIGNED *PCALLWINDOWPROC16;
+
+typedef struct _CARETBLINKPROC16 { /* u311 */
+ DWORD f4;
+ WORD f3;
+ WORD f2;
+ HWND16 f1;
+} CARETBLINKPROC16;
+typedef CARETBLINKPROC16 UNALIGNED *PCARETBLINKPROC16;
+
+typedef struct _CASCADECHILDWINDOWS16 { /* u198 */
+ WORD f2;
+ HWND16 f1;
+} CASCADECHILDWINDOWS16;
+typedef CASCADECHILDWINDOWS16 UNALIGNED *PCASCADECHILDWINDOWS16;
+
+typedef struct _CHANGECLIPBOARDCHAIN16 { /* u149 */
+ HWND16 f2;
+ HWND16 f1;
+} CHANGECLIPBOARDCHAIN16;
+typedef CHANGECLIPBOARDCHAIN16 UNALIGNED *PCHANGECLIPBOARDCHAIN16;
+
+typedef struct _CHANGEMENU16 { /* u153 */
+ WORD f5;
+ WORD f4;
+ VPSTR f3;
+ WORD f2;
+ HMENU16 f1;
+} CHANGEMENU16;
+typedef CHANGEMENU16 UNALIGNED *PCHANGEMENU16;
+
+typedef struct _CHECKDLGBUTTON16 { /* u97 */
+ WORD f3;
+ SHORT f2;
+ HWND16 f1;
+} CHECKDLGBUTTON16;
+typedef CHECKDLGBUTTON16 UNALIGNED *PCHECKDLGBUTTON16;
+
+typedef struct _CHECKMENUITEM16 { /* u154 */
+ WORD f3;
+ WORD f2;
+ HMENU16 f1;
+} CHECKMENUITEM16;
+typedef CHECKMENUITEM16 UNALIGNED *PCHECKMENUITEM16;
+
+typedef struct _CHECKRADIOBUTTON16 { /* u96 */
+ SHORT f4;
+ SHORT f3;
+ SHORT f2;
+ HWND16 f1;
+} CHECKRADIOBUTTON16;
+typedef CHECKRADIOBUTTON16 UNALIGNED *PCHECKRADIOBUTTON16;
+
+typedef struct _CHILDWINDOWFROMPOINT16 { /* u191 */
+ POINT16 f2;
+ HWND16 f1;
+} CHILDWINDOWFROMPOINT16;
+typedef CHILDWINDOWFROMPOINT16 UNALIGNED *PCHILDWINDOWFROMPOINT16;
+
+typedef struct _CLEARCOMMBREAK16 { /* u211 */
+ SHORT f1;
+} CLEARCOMMBREAK16;
+typedef CLEARCOMMBREAK16 UNALIGNED *PCLEARCOMMBREAK16;
+
+typedef struct _CLIENTTOSCREEN16 { /* u28 */
+ VPPOINT16 f2;
+ HWND16 f1;
+} CLIENTTOSCREEN16;
+typedef CLIENTTOSCREEN16 UNALIGNED *PCLIENTTOSCREEN16;
+
+typedef struct _CLIPCURSOR16 { /* u16 */
+ VPRECT16 f1;
+} CLIPCURSOR16;
+typedef CLIPCURSOR16 UNALIGNED *PCLIPCURSOR16;
+
+#ifdef NULLSTRUCT
+typedef struct _CLOSECLIPBOARD16 { /* u138 */
+} CLOSECLIPBOARD16;
+typedef CLOSECLIPBOARD16 UNALIGNED *PCLOSECLIPBOARD16;
+#endif
+
+typedef struct _CLOSECOMM16 { /* u207 */
+ VPDWORD f2; /* added for SetCommEventMask() support */
+ SHORT f1;
+} CLOSECOMM16;
+typedef CLOSECOMM16 UNALIGNED *PCLOSECOMM16;
+
+typedef struct _CLOSEWINDOW16 { /* u43 */
+ HWND16 f1;
+} CLOSEWINDOW16;
+typedef CLOSEWINDOW16 UNALIGNED *PCLOSEWINDOW16;
+
+typedef struct _COMPUPDATERECT16 { /* u316 */
+ WORD f4;
+ BOOL16 f3;
+ VPRECT16 f2;
+ HWND16 f1;
+} COMPUPDATERECT16;
+typedef COMPUPDATERECT16 UNALIGNED *PCOMPUPDATERECT16;
+
+typedef struct _COMPUPDATERGN16 { /* u317 */
+ WORD f4;
+ BOOL16 f3;
+ HRGN16 f2;
+ HWND16 f1;
+} COMPUPDATERGN16;
+typedef COMPUPDATERGN16 UNALIGNED *PCOMPUPDATERGN16;
+
+typedef struct _CONTROLPANELINFO16 { /* u273 */
+ VPVOID f3;
+ WORD f2;
+ WORD f1;
+} CONTROLPANELINFO16;
+typedef CONTROLPANELINFO16 UNALIGNED *PCONTROLPANELINFO16;
+
+typedef struct _CONTSCROLL16 { /* u310 */
+ DWORD f4;
+ WORD f3;
+ WORD f2;
+ HWND16 f1;
+} CONTSCROLL16;
+typedef CONTSCROLL16 UNALIGNED *PCONTSCROLL16;
+
+typedef struct _COPYRECT16 { /* u74 */
+ VPRECT16 f2;
+ VPRECT16 f1;
+} COPYRECT16;
+typedef COPYRECT16 UNALIGNED *PCOPYRECT16;
+
+#ifdef NULLSTRUCT
+typedef struct _COUNTCLIPBOARDFORMATS16 { /* u143 */
+} COUNTCLIPBOARDFORMATS16;
+typedef COUNTCLIPBOARDFORMATS16 UNALIGNED *PCOUNTCLIPBOARDFORMATS16;
+#endif
+
+typedef struct _CREATECARET16 { /* u163 */
+ SHORT f4;
+ SHORT f3;
+ HBM16 f2;
+ HWND16 f1;
+} CREATECARET16;
+typedef CREATECARET16 UNALIGNED *PCREATECARET16;
+
+typedef struct _CREATECURSOR16 { /* u406 */
+ VPSTR f7;
+ VPSTR f6;
+ SHORT f5;
+ SHORT f4;
+ SHORT f3;
+ SHORT f2;
+ HAND16 f1;
+} CREATECURSOR16;
+typedef CREATECURSOR16 UNALIGNED *PCREATECURSOR16;
+
+typedef struct _CREATECURSORICONINDIRECT16 { /* u408 */
+ VPSTR f4;
+ VPSTR f3;
+ VPSTR f2;
+ HAND16 f1;
+} CREATECURSORICONINDIRECT16;
+typedef CREATECURSORICONINDIRECT16 UNALIGNED *PCREATECURSORICONINDIRECT16;
+
+typedef struct _CREATEDIALOG16 { /* u89 */
+ VPPROC f4;
+ HWND16 f3;
+ VPSTR f2;
+ HAND16 f1;
+} CREATEDIALOG16;
+typedef CREATEDIALOG16 UNALIGNED *PCREATEDIALOG16;
+
+typedef struct _CREATEDIALOGINDIRECT16 { /* u219 */
+ VPPROC f4;
+ HWND16 f3;
+ VPSTR f2;
+ HAND16 f1;
+} CREATEDIALOGINDIRECT16;
+typedef CREATEDIALOGINDIRECT16 UNALIGNED *PCREATEDIALOGINDIRECT16;
+
+typedef struct _CREATEDIALOGINDIRECTPARAM16 { /* u242 */
+ LONG f5;
+ VPPROC f4;
+ HWND16 f3;
+ VPSTR f2;
+ HAND16 f1;
+} CREATEDIALOGINDIRECTPARAM16;
+typedef CREATEDIALOGINDIRECTPARAM16 UNALIGNED *PCREATEDIALOGINDIRECTPARAM16;
+
+typedef struct _CREATEDIALOGPARAM16 { /* u241 */
+ DWORD f6;
+ LONG f5;
+ VPPROC f4;
+ HWND16 f3;
+ VPSTR f2;
+ HAND16 f1;
+} CREATEDIALOGPARAM16;
+typedef CREATEDIALOGPARAM16 UNALIGNED *PCREATEDIALOGPARAM16;
+
+typedef struct _CREATEICON16 { /* u407 */
+ VPSTR f7;
+ VPSTR f6;
+ WORD f5;
+ WORD f4;
+ SHORT f3;
+ SHORT f2;
+ HAND16 f1;
+} CREATEICON16;
+typedef CREATEICON16 UNALIGNED *PCREATEICON16;
+
+#ifdef NULLSTRUCT
+typedef struct _CREATEMENU16 { /* u151 */
+} CREATEMENU16;
+typedef CREATEMENU16 UNALIGNED *PCREATEMENU16;
+#endif
+
+#ifdef NULLSTRUCT
+typedef struct _CREATEPOPUPMENU16 { /* u415 */
+} CREATEPOPUPMENU16;
+typedef CREATEPOPUPMENU16 UNALIGNED *PCREATEPOPUPMENU16;
+#endif
+
+typedef struct _CREATEWINDOW16 { /* u41 */
+ VPBYTE vpParam;
+ HAND16 hInstance;
+ HMENU16 hMenu;
+ HWND16 hwndParent;
+ SHORT cy;
+ SHORT cx;
+ SHORT y;
+ SHORT x;
+ DWORD dwStyle;
+ VPSTR vpszWindow;
+ VPSTR vpszClass;
+} CREATEWINDOW16;
+typedef CREATEWINDOW16 UNALIGNED *PCREATEWINDOW16;
+
+typedef struct _CREATEWINDOWEX16 { /* u452 */
+ VPSTR f12;
+ HAND16 f11;
+ HMENU16 f10;
+ HWND16 f9;
+ SHORT f8;
+ SHORT f7;
+ SHORT f6;
+ SHORT f5;
+ DWORD f4;
+ VPSTR f3;
+ VPSTR f2;
+ DWORD f1;
+} CREATEWINDOWEX16;
+typedef CREATEWINDOWEX16 UNALIGNED *PCREATEWINDOWEX16;
+
+typedef struct _DCHOOK16 { /* u362 */
+ DWORD f4;
+ DWORD f3;
+ WORD f2;
+ HDC16 f1;
+} DCHOOK16;
+typedef DCHOOK16 UNALIGNED *PDCHOOK16;
+
+typedef struct _DEFDLGPROC16 { /* u308 */
+ LONG f4;
+ WORD f3;
+ WORD f2;
+ HWND16 f1;
+} DEFDLGPROC16;
+typedef DEFDLGPROC16 UNALIGNED *PDEFDLGPROC16;
+
+typedef struct _DEFERWINDOWPOS16 { /* u260 */
+ WORD f8;
+ SHORT f7;
+ SHORT f6;
+ SHORT f5;
+ SHORT f4;
+ HWND16 f3;
+ HWND16 f2;
+ HAND16 f1;
+} DEFERWINDOWPOS16;
+typedef DEFERWINDOWPOS16 UNALIGNED *PDEFERWINDOWPOS16;
+
+typedef struct _DEFFRAMEPROC16 { /* u445 */
+ LONG f5;
+ WORD f4;
+ WORD f3;
+ HWND16 f2;
+ HWND16 f1;
+} DEFFRAMEPROC16;
+typedef DEFFRAMEPROC16 UNALIGNED *PDEFFRAMEPROC16;
+
+typedef struct _DEFHOOKPROC16 { /* u235 */
+ VPPROC f4;
+ DWORD f3;
+ WORD f2;
+ SHORT f1;
+} DEFHOOKPROC16;
+typedef DEFHOOKPROC16 UNALIGNED *PDEFHOOKPROC16;
+
+typedef struct _DEFMDICHILDPROC16 { /* u447 */
+ LONG f4;
+ WORD f3;
+ WORD f2;
+ HWND16 f1;
+} DEFMDICHILDPROC16;
+typedef DEFMDICHILDPROC16 UNALIGNED *PDEFMDICHILDPROC16;
+
+typedef struct _DEFWINDOWPROC16 { /* u107 */
+ LONG lParam;
+ WORD wParam;
+ WORD wMsg;
+ HWND16 hwnd;
+} DEFWINDOWPROC16;
+typedef DEFWINDOWPROC16 UNALIGNED *PDEFWINDOWPROC16;
+
+typedef struct _DELETEMENU16 { /* u413 */
+ WORD f3;
+ WORD f2;
+ HMENU16 f1;
+} DELETEMENU16;
+typedef DELETEMENU16 UNALIGNED *PDELETEMENU16;
+
+typedef struct _DESKTOPWNDPROC16 { /* u305 */
+ LONG f4;
+ WORD f3;
+ WORD f2;
+ HWND16 f1;
+} DESKTOPWNDPROC16;
+typedef DESKTOPWNDPROC16 UNALIGNED *PDESKTOPWNDPROC16;
+
+#ifdef NULLSTRUCT
+typedef struct _DESTROYCARET16 { /* u164 */
+} DESTROYCARET16;
+typedef DESTROYCARET16 UNALIGNED *PDESTROYCARET16;
+#endif
+
+typedef struct _DESTROYCURSOR16 { /* u458 */
+ HCUR16 f1;
+} DESTROYCURSOR16;
+typedef DESTROYCURSOR16 UNALIGNED *PDESTROYCURSOR16;
+
+typedef struct _DESTROYICON16 { /* u457 */
+ HICON16 f1;
+} DESTROYICON16;
+typedef DESTROYICON16 UNALIGNED *PDESTROYICON16;
+
+typedef struct _DESTROYMENU16 { /* u152 */
+ HMENU16 f1;
+} DESTROYMENU16;
+typedef DESTROYMENU16 UNALIGNED *PDESTROYMENU16;
+
+typedef struct _DESTROYWINDOW16 { /* u53 */
+ HWND16 f1;
+} DESTROYWINDOW16;
+typedef DESTROYWINDOW16 UNALIGNED *PDESTROYWINDOW16;
+
+typedef struct _DIALOGBOX16 { /* u87 */
+ VPPROC f4;
+ HWND16 f3;
+ VPSTR f2;
+ HAND16 f1;
+} DIALOGBOX16;
+typedef DIALOGBOX16 UNALIGNED *PDIALOGBOX16;
+
+typedef struct _DIALOGBOXINDIRECT16 { /* u218 */
+ VPPROC f4;
+ HWND16 f3;
+ HAND16 f2;
+ HAND16 f1;
+} DIALOGBOXINDIRECT16;
+typedef DIALOGBOXINDIRECT16 UNALIGNED *PDIALOGBOXINDIRECT16;
+
+typedef struct _DIALOGBOXINDIRECTPARAM16 { /* u240 */
+ LONG f5;
+ VPPROC f4;
+ HWND16 f3;
+ HAND16 f2;
+ HAND16 f1;
+} DIALOGBOXINDIRECTPARAM16;
+typedef DIALOGBOXINDIRECTPARAM16 UNALIGNED *PDIALOGBOXINDIRECTPARAM16;
+
+typedef struct _DIALOGBOXPARAM16 { /* u239 */
+ WORD f7;
+ DWORD f6;
+ LONG f5;
+ VPPROC f4;
+ HWND16 f3;
+ VPSTR f2;
+ HAND16 f1;
+} DIALOGBOXPARAM16;
+typedef DIALOGBOXPARAM16 UNALIGNED *PDIALOGBOXPARAM16;
+
+#ifdef NULLSTRUCT
+typedef struct _DISABLEOEMLAYER16 { /* u4 */
+} DISABLEOEMLAYER16;
+typedef DISABLEOEMLAYER16 UNALIGNED *PDISABLEOEMLAYER16;
+#endif
+
+typedef struct _DISPATCHMESSAGE16 { /* u114 */
+ VPMSG16 f1;
+} DISPATCHMESSAGE16;
+typedef DISPATCHMESSAGE16 UNALIGNED *PDISPATCHMESSAGE16;
+
+typedef struct _DLGDIRLIST16 { /* u100 */
+ WORD f5;
+ SHORT f4;
+ SHORT f3;
+ VPSTR f2;
+ HWND16 f1;
+} DLGDIRLIST16;
+typedef DLGDIRLIST16 UNALIGNED *PDLGDIRLIST16;
+
+typedef struct _DLGDIRLISTCOMBOBOX16 { /* u195 */
+ WORD f5;
+ SHORT f4;
+ SHORT f3;
+ VPSTR f2;
+ HWND16 f1;
+} DLGDIRLISTCOMBOBOX16;
+typedef DLGDIRLISTCOMBOBOX16 UNALIGNED *PDLGDIRLISTCOMBOBOX16;
+
+typedef struct _DLGDIRSELECT16 { /* u99 */
+ SHORT f3;
+ VPSTR f2;
+ HWND16 f1;
+} DLGDIRSELECT16;
+typedef DLGDIRSELECT16 UNALIGNED *PDLGDIRSELECT16;
+
+typedef struct _DLGDIRSELECTCOMBOBOX16 { /* u194 */
+ SHORT f3;
+ VPSTR f2;
+ HWND16 f1;
+} DLGDIRSELECTCOMBOBOX16;
+typedef DLGDIRSELECTCOMBOBOX16 UNALIGNED *PDLGDIRSELECTCOMBOBOX16;
+
+typedef struct _DLGDIRSELECTEX16 { /* u422 */
+ SHORT f4;
+ SHORT f3;
+ VPSTR f2;
+ HWND16 f1;
+} DLGDIRSELECTEX16;
+typedef DLGDIRSELECTEX16 UNALIGNED *PDLGDIRSELECTEX16;
+
+typedef struct _DLGDIRSELECTCOMBOBOXEX16 { /* u423 */
+ SHORT f4;
+ SHORT f3;
+ VPSTR f2;
+ HWND16 f1;
+} DLGDIRSELECTCOMBOBOXEX16;
+typedef DLGDIRSELECTCOMBOBOXEX16 UNALIGNED *PDLGDIRSELECTCOMBOBOXEX16;
+
+typedef struct _DRAGDETECT16 { /* u465 */
+ POINT16 pt;
+ HWND16 hwnd;
+} DRAGDETECT16;
+typedef DRAGDETECT16 UNALIGNED *PDRAGDETECT16;
+
+typedef struct _DRAGOBJECT16 { /* u464 */
+ HAND16 f5;
+ LONG f4;
+ WORD f3;
+ HWND16 f2;
+ HWND16 f1;
+} DRAGOBJECT16;
+typedef DRAGOBJECT16 UNALIGNED *PDRAGOBJECT16;
+
+typedef struct _DRAWFOCUSRECT16 { /* u466 */
+ VPRECT16 f2;
+ HDC16 f1;
+} DRAWFOCUSRECT16;
+typedef DRAWFOCUSRECT16 UNALIGNED *PDRAWFOCUSRECT16;
+
+typedef struct _DRAWICON16 { /* u84 */
+ HICON16 f4;
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} DRAWICON16;
+typedef DRAWICON16 UNALIGNED *PDRAWICON16;
+
+typedef struct _DRAWMENUBAR16 { /* u160 */
+ HWND16 f1;
+} DRAWMENUBAR16;
+typedef DRAWMENUBAR16 UNALIGNED *PDRAWMENUBAR16;
+
+typedef struct _DRAWTEXT16 { /* u85 */
+ WORD wFormat;
+ VPRECT16 vpRect;
+ SHORT nCount;
+ VPSTR vpString;
+ HDC16 hdc;
+} DRAWTEXT16;
+typedef DRAWTEXT16 UNALIGNED *PDRAWTEXT16;
+
+typedef struct _DUMPICON16 { /* u459 */
+ VPSTR f4;
+ VPSTR f3;
+ VPWORD f2;
+ VPSTR f1;
+} DUMPICON16;
+typedef DUMPICON16 UNALIGNED *PDUMPICON16;
+
+#ifdef NULLSTRUCT
+typedef struct _EMPTYCLIPBOARD16 { /* u139 */
+} EMPTYCLIPBOARD16;
+typedef EMPTYCLIPBOARD16 UNALIGNED *PEMPTYCLIPBOARD16;
+#endif
+
+typedef struct _ENABLECOMMNOTIFICATION16 { /* u245 */
+ SHORT f4;
+ SHORT f3;
+ HWND16 f2;
+ SHORT f1;
+} ENABLECOMMNOTIFICATION16;
+typedef ENABLECOMMNOTIFICATION16 UNALIGNED *PENABLECOMMNOTIFICATION16;
+
+
+typedef struct _ENABLEHARDWAREINPUT16 { /* u331 */
+ BOOL16 f1;
+} ENABLEHARDWAREINPUT16;
+typedef ENABLEHARDWAREINPUT16 UNALIGNED *PENABLEHARDWAREINPUT16;
+
+typedef struct _ENABLEMENUITEM16 { /* u155 */
+ WORD f3;
+ WORD f2;
+ HMENU16 f1;
+} ENABLEMENUITEM16;
+typedef ENABLEMENUITEM16 UNALIGNED *PENABLEMENUITEM16;
+
+#ifdef NULLSTRUCT
+typedef struct _ENABLEOEMLAYER16 { /* u3 */
+} ENABLEOEMLAYER16;
+typedef ENABLEOEMLAYER16 UNALIGNED *PENABLEOEMLAYER16;
+#endif
+
+typedef struct _ENABLEWINDOW16 { /* u34 */
+ BOOL16 f2;
+ HWND16 f1;
+} ENABLEWINDOW16;
+typedef ENABLEWINDOW16 UNALIGNED *PENABLEWINDOW16;
+
+typedef struct _ENDDEFERWINDOWPOS16 { /* u261 */
+ HAND16 f1;
+} ENDDEFERWINDOWPOS16;
+typedef ENDDEFERWINDOWPOS16 UNALIGNED *PENDDEFERWINDOWPOS16;
+
+typedef struct _ENDDIALOG16 { /* u88 */
+ SHORT f2;
+ HWND16 f1;
+} ENDDIALOG16;
+typedef ENDDIALOG16 UNALIGNED *PENDDIALOG16;
+
+#ifdef NULLSTRUCT
+typedef struct _ENDMENU16 { /* u187 */
+} ENDMENU16;
+typedef ENDMENU16 UNALIGNED *PENDMENU16;
+#endif
+
+typedef struct _ENDPAINT16 { /* u40 */
+ VPPAINTSTRUCT16 vpPaint;
+ HWND16 hwnd;
+} ENDPAINT16;
+typedef ENDPAINT16 UNALIGNED *PENDPAINT16;
+
+typedef struct _ENUMCHILDWINDOWS16 { /* u55 */
+ LONG f3;
+ VPPROC f2;
+ HWND16 f1;
+} ENUMCHILDWINDOWS16;
+typedef ENUMCHILDWINDOWS16 UNALIGNED *PENUMCHILDWINDOWS16;
+
+typedef struct _ENUMCLIPBOARDFORMATS16 { /* u144 */
+ WORD f1;
+} ENUMCLIPBOARDFORMATS16;
+typedef ENUMCLIPBOARDFORMATS16 UNALIGNED *PENUMCLIPBOARDFORMATS16;
+
+typedef struct _ENUMPROPS16 { /* u27 */
+ VPPROC f2;
+ HWND16 f1;
+} ENUMPROPS16;
+typedef ENUMPROPS16 UNALIGNED *PENUMPROPS16;
+
+typedef struct _ENUMTASKWINDOWS16 { /* u225 */
+ LONG f3;
+ VPPROC f2;
+ HAND16 f1;
+} ENUMTASKWINDOWS16;
+typedef ENUMTASKWINDOWS16 UNALIGNED *PENUMTASKWINDOWS16;
+
+typedef struct _ENUMWINDOWS16 { /* u54 */
+ LONG f2;
+ VPPROC f1;
+} ENUMWINDOWS16;
+typedef ENUMWINDOWS16 UNALIGNED *PENUMWINDOWS16;
+
+typedef struct _EQUALRECT16 { /* u244 */
+ VPRECT16 f2;
+ VPRECT16 f1;
+} EQUALRECT16;
+typedef EQUALRECT16 UNALIGNED *PEQUALRECT16;
+
+typedef struct _ESCAPECOMMFUNCTION16 { /* u214 */
+ SHORT f2;
+ SHORT f1;
+} ESCAPECOMMFUNCTION16;
+typedef ESCAPECOMMFUNCTION16 UNALIGNED *PESCAPECOMMFUNCTION16;
+
+typedef struct _EXCLUDEUPDATERGN16 { /* u238 */
+ HWND16 f2;
+ HDC16 f1;
+} EXCLUDEUPDATERGN16;
+typedef EXCLUDEUPDATERGN16 UNALIGNED *PEXCLUDEUPDATERGN16;
+
+typedef struct _EXITWINDOWS16 { /* u7 */
+ WORD wReturnCode;
+ DWORD dwReserved;
+} EXITWINDOWS16;
+typedef EXITWINDOWS16 UNALIGNED *PEXITWINDOWS16;
+
+typedef struct _EXITWINDOWSEXEC16 { /* u246 */
+ VPSTR vpCmdLine;
+ VPSTR vpProgName;
+} EXITWINDOWSEXEC16;
+typedef EXITWINDOWSEXEC16 UNALIGNED *PEXITWINDOWSEXEC16;
+
+#ifdef NULLSTRUCT
+typedef struct _FARCALLNETDRIVER16 { /* u500 */
+} FARCALLNETDRIVER16;
+typedef FARCALLNETDRIVER16 UNALIGNED *PFARCALLNETDRIVER16;
+#endif
+
+typedef struct _FILEPORTDLGPROC16 { /* u346 */
+ LONG f4;
+ WORD f3;
+ WORD f2;
+ HWND16 f1;
+} FILEPORTDLGPROC16;
+typedef FILEPORTDLGPROC16 UNALIGNED *PFILEPORTDLGPROC16;
+
+typedef struct _FILLRECT16 { /* u81 */
+ HBRSH16 f3;
+ VPRECT16 f2;
+ HDC16 f1;
+} FILLRECT16;
+typedef FILLRECT16 UNALIGNED *PFILLRECT16;
+
+#ifdef NULLSTRUCT
+typedef struct _FINALUSERINIT16 { /* u400 */
+} FINALUSERINIT16;
+typedef FINALUSERINIT16 UNALIGNED *PFINALUSERINIT16;
+#endif
+
+typedef struct _FINDWINDOW16 { /* u50 */
+ VPSTR f2;
+ VPSTR f1;
+} FINDWINDOW16;
+typedef FINDWINDOW16 UNALIGNED *PFINDWINDOW16;
+
+typedef struct _FLASHWINDOW16 { /* u105 */
+ BOOL16 f2;
+ HWND16 f1;
+} FLASHWINDOW16;
+typedef FLASHWINDOW16 UNALIGNED *PFLASHWINDOW16;
+
+typedef struct _FLUSHCOMM16 { /* u215 */
+ SHORT f2;
+ SHORT f1;
+} FLUSHCOMM16;
+typedef FLUSHCOMM16 UNALIGNED *PFLUSHCOMM16;
+
+typedef struct _FRAMERECT16 { /* u83 */
+ HBRSH16 f3;
+ VPRECT16 f2;
+ HDC16 f1;
+} FRAMERECT16;
+typedef FRAMERECT16 UNALIGNED *PFRAMERECT16;
+
+#ifdef NULLSTRUCT
+typedef struct _GETACTIVEWINDOW16 { /* u60 */
+} GETACTIVEWINDOW16;
+typedef GETACTIVEWINDOW16 UNALIGNED *PGETACTIVEWINDOW16;
+#endif
+
+typedef struct _GETASYNCKEYSTATE16 { /* u249 */
+ SHORT f1;
+} GETASYNCKEYSTATE16;
+typedef GETASYNCKEYSTATE16 UNALIGNED *PGETASYNCKEYSTATE16;
+
+#ifdef NULLSTRUCT
+typedef struct _GETCAPTURE16 { /* u236 */
+} GETCAPTURE16;
+typedef GETCAPTURE16 UNALIGNED *PGETCAPTURE16;
+#endif
+
+#ifdef NULLSTRUCT
+typedef struct _GETCARETBLINKTIME16 { /* u169 */
+} GETCARETBLINKTIME16;
+typedef GETCARETBLINKTIME16 UNALIGNED *PGETCARETBLINKTIME16;
+#endif
+
+typedef struct _GETCARETPOS16 { /* u183 */
+ VPPOINT16 f1;
+} GETCARETPOS16;
+typedef GETCARETPOS16 UNALIGNED *PGETCARETPOS16;
+
+typedef struct _GETCLASSINFO16 { /* u404 */
+ VPWNDCLASS16 f3;
+ VPSTR f2;
+ HAND16 f1;
+} GETCLASSINFO16;
+typedef GETCLASSINFO16 UNALIGNED *PGETCLASSINFO16;
+
+typedef struct _GETCLASSLONG16 { /* u131 */
+ SHORT f2;
+ HWND16 f1;
+} GETCLASSLONG16;
+typedef GETCLASSLONG16 UNALIGNED *PGETCLASSLONG16;
+
+typedef struct _GETCLASSNAME16 { /* u58 */
+ SHORT f3;
+ VPSTR f2;
+ HWND16 f1;
+} GETCLASSNAME16;
+typedef GETCLASSNAME16 UNALIGNED *PGETCLASSNAME16;
+
+typedef struct _GETCLASSWORD16 { /* u129 */
+ SHORT f2;
+ HWND16 f1;
+} GETCLASSWORD16;
+typedef GETCLASSWORD16 UNALIGNED *PGETCLASSWORD16;
+
+typedef struct _GETCLIENTRECT16 { /* u33 */
+ VPRECT16 vpRect;
+ HWND16 hwnd;
+} GETCLIENTRECT16;
+typedef GETCLIENTRECT16 UNALIGNED *PGETCLIENTRECT16;
+
+typedef struct _GETCLIPBOARDDATA16 { /* u142 */
+ WORD f1;
+} GETCLIPBOARDDATA16;
+typedef GETCLIPBOARDDATA16 UNALIGNED *PGETCLIPBOARDDATA16;
+
+typedef struct _GETCLIPBOARDFORMATNAME16 { /* u146 */
+ SHORT f3;
+ VPSTR f2;
+ WORD f1;
+} GETCLIPBOARDFORMATNAME16;
+typedef GETCLIPBOARDFORMATNAME16 UNALIGNED *PGETCLIPBOARDFORMATNAME16;
+
+#ifdef NULLSTRUCT
+typedef struct _GETCLIPBOARDOWNER16 { /* u140 */
+} GETCLIPBOARDOWNER16;
+typedef GETCLIPBOARDOWNER16 UNALIGNED *PGETCLIPBOARDOWNER16;
+#endif
+
+#ifdef NULLSTRUCT
+typedef struct _GETCLIPBOARDVIEWER16 { /* u148 */
+} GETCLIPBOARDVIEWER16;
+typedef GETCLIPBOARDVIEWER16 UNALIGNED *PGETCLIPBOARDVIEWER16;
+#endif
+
+typedef struct _GETCOMMERROR16 { /* u203 */
+ VPCOMSTAT16 f2;
+ SHORT f1;
+} GETCOMMERROR16;
+typedef GETCOMMERROR16 UNALIGNED *PGETCOMMERROR16;
+
+typedef struct _GETCOMMEVENTMASK16 { /* u209 */
+ SHORT f2;
+ SHORT f1;
+} GETCOMMEVENTMASK16;
+typedef GETCOMMEVENTMASK16 UNALIGNED *PGETCOMMEVENTMASK16;
+
+typedef struct _GETCOMMSTATE16 { /* u202 */
+ VPDCB16 f2;
+ SHORT f1;
+} GETCOMMSTATE16;
+typedef GETCOMMSTATE16 UNALIGNED *PGETCOMMSTATE16;
+
+typedef struct _GETCONTROLBRUSH16 { /* u326 */
+ WORD f3;
+ HDC16 f2;
+ HWND16 f1;
+} GETCONTROLBRUSH16;
+typedef GETCONTROLBRUSH16 UNALIGNED *PGETCONTROLBRUSH16;
+
+#ifdef NULLSTRUCT
+typedef struct _GETCURRENTTIME16 { /* u15 */
+} GETCURRENTTIME16;
+typedef GETCURRENTTIME16 UNALIGNED *PGETCURRENTTIME16;
+#endif
+
+typedef struct _GETCURSORPOS16 { /* u17 */
+ VPPOINT16 f1;
+} GETCURSORPOS16;
+typedef GETCURSORPOS16 UNALIGNED *PGETCURSORPOS16;
+
+typedef struct _GETDC16 { /* u66 */
+ HWND16 f1;
+} GETDC16;
+typedef GETDC16 UNALIGNED *PGETDC16;
+
+#ifdef NULLSTRUCT
+typedef struct _GETDESKTOPHWND16 { /* u278 */
+} GETDESKTOPHWND16;
+typedef GETDESKTOPHWND16 UNALIGNED *PGETDESKTOPHWND16;
+#endif
+
+#ifdef NULLSTRUCT
+typedef struct _GETDESKTOPWINDOW16 { /* u286 */
+} GETDESKTOPWINDOW16;
+typedef GETDESKTOPWINDOW16 UNALIGNED *PGETDESKTOPWINDOW16;
+#endif
+
+#ifdef NULLSTRUCT
+typedef struct _GETDIALOGBASEUNITS16 { /* u243 */
+} GETDIALOGBASEUNITS16;
+typedef GETDIALOGBASEUNITS16 UNALIGNED *PGETDIALOGBASEUNITS16;
+#endif
+
+typedef struct _GETDLGCTRLID16 { /* u277 */
+ HWND16 f1;
+} GETDLGCTRLID16;
+typedef GETDLGCTRLID16 UNALIGNED *PGETDLGCTRLID16;
+
+typedef struct _GETDLGITEM16 { /* u91 */
+ SHORT f2;
+ HWND16 f1;
+} GETDLGITEM16;
+typedef GETDLGITEM16 UNALIGNED *PGETDLGITEM16;
+
+typedef struct _GETDLGITEMINT16 { /* u95 */
+ BOOL16 f4;
+ VPBOOL16 f3;
+ SHORT f2;
+ HWND16 f1;
+} GETDLGITEMINT16;
+typedef GETDLGITEMINT16 UNALIGNED *PGETDLGITEMINT16;
+
+typedef struct _GETDLGITEMTEXT16 { /* u93 */
+ SHORT f4;
+ VPSTR f3;
+ SHORT f2;
+ HWND16 f1;
+} GETDLGITEMTEXT16;
+typedef GETDLGITEMTEXT16 UNALIGNED *PGETDLGITEMTEXT16;
+
+#ifdef NULLSTRUCT
+typedef struct _GETDOUBLECLICKTIME16 { /* u21 */
+} GETDOUBLECLICKTIME16;
+typedef GETDOUBLECLICKTIME16 UNALIGNED *PGETDOUBLECLICKTIME16;
+#endif
+
+typedef struct _GETFILEPORTNAME16 { /* u343 */
+ VPSTR f1;
+} GETFILEPORTNAME16;
+typedef GETFILEPORTNAME16 UNALIGNED *PGETFILEPORTNAME16;
+
+#ifdef NULLSTRUCT
+typedef struct _GETFOCUS16 { /* u23 */
+} GETFOCUS16;
+typedef GETFOCUS16 UNALIGNED *PGETFOCUS16;
+#endif
+
+typedef struct _GETICONID16 { /* u455 */
+ VPSTR f2;
+ HAND16 f1;
+} GETICONID16;
+typedef GETICONID16 UNALIGNED *PGETICONID16;
+
+#ifdef NULLSTRUCT
+typedef struct _GETINPUTSTATE16 { /* u335 */
+} GETINPUTSTATE16;
+typedef GETINPUTSTATE16 UNALIGNED *PGETINPUTSTATE16;
+#endif
+
+typedef struct _GETINTERNALICONHEADER16 { /* u372 */
+ VPSTR f2;
+ VPSTR f1;
+} GETINTERNALICONHEADER16;
+typedef GETINTERNALICONHEADER16 UNALIGNED *PGETINTERNALICONHEADER16;
+
+typedef struct _GETINTERNALWINDOWPOS16 { /* u460 */
+ VPPOINT16 f3;
+ VPRECT16 f2;
+ HWND16 f1;
+} GETINTERNALWINDOWPOS16;
+typedef GETINTERNALWINDOWPOS16 UNALIGNED *PGETINTERNALWINDOWPOS16;
+
+typedef struct _GETKEYBOARDSTATE16 { /* u222 */
+ VPBYTE f1;
+} GETKEYBOARDSTATE16;
+typedef GETKEYBOARDSTATE16 UNALIGNED *PGETKEYBOARDSTATE16;
+
+typedef struct _GETKEYSTATE16 { /* u106 */
+ SHORT f1;
+} GETKEYSTATE16;
+typedef GETKEYSTATE16 UNALIGNED *PGETKEYSTATE16;
+
+typedef struct _GETLASTACTIVEPOPUP16 { /* u287 */
+ HWND16 f1;
+} GETLASTACTIVEPOPUP16;
+typedef GETLASTACTIVEPOPUP16 UNALIGNED *PGETLASTACTIVEPOPUP16;
+
+typedef struct _GETMENU16 { /* u157 */
+ HWND16 f1;
+} GETMENU16;
+typedef GETMENU16 UNALIGNED *PGETMENU16;
+
+#ifdef NULLSTRUCT
+typedef struct _GETMENUCHECKMARKDIMENSIONS16 { /* u417 */
+} GETMENUCHECKMARKDIMENSIONS16;
+typedef GETMENUCHECKMARKDIMENSIONS16 UNALIGNED *PGETMENUCHECKMARKDIMENSIONS16;
+#endif
+
+typedef struct _GETMENUITEMCOUNT16 { /* u263 */
+ HMENU16 f1;
+} GETMENUITEMCOUNT16;
+typedef GETMENUITEMCOUNT16 UNALIGNED *PGETMENUITEMCOUNT16;
+
+typedef struct _GETMENUITEMID16 { /* u264 */
+ SHORT f2;
+ HMENU16 f1;
+} GETMENUITEMID16;
+typedef GETMENUITEMID16 UNALIGNED *PGETMENUITEMID16;
+
+typedef struct _GETMENUSTATE16 { /* u250 */
+ WORD f3;
+ WORD f2;
+ HMENU16 f1;
+} GETMENUSTATE16;
+typedef GETMENUSTATE16 UNALIGNED *PGETMENUSTATE16;
+
+typedef struct _GETMENUSTRING16 { /* u161 */
+ WORD f5;
+ SHORT f4;
+ VPSTR f3;
+ WORD f2;
+ HMENU16 f1;
+} GETMENUSTRING16;
+typedef GETMENUSTRING16 UNALIGNED *PGETMENUSTRING16;
+
+typedef struct _GETMESSAGE16 { /* u108 */
+ WORD wMax;
+ WORD wMin;
+ HWND16 hwnd;
+ VPMSG16 vpMsg;
+} GETMESSAGE16;
+typedef GETMESSAGE16 UNALIGNED *PGETMESSAGE16;
+
+typedef struct _GETMESSAGE216 { /* u323 */
+ BOOL16 f6;
+ WORD f5;
+ WORD f4;
+ WORD f3;
+ HWND16 f2;
+ VPMSG16 f1;
+} GETMESSAGE216;
+typedef GETMESSAGE216 UNALIGNED *PGETMESSAGE216;
+
+#ifdef NULLSTRUCT
+typedef struct _GETMESSAGEPOS16 { /* u119 */
+} GETMESSAGEPOS16;
+typedef GETMESSAGEPOS16 UNALIGNED *PGETMESSAGEPOS16;
+#endif
+
+#ifdef NULLSTRUCT
+typedef struct _GETMESSAGETIME16 { /* u120 */
+} GETMESSAGETIME16;
+typedef GETMESSAGETIME16 UNALIGNED *PGETMESSAGETIME16;
+#endif
+
+typedef struct _GETNEXTDLGGROUPITEM16 { /* u227 */
+ BOOL16 f3;
+ HWND16 f2;
+ HWND16 f1;
+} GETNEXTDLGGROUPITEM16;
+typedef GETNEXTDLGGROUPITEM16 UNALIGNED *PGETNEXTDLGGROUPITEM16;
+
+typedef struct _GETNEXTDLGTABITEM16 { /* u228 */
+ BOOL16 f3;
+ HWND16 f2;
+ HWND16 f1;
+} GETNEXTDLGTABITEM16;
+typedef GETNEXTDLGTABITEM16 UNALIGNED *PGETNEXTDLGTABITEM16;
+
+typedef struct _GETNEXTQUEUEWINDOW16 { /* u274 */
+ BOOL16 f2;
+ HWND16 f1;
+} GETNEXTQUEUEWINDOW16;
+typedef GETNEXTQUEUEWINDOW16 UNALIGNED *PGETNEXTQUEUEWINDOW16;
+
+typedef struct _GETNEXTWINDOW16 { /* u230 */
+ WORD f2;
+ HWND16 f1;
+} GETNEXTWINDOW16;
+typedef GETNEXTWINDOW16 UNALIGNED *PGETNEXTWINDOW16;
+
+typedef struct _GETPARENT16 { /* u46 */
+ HWND16 f1;
+} GETPARENT16;
+typedef GETPARENT16 UNALIGNED *PGETPARENT16;
+
+typedef struct _GETPRIORITYCLIPBOARDFORMAT16 { /* u402 */
+ SHORT f2;
+ VPWORD f1;
+} GETPRIORITYCLIPBOARDFORMAT16;
+typedef GETPRIORITYCLIPBOARDFORMAT16 UNALIGNED *PGETPRIORITYCLIPBOARDFORMAT16;
+
+typedef struct _GETPROP16 { /* u25 */
+ VPSTR f2;
+ HWND16 f1;
+} GETPROP16;
+typedef GETPROP16 UNALIGNED *PGETPROP16;
+
+typedef struct _GETSCROLLPOS16 { /* u63 */
+ SHORT f2;
+ HWND16 f1;
+} GETSCROLLPOS16;
+typedef GETSCROLLPOS16 UNALIGNED *PGETSCROLLPOS16;
+
+typedef struct _GETSCROLLRANGE16 { /* u65 */
+ VPSHORT f4;
+ VPSHORT f3;
+ SHORT f2;
+ HWND16 f1;
+} GETSCROLLRANGE16;
+typedef GETSCROLLRANGE16 UNALIGNED *PGETSCROLLRANGE16;
+
+typedef struct _GETSUBMENU16 { /* u159 */
+ SHORT f2;
+ HMENU16 f1;
+} GETSUBMENU16;
+typedef GETSUBMENU16 UNALIGNED *PGETSUBMENU16;
+
+typedef struct _GETSYSCOLOR16 { /* u180 */
+ SHORT f1;
+} GETSYSCOLOR16;
+typedef GETSYSCOLOR16 UNALIGNED *PGETSYSCOLOR16;
+
+#ifdef NULLSTRUCT
+typedef struct _GETSYSMODALWINDOW16 { /* u189 */
+} GETSYSMODALWINDOW16;
+typedef GETSYSMODALWINDOW16 UNALIGNED *PGETSYSMODALWINDOW16;
+#endif
+
+typedef struct _GETSYSTEMMENU16 { /* u156 */
+ BOOL16 f2;
+ HWND16 f1;
+} GETSYSTEMMENU16;
+typedef GETSYSTEMMENU16 UNALIGNED *PGETSYSTEMMENU16;
+
+typedef struct _GETSYSTEMMETRICS16 { /* u179 */
+ SHORT f1;
+} GETSYSTEMMETRICS16;
+typedef GETSYSTEMMETRICS16 UNALIGNED *PGETSYSTEMMETRICS16;
+
+typedef struct _GETTABBEDTEXTEXTENT16 { /* u197 */
+ VPSHORT f5;
+ SHORT f4;
+ SHORT f3;
+ VPSTR f2;
+ HDC16 f1;
+} GETTABBEDTEXTEXTENT16;
+typedef GETTABBEDTEXTEXTENT16 UNALIGNED *PGETTABBEDTEXTEXTENT16;
+
+typedef struct _GETTASKFROMHWND16 { /* u117 */
+ HWND16 f1;
+} GETTASKFROMHWND16;
+typedef GETTASKFROMHWND16 UNALIGNED *PGETTASKFROMHWND16;
+
+#ifdef NULLSTRUCT
+typedef struct _GETTICKCOUNT16 { /* u13 */
+} GETTICKCOUNT16;
+typedef GETTICKCOUNT16 UNALIGNED *PGETTICKCOUNT16;
+#endif
+
+#ifdef NULLSTRUCT
+typedef struct _GETTIMERRESOLUTION16 { /* u14 */
+} GETTIMERRESOLUTION16;
+typedef GETTIMERRESOLUTION16 UNALIGNED *PGETTIMERRESOLUTION16;
+#endif
+
+typedef struct _GETTOPWINDOW16 { /* u229 */
+ HWND16 f1;
+} GETTOPWINDOW16;
+typedef GETTOPWINDOW16 UNALIGNED *PGETTOPWINDOW16;
+
+typedef struct _GETUPDATERECT16 { /* u190 */
+ BOOL16 f3;
+ VPRECT16 f2;
+ HWND16 f1;
+} GETUPDATERECT16;
+typedef GETUPDATERECT16 UNALIGNED *PGETUPDATERECT16;
+
+typedef struct _GETUPDATERGN16 { /* u237 */
+ BOOL16 f3;
+ HRGN16 f2;
+ HWND16 f1;
+} GETUPDATERGN16;
+typedef GETUPDATERGN16 UNALIGNED *PGETUPDATERGN16;
+
+typedef struct _GETUSERLOCALOBJTYPE16 { /* u480 */
+ HAND16 f1;
+} GETUSERLOCALOBJTYPE16;
+typedef GETUSERLOCALOBJTYPE16 UNALIGNED *PGETUSERLOCALOBJTYPE16;
+
+typedef struct _GETWC216 { /* u318 */
+ SHORT f2;
+ HWND16 f1;
+} GETWC216;
+typedef GETWC216 UNALIGNED *PGETWC216;
+
+typedef struct _GETWINDOW16 { /* u262 */
+ WORD f2;
+ HWND16 f1;
+} GETWINDOW16;
+typedef GETWINDOW16 UNALIGNED *PGETWINDOW16;
+
+typedef struct _GETWINDOWDC16 { /* u67 */
+ HWND16 f1;
+} GETWINDOWDC16;
+typedef GETWINDOWDC16 UNALIGNED *PGETWINDOWDC16;
+
+typedef struct _GETWINDOWLONG16 { /* u135 */
+ SHORT f2;
+ HWND16 f1;
+} GETWINDOWLONG16;
+typedef GETWINDOWLONG16 UNALIGNED *PGETWINDOWLONG16;
+
+typedef struct _GETWINDOWRECT16 { /* u32 */
+ VPRECT16 f2;
+ HWND16 f1;
+} GETWINDOWRECT16;
+typedef GETWINDOWRECT16 UNALIGNED *PGETWINDOWRECT16;
+
+typedef struct _GETWINDOWTASK16 { /* u224 */
+ HWND16 f1;
+} GETWINDOWTASK16;
+typedef GETWINDOWTASK16 UNALIGNED *PGETWINDOWTASK16;
+
+typedef struct _GETWINDOWTEXT16 { /* u36 */
+ WORD f3;
+ VPSTR f2;
+ HWND16 f1;
+} GETWINDOWTEXT16;
+typedef GETWINDOWTEXT16 UNALIGNED *PGETWINDOWTEXT16;
+
+typedef struct _GETWINDOWTEXTLENGTH16 { /* u38 */
+ HWND16 f1;
+} GETWINDOWTEXTLENGTH16;
+typedef GETWINDOWTEXTLENGTH16 UNALIGNED *PGETWINDOWTEXTLENGTH16;
+
+typedef struct _GETWINDOWWORD16 { /* u133 */
+ SHORT f2;
+ HWND16 f1;
+} GETWINDOWWORD16;
+typedef GETWINDOWWORD16 UNALIGNED *PGETWINDOWWORD16;
+
+typedef struct _GLOBALADDATOM16 { /* u268 */
+ VPSTR f1;
+} GLOBALADDATOM16;
+typedef GLOBALADDATOM16 UNALIGNED *PGLOBALADDATOM16;
+
+typedef struct _GLOBALDELETEATOM16 { /* u269 */
+ ATOM f1;
+} GLOBALDELETEATOM16;
+typedef GLOBALDELETEATOM16 UNALIGNED *PGLOBALDELETEATOM16;
+
+typedef struct _GLOBALFINDATOM16 { /* u270 */
+ VPSTR f1;
+} GLOBALFINDATOM16;
+typedef GLOBALFINDATOM16 UNALIGNED *PGLOBALFINDATOM16;
+
+typedef struct _GLOBALGETATOMNAME16 { /* u271 */
+ SHORT f3;
+ VPSTR f2;
+ ATOM f1;
+} GLOBALGETATOMNAME16;
+typedef GLOBALGETATOMNAME16 UNALIGNED *PGLOBALGETATOMNAME16;
+
+typedef struct _GRAYSTRING16 { /* u185 */
+ SHORT f9;
+ SHORT f8;
+ SHORT f7;
+ SHORT f6;
+ SHORT f5;
+ DWORD f4;
+ VPPROC f3;
+ HBRSH16 f2;
+ HDC16 f1;
+} GRAYSTRING16;
+typedef GRAYSTRING16 UNALIGNED *PGRAYSTRING16;
+
+#ifdef NULLSTRUCT
+typedef struct _HARDWARE_EVENT16 { /* u481 */
+} HARDWARE_EVENT16;
+typedef HARDWARE_EVENT16 UNALIGNED *PHARDWARE_EVENT16;
+#endif
+
+typedef struct _HIDECARET16 { /* u166 */
+ HWND16 f1;
+} HIDECARET16;
+typedef HIDECARET16 UNALIGNED *PHIDECARET16;
+
+typedef struct _HILITEMENUITEM16 { /* u162 */
+ WORD f4;
+ WORD f3;
+ HMENU16 f2;
+ HWND16 f1;
+} HILITEMENUITEM16;
+typedef HILITEMENUITEM16 UNALIGNED *PHILITEMENUITEM16;
+
+#ifdef NULLSTRUCT
+typedef struct _ICONSIZE16 { /* u86 */
+} ICONSIZE16;
+typedef ICONSIZE16 UNALIGNED *PICONSIZE16;
+#endif
+
+typedef struct _INFLATERECT16 { /* u78 */
+ SHORT f3;
+ SHORT f2;
+ VPRECT16 f1;
+} INFLATERECT16;
+typedef INFLATERECT16 UNALIGNED *PINFLATERECT16;
+
+typedef struct _INITAPP16 { /* u5 */
+ HAND16 hInstance;
+} INITAPP16;
+typedef INITAPP16 UNALIGNED *PINITAPP16;
+
+#ifdef NULLSTRUCT
+typedef struct _INSENDMESSAGE16 { /* u192 */
+} INSENDMESSAGE16;
+typedef INSENDMESSAGE16 UNALIGNED *PINSENDMESSAGE16;
+#endif
+
+typedef struct _INSERTMENU16 { /* u410 */
+ VPSTR f5;
+ WORD f4;
+ WORD f3;
+ WORD f2;
+ HMENU16 f1;
+} INSERTMENU16;
+typedef INSERTMENU16 UNALIGNED *PINSERTMENU16;
+
+typedef struct _INTERSECTRECT16 { /* u79 */
+ VPRECT16 f3;
+ VPRECT16 f2;
+ VPRECT16 f1;
+} INTERSECTRECT16;
+typedef INTERSECTRECT16 UNALIGNED *PINTERSECTRECT16;
+
+typedef struct _INVALIDATERECT16 { /* u125 */
+ BOOL16 f3;
+ VPRECT16 f2;
+ HWND16 f1;
+} INVALIDATERECT16;
+typedef INVALIDATERECT16 UNALIGNED *PINVALIDATERECT16;
+
+typedef struct _INVALIDATERGN16 { /* u126 */
+ BOOL16 f3;
+ HRGN16 f2;
+ HWND16 f1;
+} INVALIDATERGN16;
+typedef INVALIDATERGN16 UNALIGNED *PINVALIDATERGN16;
+
+typedef struct _INVERTRECT16 { /* u82 */
+ VPRECT16 f2;
+ HDC16 f1;
+} INVERTRECT16;
+typedef INVERTRECT16 UNALIGNED *PINVERTRECT16;
+
+typedef struct _ISCHARALPHA16 { /* u433 */
+ SHORT f1;
+} ISCHARALPHA16;
+typedef ISCHARALPHA16 UNALIGNED *PISCHARALPHA16;
+
+typedef struct _ISCHARALPHANUMERIC16 { /* u434 */
+ SHORT f1;
+} ISCHARALPHANUMERIC16;
+typedef ISCHARALPHANUMERIC16 UNALIGNED *PISCHARALPHANUMERIC16;
+
+typedef struct _ISCHARLOWER16 { /* u436 */
+ SHORT f1;
+} ISCHARLOWER16;
+typedef ISCHARLOWER16 UNALIGNED *PISCHARLOWER16;
+
+typedef struct _ISCHARUPPER16 { /* u435 */
+ SHORT f1;
+} ISCHARUPPER16;
+typedef ISCHARUPPER16 UNALIGNED *PISCHARUPPER16;
+
+typedef struct _ISCHILD16 { /* u48 */
+ HWND16 f2;
+ HWND16 f1;
+} ISCHILD16;
+typedef ISCHILD16 UNALIGNED *PISCHILD16;
+
+typedef struct _ISCLIPBOARDFORMATAVAILABLE16 { /* u193 */
+ WORD f1;
+} ISCLIPBOARDFORMATAVAILABLE16;
+typedef ISCLIPBOARDFORMATAVAILABLE16 UNALIGNED *PISCLIPBOARDFORMATAVAILABLE16;
+
+typedef struct _ISDIALOGMESSAGE16 { /* u90 */
+ VPMSG16 f2;
+ HWND16 f1;
+} ISDIALOGMESSAGE16;
+typedef ISDIALOGMESSAGE16 UNALIGNED *PISDIALOGMESSAGE16;
+
+typedef struct _ISDLGBUTTONCHECKED16 { /* u98 */
+ SHORT f2;
+ HWND16 f1;
+} ISDLGBUTTONCHECKED16;
+typedef ISDLGBUTTONCHECKED16 UNALIGNED *PISDLGBUTTONCHECKED16;
+
+typedef struct _ISICONIC16 { /* u31 */
+ HWND16 f1;
+} ISICONIC16;
+typedef ISICONIC16 UNALIGNED *PISICONIC16;
+
+typedef struct _ISRECTEMPTY16 { /* u75 */
+ VPRECT16 f1;
+} ISRECTEMPTY16;
+typedef ISRECTEMPTY16 UNALIGNED *PISRECTEMPTY16;
+
+typedef struct _ISTWOBYTECHARPREFIX16 { /* u51 */
+ SHORT f1;
+} ISTWOBYTECHARPREFIX16;
+typedef ISTWOBYTECHARPREFIX16 UNALIGNED *PISTWOBYTECHARPREFIX16;
+
+#ifdef NULLSTRUCT
+typedef struct _ISUSERIDLE16 { /* u59 */
+} ISUSERIDLE16;
+typedef ISUSERIDLE16 UNALIGNED *PISUSERIDLE16;
+#endif
+
+typedef struct _ISWINDOW16 { /* u47 */
+ HWND16 f1;
+} ISWINDOW16;
+typedef ISWINDOW16 UNALIGNED *PISWINDOW16;
+
+typedef struct _ISWINDOWENABLED16 { /* u35 */
+ HWND16 f1;
+} ISWINDOWENABLED16;
+typedef ISWINDOWENABLED16 UNALIGNED *PISWINDOWENABLED16;
+
+typedef struct _ISWINDOWVISIBLE16 { /* u49 */
+ HWND16 f1;
+} ISWINDOWVISIBLE16;
+typedef ISWINDOWVISIBLE16 UNALIGNED *PISWINDOWVISIBLE16;
+
+typedef struct _ISZOOMED16 { /* u272 */
+ HWND16 f1;
+} ISZOOMED16;
+typedef ISZOOMED16 UNALIGNED *PISZOOMED16;
+
+#ifdef NULLSTRUCT
+typedef struct _KEYBD_EVENT16 { /* u289 */
+} KEYBD_EVENT16;
+typedef KEYBD_EVENT16 UNALIGNED *PKEYBD_EVENT16;
+#endif
+
+typedef struct _KEYBDEVENT16 { /* u538 */
+ DWORD dwExtraInfo;
+ WORD bScanCode;
+ WORD bVirtualKey;
+} KEYBDEVENT16;
+typedef KEYBDEVENT16 UNALIGNED *PKEYBDEVENT16;
+
+typedef struct _KILLSYSTEMTIMER16 { /* u182 */
+ SHORT f2;
+ HWND16 f1;
+} KILLSYSTEMTIMER16;
+typedef KILLSYSTEMTIMER16 UNALIGNED *PKILLSYSTEMTIMER16;
+
+typedef struct _KILLTIMER16 { /* u12 */
+ SHORT f2;
+ HWND16 f1;
+} KILLTIMER16;
+typedef KILLTIMER16 UNALIGNED *PKILLTIMER16;
+
+typedef struct _KILLTIMER216 { /* u327 */
+ SHORT f2;
+ HWND16 f1;
+} KILLTIMER216;
+typedef KILLTIMER216 UNALIGNED *PKILLTIMER216;
+
+typedef struct _LBOXCARETBLINKER16 { /* u453 */
+ DWORD f4;
+ WORD f3;
+ WORD f2;
+ HWND16 f1;
+} LBOXCARETBLINKER16;
+typedef LBOXCARETBLINKER16 UNALIGNED *PLBOXCARETBLINKER16;
+
+typedef struct _LOADACCELERATORS16 { /* u177 */
+ VPSTR f2;
+ HAND16 f1;
+} LOADACCELERATORS16;
+typedef LOADACCELERATORS16 UNALIGNED *PLOADACCELERATORS16;
+
+typedef struct _LOADBITMAP16 { /* u175 */
+ DWORD f4;
+ DWORD f3;
+ VPSTR f2;
+ HAND16 f1;
+} LOADBITMAP16;
+typedef LOADBITMAP16 UNALIGNED *PLOADBITMAP16;
+
+typedef struct _LOADCURSOR16 { /* u173 */
+ WORD f7;
+ WORD f6;
+ WORD f5;
+ DWORD f4;
+ DWORD f3;
+ VPSTR f2;
+ HAND16 f1;
+} LOADCURSOR16;
+typedef LOADCURSOR16 UNALIGNED *PLOADCURSOR16;
+
+typedef struct _LOADCURSORICONHANDLER16 { /* u336 */
+ HAND16 f3;
+ HAND16 f2;
+ HAND16 f1;
+} LOADCURSORICONHANDLER16;
+typedef LOADCURSORICONHANDLER16 UNALIGNED *PLOADCURSORICONHANDLER16;
+
+typedef struct _LOADDIBCURSORHANDLER16 { /* u356 */
+ HAND16 f3;
+ HAND16 f2;
+ HAND16 f1;
+} LOADDIBCURSORHANDLER16;
+typedef LOADDIBCURSORHANDLER16 UNALIGNED *PLOADDIBCURSORHANDLER16;
+
+typedef struct _LOADDIBICONHANDLER16 { /* u357 */
+ HAND16 f3;
+ HAND16 f2;
+ HAND16 f1;
+} LOADDIBICONHANDLER16;
+typedef LOADDIBICONHANDLER16 UNALIGNED *PLOADDIBICONHANDLER16;
+
+typedef struct _LOADICON16 { /* u174 */
+ WORD f6;
+ WORD f5;
+ DWORD f4;
+ DWORD f3;
+ VPSTR f2;
+ HAND16 f1;
+} LOADICON16;
+typedef LOADICON16 UNALIGNED *PLOADICON16;
+
+typedef struct _LOADICONHANDLER16 { /* u456 */
+ BOOL16 f2;
+ HICON16 f1;
+} LOADICONHANDLER16;
+typedef LOADICONHANDLER16 UNALIGNED *PLOADICONHANDLER16;
+
+typedef struct _LOADMENU16 { /* u150 */
+ WORD f5;
+ DWORD f4;
+ DWORD f3;
+ VPSTR f2;
+ HAND16 f1;
+} LOADMENU16;
+typedef LOADMENU16 UNALIGNED *PLOADMENU16;
+
+typedef struct _LOADMENUINDIRECT16 { /* u220 */
+ VPSTR f1;
+} LOADMENUINDIRECT16;
+typedef LOADMENUINDIRECT16 UNALIGNED *PLOADMENUINDIRECT16;
+
+typedef struct _LOADSTRING16 { /* u176 */
+ SHORT f4;
+ VPSTR f3;
+ WORD f2;
+ HAND16 f1;
+} LOADSTRING16;
+typedef LOADSTRING16 UNALIGNED *PLOADSTRING16;
+
+typedef struct _LOCKMYTASK16 { /* u276 */
+ BOOL16 f1;
+} LOCKMYTASK16;
+typedef LOCKMYTASK16 UNALIGNED *PLOCKMYTASK16;
+
+typedef struct _LOOKUPMENUHANDLE16 { /* u217 */
+ WORD f2;
+ HMENU16 f1;
+} LOOKUPMENUHANDLE16;
+typedef LOOKUPMENUHANDLE16 UNALIGNED *PLOOKUPMENUHANDLE16;
+
+typedef struct _LSTRCMP16 { /* u430 */
+ VPSTR f2;
+ VPSTR f1;
+} LSTRCMP16;
+typedef LSTRCMP16 UNALIGNED *PLSTRCMP16;
+
+typedef struct _LSTRCMPI16 { /* u471 */
+ VPSTR f2;
+ VPSTR f1;
+} LSTRCMPI16;
+typedef LSTRCMPI16 UNALIGNED *PLSTRCMPI16;
+
+typedef struct _MAPDIALOGRECT16 { /* u103 */
+ VPRECT16 f2;
+ HWND16 f1;
+} MAPDIALOGRECT16;
+typedef MAPDIALOGRECT16 UNALIGNED *PMAPDIALOGRECT16;
+
+typedef struct _MB_DLGPROC16 { /* u409 */
+ LONG f4;
+ WORD f3;
+ WORD f2;
+ HWND16 f1;
+} MB_DLGPROC16;
+typedef MB_DLGPROC16 UNALIGNED *PMB_DLGPROC16;
+
+typedef struct _MENUITEMSTATE16 { /* u329 */
+ WORD f3;
+ WORD f2;
+ HMENU16 f1;
+} MENUITEMSTATE16;
+typedef MENUITEMSTATE16 UNALIGNED *PMENUITEMSTATE16;
+
+typedef struct _MESSAGEBEEP16 { /* u104 */
+ WORD f1;
+} MESSAGEBEEP16;
+typedef MESSAGEBEEP16 UNALIGNED *PMESSAGEBEEP16;
+
+typedef struct _MESSAGEBOX16 { /* u1 */
+ WORD f4;
+ VPSTR f3;
+ VPSTR f2;
+ HWND16 f1;
+} MESSAGEBOX16;
+typedef MESSAGEBOX16 UNALIGNED *PMESSAGEBOX16;
+
+typedef struct _MODIFYMENU16 { /* u414 */
+ VPSTR f5;
+ WORD f4;
+ WORD f3;
+ WORD f2;
+ HMENU16 f1;
+} MODIFYMENU16;
+typedef MODIFYMENU16 UNALIGNED *PMODIFYMENU16;
+
+#ifdef NULLSTRUCT
+typedef struct _MOUSE_EVENT16 { /* u299 */
+} MOUSE_EVENT16;
+typedef MOUSE_EVENT16 UNALIGNED *PMOUSE_EVENT16;
+#endif
+
+typedef struct _MOUSEEVENT16 { /* u537 */
+ DWORD dwExtraInfo;
+ WORD cButtons;
+ WORD dy;
+ WORD dx;
+ WORD wFlags;
+} MOUSEEVENT16;
+typedef MOUSEEVENT16 UNALIGNED *PMOUSEEVENT16;
+
+
+typedef struct _MOVEWINDOW16 { /* u56 */
+ BOOL16 f6;
+ SHORT f5;
+ SHORT f4;
+ SHORT f3;
+ SHORT f2;
+ HWND16 f1;
+} MOVEWINDOW16;
+typedef MOVEWINDOW16 UNALIGNED *PMOVEWINDOW16;
+
+typedef struct _OFFSETRECT16 { /* u77 */
+ SHORT f3;
+ SHORT f2;
+ VPRECT16 f1;
+} OFFSETRECT16;
+typedef OFFSETRECT16 UNALIGNED *POFFSETRECT16;
+
+typedef struct _OPENCLIPBOARD16 { /* u137 */
+ HWND16 f1;
+} OPENCLIPBOARD16;
+typedef OPENCLIPBOARD16 UNALIGNED *POPENCLIPBOARD16;
+
+typedef struct _OPENCOMM16 { /* u200 */
+ DWORD f4; /* added for SetCommEventMask() support */
+ WORD f3;
+ WORD f2;
+ VPSTR f1;
+} OPENCOMM16;
+typedef OPENCOMM16 UNALIGNED *POPENCOMM16;
+
+typedef struct _OPENICON16 { /* u44 */
+ HWND16 f1;
+} OPENICON16;
+typedef OPENICON16 UNALIGNED *POPENICON16;
+
+typedef struct _PAINTRECT16 { /* u325 */
+ VPRECT16 f5;
+ HBRSH16 f4;
+ HDC16 f3;
+ HWND16 f2;
+ HWND16 f1;
+} PAINTRECT16;
+typedef PAINTRECT16 UNALIGNED *PPAINTRECT16;
+
+typedef struct _PEEKMESSAGE16 { /* u109 */
+ WORD f5;
+ WORD f4;
+ WORD f3;
+ HWND16 f2;
+ VPMSG16 f1;
+} PEEKMESSAGE16;
+typedef PEEKMESSAGE16 UNALIGNED *PPEEKMESSAGE16;
+
+typedef struct _POSTAPPMESSAGE16 { /* u116 */
+ LONG f4;
+ WORD f3;
+ WORD f2;
+ HAND16 f1;
+} POSTAPPMESSAGE16;
+typedef POSTAPPMESSAGE16 UNALIGNED *PPOSTAPPMESSAGE16;
+
+typedef struct _POSTMESSAGE16 { /* u110 */
+ LONG f4;
+ WORD f3;
+ WORD f2;
+ HWND16 f1;
+} POSTMESSAGE16;
+typedef POSTMESSAGE16 UNALIGNED *PPOSTMESSAGE16;
+
+typedef struct _POSTMESSAGE216 { /* u313 */
+ LONG f4;
+ WORD f3;
+ WORD f2;
+ HWND16 f1;
+} POSTMESSAGE216;
+typedef POSTMESSAGE216 UNALIGNED *PPOSTMESSAGE216;
+
+typedef struct _POSTQUITMESSAGE16 { /* u6 */
+ SHORT wExitCode;
+} POSTQUITMESSAGE16;
+typedef POSTQUITMESSAGE16 UNALIGNED *PPOSTQUITMESSAGE16;
+
+typedef struct _PTINRECT16 { /* u76 */
+ POINT16 f2;
+ VPRECT16 f1;
+} PTINRECT16;
+typedef PTINRECT16 UNALIGNED *PPTINRECT16;
+
+typedef struct _READCOMM16 { /* u204 */
+ SHORT f3;
+ VPSTR f2;
+ SHORT f1;
+} READCOMM16;
+typedef READCOMM16 UNALIGNED *PREADCOMM16;
+
+typedef struct _REALIZEPALETTE16 { /* u283 */
+ HDC16 f1;
+} REALIZEPALETTE16;
+typedef REALIZEPALETTE16 UNALIGNED *PREALIZEPALETTE16;
+
+typedef struct _REGISTERCLASS16 { /* u57 */
+ VPWNDCLASS16 vpWndClass;
+} REGISTERCLASS16;
+typedef REGISTERCLASS16 UNALIGNED *PREGISTERCLASS16;
+
+typedef struct _REGISTERCLIPBOARDFORMAT16 { /* u145 */
+ VPSTR f1;
+} REGISTERCLIPBOARDFORMAT16;
+typedef REGISTERCLIPBOARDFORMAT16 UNALIGNED *PREGISTERCLIPBOARDFORMAT16;
+
+typedef struct _REGISTERWINDOWMESSAGE16 { /* u118 */
+ VPSTR f1;
+} REGISTERWINDOWMESSAGE16;
+typedef REGISTERWINDOWMESSAGE16 UNALIGNED *PREGISTERWINDOWMESSAGE16;
+
+#ifdef NULLSTRUCT
+typedef struct _RELEASECAPTURE16 { /* u19 */
+} RELEASECAPTURE16;
+typedef RELEASECAPTURE16 UNALIGNED *PRELEASECAPTURE16;
+#endif
+
+typedef struct _RELEASEDC16 { /* u68 */
+ HDC16 f2;
+ HWND16 f1;
+} RELEASEDC16;
+typedef RELEASEDC16 UNALIGNED *PRELEASEDC16;
+
+typedef struct _REMOVEMENU16 { /* u412 */
+ WORD f3;
+ WORD f2;
+ HMENU16 f1;
+} REMOVEMENU16;
+typedef REMOVEMENU16 UNALIGNED *PREMOVEMENU16;
+
+typedef struct _REMOVEPROP16 { /* u24 */
+ VPSTR f2;
+ HWND16 f1;
+} REMOVEPROP16;
+typedef REMOVEPROP16 UNALIGNED *PREMOVEPROP16;
+
+#ifdef NULLSTRUCT
+typedef struct _REPAINTSCREEN16 { /* u275 */
+} REPAINTSCREEN16;
+typedef REPAINTSCREEN16 UNALIGNED *PREPAINTSCREEN16;
+#endif
+
+typedef struct _REPLYMESSAGE16 { /* u115 */
+ LONG f1;
+} REPLYMESSAGE16;
+typedef REPLYMESSAGE16 UNALIGNED *PREPLYMESSAGE16;
+
+typedef struct _SCREENTOCLIENT16 { /* u29 */
+ VPPOINT16 f2;
+ HWND16 f1;
+} SCREENTOCLIENT16;
+typedef SCREENTOCLIENT16 UNALIGNED *PSCREENTOCLIENT16;
+
+typedef struct _SCROLLCHILDREN16 { /* u463 */
+ LONG f4;
+ WORD f3;
+ WORD f2;
+ HWND16 f1;
+} SCROLLCHILDREN16;
+typedef SCROLLCHILDREN16 UNALIGNED *PSCROLLCHILDREN16;
+
+typedef struct _SCROLLDC16 { /* u221 */
+ VPRECT16 f7;
+ HRGN16 f6;
+ VPRECT16 f5;
+ VPRECT16 f4;
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} SCROLLDC16;
+typedef SCROLLDC16 UNALIGNED *PSCROLLDC16;
+
+typedef struct _SCROLLWINDOW16 { /* u61 */
+ VPRECT16 f5;
+ VPRECT16 f4;
+ SHORT f3;
+ SHORT f2;
+ HWND16 f1;
+} SCROLLWINDOW16;
+typedef SCROLLWINDOW16 UNALIGNED *PSCROLLWINDOW16;
+
+typedef struct _SELECTPALETTE16 { /* u282 */
+ BOOL16 f3;
+ HPAL16 f2;
+ HDC16 f1;
+} SELECTPALETTE16;
+typedef SELECTPALETTE16 UNALIGNED *PSELECTPALETTE16;
+
+typedef struct _SENDDLGITEMMESSAGE16 { /* u101 */
+ LONG f5;
+ WORD f4;
+ WORD f3;
+ SHORT f2;
+ HWND16 f1;
+} SENDDLGITEMMESSAGE16;
+typedef SENDDLGITEMMESSAGE16 UNALIGNED *PSENDDLGITEMMESSAGE16;
+
+typedef struct _SENDMESSAGE16 { /* u111 */
+ LONG f4;
+ WORD f3;
+ WORD f2;
+ HWND16 f1;
+} SENDMESSAGE16;
+typedef SENDMESSAGE16 UNALIGNED *PSENDMESSAGE16;
+
+typedef struct _SENDMESSAGE216 { /* u312 */
+ LONG f4;
+ WORD f3;
+ WORD f2;
+ HWND16 f1;
+} SENDMESSAGE216;
+typedef SENDMESSAGE216 UNALIGNED *PSENDMESSAGE216;
+
+typedef struct _SETACTIVEWINDOW16 { /* u59 */
+ HWND16 f1;
+} SETACTIVEWINDOW16;
+typedef SETACTIVEWINDOW16 UNALIGNED *PSETACTIVEWINDOW16;
+
+typedef struct _SETCAPTURE16 { /* u18 */
+ HWND16 f1;
+} SETCAPTURE16;
+typedef SETCAPTURE16 UNALIGNED *PSETCAPTURE16;
+
+typedef struct _SETCARETBLINKTIME16 { /* u168 */
+ WORD f1;
+} SETCARETBLINKTIME16;
+typedef SETCARETBLINKTIME16 UNALIGNED *PSETCARETBLINKTIME16;
+
+typedef struct _SETCARETPOS16 { /* u165 */
+ SHORT f2;
+ SHORT f1;
+} SETCARETPOS16;
+typedef SETCARETPOS16 UNALIGNED *PSETCARETPOS16;
+
+typedef struct _SETCLASSLONG16 { /* u132 */
+ LONG f3;
+ SHORT f2;
+ HWND16 f1;
+} SETCLASSLONG16;
+typedef SETCLASSLONG16 UNALIGNED *PSETCLASSLONG16;
+
+typedef struct _SETCLASSWORD16 { /* u130 */
+ WORD f3;
+ SHORT f2;
+ HWND16 f1;
+} SETCLASSWORD16;
+typedef SETCLASSWORD16 UNALIGNED *PSETCLASSWORD16;
+
+typedef struct _SETCLIPBOARDDATA16 { /* u141 */
+ HAND16 f2;
+ WORD f1;
+} SETCLIPBOARDDATA16;
+typedef SETCLIPBOARDDATA16 UNALIGNED *PSETCLIPBOARDDATA16;
+
+typedef struct _SETCLIPBOARDVIEWER16 { /* u147 */
+ HWND16 f1;
+} SETCLIPBOARDVIEWER16;
+typedef SETCLIPBOARDVIEWER16 UNALIGNED *PSETCLIPBOARDVIEWER16;
+
+typedef struct _SETCOMMBREAK16 { /* u210 */
+ SHORT f1;
+} SETCOMMBREAK16;
+typedef SETCOMMBREAK16 UNALIGNED *PSETCOMMBREAK16;
+
+typedef struct _SETCOMMEVENTMASK16 { /* u208 */
+ WORD f2;
+ SHORT f1;
+} SETCOMMEVENTMASK16;
+typedef SETCOMMEVENTMASK16 UNALIGNED *PSETCOMMEVENTMASK16;
+
+typedef struct _SETCOMMSTATE16 { /* u201 */
+ VPDCB16 f1;
+} SETCOMMSTATE16;
+typedef SETCOMMSTATE16 UNALIGNED *PSETCOMMSTATE16;
+
+typedef struct _SETCURSOR16 { /* u69 */
+ HCUR16 f1;
+} SETCURSOR16;
+typedef SETCURSOR16 UNALIGNED *PSETCURSOR16;
+
+typedef struct _SETCURSORPOS16 { /* u70 */
+ SHORT f2;
+ SHORT f1;
+} SETCURSORPOS16;
+typedef SETCURSORPOS16 UNALIGNED *PSETCURSORPOS16;
+
+typedef struct _SETDESKPATTERN16 { /* u279 */
+ VPSTR f1;
+} SETDESKPATTERN16;
+typedef SETDESKPATTERN16 UNALIGNED *PSETDESKPATTERN16;
+
+typedef struct _SETDESKWALLPAPER16 { /* u285 */
+ VPSTR f1;
+} SETDESKWALLPAPER16;
+typedef SETDESKWALLPAPER16 UNALIGNED *PSETDESKWALLPAPER16;
+
+typedef struct _SETDLGITEMINT16 { /* u94 */
+ BOOL16 f4;
+ WORD f3;
+ SHORT f2;
+ HWND16 f1;
+} SETDLGITEMINT16;
+typedef SETDLGITEMINT16 UNALIGNED *PSETDLGITEMINT16;
+
+typedef struct _SETDLGITEMTEXT16 { /* u92 */
+ VPSTR f3;
+ SHORT f2;
+ HWND16 f1;
+} SETDLGITEMTEXT16;
+typedef SETDLGITEMTEXT16 UNALIGNED *PSETDLGITEMTEXT16;
+
+typedef struct _SETDOUBLECLICKTIME16 { /* u20 */
+ WORD f1;
+} SETDOUBLECLICKTIME16;
+typedef SETDOUBLECLICKTIME16 UNALIGNED *PSETDOUBLECLICKTIME16;
+
+typedef struct _SETFOCUS16 { /* u22 */
+ HWND16 f1;
+} SETFOCUS16;
+typedef SETFOCUS16 UNALIGNED *PSETFOCUS16;
+
+typedef struct _SETGETKBDSTATE16 { /* u330 */
+ VPBYTE f1;
+} SETGETKBDSTATE16;
+typedef SETGETKBDSTATE16 UNALIGNED *PSETGETKBDSTATE16;
+
+typedef struct _SETINTERNALWINDOWPOS16 { /* u461 */
+ VPPOINT16 f4;
+ VPRECT16 f3;
+ WORD f2;
+ HWND16 f1;
+} SETINTERNALWINDOWPOS16;
+typedef SETINTERNALWINDOWPOS16 UNALIGNED *PSETINTERNALWINDOWPOS16;
+
+typedef struct _SETKEYBOARDSTATE16 { /* u223 */
+ VPBYTE f1;
+} SETKEYBOARDSTATE16;
+typedef SETKEYBOARDSTATE16 UNALIGNED *PSETKEYBOARDSTATE16;
+
+typedef struct _SETMENU16 { /* u158 */
+ HMENU16 f2;
+ HWND16 f1;
+} SETMENU16;
+typedef SETMENU16 UNALIGNED *PSETMENU16;
+
+typedef struct _SETMENUITEMBITMAPS16 { /* u418 */
+ HBM16 f5;
+ HBM16 f4;
+ WORD f3;
+ WORD f2;
+ HMENU16 f1;
+} SETMENUITEMBITMAPS16;
+typedef SETMENUITEMBITMAPS16 UNALIGNED *PSETMENUITEMBITMAPS16;
+
+typedef struct _SETMESSAGEQUEUE16 { /* u266 */
+ SHORT f1;
+} SETMESSAGEQUEUE16;
+typedef SETMESSAGEQUEUE16 UNALIGNED *PSETMESSAGEQUEUE16;
+
+typedef struct _SETPARENT16 { /* u233 */
+ HWND16 f2;
+ HWND16 f1;
+} SETPARENT16;
+typedef SETPARENT16 UNALIGNED *PSETPARENT16;
+
+typedef struct _SETPROP16 { /* u26 */
+ HAND16 f3;
+ VPSTR f2;
+ HWND16 f1;
+} SETPROP16;
+typedef SETPROP16 UNALIGNED *PSETPROP16;
+
+typedef struct _SETRECT16 { /* u72 */
+ SHORT f5;
+ SHORT f4;
+ SHORT f3;
+ SHORT f2;
+ VPRECT16 f1;
+} SETRECT16;
+typedef SETRECT16 UNALIGNED *PSETRECT16;
+
+typedef struct _SETRECTEMPTY16 { /* u73 */
+ VPRECT16 f1;
+} SETRECTEMPTY16;
+typedef SETRECTEMPTY16 UNALIGNED *PSETRECTEMPTY16;
+
+typedef struct _SETSCROLLPOS16 { /* u62 */
+ BOOL16 f4;
+ SHORT f3;
+ SHORT f2;
+ HWND16 f1;
+} SETSCROLLPOS16;
+typedef SETSCROLLPOS16 UNALIGNED *PSETSCROLLPOS16;
+
+typedef struct _SETSCROLLRANGE16 { /* u64 */
+ BOOL16 f5;
+ SHORT f4;
+ SHORT f3;
+ SHORT f2;
+ HWND16 f1;
+} SETSCROLLRANGE16;
+typedef SETSCROLLRANGE16 UNALIGNED *PSETSCROLLRANGE16;
+
+typedef struct _SETSYSCOLORS16 { /* u181 */
+ VPLONG f3;
+ VPSHORT f2;
+ SHORT f1;
+} SETSYSCOLORS16;
+typedef SETSYSCOLORS16 UNALIGNED *PSETSYSCOLORS16;
+
+typedef struct _SETSYSMODALWINDOW16 { /* u188 */
+ HWND16 f1;
+} SETSYSMODALWINDOW16;
+typedef SETSYSMODALWINDOW16 UNALIGNED *PSETSYSMODALWINDOW16;
+
+typedef struct _SETSYSTEMMENU16 { /* u280 */
+ HMENU16 f2;
+ HWND16 f1;
+} SETSYSTEMMENU16;
+typedef SETSYSTEMMENU16 UNALIGNED *PSETSYSTEMMENU16;
+
+typedef struct _SETSYSTEMTIMER16 { /* u11 */
+ VPPROC f4;
+ WORD f3;
+ SHORT f2;
+ HWND16 f1;
+} SETSYSTEMTIMER16;
+typedef SETSYSTEMTIMER16 UNALIGNED *PSETSYSTEMTIMER16;
+
+typedef struct _SETTIMER16 { /* u10 */
+ VPPROC f4;
+ WORD f3;
+ SHORT f2;
+ HWND16 f1;
+} SETTIMER16;
+typedef SETTIMER16 UNALIGNED *PSETTIMER16;
+
+typedef struct _SETTIMER216 { /* u328 */
+ VPPROC f4;
+ WORD f3;
+ SHORT f2;
+ HWND16 f1;
+} SETTIMER216;
+typedef SETTIMER216 UNALIGNED *PSETTIMER216;
+
+typedef struct _SETWINDOWLONG16 { /* u136 */
+ LONG f3;
+ SHORT f2;
+ HWND16 f1;
+} SETWINDOWLONG16;
+typedef SETWINDOWLONG16 UNALIGNED *PSETWINDOWLONG16;
+
+typedef struct _SETWINDOWPOS16 { /* u232 */
+ WORD f7;
+ SHORT f6;
+ SHORT f5;
+ SHORT f4;
+ SHORT f3;
+ HWND16 f2;
+ HWND16 f1;
+} SETWINDOWPOS16;
+typedef SETWINDOWPOS16 UNALIGNED *PSETWINDOWPOS16;
+
+typedef struct _SETWINDOWSHOOKINTERNAL16 { /* u121 */
+ VPPROC f3;
+ SHORT f2;
+ SHORT f1;
+} SETWINDOWSHOOKINTERNAL16;
+typedef SETWINDOWSHOOKINTERNAL16 UNALIGNED *PSETWINDOWSHOOKINTERNAL16;
+
+typedef struct _SETWINDOWTEXT16 { /* u37 */
+ VPSTR f2;
+ HWND16 f1;
+} SETWINDOWTEXT16;
+typedef SETWINDOWTEXT16 UNALIGNED *PSETWINDOWTEXT16;
+
+typedef struct _SETWINDOWWORD16 { /* u134 */
+ WORD f3;
+ SHORT f2;
+ HWND16 f1;
+} SETWINDOWWORD16;
+typedef SETWINDOWWORD16 UNALIGNED *PSETWINDOWWORD16;
+
+typedef struct _SHOWCARET16 { /* u167 */
+ HWND16 f1;
+} SHOWCARET16;
+typedef SHOWCARET16 UNALIGNED *PSHOWCARET16;
+
+typedef struct _SHOWCURSOR16 { /* u71 */
+ BOOL16 f1;
+} SHOWCURSOR16;
+typedef SHOWCURSOR16 UNALIGNED *PSHOWCURSOR16;
+
+typedef struct _SHOWOWNEDPOPUPS16 { /* u265 */
+ BOOL16 f2;
+ HWND16 f1;
+} SHOWOWNEDPOPUPS16;
+typedef SHOWOWNEDPOPUPS16 UNALIGNED *PSHOWOWNEDPOPUPS16;
+
+typedef struct _SHOWSCROLLBAR16 { /* u267 */
+ BOOL16 f3;
+ WORD f2;
+ HWND16 f1;
+} SHOWSCROLLBAR16;
+typedef SHOWSCROLLBAR16 UNALIGNED *PSHOWSCROLLBAR16;
+
+typedef struct _SHOWWINDOW16 { /* u42 */
+ SHORT f2;
+ HWND16 f1;
+} SHOWWINDOW16;
+typedef SHOWWINDOW16 UNALIGNED *PSHOWWINDOW16;
+
+typedef struct _SIGNALPROC16 { /* u314 */
+ LONG f4;
+ WORD f3;
+ WORD f2;
+ HTASK16 f1;
+} SIGNALPROC16;
+typedef SIGNALPROC16 UNALIGNED *PSIGNALPROC16;
+
+typedef struct _SNAPWINDOW16 { /* u281 */
+ HWND16 f1;
+} SNAPWINDOW16;
+typedef SNAPWINDOW16 UNALIGNED *PSNAPWINDOW16;
+
+typedef struct _SWAPMOUSEBUTTON16 { /* u186 */
+ BOOL16 f1;
+} SWAPMOUSEBUTTON16;
+typedef SWAPMOUSEBUTTON16 UNALIGNED *PSWAPMOUSEBUTTON16;
+
+typedef struct _SWITCHTOTHISWINDOW16 { /* u172 */
+ BOOL16 f2;
+ HWND16 f1;
+} SWITCHTOTHISWINDOW16;
+typedef SWITCHTOTHISWINDOW16 UNALIGNED *PSWITCHTOTHISWINDOW16;
+
+typedef struct _SWITCHWNDPROC16 { /* u347 */
+ LONG f4;
+ WORD f3;
+ WORD f2;
+ HWND16 f1;
+} SWITCHWNDPROC16;
+typedef SWITCHWNDPROC16 UNALIGNED *PSWITCHWNDPROC16;
+
+typedef struct _SYSERRORBOX16 { /* u320 */
+ SHORT sBtn3;
+ SHORT sBtn2;
+ SHORT sBtn1;
+ VPSZ vpszCaption;
+ VPSZ vpszText;
+} SYSERRORBOX16;
+typedef SYSERRORBOX16 UNALIGNED *PSYSERRORBOX16;
+
+typedef struct _TABBEDTEXTOUT16 { /* u196 */
+ SHORT f8;
+ VPSHORT f7;
+ SHORT f6;
+ SHORT f5;
+ VPSTR f4;
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} TABBEDTEXTOUT16;
+typedef TABBEDTEXTOUT16 UNALIGNED *PTABBEDTEXTOUT16;
+
+typedef struct _TABTHETEXTOUTFORWIMPS16 { /* u354 */
+ BOOL16 f9;
+ SHORT f8;
+ VPSHORT f7;
+ SHORT f6;
+ SHORT f5;
+ VPSTR f4;
+ SHORT f3;
+ SHORT f2;
+ HDC16 f1;
+} TABTHETEXTOUTFORWIMPS16;
+typedef TABTHETEXTOUTFORWIMPS16 UNALIGNED *PTABTHETEXTOUTFORWIMPS16;
+
+typedef struct _TILECHILDWINDOWS16 { /* u199 */
+ WORD f2;
+ HWND16 f1;
+} TILECHILDWINDOWS16;
+typedef TILECHILDWINDOWS16 UNALIGNED *PTILECHILDWINDOWS16;
+
+typedef struct _TITLEWNDPROC16 { /* u345 */
+ LONG f4;
+ WORD f3;
+ WORD f2;
+ HWND16 f1;
+} TITLEWNDPROC16;
+typedef TITLEWNDPROC16 UNALIGNED *PTITLEWNDPROC16;
+
+typedef struct _TRACKPOPUPMENU16 { /* u416 */
+ VPRECT16 f7;
+ HWND16 f6;
+ SHORT f5;
+ SHORT f4;
+ SHORT f3;
+ WORD f2;
+ HMENU16 f1;
+} TRACKPOPUPMENU16;
+typedef TRACKPOPUPMENU16 UNALIGNED *PTRACKPOPUPMENU16;
+
+typedef struct _TRANSLATEACCELERATOR16 { /* u178 */
+ VPMSG16 f3;
+ HAND16 f2;
+ HWND16 f1;
+} TRANSLATEACCELERATOR16;
+typedef TRANSLATEACCELERATOR16 UNALIGNED *PTRANSLATEACCELERATOR16;
+
+typedef struct _TRANSLATEMDISYSACCEL16 { /* u451 */
+ VPMSG16 f2;
+ HWND16 f1;
+} TRANSLATEMDISYSACCEL16;
+typedef TRANSLATEMDISYSACCEL16 UNALIGNED *PTRANSLATEMDISYSACCEL16;
+
+typedef struct _TRANSLATEMESSAGE16 { /* u113 */
+ VPMSG16 f1;
+} TRANSLATEMESSAGE16;
+typedef TRANSLATEMESSAGE16 UNALIGNED *PTRANSLATEMESSAGE16;
+
+typedef struct _TRANSMITCOMMCHAR16 { /* u206 */
+ SHORT f2;
+ SHORT f1;
+} TRANSMITCOMMCHAR16;
+typedef TRANSMITCOMMCHAR16 UNALIGNED *PTRANSMITCOMMCHAR16;
+
+typedef struct _UNGETCOMMCHAR16 { /* u212 */
+ SHORT f2;
+ SHORT f1;
+} UNGETCOMMCHAR16;
+typedef UNGETCOMMCHAR16 UNALIGNED *PUNGETCOMMCHAR16;
+
+typedef struct _UNHOOKWINDOWSHOOK16 { /* u234 */
+ VPPROC f2;
+ SHORT f1;
+} UNHOOKWINDOWSHOOK16;
+typedef UNHOOKWINDOWSHOOK16 UNALIGNED *PUNHOOKWINDOWSHOOK16;
+
+typedef struct _UNIONRECT16 { /* u80 */
+ VPRECT16 f3;
+ VPRECT16 f2;
+ VPRECT16 f1;
+} UNIONRECT16;
+typedef UNIONRECT16 UNALIGNED *PUNIONRECT16;
+
+typedef struct _UNREGISTERCLASS16 { /* u403 */
+ HAND16 hInstance;
+ VPSTR vpszClass;
+} UNREGISTERCLASS16;
+typedef UNREGISTERCLASS16 UNALIGNED *PUNREGISTERCLASS16;
+
+typedef struct _UPDATEWINDOW16 { /* u124 */
+ HWND16 f1;
+} UPDATEWINDOW16;
+typedef UPDATEWINDOW16 UNALIGNED *PUPDATEWINDOW16;
+
+typedef struct _USERSEEUSERDO16 { /* u216 */
+ LONG f3;
+ WORD f2;
+ WORD f1;
+} USERSEEUSERDO16;
+typedef USERSEEUSERDO16 UNALIGNED *PUSERSEEUSERDO16;
+
+#ifdef NULLSTRUCT
+typedef struct _USERYIELD16 { /* u332 */
+} USERYIELD16;
+typedef USERYIELD16 UNALIGNED *PUSERYIELD16;
+#endif
+
+typedef struct _VALIDATERECT16 { /* u127 */
+ VPRECT16 f2;
+ HWND16 f1;
+} VALIDATERECT16;
+typedef VALIDATERECT16 UNALIGNED *PVALIDATERECT16;
+
+typedef struct _VALIDATERGN16 { /* u128 */
+ HRGN16 f2;
+ HWND16 f1;
+} VALIDATERGN16;
+typedef VALIDATERGN16 UNALIGNED *PVALIDATERGN16;
+
+#ifdef NULLSTRUCT
+typedef struct _WAITMESSAGE16 { /* u112 */
+} WAITMESSAGE16;
+typedef WAITMESSAGE16 UNALIGNED *PWAITMESSAGE16;
+#endif
+
+typedef struct _WINDOWFROMPOINT16 { /* u30 */
+ POINT16 f1;
+} WINDOWFROMPOINT16;
+typedef WINDOWFROMPOINT16 UNALIGNED *PWINDOWFROMPOINT16;
+
+typedef struct _WINHELP16 { /* u171 */
+ DWORD f4;
+ WORD f3;
+ VPSTR f2;
+ HWND16 f1;
+} WINHELP16;
+typedef WINHELP16 UNALIGNED *PWINHELP16;
+
+typedef struct _WINOLDAPPHACKOMATIC16 { /* u322 */
+ LONG f1;
+} WINOLDAPPHACKOMATIC16;
+typedef WINOLDAPPHACKOMATIC16 UNALIGNED *PWINOLDAPPHACKOMATIC16;
+
+typedef struct _WRITECOMM16 { /* u205 */
+ SHORT f3;
+ VPSTR f2;
+ SHORT f1;
+} WRITECOMM16;
+typedef WRITECOMM16 UNALIGNED *PWRITECOMM16;
+
+typedef struct _WSPRINTF16 { /* u420 */
+ VPSTR f2;
+ VPSTR f1;
+} WSPRINTF16;
+typedef WSPRINTF16 UNALIGNED *PWSPRINTF16;
+
+typedef struct _WVSPRINTF16 { /* u421 */
+ VPSTR f3;
+ VPSTR f2;
+ VPSTR f1;
+} WVSPRINTF16;
+typedef WVSPRINTF16 UNALIGNED *PWVSPRINTF16;
+
+#ifdef NULLSTRUCT
+typedef struct _XCSTODS16 { /* u315 */
+} XCSTODS16;
+typedef XCSTODS16 UNALIGNED *PXCSTODS16;
+#endif
+
+typedef struct _SETWINDOWSHOOKEX16 { /* u291 */
+ HTASK16 f4;
+ HAND16 f3;
+ VPPROC f2;
+ SHORT f1;
+} SETWINDOWSHOOKEX16;
+typedef SETWINDOWSHOOKEX16 UNALIGNED *PSETWINDOWSHOOKEX16;
+
+typedef struct _UNHOOKWINDOWSHOOKEX16 { /* u292 */
+ HHOOK16 f1;
+} UNHOOKWINDOWSHOOKEX16;
+typedef UNHOOKWINDOWSHOOKEX16 UNALIGNED *PUNHOOKWINDOWSHOOKEX16;
+
+typedef struct _CALLNEXTHOOKEX16 { /* u293 */
+ DWORD f4;
+ WORD f3;
+ SHORT f2;
+ HHOOK16 f1;
+} CALLNEXTHOOKEX16;
+typedef CALLNEXTHOOKEX16 UNALIGNED *PCALLNEXTHOOKEX16;
+
+typedef struct _CLOSEDRIVER16 { /* u253 */
+ VPVOID f3;
+ VPVOID f2;
+ WORD f1;
+} CLOSEDRIVER16;
+typedef CLOSEDRIVER16 UNALIGNED *PCLOSEDRIVER16;
+
+typedef struct _COPYCURSOR16 { /* u369 */
+ HAND16 f2;
+ HAND16 f1;
+} COPYCURSOR16;
+typedef COPYCURSOR16 UNALIGNED *PCOPYCURSOR16;
+
+typedef struct _COPYICON16 { /* u368 */
+ HAND16 f2;
+ HAND16 f1;
+} COPYICON16;
+typedef COPYICON16 UNALIGNED *PCOPYICON16;
+
+typedef struct _DEFDRIVERPROC16 { /* u255 */
+ VPVOID f5;
+ VPVOID f4;
+ WORD f3;
+ HAND16 f2;
+ DWORD f1;
+} DEFDRIVERPROC16;
+typedef DEFDRIVERPROC16 UNALIGNED *PDEFDRIVERPROC16;
+
+typedef struct _ENABLESCROLLBAR16 { /* u482 */
+ WORD f3;
+ SHORT f2;
+ HAND16 f1;
+} ENABLESCROLLBAR16;
+typedef ENABLESCROLLBAR16 UNALIGNED *PENABLESCROLLBAR16;
+
+typedef struct _GETCLIPCURSOR16 { /* u309 */
+ VPRECT16 f1;
+} GETCLIPCURSOR16;
+typedef GETCLIPCURSOR16 UNALIGNED *PGETCLIPCURSOR16;
+
+typedef struct _GETDCEX16 { /* u359 */
+ DWORD f3;
+ WORD f2;
+ HAND16 f1;
+} GETDCEX16;
+typedef GETDCEX16 UNALIGNED *PGETDCEX16;
+
+typedef struct _GETDRIVERMODULEHANDLE16 { /* u254 */
+ HAND16 f1;
+} GETDRIVERMODULEHANDLE16;
+typedef GETDRIVERMODULEHANDLE16 UNALIGNED *PGETDRIVERMODULEHANDLE16;
+
+typedef struct _GETDRIVERINFO16 { /* u256 */
+ VPVOID f2;
+ HAND16 f1;
+} GETDRIVERINFO16;
+typedef GETDRIVERINFO16 UNALIGNED *PGETDRIVERINFO16;
+
+typedef struct _GETFREESYSTEMRESOURCES16 { /* u284 */
+ WORD f1;
+} GETFREESYSTEMRESOURCES16;
+typedef GETFREESYSTEMRESOURCES16 UNALIGNED *PGETFREESYSTEMRESOURCES16;
+
+typedef struct _GETNEXTDRIVER16 { /* u257 */
+ DWORD f2;
+ HAND16 f1;
+} GETNEXTDRIVER16;
+typedef GETNEXTDRIVER16 UNALIGNED *PGETNEXTDRIVER16;
+
+typedef struct _GETQUEUESTATUS16 { /* u334 */
+ WORD f1;
+} GETQUEUESTATUS16;
+typedef GETQUEUESTATUS16 UNALIGNED *PGETQUEUESTATUS16;
+
+typedef struct _GETWINDOWPLACEMENT16 { /* u370 */
+ VPVOID f2;
+ HAND16 f1;
+} GETWINDOWPLACEMENT16;
+typedef GETWINDOWPLACEMENT16 UNALIGNED *PGETWINDOWPLACEMENT16;
+
+typedef struct _ISMENU16 { /* u358 */
+ HAND16 f1;
+} ISMENU16;
+typedef ISMENU16 UNALIGNED *PISMENU16;
+
+typedef struct _LOCKINPUT16 { /* u226 */
+ BOOL16 f3;
+ HAND16 f2;
+ HAND16 f1;
+} LOCKINPUT16;
+typedef LOCKINPUT16 UNALIGNED *PLOCKINPUT16;
+
+typedef struct _LOCKWINDOWUPDATE16 { /* u294 */
+ HAND16 f1;
+} LOCKWINDOWUPDATE16;
+typedef LOCKWINDOWUPDATE16 UNALIGNED *PLOCKWINDOWUPDATE16;
+
+typedef struct _MAPWINDOWPOINTS16 { /* u258 */
+ WORD f4;
+ VPVOID f3;
+ HAND16 f2;
+ HAND16 f1;
+} MAPWINDOWPOINTS16;
+typedef MAPWINDOWPOINTS16 UNALIGNED *PMAPWINDOWPOINTS16;
+
+typedef struct _OPENDRIVER16 { /* u252 */
+ VPVOID f3;
+ VPVOID f2;
+ VPVOID f1;
+} OPENDRIVER16;
+typedef OPENDRIVER16 UNALIGNED *POPENDRIVER16;
+
+typedef struct _QUERYSENDMESSAGE16 { /* u184 */
+ VPVOID f4;
+ WORD f3;
+ WORD f2;
+ WORD f1;
+} QUERYSENDMESSAGE16;
+typedef QUERYSENDMESSAGE16 UNALIGNED *PQUERYSENDMESSAGE16;
+
+typedef struct _REDRAWWWINDOW16 { /* ux293 */
+ WORD f4;
+ WORD f3;
+ VPVOID f2;
+ HAND16 f1;
+} REDRAWWWINDOW16;
+typedef REDRAWWWINDOW16 UNALIGNED *PREDRAWWWINDOW16;
+
+typedef struct _SCROLLWINDOWEX16 { /* u319 */
+ WORD f8;
+ VPRECT16 f7;
+ WORD f6;
+ VPRECT16 f5;
+ VPRECT16 f4;
+ SHORT f3;
+ SHORT f2;
+ HAND16 f1;
+} SCROLLWINDOWEX16;
+typedef SCROLLWINDOWEX16 UNALIGNED *PSCROLLWINDOWEX16;
+
+typedef struct _SENDDRIVERMESSAGE16 { /* u251 */
+ VPVOID f4;
+ VPVOID f3;
+ WORD f2;
+ HAND16 f1;
+} SENDDRIVERMESSAGE16;
+typedef SENDDRIVERMESSAGE16 UNALIGNED *PSENDDRIVERMESSAGE16;
+
+typedef struct _REDRAWWINDOW16 { /* u290 */
+ WORD f4;
+ WORD f3;
+ VPVOID f2;
+ HAND16 f1;
+} REDRAWWINDOW16;
+typedef REDRAWWINDOW16 UNALIGNED *PREDRAWWINDOW16;
+
+
+typedef struct _SETEVENTHOOK16 { /* u321 */
+ VPPROC f1;
+} SETEVENTHOOK16;
+typedef SETEVENTHOOK16 UNALIGNED *PSETEVENTHOOK16;
+
+typedef struct _FILLWINDOW16 { /* u324 */
+ HBRSH16 f4;
+ HDC16 f3;
+ HWND16 f2;
+ HWND16 f1;
+} FILLWINDOW16;
+typedef FILLWINDOW16 UNALIGNED *PFILLWINDOW16;
+
+typedef struct _SETWINDOWPLACEMENT16 { /* u371 */
+ VPVOID f2;
+ HAND16 f1;
+} SETWINDOWPLACEMENT16;
+typedef SETWINDOWPLACEMENT16 UNALIGNED *PSETWINDOWPLACEMENT16;
+
+typedef struct _SUBTRACTRECT16 { /* u373 */
+ VPVOID f3;
+ VPVOID f2;
+ VPVOID f1;
+} SUBTRACTRECT16;
+typedef SUBTRACTRECT16 UNALIGNED *PSUBTRACTRECT16;
+
+typedef struct _SYSTEMPARAMETERSINFO16 { /* u483 */
+ WORD f4;
+ VPVOID f3;
+ WORD f2;
+ WORD f1;
+} SYSTEMPARAMETERSINFO16;
+typedef SYSTEMPARAMETERSINFO16 UNALIGNED *PSYSTEMPARAMETERSINFO16;
+
+typedef struct _CURSORSHAPE16 { /* curs */
+ SHORT xHotSpot;
+ SHORT yHotSpot;
+ SHORT cx;
+ SHORT cy;
+ SHORT cbWidth; /* Bytes per row, accounting for word alignment. */
+ BYTE Planes;
+ BYTE BitsPixel;
+} CURSORSHAPE16;
+typedef CURSORSHAPE16 UNALIGNED *PCURSORSHAPE16;
+
+
+typedef struct _MULTIKEYHELP16 { /* mkh */
+ WORD mkSize;
+ BYTE mkKeylist;
+ BYTE szKeyphrase[1];
+} MULTIKEYHELP16;
+typedef MULTIKEYHELP16 UNALIGNED *PMULTIKEYHELP16;
+
+
+typedef struct _HELPWININFO16 { /* hwinfo */
+ SHORT wStructSize;
+ SHORT x;
+ SHORT y;
+ SHORT dx;
+ SHORT dy;
+ SHORT wMax;
+ BYTE rgchMember[2];
+} HELPWININFO16;
+typedef HELPWININFO16 UNALIGNED *PHELPWININFO16;
+
+typedef struct _LOADACCEL16 { /* ldaccel */
+ WORD hInst;
+ WORD hAccel;
+ VPVOID pAccel;
+ DWORD cbAccel;
+} LOADACCEL16;
+typedef LOADACCEL16 UNALIGNED FAR *PLOADACCEL16;
+
+typedef struct _NOTIFYWOW16 { /* notewow */
+ VPVOID pData;
+ WORD Id;
+} NOTIFYWOW16;
+typedef NOTIFYWOW16 UNALIGNED *PNOTIFYWOW16;
+
+
+typedef struct _ICONCUR16 { /* iconcur */
+ WORD hInst;
+ VPVOID lpStr;
+} ICONCUR16;
+typedef ICONCUR16 UNALIGNED *PICONCUR16;
+
+
+typedef struct _WNETADDCONNECTION16 { /* u517 */
+ VPSTR f3;
+ VPSTR f2;
+ VPSTR f1;
+} WNETADDCONNECTION16;
+typedef WNETADDCONNECTION16 UNALIGNED *PWNETADDCONNECTION16;
+
+typedef struct _WNETGETCONNECTION16 { /* u512 */
+ VPVOID f3;
+ VPSTR f2;
+ VPSTR f1;
+} WNETGETCONNECTION16;
+typedef WNETGETCONNECTION16 UNALIGNED *PWNETGETCONNECTION16;
+
+typedef struct _WNETCANCELCONNECTION16 { /* u518 */
+ BOOL16 f2;
+ VPSTR f1;
+} WNETCANCELCONNECTION16;
+typedef WNETCANCELCONNECTION16 UNALIGNED *PWNETCANCELCONNECTION16;
+
+typedef struct _WINDOWPLACEMENT16 { /* wp16wow32only */
+ WORD length;
+ WORD flags;
+ WORD showCmd;
+ POINT16 ptMinPosition;
+ POINT16 ptMaxPosition;
+ RECT16 rcNormalPosition;
+} WINDOWPLACEMENT16;
+typedef WINDOWPLACEMENT16 UNALIGNED *LPWINDOWPLACEMENT16;
+
+typedef struct _WOWGETIDFROMDIRECTORY16 { /* u534 */
+ WORD f2;
+ VPVOID f1;
+} WOWGETIDFROMDIRECTORY16;
+typedef WOWGETIDFROMDIRECTORY16 UNALIGNED *PWOWGETIDFROMDIRECTORY16;
+
+typedef struct _WORDBREAKPROC16 { /* wordbreakproc */
+ SHORT action;
+ SHORT cbEditText;
+ SHORT ichCurrentWord;
+ VPVOID lpszEditText;
+} WORDBREAKPROC16;
+typedef WORDBREAKPROC16 UNALIGNED *PWORDBREAKPROC16;
+
+typedef struct _USERCLIENTGLOBALS { /* uclg */
+ WORD hInstance;
+ BYTE UNALIGNED **lpgpsi;
+ BYTE UNALIGNED **lpCsrFlag;
+ DWORD dwBldInfo;
+ VPWORD lpwMaxDWPMsg;
+ VPSTR lpDWPBits;
+ WORD cbDWPBits;
+} USERCLIENTGLOBALS;
+typedef USERCLIENTGLOBALS UNALIGNED *PUSERCLIENTGLOBALS;
+
+/* XLATOFF */
+#pragma pack()
+/* XLATON */
diff --git a/private/mvdm/inc/wowwsock.h b/private/mvdm/inc/wowwsock.h
new file mode 100644
index 000000000..41332e550
--- /dev/null
+++ b/private/mvdm/inc/wowwsock.h
@@ -0,0 +1,467 @@
+/*++ BUILD Version: 0001
+ *
+ * WOW v1.0
+ *
+ * Copyright (c) 1991, Microsoft Corporation
+ *
+ * WOWWSOCK.H
+ * 16-bit Winsock API argument structures
+ *
+ * History:
+ * Created 02-Oct-1992 by David Treadwell (davidtr)
+--*/
+
+//#include <windows.h>
+//#include <winsock.h>
+
+/* XLATOFF */
+#pragma pack(1)
+/* XLATON */
+
+/*++
+ *
+ * Winsock data structures
+ *
+--*/
+
+typedef WORD HSOCKET16;
+typedef DWORD IN_ADDR16;
+
+typedef struct _SOCKADDR16 { /* sa16 */
+ WORD sa_family;
+ BYTE sa_data[14];
+} SOCKADDR16;
+typedef SOCKADDR16 UNALIGNED *PSOCKADDR16;
+typedef VPVOID VPSOCKADDR;
+
+#define FD_SETSIZE 64
+
+typedef struct _FD_SET16 { /* fd16 */
+ WORD fd_count;
+ HSOCKET16 fd_array[FD_SETSIZE];
+} FD_SET16;
+typedef FD_SET16 UNALIGNED *PFD_SET16;
+typedef VPVOID VPFD_SET16;
+
+#define WSADESCRIPTION_LEN 256
+#define WSASYS_STATUS_LEN 128
+
+typedef struct _WSADATA16 { /* wd16 */
+ WORD wVersion;
+ WORD wHighVersion;
+ CHAR szDescription[WSADESCRIPTION_LEN+1];
+ CHAR szSystemStatus[WSASYS_STATUS_LEN+1];
+ INT16 iMaxSockets;
+ INT16 iMaxUdpDg;
+ VPBYTE lpVendorInfo;
+} WSADATA16;
+typedef WSADATA16 UNALIGNED *PWSADATA16;
+typedef VPVOID VPWSADATA16;
+
+typedef struct _TIMEVAL16 { /* tv16 */
+ DWORD tv_sec; /* seconds */
+ DWORD tv_usec; /* and microseconds */
+} TIMEVAL16;
+typedef TIMEVAL16 *PTIMEVAL16;
+typedef VPVOID VPTIMEVAL16;
+
+typedef struct _HOSTENT16 { /* he16 */
+ VPSZ h_name;
+ VPVOID h_aliases;
+ WORD h_addrtype;
+ WORD h_length;
+ VPBYTE h_addr_list;
+} HOSTENT16;
+typedef HOSTENT16 *PHOSTENT16;
+typedef VPVOID VPHOSTENT16;
+
+typedef struct _PROTOENT16 { /* pe16 */
+ VPSZ p_name;
+ VPVOID p_aliases;
+ WORD p_proto;
+} PROTOENT16;
+typedef PROTOENT16 *PPROTOENT16;
+typedef VPVOID VPPROTOENT16;
+
+typedef struct _SERVENT16 { /* se16 */
+ VPSZ s_name;
+ VPVOID s_aliases;
+ WORD s_port;
+ VPSZ s_proto;
+} SERVENT16;
+typedef SERVENT16 *PSERVENT16;
+typedef VPVOID VPSERVENT16;
+
+typedef struct _NETENT16 { /* ne16 */
+ VPSZ n_name;
+ VPVOID n_aliases;
+ WORD n_addrtype;
+ DWORD n_net;
+} NETENT16;
+typedef NETENT16 *PNETENT16;
+typedef VPVOID VPNETENT16;
+
+/*++
+ *
+ * Winsock API IDs (equal to ordinal numbers)
+ *
+--*/
+
+#define FUN_ACCEPT 1 //
+#define FUN_BIND 2 //
+#define FUN_CLOSESOCKET 3 //
+#define FUN_CONNECT 4 //
+#define FUN_GETPEERNAME 5 //
+#define FUN_GETSOCKNAME 6 //
+#define FUN_GETSOCKOPT 7 //
+#define FUN_HTONL 8 //
+#define FUN_HTONS 9 //
+#define FUN_INET_ADDR 10 //
+#define FUN_INET_NTOA 11 //
+#define FUN_IOCTLSOCKET 12 //
+#define FUN_LISTEN 13 //
+#define FUN_NTOHL 14 //
+#define FUN_NTOHS 15 //
+#define FUN_RECV 16 //
+#define FUN_RECVFROM 17 //
+#define FUN_SELECT 18 //
+#define FUN_SEND 19 //
+#define FUN_SENDTO 20 //
+#define FUN_SETSOCKOPT 21 //
+#define FUN_SHUTDOWN 22 //
+#define FUN_SOCKET 23 //
+
+#define FUN_GETHOSTBYADDR 51 //
+#define FUN_GETHOSTBYNAME 52 //
+#define FUN_GETPROTOBYNAME 53 //
+#define FUN_GETPROTOBYNUMBER 54 //
+#define FUN_GETSERVBYNAME 55 //
+#define FUN_GETSERVBYPORT 56 //
+#define FUN_GETHOSTNAME 57 //
+
+#define FUN_WSAASYNCSELECT 101 //
+#define FUN_WSAASYNCGETHOSTBYADDR 102 //
+#define FUN_WSAASYNCGETHOSTBYNAME 103 //
+#define FUN_WSAASYNCGETPROTOBYNUMBER 104 //
+#define FUN_WSAASYNCGETPROTOBYNAME 105 //
+#define FUN_WSAASYNCGETSERVBYPORT 106 //
+#define FUN_WSAASYNCGETSERVBYNAME 107 //
+#define FUN_WSACANCELASYNCREQUEST 108 //
+#define FUN_WSASETBLOCKINGHOOK 109 //
+#define FUN_WSAUNHOOKBLOCKINGHOOK 110 //
+#define FUN_WSAGETLASTERROR 111 //
+#define FUN_WSASETLASTERROR 112 //
+#define FUN_WSACANCELBLOCKINGCALL 113 //
+#define FUN_WSAISBLOCKING 114 //
+#define FUN_WSASTARTUP 115 //
+#define FUN_WSACLEANUP 116 //
+
+#define FUN___WSAFDISSET 151 //
+
+/*++
+
+ Winsock function prototypes - the seemingly unimportant number in the
+ comment on each function MUST match the ones in the list above!!!
+
+ !! BE WARNED !!
+
+--*/
+
+typedef struct _ACCEPT16 { /* ws1 */
+ VPWORD AddressLength;
+ VPSOCKADDR Address;
+ HSOCKET16 hSocket;
+} ACCEPT16;
+typedef ACCEPT16 UNALIGNED *PACCEPT16;
+
+typedef struct _BIND16 { /* ws2 */
+ WORD AddressLength;
+ VPSOCKADDR Address;
+ HSOCKET16 hSocket;
+} BIND16;
+typedef BIND16 UNALIGNED *PBIND16;
+
+typedef struct _CLOSESOCKET16 { /* ws3 */
+ HSOCKET16 hSocket;
+} CLOSESOCKET16;
+typedef CLOSESOCKET16 UNALIGNED *PCLOSESOCKET16;
+
+typedef struct _CONNECT16 { /* ws4 */
+ WORD AddressLength;
+ VPSOCKADDR Address;
+ HSOCKET16 hSocket;
+} CONNECT16;
+typedef CONNECT16 UNALIGNED *PCONNECT16;
+
+typedef struct _GETPEERNAME16 { /* ws5 */
+ VPWORD AddressLength;
+ VPSOCKADDR Address;
+ HSOCKET16 hSocket;
+} GETPEERNAME16;
+typedef GETPEERNAME16 UNALIGNED *PGETPEERNAME16;
+
+typedef struct _GETSOCKNAME16 { /* ws6 */
+ VPWORD AddressLength;
+ VPSOCKADDR Address;
+ HSOCKET16 hSocket;
+} GETSOCKNAME16;
+typedef GETSOCKNAME16 UNALIGNED *PGETSOCKNAME16;
+
+typedef struct _GETSOCKOPT16 { /* ws7 */
+ VPWORD OptionLength;
+ VPBYTE OptionValue;
+ WORD OptionName;
+ WORD Level;
+ HSOCKET16 hSocket;
+} GETSOCKOPT16;
+typedef GETSOCKOPT16 UNALIGNED *PGETSOCKOPT16;
+
+typedef struct _HTONL16 { /* ws8 */
+ DWORD HostLong;
+} HTONL16;
+typedef HTONL16 UNALIGNED *PHTONL16;
+
+typedef struct _HTONS16 { /* ws9 */
+ WORD HostShort;
+} HTONS16;
+typedef HTONS16 UNALIGNED *PHTONS16;
+
+typedef struct _INET_ADDR16 { /* ws10 */
+ VPSZ cp;
+} INET_ADDR16;
+typedef INET_ADDR16 UNALIGNED *PINET_ADDR16;
+
+typedef struct _INET_NTOA16 { /* ws11 */
+ IN_ADDR16 in;
+} INET_NTOA16;
+typedef INET_NTOA16 UNALIGNED *PINET_NTOA16;
+
+typedef struct _IOCTLSOCKET16 { /* ws12 */
+ VPDWORD Argument;
+ DWORD Command;
+ HSOCKET16 hSocket;
+} IOCTLSOCKET16;
+typedef IOCTLSOCKET16 UNALIGNED *PIOCTLSOCKET16;
+
+typedef struct _LISTEN16 { /* ws13 */
+ WORD Backlog;
+ HSOCKET16 hSocket;
+} LISTEN16;
+typedef LISTEN16 UNALIGNED *PLISTEN16;
+
+typedef struct _NTOHL16 { /* ws14 */
+ DWORD NetLong;
+} NTOHL16;
+typedef NTOHL16 UNALIGNED *PNTOHL16;
+
+typedef struct _NTOHS16 { /* ws15 */
+ WORD NetShort;
+} NTOHS16;
+typedef NTOHS16 UNALIGNED *PNTOHS16;
+
+typedef struct _RECV16 { /* ws16 */
+ WORD Flags;
+ WORD BufferLength;
+ VPBYTE Buffer;
+ HSOCKET16 hSocket;
+} RECV16;
+typedef RECV16 UNALIGNED *PRECV16;
+
+typedef struct _RECVFROM16 { /* ws17 */
+ VPWORD AddressLength;
+ VPSOCKADDR Address;
+ WORD Flags;
+ WORD BufferLength;
+ VPBYTE Buffer;
+ HSOCKET16 hSocket;
+} RECVFROM16;
+typedef RECVFROM16 UNALIGNED *PRECVFROM16;
+
+typedef struct _SELECT16 { /* ws18 */
+ VPTIMEVAL16 Timeout;
+ VPFD_SET16 Exceptfds;
+ VPFD_SET16 Writefds;
+ VPFD_SET16 Readfds;
+ WORD HandleCount;
+} SELECT16;
+typedef SELECT16 UNALIGNED *PSELECT16;
+
+typedef struct _SEND16 { /* ws19 */
+ WORD Flags;
+ WORD BufferLength;
+ VPBYTE Buffer;
+ HSOCKET16 hSocket;
+} SEND16;
+typedef SEND16 UNALIGNED *PSEND16;
+
+typedef struct _SENDTO16 { /* ws20 */
+ WORD AddressLength;
+ VPSOCKADDR Address;
+ WORD Flags;
+ WORD BufferLength;
+ VPBYTE Buffer;
+ HSOCKET16 hSocket;
+} SENDTO16;
+typedef SENDTO16 UNALIGNED *PSENDTO16;
+
+typedef struct _SETSOCKOPT16 { /* ws21 */
+ WORD OptionLength;
+ VPBYTE OptionValue;
+ WORD OptionName;
+ WORD Level;
+ HSOCKET16 hSocket;
+} SETSOCKOPT16;
+typedef SETSOCKOPT16 UNALIGNED *PSETSOCKOPT16;
+
+typedef struct _SHUTDOWN16 { /* ws22 */
+ WORD How;
+ HSOCKET16 hSocket;
+} SHUTDOWN16;
+typedef SHUTDOWN16 UNALIGNED *PSHUTDOWN16;
+
+typedef struct _SOCKET16 { /* ws23 */
+ WORD Protocol;
+ WORD Type;
+ WORD AddressFamily;
+} SOCKET16;
+typedef SOCKET16 UNALIGNED *PSOCKET16;
+
+typedef struct _GETHOSTBYADDR16 { /* ws51 */
+ WORD Type;
+ WORD Length;
+ VPBYTE Address;
+} GETHOSTBYADDR16;
+typedef GETHOSTBYADDR16 UNALIGNED *PGETHOSTBYADDR16;
+
+typedef struct _GETHOSTBYNAME16 { /* ws52 */
+ VPSZ Name;
+} GETHOSTBYNAME16;
+typedef GETHOSTBYNAME16 UNALIGNED *PGETHOSTBYNAME16;
+
+typedef struct _GETPROTOBYNAME16 { /* ws53 */
+ VPSZ Name;
+} GETPROTOBYNAME16;
+typedef GETPROTOBYNAME16 UNALIGNED *PGETPROTOBYNAME16;
+
+typedef struct _GETPROTOBYNUMBER16 { /* ws54 */
+ WORD Protocol;
+} GETPROTOBYNUMBER16;
+typedef GETPROTOBYNUMBER16 UNALIGNED *PGETPROTOBYNUMBER16;
+
+typedef struct _GETSERVBYNAME16 { /* ws55 */
+ VPSZ Protocol;
+ VPSZ Name;
+} GETSERVBYNAME16;
+typedef GETSERVBYNAME16 UNALIGNED *PGETSERVBYNAME16;
+
+typedef struct _GETSERVBYPORT16 { /* ws56 */
+ VPSZ Protocol;
+ WORD Port;
+} GETSERVBYPORT16;
+typedef GETSERVBYPORT16 UNALIGNED *PGETSERVBYPORT16;
+
+typedef struct _GETHOSTNAME16 { /* ws57 */
+ WORD NameLength;
+ VPSZ Name;
+} GETHOSTNAME16;
+typedef GETHOSTNAME16 UNALIGNED *PGETHOSTNAME16;
+
+typedef struct _WSAASYNCSELECT16 { /* ws101 */
+ DWORD lEvent;
+ WORD wMsg;
+ HWND16 hWnd;
+ HSOCKET16 hSocket;
+} WSAASYNCSELECT16;
+typedef WSAASYNCSELECT16 UNALIGNED *PWSAASYNCSELECT16;
+
+typedef struct _WSAASYNCGETHOSTBYADDR16 { /* ws102 */
+ WORD BufferLength;
+ VPBYTE Buffer;
+ WORD Type;
+ WORD Length;
+ VPBYTE Address;
+ WORD wMsg;
+ HWND16 hWnd;
+} WSAASYNCGETHOSTBYADDR16;
+typedef WSAASYNCGETHOSTBYADDR16 UNALIGNED *PWSAASYNCGETHOSTBYADDR16;
+
+typedef struct _WSAASYNCGETHOSTBYNAME16 { /* ws103 */
+ WORD BufferLength;
+ VPBYTE Buffer;
+ VPSZ Name;
+ WORD wMsg;
+ HWND16 hWnd;
+} WSAASYNCGETHOSTBYNAME16;
+typedef WSAASYNCGETHOSTBYNAME16 UNALIGNED *PWSAASYNCGETHOSTBYNAME16;
+
+typedef struct _WSAASYNCGETPROTOBYNUMBER16 { /* ws104 */
+ WORD BufferLength;
+ VPBYTE Buffer;
+ WORD Number;
+ WORD wMsg;
+ HWND16 hWnd;
+} WSAASYNCGETPROTOBYNUMBER16;
+typedef WSAASYNCGETPROTOBYNUMBER16 UNALIGNED *PWSAASYNCGETPROTOBYNUMBER16;
+
+typedef struct _WSAASYNCGETPROTOBYNAME16 { /* ws105 */
+ WORD BufferLength;
+ VPBYTE Buffer;
+ VPSZ Name;
+ WORD wMsg;
+ HWND16 hWnd;
+} WSAASYNCGETPROTOBYNAME16;
+typedef WSAASYNCGETPROTOBYNAME16 UNALIGNED *PWSAASYNCGETPROTOBYNAME16;
+
+typedef struct _WSAASYNCGETSERVBYPORT16 { /* ws106 */
+ WORD BufferLength;
+ VPBYTE Buffer;
+ VPSZ Protocol;
+ WORD Port;
+ WORD wMsg;
+ HWND16 hWnd;
+} WSAASYNCGETSERVBYPORT16;
+typedef WSAASYNCGETSERVBYPORT16 UNALIGNED *PWSAASYNCGETSERVBYPORT16;
+
+typedef struct _WSAASYNCGETSERVBYNAME16 { /* ws107 */
+ WORD BufferLength;
+ VPBYTE Buffer;
+ VPSZ Protocol;
+ VPSZ Name;
+ WORD wMsg;
+ HWND16 hWnd;
+} WSAASYNCGETSERVBYNAME16;
+typedef WSAASYNCGETSERVBYNAME16 UNALIGNED *PWSAASYNCGETSERVBYNAME16;
+
+typedef struct _WSACANCELASYNCREQUEST16 { /* ws108 */
+ WORD hAsyncTaskHandle;
+} WSACANCELASYNCREQUEST16;
+typedef WSACANCELASYNCREQUEST16 UNALIGNED *PWSACANCELASYNCREQUEST16;
+
+typedef struct _WSASETBLOCKINGHOOK16 { /* ws109 */
+ VPWNDPROC lpBlockFunc;
+} WSASETBLOCKINGHOOK16;
+typedef WSASETBLOCKINGHOOK16 UNALIGNED *PWSASETBLOCKINGHOOK16;
+
+typedef struct _WSASETLASTERROR16 { /* ws112 */
+ WORD Error;
+} WSASETLASTERROR16;
+typedef WSASETLASTERROR16 UNALIGNED *PWSASETLASTERROR16;
+
+typedef struct _WSASTARTUP16 { /* ws115 */
+ VPWSADATA16 lpWSAData;
+ WORD wVersionRequired;
+} WSASTARTUP16;
+typedef WSASTARTUP16 UNALIGNED *PWSASTARTUP16;
+
+typedef struct ___WSAFDISSET16 { /* ws151 */
+ VPFD_SET16 Set;
+ HSOCKET16 hSocket;
+} __WSAFDISSET16;
+typedef __WSAFDISSET16 UNALIGNED *P__WSAFDISSET16;
+
+/* XLATOFF */
+#pragma pack()
+/* XLATON */
+
+#define FUN___WSAFDISSET 151 //
+
diff --git a/private/mvdm/inc/x86def.h b/private/mvdm/inc/x86def.h
new file mode 100644
index 000000000..83088bb2e
--- /dev/null
+++ b/private/mvdm/inc/x86def.h
@@ -0,0 +1,129 @@
+/*++ BUILD Version: 0001
+
+Copyright (c) 1990 Microsoft Corporation
+
+Module Name:
+
+ X86PC.H
+
+Abstract:
+
+ This file contains macros, function prototypes, and externs for the
+ x86 emulator NT version of SoftPC v3.0.
+
+Author:
+
+ Dave Hastings (daveh) 4-11-91
+
+Revision History:
+
+ Jeff Parsons (jeffpar) 14-May-1991
+ Essentially copied this file from V86PC.H, except that I had to define
+ X86CONTEXT as the x86-compatible version of CONTEXT.
+
+--*/
+
+
+//
+// Define the size of the 80387 save area, which is in the context frame.
+//
+
+#define SIZE_OF_80387_ENVIRONMENT 108
+#define SIZE_OF_80387_REGISTERS 80
+
+typedef struct _FLOATING_SAVE_AREA {
+ ULONG ControlWord;
+ ULONG StatusWord;
+ ULONG TagWord;
+ ULONG ErrorOffset;
+ ULONG ErrorSelector;
+ ULONG DataOffset;
+ ULONG DataSelector;
+ UCHAR RegisterArea[SIZE_OF_80387_REGISTERS];
+} FLOATING_SAVE_AREA;
+
+typedef FLOATING_SAVE_AREA *PFLOATING_SAVE_AREA;
+
+
+// x86 Context Frame (copied from nti386.h)
+//
+// The layout of the record conforms to a standard call frame.
+//
+
+typedef struct _X86CONTEXT {
+
+ //
+ // The flags values within this flag control the contents of
+ // a CONTEXT record.
+ //
+ // If the context record is used as an input parameter, then
+ // for each portion of the context record controlled by a flag
+ // whose value is set, it is assumed that that portion of the
+ // context record contains valid context. If the context record
+ // is being used to modify a threads context, then only that
+ // portion of the threads context will be modified.
+ //
+ // If the context record is used as an IN OUT parameter to capture
+ // the context of a thread, then only those portions of the thread's
+ // context corresponding to set flags will be returned.
+ //
+ // The context record is never used as an OUT only parameter.
+ //
+
+ ULONG ContextFlags;
+
+ //
+ // This section is specified/returned if CONTEXT_DEBUG_REGISTERS is
+ // set in ContextFlags. Note that CONTEXT_DEBUG_REGISTERS is NOT
+ // included in CONTEXT_FULL.
+ //
+
+ ULONG Dr0;
+ ULONG Dr1;
+ ULONG Dr2;
+ ULONG Dr3;
+ ULONG Dr6;
+ ULONG Dr7;
+
+ //
+ // This section is specified/returned if the
+ // ContextFlags word contians the flag CONTEXT_FLOATING_POINT.
+ //
+
+ FLOATING_SAVE_AREA FloatSave;
+
+ //
+ // This section is specified/returned if the
+ // ContextFlags word contians the flag CONTEXT_SEGMENTS.
+ //
+
+ ULONG SegGs;
+ ULONG SegFs;
+ ULONG SegEs;
+ ULONG SegDs;
+
+ //
+ // This section is specified/returned if the
+ // ContextFlags word contians the flag CONTEXT_INTEGER.
+ //
+
+ ULONG Edi;
+ ULONG Esi;
+ ULONG Ebx;
+ ULONG Edx;
+ ULONG Ecx;
+ ULONG Eax;
+
+ //
+ // This section is specified/returned if the
+ // ContextFlags word contians the flag CONTEXT_CONTROL.
+ //
+
+ ULONG Ebp;
+ ULONG Eip;
+ ULONG SegCs; // MUST BE SANITIZED
+ ULONG EFlags; // MUST BE SANITIZED
+ ULONG Esp;
+ ULONG SegSs;
+
+} X86CONTEXT, *PX86CONTEXT;
diff --git a/private/mvdm/inc/xmsexp.h b/private/mvdm/inc/xmsexp.h
new file mode 100644
index 000000000..f95de6d5b
--- /dev/null
+++ b/private/mvdm/inc/xmsexp.h
@@ -0,0 +1,24 @@
+/*++ BUILD Version: 0001
+ *
+ * MVDM v1.0
+ *
+ * Copyright (c) 1991, Microsoft Corporation
+ *
+ * XMSEXP.H
+ * XMS exports
+ *
+ * History:
+ * 15-May-1991 Sudeep Bharati (sudeepb)
+ * Created.
+--*/
+
+extern BOOL XMSDispatch(ULONG iXMSSvc);
+extern BOOL XMSInit(int argc, char *argv[]);
+
+/*
+ * handle for extended memory tracking.
+ * this is used by DPMI on risc so that
+ * DPMI and XMS can both allocate extended
+ * memory
+ */
+extern PVOID ExtMemSA;
diff --git a/private/mvdm/inc/xmssvc.h b/private/mvdm/inc/xmssvc.h
new file mode 100644
index 000000000..5546c9893
--- /dev/null
+++ b/private/mvdm/inc/xmssvc.h
@@ -0,0 +1,40 @@
+/** SVC Defines
+ *
+ * Revision history:
+ *
+ * sudeepb 15-May-1991 Created
+ *
+ * williamh 25-Sept-1992 Added UMB support BOPs
+ */
+
+
+/* XMSSVC - XMS SVC calls.
+ *
+ * This macro is used by himem.sys
+ *
+ */
+
+/* ASM
+include bop.inc
+
+xmssvc macro func
+ BOP BOP_XMS
+ db func
+ endm
+*/
+
+#define XMS_A20 0x00
+#define XMS_MOVEBLOCK 0x01
+#define XMS_ALLOCBLOCK 0x02
+#define XMS_FREEBLOCK 0x03
+#define XMS_SYSPAGESIZE 0x04
+#define XMS_EXTMEM 0x05
+#define XMS_INITUMB 0x06
+#define XMS_REQUESTUMB 0x07
+#define XMS_RELEASEUMB 0x08
+#define XMS_NOTIFYHOOKI15 0x09
+#define XMS_QUERYEXTMEM 0x0a
+#define XMS_REALLOCBLOCK 0x0b
+#define XMS_LASTSVC 0x0c
+
+extern BOOL XMSInit (int argc, char *argv[]);