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.
 
 
 
 
 
 

587 lines
13 KiB

/*++ BUILD Version: 0003 // Increment this if a change has global effects
Copyright (c) 1990-2003 Microsoft Corporation
Module Name:
plotlib.h
Abstract:
This module contains defines and prototype for the plotter library
Author:
15-Nov-1993 Mon 22:52:46 created
29-Dec-1993 Wed 11:00:56 updated
Change PLOTDBGBLK() macro by adding automatical semi in macro
[Environment:]
GDI Device Driver - Plotter.
[Notes:]
Revision History:
--*/
#ifndef _PLOTLIB_
#define _PLOTLIB_
#include <plotdm.h>
#include <plotgpc.h>
#define _WCPYSTR(pd,ps,n) wcsncpy((LPWSTR)(pd),(LPWSTR)(ps),(n)); \
*(((LPWSTR)(pd))+(n)-1)=L'\0'
#define WCPYFIELDNAME(pField,ps) _WCPYSTR((pField),(ps),COUNT_ARRAY(pField))
#define SWAP(a,b,t) { (t)=(a); (a)=(b); (b)=(t); }
#define CCHOF(x) (sizeof(x)/sizeof(*(x)))
// Some other convinence defines
#define DM_PAPER_FIELDS (DM_PAPERWIDTH | DM_PAPERLENGTH | \
DM_PAPERSIZE | DM_FORMNAME)
#define DM_PAPER_WL (DM_PAPERWIDTH | DM_PAPERLENGTH)
//
// new ddi stuff
//
#if defined(UMODE) || defined(USERMODE_DRIVER)
#pragma message("*** MSPLOT: Compile in USER Mode ***")
#define xEnumForms EnumForms
#define xGetPrinter GetPrinter
#define xGetPrinterData GetPrinterData
#define xSetPrinterData SetPrinterData
#define xGetLastError GetLastError
#define AnsiToUniCode(pb,pw,cch) \
MultiByteToWideChar(CP_ACP,0,(pb),(cch),(pw),(cch))
#define UniCodeToAnsi(pb,pw,cch) \
WideCharToMultiByte(CP_ACP,0,(pw),(cch),(pb),(cch),NULL,NULL)
#else
#pragma message("*** MSPLOT: Compile in KERNEL Mode ***")
#define WritePrinter EngWritePrinter
#define SetLastError EngSetLastError
#define GetLastError EngGetLastError
#define MulDiv EngMulDiv
#define xEnumForms EngEnumForms
#define xGetPrinter EngGetPrinter
#define xGetPrinterData EngGetPrinterData
#define xSetPrinterData EngSetPrinterData
#define xGetLastError EngGetLastError
#define AnsiToUniCode(pb,pw,cch) \
EngMultiByteToUnicodeN((pw),(cch)*sizeof(WCHAR),NULL,(pb),(cch))
#define UniCodeToAnsi(pb,pw,cch) \
EngUnicodeToMultiByteN((pb),(cch),NULL,(pw),(cch)*sizeof(WCHAR))
#define LocalAlloc(fl,c) \
EngAllocMem(((fl) & LMEM_ZEROINIT) ? FL_ZERO_MEMORY:0,c,'tolp')
#define LocalFree(p) EngFreeMem((PVOID)p)
#define DebugBreak() EngDebugBreak()
#endif // UMODE
//===========================================================================
// cacheGPC.c
//===========================================================================
BOOL
InitCachedData(
VOID
);
VOID
DestroyCachedData(
VOID
);
BOOL
UnGetCachedPlotGPC(
PPLOTGPC pPlotGPC
);
PPLOTGPC
GetCachedPlotGPC(
LPWSTR pwDataFile
);
#ifdef UMODE
PPLOTGPC
hPrinterToPlotGPC(
HANDLE hPrinter,
LPWSTR pwDeviceName,
size_t cchDeviceName
);
#endif
//===========================================================================
// drvinfo.c
//===========================================================================
#ifdef UMODE
LPBYTE
GetDriverInfo(
HANDLE hPrinter,
UINT DrvInfoLevel
);
#endif
//===========================================================================
// RegData.c
//===========================================================================
#define PRKI_FIRST PRKI_CI
#define PRKI_CI 0
#define PRKI_DEVPELSDPI 1
#define PRKI_HTPATSIZE 2
#define PRKI_FORM 3
#define PRKI_PPDATA 4
#define PRKI_PENDATA_IDX 5
#define PRKI_PENDATA1 6
#define PRKI_PENDATA2 7
#define PRKI_PENDATA3 8
#define PRKI_PENDATA4 9
#define PRKI_PENDATA5 10
#define PRKI_PENDATA6 11
#define PRKI_PENDATA7 12
#define PRKI_PENDATA8 13
#define PRKI_LAST PRKI_PENDATA8
#define PRK_MAX_PENDATA_SET (PRKI_LAST - PRKI_PENDATA1 + 1)
BOOL
GetPlotRegData(
HANDLE hPrinter,
LPBYTE pData,
DWORD RegIdx
);
BOOL
UpdateFromRegistry(
HANDLE hPrinter,
PCOLORINFO pColorInfo,
LPDWORD pDevPelsDPI,
LPDWORD pHTPatSize,
PPAPERINFO pCurPaper,
PPPDATA pPPData,
LPBYTE pIdxPlotData,
DWORD cPenData,
PPENDATA pPenData
);
#ifdef UMODE
BOOL
SetPlotRegData(
HANDLE hPrinter,
LPBYTE pData,
DWORD RegIdx
);
BOOL
SaveToRegistry(
HANDLE hPrinter,
PCOLORINFO pColorInfo,
LPDWORD pDevPelsDPI,
LPDWORD pHTPatSize,
PPAPERINFO pCurPaper,
PPPDATA pPPData,
LPBYTE pIdxPlotData,
DWORD cPenData,
PPENDATA pPenData
);
#endif
//===========================================================================
// Forms.c
//===========================================================================
#define FI1F_VALID_SIZE 0x80000000
#define FI1F_ENVELOPE 0x40000000
#define FI1F_MASK 0xc0000000
#define FI1F_ENUMFORMS_MASK 0x00000003
typedef struct _ENUMFORMPARAM {
PFORM_INFO_1 pFI1Base;
DWORD Count;
DWORD ValidCount;
DWORD cMaxOut;
PPLOTDEVMODE pPlotDM;
PPLOTGPC pPlotGPC;
PFORMSIZE pCurForm;
SHORT FoundIndex;
SHORT ReqIndex;
PFORM_INFO_1 pSizeFI1;
SIZEL ReqSize;
} ENUMFORMPARAM, FAR *PENUMFORMPARAM;
//
// The following fields in ENUMFORMPARAM must set to valid pointer before
// the PlotEnumForms() call
//
// 1. pPlotDM
// 2. pPlotGPC
// 3. pCurForm (can be NULL)
//
// if a callback function is supplied then only forms which not greater than
// the device size will be passed to the callback function, for form which
// smaller or equal to the device size will have FI1F_VALID_SIZE bit set in
// the FORM_INFO_1 data structure's flag
//
//
// Call back function for enum forms, if return value is
//
// (Ret < 0) --> Free pFI1Base pointer and stop enum
// (Ret = 0) --> Keep pFI1Base and Stop Enum
// (Ret > 0) --> Continue Enum until all Count is enumerated
//
// The last enum callback will have following parameters to give the callback
// function a chance to return -1 (free the pFormInfo1 data)
//
// pFI1 = NULL
// Index = pEnumFormParam->Count
//
typedef INT (CALLBACK *ENUMFORMPROC)(PFORM_INFO_1 pFI1,
DWORD Index,
PENUMFORMPARAM pEnumFormParam);
//
// If (EnumFormProc == NULL) then no enumeration will happened but just
// return the pFI1/Count in pEnumFormParam, if both EnumFormProc and
// pEnumFormParam == NULL then it return FALSE
//
BOOL
PlotEnumForms(
HANDLE hPrinter,
ENUMFORMPROC EnumFormProc,
PENUMFORMPARAM pEnumFormParam
);
//===========================================================================
// plotdm.c
//===========================================================================
BOOL
IsA4PaperDefault(
VOID
);
BOOL
IntersectRECTL(
PRECTL prclDest,
PRECTL prclSrc
);
#define RM_L90 0
#define RM_180 1
#define RM_R90 2
BOOL
RotatePaper(
PSIZEL pSize,
PRECTL pImageArea,
UINT RotateMode
);
SHORT
GetDefaultPaper(
PPAPERINFO pPaperInfo
);
VOID
GetDefaultPlotterForm(
PPLOTGPC pPlotGPC,
PPAPERINFO pPaperInfo
);
VOID
SetDefaultDMForm(
PPLOTDEVMODE pPlotDM,
PFORMSIZE pCurForm
);
VOID
SetDefaultPLOTDM(
HANDLE hPrinter,
PPLOTGPC pPlotGPC,
LPWSTR pwDeviceName,
PPLOTDEVMODE pPlotDM,
PFORMSIZE pCurForm
);
DWORD
ValidateSetPLOTDM(
HANDLE hPrinter,
PPLOTGPC pPlotGPC,
LPWSTR pwDeviceName,
PPLOTDEVMODE pPlotDMIn,
PPLOTDEVMODE pPlotDMOut,
PFORMSIZE pCurForm
);
//===========================================================================
// WideChar.c - Unicode/Ansi conversion support
//===========================================================================
LPWSTR
str2Wstr(
LPWSTR pwStr,
size_t cchDest,
LPSTR pbStr
);
LPWSTR
str2MemWstr(
LPSTR pStr
);
LPSTR
WStr2Str(
LPSTR pbStr,
size_t cchDest,
LPWSTR pwStr
);
//===========================================================================
// ReadGPC.c - PlotGPC reading/validating
//===========================================================================
BOOL
ValidateFormSrc(
PGPCVARSIZE pFormGPC,
SIZEL DeviceSize,
BOOL DevRollFeed
);
DWORD
PickDefaultHTPatSize(
WORD xDPI,
WORD yDPI,
BOOL HTFormat8BPP
);
BOOL
ValidatePlotGPC(
PPLOTGPC pPlotGPC
);
PPLOTGPC
ReadPlotGPCFromFile(
PWSTR pwsDataFile
);
//===========================================================================
// file.c - file open/read/close
//===========================================================================
#if defined(UMODE) || defined(USERMODE_DRIVER)
#define OpenPlotFile(pFileName) CreateFile((LPCTSTR)pFileName, \
GENERIC_READ, \
FILE_SHARE_READ, \
NULL, \
OPEN_EXISTING, \
FILE_ATTRIBUTE_NORMAL, \
NULL)
#define ClosePlotFile(h) CloseHandle(h)
#define ReadPlotFile(h,p,c,pc) ReadFile((h),(p),(c),(pc),NULL)
#else
typedef struct _PLOTFILE {
HANDLE hModule;
LPBYTE pbBeg;
LPBYTE pbEnd;
LPBYTE pbCur;
} PLOTFILE, *PPLOTFILE;
HANDLE
OpenPlotFile(
LPWSTR pFileName
);
BOOL
ClosePlotFile(
HANDLE hPlotFile
);
BOOL
ReadPlotFile(
HANDLE hPlotFile,
LPVOID pBuf,
DWORD cToRead,
LPDWORD pcRead
);
#endif
//===========================================================================
// Devmode.c and halftone.c
//===========================================================================
BOOL
ValidateColorAdj(
PCOLORADJUSTMENT pca
);
LONG
ConvertDevmode(
PDEVMODE pdmIn,
PDEVMODE pdmOut
);
#if defined(UMODE) || defined(USERMODE_DRIVER)
#include <winspool.h>
#include <commctrl.h>
#include <winddiui.h>
// Copy DEVMODE to an output buffer before return to the
// caller of DrvDocumentPropertySheets
BOOL
ConvertDevmodeOut(
PDEVMODE pdmSrc,
PDEVMODE pdmIn,
PDEVMODE pdmOut
);
typedef struct {
WORD dmDriverVersion; // current driver version
WORD dmDriverExtra; // size of current version private devmode
WORD dmDriverVersion351; // 3.51 driver version
WORD dmDriverExtra351; // size of 3.51 version private devmode
} DRIVER_VERSION_INFO, *PDRIVER_VERSION_INFO;
#define CDM_RESULT_FALSE 0
#define CDM_RESULT_TRUE 1
#define CDM_RESULT_NOT_HANDLED 2
INT
CommonDrvConvertDevmode(
PWSTR pPrinterName,
PDEVMODE pdmIn,
PDEVMODE pdmOut,
PLONG pcbNeeded,
DWORD fMode,
PDRIVER_VERSION_INFO pDriverVersions
);
#endif
//===========================================================================
// PlotDBG.c - debug output support
//===========================================================================
#if DBG
VOID
cdecl
PlotDbgPrint(
LPSTR pszFormat,
...
);
VOID
PlotDbgType(
INT Type
);
VOID
_PlotAssert(
LPSTR pMsg,
LPSTR pFalseExp,
LPSTR pFilename,
UINT LineNo,
DWORD_PTR Exp,
BOOL Stop
);
extern BOOL DoPlotWarn;
#define DBGP(x) (PlotDbgPrint x)
#if 1
#define DEFINE_DBGVAR(x) DWORD DBG_PLOTFILENAME=(x)
#define PLOTDBG(x,y) if (x&DBG_PLOTFILENAME){PlotDbgType(0);DBGP(y);}
#else
#define DEFINE_DBGVAR(x)
#define PLOTDBG(x,y) DBGP(y)
#endif // DBG_PLOTFILENAME
#define PLOTDBGBLK(x) x;
#define PLOTWARN(x) if (DoPlotWarn) { PlotDbgType(1);DBGP(x); }
#define PLOTERR(x) PlotDbgType(-1);DBGP(x)
#define PLOTRIP(x) PLOTERR(x); DebugBreak()
#define PLOTASSERT(b,x,e,i) \
if (!(e)) { _PlotAssert(x,#e,__FILE__,(UINT)__LINE__,(DWORD_PTR)i,b); }
#else // DBG
#define PLOTDBGBLK(x)
#define DEFINE_DBGVAR(x)
#define PLOTDBG(x,y)
#define PLOTWARN(x)
#define PLOTERR(x)
#define PLOTRIP(x)
#define PLOTASSERT(b,x,e,i)
#endif // DBG
#endif // _PLOTLIB_