summaryrefslogtreecommitdiffstats
path: root/private/mvdm/wow32/wstruc.h
diff options
context:
space:
mode:
Diffstat (limited to 'private/mvdm/wow32/wstruc.h')
-rw-r--r--private/mvdm/wow32/wstruc.h313
1 files changed, 313 insertions, 0 deletions
diff --git a/private/mvdm/wow32/wstruc.h b/private/mvdm/wow32/wstruc.h
new file mode 100644
index 000000000..ed40e48bf
--- /dev/null
+++ b/private/mvdm/wow32/wstruc.h
@@ -0,0 +1,313 @@
+/*++ BUILD Version: 0001
+ *
+ * WOW v1.0
+ *
+ * Copyright (c) 1991, Microsoft Corporation
+ *
+ * WSTRUC.H
+ * WOW32 16-bit structure conversion support
+ *
+ * History:
+ * Created 27-Jan-1991 by Jeff Parsons (jeffpar)
+ * Added GDI macro definitions 6/13/91, ChandanC
+ * Added MDI structures 1/20/91, BobDay
+--*/
+#ifndef _DEF_WSTRUC_ // if this hasn't already been included
+#define _DEF_WSTRUC_
+
+/* Structure conversion macros
+ */
+#define PUTINT16(vp,i) WOW32ASSERT(!(LOW(vp)&1));\
+ *(PSHORT16)GetPModeVDMPointer(vp, sizeof(SHORT)) = (SHORT)i;
+
+#define PUTBOOL16(vp,b) WOW32ASSERT(!(LOW(vp)&1));\
+ if (FETCHDWORD(vp))\
+ *(PWORD16)GetPModeVDMPointer(vp, sizeof(WORD)) = (WORD)b;
+#define STACKORHEAPALLOC(cBytesNeeded, cBytesAvail, lpStackBuffer) \
+ ((INT)(cBytesNeeded) > (INT)(cBytesAvail)) ? (PVOID)malloc_w(cBytesNeeded) : \
+ (PVOID)(lpStackBuffer)
+
+#define STACKORHEAPFREE(lpToFree, lpStackBuffer) \
+ if ((lpToFree) && (PVOID)(lpToFree) != (PVOID)(lpStackBuffer)) free_w(lpToFree)
+
+#define PUTINTARRAY16(vp,c,p) putintarray16(FETCHDWORD(vp), c, p)
+#define PUTINTARRAY16V(vp,c,p) putintarray16(vp, c, p)
+
+// GETDWORDARRAY16 is not analogous to any of the above.
+#define GETDWORDARRAY16(vp,c,p) {GETVDMPTR(vp, c*sizeof(DWORD), p);}
+#define FREEDWORDARRAY16(p) {if (p) FREEVDMPTR(p);}
+
+#define GETRECT16(vp,p) getrect16(FETCHDWORD(vp), p)
+#define PUTRECT16(vp,p) putrect16(FETCHDWORD(vp), p)
+
+// COPYPOINT16 is used by ClientToScreen because the point is passed
+// directly as an argument, instead of a pointer to the point.
+
+#define COPYPOINT16(Pt16,Pt) {Pt.x = Pt16.x; Pt.y = Pt16.y;}
+
+#define GETPOINT16(vp,p) getpoint16(FETCHDWORD(vp), 1, p)
+#define PUTPOINT16(vp,p) putpoint16(FETCHDWORD(vp), 1, p)
+
+
+//
+// Get/Put point array macros.
+//
+// These routines will use a static buffer if the number of points to
+// be thunked is small enough. This will break badly if a thunk uses
+// GETPOINTARRAY16 and then calls a function which calls back, since
+// during the callback we could call another function which uses the
+// same static buffer.
+//
+// As of 7-Jan-92 the only callers are in GDI, which doesn't call back,
+// so we're OK.
+//
+// GETPOINTARRAY16 sometimes allocates memory, so you must call
+// FREEPOINTARRAY16 once for every GETPOINTARRAY16.
+//
+
+#define PUTPOINTARRAY16(vp,c,p) putpoint16(FETCHDWORD(vp), c, p)
+
+#define FREEMSG16(vp,lp)
+
+#define GETWNDCLASS16(vp,lp) {\
+ WORD w;\
+ PWNDCLASS16 pwc16;\
+ GETVDMPTR(vp, sizeof(WNDCLASS16), pwc16);\
+ (lp)->style = FETCHWORD(pwc16->style);\
+ (lp)->lpfnWndProc = (WNDPROC)FETCHDWORD(pwc16->vpfnWndProc);\
+ (lp)->cbClsExtra = FETCHWORD(pwc16->cbClsExtra);\
+ (lp)->cbWndExtra = FETCHWORD(pwc16->cbWndExtra);\
+ w = FETCHWORD(pwc16->hInstance);\
+ if((w == gUser16hInstance) || (w == BOGUSGDT))\
+ (lp)->hInstance = ghInstanceUser32;\
+ else\
+ (lp)->hInstance = HMODINST32(FETCHWORD(pwc16->hInstance));\
+ (lp)->hIcon = HICON32_REGCLASS(FETCHWORD(pwc16->hIcon));\
+ (lp)->hCursor = HCURSOR32(FETCHWORD(pwc16->hCursor));\
+ w = FETCHWORD(pwc16->hbrBackground);\
+ if (w > COLOR_ENDCOLORS)\
+ (lp)->hbrBackground = HBRUSH32(w);\
+ else\
+ (lp)->hbrBackground = (HBRUSH)w;\
+ (lp)->lpszMenuName = (LPSTR)FETCHDWORD(pwc16->vpszMenuName);\
+ (lp)->lpszClassName = (LPSTR)FETCHDWORD(pwc16->vpszClassName);\
+ FREEVDMPTR(pwc16);\
+ }
+
+
+#define GETBITMAP16(vp, lp) {\
+ PBITMAP16 pbm16;\
+ GETVDMPTR(vp, sizeof(BITMAP16), pbm16);\
+ (lp)->bmType = FETCHSHORT(pbm16->bmType);\
+ (lp)->bmWidth = FETCHSHORT(pbm16->bmWidth);\
+ (lp)->bmHeight = FETCHSHORT(pbm16->bmHeight);\
+ (lp)->bmWidthBytes = FETCHSHORT(pbm16->bmWidthBytes);\
+ (lp)->bmPlanes = pbm16->bmPlanes;\
+ (lp)->bmBitsPixel = pbm16->bmBitsPixel;\
+ GETMISCPTR(pbm16->bmBits, (lp)->bmBits);\
+ FREEVDMPTR(pbm16);\
+ }
+
+
+#define PUTBITMAP16(vp,cb,lp) {\
+ PBITMAP16 pbm16;\
+ GETVDMPTR(vp, ((int)cb), pbm16);\
+ if (cb >= (FIELD_OFFSET(BITMAP16, bmType) + sizeof(pbm16->bmType)))\
+ STORESHORT(pbm16->bmType, (lp)->bmType);\
+ if (cb >= (FIELD_OFFSET(BITMAP16, bmWidth) + sizeof(pbm16->bmWidth)))\
+ STORESHORT(pbm16->bmWidth, (lp)->bmWidth);\
+ if (cb >= (FIELD_OFFSET(BITMAP16, bmHeight) + sizeof(pbm16->bmHeight)))\
+ STORESHORT(pbm16->bmHeight, (lp)->bmHeight);\
+ if (cb >= (FIELD_OFFSET(BITMAP16, bmWidthBytes) + sizeof(pbm16->bmWidthBytes)))\
+ STORESHORT(pbm16->bmWidthBytes, \
+ ((int)((((lp)->bmWidth * (lp)->bmBitsPixel + 15) / 16) * 2)));\
+ if (cb >= (FIELD_OFFSET(BITMAP16, bmPlanes) + sizeof(pbm16->bmPlanes)))\
+ pbm16->bmPlanes = (BYTE)(lp)->bmPlanes;\
+ if (cb >= (FIELD_OFFSET(BITMAP16, bmBitsPixel) + sizeof(pbm16->bmBitsPixel)))\
+ pbm16->bmBitsPixel = (BYTE)(lp)->bmBitsPixel;\
+ if (cb >= (FIELD_OFFSET(BITMAP16, bmBits) + sizeof(pbm16->bmBits)))\
+ pbm16->bmBits = (VPBYTE)NULL;\
+ FLUSHVDMPTR(vp, cb, pbm16);\
+ FREEVDMPTR(pbm16);\
+ }
+
+
+
+#define GETDCB16(vp,lp) // not implemented yet
+#define PUTDCB16(vp,lp) // not implemented yet
+#define PUTCOMSTAT16(vp,lp) // not implemented yet
+
+#define PUTSEGINFO16(vp,lp) // not implemented yet
+#define GETLOADPARMS16(vp,lp) // not implemented yet
+#define PUTOFSTRUCT16(vp,lp) // not implemented yet
+
+#define GETCATCHBUF16(vp,lp) // not implemented yet
+#define PUTCATCHBUF16(vp,lp) // not implemented yet
+
+
+#define GETLOGPEN16(vp, lp) {\
+ PLOGPEN16 plp16;\
+ GETVDMPTR(vp, sizeof(LOGPEN16), plp16);\
+ (lp)->lopnStyle = FETCHWORD(plp16->lopnStyle);\
+ (lp)->lopnWidth.x = FETCHSHORT(plp16->lopnWidth.x);\
+ (lp)->lopnColor = FETCHDWORD(plp16->lopnColor);\
+ FREEVDMPTR(plp16);\
+ }
+
+#define PUTLOGPEN16(vp,cb,lp) {\
+ PLOGPEN16 plp16;\
+ GETVDMPTR(vp, cb, plp16);\
+ if (cb >= 2)\
+ STOREWORD(plp16->lopnStyle, (lp)->lopnStyle);\
+ if (cb >= 4)\
+ STOREWORD(plp16->lopnWidth.x, (lp)->lopnWidth.x);\
+ if (cb >= 6)\
+ STOREWORD(plp16->lopnWidth.y, (lp)->lopnWidth.y);\
+ if (cb >= 10)\
+ STOREDWORD(plp16->lopnColor, (lp)->lopnColor);\
+ FLUSHVDMPTR(vp, cb, plp16);\
+ FREEVDMPTR(plp16);\
+ }
+
+
+#define GETLOGBRUSH16(vp,lp) {\
+ PLOGBRUSH16 plb16;\
+ WORD wStyle;\
+ GETVDMPTR(vp, sizeof(LOGBRUSH16), plb16);\
+ wStyle = FETCHWORD(plb16->lbStyle);\
+ (lp)->lbStyle = wStyle;\
+ (lp)->lbColor = FETCHDWORD(plb16->lbColor);\
+ if (wStyle == BS_PATTERN) { \
+ (lp)->lbHatch = (DWORD)HBITMAP32(FETCHWORD(plb16->lbHatch));\
+ } else { \
+ (lp)->lbHatch = FETCHWORD(plb16->lbHatch);\
+ } \
+ FREEVDMPTR(plb16);\
+ }
+#define PUTLOGBRUSH16(vp,cb,lp) {\
+ PLOGBRUSH16 plb16;\
+ GETVDMPTR(vp, cb, plb16);\
+ if (cb >= 2)\
+ STOREWORD(plb16->lbStyle, (lp)->lbStyle);\
+ if (cb >= 6)\
+ STOREDWORD(plb16->lbColor, (lp)->lbColor);\
+ if (cb >= 8){\
+ if( ((lp)->lbStyle == BS_PATTERN) || ((lp)->lbStyle == BS_DIBPATTERN)){\
+ STORESHORT(plb16->lbHatch, GETHBITMAP16((HAND32)(lp)->lbHatch));\
+ }\
+ else {\
+ STORESHORT(plb16->lbHatch, (lp)->lbHatch);\
+ }\
+ }\
+ FLUSHVDMPTR(vp, cb, plb16);\
+ FREEVDMPTR(plb16);\
+ }
+
+#define GETLOGFONT16(vp,p) getlogfont16(FETCHDWORD(vp), p)
+#define PUTLOGFONT16(vp,cb,p) putlogfont16(FETCHDWORD(vp), cb, p)
+#define PUTENUMLOGFONT16(vp,p) putenumlogfont16(FETCHDWORD(vp), p)
+
+#define PUTTEXTMETRIC16(vp,p) puttextmetric16(FETCHDWORD(vp), p)
+#define PUTNEWTEXTMETRIC16(vp,p) putnewtextmetric16(FETCHDWORD(vp), p)
+#define PUTOUTLINETEXTMETRIC16(vp,c,p) putoutlinetextmetric16(vp,c,p)
+
+#define GETLOGPALETTE16(vp,p) {\
+ INT cb;\
+ PLOGPALETTE16 plp16;\
+ GETVDMPTR(vp, sizeof(LOGPALETTE16), plp16);\
+ cb = FETCHWORD(plp16->palNumEntries);\
+ cb = sizeof(LOGPALETTE) + ((cb - 1) * sizeof(PALETTEENTRY));\
+ if( p=malloc_w(cb) )\
+ RtlCopyMemory(p,plp16,cb);\
+ FREEVDMPTR(plp16);\
+ }
+#define FREELOGPALETTE16(p) {if (p) free_w(p);}
+
+#define ALLOCPALETTEENTRY16(c,p) p=malloc_w(c*sizeof(PALETTEENTRY))
+#define GETPALETTEENTRY16(vp,c,p) getpaletteentry16(FETCHDWORD(vp), c, ALLOCPALETTEENTRY16(c, p))
+#define PUTPALETTEENTRY16(vp,c,p) putpaletteentry16(FETCHDWORD(vp), c, p)
+#define FREEPALETTEENTRY16(p) {if (p) free_w(p);}
+
+#define ALLOCHANDLETABLE16(c,p) p=malloc_w(c*sizeof(HANDLE))
+#define GETHANDLETABLE16(vp,c, p) gethandletable16(FETCHDWORD(vp), c, p)
+#define PUTHANDLETABLE16(vp,c, p) puthandletable16(FETCHDWORD(vp), c, p)
+#define FREEHANDLETABLE16(p) {if (p) free_w(p);}
+
+#define FREEDEVMODE32(p) {if (p) free_w(p);}
+
+#define GETCLIENTCREATESTRUCT16(vp,lp) { \
+ PCLIENTCREATESTRUCT16 pccs16;\
+ GETVDMPTR(vp, sizeof(CLIENTCREATESTRUCT16), pccs16);\
+ (lp)->hWindowMenu = HMENU32(FETCHWORD(pccs16->hWindowMenu));\
+ (lp)->idFirstChild = FETCHWORD(pccs16->idFirstChild);\
+ FREEVDMPTR(pccs16);\
+ }
+#define PUTCLIENTCREATESTRUCT16(vp,lp) { \
+ PCLIENTCREATESTRUCT16 pccs16;\
+ GETVDMPTR(vp, sizeof(CLIENTCREATESTRUCT16), pccs16);\
+ STOREWORD(pccs16->hWindowMenu, GETHMENU16((lp)->hWindowMenu));\
+ STOREWORD(pccs16->idFirstChild, (lp)->idFirstChild);\
+ }
+
+
+// following 2 for allocating a maximum sized BITMAPINFO structure from stack
+#define MAXDIBCOLORS 256 // for biBitCount == 8
+typedef struct _tagSTACKBMI32 {
+ BITMAPINFOHEADER bmiHeader;
+ RGBQUAD bmiColors[MAXDIBCOLORS];
+} STACKBMI32, *LPSTACKBMI32;
+
+
+/* Function prototypes
+ */
+VOID getstr16(VPSZ vpszSrc, LPSZ lpszDst, INT cb);
+VOID putstr16(VPSZ vpszDst, LPCSTR lpszSrc, INT cb);
+LPRECT getrect16(VPRECT16 vpRect, LPRECT lpRect);
+VOID putrect16(VPRECT16 vpRect, LPRECT lpRect);
+VOID getpoint16(VPPOINT16 vpPoint, INT c, LPPOINT lpPoint);
+VOID putpoint16(VPPOINT16 vpPoint, INT c, LPPOINT lpPoint);
+VOID getintarray16(VPINT16 vpInt, INT c, LPINT lpInt);
+VOID putintarray16(VPINT16 vpInt, INT c, LPINT lpInt);
+VOID getuintarray16(VPWORD vp, INT c, PUINT puint);
+VOID getdrawitem16(VPDRAWITEMSTRUCT16 vpDI16, LPDRAWITEMSTRUCT lpDI);
+VOID putdrawitem16(VPDRAWITEMSTRUCT16 vpDI16, LPDRAWITEMSTRUCT lpDI);
+VOID getmeasureitem16(VPMEASUREITEMSTRUCT16 vpMI16, LPMEASUREITEMSTRUCT lpMI, HWND16 hwnd16);
+VOID putmeasureitem16(VPMEASUREITEMSTRUCT16 vpMI16, LPMEASUREITEMSTRUCT lpMI);
+VOID getdeleteitem16(VPDELETEITEMSTRUCT16 vpDI16, LPDELETEITEMSTRUCT lpDI);
+VOID putdeleteitem16(VPDELETEITEMSTRUCT16 vpDI16, LPDELETEITEMSTRUCT lpDI);
+VOID getcompareitem16(VPCOMPAREITEMSTRUCT16 vpCI16, LPCOMPAREITEMSTRUCT lpCI);
+VOID putcompareitem16(VPCOMPAREITEMSTRUCT16 vpCI16, LPCOMPAREITEMSTRUCT lpCI);
+VOID getmsg16(VPMSG16 vpmsg16, LPMSG lpmsg, LPMSGPARAMEX lpmpex);
+ULONG putmsg16(VPMSG16 vpmsg16, LPMSG lpmsg);
+VOID getlogfont16(VPLOGFONT16 vplf, LPLOGFONT lplf);
+VOID putlogfont16(VPLOGFONT16 vplf, INT cb, LPLOGFONT lplf);
+VOID putenumlogfont16(VPENUMLOGFONT16 vpelf, LPENUMLOGFONT lpelf);
+VOID puttextmetric16(VPTEXTMETRIC16 vptm, LPTEXTMETRIC lptm);
+VOID putnewtextmetric16(VPNEWTEXTMETRIC16 vpntm, LPNEWTEXTMETRIC lpntm);
+VOID putoutlinetextmetric16(VPOUTLINETEXTMETRIC16 vpotm, INT cb, LPOUTLINETEXTMETRIC lpotm);
+VOID getlogpalette16(VPLOGPALETTE16 vplp, LPLOGPALETTE lplp);
+VOID getpaletteentry16(VPPALETTEENTRY16 vppe, INT c, LPPALETTEENTRY lpp);
+VOID putpaletteentry16(VPPALETTEENTRY16 vppe, INT c, LPPALETTEENTRY lpp);
+VOID gethandletable16(VPWORD vpht, UINT c, LPHANDLETABLE lpht);
+VOID puthandletable16(VPWORD vpht, UINT c, LPHANDLETABLE lpht);
+VOID putkerningpairs16(VPWORD vp, UINT cb, LPKERNINGPAIR lp);
+
+#ifdef NOTUSED
+BOOL getdropfilestruct16(HAND16 hand16, PHANDLE phand32);
+#endif
+INT GetBMI16Size(PVPVOID vpbmi16, WORD fuColorUse, LPDWORD lpdwClrUsed);
+INT GetBMI32Size(LPBITMAPINFO lpbmi32, WORD fuColorUse);
+LPBITMAPINFO CopyBMI16ToBMI32(PVPVOID vpbmi16, LPBITMAPINFO lpbmi32, WORD fuColorUse);
+LPBITMAPINFOHEADER CopyBMIH16ToBMIH32(PVPVOID vpbmih16, LPBITMAPINFOHEADER lpbmih);
+
+
+VOID getwindowpos16( VPWINDOWPOS16 vpwp, LPWINDOWPOS lpwp );
+VOID putwindowpos16( VPWINDOWPOS16 vpwp, LPWINDOWPOS lpwp );
+VOID W32CopyMsgStruct(VPMSG16 vpmsg16, LPMSG lpmsg, BOOL fThunk16To32);
+VOID getpaintstruct16(VPVOID vp, LPPAINTSTRUCT lp);
+VOID putpaintstruct16(VPVOID vp, LPPAINTSTRUCT lp);
+
+LPDEVMODE ThunkDevMode16to32(VPDEVMODE31 vpdm16);
+BOOL ThunkDevMode32to16(VPDEVMODE31 vpdm16, LPDEVMODE lpdm32, UINT nBytes);
+
+#endif // ifndef _DEF_WSTRUC_ THIS SHOULD BE THE LAST LINE IN THIS FILE