diff options
Diffstat (limited to 'private/mvdm/wow32/wstruc.h')
-rw-r--r-- | private/mvdm/wow32/wstruc.h | 313 |
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 |