/*++ * * WOW v1.0 * * Copyright (c) 1991, Microsoft Corporation * * WGTEXT.C * WOW32 16-bit GDI API support * * History: * Created 07-Mar-1991 by Jeff Parsons (jeffpar) * 10-Nov-1992 Modified GetTextMetrics to GetTextMetricsWOW by Chandan Chauhan --*/ #include "precomp.h" #pragma hdrstop MODNAME(wgtext.c); ULONG FASTCALL WG32ExtTextOut(PVDMFRAME pFrame) { ULONG ul; RECT t5; PSTR pstr6; PINT p8; register PEXTTEXTOUT16 parg16; INT BufferT[256]; GETARGPTR(pFrame, sizeof(EXTTEXTOUT16), parg16); GETRECT16(parg16->f5, &t5); GETSTRPTR(parg16->f6, parg16->f7, pstr6); if (DWORD32(parg16->f8)) { p8 = STACKORHEAPALLOC(parg16->f7 * sizeof(INT), sizeof(BufferT), BufferT); getintarray16((VPINT16)DWORD32(parg16->f8), parg16->f7, p8); // *this* INT array is optional } else { p8 = NULL; } ul = GETBOOL16(ExtTextOut( HDC32(parg16->f1), INT32(parg16->f2), INT32(parg16->f3), (WORD32(parg16->f4) & (ETO_CLIPPED|ETO_OPAQUE)), &t5, pstr6, WORD32(parg16->f7), (LPINT)p8 )); FREESTRPTR(pstr6); STACKORHEAPFREE(p8, BufferT); FREEARGPTR(parg16); RETURN(ul); } ULONG FASTCALL WG32GetTextExtent(PVDMFRAME pFrame) { ULONG ul = 0; PSTR pstr2; SIZE size4; register PGETTEXTEXTENT16 parg16; GETARGPTR(pFrame, sizeof(GETTEXTEXTENT16), parg16); GETSTRPTR(parg16->f2, parg16->f3, pstr2); if (GETDWORD16(GetTextExtentPoint( HDC32(parg16->f1), pstr2, INT32(parg16->f3), &size4 ))) { // check if either cx or cy are bigger than SHRT_MAX == 7fff // but do it in ONE SINGLE check if ((size4.cx | size4.cy) & ~SHRT_MAX) { if (size4.cx > SHRT_MAX) ul = SHRT_MAX; else ul = (ULONG)size4.cx; if (size4.cy > SHRT_MAX) ul |= (SHRT_MAX << 16); else ul |= (ULONG)(size4.cy << 16); } else { ul = (ULONG)(size4.cx | (size4.cy << 16)); } } FREESTRPTR(pstr2); FREEARGPTR(parg16); RETURN(ul); } ULONG FASTCALL WG32GetTextMetrics(PVDMFRAME pFrame) { ULONG ul; TEXTMETRIC t2; register PGETTEXTMETRICS16 parg16; GETARGPTR(pFrame, sizeof(GETTEXTMETRICS16), parg16); ul = GETBOOL16(GetTextMetrics( HDC32(parg16->f1), &t2 )); #ifdef FE_SB // original source code should be fixed // If GetTextMetrics return value is FALSE, don't need set data to 16bit // TEXTMETRICS STRUCTURE. // kksuzuka #3759 BC++40J is not see return value and used TEXTMETRICS // data. 1994.11.16 V-HIDEKK if( ul ) #endif // FE_SB PUTTEXTMETRIC16(parg16->f2, &t2); FREEARGPTR(parg16); RETURN(ul); }