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

295 lines
11 KiB
C

/*++
Copyright (c) 1996-2000 Microsoft Corporation & RICOH Co., Ltd. All rights reserved.
FILE: RIAFRES.C
Abstract: Main file for OEM rendering plugin module.
Functions: OEMCommandCallback
Environment: Windows NT Unidrv5 driver
Revision History:
02/25/2000 -Masatoshi Kubokura-
Created it.
06/07/2000 -Masatoshi Kubokura-
V.1.11
08/02/2000 -Masatoshi Kubokura-
V.1.11 for NT4
10/17/2000 -Masatoshi Kubokura-
Last modified.
--*/
#include "pdev.h"
//
// Misc definitions and declarations.
//
#ifndef WINNT_40
#define sprintf wsprintfA
#define strcmp lstrcmpA
#define strlen lstrlenA // @Aug/01/2000
#endif // WINNT_40
// external prototypes
extern BOOL RWFileData(PFILEDATA pFileData, LPWSTR pwszFileName, LONG type);
// command definition
static BYTE PJL_PROOFJOB[] = "@PJL PROOFJOB\n";
static BYTE PJL_SECUREJOB[] = "@PJL SECUREJOB\n"; // Aficio AP3200 and later (GW model)
static BYTE PJL_DISKIMAGE_OFF[] = "@PJL SET DISKIMAGE=OFF\n";
static BYTE PJL_DISKIMAGE_PORT[] = "@PJL SET DISKIMAGE=PORTRAIT\n";
static BYTE PJL_DISKIMAGE_LAND[] = "@PJL SET DISKIMAGE=LANDSCAPE\n";
static BYTE PJL_ORIENT_PORT[] = "@PJL SET ORIENTATION=PORTRAIT\n";
static BYTE PJL_ORIENT_LAND[] = "@PJL SET ORIENTATION=LANDSCAPE\n";
static BYTE PJL_JOBPASSWORD[] = "@PJL SET JOBPASSWORD=%s\n";
static BYTE PJL_USERID[] = "@PJL SET USERID=\x22%s\x22\n";
static BYTE PJL_USERCODE[] = "@PJL SET USERCODE=\x22%s\x22\n";
static BYTE PJL_TIME_DATE[] = "@PJL SET TIME=\x22%02d:%02d:%02d\x22\n@PJL SET DATE=\x22%04d/%02d/%02d\x22\n";
static BYTE PJL_STARTJOB_AUTOTRAYCHANGE_OFF[] = "\x1B%%-12345X@PJL JOB NAME=\x22%s\x22\n@PJL SET AUTOTRAYCHANGE=OFF\n";
static BYTE PJL_STARTJOB_AUTOTRAYCHANGE_ON[] = "\x1B%%-12345X@PJL JOB NAME=\x22%s\x22\n@PJL SET AUTOTRAYCHANGE=ON\n";
static BYTE PJL_ENDJOB[] = "\x1B%%-12345X@PJL EOJ NAME=\x22%s\x22\n\x1B%%-12345X";
static BYTE PJL_QTY_JOBOFFSET_OFF[] = "@PJL SET QTY=%d\n@PJL SET JOBOFFSET=OFF\n";
static BYTE PJL_QTY_JOBOFFSET_ROTATE[] = "@PJL SET QTY=%d\n@PJL SET JOBOFFSET=ROTATE\n";
static BYTE PJL_QTY_JOBOFFSET_SHIFT[] = "@PJL SET QTY=%d\n@PJL SET JOBOFFSET=SHIFT\n";
static BYTE P5_COPIES[] = "\x1B&l%dX";
static BYTE P6_ENDPAGE[] = "\xc1%c%c\xf8\x31\x44";
static BYTE P6_ENDSESSION[] = "\x49\x42";
INT APIENTRY OEMCommandCallback(
PDEVOBJ pdevobj,
DWORD dwCmdCbID,
DWORD dwCount,
PDWORD pdwParams)
{
INT ocmd;
BYTE Cmd[256];
#ifdef WINNT_40 // @Aug/01/2000
ENG_TIME_FIELDS st;
#else // !WINNT_40
SYSTEMTIME st;
#endif // !WINNT_40
FILEDATA FileData;
POEMUD_EXTRADATA pOEMExtra = MINIPRIVATE_DM(pdevobj);
POEMPDEV pOEM = MINIDEV_DATA(pdevobj);
DWORD dwCopy;
#if DBG
// You can see debug messages on debugger terminal. (debug mode boot)
giDebugLevel = DBG_VERBOSE;
// You can debug with MS Visual Studio. (normal mode boot)
// DebugBreak();
#endif // DBG
VERBOSE(("OEMCommandCallback() entry (%ld).\n", dwCmdCbID));
// verify pdevobj okay
ASSERT(VALID_PDEVOBJ(pdevobj));
// Check whether copy# is in the range. @Sep/07/2000
switch (dwCmdCbID)
{
case CMD_COLLATE_JOBOFFSET_OFF:
case CMD_COLLATE_JOBOFFSET_ROTATE:
case CMD_COLLATE_JOBOFFSET_SHIFT:
case CMD_COPIES_P5:
case CMD_ENDPAGE_P6:
if((dwCopy = *pdwParams) > 999L) // *pdwParams: NumOfCopies
dwCopy = 999L;
else if(dwCopy < 1L)
dwCopy = 1L;
break;
}
// Emit commands.
ocmd = 0;
switch (dwCmdCbID)
{
case CMD_STARTJOB_AUTOTRAYCHANGE_OFF: // Aficio AP3200 and later (GW model)
case CMD_STARTJOB_PORT_AUTOTRAYCHANGE_OFF: // Aficio 551,700,850,1050
case CMD_STARTJOB_LAND_AUTOTRAYCHANGE_OFF: // Aficio 551,700,850,1050
ocmd = sprintf(Cmd, PJL_STARTJOB_AUTOTRAYCHANGE_OFF, pOEM->JobName);
goto _EMIT_JOB_NAME;
case CMD_STARTJOB_AUTOTRAYCHANGE_ON: // Aficio AP3200 and later (GW model)
case CMD_STARTJOB_PORT_AUTOTRAYCHANGE_ON: // Aficio 551,700,850,1050
case CMD_STARTJOB_LAND_AUTOTRAYCHANGE_ON: // Aficio 551,700,850,1050
ocmd = sprintf(Cmd, PJL_STARTJOB_AUTOTRAYCHANGE_ON, pOEM->JobName);
_EMIT_JOB_NAME:
// Emit job name
VERBOSE((" Start Job=%s\n", Cmd));
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
ocmd = 0;
switch (pOEMExtra->JobType)
{
default:
case IDC_RADIO_JOB_NORMAL:
if (CMD_STARTJOB_PORT_AUTOTRAYCHANGE_OFF == dwCmdCbID ||
CMD_STARTJOB_PORT_AUTOTRAYCHANGE_ON == dwCmdCbID ||
CMD_STARTJOB_LAND_AUTOTRAYCHANGE_OFF == dwCmdCbID ||
CMD_STARTJOB_LAND_AUTOTRAYCHANGE_ON == dwCmdCbID)
{
ocmd = sprintf(Cmd, PJL_DISKIMAGE_OFF);
}
if (IDC_RADIO_LOG_ENABLED == pOEMExtra->LogDisabled)
goto _EMIT_USERID_USERCODE;
break;
case IDC_RADIO_JOB_SAMPLE:
ocmd = sprintf(Cmd, PJL_PROOFJOB);
if (CMD_STARTJOB_PORT_AUTOTRAYCHANGE_OFF == dwCmdCbID ||
CMD_STARTJOB_PORT_AUTOTRAYCHANGE_ON == dwCmdCbID ||
CMD_STARTJOB_LAND_AUTOTRAYCHANGE_OFF == dwCmdCbID ||
CMD_STARTJOB_LAND_AUTOTRAYCHANGE_ON == dwCmdCbID)
{
ocmd += sprintf(&Cmd[ocmd], PJL_DISKIMAGE_OFF);
}
goto _CHECK_PRINT_DONE;
case IDC_RADIO_JOB_SECURE:
switch (dwCmdCbID)
{
case CMD_STARTJOB_AUTOTRAYCHANGE_OFF: // Aficio AP3200 and later (GW model)
case CMD_STARTJOB_AUTOTRAYCHANGE_ON:
ocmd = sprintf(Cmd, PJL_SECUREJOB);
break;
case CMD_STARTJOB_PORT_AUTOTRAYCHANGE_OFF: // Aficio 551,700,850,1050
case CMD_STARTJOB_PORT_AUTOTRAYCHANGE_ON:
ocmd = sprintf(Cmd, PJL_DISKIMAGE_PORT);
break;
case CMD_STARTJOB_LAND_AUTOTRAYCHANGE_OFF: // Aficio 551,700,850,1050
case CMD_STARTJOB_LAND_AUTOTRAYCHANGE_ON:
ocmd = sprintf(Cmd, PJL_DISKIMAGE_LAND);
break;
}
ocmd += sprintf(&Cmd[ocmd], PJL_JOBPASSWORD, pOEMExtra->PasswordBuf);
_CHECK_PRINT_DONE:
// If previous print is finished and hold-options flag isn't valid,
// do not emit sample-print/secure-print command.
// This prevents unexpected job until user pushes Apply button on the
// Job/Log property sheet.
FileData.fUiOption = 0;
RWFileData(&FileData, pOEMExtra->SharedFileName, GENERIC_READ);
if (BITTEST32(FileData.fUiOption, PRINT_DONE) &&
!BITTEST32(pOEMExtra->fUiOption, HOLD_OPTIONS))
{
VERBOSE(("** Emit Nothing. **\n"));
ocmd = 0;
}
_EMIT_USERID_USERCODE:
if (1 <= strlen(pOEMExtra->UserIdBuf))
ocmd += sprintf(&Cmd[ocmd], PJL_USERID, pOEMExtra->UserIdBuf);
else
ocmd += sprintf(&Cmd[ocmd], PJL_USERID, "?");
if (1 <= strlen(pOEMExtra->UserCodeBuf))
ocmd += sprintf(&Cmd[ocmd], PJL_USERCODE, pOEMExtra->UserCodeBuf);
#ifdef WINNT_40 // @Aug/01/2000
EngQueryLocalTime(&st);
ocmd += sprintf(&Cmd[ocmd], PJL_TIME_DATE, st.usHour, st.usMinute, st.usSecond,
st.usYear, st.usMonth, st.usDay);
#else // !WINNT_40
GetLocalTime(&st);
ocmd += sprintf(&Cmd[ocmd], PJL_TIME_DATE, st.wHour, st.wMinute, st.wSecond,
st.wYear, st.wMonth, st.wDay);
#endif // !WINNT_40
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
break;
}
// Emit orientation (Aficio 551,700,850,1050)
switch (dwCmdCbID)
{
case CMD_STARTJOB_PORT_AUTOTRAYCHANGE_OFF:
case CMD_STARTJOB_PORT_AUTOTRAYCHANGE_ON:
WRITESPOOLBUF(pdevobj, PJL_ORIENT_PORT, sizeof(PJL_ORIENT_PORT)-1);
break;
case CMD_STARTJOB_LAND_AUTOTRAYCHANGE_OFF:
case CMD_STARTJOB_LAND_AUTOTRAYCHANGE_ON:
WRITESPOOLBUF(pdevobj, PJL_ORIENT_LAND, sizeof(PJL_ORIENT_LAND)-1);
break;
}
break;
case CMD_COLLATE_JOBOFFSET_OFF: // @Sep/08/2000
if (IDC_RADIO_JOB_SAMPLE != pOEMExtra->JobType) // if NOT Sample Print, QTY=1 is emitted here.
dwCopy = 1L;
ocmd = sprintf(Cmd, PJL_QTY_JOBOFFSET_OFF, dwCopy);
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
break;
case CMD_COLLATE_JOBOFFSET_ROTATE: // @Sep/07/2000
if (IDC_RADIO_JOB_SAMPLE == pOEMExtra->JobType) // if Sample Print
ocmd = sprintf(Cmd, PJL_QTY_JOBOFFSET_ROTATE, dwCopy); // QTY=n is emitted here.
else
ocmd = sprintf(Cmd, PJL_QTY_JOBOFFSET_OFF, 1); // QTY=1 is emitted here.
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
break;
case CMD_COLLATE_JOBOFFSET_SHIFT: // @Sep/07/2000
if (IDC_RADIO_JOB_SAMPLE == pOEMExtra->JobType) // if Sample Print
ocmd = sprintf(Cmd, PJL_QTY_JOBOFFSET_SHIFT, dwCopy); // QTY=n is emitted here.
else
ocmd = sprintf(Cmd, PJL_QTY_JOBOFFSET_OFF, 1); // QTY=1 is emitted here.
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
break;
case CMD_COPIES_P5: // @Sep/07/2000
if (IDC_RADIO_JOB_SAMPLE == pOEMExtra->JobType) // if Sample Print (QTY=n was emitted before.)
dwCopy = 1L;
ocmd = sprintf(Cmd, P5_COPIES, dwCopy);
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
break;
case CMD_ENDPAGE_P6: // @Sep/07/2000
if (IDC_RADIO_JOB_SAMPLE == pOEMExtra->JobType) // if Sample Print (QTY=n was emitted before.)
dwCopy = 1L;
ocmd = sprintf(Cmd, P6_ENDPAGE, (BYTE)dwCopy, (BYTE)(dwCopy >> 8));
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
break;
case CMD_ENDJOB_P6: // @Aug/23/2000
WRITESPOOLBUF(pdevobj, P6_ENDSESSION, sizeof(P6_ENDSESSION)-1);
// go through
case CMD_ENDJOB_P5:
ocmd = sprintf(Cmd, PJL_ENDJOB, pOEM->JobName);
VERBOSE((" End Job=%s\n", Cmd));
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
switch (pOEMExtra->JobType)
{
case IDC_RADIO_JOB_SAMPLE:
case IDC_RADIO_JOB_SECURE:
// Set PRINT_DONE flag in the file
FileData.fUiOption = pOEMExtra->fUiOption;
BITSET32(FileData.fUiOption, PRINT_DONE);
RWFileData(&FileData, pOEMExtra->SharedFileName, GENERIC_WRITE);
break;
default:
break;
}
break;
default:
ERR((("Unknown callback ID = %d.\n"), dwCmdCbID));
break;
}
#if DBG
giDebugLevel = DBG_ERROR;
#endif // DBG
return 0;
} //*** OEMCommandCallback