Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

299 lines
5.3 KiB

/*++
Copyright (c) 1990-2003 Microsoft Corporation
Module Name:
page.c
Abstract:
This module has the code that implements job boundary states. The bulk of
the processing is in DrvStartPage and DrvSendPage.
Author:
15:30 on Thu 04 Apr 1991
Took skeletal code from RASDD
15-Nov-1993 Mon 19:39:03 updated
clean up / fixed / debugging information
[Environment:]
GDI Device Driver - Plotter.
[Notes:]
Revision History:
--*/
#include "precomp.h"
#pragma hdrstop
#define DBG_PLOTFILENAME DbgPage
#define DBG_STARTPAGE 0x00000001
#define DBG_SENDPAGE 0x00000002
#define DBG_STARTDOC 0x00000004
#define DBG_ENDDOC 0x00000008
DEFINE_DBGVAR(0);
BOOL
DrvStartPage(
SURFOBJ *pso
)
/*++
Routine Description:
Function called by NT GDI, to initiate a new page. This function gets
called first. Before any drawing functions get called for the page.
This function, should reset the page in the target device, so all
drawing starts on a clean page. This is also used to sync up our
internal representation of cached info, in order to send out the
correct data for the first drawing objects. Things like current position,
current color, etc.
Arguments:
pso - Pointer to the SURFOBJ which belong to this driver
Return Value:
TRUE if sucessful FALSE otherwise
Author:
15-Feb-1994 Tue 09:58:26 updated
Move PhysPosition and AnchorCorner to the SendPageHeader where the
commmand is sent.
30-Nov-1993 Tue 23:08:12 created
Revision History:
--*/
{
PPDEV pPDev;
if (!(pPDev = SURFOBJ_GETPDEV(pso))) {
PLOTERR(("DrvStartPage: invalid pPDev"));
return(FALSE);
}
//
// initialize some PDEV values for the current plotter state
// this will force the correct items to get selected in the
// target device, since these variables are set to undefined states.
//
pPDev->CurPenSelected = -1;
pPDev->LastDevROP = 0xFFFF;
pPDev->Rop3CopyBits = 0xCC;
pPDev->LastFillTypeIndex = 0xFFFF;
pPDev->LastLineType = PLOT_LT_UNDEFINED;
pPDev->DevBrushUniq = 0;
ResetDBCache(pPDev);
return(SendPageHeader(pPDev));
}
BOOL
DrvSendPage(
SURFOBJ *pso
)
/*++
Routine Description:
Called when the drawing has completed for the current page. We now
send out the necessary codes to image and output the page on the
target device.
Arguments:
pso - Pointer to the SURFOBJ which belong to this driver
Return Value:
TRUE if sucessful FALSE otherwise
Author:
30-Nov-1993 Tue 21:34:53 created
Revision History:
--*/
{
PPDEV pPDev;
//
// Since all the commands that rendered the page have already been
// sent to the target device, all that is left is to inform the
// target device to eject the page. With some devices this may cause
// all the drawing commands that were stored to be executed now.
//
if (!(pPDev = SURFOBJ_GETPDEV(pso))) {
PLOTERR(("DrvSendPage: invalid pPDev"));
return(FALSE);
}
if (pso->iType == STYPE_DEVICE) {
return(SendPageTrailer(pPDev));
} else {
PLOTRIP(("DrvSendPage: Invalid surface type %ld passed???",
(LONG)pso->iType));
return(FALSE);
}
}
BOOL
DrvStartDoc(
SURFOBJ *pso,
PWSTR pwDocName,
DWORD JobId
)
/*++
Routine Description:
This function is called once at the begining of a job. Not much processing
for the current driver.
Arguments:
pso - Pointer to the SURFOBJ which belong to this driver
pwDocName - Pointer to the document name to be started
JobID - Job's ID
Return Value:
BOOL
Author:
16-Nov-1993 Tue 01:55:15 updated
re-write
08-Feb-1994 Tue 13:51:59 updated
Move to StartPage for now
Revision History:
--*/
{
PPDEV pPDev;
if (!(pPDev = SURFOBJ_GETPDEV(pso))) {
PLOTERR(("DrvStartDoc: invalid pPDev"));
return(FALSE);
}
PLOTDBG(DBG_STARTDOC,("DrvStartDoc: DocName = %s", pwDocName));
return(TRUE);
}
BOOL
DrvEndDoc(
SURFOBJ *pso,
FLONG Flags
)
/*++
Routine Description:
This function get called to signify the end of a document. Currently
we don't do any processing here. However if there was any code that
should be executed only once at the end of a job, this would be the
place to put it.
Arguments:
pso - Pointer to the SURFOBJ for the device
Flags - if ED_ABORTDOC bit is set then the document has been aborted
Return Value:
BOOLLEAN to specified if function sucessful
Author:
30-Nov-1993 Tue 21:16:48 created
Revision History:
--*/
{
PPDEV pPDev;
if (!(pPDev = SURFOBJ_GETPDEV(pso))) {
PLOTERR(("DrvEndDoc: invalid pPDev"));
return(FALSE);
}
PLOTDBG(DBG_ENDDOC,("DrvEndDoc called with Flags = %08lx", Flags));
return(TRUE);
}