/********************************************************************** * WriteSpool (GDI.241) * WriteSpool16 (GDI32.@) * */ INT16 WINAPI WriteSpool16(HPJOB16 hJob, LPSTR lpData, INT16 cch) { int nRet = SP_ERROR; PPRINTJOB pPrintJob = NULL; TRACE("%04x %08lx %04x\n", hJob, (DWORD)lpData, cch); pPrintJob = FindPrintJobFromHandle(hJob); if (pPrintJob != NULL && pPrintJob->fd >= 0 && cch) { if (write(pPrintJob->fd, lpData, cch) != cch) nRet = SP_OUTOFDISK; else nRet = cch; #if 0 /* FIXME: We just cannot call 16 bit functions from here, since we * have acquired several locks (DC). And we do not really need to. */ if (pPrintJob->hDC == 0) { TRACE("hDC == 0 so no QueryAbort\n"); } else if (!(QueryAbort16(pPrintJob->hDC, (nRet == SP_OUTOFDISK) ? nRet : 0 ))) { CloseJob16(hJob); /* printing aborted */ nRet = SP_APPABORT; } #endif } return nRet; }
/************************************************************************ * PSDRV_EndDoc */ INT PSDRV_EndDoc( PSDRV_PDEVICE *physDev ) { INT ret = 1; if(!physDev->job.hJob) { FIXME("hJob == 0. Now what?\n"); return 0; } if(!physDev->job.OutOfPage) { WARN("Somebody forgot an EndPage\n"); PSDRV_EndPage( physDev ); } PSDRV_WriteFooter( physDev ); if( CloseJob16( physDev->job.hJob ) == SP_ERROR ) { WARN("CloseJob error\n"); ret = 0; } physDev->job.hJob = 0; HeapFree(GetProcessHeap(), 0, physDev->job.DocName); physDev->job.DocName = NULL; return ret; }