/*++ Copyright (c) 2000 Microsoft Corporation Module Name: xloutput.cpp Abstract: PCL-XL low level command output implementation Environment: Windows Whistler Revision History: 08/23/99 Created it. --*/ #include "lib.h" #include "gpd.h" #include "winres.h" #include "pdev.h" #include "common.h" #include "xlpdev.h" #include "pclxle.h" #include "pclxlcmd.h" #include "xldebug.h" #include "xlgstate.h" #include "xloutput.h" // // XLWrite // XLWrite:: XLWrite(VOID) /*++ Routine Description: Arguments: Return Value: Note: --*/ { #if DBG SetDbgLevel(OUTPUTDBG); #endif XL_VERBOSE(("XLWrite:Ctor.\n")); m_pCurrentPoint = m_pBuffer = (PBYTE)MemAlloc(XLWrite_INITSIZE); if (NULL == m_pBuffer) { XL_ERR(("XLWrite:Ctor: failed to allocate memory.\n")); m_dwBufferSize = 0; m_dwCurrentDataSize = 0; } else { m_dwBufferSize = XLWrite_INITSIZE; m_dwCurrentDataSize = 0; } } XLWrite:: ~XLWrite(VOID) /*++ Routine Description: Arguments: Return Value: Note: --*/ { XL_VERBOSE(("XLWrite:Dtor.\n")); if (m_pBuffer) MemFree(m_pBuffer); } HRESULT XLWrite:: IncreaseBuffer( DWORD dwAdditionalDataSize) /*++ Routine Description: Arguments: Return Value: Note: --*/ { PBYTE pTemp; DWORD dwNewBufferSize; dwNewBufferSize = m_dwBufferSize + XLWrite_ADDSIZE; dwAdditionalDataSize += m_dwBufferSize; while (dwAdditionalDataSize > dwNewBufferSize) dwNewBufferSize += XLWrite_ADDSIZE; if (!(pTemp = (PBYTE)MemAlloc(dwNewBufferSize))) { XL_ERR(("XLWrite::IncreaseBuffer: Memory allocation failed\n")); return E_UNEXPECTED; } if (m_pBuffer) { if (m_dwCurrentDataSize > 0) { CopyMemory(pTemp, m_pBuffer, m_dwCurrentDataSize); } MemFree(m_pBuffer); } m_dwBufferSize = dwNewBufferSize; m_pCurrentPoint = pTemp + m_dwCurrentDataSize; m_pBuffer = pTemp; return S_OK; } inline HRESULT XLWrite:: Write( PBYTE pData, DWORD dwSize) /*++ Routine Description: Arguments: Return Value: Note: --*/ { if (m_dwBufferSize < m_dwCurrentDataSize + dwSize) { if (S_OK != IncreaseBuffer(dwSize)) { XL_ERR(("XLWrite::Write: failed to increae memory\n")); return E_UNEXPECTED; } } if (NULL == m_pBuffer || NULL == pData) { XL_ERR(("XLWrite:Write failed\n")); return E_UNEXPECTED; } CopyMemory(m_pCurrentPoint, pData, dwSize); m_pCurrentPoint += dwSize; m_dwCurrentDataSize += dwSize; return S_OK; } inline HRESULT XLWrite:: WriteByte( BYTE ubData) /*++ Routine Description: Arguments: Return Value: Note: --*/ { if (m_dwBufferSize < m_dwCurrentDataSize + 2 * sizeof(DWORD)) { // // 64 bit alignment // Increae quadword // if (S_OK != IncreaseBuffer(2 * sizeof(DWORD))) { XL_ERR(("XLWrite::WriteByte: failed to increae memory\n")); return E_UNEXPECTED; } } if (NULL == m_pBuffer) { XL_ERR(("XLWrite:WriteByte failed\n")); return E_UNEXPECTED; } *m_pCurrentPoint++ = ubData; m_dwCurrentDataSize ++; return S_OK; } inline HRESULT XLWrite:: WriteFloat( real32 real32_value) /*++ Routine Description: Arguments: Return Value: Note: --*/ { return Write((PBYTE)&real32_value, sizeof(real32_value)); } HRESULT XLWrite:: Flush( PDEVOBJ pdevobj) /*++ Routine Description: Arguments: Return Value: Note: --*/ { ASSERTMSG(m_pBuffer != NULL, ("XLWrite:m_pBuffer = NULL\n")); if (NULL == m_pBuffer || NULL == pdevobj) { return E_UNEXPECTED; } WriteSpoolBuf((PPDEV)pdevobj, m_pBuffer, m_dwCurrentDataSize); m_dwCurrentDataSize = 0; m_pCurrentPoint = m_pBuffer; return S_OK; } HRESULT XLWrite:: Delete( VOID) /*++ Routine Description: Arguments: Return Value: Note: --*/ { ASSERTMSG(m_pBuffer != NULL, ("XLWrite:m_pBuffer = NULL\n")); if (NULL == m_pBuffer) { return E_UNEXPECTED; } m_dwCurrentDataSize = 0; m_pCurrentPoint = m_pBuffer; return S_OK; } #if DBG VOID XLWrite:: SetDbgLevel( DWORD dwLevel) /*++ Routine Description: Arguments: Return Value: Note: --*/ { m_dbglevel = dwLevel; } #endif // // XLOutput // XLOutput:: XLOutput(VOID): /*++ Routine Description: Arguments: Return Value: Note: --*/ #if DBG m_dwNumber(0), #endif m_dwHatchBrushAvailability(0) { #if DBG SetOutputDbgLevel(OUTPUTDBG); #endif } XLOutput:: ~XLOutput(VOID) /*++ Routine Description: Arguments: Return Value: Note: --*/ { } #if DBG VOID XLOutput:: SetOutputDbgLevel( DWORD dwLevel) /*++ Routine Description: Arguments: Return Value: Note: --*/ { this->m_dbglevel = dwLevel; XLWrite *pXLWrite = this; pXLWrite->SetDbgLevel(dwLevel); } VOID XLOutput:: SetGStateDbgLevel( DWORD dwLevel) /*++ Routine Description: Arguments: Return Value: Note: --*/ { XLGState *pGState = this; pGState->SetAllDbgLevel(dwLevel); } #endif // // Misc. functions // VOID XLOutput:: SetHatchBrushAvailability( DWORD dwHatchBrushAvailability) /*++ Routine Description: Arguments: Return Value: Note: --*/ { m_dwHatchBrushAvailability = dwHatchBrushAvailability; } DWORD XLOutput:: GetHatchBrushAvailability( VOID) /*++ Routine Description: Arguments: Return Value: Note: --*/ { return m_dwHatchBrushAvailability; } HRESULT XLOutput:: SetDeviceColorDepth( ColorDepth DeviceColorDepth) /*++ Routine Description: Arguments: Return Value: Note: --*/ { m_DeviceColorDepth = DeviceColorDepth; return S_OK; } ColorDepth XLOutput:: GetDeviceColorDepth( VOID) /*++ Routine Description: Arguments: Return Value: Note: --*/ { return m_DeviceColorDepth; } DWORD XLOutput:: GetResolutionForBrush( VOID) /*++ Routine Description: Arguments: Return Value: Note: --*/ { return m_dwResolution; } VOID XLOutput:: SetResolutionForBrush( DWORD dwRes) /*++ Routine Description: Arguments: Return Value: Note: --*/ { m_dwResolution = dwRes; } HRESULT XLOutput:: SetCursorOffset( LONG lX, LONG lY) { m_lOffsetX = lX; m_lOffsetY = lY; return S_OK; } // // PCL-XL basic send functions // HRESULT XLOutput:: Send_cmd(XLCmd Cmd) /*++ Routine Description: Arguments: Return Value: Note: --*/ { XL_VERBOSE(("XLOutput:Send_cmd(%d).\n", m_dwNumber++)); WriteByte(Cmd); return S_OK; } HRESULT XLOutput:: Send_attr_ubyte( Attribute Attr) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_attr_ubyte); WriteByte(Attr); return S_OK; } HRESULT XLOutput:: Send_attr_uint16( Attribute Attr) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte((ubyte)PCLXL_attr_uint16); Send_uint16((uint16)Attr); return S_OK; } // // single // HRESULT XLOutput:: Send_ubyte( ubyte ubyte_data) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_ubyte); WriteByte(ubyte_data); return S_OK; } HRESULT XLOutput:: Send_uint16( uint16 uint16_data) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_uint16); Write((PBYTE)&uint16_data, sizeof(uint16)); return S_OK; } HRESULT XLOutput:: Send_uint32( uint32 uint32_data) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_uint32); Write((PBYTE)&uint32_data, sizeof(uint32)); return S_OK; } HRESULT XLOutput:: Send_sint16( sint16 sint16_data) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_sint16); Write((PBYTE)&sint16_data, sizeof(sint16)); return S_OK; } HRESULT XLOutput:: Send_sint32( sint32 sint32_data) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_sint32); Write((PBYTE)&sint32_data, sizeof(sint32)); return S_OK; } HRESULT XLOutput:: Send_real32( real32 real32_data) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_real32); WriteFloat(real32_data); return S_OK; } // // xy // HRESULT XLOutput:: Send_ubyte_xy( ubyte ubyte_x, ubyte ubyte_y) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_ubyte_xy); WriteByte(ubyte_x); WriteByte(ubyte_y); return S_OK; } HRESULT XLOutput:: Send_uint16_xy( uint16 uint16_x, uint16 uint16_y) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_uint16_xy); Write((PBYTE)&uint16_x, sizeof(uint16)); Write((PBYTE)&uint16_y, sizeof(uint16)); return S_OK; } HRESULT XLOutput:: Send_uint32_xy( uint32 uint32_x, uint32 uint32_y) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_uint32_xy); Write((PBYTE)&uint32_x, sizeof(uint32)); Write((PBYTE)&uint32_y, sizeof(uint32)); return S_OK; } HRESULT XLOutput:: Send_sint16_xy( sint16 sint16_x, sint16 sint16_y) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_sint16_xy); Write((PBYTE)&sint16_x, sizeof(sint16)); Write((PBYTE)&sint16_y, sizeof(sint16)); return S_OK; } HRESULT XLOutput:: Send_sint32_xy( sint32 sint32_x, sint32 sint32_y) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_sint32_xy); Write((PBYTE)&sint32_x, sizeof(sint32)); Write((PBYTE)&sint32_y, sizeof(sint32)); return S_OK; } HRESULT XLOutput:: Send_real32_xy( real32 real32_x, real32 real32_y) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_real32_xy); WriteFloat(real32_x); WriteFloat(real32_y); return S_OK; } // // box // HRESULT XLOutput:: Send_ubyte_box( ubyte ubyte_left, ubyte ubyte_top, ubyte ubyte_right, ubyte ubyte_bottom) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_ubyte_box); WriteByte(ubyte_left); WriteByte(ubyte_top); WriteByte(ubyte_right); WriteByte(ubyte_bottom); return S_OK; } HRESULT XLOutput:: Send_uint16_box( uint16 uint16_left, uint16 uint16_top, uint16 uint16_right, uint16 uint16_bottom) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_uint16_box); Write((PBYTE)&uint16_left, sizeof(uint16)); Write((PBYTE)&uint16_top, sizeof(uint16)); Write((PBYTE)&uint16_right, sizeof(uint16)); Write((PBYTE)&uint16_bottom, sizeof(uint16)); return S_OK; } HRESULT XLOutput:: Send_uint32_box( uint32 uint32_left, uint32 uint32_top, uint32 uint32_right, uint32 uint32_bottom) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_uint32_box); Write((PBYTE)&uint32_left, sizeof(uint32)); Write((PBYTE)&uint32_top, sizeof(uint32)); Write((PBYTE)&uint32_right, sizeof(uint32)); Write((PBYTE)&uint32_bottom, sizeof(uint32)); return S_OK; } HRESULT XLOutput:: Send_sint16_box( sint16 sint16_left, sint16 sint16_top, sint16 sint16_right, sint16 sint16_bottom) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_sint16_box); Write((PBYTE)&sint16_left, sizeof(sint16)); Write((PBYTE)&sint16_top, sizeof(sint16)); Write((PBYTE)&sint16_right, sizeof(sint16)); Write((PBYTE)&sint16_bottom, sizeof(sint16)); return S_OK; } HRESULT XLOutput:: Send_sint32_box( sint32 sint32_left, sint32 sint32_top, sint32 sint32_right, sint32 sint32_bottom) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_sint32_box); Write((PBYTE)&sint32_left, sizeof(sint32)); Write((PBYTE)&sint32_top, sizeof(sint32)); Write((PBYTE)&sint32_right, sizeof(sint32)); Write((PBYTE)&sint32_bottom, sizeof(sint32)); return S_OK; } HRESULT XLOutput:: Send_real32_box( real32 real32_left, real32 real32_top, real32 real32_right, real32 real32_bottom) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_real32_box); // // left // WriteFloat(real32_left); // // top // WriteFloat(real32_top); // // right // WriteFloat(real32_right); // // bottom // WriteFloat(real32_bottom); return S_OK; } // // array // HRESULT XLOutput:: Send_ubyte_array_header( DWORD dwArrayNum) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_ubyte_array); Send_uint16((uint16)dwArrayNum); return S_OK; } HRESULT XLOutput:: Send_uint16_array_header( DWORD dwArrayNum) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_uint16_array); Send_uint16((uint16)dwArrayNum); return S_OK; } HRESULT XLOutput:: Send_uint32_array_header( DWORD dwArrayNum) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_uint32_array); Send_uint16((uint16)dwArrayNum); return S_OK; } HRESULT XLOutput:: Send_sint16_array_header( DWORD dwArrayNum) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_sint16_array); Send_uint16((uint16)dwArrayNum); return S_OK; } HRESULT XLOutput:: Send_sint32_array_header( DWORD dwArrayNum) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_sint32_array); Send_uint16((uint16)dwArrayNum); return S_OK; } HRESULT XLOutput:: Send_real32_array_header( DWORD dwArrayNum) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_real32_array); Send_uint16((uint16)dwArrayNum); return S_OK; } // // Attributes // HRESULT XLOutput:: SetArcDirection( ArcDirection value) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_ubyte); WriteByte(value); WriteByte(PCLXL_attr_ubyte); WriteByte(PCLXL_ArcDirection); return S_OK; } HRESULT XLOutput:: SetCharSubModeArray( CharSubModeArray value) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_ubyte); WriteByte(value); WriteByte(PCLXL_attr_ubyte); WriteByte(PCLXL_CharSubModeArray); return S_OK; } HRESULT XLOutput:: SetClipMode( ClipMode value) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_ubyte); WriteByte(value); WriteByte(PCLXL_attr_ubyte); WriteByte(PCLXL_ClipMode); WriteByte(PCLXL_SetClipMode); return S_OK; } HRESULT XLOutput:: SetClipRegion( ClipRegion value) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_ubyte); WriteByte(value); WriteByte(PCLXL_attr_ubyte); WriteByte(PCLXL_ClipRegion); return S_OK; } HRESULT XLOutput:: SetColorDepth( ColorDepth value) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_ubyte); WriteByte(value); WriteByte(PCLXL_attr_ubyte); WriteByte(PCLXL_ColorDepth); return S_OK; } HRESULT XLOutput:: SetColorimetricColorSpace( ColorimetricColorSpace value) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_ubyte); WriteByte(value); WriteByte(PCLXL_attr_ubyte); WriteByte(PCLXL_ColorimetricColorSpace); return S_OK; } HRESULT XLOutput:: SetColorMapping( ColorMapping value) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_ubyte); WriteByte(value); WriteByte(PCLXL_attr_ubyte); WriteByte(PCLXL_ColorMapping); return S_OK; } HRESULT XLOutput:: SetColorSpace( ColorSpace value) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_ubyte); WriteByte(value); WriteByte(PCLXL_attr_ubyte); WriteByte(PCLXL_ColorSpace); return S_OK; } HRESULT XLOutput:: SetCompressMode( CompressMode value) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_ubyte); WriteByte(value); WriteByte(PCLXL_attr_ubyte); WriteByte(PCLXL_CompressMode); return S_OK; } HRESULT XLOutput:: SetDataOrg( DataOrg value) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_ubyte); WriteByte(value); WriteByte(PCLXL_attr_ubyte); WriteByte(PCLXL_DataOrg); return S_OK; } #if 0 HRESULT XLOutput:: SetDataSource( DataSource value) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_ubyte); WriteByte(value); WriteByte(PCLXL_attr_ubyte); WriteByte(PCLXL_DataSource); return S_OK; } #endif #if 0 HRESULT XLOutput:: SetDataType( DataType value) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_ubyte); WriteByte(value); WriteByte(PCLXL_attr_ubyte); WriteByte(PCLXL_DataType); return S_OK; } #endif #if 0 HRESULT XLOutput:: SetDitherMatrix( DitherMatrix value) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_ubyte); WriteByte(value); WriteByte(PCLXL_attr_ubyte); WriteByte(PCLXL_DitherMatrix); return S_OK; } #endif HRESULT XLOutput:: SetDuplexPageMode( DuplexPageMode value) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_ubyte); WriteByte(value); WriteByte(PCLXL_attr_ubyte); WriteByte(PCLXL_DuplexPageMode); return S_OK; } HRESULT XLOutput:: SetDuplexPageSide( DuplexPageSide value) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_ubyte); WriteByte(value); WriteByte(PCLXL_attr_ubyte); WriteByte(PCLXL_DuplexPageSide); return S_OK; } HRESULT XLOutput:: SetErrorReport( ErrorReport value) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_ubyte); WriteByte(PCLXL_attr_ubyte); WriteByte(PCLXL_ErrorReport); WriteByte(value); return S_OK; } HRESULT XLOutput:: SetLineCap( LineCap value) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_ubyte); WriteByte(value); WriteByte(PCLXL_attr_ubyte); WriteByte(PCLXL_LineCap); WriteByte(PCLXL_SetLineCap); return S_OK; } HRESULT XLOutput:: SetLineJoin( LineJoin value) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_ubyte); WriteByte(value); WriteByte(PCLXL_attr_ubyte); WriteByte(PCLXL_LineJoin); WriteByte(PCLXL_SetLineJoin); return S_OK; } HRESULT XLOutput:: SetMeasure( Measure value) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_ubyte); WriteByte(value); WriteByte(PCLXL_attr_ubyte); WriteByte(PCLXL_Measure); return S_OK; } HRESULT XLOutput:: SetMediaSize( MediaSize value) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_ubyte); WriteByte(value); WriteByte(PCLXL_attr_ubyte); WriteByte(PCLXL_MediaSize); return S_OK; } HRESULT XLOutput:: SetMediaSource( MediaSource value) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_ubyte); WriteByte(value); WriteByte(PCLXL_attr_ubyte); WriteByte(PCLXL_MediaSource); return S_OK; } HRESULT XLOutput:: SetMediaDestination( MediaDestination value) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_ubyte); WriteByte(value); WriteByte(PCLXL_attr_ubyte); WriteByte(PCLXL_MediaDestination); return S_OK; } HRESULT XLOutput:: SetOrientation( Orientation value) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_ubyte); WriteByte(value); WriteByte(PCLXL_attr_ubyte); WriteByte(PCLXL_Orientation); return S_OK; } HRESULT XLOutput:: SetPatternPersistence( PatternPersistence value) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_ubyte); WriteByte(value); WriteByte(PCLXL_attr_ubyte); WriteByte(PCLXL_PatternPersistence); return S_OK; } HRESULT XLOutput:: SetSimplexPageMode( SimplexPageMode value) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_ubyte); WriteByte(value); WriteByte(PCLXL_attr_ubyte); WriteByte(PCLXL_SimplexPageMode); return S_OK; } HRESULT XLOutput:: SetTxMode( TxMode value) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_ubyte); WriteByte(value); WriteByte(PCLXL_attr_ubyte); WriteByte(PCLXL_TxMode); return S_OK; } #if 0 HRESULT XLOutput:: SetWritingMode( WritingMode value) /*++ Routine Description: Arguments: Return Value: Note: --*/ { WriteByte(PCLXL_ubyte); WriteByte(value); WriteByte(PCLXL_attr_ubyte); WriteByte(PCLXL_WritingMode); return S_OK; } #endif // // Value set function // HRESULT XLOutput:: SetFillMode( FillMode value) /*++ Routine Description: Arguments: Return Value: Note: --*/ { Send_ubyte(value); Send_attr_ubyte(eFillMode); Send_cmd(eSetFillMode); return S_OK; } HRESULT XLOutput:: SetSourceWidth( uint16 srcwidth) /*++ Routine Description: Arguments: Return Value: Note: --*/ { if (S_OK == Send_uint16(srcwidth) && S_OK == Send_attr_ubyte(eSourceWidth) ) return S_OK; else return S_FALSE; } HRESULT XLOutput:: SetSourceHeight( uint16 srcheight) /*++ Routine Description: Arguments: Return Value: Note: --*/ { if (S_OK == Send_uint16(srcheight) && S_OK == Send_attr_ubyte(eSourceHeight) ) return S_OK; else return S_FALSE; } HRESULT XLOutput:: SetDestinationSize( uint16 dstwidth, uint16 dstheight) /*++ Routine Description: Arguments: Return Value: Note: --*/ { if (S_OK == Send_uint16_xy(dstwidth, dstheight) && S_OK == Send_attr_ubyte(eDestinationSize) ) return S_OK; else return S_FALSE; } HRESULT XLOutput:: SetBoundingBox( uint16 left, uint16 top, uint16 right, uint16 bottom) /*++ Routine Description: Arguments: Return Value: Note: --*/ { if (S_OK == Send_uint16_box(left, top, right, bottom) && S_OK == Send_attr_ubyte(eBoundingBox) ) return S_OK; else return S_FALSE; } HRESULT XLOutput:: SetBoundingBox( sint16 left, sint16 top, sint16 right, sint16 bottom) /*++ Routine Description: Arguments: Return Value: Note: --*/ { if (S_OK == Send_sint16_box(left, top, right, bottom) && S_OK == Send_attr_ubyte(eBoundingBox) ) return S_OK; else return S_FALSE; } HRESULT XLOutput:: SetROP3( ROP3 rop3) /*++ Routine Description: Arguments: Return Value: Note: --*/ { XLGState *pGState = this; if (S_OK == pGState->CheckROP3(rop3)) return S_OK; if (S_OK == Send_ubyte((ubyte)rop3) && S_OK == Send_attr_ubyte(eROP3) && S_OK == Send_cmd(eSetROP) && S_OK == pGState->SetROP3(rop3)) return S_OK; else return S_FALSE; } HRESULT XLOutput:: SetPatternDefineID( sint16 sint16_patternid) /*++ Routine Description: Arguments: Return Value: Note: --*/ { if (S_OK == Send_sint16(sint16_patternid) && S_OK == Send_attr_ubyte(ePatternDefineID)) return S_OK; else return S_FALSE; } HRESULT XLOutput:: SetPaletteDepth( ColorDepth value) /*++ Routine Description: Arguments: Return Value: Note: --*/ { if (S_OK == WriteByte(PCLXL_ubyte) && S_OK == WriteByte(value) && S_OK == WriteByte(PCLXL_attr_ubyte) && S_OK == WriteByte(PCLXL_PaletteDepth) ) return S_OK; else return S_FALSE; } HRESULT XLOutput:: SetPenWidth( uint16 uint16_penwidth) /*++ Routine Description: Arguments: Return Value: Note: --*/ { if (S_OK == Send_uint16(uint16_penwidth) && S_OK == Send_attr_ubyte(ePenWidth) && S_OK == Send_cmd(eSetPenWidth) ) return S_OK; else return S_FALSE; } HRESULT XLOutput:: SetMiterLimit( uint16 uint16_miter) /*++ Routine Description: Arguments: Return Value: Note: --*/ { if (S_OK == Send_uint16(uint16_miter) && S_OK == Send_attr_ubyte(eMiterLength) && S_OK == Send_cmd(eSetMiterLimit)) return S_OK; else return S_FALSE; } HRESULT XLOutput:: SetPageOrigin( uint16 uint16_x, uint16 uint16_y) /*++ Routine Description: Arguments: Return Value: Note: --*/ { if (S_OK == Send_uint16_xy(uint16_x, uint16_y) && S_OK == Send_attr_ubyte(ePageOrigin) && S_OK == Send_cmd(eSetPageOrigin)) return S_OK; else return S_FALSE; } HRESULT XLOutput:: SetPageAngle( sint16 sint16_Angle) /*++ Routine Description: Arguments: Return Value: Note: --*/ { if (S_OK == Send_sint16(sint16_Angle) && S_OK == Send_attr_ubyte(ePageAngle) && S_OK == Send_cmd(eSetPageRotation)) return S_OK; else return S_FALSE; } HRESULT XLOutput:: SetPageScale( real32 real32_x, real32 real32_y) /*++ Routine Description: Arguments: Return Value: Note: --*/ { if (S_OK == Send_real32_xy(real32_x, real32_y) && S_OK == Send_attr_ubyte(ePageScale) && S_OK == Send_cmd(eSetPageScale)) return S_OK; else return S_FALSE; }