Advertisement
| 11.19.2008 at 09:11AM PST, ID: 23918576 | Points: 500 |
|
[x]
Attachment Details
|
||
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: |
BOOL APIENTRY OEMTextOut(SURFOBJ* pso, STROBJ* pstro, FONTOBJ* pfo, CLIPOBJ* pco, RECTL* prclExtra, RECTL* prclOpaque, BRUSHOBJ* pboFore, BRUSHOBJ* pboOpaque, POINTL* pptlOrg, MIX mix )
{
OEMDBG(DBG_VERBOSE, L"OEMTextOut entry.");
write_log( 3, _T("OEMTextOut"), _T(""));
ULONG ulTextSize ;
char* AnsiText ;
BOOL iRes = TRUE;
if (pso == NULL || pstro == NULL || pfo == NULL)
{
OEMDBG(DBG_VERBOSE, L"\tInvalid parameters.");
return FALSE;
}
PDEVOBJ ppdev = (PDEVOBJ)pso->dhpdev;
POEMPDEV pOemPDEV= (POEMPDEV)ppdev->pdevOEM;
DWORD dwResult = 0;
if (ppdev && pstro->pwszOrg != NULL)
{
//dwResult = ppdev->pDrvProcs->DrvWriteSpoolBuf(ppdev, (LPBYTE)"TextOut\r\n", 9);
AnsiText = (char*)EngAllocMem(FL_ZERO_MEMORY, pstro->cGlyphs + 1, DRIVER_ID);
if (AnsiText)
{
EngUnicodeToMultiByteN(AnsiText, stro->cGlyphs, &ulTextSize, pstro->pwszOrg, pstro->cGlyphs * sizeof(WCHAR));
DWORD dwBufOffset = OemPDEV->textProc.dwBufSize;
// Increase the buffer by the size of the current band
if (!bGrowTextBuffer(pOemPDEV, strlen(AnsiText) + 2))
{
write_log( 1, _T("OEMTextOut"), _T(""));
return E_FAIL;
}
CopyMemory((pOemPDEV->textProc.pBufStart + dwBufOffset), (LPBYTE)AnsiText, strlen(AnsiText));
CopyMemory((pOemPDEV->textProc.pBufStart + dwBufOffset + strlen(AnsiText)), (LPBYTE)"\r\n", 2);
write_log( 3, _T("OEMTextOut"), _T("%s"), pstro->pwszOrg);
EngFreeMem(AnsiText);
}
}
// Punt call back to UNIDRV.
return (pOemPDEV->m_pfnDrvTextOut)(pso, pstro, pfo, pco, prclExtra, prclOpaque, pboFore, pboOpaque, pptlOrg, mix);
}
|
Advertisement