2025-04-27 07:49:33 -04:00

242 lines
6.1 KiB
C

/*++
Copyright (c) 1996-1999 Microsoft Corporation
Module Name:
cmdcb.c
Abstract:
Implementation of GPD command callback for "test.gpd":
OEMCommandCallback
Environment:
Windows NT Unidrv driver
Revision History:
04/07/97 -zhanw-
Created it.
--*/
#include "pdev.h"
#define PARAM(p,n) \
(*((p)+(n)))
//////////////////////////////////////////////////////////////////////////
// Function: BInitOEMExtraData
//
// Description: Initializes OEM Extra data.
//
//
// Parameters:
//
// pOEMExtra Pointer to a OEM Extra data.
//
// dwSize Size of OEM extra data.
//
//
// Returns: TRUE if successful; FALSE otherwise.
//
//
// Comments:
//
//
// History:
// 02/11/97 APresley Created.
//
//////////////////////////////////////////////////////////////////////////
BOOL BInitOEMExtraData(POEM_EXTRADATA pOEMExtra)
{
// Initialize OEM Extra data.
pOEMExtra->dmExtraHdr.dwSize = sizeof(OEM_EXTRADATA);
pOEMExtra->dmExtraHdr.dwSignature = OEM_SIGNATURE;
pOEMExtra->dmExtraHdr.dwVersion = OEM_VERSION;
// Private Extention
pOEMExtra->iOrientation = 0;
pOEMExtra->iPaperSource = 5;
return TRUE;
}
//////////////////////////////////////////////////////////////////////////
// Function: BMergeOEMExtraData
//
// Description: Validates and merges OEM Extra data.
//
//
// Parameters:
//
// pdmIn pointer to an input OEM private devmode containing the settings
// to be validated and merged. Its size is current.
//
// pdmOut pointer to the output OEM private devmode containing the
// default settings.
//
//
// Returns: TRUE if valid; FALSE otherwise.
//
//
// Comments:
//
//
// History:
// 02/11/97 APresley Created.
// 04/08/97 ZhanW Modified the interface
//
//////////////////////////////////////////////////////////////////////////
BOOL BMergeOEMExtraData(
POEM_EXTRADATA pdmIn,
POEM_EXTRADATA pdmOut
)
{
if(pdmIn) {
//
// copy over the private fields, if they are valid
//
pdmOut->iOrientation = pdmIn->iOrientation;
pdmOut->iPaperSource = pdmIn->iPaperSource;
}
return TRUE;
}
VOID
SelectPaperSize(
PDEVOBJ pdevobj,
INT iPaperSize
)
{
POEM_EXTRADATA pOEM;
INT iLength;
BYTE jBuffer[128];
pOEM = (POEM_EXTRADATA)(pdevobj->pOEMDM);
// Select paper size("<SUB>ty[p0],[p1],[p2],[p3].")
// Set logical page length ("<SUB>fl[p0].").
// Set page margin ("<SUB>ms[p0]").
iLength = sprintf(jBuffer,
"\x1a" "ty%c,%d,%d,%d." "\x1a" "fls.\x1ams1.",
(pOEM->iOrientation ? 'l' : 'p'),
iPaperSize, // Size of data
iPaperSize, // Size on papar
(INT)pOEM->iPaperSource);
WRITESPOOLBUF(pdevobj, jBuffer, iLength);
// Select manual/APF ("<SUB>fs[p0]")
if (pOEM->iPaperSource == 1
|| pOEM->iPaperSource == 7)
{
iLength = sprintf(jBuffer,
"\x1a" "fs%c.",
(pOEM->iPaperSource == 7) ? 'l' : '0');
WRITESPOOLBUF(pdevobj, jBuffer, iLength);
}
}
/*****************************************************************************/
/* */
/* INT APIENTRY OEMCommandCallback( */
/* PDEVOBJ pdevobj */
/* DWORD dwCmdCbId */
/* DWORD dwCount */
/* PDWORD pdwParams */
/* */
/*****************************************************************************/
INT APIENTRY
OEMCommandCallback(
PDEVOBJ pdevobj, // Points to private data required by the Unidriver.dll
DWORD dwCmdCbId, // Callback ID
DWORD dwCount, // Counts of command parameter
PDWORD pdwParams) // points to values of command params
{
POEM_EXTRADATA pOEM;
INT iRet;
pOEM = (POEM_EXTRADATA)(pdevobj->pOEMDM);
iRet = 0;
switch(dwCmdCbId)
{
case CMD_ORIENTATION_PORT:
pOEM->iOrientation = 0;
break;
case CMD_ORIENTATION_LAND:
pOEM->iOrientation = 1;
break;
case CMD_PAPERSOURCE_CASETTE_1:
pOEM->iPaperSource = 0;
break;
case CMD_PAPERSOURCE_MANUAL:
pOEM->iPaperSource = 1;
break;
case CMD_PAPERSOURCE_CASETTE_2:
pOEM->iPaperSource = 2;
break;
case CMD_PAPERSOURCE_CASETTE_3:
pOEM->iPaperSource = 3;
break;
case CMD_PAPERSOURCE_AUTO_SEL:
pOEM->iPaperSource = 5;
break;
case CMD_PAPERSOURCE_FRONT_TRAY:
pOEM->iPaperSource = 6;
break;
case CMD_PAPERSOURCE_APF:
pOEM->iPaperSource = 7;
break;
case CMD_PAPERSIZE_A3:
SelectPaperSize(pdevobj, 9);
break;
case CMD_PAPERSIZE_A4:
SelectPaperSize(pdevobj, 7);
break;
case CMD_PAPERSIZE_A5:
SelectPaperSize(pdevobj, 5);
break;
case CMD_PAPERSIZE_B4:
SelectPaperSize(pdevobj, 8);
break;
case CMD_PAPERSIZE_B5:
SelectPaperSize(pdevobj, 6);
break;
case CMD_PAPERSIZE_B6:
SelectPaperSize(pdevobj, 4);
break;
case CMD_PAPERSIZE_PC:
SelectPaperSize(pdevobj, 10);
break;
case CMD_PAPERSIZE_LT:
SelectPaperSize(pdevobj, 11);
break;
case CMD_PAPERSIZE_LG:
SelectPaperSize(pdevobj, 12);
break;
case CMD_PAPERSIZE_DBLPC:
SelectPaperSize(pdevobj, 25);
break;
case CMD_PAPERSIZE_JENV_CHO3:
SelectPaperSize(pdevobj, 26);
break;
case CMD_PAPERSIZE_JENV_CHO4:
SelectPaperSize(pdevobj, 27);
break;
}
return iRet;
}