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.
5309 lines
223 KiB
5309 lines
223 KiB
/*++
|
|
|
|
Copyright (c) 1996-2002 Microsoft Corp. & Ricoh Co., Ltd. All rights reserved.
|
|
|
|
FILE: RPDLRES.C
|
|
|
|
Abstract: Main file for OEM rendering plugin module.
|
|
|
|
Functions: OEMCommandCallback
|
|
bOEMSendFontCmd
|
|
bOEMOutputCharStr
|
|
OEMDownloadFontHeader
|
|
OEMDownloadCharGlyph
|
|
OEMTTDownloadMethod
|
|
OEMCompression
|
|
|
|
Environment: Windows NT Unidrv5 driver
|
|
|
|
Revision History:
|
|
04/07/1997 -zhanw-
|
|
Created it.
|
|
08/11/1997 -Masatoshi Kubokura-
|
|
Began to modify for RPDL.
|
|
04/22/1999 -Masatoshi Kubokura-
|
|
Last modified for Windows2000.
|
|
08/30/1999 -Masatoshi Kubokura-
|
|
Began to modify for NT4SP6(Unidrv5.4).
|
|
09/27/1999 -Masatoshi Kubokura-
|
|
Last modified for NT4SP6.
|
|
02/17/2000 -Masatoshi Kubokura-
|
|
V.1.02 release
|
|
04/07/2000 -Masatoshi Kubokura-
|
|
Fix bug of SET_IBM_EXT_BLOCK with 1200dpi printer (RPDL bug)
|
|
05/22/2000 -Masatoshi Kubokura-
|
|
V.1.03 for NT4 release
|
|
06/30/2000 -Masatoshi Kubokura-
|
|
V.1.04 release
|
|
01/22/2001 -Masatoshi Kubokura-
|
|
V.1.05 release
|
|
02/05/2001 -Masatoshi Kubokura-
|
|
Add "Thick Paper"
|
|
03/15/2001 -Masatoshi Kubokura-
|
|
Fix RectangleFill bug
|
|
Last modified for XP(Whistler).
|
|
06/29/2001 -Masatoshi Kubokura-
|
|
V.1.07
|
|
Fix RPDL staple bug.(NX800,810,910,MF2230,2730,3530e,3570e,4570e).
|
|
Enable SET_PAPERDEST_FINISHER at GW model.
|
|
03/04/2002 -Masatoshi Kubokura-
|
|
Include strsafe.h.
|
|
Add FileNameBufSize as arg3 at RWFileData().
|
|
Use safe_sprintfA() instead of sprintf().
|
|
03/27/2002 -Masatoshi Kubokura-
|
|
Eliminate "#if 0".
|
|
04/02/2002 -Masatoshi Kubokura-
|
|
Check pdevobj NULL pointer before using at OEMCommandCallback().
|
|
11/20-22/2002 -yasuho & Kubokura-
|
|
Fix memory leak.
|
|
Last modified for .NET Server.
|
|
|
|
--*/
|
|
|
|
#include <stdio.h>
|
|
#include "pdev.h"
|
|
#ifndef WINNT_40
|
|
#include "strsafe.h" // @Mar/01/2002
|
|
#endif // !WINNT_40
|
|
|
|
#if DBG
|
|
//#define DBG_OUTPUTCHARSTR 1
|
|
//#define giDebugLevel DBG_VERBOSE // enable VERBOSE() in each file
|
|
#endif
|
|
|
|
//
|
|
// Misc definitions and declarations.
|
|
//
|
|
#define STDVAR_BUFSIZE(n) \
|
|
(sizeof (GETINFO_STDVAR) + sizeof(DWORD) * 2 * ((n) - 1)) // MSKK 1/24/98
|
|
#define MASTER_TO_SPACING_UNIT(p, n) \
|
|
((n) / (p)->nResoRatio)
|
|
#ifndef WINNT_40
|
|
//#define sprintf wsprintfA // @Sep/30/98
|
|
#define strcmp lstrcmpA // @Sep/30/98
|
|
#endif // WINNT_40
|
|
|
|
// External Functions' prototype
|
|
// @Mar/01/2002 ->
|
|
//extern BOOL RWFileData(PFILEDATA pFileData, LPWSTR pwszFileName, LONG type); // add pwszFileName @Aug/31/99
|
|
extern BOOL RWFileData(PFILEDATA pFileData, LPWSTR pwszFileName, LONG FileNameBufSize, LONG type);
|
|
extern INT safe_sprintfA(char* pszDest, size_t cchDest, const char* pszFormat, ...);
|
|
// @Mar/01/2002 <-
|
|
|
|
// Local Functions' prototype
|
|
static BYTE IsDBCSLeadByteRPDL(BYTE Ch);
|
|
static BYTE IsDifferentPRNFONT(BYTE Ch);
|
|
static VOID DrawTOMBO(PDEVOBJ pdevobj, SHORT action);
|
|
static VOID AssignIBMfont(PDEVOBJ pdevobj, SHORT rcID, SHORT action);
|
|
static VOID SendFaxNum(PDEVOBJ pdevobj);
|
|
#ifdef JISGTT
|
|
static VOID jis2sjis(BYTE jis[], BYTE sjis[]);
|
|
#endif // JISGTT
|
|
static INT DRCompression(PBYTE pInBuf, PBYTE pOutBuf, DWORD dwInLen, DWORD dwOutLen,
|
|
DWORD dwWidthByte, DWORD dwHeight);
|
|
|
|
//
|
|
// Static data to be used by this minidriver.
|
|
//
|
|
|
|
static BYTE ShiftJisRPDL[256] = {
|
|
// +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //00
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //10
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //20
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //30
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //40
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //50
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //60
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //70
|
|
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, //80
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, //90
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //A0
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //B0
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //C0
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //D0
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, //E0
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0 //F0
|
|
};
|
|
|
|
// Some vertical device font differ from TrueType font
|
|
static BYTE VerticalFontCheck[256] = {
|
|
// +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //00
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //10
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //20
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //30
|
|
0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, //40
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //50
|
|
0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, //60
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, //70
|
|
1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, //80
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //90
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //A0
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //B0
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //C0
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, //D0
|
|
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //E0
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 //F0
|
|
};
|
|
|
|
static BYTE UpdateDate[] = "04/04/2002";
|
|
|
|
// OBSOLETE (described in GPD) @Feb/15/98 ->
|
|
// Emulation Mode after printing
|
|
//static BYTE *RPDLProgName[] = {
|
|
// "1@R98", "1@R16", "1@RPS", "1@R55", // 0- 3
|
|
// "1@RGL", "1@GL2", "1@R52", "1@R73", // 4- 7
|
|
// "1@R35", "1@R01", // 8- 9
|
|
// "0@P1", "0@P2", "0@P3", "0@P4", // 10-13
|
|
// "0@P5", "0@P6", "0@P7", "0@P8", // 14-17
|
|
// "0@P9", "0@P10", "0@P11", "0@P12", // 18-21
|
|
// "0@P13", "0@P14", "0@P15", "0@P16" // 22-25
|
|
//};
|
|
//static BYTE *RPDLProgName2[] = {
|
|
// "-1,1,1@R98", "-1,1,1@R16", "-1,1,1@RPS", "-1,1,1@R55", // 0- 3
|
|
// "-1,1,1@RGL", "-1,1,1@GL2", "-1,1,1@R52", "-1,1,1@R73", // 4- 7
|
|
// "-1,1,1@R35", "-1,1,1@R01", // 8- 9
|
|
// "0,1,2@P1", "0,1,2@P2", "0,1,2@P3", "0,1,2@P4", // 10-13
|
|
// "0,1,2@P5", "0,1,2@P6", "0,1,2@P7", "0,1,2@P8", // 14-17
|
|
// "0,1,2@P9", "0,1,2@P10", "0,1,2@P11", "0,1,2@P12", // 18-21
|
|
// "0,1,2@P13", "0,1,2@P14", "0,1,2@P15", "0,1,2@P16" // 22-25
|
|
//};
|
|
//#define PRG_RPGL 4
|
|
// @Feb/15/98 <-
|
|
|
|
// RPDL pagesize (unit:masterunit)
|
|
static POINT RPDLPageSize[] = {
|
|
{2688L*MASTERUNIT/240L, 3888L*MASTERUNIT/240L}, // A3
|
|
{1872L*MASTERUNIT/240L, 2720L*MASTERUNIT/240L}, // A4
|
|
{1280L*MASTERUNIT/240L, 1904L*MASTERUNIT/240L}, // A5
|
|
{ 880L*MASTERUNIT/240L, 1312L*MASTERUNIT/240L}, // A6
|
|
{2336L*MASTERUNIT/240L, 3352L*MASTERUNIT/240L}, // B4
|
|
{1600L*MASTERUNIT/240L, 2352L*MASTERUNIT/240L}, // B5
|
|
{1104L*MASTERUNIT/240L, 1640L*MASTERUNIT/240L}, // B6
|
|
{2528L*MASTERUNIT/240L, 4000L*MASTERUNIT/240L}, // Tabloid
|
|
{1920L*MASTERUNIT/240L, 3280L*MASTERUNIT/240L}, // Legal
|
|
{1920L*MASTERUNIT/240L, 2528L*MASTERUNIT/240L}, // Letter
|
|
{1200L*MASTERUNIT/240L, 1968L*MASTERUNIT/240L}, // Statement
|
|
{3969L*MASTERUNIT/240L, 5613L*MASTERUNIT/240L}, // A2->A3
|
|
{6480L*MASTERUNIT/400L, 8960L*MASTERUNIT/400L}, // A2
|
|
{6667L*MASTERUNIT/400L, 8448L*MASTERUNIT/400L}, // C
|
|
{5587L*MASTERUNIT/400L, 7792L*MASTERUNIT/400L}, // B3 @Jan/07/98
|
|
{2688L*MASTERUNIT/240L, 3888L*MASTERUNIT/240L}, // A3->A4 @Feb/04/98
|
|
{2336L*MASTERUNIT/240L, 3352L*MASTERUNIT/240L}, // B4->A4 @Feb/04/98
|
|
{6600L*MASTERUNIT/600L, 8160L*MASTERUNIT/600L}, // 11x15->A4 @Jan/27/2000
|
|
{ 880L*MASTERUNIT/240L, 1312L*MASTERUNIT/240L} // Postcard since NX700 @Feb/13/98
|
|
};
|
|
#define PAGESPACE_2IN1_100 12 // mm
|
|
static WORD PageSpace_2IN1_67[] = {
|
|
30, 23, 22, 18, // A3,A4,A5,A6
|
|
25, 23, 19, 56, // B4,B5,B6,Tabloid
|
|
6, 6, 35, 6, // Legal(disable),Letter,Statement,A2->A3(disable)
|
|
6, 6, 6, 6, // A2(disable),C(disable),B3(disable),A3->A4(disable)
|
|
6, 6, 6 // B4->A4(disable),11x15->A4(disable),Postcard(disable)
|
|
};
|
|
|
|
static POINT RPDLPageSizeE2E[] = {
|
|
{(2970000L/254L+5L)/10L*MASTERUNIT/100L, (4200000L/254L+5L)/10L*MASTERUNIT/100L}, // A3
|
|
{(2100000L/254L+5L)/10L*MASTERUNIT/100L, (2970000L/254L+5L)/10L*MASTERUNIT/100L}, // A4
|
|
{(1480000L/254L+5L)/10L*MASTERUNIT/100L, (2100000L/254L+5L)/10L*MASTERUNIT/100L}, // A5
|
|
{(1050000L/254L+5L)/10L*MASTERUNIT/100L, (1480000L/254L+5L)/10L*MASTERUNIT/100L}, // A6
|
|
{(2570000L/254L+5L)/10L*MASTERUNIT/100L, (3640000L/254L+5L)/10L*MASTERUNIT/100L}, // B4
|
|
{(1820000L/254L+5L)/10L*MASTERUNIT/100L, (2570000L/254L+5L)/10L*MASTERUNIT/100L}, // B5
|
|
{(1280000L/254L+5L)/10L*MASTERUNIT/100L, (1820000L/254L+5L)/10L*MASTERUNIT/100L}, // B6
|
|
{110L*MASTERUNIT/10L, 170L*MASTERUNIT/10L}, // Tabloid
|
|
{ 85L*MASTERUNIT/10L, 140L*MASTERUNIT/10L}, // Legal
|
|
{ 85L*MASTERUNIT/10L, 110L*MASTERUNIT/10L}, // Letter
|
|
{ 55L*MASTERUNIT/10L, 85L*MASTERUNIT/10L}, // Statement
|
|
{(4200000L/254L+5L)/10L*MASTERUNIT/100L, (5940000L/254L+5L)/10L*MASTERUNIT/100L}, // A2->A3
|
|
{(4200000L/254L+5L)/10L*MASTERUNIT/100L, (5940000L/254L+5L)/10L*MASTERUNIT/100L}, // A2
|
|
{170L*MASTERUNIT/10L, 220L*MASTERUNIT/10L}, // C
|
|
{(3640000L/254L+5L)/10L*MASTERUNIT/100L, (5140000L/254L+5L)/10L*MASTERUNIT/100L}, // B3
|
|
{(2970000L/254L+5L)/10L*MASTERUNIT/100L, (4200000L/254L+5L)/10L*MASTERUNIT/100L}, // A3->A4
|
|
{(2570000L/254L+5L)/10L*MASTERUNIT/100L, (3640000L/254L+5L)/10L*MASTERUNIT/100L}, // B4->A4
|
|
{110L*MASTERUNIT/10L, 150L*MASTERUNIT/10L}, // 11x15 -> A4 @Jan/27/2000
|
|
{(1000000L/254L+5L)/10L*MASTERUNIT/100L, (1480000L/254L+5L)/10L*MASTERUNIT/100L} // Postcard since NX700
|
|
};
|
|
#define PAGESPACE_2IN1_100E2E 0 // mm
|
|
static WORD PageSpace_2IN1_67E2E[] = {
|
|
18, 11, 10, 6, // A3,A4,A5,A6
|
|
15, 11, 9, 43, // B4,B5,B6,Tabloid
|
|
0, 0, 23, 0, // Legal(disable),Letter,Statement,A2->A3(disable)
|
|
0, 0, 0, 0, // A2(disable),C(disable),B3(disable),A3->A4(disable)
|
|
0, 0, 0 // B4->A4(disable),11x15->A4(disable),Postcard(disable)
|
|
};
|
|
|
|
#define RPDL_A3 0
|
|
#define RPDL_A4 1
|
|
#define RPDL_A5 2
|
|
#define RPDL_A6 3 // A6/Postcard
|
|
#define RPDL_B4 4
|
|
#define RPDL_B5 5
|
|
#define RPDL_B6 6
|
|
#define RPDL_TABD 7
|
|
#define RPDL_LEGL 8
|
|
#define RPDL_LETR 9
|
|
#define RPDL_STAT 10
|
|
#define RPDL_A2A3 11
|
|
#define RPDL_A2 12
|
|
#define RPDL_C 13
|
|
#define RPDL_B3 14
|
|
#define RPDL_A3A4 15
|
|
#define RPDL_B4A4 16
|
|
#define RPDL_11x15A4 17 // @Jan/27/2000
|
|
#define RPDL_POSTCARD 18 // Postcard since NX700
|
|
#define RPDL_CUSTOMSIZE 99
|
|
|
|
// RPDL command definition
|
|
static BYTE BS[] = "\x08";
|
|
static BYTE FF[] = "\x0C";
|
|
static BYTE CR[] = "\x0D";
|
|
static BYTE LF[] = "\x0A";
|
|
static BYTE DOUBLE_BS[] = "\x08\x08";
|
|
static BYTE DOUBLE_SPACE[] = "\x20\x20";
|
|
static BYTE BEGIN_SEND_BLOCK_C[] = "\x1B\x12G3,%d,%d,,2,,,%u@";
|
|
static BYTE BEGIN_SEND_BLOCK_NC[] = "\x1B\x12G3,%d,%d,,,@";
|
|
static BYTE BEGIN_SEND_BLOCK_DRC[] = "\x1B\x12G3,%d,%d,,5,,@";
|
|
static BYTE ESC_ROT0[] = "\x1B\x12\x46\x30\x20";
|
|
static BYTE ESC_ROT90[] = "\x1B\x12\x46\x39\x30\x20";
|
|
static BYTE ESC_VERT_ON[] = "\x1B\x12&2\x20";
|
|
static BYTE ESC_VERT_OFF[] = "\x1B\x12&1\x20";
|
|
static BYTE ESC_SHIFT_IN[] = "\x1B\x0F";
|
|
static BYTE ESC_SHIFT_OUT[] = "\x1B\x0E";
|
|
static BYTE ESC_CTRLCODE[] = "\x1B\x12K1\x20";
|
|
static BYTE ESC_HALFDOWN[] = "\x1B\x55";
|
|
static BYTE ESC_HALFUP[] = "\x1B\x44";
|
|
static BYTE ESC_DOWN[] = "\x1B\x55\x1B\x55";
|
|
static BYTE ESC_UP[] = "\x1B\x44\x1B\x44";
|
|
static BYTE ESC_BOLD_ON[] = "\x1BO";
|
|
static BYTE ESC_BOLD_OFF[] = "\x1B&";
|
|
static BYTE ESC_ITALIC_ON[] = "\x1B\x12I-16\x20";
|
|
static BYTE ESC_ITALIC_OFF[] = "\x1B\x12I0\x20";
|
|
static BYTE ESC_WHITETEXT_ON[] = "\x1B\x12W5,0\x20";
|
|
static BYTE ESC_WHITETEXT_OFF[] = "\x1B\x12W0,0\x20";
|
|
static BYTE ESC_XM_ABS[] = "\x1B\x12H%d\x20";
|
|
static BYTE ESC_XM_REL[] = "\x1B\x12\x20+%d\x20";
|
|
static BYTE ESC_XM_RELLEFT[] = "\x1B\x12\x20-%d\x20";
|
|
static BYTE ESC_YM_ABS[] = "\x1B\x12V%d\x20";
|
|
static BYTE ESC_YM_REL[] = "\x1B\x12\x0A+%d\x20";
|
|
static BYTE ESC_YM_RELUP[] = "\x1B\x12\x0A-%d\x20";
|
|
static BYTE ESC_CLIPPING[] = "\x1B\x12*%d,%d,%d,%d\x20";
|
|
static BYTE SELECT_PAPER_CUSTOM[] = "\x1B\x12\x3F\x35%ld,%ld\x1B\x20";
|
|
static BYTE SELECT_PAPER_CUSTOM2[]= "\x1B\x12\x3F\x35%ld,%ld,%d\x1B\x20"; // %ld<-%d @Sep/27/2000, %d<-%c @Oct/13/2000
|
|
static BYTE SELECT_TRAY_N[] = "\x1B\x19%d"; // %d<-%c @Oct/13/2000
|
|
static BYTE SELECT_PAPER_HEAD[] = "\x1B\x12\x35\x32@";
|
|
static BYTE SEL_TRAY_PAPER_HEAD[] = "\x1B\x12\x35@";
|
|
static BYTE SELECT_PAPER_HEAD_IP1[] = "\x1B\x12\x35\x33@";
|
|
static BYTE SELECT_PAPER_A1[] = "A1\x1B\x20";
|
|
static BYTE SELECT_PAPER_A2[] = "A2\x1B\x20";
|
|
static BYTE SELECT_PAPER_A3[] = "A3\x1B\x20";
|
|
static BYTE SELECT_PAPER_A4[] = "A4\x1B\x20"; // @May/25/98
|
|
static BYTE SELECT_PAPER_A4R[] = "A4R\x1B\x20";
|
|
static BYTE SELECT_PAPER_A4X[] = "A4X\x1B\x20";
|
|
static BYTE SELECT_PAPER_A4W[] = "A4R\x1B\x20\x1B\x12\x35@A4\x1B\x20";
|
|
static BYTE SELECT_PAPER_A5[] = "A5\x1B\x20"; // @May/25/98
|
|
static BYTE SELECT_PAPER_A5R[] = "A5R\x1B\x20";
|
|
static BYTE SELECT_PAPER_A5X[] = "A5X\x1B\x20";
|
|
static BYTE SELECT_PAPER_A5W[] = "A5R\x1B\x20\x1B\x12\x35@A5\x1B\x20";
|
|
static BYTE SELECT_PAPER_A6[] = "A6\x1B\x20";
|
|
static BYTE SELECT_PAPER_PC[] = "PC\x1B\x20"; // @May/25/98
|
|
static BYTE SELECT_PAPER_PCR[] = "PCR\x1B\x20"; // @Feb/13/98
|
|
static BYTE SELECT_PAPER_PCX[] = "PCX\x1B\x20"; // @Feb/13/98
|
|
static BYTE SELECT_PAPER_B3[] = "B3\x1B\x20"; // @Jan/07/98
|
|
static BYTE SELECT_PAPER_B4[] = "B4\x1B\x20";
|
|
static BYTE SELECT_PAPER_B5[] = "B5\x1B\x20"; // @May/25/98
|
|
static BYTE SELECT_PAPER_B5R[] = "B5R\x1B\x20";
|
|
static BYTE SELECT_PAPER_B5X[] = "B5X\x1B\x20";
|
|
static BYTE SELECT_PAPER_B5W[] = "B5R\x1B\x20\x1B\x12\x35@B5\x1B\x20";
|
|
static BYTE SELECT_PAPER_B6[] = "B6\x1B\x20";
|
|
static BYTE SELECT_PAPER_C[] = "FLT\x1B\x20";
|
|
static BYTE SELECT_PAPER_TABD[] = "DLT\x1B\x20";
|
|
static BYTE SELECT_PAPER_LEGL[] = "LG\x1B\x20";
|
|
static BYTE SELECT_PAPER_LETR[] = "LT\x1B\x20"; // @May/25/98
|
|
static BYTE SELECT_PAPER_LETRR[] = "LTR\x1B\x20";
|
|
static BYTE SELECT_PAPER_LETRX[] = "LTX\x1B\x20";
|
|
static BYTE SELECT_PAPER_LETRW[] = "LTR\x1B\x20\x1B\x12\x35@LT\x1B\x20";
|
|
static BYTE SELECT_PAPER_STAT[] = "HL\x1B\x20"; // @May/25/98
|
|
static BYTE SELECT_PAPER_STATR[] = "HLR\x1B\x20";
|
|
static BYTE SELECT_PAPER_STATX[] = "HLX\x1B\x20";
|
|
static BYTE SELECT_PAPER_STATW[] = "HLR\x1B\x20\x1B\x12\x35@HLT\x1B\x20";
|
|
static BYTE SET_LIMITLESS_SUPPLY[]= "\x1B\x12Z2\x20";
|
|
static BYTE RESET_LIMITLESS_SUPPLY[]= "\x1B\x12Z1\x20"; // @Sep/27/2000
|
|
static BYTE SELECT_MANUALFEED[] = "\x1B\x19T";
|
|
static BYTE SELECT_MULTIFEEDER[] = "\x1B\x19M";
|
|
static BYTE SELECT_ROLL1[] = "\x1B\x12Y1,2\x20";
|
|
static BYTE SELECT_ROLL2[] = "\x1B\x12Y1,4\x20";
|
|
//static BYTE SET_EMULATION[] = "\x1B\x12!%s\x1B\x20";
|
|
//static BYTE SET_EMULATION_GL_EX[] = "MS-1,6,11;";
|
|
static BYTE SET_PORTRAIT[] = "\x1B\x12\x44\x31\x20";
|
|
static BYTE SET_LANDSCAPE[] = "\x1B\x12\x44\x32\x20";
|
|
static BYTE SET_LEFTMARGIN[] = "\x1B\x12YK,%d\x20";
|
|
static BYTE SET_UPPERMARGIN[] = "\x1B\x12YL,%d\x20";
|
|
static BYTE SET_LEFTMARGIN_9II[] = "\x1B\x12?Y,K:%d\x1B\x20";
|
|
static BYTE SET_UPPERMARGIN_9II[] = "\x1B\x12?Y,L:%d\x1B\x20";
|
|
static BYTE SET_MULTI_COPY[] = "\x1B\x12N%d\x20";
|
|
// PRINTER SIDE ISSUE: MF3550 RPDL @Feb/22/99 ->
|
|
// Since 'backslash' can't be printed in Japanese region ('KUNIBETSU'),
|
|
// set 1st param to 1 for USA region.
|
|
//static BYTE SET_IBM_EXT_BLOCK[] = "\x1B\x12?@,,1\x1B\x20";
|
|
static BYTE SET_IBM_EXT_BLOCK[] = "\x1B\x12?@1,,1\x1B\x20";
|
|
// @Feb/22/99 <-
|
|
static BYTE SET_PAGEMAX_VALID[] = "\x1B\x12?+1\x1B\x20";
|
|
static BYTE DUPLEX_ON[] = "\x1B\x12\x36\x31,1\x20";
|
|
static BYTE DUPLEX_HORZ[] = "\x1B\x12YA3,1\x20";
|
|
static BYTE DUPLEX_VERT[] = "\x1B\x12YA3,2\x20";
|
|
static BYTE DUPLEX_VERT_R[] = "\x1B\x12YA3,3\x20";
|
|
//static BYTE IMAGE_2IN1[] = "\x1B\x12\x36\x32,\x20";
|
|
static BYTE IMAGE_OPT_OFF[] = "\x1B\x12\x36\x30,1,0\x20";
|
|
static BYTE IMAGE_SCALING_100[] = "\x1B\x12YM,1\x20";
|
|
static BYTE IMAGE_SCALING_88[] = "\x1B\x12YM,2\x20";
|
|
static BYTE IMAGE_SCALING_80[] = "\x1B\x12YM,3\x20";
|
|
static BYTE IMAGE_SCALING_75[] = "\x1B\x12YM,4\x20";
|
|
static BYTE IMAGE_SCALING_70[] = "\x1B\x12YM,5\x20";
|
|
static BYTE IMAGE_SCALING_67[] = "\x1B\x12YM,6\x20";
|
|
static BYTE IMAGE_SCALING_115[] = "\x1B\x12YM,7\x20";
|
|
static BYTE IMAGE_SCALING_122[] = "\x1B\x12YM,8\x20";
|
|
static BYTE IMAGE_SCALING_141[] = "\x1B\x12YM,9\x20";
|
|
static BYTE IMAGE_SCALING_200[] = "\x1B\x12YM,10\x20";
|
|
static BYTE IMAGE_SCALING_283[] = "\x1B\x12YM,11\x20";
|
|
static BYTE IMAGE_SCALING_400[] = "\x1B\x12YM,12\x20";
|
|
static BYTE IMAGE_SCALING_122V[] = "\x1B\x12?M122,1\x1B\x20"; // variable ratio
|
|
static BYTE IMAGE_SCALING_141V[] = "\x1B\x12?M141,1\x1B\x20";
|
|
static BYTE IMAGE_SCALING_200V[] = "\x1B\x12?M200,1\x1B\x20";
|
|
static BYTE IMAGE_SCALING_50V[] = "\x1B\x12?M50,1\x1B\x20";
|
|
static BYTE IMAGE_SCALING_VAR[] = "\x1B\x12?M%d,1\x1B\x20";
|
|
|
|
static BYTE SET_PAPERDEST_OUTTRAY[] = "\x1B\x12\x38\x33,2\x20";
|
|
static BYTE SET_PAPERDEST_FINISHER[] = "\x1B\x12\x38\x46,2,%d\x20"; // %d<-1 @Jun/25/2001
|
|
static BYTE SET_PAPERDEST_FINISHER_GW[] = "\x1B\x12\x38\x46,,%d\x20"; // @Jun/25/2001
|
|
static BYTE SET_PAPERDEST_1BINSHIFT[] = "\x1B\x12\x38\x49,,1\x20"; // @Oct/10/2000
|
|
// RPDL SPEC changed at NX900. @Jan/08/99 ->
|
|
//static BYTE SET_SORT_ON[] = "\x1B\x12\x36,,1\x20";
|
|
static BYTE SET_SORT_ON[] = "\x1B\x12\x36%d,,1\x20";
|
|
// @Jan/08/99 <-
|
|
static BYTE SET_STAPLE_ON[] = "\x1B\x12?O22,0,%d\x1B\x20";
|
|
static BYTE SET_STAPLE_CORNER_ON[] = "\x1B\x12?O22,1,%d\x1B\x20";
|
|
static BYTE SET_PUNCH_ON[] = "\x1B\x12?O32,%d\x1B\x20";
|
|
static BYTE SELECT_MEDIATYPE[] = "\x1B\x12?6%c,%d\x1B\x20"; // %d<-%c @Oct/13/2000
|
|
static BYTE COLLATE_DISABLE_ROT[] = "\x1B\x12?O11\x1B\x20"; // @May/27/98
|
|
static BYTE COLLATE_ENABLE_ROT[] = "\x1B\x12?O12\x1B\x20"; // @Jul/31/98
|
|
|
|
static BYTE SET_TEXTRECT_BLACK[] = "\x1B\x12P3,64\x20";
|
|
static BYTE SET_TEXTRECT_WHITE[] = "\x1B\x12W0,3\x20\x1B\x12P3,1\x20"; // @Aug/15/98
|
|
static BYTE SET_TEXTRECT_GRAY[] = "\x1B\x12P3,%d,1\x20"; // add ",1" @Aug/15/98
|
|
static BYTE DRAW_TEXTRECT[] = "\x1B\x12R%d,%d,%d,%d\x20";
|
|
static BYTE DRAW_TEXTRECT_R_P3[] = "\x1B\x12r%d,%d,%d\x20";
|
|
static BYTE DRAW_TEXTRECT_R_P4[] = "\x1B\x12r%d,%d,%d,%d\x20";
|
|
|
|
// @Jun/25/2001 ->
|
|
static BYTE BEGINDOC_TOP[] = "\x1B\x12!1@R00\x1B\x20";
|
|
static BYTE BEGINDOC_TOP_JOBDEF[] = "\x1B\x12!1@R00\x1B\x20\x1B\x12?JS@\x1B@\x1B@\x1B@\x1B@\x1B\x20";
|
|
static BYTE BEGINDOC1_2[] = "\x1B\x34\x1B\x12YJ,3\x20";
|
|
// @Jun/25/2001 <-
|
|
|
|
static BYTE BEGINDOC1[] = "\x1B\x12!1@R00\x1B\x20\x1B\x34\x1B\x12YJ,3\x20";
|
|
static BYTE BEGINDOC2_1[] = "\x1B\x12YP,1\x20\x1B\x12YQ,2\x20";
|
|
static BYTE BEGINDOC2_2[] = "\x1B\x12YQ,2\x20";
|
|
static BYTE BEGINDOC3[] = "\x1B\x12YA6,1\x20";
|
|
static BYTE SELECT_RES240_1[] = "\x1B\x12YI,6\x20";
|
|
static BYTE SELECT_RES240_2[] = "\x1B\x12YW,2\x20\x1B\x12YA4,2\x20\x1B\x12#3\x20";
|
|
static BYTE SELECT_RES400_1[] = "\x1B\x12\x36\x30,1,0\x20\x1B\x12YI,7\x20\x1B\x12YW,1\x20";
|
|
static BYTE SELECT_RES400_2[] = "\x1B\x12YA4,1\x20";
|
|
static BYTE SELECT_RES400_3[] = "\x1B\x12#2\x20";
|
|
static BYTE SELECT_RES600[] = "\x1B\x12\x36\x30,1,0\x20\x1B\x12YI,8\x20\x1B\x12YW,3\x20\x1B\x12YA4,3\x20\x1B\x12#4\x20";
|
|
static BYTE SELECT_RES1200[] = "\x1B\x12\x36\x30,1,0\x20\x1B\x12YI,9\x20\x1B\x12YW,4\x20\x1B\x12YA4,4\x20\x1B\x12#5\x20"; // @Mar/02/99
|
|
static BYTE SELECT_REGION_STD[] = "\x1B\x12YB,1\x20";
|
|
static BYTE SELECT_REGION_E2E[] = "\x1B\x12YB,2\x20";
|
|
static BYTE ENDDOC1[] = "\x1B\x12YB,1\x20\x1B\x12YI,1\x20\x1B\x12YJ,1\x20\x1B\x12YM,1\x20";
|
|
static BYTE ENDDOC2_240DPI[] = "\x1B\x12YW,2\x20\x1B\x12YA4,2\x20";
|
|
static BYTE ENDDOC2_SP9[] = "\x1B\x12YW,2\x20\x1B\x12YA4,1\x20";
|
|
static BYTE ENDDOC2_400DPI[] = "\x1B\x12YW,1\x20\x1B\x12YA4,1\x20";
|
|
static BYTE ENDDOC3[] = "\x1B\x12#0\x20";
|
|
static BYTE ENDDOC4[] = "\x1B\x12\x36\x30,0,0\x20";
|
|
static BYTE ENDDOC4_FINISHER[] = "\x1B\x12\x36\x30,0\x20";
|
|
static BYTE ENDDOC_JOBDEF_END[] = "\x1B\x12?JE@\x1B@\x1B@\x1B@\x1B@\x1B\x20"; // @Jan/08/99
|
|
static BYTE ENDDOC5[] = "\x1B\x1AI";
|
|
static BYTE SELECT_SMOOTHING2[] = "\x1B\x12YA2,2\x20";
|
|
// If you change FONT_NAME, see AssignIBMfont().
|
|
static BYTE SET_IBM_FONT_SCALE[] = "\x1B\x12\x43%d,M,%ld,%ld,4@I55\x20";
|
|
static BYTE SET_IBM_FONT_SCALE_H_ONLY[] = "\x1B\x12\x43%d,M,,%ld,4@I55\x20"; // @Jan/29/99
|
|
static BYTE *SET_IBM_FONT_NAME[] = {"CHUMINCYO\x1B\x20",
|
|
"MINCYO-BOLD\x1B\x20",
|
|
"MINCYO-E B\x1B\x20",
|
|
"GOTHIC\x1B\x20",
|
|
"GOTHIC-M\x1B\x20",
|
|
"GOTHIC-E B\x1B\x20",
|
|
"MARUGOTHIC\x1B\x20",
|
|
"MARUGOTHIC-M\x1B\x20",
|
|
"MARUGOTHIC-L\x1B\x20",
|
|
"GYOUSHO\x1B\x20",
|
|
"KAISHO\x1B\x20",
|
|
"KYOUKASHO\x1B\x20"};
|
|
static BYTE SET_JIS_FONT_SCALE[] = "\x1B\x12\x43\x5A,M,%ld,%ld@";
|
|
static BYTE SET_JIS_FONT_SCALE_H_ONLY[] = "\x1B\x12\x43\x5A,M,,%ld@"; // @Jan/29/99
|
|
static BYTE *SET_JIS_FONT_NAME[] = {"CHUMINCYO\x1B\x20",
|
|
"MINCYO-BOLD\x1B\x20",
|
|
"MINCYO-EXTRA BOLD\x1B\x20",
|
|
"GOTHIC\x1B\x20",
|
|
"GOTHIC-MEDIUM\x1B\x20",
|
|
"GOTHIC-EXTRA BOLD\x1B\x20",
|
|
"MARUGOTHIC\x1B\x20",
|
|
"MARUGOTHIC-MEDIUM\x1B\x20",
|
|
"MARUGOTHIC-LIGHT\x1B\x20",
|
|
"GYOUSHO\x1B\x20",
|
|
"KAISHO\x1B\x20",
|
|
"KYOUKASHO\x1B\x20"};
|
|
#ifdef DOWNLOADFONT
|
|
//static BYTE DLFONT_MALLOC[] = "\x1B\x12/128,8\x20";
|
|
static BYTE DLFONT_MALLOC[] = "\x1B\x12/%d,%d\x20";
|
|
static BYTE DLFONT_SEND_BLOCK[] = "\x1B\x12G7,%d,%d,%d,@";
|
|
static BYTE DLFONT_SEND_BLOCK_DRC[] = "\x1B\x12G7,%d,%d,%d,5,,,%d@";
|
|
static BYTE DLFONT_PRINT[] = "\x1B\x12g%d,,%d\x20";
|
|
#endif // DOWNLOADFONT
|
|
|
|
static BYTE ENTER_VECTOR[] = "\x1B\x33";
|
|
static BYTE EXIT_VECTOR[] = "\x1B\x34";
|
|
static BYTE TERMINATOR[] = ";";
|
|
static BYTE MOVE_ABSOLUTE[] = "MA%d,%d";
|
|
static BYTE BAR_CHECKDIGIT[] = "BC1";
|
|
static BYTE BAR_H_SET[] = "BH%d";
|
|
static BYTE BAR_W_SET_JAN[] = "JW%d";
|
|
static BYTE BAR_W_SET_2OF5[] = "TW";
|
|
static BYTE BAR_W_SET_C39[] = "CW";
|
|
static BYTE BAR_W_SET_NW7[] = "NW";
|
|
static BYTE BAR_W_PARAMS[] = "%d,%d,%d,%d,%d";
|
|
static BYTE BAR_ROT90[ ] = "RO90";
|
|
static BYTE BAR_ROT270[] = "RO270";
|
|
// @Dec/07/99 FK#50 ->
|
|
static BYTE BAR_W_SET_CUST[] = "CS";
|
|
// @Dec/07/99 FK#50 <-
|
|
static BYTE *BAR_TYPE[] = {"JL", // JAN(STANDARD)
|
|
"JS", // JAN(SHORT)
|
|
"TI%d,", // 2of5(INDUSTRIAL)
|
|
"TX%d,", // 2of5(MATRIX)
|
|
"TL%d,", // 2of5(ITF)
|
|
"CD%d,", // CODE39
|
|
"NB%d,", // NW-7
|
|
// @Dec/07/99 FK#50 ->
|
|
"CU%d,", // CUSTOMER
|
|
"CE%d", // CODE128(B)
|
|
"JU", // UPC(A)
|
|
"JE" // UPC(W)
|
|
// @Dec/07/99 FK#50 <-
|
|
};
|
|
static BYTE *BAR_NOFONT[] = {"FJ1,-1", // JAN(STANDARD)
|
|
"FJ1,-1", // JAN(SHORT)
|
|
"FT2,-1", // 2of5(INDUSTRIAL)
|
|
"FT2,-1", // 2of5(MATRIX)
|
|
"FT2,-1", // 2of5(ITF)
|
|
"FC2,-1", // CODE39
|
|
"FN2,-1", // NW-7
|
|
// @Dec/07/99 FK#50 ->
|
|
"", // CUSTOMER
|
|
"FC2,-1", // CODE128
|
|
"FJ1,-1", // UPC(A)
|
|
"FJ1,-1" // UPC(W)
|
|
// @Dec/07/99 FK#50 <-
|
|
};
|
|
|
|
static BYTE PEN_WIDTH[] = "LW%d"; // @Sep/14/98
|
|
static BYTE DRAW_TOMBO_POLYLINE[] = "MA%d,%dMRPD%d,%d,%d,%d"; // @Sep/14/98
|
|
// @Jun/25/2001 ->
|
|
//static BYTE BEGINFAX_HEAD[] = "\x1B\x12!1@R00\x1B\x20\x1B\x12?F1,%d,%d,%d,180,1,";
|
|
static BYTE BEGINFAX_HEAD[] = "\x1B\x12?F1,%d,%d,%d,180,1,";
|
|
// @Jun/25/2001 <-
|
|
static BYTE BEGINFAX_CH[] = "@%d:";
|
|
static BYTE BEGINFAX_EXTNUM[] = "%s-";
|
|
static BYTE BEGINFAX_TAIL[] = ",%08d,RPDLMINI,%d,1,2,1,1,,1,%d,%s,1,,1,,,1,\x1B\x20";
|
|
static BYTE ENDFAX[] = "\x1B\x12?F2,1\x1B\x20";
|
|
|
|
|
|
INT APIENTRY OEMCommandCallback(
|
|
PDEVOBJ pdevobj,
|
|
DWORD dwCmdCbID,
|
|
DWORD dwCount,
|
|
PDWORD pdwParams)
|
|
{
|
|
INT ocmd, iRet;
|
|
BYTE Cmd[256];
|
|
SHORT nTmp;
|
|
LPSTR lpcmd;
|
|
WORD fLandscape, fFinisherSR30Active, fDoFormFeed, fPaperX;
|
|
// @Apr/02/2002 ->
|
|
// POEMUD_EXTRADATA pOEMExtra = MINIPRIVATE_DM(pdevobj); // @Oct/06/98
|
|
// POEMPDEV pOEM = MINIDEV_DATA(pdevobj); // @Oct/06/98
|
|
POEMUD_EXTRADATA pOEMExtra;
|
|
POEMPDEV pOEM;
|
|
// @Apr/02/2002 <-
|
|
|
|
// VERBOSE(("OEMCommandCallback() entry.\n"));
|
|
|
|
//
|
|
// verify pdevobj okay
|
|
//
|
|
ASSERT(VALID_PDEVOBJ(pdevobj));
|
|
|
|
// @Apr/02/2002 ->
|
|
pOEMExtra = MINIPRIVATE_DM(pdevobj);
|
|
pOEM = MINIDEV_DATA(pdevobj);
|
|
// @Apr/02/2002 <-
|
|
|
|
//
|
|
// fill in printer commands
|
|
//
|
|
ocmd = 0;
|
|
iRet = 0;
|
|
|
|
// If TextMode RectangleFill or Move_X,Y are not called now &&
|
|
// Move_X,Y command is saved, then flush the command here.
|
|
if (dwCmdCbID != CMD_SET_TEXTRECT_W && dwCmdCbID != CMD_SET_TEXTRECT_H &&
|
|
dwCmdCbID != CMD_DRAW_TEXTRECT &&
|
|
dwCmdCbID != CMD_DRAW_TEXTRECT_REL && // @Dec/11/97
|
|
dwCmdCbID != CMD_DRAW_TEXTRECT_WHITE && // @Aug/14/98
|
|
dwCmdCbID != CMD_DRAW_TEXTRECT_WHITE_REL && // @Aug/14/98
|
|
!(dwCmdCbID >= CMD_XM_ABS && dwCmdCbID <= CMD_YM_RELUP)) // @Aug/28/98
|
|
{
|
|
if (BITTEST32(pOEM->fGeneral2, TEXTRECT_CONTINUE)) // @Dec/11/97
|
|
{
|
|
BITCLR32(pOEM->fGeneral2, TEXTRECT_CONTINUE);
|
|
// If white-rect has been done before, set raster drawmode to OR. @Jan/20/99
|
|
if (!pOEM->TextRectGray)
|
|
{
|
|
if (BITTEST32(pOEM->fGeneral1, FONT_WHITETEXT_ON))
|
|
WRITESPOOLBUF(pdevobj, ESC_WHITETEXT_ON, sizeof(ESC_WHITETEXT_ON)-1);
|
|
else
|
|
WRITESPOOLBUF(pdevobj, ESC_WHITETEXT_OFF, sizeof(ESC_WHITETEXT_OFF)-1);
|
|
}
|
|
}
|
|
|
|
if (dwCmdCbID == CMD_FF)
|
|
{
|
|
BITCLR32(pOEM->fGeneral1, YM_ABS_GONNAOUT);
|
|
BITCLR32(pOEM->fGeneral1, XM_ABS_GONNAOUT);
|
|
}
|
|
if (BITTEST32(pOEM->fGeneral1, YM_ABS_GONNAOUT))
|
|
{
|
|
BITCLR32(pOEM->fGeneral1, YM_ABS_GONNAOUT);
|
|
// Output Move_Y command here.
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), ESC_YM_ABS, pOEM->TextCurPos.y);
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
}
|
|
if (BITTEST32(pOEM->fGeneral1, XM_ABS_GONNAOUT))
|
|
{
|
|
BITCLR32(pOEM->fGeneral1, XM_ABS_GONNAOUT);
|
|
// Output Move_X command here.
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), ESC_XM_ABS, pOEM->TextCurPos.x);
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
}
|
|
}
|
|
|
|
switch (dwCmdCbID) {
|
|
case CMD_SET_TEXTRECT_W: // pdwParams:RectXSize
|
|
pOEM->TextRect.x = *pdwParams / pOEM->nResoRatio;
|
|
break;
|
|
|
|
case CMD_SET_TEXTRECT_H: // pdwParams:RectYSize
|
|
pOEM->TextRect.y = *pdwParams / pOEM->nResoRatio;
|
|
break;
|
|
|
|
case CMD_DRAW_TEXTRECT_WHITE: // @Aug/14/98, pdwParams:DestX,DestY @Aug/28/98
|
|
if (pOEM->TextRectGray || !BITTEST32(pOEM->fGeneral2, TEXTRECT_CONTINUE))
|
|
{
|
|
pOEM->TextRectGray = 0;
|
|
WRITESPOOLBUF(pdevobj, SET_TEXTRECT_WHITE, sizeof(SET_TEXTRECT_WHITE)-1);
|
|
}
|
|
goto _DRAW_RECT;
|
|
|
|
case CMD_DRAW_TEXTRECT: // pdwParams:DestX,DestY,GrayPercentage
|
|
// If white-rect has been done before, set raster drawmode to OR. @Jan/20/99
|
|
if (!pOEM->TextRectGray)
|
|
{
|
|
if (BITTEST32(pOEM->fGeneral1, FONT_WHITETEXT_ON))
|
|
WRITESPOOLBUF(pdevobj, ESC_WHITETEXT_ON, sizeof(ESC_WHITETEXT_ON)-1);
|
|
else
|
|
WRITESPOOLBUF(pdevobj, ESC_WHITETEXT_OFF, sizeof(ESC_WHITETEXT_OFF)-1);
|
|
}
|
|
if ((WORD)*(pdwParams+2) >= 1 && (WORD)*(pdwParams+2) <= 100 &&
|
|
(WORD)*(pdwParams+2) != pOEM->TextRectGray) // @Jan/08/98, 3rd param @Aug/28/98
|
|
{
|
|
if ((pOEM->TextRectGray = (WORD)*(pdwParams+2)) == 100) // @Aug/26/98
|
|
{
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), SET_TEXTRECT_BLACK);
|
|
}
|
|
else
|
|
{
|
|
WORD gray;
|
|
if ((gray = pOEM->TextRectGray * RPDLGRAYMAX / 100) < RPDLGRAYMIN)
|
|
gray = RPDLGRAYMIN; // use RPDLGRAYMIN @Aug/15/98
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), SET_TEXTRECT_GRAY, gray);
|
|
}
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
}
|
|
|
|
_DRAW_RECT: // @Aug/14/98
|
|
// @Jan/13/99 ->
|
|
if (!BITTEST32(pOEM->fGeneral2, TEXTRECT_CONTINUE))
|
|
BITSET32(pOEM->fGeneral2, TEXTRECT_CONTINUE);
|
|
// @Jan/13/99 <-
|
|
{
|
|
LONG x = pOEM->TextCurPos.x;
|
|
LONG y = pOEM->TextCurPosRealY; // y without page_length adjustment
|
|
LONG w = pOEM->TextRect.x;
|
|
LONG h = pOEM->TextRect.y;
|
|
LONG dest_x = *pdwParams / pOEM->nResoRatio + pOEM->Offset.x;
|
|
|
|
// UNIDRV5 SIDE ISSUE
|
|
// We can rely on DestX, except when CmdCR is emitted.
|
|
// Following bugs are concerned.
|
|
// - RPDL117&124: Current x isn't updated by CMD_XM_ABS while device font
|
|
// direct(not-substituted) printing. -> DestX is reliable.
|
|
// - #236215: DestX doesn't become 0 after CmdCR when current y is 0.
|
|
// (SP8 WINPARTy printarea.exe) -> TextCurPos.x is reliable.
|
|
// - DestX doesn't become 0 after CmdCR, even though current y isn't 0.
|
|
// (NX720N WINPARTy printarea.exe at 1200dpi) -> TextCurPos.x is reliable.
|
|
// @Mar/15/2001 ->
|
|
// if (!(x != dest_x && x == pOEM->Offset.x && y == pOEM->Offset.y))
|
|
if (!(x != dest_x && x == pOEM->Offset.x))
|
|
// @Mar/15/2001 <-
|
|
pOEM->TextCurPos.x = x = dest_x;
|
|
|
|
// Convert unit from dot to 1/720inch_unit at OLD models
|
|
if (!(TEST_AFTER_SP10(pOEM->fModel) || BITTEST32(pOEM->fModel, GRP_MF150E)))
|
|
{
|
|
if (pOEM->nResoRatio == MASTERUNIT/240) // 240dpi printer
|
|
{
|
|
x *= 3; // 3 = 720/240
|
|
y *= 3;
|
|
w *= 3;
|
|
h *= 3;
|
|
}
|
|
else // MF530,150
|
|
{
|
|
x *= 18; // 18 = 720/400*10
|
|
w = (w * 18 + x % 10) / 10; // Adjust fractional part
|
|
x /= 10; // KIRISUTE
|
|
y *= 18;
|
|
h = (h * 18 + y % 10) / 10;
|
|
y /= 10;
|
|
}
|
|
}
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), DRAW_TEXTRECT, x, y, w, h);
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
}
|
|
break;
|
|
|
|
case CMD_DRAW_TEXTRECT_WHITE_REL: // @Aug/14/98, pdwParams:DestX,DestY @Aug/28/98
|
|
if (pOEM->TextRectGray || !BITTEST32(pOEM->fGeneral2, TEXTRECT_CONTINUE))
|
|
{
|
|
pOEM->TextRectGray = 0;
|
|
WRITESPOOLBUF(pdevobj, SET_TEXTRECT_WHITE, sizeof(SET_TEXTRECT_WHITE)-1);
|
|
}
|
|
goto _DRAW_RECT_REL;
|
|
|
|
// Relative-coordinate rectangle command since NX-510 @Dec/12/97
|
|
case CMD_DRAW_TEXTRECT_REL: // pdwParams:DestX,DestY,GrayPercentage
|
|
// If white-rect has been done before, set raster drawmode to OR. @Jan/20/99
|
|
if (!pOEM->TextRectGray)
|
|
{
|
|
if (BITTEST32(pOEM->fGeneral1, FONT_WHITETEXT_ON))
|
|
WRITESPOOLBUF(pdevobj, ESC_WHITETEXT_ON, sizeof(ESC_WHITETEXT_ON)-1);
|
|
else
|
|
WRITESPOOLBUF(pdevobj, ESC_WHITETEXT_OFF, sizeof(ESC_WHITETEXT_OFF)-1);
|
|
}
|
|
if ((WORD)*(pdwParams+2) >= 1 && (WORD)*(pdwParams+2) <= 100 &&
|
|
(WORD)*(pdwParams+2) != pOEM->TextRectGray) // @Jan/08/98, 3rd param @Aug/28/98
|
|
{
|
|
if ((pOEM->TextRectGray = (WORD)*(pdwParams+2)) == 100) // @Aug/26/98
|
|
{
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), SET_TEXTRECT_BLACK);
|
|
}
|
|
else
|
|
{
|
|
WORD gray;
|
|
if ((gray = pOEM->TextRectGray * RPDLGRAYMAX / 100) < RPDLGRAYMIN)
|
|
gray = RPDLGRAYMIN; // use RPDLGRAYMIN @Aug/15/98
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), SET_TEXTRECT_GRAY, gray);
|
|
}
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
}
|
|
|
|
_DRAW_RECT_REL: // @Aug/14/98
|
|
{
|
|
LONG dest_x = *pdwParams / pOEM->nResoRatio + pOEM->Offset.x;
|
|
|
|
// UNIDRV5 SIDE ISSUE
|
|
// @Mar/15/2001 ->
|
|
// if (!(pOEM->TextCurPos.x != dest_x && pOEM->TextCurPos.x == pOEM->Offset.x &&
|
|
// pOEM->TextCurPosRealY == pOEM->Offset.y))
|
|
if (!(pOEM->TextCurPos.x != dest_x && pOEM->TextCurPos.x == pOEM->Offset.x))
|
|
// @Mar/15/2001 <-
|
|
{
|
|
pOEM->TextCurPos.x = dest_x;
|
|
}
|
|
}
|
|
|
|
if (!BITTEST32(pOEM->fGeneral2, TEXTRECT_CONTINUE))
|
|
{
|
|
BITSET32(pOEM->fGeneral2, TEXTRECT_CONTINUE);
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), DRAW_TEXTRECT,
|
|
pOEM->TextCurPos.x, pOEM->TextCurPosRealY,
|
|
pOEM->TextRect.x, pOEM->TextRect.y);
|
|
}
|
|
else
|
|
{
|
|
LONG x = pOEM->TextCurPos.x - pOEM->TextRectPrevPos.x;
|
|
LONG y = pOEM->TextCurPosRealY - pOEM->TextRectPrevPos.y;
|
|
|
|
// If height is 1dot, this parameter can be omitted.
|
|
if (pOEM->TextRect.y != 1)
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), DRAW_TEXTRECT_R_P4, x, y,
|
|
pOEM->TextRect.x, pOEM->TextRect.y);
|
|
else
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), DRAW_TEXTRECT_R_P3, x, y,
|
|
pOEM->TextRect.x);
|
|
}
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
pOEM->TextRectPrevPos.x = pOEM->TextCurPos.x;
|
|
pOEM->TextRectPrevPos.y = pOEM->TextCurPosRealY;
|
|
break;
|
|
|
|
|
|
case CMD_SET_SRCBMP_H: // @Jun/04/98
|
|
pOEM->dwSrcBmpHeight = *pdwParams;
|
|
break;
|
|
|
|
case CMD_SET_SRCBMP_W: // @Jun/04/98
|
|
pOEM->dwSrcBmpWidthByte = *pdwParams;
|
|
break;
|
|
|
|
case CMD_OEM_COMPRESS_ON: // @Jun/04/98
|
|
// VERBOSE(("** OEM_COMPRESS_ON **\n"));
|
|
BITSET32(pOEM->fGeneral2, OEM_COMPRESS_ON);
|
|
BITCLR32(pOEM->fGeneral1, RLE_COMPRESS_ON);
|
|
break;
|
|
|
|
case CMD_RLE_COMPRESS_ON:
|
|
// VERBOSE(("** RLE_COMPRESS_ON **\n"));
|
|
BITSET32(pOEM->fGeneral1, RLE_COMPRESS_ON);
|
|
BITCLR32(pOEM->fGeneral2, OEM_COMPRESS_ON); // @Jun/04/98
|
|
break;
|
|
|
|
case CMD_COMPRESS_OFF:
|
|
// VERBOSE(("** COMPRESS_OFF **\n"));
|
|
BITCLR32(pOEM->fGeneral1, RLE_COMPRESS_ON);
|
|
BITCLR32(pOEM->fGeneral2, OEM_COMPRESS_ON); // @Jun/04/98
|
|
break;
|
|
|
|
case CMD_SEND_BLOCK: // pdwParams:NumOfDataBytes,RasterDataH&W
|
|
// Do FE-DeltaRow compression @Jun/04/98
|
|
if (BITTEST32(pOEM->fGeneral2, OEM_COMPRESS_ON))
|
|
{
|
|
// VERBOSE(("** OEM_COMPRESS_SEND (%d) **\n", *pdwParams));
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), BEGIN_SEND_BLOCK_DRC,
|
|
(WORD)*(pdwParams+2) * 8, // RasterDataWidthInBytes
|
|
(WORD)*(pdwParams+1)); // RasterDataHeightInPixels
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
}
|
|
else
|
|
{
|
|
// Do FE-RunLength compression
|
|
if (BITTEST32(pOEM->fGeneral1, RLE_COMPRESS_ON))
|
|
{
|
|
// VERBOSE(("** RLE_COMPRESS_SEND (%d) **\n", *pdwParams));
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), BEGIN_SEND_BLOCK_C,
|
|
(WORD)*(pdwParams+2) * 8, // RasterDataWidthInBytes
|
|
(WORD)*(pdwParams+1), // RasterDataHeightInPixels
|
|
(WORD)*pdwParams); // NumOfDataBytes
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
}
|
|
// No compression
|
|
else
|
|
{
|
|
// VERBOSE(("** NO_COMPRESS_SEND (%d) **\n", *pdwParams));
|
|
{
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), BEGIN_SEND_BLOCK_NC,
|
|
(WORD)*(pdwParams+2) * 8, // RasterDataWidthInBytes
|
|
(WORD)*(pdwParams+1)); // RasterDataHeightInPixels
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
|
|
case CMD_XM_ABS: // pdwParams:DestX
|
|
if (!BITTEST32(pOEM->fGeneral2, BARCODE_DATA_VALID))
|
|
{
|
|
#ifdef DOWNLOADFONT
|
|
pOEM->nCharPosMoveX = 0;
|
|
#endif // DOWNLOADFONT
|
|
iRet = pOEM->TextCurPos.x = *pdwParams / pOEM->nResoRatio; // @Aug/28/98
|
|
pOEM->TextCurPos.x += pOEM->Offset.x;
|
|
// Output Move_X command later.
|
|
BITSET32(pOEM->fGeneral1, XM_ABS_GONNAOUT);
|
|
// VERBOSE(("** CMD_XM_ABS iRet=%d **\n", iRet));
|
|
}
|
|
break;
|
|
|
|
case CMD_YM_ABS: // pdwParams:DestY
|
|
if (!BITTEST32(pOEM->fGeneral2, BARCODE_DATA_VALID))
|
|
{
|
|
iRet = pOEM->TextCurPos.y = *pdwParams / pOEM->nResoRatio; // @Aug/28/98
|
|
pOEM->TextCurPosRealY = pOEM->TextCurPos.y;
|
|
|
|
// PRINTER SIDE ISSUE: RPDL
|
|
// Because RPDL do formfeed when vertical position is around
|
|
// ymax-coordinate, we shift position upper 1mm.
|
|
if (pOEM->TextCurPos.y > pOEM->PageMaxMoveY)
|
|
pOEM->TextCurPos.y = pOEM->PageMaxMoveY;
|
|
pOEM->TextCurPos.y += pOEM->Offset.y;
|
|
pOEM->TextCurPosRealY += pOEM->Offset.y;
|
|
// Output Move_Y command later.
|
|
BITSET32(pOEM->fGeneral1, YM_ABS_GONNAOUT);
|
|
// VERBOSE(("** CMD_YM_ABS iRet=%d **\n", iRet));
|
|
}
|
|
break;
|
|
|
|
case CMD_XM_REL: // pdwParams:DestXRel
|
|
if (!BITTEST32(pOEM->fGeneral2, BARCODE_DATA_VALID))
|
|
{
|
|
iRet = *pdwParams / pOEM->nResoRatio; // @Aug/28/98
|
|
pOEM->TextCurPos.x += iRet;
|
|
// Output Move_X command later.
|
|
BITSET32(pOEM->fGeneral1, XM_ABS_GONNAOUT);
|
|
}
|
|
break;
|
|
|
|
case CMD_XM_RELLEFT: // pdwParams:DestXRel
|
|
if (!BITTEST32(pOEM->fGeneral2, BARCODE_DATA_VALID))
|
|
{
|
|
iRet = *pdwParams / pOEM->nResoRatio; // @Aug/28/98
|
|
pOEM->TextCurPos.x -= iRet;
|
|
// Output Move_X command later.
|
|
BITSET32(pOEM->fGeneral1, XM_ABS_GONNAOUT);
|
|
}
|
|
break;
|
|
|
|
case CMD_YM_REL: // pdwParams:DestYRel
|
|
if (!BITTEST32(pOEM->fGeneral2, BARCODE_DATA_VALID))
|
|
{
|
|
iRet = *pdwParams / pOEM->nResoRatio; // @Aug/28/98
|
|
pOEM->TextCurPos.y += iRet;
|
|
pOEM->TextCurPosRealY = pOEM->TextCurPos.y;
|
|
if (pOEM->TextCurPos.y > pOEM->PageMaxMoveY)
|
|
pOEM->TextCurPos.y = pOEM->PageMaxMoveY;
|
|
// Output Move_Y command later.
|
|
BITSET32(pOEM->fGeneral1, YM_ABS_GONNAOUT);
|
|
}
|
|
break;
|
|
|
|
case CMD_YM_RELUP: // pdwParams:DestYRel
|
|
if (!BITTEST32(pOEM->fGeneral2, BARCODE_DATA_VALID))
|
|
{
|
|
iRet = *pdwParams / pOEM->nResoRatio; // @Aug/28/98
|
|
pOEM->TextCurPos.y -= iRet;
|
|
pOEM->TextCurPosRealY = pOEM->TextCurPos.y;
|
|
// Output Move_Y command later.
|
|
BITSET32(pOEM->fGeneral1, YM_ABS_GONNAOUT);
|
|
}
|
|
break;
|
|
|
|
case CMD_CR:
|
|
#ifdef DOWNLOADFONT
|
|
pOEM->nCharPosMoveX = 0; // @Jan/19/98
|
|
#endif // DOWNLOADFONT
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), CR);
|
|
if ((pOEM->TextCurPos.x = pOEM->Offset.x) != 0)
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, ESC_XM_ABS, pOEM->TextCurPos.x);
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
// VERBOSE(("** CMD_CR **\n"));
|
|
break;
|
|
|
|
case CMD_LF:
|
|
WRITESPOOLBUF(pdevobj, LF, sizeof(LF)-1);
|
|
break;
|
|
|
|
case CMD_BS:
|
|
WRITESPOOLBUF(pdevobj, BS, sizeof(BS)-1);
|
|
break;
|
|
|
|
case CMD_FF:
|
|
fDoFormFeed = FALSE;
|
|
// If 2in1
|
|
if (TEST_2IN1_MODE(pOEM->fGeneral1))
|
|
{
|
|
// If 2nd page finished
|
|
if (pOEM->Nin1RemainPage)
|
|
{
|
|
pOEM->Nin1RemainPage = 0;
|
|
// Initialize offset
|
|
pOEM->Offset.x = pOEM->BaseOffset.x;
|
|
pOEM->Offset.y = pOEM->BaseOffset.y;
|
|
// Output formfeed command later
|
|
fDoFormFeed = TRUE;
|
|
}
|
|
// If not 2nd page, disable formfeed and increase offset.
|
|
else
|
|
{
|
|
WORD PageSpace, wTmp;
|
|
|
|
pOEM->Nin1RemainPage++;
|
|
// space(dot) between 2pages of 2in1.
|
|
if (BITTEST32(pOEM->fGeneral2, EDGE2EDGE_PRINT)) // @Nov/27/97
|
|
{
|
|
wTmp = BITTEST32(pOEM->fGeneral1, IMGCTRL_2IN1_67)?
|
|
PageSpace_2IN1_67E2E[pOEM->DocPaperID] :
|
|
PAGESPACE_2IN1_100E2E;
|
|
}
|
|
else
|
|
{
|
|
wTmp = BITTEST32(pOEM->fGeneral1, IMGCTRL_2IN1_67)?
|
|
PageSpace_2IN1_67[pOEM->DocPaperID] :
|
|
PAGESPACE_2IN1_100;
|
|
}
|
|
PageSpace = ((WORD)(MASTERUNIT*10)/(WORD)254) * wTmp /
|
|
pOEM->nResoRatio;
|
|
|
|
if (BITTEST32(pOEM->fGeneral1, ORIENT_LANDSCAPE))
|
|
pOEM->Offset.y = pOEM->PageMax.y + pOEM->BaseOffset.y + PageSpace;
|
|
else
|
|
pOEM->Offset.x = pOEM->PageMax.x + pOEM->BaseOffset.x + PageSpace;
|
|
} // 'if (Nin1RemainPage) else' end
|
|
}
|
|
// If 4in1
|
|
else if (TEST_4IN1_MODE(pOEM->fGeneral1)) // OLD MF do not support this
|
|
{
|
|
switch (++pOEM->Nin1RemainPage) // bug fix @Jan/20/99
|
|
{
|
|
default: // If illegal, treat as 1st page finished.
|
|
pOEM->Nin1RemainPage = 1;
|
|
pOEM->Offset.y = pOEM->BaseOffset.y;
|
|
case 1:
|
|
pOEM->Offset.x = pOEM->PageMax.x + pOEM->BaseOffset.x;
|
|
break;
|
|
case 2:
|
|
pOEM->Offset.x = pOEM->BaseOffset.x;
|
|
pOEM->Offset.y = pOEM->PageMax.y + pOEM->BaseOffset.y;
|
|
break;
|
|
case 3:
|
|
pOEM->Offset.x = pOEM->PageMax.x + pOEM->BaseOffset.x;
|
|
break;
|
|
case 4: // 4th page finished
|
|
pOEM->Nin1RemainPage = 0;
|
|
// Initialize offset
|
|
pOEM->Offset.x = pOEM->BaseOffset.x;
|
|
pOEM->Offset.y = pOEM->BaseOffset.y;
|
|
// Output formfeed command later
|
|
fDoFormFeed = TRUE;
|
|
break;
|
|
}
|
|
}
|
|
// Usual case (non Nin1 mode)
|
|
else
|
|
{
|
|
// Output formfeed command later
|
|
fDoFormFeed = TRUE;
|
|
} // 'if (TEST_2IN1_MODE) else if (TEST_4IN1_MODE) else' end
|
|
|
|
BITCLR32(pOEM->fGeneral1, TEXT_CLIP_VALID);
|
|
|
|
if (fDoFormFeed)
|
|
{
|
|
if (BITTEST32(pOEMExtra->fUiOption, ENABLE_TOMBO)) // @Sep/14/98
|
|
DrawTOMBO(pdevobj, DRAW_TOMBO);
|
|
|
|
WRITESPOOLBUF(pdevobj, FF, sizeof(FF)-1); // moved here @Sep/14/98
|
|
|
|
// SPEC of RPDL
|
|
// Because RPDL's formfeed resets font status(vertical-text, bold, italic,
|
|
// white-text and TextMode clipping), we must output these commands again.
|
|
if (BITTEST32(pOEM->fGeneral1, FONT_VERTICAL_ON))
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), ESC_VERT_ON);
|
|
if (BITTEST32(pOEM->fGeneral1, FONT_BOLD_ON))
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, ESC_BOLD_ON);
|
|
if (BITTEST32(pOEM->fGeneral1, FONT_ITALIC_ON))
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, ESC_ITALIC_ON);
|
|
if (BITTEST32(pOEM->fGeneral1, FONT_WHITETEXT_ON))
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, ESC_WHITETEXT_ON);
|
|
} // 'if (fDoFormFeed)' end
|
|
|
|
// Reset coordinate x&y
|
|
pOEM->TextCurPos.x = pOEM->Offset.x;
|
|
pOEM->TextCurPos.y = pOEM->Offset.y;
|
|
// SPEC of Unidrv5 & RPDL @Aug/14/98
|
|
// Unidrv5 doesn't order to set coordinate x,y to 0 after returning iRet=0,
|
|
// and RPDL doesn't reset coordinate y of SEND_BLOCK after initializing
|
|
// printer.
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, ESC_XM_ABS, pOEM->TextCurPos.x);
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, ESC_YM_ABS, pOEM->TextCurPos.y);
|
|
// reset coordinate y without page_length adjustment, too.
|
|
pOEM->TextCurPosRealY = pOEM->TextCurPos.y;
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
break;
|
|
|
|
|
|
case CMD_FONT_BOLD_ON:
|
|
if (!BITTEST32(pOEM->fGeneral1, FONT_BOLD_ON)) // add @Jan/28/99
|
|
{
|
|
BITSET32(pOEM->fGeneral1, FONT_BOLD_ON);
|
|
WRITESPOOLBUF(pdevobj, ESC_BOLD_ON, sizeof(ESC_BOLD_ON)-1);
|
|
}
|
|
break;
|
|
|
|
case CMD_FONT_BOLD_OFF:
|
|
if (BITTEST32(pOEM->fGeneral1, FONT_BOLD_ON)) // add @Jan/28/99
|
|
{
|
|
BITCLR32(pOEM->fGeneral1, FONT_BOLD_ON);
|
|
WRITESPOOLBUF(pdevobj, ESC_BOLD_OFF, sizeof(ESC_BOLD_OFF)-1);
|
|
}
|
|
break;
|
|
|
|
case CMD_FONT_ITALIC_ON:
|
|
if (!BITTEST32(pOEM->fGeneral1, FONT_ITALIC_ON)) // add @Jan/28/99
|
|
{
|
|
BITSET32(pOEM->fGeneral1, FONT_ITALIC_ON);
|
|
WRITESPOOLBUF(pdevobj, ESC_ITALIC_ON, sizeof(ESC_ITALIC_ON)-1);
|
|
}
|
|
break;
|
|
|
|
case CMD_FONT_ITALIC_OFF:
|
|
if (BITTEST32(pOEM->fGeneral1, FONT_ITALIC_ON)) // add @Jan/28/99
|
|
{
|
|
BITCLR32(pOEM->fGeneral1, FONT_ITALIC_ON);
|
|
WRITESPOOLBUF(pdevobj, ESC_ITALIC_OFF, sizeof(ESC_ITALIC_OFF)-1);
|
|
}
|
|
break;
|
|
|
|
case CMD_FONT_WHITETEXT_ON:
|
|
BITSET32(pOEM->fGeneral1, FONT_WHITETEXT_ON);
|
|
WRITESPOOLBUF(pdevobj, ESC_WHITETEXT_ON, sizeof(ESC_WHITETEXT_ON)-1);
|
|
break;
|
|
|
|
case CMD_FONT_WHITETEXT_OFF:
|
|
BITCLR32(pOEM->fGeneral1, FONT_WHITETEXT_ON);
|
|
WRITESPOOLBUF(pdevobj, ESC_WHITETEXT_OFF, sizeof(ESC_WHITETEXT_OFF)-1);
|
|
break;
|
|
|
|
|
|
#ifdef DOWNLOADFONT
|
|
case CMD_DL_SET_FONT_ID: // pdwParams:FontHeight
|
|
// OBSOLETE @Nov/20/98 ->
|
|
// pOEM->DLFontH_MU = (WORD)*pdwParams; // @Jun/30/98
|
|
// @Nov/20/98 <-
|
|
break;
|
|
|
|
case CMD_DL_SELECT_FONT_ID:
|
|
// OBSOLETE @Jun/30/98 ->
|
|
// pOEM->DLFontCurID = (WORD)*pdwParams; // CurrentFontID
|
|
// @Jun/30/98 <-
|
|
break;
|
|
|
|
case CMD_DL_SET_FONT_GLYPH: // pdwParams:NextGlyph
|
|
// VERBOSE(("[DL_SET_FONT_GLYPH] glyph=%d\n", (SHORT)*pdwParams));
|
|
pOEM->DLFontCurGlyph = (WORD)*pdwParams;
|
|
break;
|
|
|
|
//
|
|
// Following cases are called at the beginning of a print-job
|
|
//
|
|
case CMD_SET_MEM0KB: // JOB_SETUP.10 @Jan/14/98
|
|
pOEM->DLFontMaxMemKB = 0; // disabled
|
|
pOEM->pDLFontGlyphInfo = NULL; // @Sep/08/98
|
|
break;
|
|
|
|
case CMD_SET_MEM128KB:
|
|
pOEM->DLFontMaxMemKB = MEM128KB; // 128Kbytes
|
|
pOEM->DLFontMaxID = DLFONT_ID_4; // 2->4 @Oct/20/98
|
|
goto _SET_MEM_ENABLE;
|
|
|
|
case CMD_SET_MEM256KB:
|
|
pOEM->DLFontMaxMemKB = MEM256KB; // 256Kbytes
|
|
pOEM->DLFontMaxID = DLFONT_ID_8; // 4->8 @Oct/20/98
|
|
goto _SET_MEM_ENABLE;
|
|
|
|
case CMD_SET_MEM512KB:
|
|
pOEM->DLFontMaxMemKB = MEM512KB; // 512Kbytes
|
|
pOEM->DLFontMaxID = DLFONT_ID_16; // 8->16 @Oct/20/98
|
|
// goto _SET_MEM_ENABLE;
|
|
|
|
_SET_MEM_ENABLE: // @Sep/08/98
|
|
pOEM->DLFontMaxGlyph = DLFONT_GLYPH_TOTAL; // 116->70 @Oct/20/98
|
|
// allocate glyph info structure for TrueType download.
|
|
// fix memory leak @Nov/22/2002 ->
|
|
// if already allocated, exit
|
|
if(pOEM->pDLFontGlyphInfo)
|
|
break;
|
|
// @Nov/22/2002 <-
|
|
if(!(pOEM->pDLFontGlyphInfo = (FONTPOS*)MemAllocZ(pOEM->DLFontMaxID *
|
|
pOEM->DLFontMaxGlyph *
|
|
sizeof(FONTPOS))))
|
|
{
|
|
pOEM->DLFontMaxMemKB = 0; // disabled
|
|
}
|
|
break;
|
|
#endif // DOWNLOADFONT
|
|
|
|
case CMD_SELECT_STAPLE_NONE: // JOB_SETUP.20 @Dec/02/97
|
|
pOEM->StapleType = 0;
|
|
break;
|
|
|
|
case CMD_SELECT_STAPLE_1:
|
|
pOEM->StapleType = 1;
|
|
break;
|
|
|
|
case CMD_SELECT_STAPLE_2:
|
|
pOEM->StapleType = 2;
|
|
break;
|
|
|
|
case CMD_SELECT_STAPLE_MAX1: // @Mar/18/99
|
|
pOEM->StapleType = 3; // stapling with FinisherSR12(max 1staple)
|
|
break;
|
|
|
|
case CMD_SELECT_PUNCH_NONE: // JOB_SETUP.30 @Dec/02/97
|
|
pOEM->PunchType = 0;
|
|
break;
|
|
|
|
case CMD_SELECT_PUNCH_1:
|
|
pOEM->PunchType = 1;
|
|
break;
|
|
|
|
|
|
case CMD_BEGINDOC_SP4II: // SP4mkII,5
|
|
pOEM->fModel = 0;
|
|
BITSET32(pOEM->fModel, GRP_SP4II);
|
|
// Set Emulation:RPDL, Code:SJIS
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), BEGINDOC1);
|
|
// Set Graphics:KAN-I G, Page-Length:max
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, BEGINDOC2_1);
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
goto _BEGINDOC_FINISH2; // @Sep/09/98;
|
|
|
|
case CMD_BEGINDOC_MF530: // MF530
|
|
pOEM->fModel = 0;
|
|
BITSET32(pOEM->fModel, GRP_MF530);
|
|
// Set Emulation:RPDL, Code:SJIS
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), BEGINDOC1);
|
|
// Set Page-Length:max
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, BEGINDOC2_2);
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
goto _BEGINDOC_FINISH2; // @Sep/09/98;
|
|
|
|
case CMD_BEGINDOC_MF150: // MF150
|
|
pOEM->fModel = 0;
|
|
BITSET32(pOEM->fModel, GRP_MF150);
|
|
goto _BEGINDOC_FINISH1;
|
|
|
|
case CMD_BEGINDOC_MF150E: // MF150e,160
|
|
pOEM->fModel = 0;
|
|
BITSET32(pOEM->fModel, GRP_MF150E);
|
|
goto _BEGINDOC_FINISH1;
|
|
|
|
case CMD_BEGINDOC_SP8: // SP8(7),8(7)mkII,80
|
|
pOEM->fModel = 0;
|
|
BITSET32(pOEM->fModel, GRP_SP8);
|
|
goto _BEGINDOC_FINISH1;
|
|
|
|
case CMD_BEGINDOC_MFP250: // MF-P250,355,250(FAX),355(FAX),MF-FD355,MF-P250e,355e
|
|
pOEM->fModel = 0;
|
|
BITSET32(pOEM->fModel, GRP_MFP250);
|
|
goto _BEGINDOC_FINISH1;
|
|
|
|
case CMD_BEGINDOC_SP10: // SP10,10mkII
|
|
pOEM->fModel = 0;
|
|
BITSET32(pOEM->fModel, GRP_SP10);
|
|
goto _BEGINDOC_FINISH1;
|
|
|
|
case CMD_BEGINDOC_SP9: // SP9,10Pro
|
|
pOEM->fModel = 0;
|
|
BITSET32(pOEM->fModel, GRP_SP9);
|
|
goto _BEGINDOC_FINISH1;
|
|
|
|
case CMD_BEGINDOC_SP9II: // SP9II,10ProII,90
|
|
pOEM->fModel = 0;
|
|
BITSET32(pOEM->fModel, GRP_SP9II);
|
|
goto _BEGINDOC_FINISH1;
|
|
|
|
case CMD_BEGINDOC_MF200: // MF200,MF-p150,MF2200
|
|
pOEM->fModel = 0; // (separate BEGINDOC_SP9II @Sep/01/98)
|
|
BITSET32(pOEM->fModel, GRP_MF200);
|
|
goto _BEGINDOC_FINISH1;
|
|
|
|
case CMD_BEGINDOC_NX100: // NX-100
|
|
pOEM->fModel = 0;
|
|
// not support IBM extended character block
|
|
BITSET32(pOEM->fModel, GRP_NX100);
|
|
goto _BEGINDOC_FINISH1;
|
|
|
|
case CMD_BEGINDOC_NX500: // NX-500,1000,110,210,510,1100
|
|
pOEM->fModel = 0;
|
|
// TT font download capable
|
|
BITSET32(pOEM->fModel, GRP_NX500);
|
|
goto _BEGINDOC_FINISH1;
|
|
|
|
// OBSOLETE @Apr/15/99
|
|
// case CMD_BEGINDOC_MFP250E: // MF-P250e,355e
|
|
// pOEM->fModel = 0;
|
|
// BITSET32(pOEM->fModel, GRP_MFP250E);
|
|
// goto _BEGINDOC_FINISH1;
|
|
|
|
case CMD_BEGINDOC_MF250M: // MF250M
|
|
// staple capable
|
|
pOEM->fModel = 0;
|
|
BITSET32(pOEM->fModel, GRP_MF250M);
|
|
goto _BEGINDOC_FINISH1;
|
|
|
|
case CMD_BEGINDOC_MF3550: // MF2700,3500,3550,4550,5550,6550,3530,3570,4570,5550EX,6550EX,1530
|
|
// staple & punch & media type option
|
|
pOEM->fModel = 0;
|
|
BITSET32(pOEM->fModel, GRP_MF3550);
|
|
goto _BEGINDOC_FINISH1;
|
|
|
|
case CMD_BEGINDOC_MF3530E: // MF3530e,3570e,4570e,5570,7070,8570,105Pro @Jun/25/2001
|
|
// Job define command is needed for staple
|
|
pOEM->fModel = 0;
|
|
BITSET32(pOEM->fModel, GRP_MF3530E);
|
|
goto _BEGINDOC_FINISH1;
|
|
|
|
case CMD_BEGINDOC_MF3300: // MF3300W,3350W,3540W,3580W
|
|
pOEM->fModel = 0;
|
|
// A2 printer
|
|
BITSET32(pOEM->fModel, GRP_MF3300);
|
|
goto _BEGINDOC_FINISH1;
|
|
|
|
case CMD_BEGINDOC_IP1: // IP-1
|
|
pOEM->fModel = 0;
|
|
// A1 plotter
|
|
BITSET32(pOEM->fModel, GRP_IP1);
|
|
goto _BEGINDOC_FINISH1;
|
|
|
|
case CMD_BEGINDOC_NX70: // NX70,71 @Feb/04/98
|
|
pOEM->fModel = 0;
|
|
// A4 printer, FE-DeltaRow
|
|
BITSET32(pOEM->fModel, GRP_NX70); // BITSET->BITSET32 @Jun/01/98
|
|
goto _BEGINDOC_FINISH1;
|
|
|
|
case CMD_BEGINDOC_NX700: // NX700,600,FAX Printer,MF700 @Jun/12/98
|
|
pOEM->fModel = 0;
|
|
// FE-DeltaRow
|
|
BITSET32(pOEM->fModel, GRP_NX700);
|
|
goto _BEGINDOC_FINISH1;
|
|
|
|
case CMD_BEGINDOC_NX900: // NX900 @Jan/08/99
|
|
pOEM->fModel = 0;
|
|
// Job define command is needed for shifted collate
|
|
BITSET32(pOEM->fModel, GRP_NX900);
|
|
goto _BEGINDOC_FINISH1;
|
|
|
|
case CMD_BEGINDOC_NX800: // NX800,910,810,MF2230,2730 @Mar/03/99, remove MF1530 @Jun/25/2001
|
|
pOEM->fModel = 0;
|
|
// Job define command is needed for staple
|
|
BITSET32(pOEM->fModel, GRP_NX800);
|
|
goto _BEGINDOC_FINISH1;
|
|
|
|
case CMD_BEGINDOC_NX710: // NX710,610 @Jun/23/2000
|
|
pOEM->fModel = 0;
|
|
// FE-DeltaRow & media type option (& variable scaling bug)
|
|
BITSET32(pOEM->fModel, GRP_NX710);
|
|
goto _BEGINDOC_FINISH1;
|
|
|
|
case CMD_BEGINDOC_NX720: // NX620,620N,720N,Neo350,350D,450,220,270 @Sep/26/2000
|
|
pOEM->fModel = 0;
|
|
// FE-DeltaRow & media type option (GW model)
|
|
BITSET32(pOEM->fModel, GRP_NX720);
|
|
// goto _BEGINDOC_FINISH1;
|
|
|
|
_BEGINDOC_FINISH1:
|
|
// Jun/29/2001 ->
|
|
pOEM->FinisherTrayNum = 1;
|
|
// set Emulation:RPDL
|
|
if (TEST_NEED_JOBDEF_CMD(pOEM->fModel))
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), BEGINDOC_TOP_JOBDEF); // with Job define command
|
|
else
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), BEGINDOC_TOP); // without Job define command
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
ocmd = 0;
|
|
// Jun/29/2001 <-
|
|
|
|
if (BITTEST32(pOEMExtra->fUiOption, FAX_MODEL))
|
|
SendFaxNum(pdevobj);
|
|
// Set Code:SJIS
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), BEGINDOC1_2); // <-BEGINDOC1 @Jun/25/2001
|
|
// Set Graphics:KAN-I G, Page-Length:max
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, BEGINDOC2_1);
|
|
// Set Duplex:off
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, BEGINDOC3);
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
#ifdef DOWNLOADFONT
|
|
pOEM->dwDLFontUsedMem = 0;
|
|
if (pOEM->DLFontMaxMemKB)
|
|
{
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), DLFONT_MALLOC, pOEM->DLFontMaxMemKB, DLFONT_MIN_BLOCK_ID);
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
}
|
|
#endif // DOWNLOADFONT
|
|
|
|
_BEGINDOC_FINISH2: // @Sep/09/98
|
|
// Allocate heap memory for bOEMOutputCharStr&OEMDownloadCharGlyph.
|
|
// fix memory leak @Nov/22/2002 ->
|
|
// if already allocated, exit
|
|
if(pOEM->pRPDLHeap2K)
|
|
break;
|
|
// @Nov/22/2002 <-
|
|
pOEM->pRPDLHeap2K = (PBYTE)MemAllocZ(HEAPSIZE2K);
|
|
break;
|
|
|
|
|
|
case CMD_SET_BASEOFFSETX_0: // @May/07/98
|
|
case CMD_SET_BASEOFFSETX_1:
|
|
case CMD_SET_BASEOFFSETX_2:
|
|
case CMD_SET_BASEOFFSETX_3:
|
|
case CMD_SET_BASEOFFSETX_4:
|
|
case CMD_SET_BASEOFFSETX_5:
|
|
pOEM->BaseOffset.x = (LONG)(dwCmdCbID - CMD_SET_BASEOFFSETX_0);
|
|
break;
|
|
|
|
case CMD_SET_BASEOFFSETY_0: // @May/07/98
|
|
case CMD_SET_BASEOFFSETY_1:
|
|
case CMD_SET_BASEOFFSETY_2:
|
|
case CMD_SET_BASEOFFSETY_3:
|
|
case CMD_SET_BASEOFFSETY_4:
|
|
case CMD_SET_BASEOFFSETY_5:
|
|
pOEM->BaseOffset.y = (LONG)(dwCmdCbID - CMD_SET_BASEOFFSETY_0);
|
|
break;
|
|
|
|
|
|
case CMD_RES240:
|
|
pOEM->fGeneral1 = pOEM->fGeneral2 = 0;
|
|
pOEM->nResoRatio = MASTERUNIT/240;
|
|
// Set Options[duplex/2in1:off,reversed_output:on,sort/stack:off]
|
|
if (!BITTEST32(pOEM->fModel, GRP_SP4II))
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), IMAGE_OPT_OFF);
|
|
// Set Spacing_Unit:1/240inch
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, SELECT_RES240_1);
|
|
if (TEST_AFTER_SP10(pOEM->fModel)) // SP10,9,etc
|
|
// Set Graphics_Unit & Coordinate_Unit:1/240inch,Engine_Resolution:240dpi
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, SELECT_RES240_2);
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
break;
|
|
|
|
case CMD_RES400:
|
|
pOEM->fGeneral1 = pOEM->fGeneral2 = 0;
|
|
pOEM->nResoRatio = MASTERUNIT/400;
|
|
// Set Spacing_Unit & Graphics_Unit:1/400inch
|
|
// & Options[duplex/2in1:off,reversed_output:on,sort/stack:off]
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), SELECT_RES400_1);
|
|
if (!BITTEST32(pOEM->fModel, GRP_MF530))
|
|
{
|
|
// Set Engine_Resolution:400dpi
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, SELECT_RES400_2);
|
|
if (TEST_AFTER_SP10(pOEM->fModel) ||
|
|
BITTEST32(pOEM->fModel, GRP_MF150E)) // MF150e,160
|
|
{
|
|
// Set Coordinate_Unit:1/400inch
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, SELECT_RES400_3);
|
|
}
|
|
}
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
break;
|
|
|
|
case CMD_RES600:
|
|
pOEM->fGeneral1 = pOEM->fGeneral2 = 0;
|
|
pOEM->nResoRatio = MASTERUNIT/600;
|
|
#ifdef DOWNLOADFONT
|
|
// If non-DRC&&600dpi then make it half. @Jun/15/98
|
|
if (!TEST_CAPABLE_DOWNLOADFONT_DRC(pOEM->fModel))
|
|
pOEM->DLFontMaxID /= 2;
|
|
#endif // DOWNLOADFONT
|
|
// Set Spacing_Unit & Graphics_Unit & Coordinate_Unit:1/600inch,
|
|
// Engine_Resolution:600dpi
|
|
// & Options[duplex/2in1:off,reversed_output:on,sort/stack:off]
|
|
WRITESPOOLBUF(pdevobj, SELECT_RES600, sizeof(SELECT_RES600)-1);
|
|
break;
|
|
|
|
case CMD_RES1200: // @Mar/02/99
|
|
pOEM->fGeneral1 = pOEM->fGeneral2 = 0;
|
|
pOEM->nResoRatio = MASTERUNIT/1200;
|
|
#ifdef DOWNLOADFONT
|
|
pOEM->DLFontMaxID /= 2;
|
|
#endif // DOWNLOADFONT
|
|
// Set Spacing_Unit & Graphics_Unit & Coordinate_Unit:1/1200inch,
|
|
// Engine_Resolution:1200dpi
|
|
// & Options[duplex/2in1:off,reversed_output:on,sort/stack:off]
|
|
WRITESPOOLBUF(pdevobj, SELECT_RES1200, sizeof(SELECT_RES1200)-1);
|
|
break;
|
|
|
|
|
|
case CMD_REGION_STANDARD: // @Nov/29/97
|
|
BITCLR32(pOEM->fGeneral2, EDGE2EDGE_PRINT);
|
|
if (BITTEST32(pOEMExtra->fUiOption, ENABLE_TOMBO)) // @Sep/15/98
|
|
WRITESPOOLBUF(pdevobj, SELECT_REGION_E2E, sizeof(SELECT_REGION_E2E)-1);
|
|
else
|
|
WRITESPOOLBUF(pdevobj, SELECT_REGION_STD, sizeof(SELECT_REGION_STD)-1);
|
|
break;
|
|
|
|
case CMD_REGION_EDGE2EDGE: // @Nov/29/97
|
|
BITSET32(pOEM->fGeneral2, EDGE2EDGE_PRINT);
|
|
WRITESPOOLBUF(pdevobj, SELECT_REGION_E2E, sizeof(SELECT_REGION_E2E)-1);
|
|
break;
|
|
|
|
|
|
case CMD_IMGCTRL_100:
|
|
if (pOEMExtra->UiScale != VAR_SCALING_DEFAULT) // @Feb/06/98
|
|
{
|
|
pOEM->Scale = pOEMExtra->UiScale; // @Mar/18/98
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), IMAGE_SCALING_VAR, pOEM->Scale);
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
BITSET32(pOEM->fGeneral1, VARIABLE_SCALING_VALID); // @Jan/27/2000
|
|
break;
|
|
}
|
|
pOEM->Scale = 100; // @Mar/18/98
|
|
WRITESPOOLBUF(pdevobj, IMAGE_SCALING_100, sizeof(IMAGE_SCALING_100)-1);
|
|
break;
|
|
|
|
case CMD_IMGCTRL_88:
|
|
pOEM->Scale = 88; // @Mar/18/98
|
|
WRITESPOOLBUF(pdevobj, IMAGE_SCALING_88, sizeof(IMAGE_SCALING_88)-1);
|
|
break;
|
|
|
|
case CMD_IMGCTRL_80:
|
|
pOEM->Scale = 80; // @Mar/18/98
|
|
WRITESPOOLBUF(pdevobj, IMAGE_SCALING_80, sizeof(IMAGE_SCALING_80)-1);
|
|
break;
|
|
|
|
case CMD_IMGCTRL_75:
|
|
pOEM->Scale = 75; // @Mar/18/98
|
|
WRITESPOOLBUF(pdevobj, IMAGE_SCALING_75, sizeof(IMAGE_SCALING_75)-1);
|
|
break;
|
|
|
|
case CMD_IMGCTRL_70:
|
|
pOEM->Scale = 70; // @Mar/18/98
|
|
WRITESPOOLBUF(pdevobj, IMAGE_SCALING_70, sizeof(IMAGE_SCALING_70)-1);
|
|
break;
|
|
|
|
case CMD_IMGCTRL_67:
|
|
pOEM->Scale = 67; // @Mar/18/98
|
|
WRITESPOOLBUF(pdevobj, IMAGE_SCALING_67, sizeof(IMAGE_SCALING_67)-1);
|
|
break;
|
|
|
|
case CMD_IMGCTRL_115:
|
|
pOEM->Scale = 115;
|
|
WRITESPOOLBUF(pdevobj, IMAGE_SCALING_115, sizeof(IMAGE_SCALING_115)-1);
|
|
break;
|
|
|
|
case CMD_IMGCTRL_122:
|
|
pOEM->Scale = 122; // @Mar/18/98
|
|
if (TEST_PLOTTERMODEL_SCALING(pOEM->fModel))
|
|
{
|
|
WRITESPOOLBUF(pdevobj, IMAGE_SCALING_122, sizeof(IMAGE_SCALING_122)-1);
|
|
}
|
|
else
|
|
{
|
|
WRITESPOOLBUF(pdevobj, IMAGE_SCALING_122V, sizeof(IMAGE_SCALING_122V)-1);
|
|
BITSET32(pOEM->fGeneral1, VARIABLE_SCALING_VALID); // @Jan/27/2000
|
|
}
|
|
break;
|
|
|
|
case CMD_IMGCTRL_141:
|
|
pOEM->Scale = 141; // @Mar/18/98
|
|
if (TEST_PLOTTERMODEL_SCALING(pOEM->fModel))
|
|
{
|
|
WRITESPOOLBUF(pdevobj, IMAGE_SCALING_141, sizeof(IMAGE_SCALING_141)-1);
|
|
}
|
|
else
|
|
{
|
|
WRITESPOOLBUF(pdevobj, IMAGE_SCALING_141V, sizeof(IMAGE_SCALING_141V)-1);
|
|
BITSET32(pOEM->fGeneral1, VARIABLE_SCALING_VALID); // @Jan/27/2000
|
|
}
|
|
break;
|
|
|
|
case CMD_IMGCTRL_200:
|
|
pOEM->Scale = 200; // @Mar/18/98
|
|
if (TEST_PLOTTERMODEL_SCALING(pOEM->fModel))
|
|
{
|
|
WRITESPOOLBUF(pdevobj, IMAGE_SCALING_200, sizeof(IMAGE_SCALING_200)-1);
|
|
}
|
|
else
|
|
{
|
|
WRITESPOOLBUF(pdevobj, IMAGE_SCALING_200V, sizeof(IMAGE_SCALING_200V)-1);
|
|
BITSET32(pOEM->fGeneral1, VARIABLE_SCALING_VALID); // @Jan/27/2000
|
|
}
|
|
break;
|
|
|
|
case CMD_IMGCTRL_50:
|
|
pOEM->Scale = 50; // @Mar/18/98
|
|
WRITESPOOLBUF(pdevobj, IMAGE_SCALING_50V, sizeof(IMAGE_SCALING_50V)-1);
|
|
BITSET32(pOEM->fGeneral1, VARIABLE_SCALING_VALID); // @Jan/27/2000
|
|
break;
|
|
|
|
case CMD_IMGCTRL_AA67: // A->A scaling(67%)
|
|
pOEM->Scale = 67; // @Mar/18/98
|
|
BITSET32(pOEM->fGeneral1, IMGCTRL_AA67);
|
|
WRITESPOOLBUF(pdevobj, IMAGE_SCALING_67, sizeof(IMAGE_SCALING_67)-1);
|
|
break;
|
|
|
|
case CMD_IMGCTRL_BA80: // B->A scaling(80%)
|
|
pOEM->Scale = 80; // @Mar/18/98
|
|
BITSET32(pOEM->fGeneral1, IMGCTRL_BA80);
|
|
WRITESPOOLBUF(pdevobj, IMAGE_SCALING_80, sizeof(IMAGE_SCALING_80)-1);
|
|
break;
|
|
|
|
case CMD_IMGCTRL_BA115: // B->A scaling(115%)
|
|
pOEM->Scale = 115; // @Mar/18/98
|
|
BITSET32(pOEM->fGeneral1, IMGCTRL_BA115);
|
|
WRITESPOOLBUF(pdevobj, IMAGE_SCALING_115, sizeof(IMAGE_SCALING_115)-1);
|
|
break;
|
|
|
|
case CMD_DRV_4IN1_50: // 4in1
|
|
pOEM->Scale = 50; // @Mar/18/98
|
|
BITSET32(pOEM->fGeneral1, IMGCTRL_4IN1_50);
|
|
pOEM->Nin1RemainPage = 0;
|
|
WRITESPOOLBUF(pdevobj, IMAGE_SCALING_50V, sizeof(IMAGE_SCALING_50V)-1);
|
|
BITSET32(pOEM->fGeneral1, VARIABLE_SCALING_VALID); // @Jan/27/2000
|
|
break;
|
|
|
|
case CMD_DRV_2IN1_67: // 2in1
|
|
pOEM->Scale = 67; // @Mar/18/98
|
|
BITSET32(pOEM->fGeneral1, IMGCTRL_2IN1_67);
|
|
pOEM->Nin1RemainPage = 0;
|
|
WRITESPOOLBUF(pdevobj, IMAGE_SCALING_67, sizeof(IMAGE_SCALING_67)-1);
|
|
break;
|
|
|
|
case CMD_DRV_2IN1_100: // 2in1
|
|
pOEM->Scale = 100; // @Mar/18/98
|
|
BITSET32(pOEM->fGeneral1, IMGCTRL_2IN1_100);
|
|
pOEM->Nin1RemainPage = 0;
|
|
WRITESPOOLBUF(pdevobj, IMAGE_SCALING_100, sizeof(IMAGE_SCALING_100)-1);
|
|
break;
|
|
|
|
case CMD_IMGCTRL_AA141: // IP-1,3300W,3350W:A->A scaling(141%)
|
|
pOEM->Scale = 141; // @Mar/18/98
|
|
BITSET32(pOEM->fGeneral1, IMGCTRL_AA141);
|
|
WRITESPOOLBUF(pdevobj, IMAGE_SCALING_141, sizeof(IMAGE_SCALING_141)-1);
|
|
break;
|
|
|
|
case CMD_IMGCTRL_AA200: // IP-1:A->A scaling(200%)
|
|
pOEM->Scale = 200; // @Mar/18/98
|
|
BITSET32(pOEM->fGeneral1, IMGCTRL_AA200);
|
|
WRITESPOOLBUF(pdevobj, IMAGE_SCALING_200, sizeof(IMAGE_SCALING_200)-1);
|
|
break;
|
|
|
|
case CMD_IMGCTRL_AA283: // IP-1:A->A scaling(283%)
|
|
BITSET32(pOEM->fGeneral1, IMGCTRL_AA283);
|
|
case CMD_IMGCTRL_283: // IP-1
|
|
pOEM->Scale = 283; // @Mar/18/98
|
|
WRITESPOOLBUF(pdevobj, IMAGE_SCALING_283, sizeof(IMAGE_SCALING_283)-1);
|
|
break;
|
|
|
|
case CMD_IMGCTRL_A1_400: // IP-1:400% with A1
|
|
BITSET32(pOEM->fGeneral1, IMGCTRL_A1_400);
|
|
case CMD_IMGCTRL_400: // IP-1
|
|
pOEM->Scale = 400; // @Mar/18/98
|
|
WRITESPOOLBUF(pdevobj, IMAGE_SCALING_400, sizeof(IMAGE_SCALING_400)-1);
|
|
break;
|
|
|
|
|
|
case CMD_SET_LANDSCAPE:
|
|
BITSET32(pOEM->fGeneral1, ORIENT_LANDSCAPE);
|
|
break;
|
|
|
|
case CMD_SET_PORTRAIT:
|
|
BITCLR32(pOEM->fGeneral1, ORIENT_LANDSCAPE);
|
|
break;
|
|
|
|
|
|
// OBSOLETE (actually obsoleted at converting GPC to GPD) @Jan/08/99 ->
|
|
// case CMD_DUPLEX_ON:
|
|
// BITSET32(pOEM->fGeneral1, DUPLEX_VALID);
|
|
// break;
|
|
// @Jan/08/99 <-
|
|
|
|
case CMD_DUPLEX_VERT:
|
|
BITSET32(pOEM->fGeneral1, DUPLEX_VALID); // @Jan/08/99
|
|
if (BITTEST32(pOEM->fGeneral1, ORIENT_LANDSCAPE))
|
|
{
|
|
if (!TEST_2IN1_MODE(pOEM->fGeneral1))
|
|
goto _DUP_H;
|
|
}
|
|
else
|
|
{
|
|
if (TEST_2IN1_MODE(pOEM->fGeneral1))
|
|
goto _DUP_H;
|
|
}
|
|
_DUP_V:
|
|
if (pOEMExtra->UiBindMargin)
|
|
{
|
|
BITSET32(pOEM->fGeneral1, DUPLEX_LEFTMARGIN_VALID);
|
|
// Convert mm to 5mm_unit(2=5mm,3=10mm,...,11=50mm)
|
|
nTmp = (pOEMExtra->UiBindMargin + 4) / 5 + 1;
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), SET_LEFTMARGIN, nTmp);
|
|
// SP9II(except 1st lot),10ProII can set binding margin every 1 mm
|
|
if (TEST_AFTER_SP9II(pOEM->fModel))
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, SET_LEFTMARGIN_9II, pOEMExtra->UiBindMargin);
|
|
}
|
|
if (BITTEST32(pOEMExtra->fUiOption, ENABLE_BIND_RIGHT))
|
|
{
|
|
pOEM->BindPoint = BIND_RIGHT;
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, DUPLEX_VERT_R);
|
|
}
|
|
else
|
|
{
|
|
pOEM->BindPoint = BIND_LEFT;
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, DUPLEX_VERT);
|
|
}
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, DUPLEX_ON);
|
|
// DCR @Jan/27/2000 ->
|
|
// Emit IMAGE_SCALING_xxxV here, because DUPLEX_VERT resets IMAGE_SCALING_xxxV
|
|
if (BITTEST32(pOEM->fGeneral1, VARIABLE_SCALING_VALID));
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, IMAGE_SCALING_VAR, pOEM->Scale);
|
|
// @Jan/27/2000 <-
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
break;
|
|
|
|
case CMD_DUPLEX_HORZ:
|
|
BITSET32(pOEM->fGeneral1, DUPLEX_VALID); // @Jan/08/99
|
|
if (BITTEST32(pOEM->fGeneral1, ORIENT_LANDSCAPE))
|
|
{
|
|
if (!TEST_2IN1_MODE(pOEM->fGeneral1))
|
|
goto _DUP_V;
|
|
}
|
|
else
|
|
{
|
|
if (TEST_2IN1_MODE(pOEM->fGeneral1))
|
|
goto _DUP_V;
|
|
}
|
|
_DUP_H:
|
|
if (pOEMExtra->UiBindMargin)
|
|
{
|
|
BITSET32(pOEM->fGeneral1, DUPLEX_UPPERMARGIN_VALID);
|
|
nTmp = (pOEMExtra->UiBindMargin + 4) / 5 + 1;
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), SET_UPPERMARGIN, nTmp);
|
|
if (TEST_AFTER_SP9II(pOEM->fModel))
|
|
{
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, SET_UPPERMARGIN_9II, pOEMExtra->UiBindMargin);
|
|
}
|
|
}
|
|
pOEM->BindPoint = BIND_UPPER;
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, DUPLEX_HORZ);
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, DUPLEX_ON);
|
|
// DCR @Jan/27/2000 ->
|
|
// Emit IMAGE_SCALING_xxxV here, because DUPLEX_HORZ resets IMAGE_SCALING_xxxV
|
|
if (BITTEST32(pOEM->fGeneral1, VARIABLE_SCALING_VALID));
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, IMAGE_SCALING_VAR, pOEM->Scale);
|
|
// @Jan/27/2000 <-
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
break;
|
|
|
|
|
|
case CMD_MEDIATYPE_STANDARD:
|
|
pOEM->MediaType = MEDIATYPE_STD; // use pOEM->MediaType @Mar/03/99
|
|
break;
|
|
|
|
case CMD_MEDIATYPE_OHP:
|
|
pOEM->MediaType = MEDIATYPE_OHP;
|
|
break;
|
|
|
|
case CMD_MEDIATYPE_THICK:
|
|
pOEM->MediaType = MEDIATYPE_THICK;
|
|
break;
|
|
|
|
case CMD_MEDIATYPE_SPL: // since MF1530 @Mar/03/99
|
|
pOEM->MediaType = MEDIATYPE_SPL;
|
|
break;
|
|
|
|
case CMD_MEDIATYPE_TRACE: // since MF5570 @Feb/15/2000
|
|
pOEM->MediaType = MEDIATYPE_TRACE;
|
|
break;
|
|
|
|
case CMD_MEDIATYPE_LABEL: // since Neo450 @Oct/12/2000
|
|
pOEM->MediaType = MEDIATYPE_LABEL;
|
|
break;
|
|
|
|
case CMD_MEDIATYPE_THIN: // since Neo270 @Feb/05/2001
|
|
pOEM->MediaType = MEDIATYPE_THIN;
|
|
break;
|
|
|
|
case CMD_SELECT_PAPER_A2:
|
|
pOEM->DocPaperID = RPDL_A2;
|
|
// If A->A(67%), scale down papersize.
|
|
if (BITTEST32(pOEM->fGeneral1, IMGCTRL_AA67))
|
|
lpcmd = SELECT_PAPER_A3;
|
|
else
|
|
lpcmd = SELECT_PAPER_A2;
|
|
// Store papername to buffer
|
|
pOEM->RPDLHeapCount = (WORD)safe_sprintfA(pOEM->RPDLHeap64, sizeof(pOEM->RPDLHeap64), lpcmd);
|
|
// Because incapable, clear setting
|
|
if (TEST_NIN1_MODE(pOEM->fGeneral1) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_BA80) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_BA115) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_AA141) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_AA200) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_AA283) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_A1_400))
|
|
{
|
|
goto _IMGCTRL_OFF1;
|
|
}
|
|
break;
|
|
|
|
case CMD_SELECT_PAPER_A3:
|
|
pOEM->DocPaperID = RPDL_A3;
|
|
// If able to select tray with "papername+X" && no staple && no punch
|
|
fPaperX = (TEST_CAPABLE_PAPERX(pOEM->fModel) && !pOEM->StapleType &&
|
|
!pOEM->PunchType)? TRUE : FALSE;
|
|
// If TOMBO is enabled, scale up papersize. @Sep/14/98
|
|
if (BITTEST32(pOEMExtra->fUiOption, ENABLE_TOMBO) &&
|
|
TEST_CAPABLE_PAPER_A2(pOEM->fModel))
|
|
{
|
|
lpcmd = SELECT_PAPER_B3;
|
|
pOEM->RPDLHeapCount = (WORD)safe_sprintfA(pOEM->RPDLHeap64, sizeof(pOEM->RPDLHeap64), lpcmd);
|
|
goto _IMGCTRL_OFF1;
|
|
}
|
|
// If A->A(67%), scale down papersize.
|
|
if (BITTEST32(pOEM->fGeneral1, IMGCTRL_AA67))
|
|
lpcmd = (fPaperX)? SELECT_PAPER_A4X : SELECT_PAPER_A4W;
|
|
// If A->A(141%), scale up papersize.
|
|
else if (BITTEST32(pOEM->fGeneral1, IMGCTRL_AA141))
|
|
lpcmd = SELECT_PAPER_A2;
|
|
// If A->A(200%) || A1(400%), scale up papersize.
|
|
else if (BITTEST32(pOEM->fGeneral1, IMGCTRL_AA200) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_A1_400))
|
|
lpcmd = SELECT_PAPER_A1;
|
|
else
|
|
lpcmd = SELECT_PAPER_A3;
|
|
// Store papername to buffer
|
|
pOEM->RPDLHeapCount = (WORD)safe_sprintfA(pOEM->RPDLHeap64, sizeof(pOEM->RPDLHeap64), lpcmd);
|
|
// Because incapable, clear setting
|
|
if (BITTEST32(pOEM->fGeneral1, IMGCTRL_2IN1_100) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_BA80) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_BA115) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_AA283))
|
|
{
|
|
goto _IMGCTRL_OFF1;
|
|
}
|
|
break;
|
|
|
|
case CMD_SELECT_PAPER_A4:
|
|
pOEM->DocPaperID = RPDL_A4;
|
|
fPaperX = (TEST_CAPABLE_PAPERX(pOEM->fModel) && !pOEM->StapleType &&
|
|
!pOEM->PunchType)? TRUE : FALSE;
|
|
// If TOMBO is enabled, scale up papersize. @Sep/14/98
|
|
if (BITTEST32(pOEMExtra->fUiOption, ENABLE_TOMBO))
|
|
{
|
|
lpcmd = SELECT_PAPER_B4;
|
|
pOEM->RPDLHeapCount = (WORD)safe_sprintfA(pOEM->RPDLHeap64, sizeof(pOEM->RPDLHeap64), lpcmd);
|
|
goto _IMGCTRL_OFF1;
|
|
}
|
|
// If 2in1(100%), scale up papersize.
|
|
if (BITTEST32(pOEM->fGeneral1, IMGCTRL_2IN1_100) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_AA141))
|
|
lpcmd = SELECT_PAPER_A3;
|
|
// If A->A(67%), scale down papersize.
|
|
else if (BITTEST32(pOEM->fGeneral1, IMGCTRL_AA67))
|
|
lpcmd = (fPaperX)? SELECT_PAPER_A5X : SELECT_PAPER_A5W;
|
|
else if (BITTEST32(pOEM->fGeneral1, IMGCTRL_AA200))
|
|
lpcmd = SELECT_PAPER_A2;
|
|
else if (BITTEST32(pOEM->fGeneral1, IMGCTRL_AA283) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_A1_400))
|
|
lpcmd = SELECT_PAPER_A1;
|
|
else
|
|
lpcmd = (fPaperX)? SELECT_PAPER_A4X : SELECT_PAPER_A4W;
|
|
pOEM->RPDLHeapCount = (WORD)safe_sprintfA(pOEM->RPDLHeap64, sizeof(pOEM->RPDLHeap64), lpcmd);
|
|
if (BITTEST32(pOEM->fGeneral1, IMGCTRL_BA80) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_BA115))
|
|
{
|
|
goto _IMGCTRL_OFF1;
|
|
}
|
|
break;
|
|
|
|
case CMD_SELECT_PAPER_A5:
|
|
pOEM->DocPaperID = RPDL_A5;
|
|
fPaperX = (TEST_CAPABLE_PAPERX(pOEM->fModel) && !pOEM->StapleType &&
|
|
!pOEM->PunchType)? TRUE : FALSE;
|
|
// If TOMBO is enabled, scale up papersize. @Sep/14/98
|
|
if (BITTEST32(pOEMExtra->fUiOption, ENABLE_TOMBO))
|
|
{
|
|
lpcmd = (fPaperX)? SELECT_PAPER_A4X : SELECT_PAPER_A4W;
|
|
pOEM->RPDLHeapCount = (WORD)safe_sprintfA(pOEM->RPDLHeap64, sizeof(pOEM->RPDLHeap64), lpcmd);
|
|
goto _IMGCTRL_OFF1;
|
|
}
|
|
if (BITTEST32(pOEM->fGeneral1, IMGCTRL_2IN1_100) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_AA141))
|
|
lpcmd = (fPaperX)? SELECT_PAPER_A4X : SELECT_PAPER_A4W;
|
|
else if (BITTEST32(pOEM->fGeneral1, IMGCTRL_AA67))
|
|
lpcmd = SELECT_PAPER_A6;
|
|
else if (BITTEST32(pOEM->fGeneral1, IMGCTRL_AA200))
|
|
lpcmd = SELECT_PAPER_A3;
|
|
else if (BITTEST32(pOEM->fGeneral1, IMGCTRL_AA283))
|
|
lpcmd = SELECT_PAPER_A2;
|
|
else
|
|
lpcmd = (fPaperX)? SELECT_PAPER_A5X : SELECT_PAPER_A5W;
|
|
pOEM->RPDLHeapCount = (WORD)safe_sprintfA(pOEM->RPDLHeap64, sizeof(pOEM->RPDLHeap64), lpcmd);
|
|
if (BITTEST32(pOEM->fGeneral1, IMGCTRL_BA80) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_BA115) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_A1_400))
|
|
{
|
|
goto _IMGCTRL_OFF1;
|
|
}
|
|
break;
|
|
|
|
case CMD_SELECT_PAPER_A6:
|
|
pOEM->DocPaperID = RPDL_A6;
|
|
fPaperX = (TEST_CAPABLE_PAPERX(pOEM->fModel) && !pOEM->StapleType &&
|
|
!pOEM->PunchType)? TRUE : FALSE;
|
|
// If TOMBO is enabled, scale up papersize. @Sep/14/98
|
|
if (BITTEST32(pOEMExtra->fUiOption, ENABLE_TOMBO))
|
|
{
|
|
lpcmd = (fPaperX)? SELECT_PAPER_A4X : SELECT_PAPER_A4W;
|
|
pOEM->RPDLHeapCount = (WORD)safe_sprintfA(pOEM->RPDLHeap64, sizeof(pOEM->RPDLHeap64), lpcmd);
|
|
goto _IMGCTRL_OFF1;
|
|
}
|
|
if (BITTEST32(pOEM->fGeneral1, IMGCTRL_2IN1_100) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_AA141))
|
|
lpcmd = (fPaperX)? SELECT_PAPER_A5X : SELECT_PAPER_A5W;
|
|
else if (BITTEST32(pOEM->fGeneral1, IMGCTRL_AA200))
|
|
lpcmd = (fPaperX)? SELECT_PAPER_A4X : SELECT_PAPER_A4W;
|
|
else if (BITTEST32(pOEM->fGeneral1, IMGCTRL_AA283))
|
|
lpcmd = SELECT_PAPER_A3;
|
|
else
|
|
lpcmd = SELECT_PAPER_A6;
|
|
pOEM->RPDLHeapCount = (WORD)safe_sprintfA(pOEM->RPDLHeap64, sizeof(pOEM->RPDLHeap64), lpcmd);
|
|
if (BITTEST32(pOEM->fGeneral1, IMGCTRL_AA67) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_BA80) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_BA115) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_A1_400))
|
|
{
|
|
goto _IMGCTRL_OFF1;
|
|
}
|
|
break;
|
|
|
|
case CMD_SELECT_PAPER_POSTCARD: // since NX700 @Feb/13/98
|
|
pOEM->DocPaperID = RPDL_POSTCARD;
|
|
// If TOMBO is enabled, scale up papersize. @Sep/14/98
|
|
if (BITTEST32(pOEMExtra->fUiOption, ENABLE_TOMBO))
|
|
{
|
|
lpcmd = SELECT_PAPER_A4X;
|
|
pOEM->RPDLHeapCount = (WORD)safe_sprintfA(pOEM->RPDLHeap64, sizeof(pOEM->RPDLHeap64), lpcmd);
|
|
goto _IMGCTRL_OFF1;
|
|
}
|
|
lpcmd = SELECT_PAPER_PCX;
|
|
pOEM->RPDLHeapCount = (WORD)safe_sprintfA(pOEM->RPDLHeap64, sizeof(pOEM->RPDLHeap64), lpcmd);
|
|
if (TEST_NIN1_MODE(pOEM->fGeneral1) ||
|
|
TEST_SCALING_SEL_TRAY(pOEM->fGeneral1))
|
|
{
|
|
goto _IMGCTRL_OFF1;
|
|
}
|
|
break;
|
|
|
|
case CMD_SELECT_PAPER_B3: // @Jan/07/98
|
|
pOEM->DocPaperID = RPDL_B3;
|
|
if (BITTEST32(pOEM->fGeneral1, IMGCTRL_BA80))
|
|
lpcmd = SELECT_PAPER_A3;
|
|
else if (BITTEST32(pOEM->fGeneral1, IMGCTRL_BA115))
|
|
lpcmd = SELECT_PAPER_A2;
|
|
else
|
|
lpcmd = SELECT_PAPER_B3;
|
|
pOEM->RPDLHeapCount = (WORD)safe_sprintfA(pOEM->RPDLHeap64, sizeof(pOEM->RPDLHeap64), lpcmd);
|
|
if (TEST_NIN1_MODE(pOEM->fGeneral1) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_AA67) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_AA141) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_AA200) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_AA283) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_A1_400))
|
|
{
|
|
goto _IMGCTRL_OFF1;
|
|
}
|
|
break;
|
|
|
|
case CMD_SELECT_PAPER_B4:
|
|
pOEM->DocPaperID = RPDL_B4;
|
|
fPaperX = (TEST_CAPABLE_PAPERX(pOEM->fModel) && !pOEM->StapleType &&
|
|
!pOEM->PunchType)? TRUE : FALSE;
|
|
// If TOMBO is enabled, scale up papersize. @Sep/14/98
|
|
if (BITTEST32(pOEMExtra->fUiOption, ENABLE_TOMBO))
|
|
{
|
|
lpcmd = SELECT_PAPER_A3;
|
|
pOEM->RPDLHeapCount = (WORD)safe_sprintfA(pOEM->RPDLHeap64, sizeof(pOEM->RPDLHeap64), lpcmd);
|
|
goto _IMGCTRL_OFF1;
|
|
}
|
|
if (BITTEST32(pOEM->fGeneral1, IMGCTRL_BA80))
|
|
lpcmd = (fPaperX)? SELECT_PAPER_A4X : SELECT_PAPER_A4W;
|
|
else if (BITTEST32(pOEM->fGeneral1, IMGCTRL_BA115))
|
|
lpcmd = SELECT_PAPER_A3;
|
|
else
|
|
lpcmd = SELECT_PAPER_B4;
|
|
pOEM->RPDLHeapCount = (WORD)safe_sprintfA(pOEM->RPDLHeap64, sizeof(pOEM->RPDLHeap64), lpcmd);
|
|
if (BITTEST32(pOEM->fGeneral1, IMGCTRL_2IN1_100) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_AA67) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_AA141) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_AA200) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_AA283) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_A1_400))
|
|
{
|
|
goto _IMGCTRL_OFF1;
|
|
}
|
|
break;
|
|
|
|
case CMD_SELECT_PAPER_B5:
|
|
pOEM->DocPaperID = RPDL_B5;
|
|
fPaperX = (TEST_CAPABLE_PAPERX(pOEM->fModel) && !pOEM->StapleType &&
|
|
!pOEM->PunchType)? TRUE : FALSE;
|
|
// If TOMBO is enabled, scale up papersize. @Sep/14/98
|
|
if (BITTEST32(pOEMExtra->fUiOption, ENABLE_TOMBO))
|
|
{
|
|
lpcmd = (fPaperX)? SELECT_PAPER_A4X : SELECT_PAPER_A4W;
|
|
pOEM->RPDLHeapCount = (WORD)safe_sprintfA(pOEM->RPDLHeap64, sizeof(pOEM->RPDLHeap64), lpcmd);
|
|
goto _IMGCTRL_OFF1;
|
|
}
|
|
if (BITTEST32(pOEM->fGeneral1, IMGCTRL_2IN1_100))
|
|
lpcmd = SELECT_PAPER_B4;
|
|
else if (BITTEST32(pOEM->fGeneral1, IMGCTRL_BA80))
|
|
lpcmd = (fPaperX)? SELECT_PAPER_A5X : SELECT_PAPER_A5W;
|
|
else if (BITTEST32(pOEM->fGeneral1, IMGCTRL_BA115))
|
|
lpcmd = (fPaperX)? SELECT_PAPER_A4X : SELECT_PAPER_A4W;
|
|
else
|
|
lpcmd = (fPaperX)? SELECT_PAPER_B5X : SELECT_PAPER_B5W;
|
|
pOEM->RPDLHeapCount = (WORD)safe_sprintfA(pOEM->RPDLHeap64, sizeof(pOEM->RPDLHeap64), lpcmd);
|
|
if (BITTEST32(pOEM->fGeneral1, IMGCTRL_AA67) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_AA141) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_AA200) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_AA283) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_A1_400))
|
|
{
|
|
goto _IMGCTRL_OFF1;
|
|
}
|
|
break;
|
|
|
|
case CMD_SELECT_PAPER_B6:
|
|
pOEM->DocPaperID = RPDL_B6;
|
|
fPaperX = (TEST_CAPABLE_PAPERX(pOEM->fModel) && !pOEM->StapleType &&
|
|
!pOEM->PunchType)? TRUE : FALSE;
|
|
// If TOMBO is enabled, scale up papersize. @Sep/14/98
|
|
if (BITTEST32(pOEMExtra->fUiOption, ENABLE_TOMBO))
|
|
{
|
|
lpcmd = (fPaperX)? SELECT_PAPER_A4X : SELECT_PAPER_A4W;
|
|
pOEM->RPDLHeapCount = (WORD)safe_sprintfA(pOEM->RPDLHeap64, sizeof(pOEM->RPDLHeap64), lpcmd);
|
|
goto _IMGCTRL_OFF1;
|
|
}
|
|
if (BITTEST32(pOEM->fGeneral1, IMGCTRL_2IN1_100))
|
|
lpcmd = (fPaperX)? SELECT_PAPER_B5X : SELECT_PAPER_B5W;
|
|
else if (BITTEST32(pOEM->fGeneral1, IMGCTRL_BA80))
|
|
lpcmd = SELECT_PAPER_A6;
|
|
else if (BITTEST32(pOEM->fGeneral1, IMGCTRL_BA115))
|
|
lpcmd = (fPaperX)? SELECT_PAPER_A5X : SELECT_PAPER_A5W;
|
|
else
|
|
lpcmd = SELECT_PAPER_B6;
|
|
pOEM->RPDLHeapCount = (WORD)safe_sprintfA(pOEM->RPDLHeap64, sizeof(pOEM->RPDLHeap64), lpcmd);
|
|
if (BITTEST32(pOEM->fGeneral1, IMGCTRL_AA67) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_AA141) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_AA200) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_AA283) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_A1_400))
|
|
{
|
|
goto _IMGCTRL_OFF1;
|
|
}
|
|
break;
|
|
|
|
case CMD_SELECT_PAPER_C:
|
|
pOEM->DocPaperID = RPDL_C;
|
|
lpcmd = SELECT_PAPER_C;
|
|
pOEM->RPDLHeapCount = (WORD)safe_sprintfA(pOEM->RPDLHeap64, sizeof(pOEM->RPDLHeap64), lpcmd);
|
|
if (TEST_NIN1_MODE(pOEM->fGeneral1) ||
|
|
TEST_SCALING_SEL_TRAY(pOEM->fGeneral1))
|
|
{
|
|
goto _IMGCTRL_OFF1;
|
|
}
|
|
break;
|
|
|
|
case CMD_SELECT_PAPER_TABLOID:
|
|
pOEM->DocPaperID = RPDL_TABD;
|
|
if (BITTEST32(pOEM->fGeneral1, IMGCTRL_A1_400))
|
|
lpcmd = SELECT_PAPER_A1;
|
|
else
|
|
lpcmd = SELECT_PAPER_TABD;
|
|
pOEM->RPDLHeapCount = (WORD)safe_sprintfA(pOEM->RPDLHeap64, sizeof(pOEM->RPDLHeap64), lpcmd);
|
|
if (BITTEST32(pOEM->fGeneral1, IMGCTRL_2IN1_100) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_AA67) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_BA80) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_BA115) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_AA141) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_AA200) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_AA283))
|
|
{
|
|
goto _IMGCTRL_OFF1;
|
|
}
|
|
break;
|
|
|
|
case CMD_SELECT_PAPER_LEGAL:
|
|
pOEM->DocPaperID = RPDL_LEGL;
|
|
lpcmd = SELECT_PAPER_LEGL;
|
|
pOEM->RPDLHeapCount = (WORD)safe_sprintfA(pOEM->RPDLHeap64, sizeof(pOEM->RPDLHeap64), lpcmd);
|
|
if (TEST_NIN1_MODE(pOEM->fGeneral1) ||
|
|
TEST_SCALING_SEL_TRAY(pOEM->fGeneral1))
|
|
{
|
|
goto _IMGCTRL_OFF1;
|
|
}
|
|
break;
|
|
|
|
case CMD_SELECT_PAPER_LETTER:
|
|
pOEM->DocPaperID = RPDL_LETR;
|
|
fPaperX = (TEST_CAPABLE_PAPERX(pOEM->fModel) && !pOEM->StapleType &&
|
|
!pOEM->PunchType)? TRUE : FALSE;
|
|
if (BITTEST32(pOEM->fGeneral1, IMGCTRL_2IN1_100))
|
|
lpcmd = SELECT_PAPER_TABD;
|
|
else if (BITTEST32(pOEM->fGeneral1, IMGCTRL_A1_400))
|
|
lpcmd = SELECT_PAPER_A1;
|
|
else
|
|
lpcmd = (fPaperX)? SELECT_PAPER_LETRX : SELECT_PAPER_LETRW;
|
|
pOEM->RPDLHeapCount = (WORD)safe_sprintfA(pOEM->RPDLHeap64, sizeof(pOEM->RPDLHeap64), lpcmd);
|
|
if (BITTEST32(pOEM->fGeneral1, IMGCTRL_AA67) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_BA80) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_BA115) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_AA141) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_AA200) ||
|
|
BITTEST32(pOEM->fGeneral1, IMGCTRL_AA283))
|
|
{
|
|
goto _IMGCTRL_OFF1;
|
|
}
|
|
break;
|
|
|
|
case CMD_SELECT_PAPER_STATEMENT:
|
|
pOEM->DocPaperID = RPDL_STAT;
|
|
fPaperX = (TEST_CAPABLE_PAPERX(pOEM->fModel) && !pOEM->StapleType &&
|
|
!pOEM->PunchType)? TRUE : FALSE;
|
|
if (BITTEST32(pOEM->fGeneral1, IMGCTRL_2IN1_100))
|
|
lpcmd = (fPaperX)? SELECT_PAPER_LETRX : SELECT_PAPER_LETRW;
|
|
else
|
|
lpcmd = (fPaperX)? SELECT_PAPER_STATX : SELECT_PAPER_STATW;
|
|
pOEM->RPDLHeapCount = (WORD)safe_sprintfA(pOEM->RPDLHeap64, sizeof(pOEM->RPDLHeap64), lpcmd);
|
|
if (TEST_SCALING_SEL_TRAY(pOEM->fGeneral1))
|
|
goto _IMGCTRL_OFF1;
|
|
break;
|
|
|
|
case CMD_SELECT_PAPER_A2TOA3:
|
|
pOEM->DocPaperID = RPDL_A2A3;
|
|
WRITESPOOLBUF(pdevobj, IMAGE_SCALING_67, sizeof(IMAGE_SCALING_67)-1);
|
|
// DCR @Jan/27/2000 ->
|
|
// Emit DUPLEX_ON here, because IMAGE_SCALING_xxx resets DUPLEX_ON.
|
|
if (BITTEST32(pOEM->fGeneral1, DUPLEX_VALID))
|
|
WRITESPOOLBUF(pdevobj, DUPLEX_ON, sizeof(DUPLEX_ON)-1);
|
|
// @Jan/27/2000 <-
|
|
lpcmd = SELECT_PAPER_A3;
|
|
pOEM->RPDLHeapCount = (WORD)safe_sprintfA(pOEM->RPDLHeap64, sizeof(pOEM->RPDLHeap64), lpcmd);
|
|
if (TEST_NIN1_MODE(pOEM->fGeneral1) ||
|
|
TEST_SCALING_SEL_TRAY(pOEM->fGeneral1))
|
|
{
|
|
goto _IMGCTRL_OFF2;
|
|
}
|
|
break;
|
|
|
|
case CMD_SELECT_PAPER_A3TOA4: // for NX70 @Feb/04/98
|
|
pOEM->DocPaperID = RPDL_A3A4;
|
|
WRITESPOOLBUF(pdevobj, IMAGE_SCALING_67, sizeof(IMAGE_SCALING_67)-1);
|
|
// DCR @Jan/27/2000 ->
|
|
// Emit DUPLEX_ON here, because IMAGE_SCALING_xxx resets DUPLEX_ON.
|
|
if (BITTEST32(pOEM->fGeneral1, DUPLEX_VALID))
|
|
WRITESPOOLBUF(pdevobj, DUPLEX_ON, sizeof(DUPLEX_ON)-1);
|
|
// @Jan/27/2000 <-
|
|
lpcmd = SELECT_PAPER_A4X;
|
|
pOEM->RPDLHeapCount = (WORD)safe_sprintfA(pOEM->RPDLHeap64, sizeof(pOEM->RPDLHeap64), lpcmd);
|
|
if (TEST_NIN1_MODE(pOEM->fGeneral1) ||
|
|
TEST_SCALING_SEL_TRAY(pOEM->fGeneral1))
|
|
{
|
|
goto _IMGCTRL_OFF2;
|
|
}
|
|
break;
|
|
|
|
case CMD_SELECT_PAPER_B4TOA4: // for NX70 @Feb/04/98
|
|
pOEM->DocPaperID = RPDL_B4A4;
|
|
WRITESPOOLBUF(pdevobj, IMAGE_SCALING_80, sizeof(IMAGE_SCALING_80)-1);
|
|
// DCR @Jan/27/2000 ->
|
|
// Emit DUPLEX_ON here, because IMAGE_SCALING_xxx resets DUPLEX_ON.
|
|
if (BITTEST32(pOEM->fGeneral1, DUPLEX_VALID))
|
|
WRITESPOOLBUF(pdevobj, DUPLEX_ON, sizeof(DUPLEX_ON)-1);
|
|
// @Jan/27/2000 <-
|
|
lpcmd = SELECT_PAPER_A4X;
|
|
pOEM->RPDLHeapCount = (WORD)safe_sprintfA(pOEM->RPDLHeap64, sizeof(pOEM->RPDLHeap64), lpcmd);
|
|
if (TEST_NIN1_MODE(pOEM->fGeneral1) ||
|
|
TEST_SCALING_SEL_TRAY(pOEM->fGeneral1))
|
|
{
|
|
goto _IMGCTRL_OFF2;
|
|
}
|
|
break;
|
|
|
|
case CMD_SELECT_PAPER_11x15TOA4: // @Feb/07/2000
|
|
pOEM->DocPaperID = RPDL_11x15A4;
|
|
WRITESPOOLBUF(pdevobj, IMAGE_SCALING_67, sizeof(IMAGE_SCALING_67)-1);
|
|
if (BITTEST32(pOEM->fGeneral1, DUPLEX_VALID))
|
|
WRITESPOOLBUF(pdevobj, DUPLEX_ON, sizeof(DUPLEX_ON)-1);
|
|
fPaperX = (TEST_CAPABLE_PAPERX(pOEM->fModel) && !pOEM->StapleType &&
|
|
!pOEM->PunchType)? TRUE : FALSE;
|
|
lpcmd = (fPaperX)? SELECT_PAPER_A4X : SELECT_PAPER_A4W;
|
|
pOEM->RPDLHeapCount = (WORD)safe_sprintfA(pOEM->RPDLHeap64, sizeof(pOEM->RPDLHeap64), lpcmd);
|
|
|
|
// Emulate NEC MultiWriter 2200
|
|
if (BITTEST32(pOEM->fGeneral1, ORIENT_LANDSCAPE))
|
|
{
|
|
pOEM->BaseOffset.x = 37; // mm
|
|
pOEM->BaseOffset.y = 15;
|
|
}
|
|
else
|
|
{
|
|
pOEM->BaseOffset.x = 15;
|
|
pOEM->BaseOffset.y = 37;
|
|
}
|
|
|
|
if (TEST_NIN1_MODE(pOEM->fGeneral1) ||
|
|
TEST_SCALING_SEL_TRAY(pOEM->fGeneral1))
|
|
{
|
|
goto _IMGCTRL_OFF2;
|
|
}
|
|
break;
|
|
|
|
|
|
case CMD_SELECT_PAPER_DOUBLEPOSTCARD:
|
|
BITSET32(pOEM->fGeneral1, PAPER_DOUBLEPOSTCARD);
|
|
goto _SET_CUSTOMSIZE;
|
|
|
|
case CMD_SELECT_PAPER_CUSTOM: // pdwParams:PhysPaperWidth,Length
|
|
pOEM->PhysPaperWidth = (WORD)*pdwParams; // @Dec/26/97
|
|
pOEM->PhysPaperLength = (WORD)*(pdwParams+1);
|
|
BITSET32(pOEM->fGeneral1, PAPER_CUSTOMSIZE);
|
|
|
|
_SET_CUSTOMSIZE:
|
|
pOEM->DocPaperID = RPDL_CUSTOMSIZE;
|
|
pOEM->RPDLHeapCount = 0;
|
|
if (TEST_NIN1_MODE(pOEM->fGeneral1) ||
|
|
TEST_SCALING_SEL_TRAY(pOEM->fGeneral1))
|
|
{
|
|
goto _IMGCTRL_OFF1;
|
|
}
|
|
break;
|
|
|
|
_IMGCTRL_OFF1:
|
|
// Invalidate image controls
|
|
pOEM->Scale = 100; // @Mar/18/98
|
|
WRITESPOOLBUF(pdevobj, IMAGE_SCALING_100, sizeof(IMAGE_SCALING_100)-1);
|
|
// DCR @Jan/27/2000 ->
|
|
// Emit DUPLEX_ON here, because IMAGE_SCALING_xxx resets DUPLEX_ON.
|
|
if (BITTEST32(pOEM->fGeneral1, DUPLEX_VALID))
|
|
WRITESPOOLBUF(pdevobj, DUPLEX_ON, sizeof(DUPLEX_ON)-1);
|
|
// @Jan/27/2000 <-
|
|
_IMGCTRL_OFF2:
|
|
BITCLR_SCALING_SEL_TRAY(pOEM->fGeneral1);
|
|
BITCLR_NIN1_MODE(pOEM->fGeneral1);
|
|
break;
|
|
|
|
|
|
case CMD_SET_LONG_EDGE_FEED: // for Multi Tray @May/25/98
|
|
BITSET32(pOEM->fGeneral2, LONG_EDGE_FEED);
|
|
break;
|
|
|
|
case CMD_SET_SHORT_EDGE_FEED: // for Multi Tray @May/25/98
|
|
BITCLR32(pOEM->fGeneral2, LONG_EDGE_FEED);
|
|
break;
|
|
|
|
|
|
case CMD_SELECT_AUTOFEED:
|
|
// Set MediaType (modify @Mar/03/99, @Feb/15/2000, moved top@Sep/27/2000)
|
|
if (TEST_CAPABLE_MEDIATYPE(pOEM->fModel))
|
|
{
|
|
// @Oct/13/2000 ->
|
|
// ocmd = safe_sprintfA(Cmd, sizeof(Cmd), SELECT_MEDIATYPE, 'T', '0'+pOEM->MediaType);
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), SELECT_MEDIATYPE, 'T', pOEM->MediaType);
|
|
// @Oct/13/2000 <-
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
ocmd = 0;
|
|
}
|
|
if (BITTEST32(pOEM->fGeneral1, PAPER_CUSTOMSIZE) ||
|
|
BITTEST32(pOEM->fGeneral1, PAPER_DOUBLEPOSTCARD))
|
|
{
|
|
// Select ManualFeed
|
|
WRITESPOOLBUF(pdevobj, SELECT_MANUALFEED, sizeof(SELECT_MANUALFEED)-1);
|
|
goto _SELECTPAPER_CUSTOMSIZE;
|
|
}
|
|
// Output Set_Limitless_Paper_Supply_Mode
|
|
WRITESPOOLBUF(pdevobj, SET_LIMITLESS_SUPPLY, sizeof(SET_LIMITLESS_SUPPLY)-1);
|
|
// Output Select_Tray_By_Papersize command.
|
|
// if letter size, select A4 first in case of no letter paper.
|
|
if (!strcmp(pOEM->RPDLHeap64, SELECT_PAPER_LETRX))
|
|
{
|
|
WRITESPOOLBUF(pdevobj, SEL_TRAY_PAPER_HEAD, sizeof(SEL_TRAY_PAPER_HEAD)-1);
|
|
WRITESPOOLBUF(pdevobj, SELECT_PAPER_A4X, sizeof(SELECT_PAPER_A4X)-1);
|
|
}
|
|
else if (!strcmp(pOEM->RPDLHeap64, SELECT_PAPER_LETRW))
|
|
{
|
|
WRITESPOOLBUF(pdevobj, SEL_TRAY_PAPER_HEAD, sizeof(SEL_TRAY_PAPER_HEAD)-1);
|
|
WRITESPOOLBUF(pdevobj, SELECT_PAPER_A4W, sizeof(SELECT_PAPER_A4W)-1);
|
|
}
|
|
WRITESPOOLBUF(pdevobj, SEL_TRAY_PAPER_HEAD, sizeof(SEL_TRAY_PAPER_HEAD)-1);
|
|
WRITESPOOLBUF(pdevobj, pOEM->RPDLHeap64, pOEM->RPDLHeapCount);
|
|
break;
|
|
|
|
// @Dec/10/99 FK#49, add TRAY1,3,4,5 & reset limitless @Sep/27/2000 ->
|
|
case CMD_SELECT_TRAY1:
|
|
case CMD_SELECT_TRAY2:
|
|
case CMD_SELECT_TRAY3:
|
|
case CMD_SELECT_TRAY4:
|
|
case CMD_SELECT_TRAY5:
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), SELECT_TRAY_N, dwCmdCbID - CMD_SELECT_TRAY1 + 2);
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
if (TEST_GWMODEL(pOEM->fModel))
|
|
WRITESPOOLBUF(pdevobj, RESET_LIMITLESS_SUPPLY, sizeof(RESET_LIMITLESS_SUPPLY)-1);
|
|
if (BITTEST32(pOEM->fGeneral1, PAPER_CUSTOMSIZE) ||
|
|
BITTEST32(pOEM->fGeneral1, PAPER_DOUBLEPOSTCARD))
|
|
{
|
|
goto _SELECTPAPER_CUSTOMSIZE;
|
|
}
|
|
break;
|
|
// @Dec/10/99, @Sep/27/2000 <-
|
|
|
|
case CMD_SELECT_MANUALFEED:
|
|
case CMD_SELECT_MULTIFEEDER:
|
|
case CMD_SELECT_MULTITRAY: // NXs' MultiTray
|
|
// Moved forward, because NX710(MultiTray) support MediaType @Mar/11/99 ->
|
|
// Set MediaType (modify @Mar/03/99, @Feb/15/2000)
|
|
if (TEST_CAPABLE_MEDIATYPE(pOEM->fModel))
|
|
{
|
|
// @Oct/13/2000 ->
|
|
// ocmd = safe_sprintfA(Cmd, sizeof(Cmd), SELECT_MEDIATYPE, 'T', '0'+pOEM->MediaType);
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), SELECT_MEDIATYPE, 'T', pOEM->MediaType);
|
|
// @Oct/13/2000 <-
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
ocmd = 0;
|
|
}
|
|
// @Mar/11/99 <-
|
|
// Select Feeder
|
|
if (dwCmdCbID == CMD_SELECT_MANUALFEED)
|
|
{
|
|
// Select ManualFeed
|
|
WRITESPOOLBUF(pdevobj, SELECT_MANUALFEED, sizeof(SELECT_MANUALFEED)-1);
|
|
}
|
|
else
|
|
{
|
|
// Select MultiFeeder/MultTray
|
|
WRITESPOOLBUF(pdevobj, SELECT_MULTIFEEDER, sizeof(SELECT_MULTIFEEDER)-1);
|
|
//@Sep/27/2000 ->
|
|
if (TEST_GWMODEL(pOEM->fModel))
|
|
WRITESPOOLBUF(pdevobj, RESET_LIMITLESS_SUPPLY, sizeof(RESET_LIMITLESS_SUPPLY)-1);
|
|
//@Sep/27/2000 <-
|
|
}
|
|
// If CustomSize, jump.
|
|
if (BITTEST32(pOEM->fGeneral1, PAPER_CUSTOMSIZE) ||
|
|
BITTEST32(pOEM->fGeneral1, PAPER_DOUBLEPOSTCARD))
|
|
{
|
|
goto _SELECTPAPER_CUSTOMSIZE;
|
|
}
|
|
|
|
// Set papersize
|
|
// If papersize without transverse (A1,A2,A3,A6,B3,B4,B6,C,Tabloid,Legal)
|
|
if (!strcmp(pOEM->RPDLHeap64, SELECT_PAPER_A1) ||
|
|
!strcmp(pOEM->RPDLHeap64, SELECT_PAPER_A2) ||
|
|
!strcmp(pOEM->RPDLHeap64, SELECT_PAPER_A3) ||
|
|
!strcmp(pOEM->RPDLHeap64, SELECT_PAPER_A6) ||
|
|
!strcmp(pOEM->RPDLHeap64, SELECT_PAPER_B3) || // @Feb/05/98
|
|
!strcmp(pOEM->RPDLHeap64, SELECT_PAPER_B4) ||
|
|
!strcmp(pOEM->RPDLHeap64, SELECT_PAPER_B6) ||
|
|
!strcmp(pOEM->RPDLHeap64, SELECT_PAPER_C) ||
|
|
!strcmp(pOEM->RPDLHeap64, SELECT_PAPER_TABD) ||
|
|
!strcmp(pOEM->RPDLHeap64, SELECT_PAPER_LEGL))
|
|
{
|
|
// Output Select_Papersize command
|
|
WRITESPOOLBUF(pdevobj, SELECT_PAPER_HEAD, sizeof(SELECT_PAPER_HEAD)-1);
|
|
WRITESPOOLBUF(pdevobj, pOEM->RPDLHeap64, pOEM->RPDLHeapCount);
|
|
}
|
|
else
|
|
{
|
|
if (!strcmp(pOEM->RPDLHeap64, SELECT_PAPER_A4X) ||
|
|
!strcmp(pOEM->RPDLHeap64, SELECT_PAPER_A4W))
|
|
{
|
|
// If long edge feed is enabled, set transverse paper. @May/25/98
|
|
if (dwCmdCbID == CMD_SELECT_MULTITRAY &&
|
|
BITTEST32(pOEM->fGeneral2, LONG_EDGE_FEED))
|
|
{
|
|
lpcmd = SELECT_PAPER_A4;
|
|
}
|
|
else
|
|
{
|
|
lpcmd = SELECT_PAPER_A4R;
|
|
}
|
|
}
|
|
else if (!strcmp(pOEM->RPDLHeap64, SELECT_PAPER_A5X) ||
|
|
!strcmp(pOEM->RPDLHeap64, SELECT_PAPER_A5W))
|
|
{
|
|
if (dwCmdCbID == CMD_SELECT_MULTITRAY &&
|
|
BITTEST32(pOEM->fGeneral2, LONG_EDGE_FEED))
|
|
{
|
|
lpcmd = SELECT_PAPER_A5;
|
|
}
|
|
else
|
|
{
|
|
lpcmd = SELECT_PAPER_A5R;
|
|
}
|
|
}
|
|
else if (!strcmp(pOEM->RPDLHeap64, SELECT_PAPER_B5X) ||
|
|
!strcmp(pOEM->RPDLHeap64, SELECT_PAPER_B5W))
|
|
{
|
|
if (dwCmdCbID == CMD_SELECT_MULTITRAY &&
|
|
BITTEST32(pOEM->fGeneral2, LONG_EDGE_FEED))
|
|
{
|
|
lpcmd = SELECT_PAPER_B5;
|
|
}
|
|
else
|
|
{
|
|
lpcmd = SELECT_PAPER_B5R;
|
|
}
|
|
}
|
|
else if (!strcmp(pOEM->RPDLHeap64, SELECT_PAPER_LETRX) ||
|
|
!strcmp(pOEM->RPDLHeap64, SELECT_PAPER_LETRW))
|
|
{
|
|
if (dwCmdCbID == CMD_SELECT_MULTITRAY &&
|
|
BITTEST32(pOEM->fGeneral2, LONG_EDGE_FEED))
|
|
{
|
|
lpcmd = SELECT_PAPER_LETR;
|
|
}
|
|
else
|
|
{
|
|
lpcmd = SELECT_PAPER_LETRR;
|
|
}
|
|
}
|
|
else if (!strcmp(pOEM->RPDLHeap64, SELECT_PAPER_STATX) ||
|
|
!strcmp(pOEM->RPDLHeap64, SELECT_PAPER_STATW))
|
|
{
|
|
if (dwCmdCbID == CMD_SELECT_MULTITRAY &&
|
|
BITTEST32(pOEM->fGeneral2, LONG_EDGE_FEED))
|
|
{
|
|
lpcmd = SELECT_PAPER_STAT;
|
|
}
|
|
else
|
|
{
|
|
lpcmd = SELECT_PAPER_STATR;
|
|
}
|
|
}
|
|
else if (!strcmp(pOEM->RPDLHeap64, SELECT_PAPER_PCX)) // @Feb/13/98
|
|
{
|
|
if (dwCmdCbID == CMD_SELECT_MULTITRAY &&
|
|
BITTEST32(pOEM->fGeneral2, LONG_EDGE_FEED))
|
|
{
|
|
lpcmd = SELECT_PAPER_PC;
|
|
}
|
|
else
|
|
{
|
|
lpcmd = SELECT_PAPER_PCR;
|
|
}
|
|
}
|
|
else
|
|
break; // exit
|
|
|
|
// Output Select_Papersize command
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), SELECT_PAPER_HEAD);
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, lpcmd);
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
} // 'if (A1,A2,A3,A6,B4,B6,C,TABLOID,LEGAL) else' end
|
|
// Reconfirm ManualFeed/AutoFeed.
|
|
if (dwCmdCbID == CMD_SELECT_MANUALFEED)
|
|
WRITESPOOLBUF(pdevobj, SELECT_MANUALFEED, sizeof(SELECT_MANUALFEED)-1);
|
|
else
|
|
WRITESPOOLBUF(pdevobj, SELECT_MULTIFEEDER, sizeof(SELECT_MULTIFEEDER)-1);
|
|
break;
|
|
|
|
_SELECTPAPER_CUSTOMSIZE:
|
|
{
|
|
DWORD dwWidth, dwHeight;
|
|
|
|
// If DoublePostcard
|
|
if (BITTEST32(pOEM->fGeneral1, PAPER_DOUBLEPOSTCARD))
|
|
{
|
|
if (BITTEST32(pOEM->fGeneral1, ORIENT_LANDSCAPE))
|
|
{
|
|
dwWidth = 148; // mm
|
|
dwHeight = 200;
|
|
}
|
|
else
|
|
{
|
|
dwWidth = 200;
|
|
dwHeight = 148;
|
|
}
|
|
// Set max pagesize (mm to dot with KIRISUTE)
|
|
pOEM->PageMax.x = (LONG)(dwWidth * (DWORD)(MASTERUNIT*10) /
|
|
(DWORD)254 / (DWORD)pOEM->nResoRatio);
|
|
pOEM->PageMax.y = (LONG)(dwHeight * (DWORD)(MASTERUNIT*10) /
|
|
(DWORD)254 / (DWORD)pOEM->nResoRatio);
|
|
}
|
|
// If CustomSize
|
|
else
|
|
{
|
|
if (BITTEST32(pOEM->fGeneral1, ORIENT_LANDSCAPE))
|
|
{
|
|
dwWidth = pOEM->PhysPaperLength; // masterunit
|
|
dwHeight = pOEM->PhysPaperWidth;
|
|
}
|
|
else
|
|
{
|
|
dwWidth = pOEM->PhysPaperWidth; // masterunit
|
|
dwHeight = pOEM->PhysPaperLength;
|
|
}
|
|
// Set max pagesize
|
|
pOEM->PageMax.x = (LONG)(dwWidth / pOEM->nResoRatio); // dot
|
|
pOEM->PageMax.y = (LONG)(dwHeight / pOEM->nResoRatio);
|
|
// masterunit to mm with SISHAGONYU
|
|
dwWidth = (dwWidth * (DWORD)254 + (DWORD)(MASTERUNIT*10/2)) /
|
|
(DWORD)(MASTERUNIT*10);
|
|
dwHeight = (dwHeight * (DWORD)254 + (DWORD)(MASTERUNIT*10/2)) /
|
|
(DWORD)(MASTERUNIT*10);
|
|
}
|
|
|
|
BITCLR32(pOEM->fGeneral1, CUSTOMSIZE_USE_LAND);
|
|
BITCLR32(pOEM->fGeneral1, CUSTOMSIZE_MAKE_LAND_PORT);
|
|
|
|
// Because app sometimes sets under-limit in landscape,
|
|
// we need to swap width and height. @Oct/21/98
|
|
if (dwHeight < USRD_H_MIN148) // < 148
|
|
{
|
|
DWORD dwTmp;
|
|
dwTmp = dwWidth;
|
|
dwWidth = dwHeight;
|
|
dwHeight = dwTmp;
|
|
}
|
|
else if (dwWidth >= dwHeight)
|
|
{
|
|
WORD fSwap = FALSE;
|
|
|
|
// Because app sometimes sets over-limit width in portrait,
|
|
// we need to swap width and height.
|
|
if (TEST_CAPABLE_PAPER_A2(pOEM->fModel))
|
|
{
|
|
if (dwWidth > USRD_W_A2) // > 432
|
|
fSwap = TRUE;
|
|
}
|
|
else if (TEST_CAPABLE_PAPER_A3_W297(pOEM->fModel))
|
|
{
|
|
if (dwWidth > USRD_W_A3) // > 297
|
|
fSwap = TRUE;
|
|
}
|
|
else if (TEST_CAPABLE_PAPER_A4MAX(pOEM->fModel))
|
|
{
|
|
if (dwWidth > USRD_W_A4) // > 216
|
|
fSwap = TRUE;
|
|
}
|
|
else
|
|
{
|
|
if (dwWidth > USRD_W_A3_OLD) // > 296
|
|
fSwap = TRUE;
|
|
}
|
|
|
|
if (fSwap)
|
|
{
|
|
DWORD dwTmp;
|
|
dwTmp = dwWidth;
|
|
dwWidth = dwHeight;
|
|
dwHeight = dwTmp;
|
|
}
|
|
// SPEC of RPDL
|
|
// If width is larger than length, we need to set landscape.
|
|
else
|
|
{
|
|
BITSET32(pOEM->fGeneral1, CUSTOMSIZE_USE_LAND);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
BITSET32(pOEM->fGeneral1, CUSTOMSIZE_MAKE_LAND_PORT);
|
|
}
|
|
|
|
// @Dec/10/99 FK#49, add TRAY1-5 & eliminate TRAYA-D @Sep/27/2000 ->
|
|
// ocmd = safe_sprintfA(Cmd, sizeof(Cmd), SELECT_PAPER_CUSTOM, (WORD)dwWidth, (WORD)dwHeight);
|
|
// WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
if (dwCmdCbID >= CMD_SELECT_TRAY1 && dwCmdCbID <= CMD_SELECT_TRAY5)
|
|
{
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), SELECT_PAPER_CUSTOM2, (WORD)dwWidth, (WORD)dwHeight,
|
|
dwCmdCbID - CMD_SELECT_TRAY1 + 2);
|
|
}
|
|
else // manual feed
|
|
{
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), SELECT_PAPER_CUSTOM, (WORD)dwWidth, (WORD)dwHeight);
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, SELECT_MANUALFEED, sizeof(SELECT_MANUALFEED)-1);
|
|
}
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
// @Dec/10/99, @Sep/27/2000 <-
|
|
}
|
|
break;
|
|
|
|
case CMD_SELECT_ROLL1: // IP-1
|
|
case CMD_SELECT_ROLL2:
|
|
// Select roll (plotter)
|
|
if (dwCmdCbID == CMD_SELECT_ROLL1)
|
|
WRITESPOOLBUF(pdevobj, SELECT_ROLL1, sizeof(SELECT_ROLL1)-1);
|
|
else
|
|
WRITESPOOLBUF(pdevobj, SELECT_ROLL2, sizeof(SELECT_ROLL2)-1);
|
|
// Output Select_Papersize command ("papername+X" only)
|
|
WRITESPOOLBUF(pdevobj, SELECT_PAPER_HEAD_IP1, sizeof(SELECT_PAPER_HEAD_IP1)-1);
|
|
WRITESPOOLBUF(pdevobj, pOEM->RPDLHeap64, pOEM->RPDLHeapCount);
|
|
break;
|
|
|
|
|
|
case CMD_SELECT_FINISHER_TRAY2: // @Jun/25/2001
|
|
pOEM->FinisherTrayNum = 2;
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), SET_PAPERDEST_FINISHER_GW, pOEM->FinisherTrayNum);
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
break;
|
|
|
|
|
|
case CMD_SET_COLLATE_OFF: // @Jul/31/98
|
|
pOEM->CollateType = COLLATE_OFF; // COLLATE_OFF<-0 @Dec/02/98
|
|
break;
|
|
|
|
case CMD_SET_COLLATE_ON: // @Jul/31/98
|
|
pOEM->CollateType = COLLATE_ON; // COLLATE_ON<-1 @Dec/02/98
|
|
break;
|
|
|
|
case CMD_SELECT_COLLATE_UNIDIR: // @Aug/10/98
|
|
if (COLLATE_OFF != pOEM->CollateType)
|
|
pOEM->CollateType = COLLATE_UNIDIR; // COLLATE_UNIDIR<-2 @Dec/02/98
|
|
break;
|
|
|
|
case CMD_SELECT_COLLATE_ROTATED: // @Aug/10/98
|
|
if (COLLATE_OFF != pOEM->CollateType)
|
|
pOEM->CollateType = COLLATE_ROTATED; // COLLATE_ROTATED<-3 @Dec/02/98
|
|
break;
|
|
|
|
case CMD_SELECT_COLLATE_SHIFTED: // @Dec/02/98
|
|
if (COLLATE_OFF != pOEM->CollateType)
|
|
pOEM->CollateType = COLLATE_SHIFTED;
|
|
break;
|
|
|
|
|
|
// Final command before print
|
|
case CMD_MULTI_COPIES: // pdwParams:NumOfCopies
|
|
// If not CustomSize, set max pagesize.
|
|
if ((nTmp = pOEM->DocPaperID) != RPDL_CUSTOMSIZE)
|
|
{
|
|
if (BITTEST32(pOEM->fGeneral2, EDGE2EDGE_PRINT)) // @Nov/27/97
|
|
{
|
|
pOEM->PageMax.x = RPDLPageSizeE2E[nTmp].x / pOEM->nResoRatio;
|
|
pOEM->PageMax.y = RPDLPageSizeE2E[nTmp].y / pOEM->nResoRatio;
|
|
}
|
|
else
|
|
{
|
|
pOEM->PageMax.x = RPDLPageSize[nTmp].x / pOEM->nResoRatio;
|
|
pOEM->PageMax.y = RPDLPageSize[nTmp].y / pOEM->nResoRatio;
|
|
}
|
|
|
|
if (BITTEST32(pOEM->fGeneral1, ORIENT_LANDSCAPE))
|
|
{
|
|
LONG tmp;
|
|
tmp = pOEM->PageMax.x; // swap x-y
|
|
pOEM->PageMax.x = pOEM->PageMax.y;
|
|
pOEM->PageMax.y = tmp;
|
|
}
|
|
}
|
|
|
|
if (TEST_BUGFIX_FORMFEED(pOEM->fModel) || // add @Sep/15/98
|
|
BITTEST32(pOEMExtra->fUiOption, ENABLE_TOMBO))
|
|
{
|
|
pOEM->PageMaxMoveY = pOEM->PageMax.y;
|
|
}
|
|
else
|
|
{
|
|
// PRINTER SIDE ISSUE: RPDL
|
|
// Because RPDL do formfeed when vertical position is around
|
|
// ymax-coordinate, we shift position upper 1mm.
|
|
// Set PageMaxMoveY for checking max vertical position.
|
|
nTmp = BITTEST32(pOEM->fGeneral2, EDGE2EDGE_PRINT)? // @Nov/27/97
|
|
DISABLE_FF_MARGIN_E2E : DISABLE_FF_MARGIN_STD;
|
|
pOEM->PageMaxMoveY = pOEM->PageMax.y - 1 -
|
|
(nTmp + pOEM->nResoRatio - 1) /
|
|
pOEM->nResoRatio; // KIRIAGE
|
|
}
|
|
|
|
// If 2in1, switch orientation(portrait<->landscape).
|
|
if (TEST_2IN1_MODE(pOEM->fGeneral1))
|
|
BITSET32(pOEM->fGeneral1, SWITCH_PORT_LAND);
|
|
if (BITTEST32(pOEM->fGeneral1, ORIENT_LANDSCAPE))
|
|
{
|
|
if (BITTEST32(pOEM->fGeneral1, SWITCH_PORT_LAND) ||
|
|
BITTEST32(pOEM->fGeneral1, CUSTOMSIZE_MAKE_LAND_PORT))
|
|
{
|
|
fLandscape = FALSE;
|
|
}
|
|
else
|
|
{
|
|
fLandscape = TRUE;
|
|
}
|
|
}
|
|
else // portrait
|
|
{
|
|
fLandscape = BITTEST32(pOEM->fGeneral1, SWITCH_PORT_LAND)? TRUE : FALSE;
|
|
}
|
|
// Output RPDL orientation command
|
|
if (fLandscape || BITTEST32(pOEM->fGeneral1, CUSTOMSIZE_USE_LAND))
|
|
WRITESPOOLBUF(pdevobj, SET_LANDSCAPE, sizeof(SET_LANDSCAPE)-1);
|
|
else // portrait
|
|
WRITESPOOLBUF(pdevobj, SET_PORTRAIT, sizeof(SET_PORTRAIT)-1);
|
|
|
|
// Output copy#
|
|
// Check whether copy# is in the range. @Sep/01/98
|
|
{
|
|
DWORD dwCopy, dwMax;
|
|
|
|
dwCopy = *pdwParams; // NumOfCopies
|
|
dwMax = TEST_MAXCOPIES_99(pOEM->fModel)? 99 : 999;
|
|
|
|
if(dwCopy > dwMax)
|
|
dwCopy = dwMax;
|
|
else if(dwCopy < 1)
|
|
dwCopy = 1;
|
|
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), SET_MULTI_COPY, (WORD)dwCopy);
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
// @Jan/08/99 ->
|
|
if (1 == dwCopy)
|
|
pOEM->CollateType = COLLATE_OFF;
|
|
// @Jan/08/99 <-
|
|
}
|
|
|
|
fFinisherSR30Active = FALSE; // @Mar/19/99
|
|
|
|
// staple
|
|
if (pOEM->StapleType)
|
|
{
|
|
ocmd = 0;
|
|
if (BITTEST32(pOEM->fModel, GRP_MF250M)) // model = MF250M (No Punch Unit)
|
|
{
|
|
// sort:on (add duplex param since NX900 @Jan/08/99)
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), SET_SORT_ON,
|
|
BITTEST32(pOEM->fGeneral1, DUPLEX_VALID)? 1 : 0);
|
|
|
|
// paper_destination:outer tray
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, SET_PAPERDEST_OUTTRAY);
|
|
// staple:on
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, SET_STAPLE_CORNER_ON,
|
|
(fLandscape)?
|
|
STAPLE_UPPERRIGHT_CORNER : STAPLE_UPPERLEFT_CORNER);
|
|
}
|
|
else // model = MF2700,3500,3550,4550,5550,6550,NXs
|
|
{
|
|
WORD pnt;
|
|
|
|
fFinisherSR30Active = TRUE; // @Mar/19/99
|
|
|
|
// sort:on (add duplex param since NX900 @Jan/08/99)
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), SET_SORT_ON,
|
|
BITTEST32(pOEM->fGeneral1, DUPLEX_VALID)? 1 : 0);
|
|
|
|
// paper_destination:finisher shift tray
|
|
// @Jun/25/2001 ->
|
|
// if (!TEST_GWMODEL(pOEM->fModel)) // add if @Oct/10/2000
|
|
// ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, SET_PAPERDEST_FINISHER);
|
|
if (TEST_GWMODEL(pOEM->fModel))
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, SET_PAPERDEST_FINISHER_GW, pOEM->FinisherTrayNum);
|
|
else
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, SET_PAPERDEST_FINISHER, pOEM->FinisherTrayNum);
|
|
// @Jun/25/2001 <-
|
|
// Disable rotated collate.
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, COLLATE_DISABLE_ROT); // @Mar/19/99
|
|
|
|
if (pOEM->StapleType == 2) // 2 staples on the paper
|
|
{
|
|
switch (pOEM->BindPoint)
|
|
{
|
|
case BIND_LEFT:
|
|
pnt = STAPLE_LEFT2;
|
|
break;
|
|
case BIND_RIGHT:
|
|
pnt = STAPLE_RIGHT2;
|
|
break;
|
|
case BIND_UPPER:
|
|
pnt = STAPLE_UPPER2;
|
|
break;
|
|
// case BIND_ANY:
|
|
default:
|
|
pnt = (fLandscape)? STAPLE_UPPER2 : STAPLE_LEFT2;
|
|
break;
|
|
}
|
|
// staple:on
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, SET_STAPLE_ON, pnt);
|
|
}
|
|
// @Mar/18/99 ->
|
|
else if (pOEM->StapleType == 3) // 1 staple with FinisherSR12
|
|
{
|
|
// @Apr/06/99 ->
|
|
// if (BIND_RIGHT == pOEM->BindPoint)
|
|
// pnt = STAPLE_UPPERRIGHT_CORNER;
|
|
// else
|
|
// pnt = (fLandscape)? STAPLE_UPPERRIGHT_CORNER : STAPLE_UPPERLEFT_CORNER;
|
|
switch (pOEM->BindPoint)
|
|
{
|
|
case BIND_LEFT:
|
|
pnt = STAPLE_UPPERLEFT_CORNER;
|
|
break;
|
|
case BIND_RIGHT:
|
|
pnt = STAPLE_UPPERRIGHT_CORNER;
|
|
break;
|
|
default:
|
|
// If papersize without transverse (A3,B4,Tabloid,Legal)
|
|
if (!strcmp(pOEM->RPDLHeap64, SELECT_PAPER_A3) ||
|
|
!strcmp(pOEM->RPDLHeap64, SELECT_PAPER_B4) ||
|
|
!strcmp(pOEM->RPDLHeap64, SELECT_PAPER_TABD) ||
|
|
!strcmp(pOEM->RPDLHeap64, SELECT_PAPER_LEGL))
|
|
{
|
|
pnt = (fLandscape)? STAPLE_UPPERLEFT_CORNER : STAPLE_UPPERRIGHT_CORNER;
|
|
}
|
|
else
|
|
{
|
|
pnt = (fLandscape)? STAPLE_UPPERRIGHT_CORNER : STAPLE_UPPERLEFT_CORNER;
|
|
}
|
|
break;
|
|
}
|
|
// @Apr/06/99 <-
|
|
// staple:on
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, SET_STAPLE_CORNER_ON, pnt);
|
|
}
|
|
// @Mar/18/99 <-
|
|
else // 1 staple
|
|
{
|
|
switch (pOEM->BindPoint)
|
|
{
|
|
case BIND_RIGHT:
|
|
pnt = STAPLE_UPPERRIGHT_CORNER;
|
|
break;
|
|
default:
|
|
pnt = STAPLE_UPPERLEFT_CORNER;
|
|
break;
|
|
}
|
|
// staple:on
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, SET_STAPLE_CORNER_ON, pnt);
|
|
}
|
|
}
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
}
|
|
|
|
// punch
|
|
if (pOEM->PunchType)
|
|
{
|
|
WORD pnt;
|
|
|
|
ocmd = 0;
|
|
|
|
if (!fFinisherSR30Active) // modify @Mar/19/99
|
|
{
|
|
if (COLLATE_OFF != pOEM->CollateType)
|
|
{
|
|
// sort:on (add duplex param since NX900 @Jan/08/99)
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), SET_SORT_ON,
|
|
BITTEST32(pOEM->fGeneral1, DUPLEX_VALID)? 1 : 0);
|
|
}
|
|
// paper_destination:finisher shift tray
|
|
// @Jun/25/2001 ->
|
|
// if (!TEST_GWMODEL(pOEM->fModel)) // add if @Oct/10/2000
|
|
// ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, SET_PAPERDEST_FINISHER);
|
|
if (TEST_GWMODEL(pOEM->fModel))
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, SET_PAPERDEST_FINISHER_GW, pOEM->FinisherTrayNum);
|
|
else
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, SET_PAPERDEST_FINISHER, pOEM->FinisherTrayNum);
|
|
// @Jun/25/2001 <-
|
|
// SPEC of RPDL @May/27/98
|
|
// We must disable rotated collate here.
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, COLLATE_DISABLE_ROT);
|
|
}
|
|
|
|
switch (pOEM->BindPoint)
|
|
{
|
|
case BIND_LEFT:
|
|
pnt = PUNCH_LEFT;
|
|
break;
|
|
case BIND_RIGHT:
|
|
pnt = PUNCH_RIGHT;
|
|
break;
|
|
case BIND_UPPER:
|
|
pnt = PUNCH_UPPER;
|
|
break;
|
|
default:
|
|
pnt = (fLandscape)? PUNCH_UPPER : PUNCH_LEFT;
|
|
break;
|
|
}
|
|
// punch:on
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, SET_PUNCH_ON, pnt);
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
}
|
|
|
|
// collate (@Jul/31/98, entirely-modify @Dec/02/98)
|
|
if (!pOEM->StapleType && !pOEM->PunchType)
|
|
{
|
|
// sort:on (add duplex param since NX900 @Jan/08/99)
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), SET_SORT_ON,
|
|
BITTEST32(pOEM->fGeneral1, DUPLEX_VALID)? 1 : 0);
|
|
switch (pOEM->CollateType)
|
|
{
|
|
case COLLATE_UNIDIR:
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, COLLATE_DISABLE_ROT);
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
break;
|
|
|
|
case COLLATE_ROTATED:
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, COLLATE_ENABLE_ROT);
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
break;
|
|
|
|
// If shifted collate, select finisher shift tray.
|
|
case COLLATE_SHIFTED:
|
|
// @Jun/25/2001 ->
|
|
// if (!TEST_GWMODEL(pOEM->fModel)) // add if @Oct/10/2000
|
|
// ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, SET_PAPERDEST_FINISHER);
|
|
if (TEST_GWMODEL(pOEM->fModel))
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, SET_PAPERDEST_FINISHER_GW, pOEM->FinisherTrayNum);
|
|
else
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, SET_PAPERDEST_FINISHER, pOEM->FinisherTrayNum);
|
|
// @Jun/25/2001 <-
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
break;
|
|
|
|
// if collate for MF-p150,MF200,250M,2200,NXs
|
|
case COLLATE_ON:
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
ocmd = 0;
|
|
if (TEST_AFTER_SP9II(pOEM->fModel) && !BITTEST32(pOEM->fModel, GRP_NX100))
|
|
{
|
|
//@Jun/23/2000 ->
|
|
// PRINTER SIDE ISSUE: NX610,710,71 RPDL
|
|
// Printer hangs up with variable scaling command. Dummy font select is
|
|
// effective on this problem.
|
|
if (BITTEST32(pOEM->fModel, GRP_NX70) || BITTEST32(pOEM->fModel, GRP_NX710))
|
|
{
|
|
// Emit dummy Mincho font select.
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), SET_JIS_FONT_SCALE_H_ONLY, 1000L);
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, SET_JIS_FONT_NAME[0]);
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
ocmd = 0;
|
|
}
|
|
//@Jun/23/2000 <-
|
|
// Set IBM extended character code block, and set region to 'USA'. (latter @Feb/22/99)
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, SET_IBM_EXT_BLOCK);
|
|
// Disable formfeed when charcter position is around ymax-coordinate
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, SET_PAGEMAX_VALID);
|
|
}
|
|
|
|
// Set color of Textmode RectangleFill black
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, SET_TEXTRECT_BLACK);
|
|
pOEM->TextRectGray = 100; // @Jan/07/98
|
|
|
|
// Set 5mm offset at MF530,150,150e,160.
|
|
// (At these models, CMD_SET_BASEOFFSETs aren't called.)
|
|
if (TEST_GRP_OLDMF(pOEM->fModel) &&
|
|
!BITTEST32(pOEM->fGeneral2, EDGE2EDGE_PRINT) &&
|
|
!BITTEST32(pOEMExtra->fUiOption, ENABLE_TOMBO)) // add @Sep/15/98
|
|
{
|
|
pOEM->BaseOffset.x = pOEM->BaseOffset.y = 5; // mm
|
|
}
|
|
|
|
// Convert mm to dot here ((LONG)<-(DWORD) @Feb/02/99)
|
|
pOEM->BaseOffset.x = pOEM->BaseOffset.x * (LONG)(MASTERUNIT*10) /
|
|
(LONG)254 / (LONG)pOEM->nResoRatio;
|
|
pOEM->BaseOffset.y = pOEM->BaseOffset.y * (LONG)(MASTERUNIT*10) /
|
|
(LONG)254 / (LONG)pOEM->nResoRatio;
|
|
|
|
// Think about scaling (@May/18/98, (LONG)<-(DWORD) @Feb/02/99)
|
|
if (pOEM->Scale != 100 && pOEM->Scale != 0)
|
|
{
|
|
pOEM->BaseOffset.x = pOEM->BaseOffset.x * (LONG)100 / (LONG)pOEM->Scale;
|
|
pOEM->BaseOffset.y = pOEM->BaseOffset.y * (LONG)100 / (LONG)pOEM->Scale;
|
|
}
|
|
|
|
// Calculate offset for TOMBO.(BaseOffset will be changed.) @Sep/14/98
|
|
if (BITTEST32(pOEMExtra->fUiOption, ENABLE_TOMBO))
|
|
DrawTOMBO(pdevobj, INIT_TOMBO);
|
|
|
|
// Initialize current position
|
|
pOEM->TextCurPos.x = pOEM->Offset.x = pOEM->BaseOffset.x;
|
|
pOEM->TextCurPos.y = pOEM->Offset.y = pOEM->BaseOffset.y;
|
|
pOEM->TextCurPosRealY = pOEM->TextCurPos.y;
|
|
|
|
// SPEC of Unidrv5 & RPDL @Aug/14/98
|
|
// Unidrv5 doesn't order to set coordinate x,y to 0 after returning iRet=0,
|
|
// and RPDL doesn't reset coordinate y of SEND_BLOCK after initializing
|
|
// printer.
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, ESC_XM_ABS, pOEM->TextCurPos.x);
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, ESC_YM_ABS, pOEM->TextCurPos.y);
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
break;
|
|
|
|
//
|
|
// Following cases are called at the end of a print-job (JOB_FINISH)
|
|
//
|
|
|
|
case CMD_ENDDOC_SP4II: // SP4mkII,5
|
|
// If Nin1 && document finished with remaining pages, output FF.
|
|
if (TEST_NIN1_MODE(pOEM->fGeneral1) && pOEM->Nin1RemainPage)
|
|
WRITESPOOLBUF(pdevobj, FF, sizeof(FF)-1);
|
|
// Set Spacing_Unit:(H)1/120,(V)1/48inch, Code:JIS, Scaling:100%
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), ENDDOC1);
|
|
goto _ENDDOC_FINISH;
|
|
|
|
case CMD_ENDDOC_SP8: // SP8(7),8(7)mkII,80,10,10mkII
|
|
if (TEST_NIN1_MODE(pOEM->fGeneral1) && pOEM->Nin1RemainPage)
|
|
WRITESPOOLBUF(pdevobj, FF, sizeof(FF)-1);
|
|
// Set Spacing_Unit:(H)1/120,(V)1/48inch, Code:JIS, Scaling:100%
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), ENDDOC1);
|
|
if (TEST_AFTER_SP10(pOEM->fModel)) // SP10,10mkII
|
|
{
|
|
// Set Graphics_Unit:1/240inch,Engine_Resolution:240dpi
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, ENDDOC2_240DPI);
|
|
// Set Coordinate_Unit:1/720inch
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, ENDDOC3);
|
|
}
|
|
// Set Options[duplex/2in1:off,reversed_output:off,sort/stack:off]
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, ENDDOC4);
|
|
goto _ENDDOC_FINISH;
|
|
|
|
case CMD_ENDDOC_SP9: // SP9,10Pro,9II,10ProII,90
|
|
if (TEST_NIN1_MODE(pOEM->fGeneral1) && pOEM->Nin1RemainPage)
|
|
WRITESPOOLBUF(pdevobj, FF, sizeof(FF)-1);
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), ENDDOC1);
|
|
// Set Graphics_Unit:1/240inch,Engine_Resolution:400dpi
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, ENDDOC2_SP9);
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, ENDDOC3);
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, ENDDOC4);
|
|
goto _ENDDOC_FINISH;
|
|
|
|
case CMD_ENDDOC_400DPI_MODEL: // MF,MF-P,NX,IP-1
|
|
if (TEST_NIN1_MODE(pOEM->fGeneral1) && pOEM->Nin1RemainPage)
|
|
WRITESPOOLBUF(pdevobj, FF, sizeof(FF)-1);
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), ENDDOC1);
|
|
if (TEST_AFTER_SP10(pOEM->fModel) || // MF-P,NX,MF200,250M,MF-p150,MF2200
|
|
BITTEST32(pOEM->fModel, GRP_MF150E)) // MF150e,160
|
|
{
|
|
// Set Graphics_Unit:1/400inch,Engine_Resolution:400dpi
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, ENDDOC2_400DPI);
|
|
// Set Coordinate_Unit:1/720inch
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, ENDDOC3);
|
|
}
|
|
// If staple mode, do not change sort/stack of Options.
|
|
if (pOEM->StapleType || pOEM->PunchType)
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, ENDDOC4_FINISHER);
|
|
else
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, ENDDOC4);
|
|
// goto _ENDDOC_FINISH;
|
|
|
|
_ENDDOC_FINISH:
|
|
// Reset smoothing/tonner_save_mode. (PRINTER SIDE ISSUE: We must not reset SP8.)
|
|
if (TEST_BUGFIX_RESET_SMOOTH(pOEM->fModel))
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, SELECT_SMOOTHING2);
|
|
// Terminate fax at imagio FAX
|
|
if (BITTEST32(pOEMExtra->fUiOption, FAX_MODEL))
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, ENDFAX);
|
|
|
|
// @Jun/29/2001 Add TEST_NEED_JOBDEF_CMD ->
|
|
// PRINTER SIDE ISSUE: RPDL (job define command is needed) GRP_NX900 @Jan/08/99
|
|
// if (BITTEST32(pOEM->fModel, GRP_NX900) &&
|
|
// (COLLATE_OFF != pOEM->CollateType || pOEM->StapleType || pOEM->PunchType))
|
|
if (BITTEST32(pOEM->fModel, GRP_NX900) || TEST_NEED_JOBDEF_CMD(pOEM->fModel))
|
|
// @Jun/29/2001 <-
|
|
{
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, ENDDOC_JOBDEF_END);
|
|
}
|
|
// Initialize printer
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, ENDDOC5);
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
ocmd = 0;
|
|
// If binding margin is set,reset it to 0mm.
|
|
if (BITTEST32(pOEM->fGeneral1, DUPLEX_LEFTMARGIN_VALID))
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, SET_LEFTMARGIN, 1);
|
|
else if (BITTEST32(pOEM->fGeneral1, DUPLEX_UPPERMARGIN_VALID))
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, SET_UPPERMARGIN, 1);
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
if(pOEM->pRPDLHeap2K) // @Sep/09/98
|
|
MemFree(pOEM->pRPDLHeap2K); // add ; @Aug/02/2000
|
|
#ifdef DOWNLOADFONT
|
|
if(pOEM->pDLFontGlyphInfo) // @Sep/09/98
|
|
MemFree(pOEM->pDLFontGlyphInfo);
|
|
#endif // DOWNLOADFONT
|
|
break;
|
|
|
|
|
|
default:
|
|
ERR((("Unknown callback ID = %d.\n"), dwCmdCbID));
|
|
}
|
|
|
|
return iRet;
|
|
} //*** OEMCommandCallback
|
|
|
|
|
|
BOOL APIENTRY bOEMSendFontCmd( // BOOL <- VOID @Mar/27/2002
|
|
PDEVOBJ pdevobj,
|
|
PUNIFONTOBJ pUFObj,
|
|
PFINVOCATION pFInv)
|
|
{
|
|
PGETINFO_STDVAR pSV;
|
|
DWORD adwStdVariable[STDVAR_BUFSIZE(3) / sizeof(DWORD)];
|
|
DWORD dwIn, dwOut;
|
|
PBYTE pubCmd;
|
|
BYTE Cmd[128];
|
|
PIFIMETRICS pIFI;
|
|
POEMPDEV pOEM = MINIDEV_DATA(pdevobj); // @Oct/06/98
|
|
DWORD dwNeeded, dwUFO_FontH, dwUFO_FontW;
|
|
DWORD dwUFO_FontMaxW; // MSKK Jul/23/98
|
|
LONG lTmp;
|
|
|
|
VERBOSE(("** bOEMSendFontCmd() entry. **\n"));
|
|
|
|
// MSKK 1/24/98 UnSelect ->
|
|
if (0 == pFInv->dwCount)
|
|
{
|
|
// No select command. pProbably some of the
|
|
// un-select case where no invokation command is
|
|
// available. (No explicit un-select.)
|
|
return FALSE; // BOOL <- VOID @Mar/27/2002
|
|
}
|
|
// MSKK 1/24/98 <-
|
|
|
|
pubCmd = pFInv->pubCommand;
|
|
pIFI = pUFObj->pIFIMetrics;
|
|
|
|
//
|
|
// Get standard variables.
|
|
//
|
|
pSV = (PGETINFO_STDVAR)adwStdVariable;
|
|
pSV->dwSize = STDVAR_BUFSIZE(3);
|
|
pSV->dwNumOfVariable = 3;
|
|
|
|
pSV->StdVar[0].dwStdVarID = FNT_INFO_FONTHEIGHT;
|
|
pSV->StdVar[1].dwStdVarID = FNT_INFO_FONTMAXWIDTH;
|
|
pSV->StdVar[2].dwStdVarID = FNT_INFO_FONTWIDTH;
|
|
|
|
if (!pUFObj->pfnGetInfo(pUFObj, UFO_GETINFO_STDVARIABLE, pSV,
|
|
pSV->dwSize, &dwNeeded))
|
|
{
|
|
ERR(("UFO_GETINFO_STDVARIABLE failed.\n"));
|
|
return FALSE; // BOOL <- VOID @Mar/27/2002
|
|
}
|
|
|
|
// VERBOSE((("FONTHEIGHT=%d\n"), pSV->StdVar[0].lStdVariable));
|
|
// VERBOSE((("FONTMAXWIDTH=%d\n"), pSV->StdVar[1].lStdVariable));
|
|
// VERBOSE((("FONTWIDTH=%d\n"), pSV->StdVar[2].lStdVariable));
|
|
|
|
dwUFO_FontH = (DWORD)pSV->StdVar[0].lStdVariable;
|
|
dwUFO_FontMaxW = (DWORD)pSV->StdVar[1].lStdVariable; // MSKK Jul/23/98
|
|
dwUFO_FontW = (DWORD)pSV->StdVar[2].lStdVariable;
|
|
|
|
dwOut = 0;
|
|
|
|
BITCLR_BARCODE(pOEM->fGeneral2);
|
|
for (dwIn = 0; dwIn < pFInv->dwCount;)
|
|
{
|
|
if (pubCmd[dwIn] == '#')
|
|
{
|
|
//** set width & height of scalable font for Japanese font **
|
|
if (pubCmd[dwIn+1] == 'A')
|
|
{
|
|
DWORD dwWidth, dwHeight;
|
|
// pOEM->FontH_DOT(unit:dot) for TextMode clipping
|
|
pOEM->FontH_DOT = MASTER_TO_SPACING_UNIT(pOEM, ((WORD)dwUFO_FontH)); // @Jan/30/98
|
|
// dwHeight(unit:cpt) for RPDL command parameter
|
|
dwHeight = dwUFO_FontH * (DWORD)(DEVICE_MASTER_UNIT / DRIVER_MASTER_UNIT);
|
|
|
|
if(IS_DBCSCHARSET(pIFI->jWinCharSet))
|
|
// MSKK Jul/23/98 ->
|
|
// dwWidth = dwUFO_FontW * 2;
|
|
dwWidth = dwUFO_FontMaxW;
|
|
// MSKK Jul/23/98 <-
|
|
else
|
|
dwWidth = dwUFO_FontW;
|
|
dwWidth *= DEVICE_MASTER_UNIT / DRIVER_MASTER_UNIT;
|
|
|
|
// VERBOSE(("[OEMSCALABLEFONT] w=%d,h=%d(%ddot)\n",
|
|
// (WORD)dwWidth, (WORD)dwHeight, pOEM->FontH_DOT));
|
|
|
|
// @Jun/25/98 ->
|
|
// If width is slightly different to height, we suppose they are same.
|
|
if ((lTmp = dwHeight - dwWidth) != 0)
|
|
{
|
|
if (lTmp < 0)
|
|
lTmp = -lTmp;
|
|
if ((DWORD)lTmp < dwHeight / 25) // 1/25 = 4%
|
|
dwWidth = dwHeight;
|
|
}
|
|
// @Jun/25/98 <-
|
|
|
|
// Use 10pt-size raster font at SP4mkII,5,8(7),8(7)mkII
|
|
if (TEST_GRP_240DPI(pOEM->fModel) && dwWidth == dwHeight &&
|
|
dwWidth >= NEAR10PT_MIN && dwWidth <= NEAR10PT_MAX)
|
|
{
|
|
dwWidth = dwHeight = 960; // unit:cpt(centi point)
|
|
}
|
|
pOEM->dwFontW_CPT = dwWidth;
|
|
pOEM->dwFontH_CPT = dwHeight;
|
|
// @Jan/29/99 ->
|
|
// If width equals to height, we emit height parameter only.
|
|
// (This is applied to after SP9II because we want to avoid testing
|
|
// at too old models.)
|
|
if (TEST_AFTER_SP9II(pOEM->fModel) && dwWidth == dwHeight)
|
|
dwOut += safe_sprintfA(&Cmd[dwOut], sizeof(Cmd) - dwOut, ",%ld", dwHeight);
|
|
else
|
|
// @Jan/29/99 <-
|
|
dwOut += safe_sprintfA(&Cmd[dwOut], sizeof(Cmd) - dwOut, "%ld,%ld", dwWidth, dwHeight);
|
|
dwIn += 2;
|
|
} // 'if 'A'' end
|
|
|
|
//** set width & height of scalable font for IBM ext font **
|
|
else if (pubCmd[dwIn+1] == 'B')
|
|
{
|
|
// @Jan/29/99 ->
|
|
if (TEST_AFTER_SP9II(pOEM->fModel) && pOEM->dwFontW_CPT == pOEM->dwFontH_CPT)
|
|
dwOut += safe_sprintfA(&Cmd[dwOut], sizeof(Cmd) - dwOut, ",%ld", pOEM->dwFontH_CPT);
|
|
else
|
|
// @Jan/29/99 <-
|
|
dwOut += safe_sprintfA(&Cmd[dwOut], sizeof(Cmd) - dwOut, "%ld,%ld",
|
|
pOEM->dwFontW_CPT, pOEM->dwFontH_CPT);
|
|
dwIn += 2;
|
|
} // 'if 'B'' end
|
|
|
|
// Set flag for barcode
|
|
else if (pubCmd[dwIn+1] == 'C')
|
|
{
|
|
switch (pubCmd[dwIn+2])
|
|
{
|
|
case '0': // JAN(STANDARD)
|
|
pOEM->nBarMaxLen = 13 + 1; goto _BARCODE_READY;
|
|
|
|
case '1': // JAN(SHORT)
|
|
pOEM->nBarMaxLen = 8 + 1; goto _BARCODE_READY;
|
|
// @Dec/07/99 FK#50 ->
|
|
case '7': // CUSTOMER
|
|
pOEM->nBarMaxLen = 20 + 1; goto _BARCODE_READY;
|
|
case '9': // UPC(A)
|
|
pOEM->nBarMaxLen = 12 + 1; goto _BARCODE_READY;
|
|
case 'A': // UPC(A)
|
|
pOEM->nBarMaxLen = 8 + 1; goto _BARCODE_READY;
|
|
case '8': // CODE128
|
|
// @Dec/07/99 FK#50 <-
|
|
case '2': // 2of5(INDUSTRIAL)
|
|
case '3': // 2of5(MATRIX)
|
|
case '4': // 2of5(ITF)
|
|
case '5': // CODE39
|
|
case '6': // NW-7
|
|
pOEM->nBarMaxLen = BARCODE_MAX;
|
|
_BARCODE_READY:
|
|
BITSET32(pOEM->fGeneral2, BARCODE_MODE_IN);
|
|
pOEM->dwBarRatioW = dwUFO_FontH * (DWORD)(DEVICE_MASTER_UNIT / DRIVER_MASTER_UNIT);
|
|
// @Dec/17/99 FK#50 ->
|
|
// pOEM->nBarType = pubCmd[dwIn+2] - '0';
|
|
if (pubCmd[dwIn+2] < 'A')
|
|
pOEM->nBarType = pubCmd[dwIn+2] - '0';
|
|
else
|
|
pOEM->nBarType = pubCmd[dwIn+2] - 'A' + 10;
|
|
// @Dec/17/99 FK#50 <-
|
|
pOEM->RPDLHeapCount = 0;
|
|
VERBOSE(("** BARCODE(1) ratio=%d **\n",pOEM->dwBarRatioW));
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
dwIn += 3;
|
|
} // 'if 'C'' end
|
|
|
|
//** set width of scalable font **
|
|
else if (pubCmd[dwIn+1] == 'W')
|
|
{
|
|
// MSKK Jul/23/98 ->
|
|
// if (dwUFO_FontW > 0)
|
|
if (dwUFO_FontW > 0 || dwUFO_FontMaxW > 0)
|
|
// MSKK Jul/23/98 <-
|
|
{
|
|
DWORD dwWidth;
|
|
|
|
if(IS_DBCSCHARSET(pIFI->jWinCharSet))
|
|
// MSKK Jul/23/98 ->
|
|
// dwWidth = dwUFO_FontW * 2;
|
|
dwWidth = dwUFO_FontMaxW;
|
|
// MSKK Jul/23/98 <-
|
|
else
|
|
dwWidth = dwUFO_FontW;
|
|
pOEM->dwFontW_CPT = dwWidth * (DEVICE_MASTER_UNIT / DRIVER_MASTER_UNIT);
|
|
dwOut += safe_sprintfA(&Cmd[dwOut], sizeof(Cmd) - dwOut, "%ld", pOEM->dwFontW_CPT);
|
|
}
|
|
dwIn += 2;
|
|
} // 'if 'W'' end
|
|
|
|
//** set height of scalable font (include Japanese proportional font) **
|
|
else if (pubCmd[dwIn+1] == 'H')
|
|
{
|
|
pOEM->FontH_DOT = MASTER_TO_SPACING_UNIT(pOEM, ((WORD)dwUFO_FontH)); // @Jan/30/98
|
|
pOEM->dwFontH_CPT = dwUFO_FontH * (DWORD)(DEVICE_MASTER_UNIT / DRIVER_MASTER_UNIT);
|
|
dwOut += safe_sprintfA(&Cmd[dwOut], sizeof(Cmd) - dwOut, "%ld", pOEM->dwFontH_CPT);
|
|
dwIn += 2;
|
|
} // 'if 'H'' end
|
|
|
|
//** set font pitch (Horizontal-Motion-Index) **
|
|
else if (pubCmd[dwIn+1] == 'P')
|
|
{
|
|
SHORT nTmp1, nTmp2;
|
|
|
|
switch (pubCmd[dwIn+2]) // modify(add Arial,Century,etc)
|
|
{
|
|
case 'D': // DBCS (Japanese font ZENKAKU)
|
|
//95/NT4 nTmp1 = lpFont->dfAvgWidth * 2;
|
|
// MSKK 1/25/98 nTmp1 = ((SHORT)dwUFO_FontW + 1) / 2 * 2;
|
|
// MSKK Jul/23/98 nTmp1 = (SHORT)dwUFO_FontW * 2;
|
|
nTmp1 = (SHORT)dwUFO_FontMaxW;
|
|
nTmp1 = MASTER_TO_SPACING_UNIT(pOEM, nTmp1); // MSKK 1/25/98
|
|
VERBOSE(("** FontMaxW=%d dot **\n", nTmp1));
|
|
// @Aug/10/98 nTmp1 = (nTmp1 / 2 + 1) * 2; // bigger even @Jan/30/98
|
|
break;
|
|
|
|
case 'S': // SBCS (Japanese font HANKAKU)
|
|
// RPDL pitch setting command of HANKAKU is EFFECTIVE to SPACE.
|
|
// OBSOLETE @Mar/26/99 ->
|
|
//// @Jan/29/99 ->
|
|
// // RPDL pitch setting command of HANKAKU is not effective, so
|
|
// // do not emit this. (We may not delete this string in UFM.)
|
|
// if (dwOut >= 4 && Cmd[dwOut-4] == '\x1B' && Cmd[dwOut-3] == 'N')
|
|
// {
|
|
// dwIn += 3; // count up input '#PS'
|
|
// dwOut -= 4; // delete previous output '\x1BN\x1B\x1F'
|
|
// continue; // goto for loop-end
|
|
// }
|
|
// else // Maybe none comes here.
|
|
// @Jan/29/99 <-
|
|
// @Mar/26/99 <-
|
|
{
|
|
//95/NT4 nTmp1 = lpFont->dfAvgWidth;
|
|
// NSKK 1/25/98 nTmp1 = ((SHORT)dwUFO_FontW + 1) / 2;
|
|
nTmp1 = (SHORT)dwUFO_FontW;
|
|
nTmp1 = MASTER_TO_SPACING_UNIT(pOEM, nTmp1); // MSKK 1/25/98
|
|
VERBOSE(("** FontW=%d dot **\n", nTmp1));
|
|
// @Aug/10/98 nTmp1++; // 1dot bigger @Jan/30/98
|
|
}
|
|
break;
|
|
|
|
case '1': // SBCS (BoldFacePS)
|
|
case '2': // SBCS (Arial)
|
|
case '3': // SBCS (Century)
|
|
nTmp1 = (SHORT)(dwUFO_FontH * 3L / 10L); // * 0.3
|
|
nTmp1 = MASTER_TO_SPACING_UNIT(pOEM, nTmp1); // MSKK 1/25/98
|
|
break;
|
|
|
|
case '4': // SBCS (TimesNewRoman)
|
|
nTmp1 = (SHORT)(dwUFO_FontH * 27L / 100L); // * 0.27
|
|
nTmp1 = MASTER_TO_SPACING_UNIT(pOEM, nTmp1); // MSKK 1/25/98
|
|
break;
|
|
|
|
case '5': // SBCS (Symbol)
|
|
nTmp1 = (SHORT)dwUFO_FontH / 4; // * 0.25
|
|
nTmp1 = MASTER_TO_SPACING_UNIT(pOEM, nTmp1); // MSKK 1/25/98
|
|
break;
|
|
|
|
case '6': // SBCS (Wingding)
|
|
nTmp1 = (SHORT)dwUFO_FontH; // * 1
|
|
nTmp1 = MASTER_TO_SPACING_UNIT(pOEM, nTmp1); // MSKK 1/25/98
|
|
break;
|
|
|
|
case '7': // DBCS (Japanese proportional font HANKAKU)
|
|
nTmp1 = (SHORT)(dwUFO_FontH * 78L / 256L);
|
|
nTmp1 = MASTER_TO_SPACING_UNIT(pOEM, nTmp1); // MSKK 1/25/98
|
|
break;
|
|
// OBSOLETE @Mar/26/99 ->
|
|
// case '8': // DBCS (Japanese proportional font ZENKAKU)
|
|
// nTmp1 = (SHORT)(dwUFO_FontH * 170L / 256L);
|
|
// nTmp1 = MASTER_TO_SPACING_UNIT(pOEM, nTmp1); // MSKK 1/25/98
|
|
// break;
|
|
// @Mar/26/99 <-
|
|
default: // SBCS (Courier,LetterGothic,PrestigeElite)
|
|
//95/NT4 nTmp1 = lpFont->dfPixWidth;
|
|
nTmp1 = (SHORT)dwUFO_FontW;
|
|
nTmp1 = MASTER_TO_SPACING_UNIT(pOEM, nTmp1); // MSKK 1/25/98
|
|
dwIn --;
|
|
break;
|
|
}
|
|
|
|
if (nTmp1 >= 0x7E)
|
|
{
|
|
Cmd[dwOut++] = (BYTE)(((nTmp1 + 2) >> 7) + 0x81);
|
|
// PRINTER SIDE ISSUE: RPDL (We cannot set value of 0x7F & 0x80.)
|
|
if ((nTmp2 = ((nTmp1 + 2) & 0x7F) + 1) > 0x7E)
|
|
nTmp2 = 0x7E;
|
|
Cmd[dwOut++] = (BYTE)nTmp2;
|
|
}
|
|
else
|
|
{
|
|
Cmd[dwOut++] = (BYTE)(nTmp1 + 1);
|
|
}
|
|
dwIn += 3;
|
|
} // 'if 'P'' end
|
|
|
|
//** set Vertical-Motion-Index to draw combined font('^'+'A',etc). **
|
|
//** (Courier,LetterGothic,PrestigeElite,BoldFacePS) **
|
|
else if (pubCmd[dwIn+1] == 'V')
|
|
{
|
|
SHORT nTmp1, nTmp2;
|
|
|
|
// Set 1/3 height (adequate value to move vertically)
|
|
nTmp1 = (SHORT)dwUFO_FontH / 3;
|
|
nTmp1 = MASTER_TO_SPACING_UNIT(pOEM, nTmp1);
|
|
if (nTmp1 >= 0x7E)
|
|
{
|
|
Cmd[dwOut++] = (BYTE)(((nTmp1 + 2) >> 7) + 0x81);
|
|
// PRINTER SIDE ISSUE: RPDL (We cannot set value of 0x7F & 0x80.)
|
|
if ((nTmp2 = ((nTmp1 + 2) & 0x7F) + 1) > 0x7E)
|
|
nTmp2 = 0x7E;
|
|
Cmd[dwOut++] = (BYTE)nTmp2;
|
|
}
|
|
else
|
|
{
|
|
Cmd[dwOut++] = (BYTE)(nTmp1 + 1);
|
|
}
|
|
dwIn += 2;
|
|
} // 'if 'V'' end
|
|
} // 'if '#'' end
|
|
else
|
|
{
|
|
Cmd[dwOut++] = pubCmd[dwIn++];
|
|
}
|
|
} // 'for (dwIn = 0; dwIn < pFInv->dwCount;)' end
|
|
|
|
// VERBOSE(("dwOut = %d\n", dwOut)); // MSKK 1/24/98
|
|
|
|
WRITESPOOLBUF(pdevobj, Cmd, dwOut);
|
|
return TRUE; // BOOL <- VOID @Mar/27/2002
|
|
} //*** bOEMSendFontCmd
|
|
|
|
|
|
static BYTE IsDBCSLeadByteRPDL(BYTE Ch)
|
|
{
|
|
return ShiftJisRPDL[Ch];
|
|
}
|
|
|
|
static BYTE IsDifferentPRNFONT(BYTE Ch)
|
|
{
|
|
return VerticalFontCheck[Ch];
|
|
}
|
|
|
|
//---------------------------*[LOCAL] DrawTOMBO*-------------------------------
|
|
// Action:
|
|
// (a) INIT_TOMBO: calculate offset in printing. (BaseOffset will be changed)
|
|
// (b) DRAW_TOMBO: drawing TOMBO.
|
|
// Setp/14/98
|
|
//-----------------------------------------------------------------------------
|
|
static VOID DrawTOMBO(
|
|
PDEVOBJ pdevobj,
|
|
SHORT action)
|
|
{
|
|
POEMUD_EXTRADATA pOEMExtra = MINIPRIVATE_DM(pdevobj); // @Oct/06/98
|
|
POEMPDEV pOEM = MINIDEV_DATA(pdevobj); // @Oct/06/98
|
|
POINT P0;
|
|
POINT PaperSizeDoc, PaperSizeUse;
|
|
BYTE Cmd[256]; // build command here
|
|
INT ocmd = 0;
|
|
LONG lLen3, lLen10, lLen13, lWidth0_1, lSav, lTmp;
|
|
SHORT nPaperUse;
|
|
|
|
switch (pOEM->DocPaperID)
|
|
{
|
|
case RPDL_A3:
|
|
nPaperUse = RPDL_B3; break;
|
|
case RPDL_B4:
|
|
nPaperUse = RPDL_A3; break;
|
|
case RPDL_A4:
|
|
nPaperUse = RPDL_B4; break;
|
|
case RPDL_A5:
|
|
case RPDL_A6:
|
|
case RPDL_POSTCARD:
|
|
case RPDL_B5:
|
|
case RPDL_B6:
|
|
nPaperUse = RPDL_A4; break;
|
|
default:
|
|
return; // draw nothing
|
|
}
|
|
|
|
// Set acutual printed paper size & document paper size
|
|
PaperSizeUse = RPDLPageSizeE2E[nPaperUse];
|
|
PaperSizeDoc = RPDLPageSizeE2E[pOEM->DocPaperID];
|
|
|
|
// Orientation?
|
|
if (BITTEST32(pOEM->fGeneral1, ORIENT_LANDSCAPE))
|
|
{
|
|
lTmp = PaperSizeUse.x; // swap x-y
|
|
PaperSizeUse.x = PaperSizeUse.y;
|
|
PaperSizeUse.y = lTmp;
|
|
lTmp = PaperSizeDoc.x;
|
|
PaperSizeDoc.x = PaperSizeDoc.y;
|
|
PaperSizeDoc.y = lTmp;
|
|
}
|
|
|
|
// upper-left TOMBO
|
|
P0.x = (PaperSizeUse.x - PaperSizeDoc.x) / 2 / pOEM->nResoRatio;
|
|
P0.y = (PaperSizeUse.y - PaperSizeDoc.y) / 2 / pOEM->nResoRatio;
|
|
|
|
// If action is INIT_TOMBO, set BaseOffset and return
|
|
if (INIT_TOMBO == action)
|
|
{
|
|
LONG lUnprintable = BITTEST32(pOEM->fGeneral2, EDGE2EDGE_PRINT)?
|
|
0 : 240L / pOEM->nResoRatio; // 240masterunit at GPD
|
|
pOEM->BaseOffset.x += P0.x + lUnprintable;
|
|
pOEM->BaseOffset.y += P0.y + lUnprintable;
|
|
return; // exit
|
|
}
|
|
|
|
lSav = P0.x; // save left P0.x
|
|
lLen3 = 3L * (LONG)(MASTERUNIT*10) / 254L / pOEM->nResoRatio; // 3mm
|
|
lLen10 = 10L * (LONG)(MASTERUNIT*10) / 254L / pOEM->nResoRatio; // 10mm
|
|
lLen13 = 13L * (LONG)(MASTERUNIT*10) / 254L / pOEM->nResoRatio; // 13mm
|
|
lWidth0_1 = (LONG)MASTERUNIT / 254L / pOEM->nResoRatio; // 0.1mm
|
|
if (lWidth0_1 < 1)
|
|
lWidth0_1 = 1;
|
|
else if (lWidth0_1 >= 2)
|
|
lWidth0_1 = lWidth0_1 / 2 * 2 + 1; // make it odd
|
|
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), ENTER_VECTOR); // enter VectorMode
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, PEN_WIDTH, lWidth0_1);
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, DRAW_TOMBO_POLYLINE, P0.x, P0.y - lLen13,
|
|
0, lLen10, -lLen13, 0);
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, DRAW_TOMBO_POLYLINE, P0.x - lLen3, P0.y - lLen13,
|
|
0, lLen13, -lLen10, 0);
|
|
|
|
// upper-right TOMBO
|
|
// Add horizontal distance and adjustment (PaperSizeDoc.x:masterunit, AdjX:0.1mm unit)
|
|
P0.x += (PaperSizeDoc.x + (LONG)pOEMExtra->nUiTomboAdjX * (LONG)MASTERUNIT / 254L)
|
|
/ pOEM->nResoRatio;
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, DRAW_TOMBO_POLYLINE, P0.x, P0.y - lLen13,
|
|
0, lLen10, lLen13, 0);
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, DRAW_TOMBO_POLYLINE, P0.x + lLen3, P0.y - lLen13,
|
|
0, lLen13, lLen10, 0);
|
|
|
|
// lower-left TOMBO
|
|
lTmp = P0.x;
|
|
P0.x = lSav; // restore left P0.x
|
|
lSav = lTmp; // save right P0.x
|
|
// Add vertical distance and adjustment (PaperSizeDoc.y:masterunit, AdjY:0.1mm unit)
|
|
P0.y += (PaperSizeDoc.y + (LONG)pOEMExtra->nUiTomboAdjY * (LONG)MASTERUNIT / 254L)
|
|
/ pOEM->nResoRatio;
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, DRAW_TOMBO_POLYLINE, P0.x, P0.y + lLen13,
|
|
0, -lLen10, -lLen13, 0);
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, DRAW_TOMBO_POLYLINE, P0.x - lLen3, P0.y + lLen13,
|
|
0, -lLen13, -lLen10, 0);
|
|
|
|
// lower-right TOMBO
|
|
P0.x = lSav; // restore right P0.x
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, DRAW_TOMBO_POLYLINE, P0.x, P0.y + lLen13,
|
|
0, -lLen10, lLen13, 0);
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, DRAW_TOMBO_POLYLINE, P0.x + lLen3, P0.y + lLen13,
|
|
0, -lLen13, lLen10, 0);
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, EXIT_VECTOR); // exit VectorMode
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
} // *** DrawTOMBO
|
|
|
|
//---------------------------*[LOCAL] AssignIBMfont*---------------------------
|
|
// Action:
|
|
// (a) IBMFONT_ENABLE_ALL: assign IBM extended characters to block#1 where
|
|
// JIS1 characters used to be assigned.
|
|
// (b) IBMFONT_RESUME: resume (re-assign IBM extended characters to block#4.
|
|
// block#4 is insufficient for all 388 IBM characters.)
|
|
//-----------------------------------------------------------------------------
|
|
static VOID AssignIBMfont(
|
|
PDEVOBJ pdevobj,
|
|
SHORT rcID,
|
|
SHORT action)
|
|
{
|
|
BYTE Cmd[56]; // build command here
|
|
INT ocmd = 0;
|
|
WORD num;
|
|
WORD fHeightParamOnly; // @Jan/29/99
|
|
DWORD dwWidth, dwHeight;
|
|
POEMPDEV pOEM = MINIDEV_DATA(pdevobj); // @Oct/06/98
|
|
|
|
switch (rcID)
|
|
{
|
|
case MINCHO_1: case MINCHO_1+1: // horizontal font: vertical font:
|
|
case MINCHO_B1: case MINCHO_B1+1:
|
|
case MINCHO_E1: case MINCHO_E1+1:
|
|
case GOTHIC_B1: case GOTHIC_B1+1:
|
|
case GOTHIC_M1: case GOTHIC_M1+1:
|
|
case GOTHIC_E1: case GOTHIC_E1+1:
|
|
case MARUGOTHIC_B1: case MARUGOTHIC_B1+1:
|
|
case MARUGOTHIC_M1: case MARUGOTHIC_M1+1:
|
|
case MARUGOTHIC_L1: case MARUGOTHIC_L1+1:
|
|
case GYOSHO_1: case GYOSHO_1+1:
|
|
case KAISHO_1: case KAISHO_1+1:
|
|
case KYOKASHO_1: case KYOKASHO_1+1:
|
|
num = (rcID - MINCHO_1) / 2;
|
|
goto _SET_W_H;
|
|
|
|
case MINCHO_3: case MINCHO_3+1: // for NX-100
|
|
num = 0;
|
|
goto _SET_W_H;
|
|
case GOTHIC_B3: case GOTHIC_B3+1:
|
|
num = 3;
|
|
_SET_W_H:
|
|
dwWidth = pOEM->dwFontW_CPT;
|
|
dwHeight = pOEM->dwFontH_CPT;
|
|
break;
|
|
|
|
case MINCHO10_RAS: case MINCHO10_RAS+1:
|
|
num = 0; // same to MINCHO_1
|
|
dwWidth = dwHeight = 960; // unit:cpt(centi point)
|
|
break;
|
|
|
|
default:
|
|
return; // exit AssignIBMfont()
|
|
}
|
|
|
|
// @Jan/29/99 ->
|
|
// If width equals to height, we emit height parameter only.
|
|
// (This is applied to only NX-100 here.)
|
|
if (TEST_AFTER_SP9II(pOEM->fModel) && dwWidth == dwHeight)
|
|
fHeightParamOnly = TRUE;
|
|
else
|
|
fHeightParamOnly = FALSE;
|
|
// @Jan/29/99 <-
|
|
|
|
if (IBMFONT_RESUME == action)
|
|
{
|
|
// Resume JIS1 characters block where they used to be. (JIS1 -> block#1)
|
|
// @Jan/29/99 ->
|
|
if (fHeightParamOnly)
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), SET_JIS_FONT_SCALE_H_ONLY, dwHeight);
|
|
else
|
|
// @Jan/29/99 <-
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), SET_JIS_FONT_SCALE, dwWidth, dwHeight);
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, SET_JIS_FONT_NAME[num]);
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
}
|
|
|
|
// Assign IBM extended characters to block.
|
|
// @Jan/29/99 ->
|
|
if (fHeightParamOnly)
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), SET_IBM_FONT_SCALE_H_ONLY, action, dwHeight);
|
|
else
|
|
// @Jan/29/99 <-
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), SET_IBM_FONT_SCALE, action, dwWidth, dwHeight);
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, SET_IBM_FONT_NAME[num]);
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
return;
|
|
} //*** AssignIBMfont
|
|
|
|
|
|
//---------------------------*[LOCAL] SendFaxNum*------------------------------
|
|
// Action: send fax number
|
|
// (Use fax data file @Sep/30/98, Use private devmode @Oct/15/98)
|
|
//-----------------------------------------------------------------------------
|
|
static VOID SendFaxNum( // @Sep/17/98
|
|
PDEVOBJ pdevobj)
|
|
{
|
|
BYTE Cmd[256], PreNumBuf[4+16], NumBuf[32+4];
|
|
SHORT PreNumLen, cnt, SrcLen, NumLen;
|
|
INT ocmd;
|
|
LPSTR lpSrc, lpDst;
|
|
POEMUD_EXTRADATA pOEMExtra = MINIPRIVATE_DM(pdevobj);
|
|
FILEDATA FileData; // <-pFileData (formerly use MemAllocZ) @Mar/17/2000
|
|
|
|
FileData.fUiOption = 0;
|
|
// @Mar/01/2002 ->
|
|
// RWFileData(&FileData, pOEMExtra->SharedFileName, GENERIC_READ);
|
|
RWFileData(&FileData, pOEMExtra->SharedFileName, sizeof(pOEMExtra->SharedFileName), GENERIC_READ);
|
|
// @Mar/01/2002 <-
|
|
|
|
// If previous fax is finished and hold-options flag isn't valid,
|
|
// do nothing and return.
|
|
// This prevents unexpected fax until user pushes Apply button on the
|
|
// fax property sheet.
|
|
if (BITTEST32(FileData.fUiOption, PRINT_DONE) &&
|
|
!BITTEST32(pOEMExtra->fUiOption, HOLD_OPTIONS))
|
|
{
|
|
VERBOSE(("** SendFaxNum: Exit without doing anything. **\n"));
|
|
return;
|
|
}
|
|
|
|
// If not fax option ready, exit.
|
|
if (!BITTEST32(pOEMExtra->fUiOption, FAX_SEND) || pOEMExtra->FaxNumBuf[0] == 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
// Set data_type(1:image, 2:RPDL command), compression (1:MH, 3:MMR),
|
|
// simultaneous print avalilable, etc
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), BEGINFAX_HEAD,
|
|
BITTEST32(pOEMExtra->fUiOption, FAX_RPDLCMD)? 2 : 1,
|
|
BITTEST32(pOEMExtra->fUiOption, FAX_MH)? 1 : 3,
|
|
BITTEST32(pOEMExtra->fUiOption, FAX_SIMULPRINT)? 2 : 1);
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
|
|
// Copy fax channel & extra number to pre_number buffer
|
|
PreNumLen = (SHORT)safe_sprintfA(PreNumBuf, sizeof(PreNumBuf), BEGINFAX_CH, pOEMExtra->FaxCh + 1);
|
|
if (pOEMExtra->FaxExtNumBuf[0] != 0)
|
|
PreNumLen += (SHORT)safe_sprintfA(&PreNumBuf[PreNumLen], sizeof(PreNumBuf) - PreNumLen, BEGINFAX_EXTNUM, pOEMExtra->FaxExtNumBuf);
|
|
|
|
// Search each fax number (directly set number & addressbook set number)
|
|
lpSrc = pOEMExtra->FaxNumBuf; // fax number which is set directly
|
|
SrcLen = FAXBUFSIZE256-1; // FaxNumBuf limit = 255
|
|
lpDst = NumBuf;
|
|
NumLen = 0;
|
|
{
|
|
while (SrcLen-- > 0 && *lpSrc != 0)
|
|
{
|
|
// If character is DBCS, skip.
|
|
if (IsDBCSLeadByteRPDL(*lpSrc))
|
|
{
|
|
lpSrc++;
|
|
}
|
|
// If character is valid, input it to NumBuf.
|
|
else if (*lpSrc >= '0' && *lpSrc <= '9' || *lpSrc == '-' || *lpSrc == '#')
|
|
{
|
|
*lpDst++ = *lpSrc;
|
|
if (NumLen++ > 32) // limit of MF-P
|
|
{
|
|
return; // error exit
|
|
}
|
|
}
|
|
// If character is ',' , output fax number.
|
|
else if (*lpSrc == ',')
|
|
{
|
|
*lpDst = 0;
|
|
// Send fax number
|
|
if (NumLen > 0)
|
|
{
|
|
WRITESPOOLBUF(pdevobj, PreNumBuf, PreNumLen);
|
|
WRITESPOOLBUF(pdevobj, NumBuf, NumLen);
|
|
}
|
|
lpDst = NumBuf;
|
|
NumLen = 0;
|
|
}
|
|
lpSrc++;
|
|
} // 'while (SrcLen-- > 0 && *lpSrc != 0)' end
|
|
|
|
// Flush last fax number
|
|
if (NumLen > 0)
|
|
{
|
|
WRITESPOOLBUF(pdevobj, PreNumBuf, PreNumLen);
|
|
WRITESPOOLBUF(pdevobj, NumBuf, NumLen);
|
|
}
|
|
} // 'while (cnt-- > 0)' end
|
|
|
|
// Get tickcount for ID
|
|
cnt = (SHORT)(GetTickCount() / 1000L);
|
|
cnt = ABS(cnt);
|
|
// Input ID & resolution & send time, etc
|
|
if (BITTEST32(pOEMExtra->fUiOption, FAX_SETTIME) && pOEMExtra->FaxSendTime[0] != 0)
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), BEGINFAX_TAIL, cnt, pOEMExtra->FaxReso + 1, 2, pOEMExtra->FaxSendTime);
|
|
else
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), BEGINFAX_TAIL, cnt, pOEMExtra->FaxReso + 1, 1, "");
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
|
|
// Set PRINT_DONE flag in the file @Oct/20/98
|
|
FileData.fUiOption = pOEMExtra->fUiOption;
|
|
BITSET32(FileData.fUiOption, PRINT_DONE);
|
|
// @Mar/01/2002 ->
|
|
// RWFileData(&FileData, pOEMExtra->SharedFileName, GENERIC_WRITE);
|
|
RWFileData(&FileData, pOEMExtra->SharedFileName, sizeof(pOEMExtra->SharedFileName), GENERIC_WRITE);
|
|
// @Mar/01/2002 <-
|
|
|
|
return;
|
|
} //*** SendFaxNum
|
|
|
|
|
|
#ifdef JISGTT
|
|
//-----------------------------*[LOCAL] jis2sjis*------------------------------
|
|
// Action: convert JIS code to SJIS code
|
|
//-----------------------------------------------------------------------------
|
|
static VOID jis2sjis( // @Oct/27/98
|
|
BYTE jis[],
|
|
BYTE sjis[])
|
|
{
|
|
BYTE h, l;
|
|
|
|
h = jis[0];
|
|
l = jis[1];
|
|
if (h == 0)
|
|
{
|
|
sjis[0] = l;
|
|
sjis[1] = 0;
|
|
return;
|
|
}
|
|
l += 0x1F;
|
|
if (h & 0x01)
|
|
h >>= 1;
|
|
else
|
|
{
|
|
h >>= 1;
|
|
l += 0x5E;
|
|
h--;
|
|
}
|
|
if (l >= 0x7F)
|
|
l++;
|
|
if (h < 0x2F)
|
|
h += 0x71;
|
|
else
|
|
h += 0xB1;
|
|
sjis[0] = h;
|
|
sjis[1] = l;
|
|
} //*** jis2sjis
|
|
#endif // JISGTT
|
|
|
|
|
|
BOOL APIENTRY bOEMOutputCharStr( // BOOL <- VOID @Mar/27/2002
|
|
PDEVOBJ pdevobj,
|
|
PUNIFONTOBJ pUFObj,
|
|
DWORD dwType,
|
|
DWORD dwCount,
|
|
PVOID pGlyph)
|
|
{
|
|
GETINFO_GLYPHSTRING GStr;
|
|
PBYTE aubBuff; // <-BYTE aubBuff[256] MSKK Aug/13/98
|
|
PTRANSDATA pTrans;
|
|
#ifdef DBG_OUTPUTCHARSTR
|
|
PWORD pwUnicode;
|
|
#endif // DBG_OUTPUTCHARSTR
|
|
DWORD dwI;
|
|
BYTE Cmd[128];
|
|
INT ocmd = 0; // INT<-SHORT @Feb/22/99
|
|
SHORT rcID;
|
|
WORD fVertFont = FALSE, fEuroFont = FALSE, fIBMFontSupport = FALSE;
|
|
WORD fEuroFontFullset = FALSE;
|
|
#ifdef JISGTT
|
|
WORD fJisCode = FALSE; // @Oct/27/98
|
|
#endif // JISGTT
|
|
LPSTR lpChar;
|
|
BYTE CharTmp1, CharTmp2;
|
|
POEMUD_EXTRADATA pOEMExtra = MINIPRIVATE_DM(pdevobj); // @Oct/06/98
|
|
POEMPDEV pOEM = MINIDEV_DATA(pdevobj); // @Oct/06/98
|
|
#ifdef DOWNLOADFONT
|
|
SHORT mov;
|
|
WORD wSerialNum; // short->DWORD @Jun/30/98, DWORD->WORD @Aug/21/98
|
|
LONG lFontID, lGlyphID; // @Aug/21/98
|
|
LPFONTPOS lpDLFont;
|
|
#endif // DOWNLOADFONT
|
|
DWORD dwNeeded;
|
|
WORD fMemAllocated; // @Sep/09/98
|
|
|
|
// VERBOSE(("** bOEMOutputCharStr() entry. **\n"));
|
|
|
|
if (BITTEST32(pOEM->fGeneral2, TEXTRECT_CONTINUE)) // add @Dec/11/97
|
|
{
|
|
BITCLR32(pOEM->fGeneral2, TEXTRECT_CONTINUE);
|
|
// If white-rect has been done before, set raster drawmode to OR. @Jan/20/99
|
|
if (!pOEM->TextRectGray)
|
|
{
|
|
if (BITTEST32(pOEM->fGeneral1, FONT_WHITETEXT_ON))
|
|
WRITESPOOLBUF(pdevobj, ESC_WHITETEXT_ON, sizeof(ESC_WHITETEXT_ON)-1);
|
|
else
|
|
WRITESPOOLBUF(pdevobj, ESC_WHITETEXT_OFF, sizeof(ESC_WHITETEXT_OFF)-1);
|
|
}
|
|
}
|
|
|
|
//** flush Move_X,Y command saved at OEMCommandCallback
|
|
if (BITTEST32(pOEM->fGeneral1, YM_ABS_GONNAOUT))
|
|
{
|
|
BITCLR32(pOEM->fGeneral1, YM_ABS_GONNAOUT);
|
|
// Output Move_Y command here.
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), ESC_YM_ABS, pOEM->TextCurPos.y);
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
}
|
|
if (BITTEST32(pOEM->fGeneral1, XM_ABS_GONNAOUT))
|
|
{
|
|
BITCLR32(pOEM->fGeneral1, XM_ABS_GONNAOUT);
|
|
// Output Move_X command here.
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), ESC_XM_ABS, pOEM->TextCurPos.x);
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
}
|
|
|
|
// VERBOSE(("dwType = %d\n", dwType)); // MKSKK 1/24/98
|
|
|
|
switch (dwType)
|
|
{
|
|
case TYPE_GLYPHHANDLE: // device font
|
|
// #333653: Change I/F for GETINFO_GLYPHSTRING // MSKK 5/17/99 {
|
|
GStr.dwSize = sizeof (GETINFO_GLYPHSTRING);
|
|
GStr.dwCount = dwCount;
|
|
GStr.dwTypeIn = TYPE_GLYPHHANDLE;
|
|
GStr.pGlyphIn = pGlyph;
|
|
GStr.dwTypeOut = TYPE_TRANSDATA;
|
|
GStr.pGlyphOut = NULL;
|
|
GStr.dwGlyphOutSize = 0;
|
|
|
|
// Get the size of buffer for pGlyphOut.
|
|
if (pUFObj->pfnGetInfo(pUFObj, UFO_GETINFO_GLYPHSTRING, &GStr,
|
|
GStr.dwSize, &dwNeeded) || !GStr.dwGlyphOutSize)
|
|
{
|
|
ERR(("UNIFONTOBJ_GetInfo:UFO_GETINFO_GLYPHSTRING failed.\n"));
|
|
return FALSE; // BOOL <- VOID @Mar/27/2002
|
|
}
|
|
if (pOEM->pRPDLHeap2K && GStr.dwGlyphOutSize <= HEAPSIZE2K)
|
|
{
|
|
aubBuff = pOEM->pRPDLHeap2K;
|
|
fMemAllocated = FALSE;
|
|
}
|
|
else
|
|
{
|
|
if(!(aubBuff = (PBYTE)MemAllocZ(GStr.dwGlyphOutSize)))
|
|
{
|
|
ERR(("aubBuff memory allocation failed.\n"));
|
|
return FALSE; // BOOL <- VOID @Mar/27/2002
|
|
}
|
|
fMemAllocated = TRUE;
|
|
}
|
|
// } MSKK 5/17/99
|
|
|
|
#ifdef DBG_OUTPUTCHARSTR
|
|
GStr.dwSize = sizeof(GETINFO_GLYPHSTRING);
|
|
GStr.dwCount = dwCount;
|
|
GStr.dwTypeIn = TYPE_GLYPHHANDLE;
|
|
GStr.pGlyphIn = pGlyph;
|
|
GStr.dwTypeOut = TYPE_UNICODE;
|
|
GStr.pGlyphOut = aubBuff;
|
|
|
|
if (!pUFObj->pfnGetInfo(pUFObj, UFO_GETINFO_GLYPHSTRING, &GStr,
|
|
GStr.dwSize, &dwNeeded))
|
|
{
|
|
ERR(("UNIFONTOBJ_GetInfo:UFO_GETINFO_GLYPHSTRING failed.\n"));
|
|
// fix memory leak by yasuho Nov/20/2002 ->
|
|
if(fMemAllocated)
|
|
MemFree(aubBuff);
|
|
// Nov/20/2002 <-
|
|
return FALSE; // BOOL <- VOID @Mar/27/2002
|
|
}
|
|
|
|
pwUnicode = (PWORD)aubBuff;
|
|
for (dwI = 0; dwI < dwCount; dwI ++)
|
|
{
|
|
VERBOSE((("Unicode[%d] = %x\n"), dwI, pwUnicode[dwI]));
|
|
}
|
|
#endif // DBG_OUTPUTCHARSTR
|
|
|
|
#ifdef DOWNLOADFONT
|
|
// If moving value of download font remain
|
|
if (pOEM->nCharPosMoveX)
|
|
{
|
|
// Flush moving value of pre-printed download font.
|
|
if (pOEM->nCharPosMoveX > 0)
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), ESC_XM_REL, pOEM->nCharPosMoveX);
|
|
else
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), ESC_XM_RELLEFT, -pOEM->nCharPosMoveX);
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
|
|
// Clear moving value
|
|
pOEM->nCharPosMoveX = 0;
|
|
} // 'if (nCharPosMoveX)' end
|
|
#endif // DOWNLOADFONT
|
|
|
|
//
|
|
// Call the Unidriver service routine to convert
|
|
// glyph-handles into the character code data.
|
|
//
|
|
|
|
GStr.dwSize = sizeof (GETINFO_GLYPHSTRING);
|
|
GStr.dwCount = dwCount;
|
|
GStr.dwTypeIn = TYPE_GLYPHHANDLE;
|
|
GStr.pGlyphIn = pGlyph;
|
|
GStr.dwTypeOut = TYPE_TRANSDATA;
|
|
GStr.pGlyphOut = aubBuff;
|
|
|
|
if (!pUFObj->pfnGetInfo(pUFObj, UFO_GETINFO_GLYPHSTRING, &GStr,
|
|
GStr.dwSize, &dwNeeded))
|
|
{
|
|
ERR(("UNIFONTOBJ_GetInfo:UFO_GETINFO_GLYPHSTRING failed.\n"));
|
|
// fix memory leak by yasuho Nov/20/2002 ->
|
|
if(fMemAllocated)
|
|
MemFree(aubBuff);
|
|
// Nov/20/2002 <-
|
|
return FALSE; // BOOL <- VOID @Mar/27/2002
|
|
}
|
|
|
|
pTrans = (PTRANSDATA)aubBuff;
|
|
|
|
//** Draw barcode **
|
|
// fix bug with Excel @Nov/24/98
|
|
if (BITTEST32(pOEM->fGeneral2, BARCODE_MODE_IN))
|
|
{
|
|
WORD unit1, unit2, offset_y;
|
|
WORD fCheckdigitCapable, fSetBarWidth, fJANDecrease1Char;
|
|
WORD fCode128; // @Feb/08/2000
|
|
LPSTR lpDst, lpCmd;
|
|
PTRANSDATA pTransTmp; // @Nov/24/98
|
|
WORD wLen, wTmp;
|
|
|
|
ocmd = 0;
|
|
// Check start character
|
|
wTmp = wLen = (WORD)dwCount;
|
|
pTransTmp = pTrans;
|
|
while (wTmp-- > 0)
|
|
{
|
|
if (pTransTmp->uCode.ubCode == '[')
|
|
{
|
|
// barcode character is valid from now
|
|
BITSET32(pOEM->fGeneral2, BARCODE_DATA_VALID);
|
|
BITCLR32(pOEM->fGeneral2, BARCODE_CHECKDIGIT_ON);
|
|
BITCLR32(pOEM->fGeneral2, BARCODE_ROT90);
|
|
BITCLR32(pOEM->fGeneral2, BARCODE_ROT270);
|
|
pOEM->RPDLHeapCount = 0;
|
|
wLen = wTmp;
|
|
pTrans = pTransTmp+1;
|
|
#ifdef DEBUG
|
|
for (wTmp = 0; wTmp < BARCODE_MAX; wTmp++)
|
|
pOEM->RPDLHeap64[wTmp] = 0;
|
|
#endif // DEBUG
|
|
break;
|
|
}
|
|
pTransTmp++;
|
|
}
|
|
|
|
// Check barcode character length
|
|
VERBOSE(("** BARCODE(2.2) len=%d **\n",wLen));
|
|
fJANDecrease1Char = FALSE;
|
|
if (wLen > (wTmp = pOEM->nBarMaxLen - pOEM->RPDLHeapCount))
|
|
{
|
|
wLen = wTmp;
|
|
BITSET32(pOEM->fGeneral2, BARCODE_FINISH);
|
|
VERBOSE(("** BARCODE(3) limit len=%d(last=%c) **\n", wLen,
|
|
(pTrans+wLen-1)->uCode.ubCode));
|
|
// Decrease RPDLHeapCount later at JAN
|
|
if (pOEM->nBarType == BAR_TYPE_JAN_STD || pOEM->nBarType == BAR_TYPE_JAN_SHORT)
|
|
fJANDecrease1Char = TRUE;
|
|
}
|
|
|
|
// Copy barcode characters to RPDLHeap64 (temporary buffer)
|
|
lpDst = &pOEM->RPDLHeap64[pOEM->RPDLHeapCount];
|
|
fCheckdigitCapable = TEST_AFTER_SP8(pOEM->fModel)? TRUE : FALSE;
|
|
while (wLen-- > 0)
|
|
{
|
|
// Check checkdigit-on-flag-character(?) in pTrans->uCode.ubCode
|
|
if (pTrans->uCode.ubCode == '?' && fCheckdigitCapable)
|
|
{
|
|
BITSET32(pOEM->fGeneral2, BARCODE_CHECKDIGIT_ON);
|
|
pTrans++;
|
|
continue;
|
|
}
|
|
// Check end character
|
|
if (pTrans->uCode.ubCode == ']')
|
|
{
|
|
VERBOSE(("** BARCODE(4) terminator **\n"));
|
|
BITSET32(pOEM->fGeneral2, BARCODE_FINISH);
|
|
break;
|
|
}
|
|
*lpDst++ = pTrans->uCode.ubCode;
|
|
pTrans++;
|
|
pOEM->RPDLHeapCount++;
|
|
}
|
|
VERBOSE(("** BARCODE(5) copy-end BarNum=%d **\n", pOEM->RPDLHeapCount));
|
|
VERBOSE((" [%s]\n",pOEM->RPDLHeap64));
|
|
VERBOSE((" CHK = %d\n", BITTEST32(pOEM->fGeneral2, BARCODE_CHECKDIGIT_ON)));
|
|
|
|
// Finish
|
|
if (BITTEST32(pOEM->fGeneral2, BARCODE_DATA_VALID) &&
|
|
BITTEST32(pOEM->fGeneral2, BARCODE_FINISH))
|
|
{
|
|
VERBOSE(("** BARCODE(6) finish [%s] **\n", pOEM->RPDLHeap64));
|
|
// 1 barcode has been completed here
|
|
BITCLR32(pOEM->fGeneral2, BARCODE_DATA_VALID);
|
|
BITCLR32(pOEM->fGeneral2, BARCODE_FINISH);
|
|
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), ENTER_VECTOR); // enter VectorMode
|
|
|
|
// Add checkdigit
|
|
if (BITTEST32(pOEM->fGeneral2, BARCODE_CHECKDIGIT_ON))
|
|
{
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, BAR_CHECKDIGIT);
|
|
}
|
|
|
|
// Check barcode-height
|
|
if (pOEMExtra->UiBarHeight == 0)
|
|
{
|
|
pOEMExtra->UiBarHeight = BAR_H_DEFAULT; // default (=10mm)
|
|
}
|
|
else if (pOEMExtra->UiBarHeight != BAR_H_DEFAULT)
|
|
{
|
|
// Set barcode-height (convert unit from mm to dot) (SISHAGONYU)
|
|
unit1 = (WORD)(((DWORD)pOEMExtra->UiBarHeight * (DWORD)(MASTERUNIT*10)
|
|
/ (DWORD)pOEM->nResoRatio + (DWORD)(254/2)) / (DWORD)254);
|
|
VERBOSE(("** BARCODE(7) set height %d **\n", unit1));
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, BAR_H_SET, unit1);
|
|
}
|
|
|
|
if (BITTEST32(pOEMExtra->fUiOption, DISABLE_BAR_SUBFONT))
|
|
{
|
|
// Disable printing font under barcode
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, BAR_NOFONT[pOEM->nBarType]);
|
|
// Set guard-bar-height of JAN
|
|
if ((pOEM->nBarType == BAR_TYPE_JAN_STD || pOEM->nBarType == BAR_TYPE_JAN_SHORT) &&
|
|
!TEST_AFTER_SP8(pOEM->fModel))
|
|
{
|
|
offset_y = 2;
|
|
}
|
|
else // no guard-bar
|
|
{
|
|
offset_y = 0;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
offset_y = 3; // font-height = 3mm
|
|
}
|
|
// @Dec/8/99 FK#50 ->
|
|
if (pOEM->nBarType == BAR_TYPE_CUSTOMER)
|
|
{
|
|
// calculate vertical offset (barcode-height)
|
|
offset_y = (WORD)(((DWORD)(BAR_H_CUSTOMER) // 36 x 0.1mm
|
|
* (DWORD)MASTERUNIT
|
|
/ (DWORD)pOEM->nResoRatio + (DWORD)(254/2)) / (DWORD)254);
|
|
}
|
|
else
|
|
{
|
|
// @Dec/8/99 FK#50 <-
|
|
// Calculate vertical offset (barcode-height + font-height)
|
|
offset_y = (WORD)(((DWORD)(pOEMExtra->UiBarHeight + offset_y)
|
|
* (DWORD)(MASTERUNIT*10)
|
|
/ (DWORD)pOEM->nResoRatio + (DWORD)(254/2)) / (DWORD)254);
|
|
// @Dec/8/99 FK#50 ->
|
|
}
|
|
// @Dec/8/99 FK#50 <-
|
|
|
|
// Check vertical-flag-character('@') in RPDLHeap64
|
|
VERBOSE(("** BARCODE(7-1) vertical check len=%d(%c..%c) **\n",
|
|
pOEM->RPDLHeapCount, pOEM->RPDLHeap64[0],
|
|
pOEM->RPDLHeap64[pOEM->RPDLHeapCount-1] ));
|
|
// If characters are "@...", vertical(ROT270) barcode
|
|
if (pOEM->RPDLHeap64[0] == '@')
|
|
{
|
|
VERBOSE(("** BARCODE(7-2) vertical(ROT270) **\n"));
|
|
BITSET32(pOEM->fGeneral2, BARCODE_ROT270);
|
|
pOEM->RPDLHeapCount--;
|
|
}
|
|
// If characters are "...@", vertical(ROT90) barcode
|
|
else if (pOEM->RPDLHeap64[pOEM->RPDLHeapCount-1] == '@')
|
|
{
|
|
VERBOSE(("** BARCODE(7-2) vertical(ROT90) **\n"));
|
|
BITSET32(pOEM->fGeneral2, BARCODE_ROT90);
|
|
pOEM->RPDLHeapCount--;
|
|
}
|
|
// 1 charcter margin for '@' at JAN, we decrease here.
|
|
else if (fJANDecrease1Char)
|
|
{
|
|
pOEM->RPDLHeapCount--;
|
|
}
|
|
|
|
// Set barcode draw position
|
|
if (BITTEST32(pOEM->fGeneral2, BARCODE_ROT270) &&
|
|
!TEST_NIN1_MODE(pOEM->fGeneral1))
|
|
{
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, BAR_ROT270);
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, MOVE_ABSOLUTE,
|
|
pOEM->TextCurPos.y,
|
|
pOEM->PageMax.x - pOEM->TextCurPos.x - offset_y);
|
|
}
|
|
else if (BITTEST32(pOEM->fGeneral2, BARCODE_ROT90) &&
|
|
!TEST_4IN1_MODE(pOEM->fGeneral1))
|
|
{
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, BAR_ROT90);
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, MOVE_ABSOLUTE,
|
|
pOEM->PageMax.y - pOEM->TextCurPos.y,
|
|
pOEM->TextCurPos.x - offset_y);
|
|
}
|
|
else
|
|
{
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, MOVE_ABSOLUTE,
|
|
pOEM->TextCurPos.x,
|
|
pOEM->TextCurPos.y - offset_y);
|
|
}
|
|
|
|
// Check whether setting barcode-width or not.
|
|
// (Scaling is valid when 5pt<=fontsize<9pt or fontsize>11pt)
|
|
if ((pOEM->dwBarRatioW >= BAR_W_MIN_5PT &&
|
|
pOEM->dwBarRatioW < NEAR10PT_MIN) ||
|
|
pOEM->dwBarRatioW > NEAR10PT_MAX)
|
|
{
|
|
fSetBarWidth = TRUE;
|
|
}
|
|
else
|
|
{
|
|
fSetBarWidth = FALSE;
|
|
}
|
|
|
|
fCode128 = 0; // @Feb/08/2000
|
|
switch (pOEM->nBarType)
|
|
{
|
|
case BAR_TYPE_JAN_STD: // 0:JAN(STANDARD)
|
|
case BAR_TYPE_JAN_SHORT: // 1:JAN(SHORT)
|
|
case BAR_TYPE_UPC_A: // 9:UPC(A) @Dec/17/99 FK#50
|
|
case BAR_TYPE_UPC_E: // 10:UPC(E) @Dec/17/99 FK#50
|
|
// Set barcode-width
|
|
if (fSetBarWidth)
|
|
{
|
|
// Convert unit from 1/1000mm_unit*1/1000 to dot (SISHAGONYU)
|
|
unit1 = (WORD)(((DWORD)BAR_UNIT_JAN * pOEM->dwBarRatioW
|
|
/ (DWORD)pOEM->nResoRatio / (DWORD)100
|
|
* (DWORD)MASTERUNIT / (DWORD)254 + (DWORD)(1000/2))
|
|
/ (DWORD)1000);
|
|
VERBOSE(("** BARCODE(8) set unit %d **\n", unit1));
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, BAR_W_SET_JAN, unit1);
|
|
}
|
|
// Output barcode command
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, BAR_TYPE[pOEM->nBarType]);
|
|
break;
|
|
|
|
case BAR_TYPE_2OF5IND: // 2:2of5(INDUSTRIAL)
|
|
case BAR_TYPE_2OF5MTX: // 3:2of5(MATRIX)
|
|
case BAR_TYPE_2OF5ITF: // 4:2of5(ITF)
|
|
lpCmd = BAR_W_SET_2OF5;
|
|
goto _BARCODE_CMD_OUT1;
|
|
case BAR_TYPE_CODE39: // 5:CODE39
|
|
lpCmd = BAR_W_SET_C39;
|
|
// @Dec/17/99 FK#50 ->
|
|
goto _BARCODE_CMD_OUT1;
|
|
case BAR_TYPE_CODE128: // 8:CODE128
|
|
lpCmd = BAR_W_SET_C39;
|
|
fCode128 = 1;
|
|
// @Dec/17/99 FK#50 <-
|
|
_BARCODE_CMD_OUT1:
|
|
// Set standard size of module unit (1/1000mm_unit)
|
|
unit1 = BAR_UNIT1_2OF5;
|
|
unit2 = BAR_UNIT2_2OF5;
|
|
goto _BARCODE_CMD_OUT2;
|
|
|
|
case BAR_TYPE_NW7: // 6:NW-7
|
|
lpCmd = BAR_W_SET_NW7;
|
|
// Set standard size of module unit
|
|
unit1 = BAR_UNIT1_NW7;
|
|
unit2 = BAR_UNIT2_NW7;
|
|
_BARCODE_CMD_OUT2:
|
|
// Set barcode-width
|
|
if (fSetBarWidth)
|
|
{
|
|
// Convert unit from 1/1000mm_unit*1/1000 to dot (SISHAGONYU)
|
|
unit1 = (WORD)(((DWORD)unit1 * pOEM->dwBarRatioW
|
|
/ (DWORD)pOEM->nResoRatio / (DWORD)100
|
|
* (DWORD)MASTERUNIT / (DWORD)254 + (DWORD)(1000/2))
|
|
/ (DWORD)1000);
|
|
unit2 = (WORD)(((DWORD)unit2 * pOEM->dwBarRatioW
|
|
/ (DWORD)pOEM->nResoRatio / (DWORD)100
|
|
* (DWORD)MASTERUNIT / (DWORD)254 + (DWORD)(1000/2))
|
|
/ (DWORD)1000);
|
|
VERBOSE(("** BARCODE(8) set unit %d,%d **\n", unit1,unit2));
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, lpCmd);
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, BAR_W_PARAMS, unit1, unit1,
|
|
unit2, unit2, unit1);
|
|
}
|
|
// Output barcode command(operand) & character#
|
|
// @Dec/17/99 FK#50 ->
|
|
// ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, BAR_TYPE[pOEM->nBarType],
|
|
// pOEM->RPDLHeapCount);
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, BAR_TYPE[pOEM->nBarType],
|
|
pOEM->RPDLHeapCount + fCode128);
|
|
// @Dec/17/99 FK#50 <-
|
|
break;
|
|
|
|
// @Dec/07/99 FK#50 ->
|
|
case BAR_TYPE_CUSTOMER: // 7:CUSTOMER
|
|
lpCmd = BAR_W_SET_CUST;
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, lpCmd);
|
|
unit1 = (WORD)(((pOEM->dwBarRatioW / 10) + 4) / 5) * 5 ;
|
|
if ((unit1 >= 80) && (unit1 <= 115))
|
|
{
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, "%d", unit1);
|
|
}
|
|
// output barcode command(operand) & character#
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, BAR_TYPE[pOEM->nBarType],
|
|
pOEM->RPDLHeapCount);
|
|
break;
|
|
// @Dec/07/99 FK#50 <-
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
|
|
// @Dec/17/99 FK#50 ->
|
|
// Code128 data format ",xx,xx,..."
|
|
if (pOEM->nBarType == BAR_TYPE_CODE128)
|
|
{
|
|
INT len, cnt;
|
|
BYTE Code128Buf[8];
|
|
LPSTR lpTemp;
|
|
|
|
lpTemp = pOEM->RPDLHeap64;
|
|
if (BITTEST32(pOEM->fGeneral2, BARCODE_ROT270))
|
|
lpTemp++;
|
|
// send start char
|
|
len = safe_sprintfA(Code128Buf, sizeof(Code128Buf),",%d",(BYTE)BAR_CODE128_START);
|
|
WRITESPOOLBUF(pdevobj, Code128Buf, len);
|
|
for (cnt = 0; cnt < (int)pOEM->RPDLHeapCount; cnt++)
|
|
{
|
|
len = safe_sprintfA(Code128Buf, sizeof(Code128Buf),",%d",(BYTE)(lpTemp[cnt]-32));
|
|
WRITESPOOLBUF(pdevobj, Code128Buf, len);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// @Dec/17/99 FK#50 <-
|
|
// Output barcode characters
|
|
if (BITTEST32(pOEM->fGeneral2, BARCODE_ROT270)) // @Oct/22/97
|
|
WRITESPOOLBUF(pdevobj, pOEM->RPDLHeap64+1, pOEM->RPDLHeapCount);
|
|
else
|
|
WRITESPOOLBUF(pdevobj, pOEM->RPDLHeap64, pOEM->RPDLHeapCount);
|
|
// @Dec/17/99 FK#50 ->
|
|
}
|
|
// @Dec/17/99 FK#50 <-
|
|
|
|
pOEM->RPDLHeapCount = 0;
|
|
// We add ';' for safe finish in case of insufficient character at JAN.
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), TERMINATOR);
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, EXIT_VECTOR); // exit VectorMode
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
} // 'if BARCODE_DATA_VALID && BARCODE_FINISH' end
|
|
|
|
if(fMemAllocated)
|
|
MemFree(aubBuff);
|
|
|
|
return TRUE; // BOOL <- VOID @Mar/27/2002
|
|
}
|
|
//** Draw barcode END **
|
|
|
|
//** Draw device font **
|
|
BITCLR32(pOEM->fGeneral1, FONT_VERTICAL_ON);
|
|
rcID = (SHORT)pUFObj->ulFontID;
|
|
|
|
if (rcID >= JPN_FNT_FIRST && rcID <= JPN_FNT_LAST)
|
|
{
|
|
if (TEST_VERTICALFONT(rcID))
|
|
{
|
|
fVertFont = TRUE; // vertical font
|
|
BITSET32(pOEM->fGeneral1, FONT_VERTICAL_ON);
|
|
}
|
|
// IBM ext char(SJIS) supported from SP9II
|
|
if (rcID >= AFTER_SP9II_FNT_FIRST)
|
|
fIBMFontSupport = TRUE;
|
|
// @Oct/27/98 ->
|
|
#ifdef JISGTT
|
|
// Current UFM of PMincho & PGothic declare JIS code set.
|
|
if (rcID >= JPN_MSPFNT_FIRST)
|
|
fJisCode = TRUE;
|
|
#endif // JISGTT
|
|
// @Oct/27/98 <-
|
|
}
|
|
else if (rcID >= EURO_FNT_FIRST && rcID <= EURO_FNT_LAST)
|
|
{
|
|
fEuroFont = TRUE; // European font(Courier,BoldFacePS,etc).
|
|
// Fullset(0x20-0xFF) fonts(Arial,Century,TimesNewRoman,etc) are supported
|
|
// from NX-110
|
|
if (rcID >= EURO_MSFNT_FIRST)
|
|
fEuroFontFullset = TRUE;
|
|
}
|
|
|
|
for (dwI = 0; dwI < dwCount; dwI ++, pTrans ++) // increment pTrans MSKK 98/3/16
|
|
{
|
|
switch (pTrans->ubType & MTYPE_FORMAT_MASK)
|
|
{
|
|
case MTYPE_DIRECT: // SBCS (European font & Japanese font HANKAkU)
|
|
// VERBOSE((("TYPE_TRANSDATA:ubCode:0x%x\n"), pTrans->uCode.ubCode));
|
|
|
|
lpChar = &pTrans->uCode.ubCode;
|
|
CharTmp1 = *lpChar;
|
|
|
|
if (fEuroFont) //** European font **
|
|
{
|
|
// ** print 1st SBCS font(0x20-0x7F) **
|
|
if (CharTmp1 < 0x80)
|
|
{
|
|
// PRINTER SIDE ISSUE: RPDL
|
|
// take care of device font bug
|
|
if (rcID == SYMBOL && CharTmp1 == 0x60) // "radical extention"
|
|
{
|
|
WRITESPOOLBUF(pdevobj, DOUBLE_SPACE, sizeof(DOUBLE_SPACE)-1);
|
|
WRITESPOOLBUF(pdevobj, &CharTmp1, 1);
|
|
WRITESPOOLBUF(pdevobj, DOUBLE_BS, sizeof(DOUBLE_BS)-1);
|
|
}
|
|
else
|
|
{
|
|
WRITESPOOLBUF(pdevobj, &CharTmp1, 1);
|
|
}
|
|
continue; // goto for-loop end
|
|
}
|
|
|
|
|
|
// ** print 2nd SBCS font(0x80-0xFF) **
|
|
// If full-set(0x20-0xFF) font
|
|
if (fEuroFontFullset)
|
|
{
|
|
// If same to DBCS 1st byte
|
|
if (IsDBCSLeadByteRPDL(CharTmp1))
|
|
WRITESPOOLBUF(pdevobj, ESC_CTRLCODE, sizeof(ESC_CTRLCODE)-1);
|
|
WRITESPOOLBUF(pdevobj, &CharTmp1, 1);
|
|
continue; // goto for-loop end
|
|
}
|
|
|
|
// If not full-set font
|
|
switch (CharTmp1)
|
|
{
|
|
case 0x82:
|
|
CharTmp1 = ','; goto _WRITE1BYTE;
|
|
case 0x88:
|
|
CharTmp1 = '^'; goto _WRITE1BYTE;
|
|
case 0x8B:
|
|
CharTmp1 = '<'; goto _WRITE1BYTE;
|
|
case 0x9B:
|
|
CharTmp1 = '>'; goto _WRITE1BYTE;
|
|
case 0x91: // single quatation
|
|
case 0x92:
|
|
CharTmp1 = 0x27; goto _WRITE1BYTE;
|
|
case 0x93: // double quatation
|
|
case 0x94:
|
|
CharTmp1 = 0x22; goto _WRITE1BYTE;
|
|
case 0x96:
|
|
case 0x97:
|
|
CharTmp1 = '-'; goto _WRITE1BYTE;
|
|
case 0x98:
|
|
CharTmp1 = '~'; goto _WRITE1BYTE;
|
|
case 0xA6:
|
|
CharTmp1 = '|'; goto _WRITE1BYTE;
|
|
case 0xAD:
|
|
CharTmp1 = '-'; goto _WRITE1BYTE;
|
|
case 0xB8:
|
|
CharTmp1 = ','; goto _WRITE1BYTE;
|
|
case 0xD7:
|
|
CharTmp1 = 'x'; goto _WRITE1BYTE;
|
|
|
|
case 0x83:
|
|
CharTmp1 = 0xBF; goto _WRITE1BYTE;
|
|
case 0x86:
|
|
CharTmp1 = 0xA8; goto _WRITE1BYTE;
|
|
case 0x99:
|
|
CharTmp1 = 0xA9; goto _WRITE1BYTE;
|
|
case 0xE7:
|
|
CharTmp1 = 0xA2; goto _WRITE1BYTE;
|
|
case 0xE8:
|
|
CharTmp1 = 0xBD; goto _WRITE1BYTE;
|
|
case 0xE9:
|
|
CharTmp1 = 0xBB; goto _WRITE1BYTE;
|
|
case 0xF9:
|
|
CharTmp1 = 0xBC; goto _WRITE1BYTE;
|
|
case 0xFC:
|
|
CharTmp1 = 0xFD; goto _WRITE1BYTE;
|
|
|
|
case 0xA0:
|
|
case 0xA3:
|
|
case 0xA4:
|
|
goto _WRITE1BYTE;
|
|
|
|
case 0xA2:
|
|
CharTmp1 = 0xDE; goto _WRITE1BYTE;
|
|
case 0xA5: //YEN mark
|
|
CharTmp1 = 0xCC; goto _WRITE1BYTE;
|
|
case 0xA7:
|
|
CharTmp1 = 0xC0; goto _WRITE1BYTE;
|
|
case 0xA8:
|
|
CharTmp1 = 0xBE; goto _WRITE1BYTE;
|
|
case 0xA9:
|
|
CharTmp1 = 0xAB; goto _WRITE1BYTE;
|
|
case 0xAE:
|
|
CharTmp1 = 0xAA; goto _WRITE1BYTE;
|
|
case 0xAF:
|
|
CharTmp1 = 0xB0; goto _WRITE1BYTE;
|
|
case 0xB0:
|
|
case 0xBA:
|
|
CharTmp1 = 0xA6; goto _WRITE1BYTE;
|
|
case 0xB4:
|
|
CharTmp1 = 0xA7; goto _WRITE1BYTE;
|
|
case 0xB5:
|
|
CharTmp1 = 0xA5; goto _WRITE1BYTE;
|
|
case 0xB6:
|
|
CharTmp1 = 0xAF; goto _WRITE1BYTE;
|
|
case 0xBC:
|
|
CharTmp1 = 0xAC; goto _WRITE1BYTE;
|
|
case 0xBD:
|
|
CharTmp1 = 0xAE; goto _WRITE1BYTE;
|
|
case 0xBE:
|
|
CharTmp1 = 0xAD; goto _WRITE1BYTE;
|
|
case 0xC4:
|
|
CharTmp1 = 0xDB; goto _WRITE1BYTE;
|
|
case 0xC5:
|
|
CharTmp1 = 0xD6; goto _WRITE1BYTE;
|
|
case 0xC9:
|
|
CharTmp1 = 0xB8; goto _WRITE1BYTE;
|
|
case 0xD6:
|
|
CharTmp1 = 0xDC; goto _WRITE1BYTE;
|
|
case 0xDC:
|
|
CharTmp1 = 0xDD; goto _WRITE1BYTE;
|
|
case 0xDF:
|
|
CharTmp1 = 0xFE; goto _WRITE1BYTE;
|
|
|
|
_WRITE1BYTE:
|
|
WRITESPOOLBUF(pdevobj, &CharTmp1, 1);
|
|
break;
|
|
|
|
|
|
// Combine 2 fonts, because next fonts do not exist in device font
|
|
case 0x87:
|
|
CharTmp1 = '='; CharTmp2 = '|'; goto _COMBINEDFONT;
|
|
case 0xD0: // 'D' with middle bar
|
|
CharTmp1 = 'D'; CharTmp2 = '-'; goto _COMBINEDFONT;
|
|
case 0xD8: // 'O' with slash
|
|
CharTmp1 = 'O'; CharTmp2 = '/'; goto _COMBINEDFONT;
|
|
case 0xE0: // 'a' with right-down dash
|
|
CharTmp1 = 'a'; CharTmp2 = '`'; goto _COMBINEDFONT;
|
|
case 0xE1: // 'a' with left-down dash
|
|
CharTmp1 = 'a'; CharTmp2 = 0xA7; goto _COMBINEDFONT;
|
|
case 0xE2: // 'a' with hat
|
|
CharTmp1 = 'a'; CharTmp2 = '^'; goto _COMBINEDFONT;
|
|
case 0xE3: // 'a' with tilde
|
|
CharTmp1 = 'a'; CharTmp2 = '~'; goto _COMBINEDFONT;
|
|
case 0xE4: // 'a' with umlaut
|
|
CharTmp1 = 'a'; CharTmp2 = 0xBE; goto _COMBINEDFONT;
|
|
case 0xE5: // 'a' with circle
|
|
CharTmp1 = 'a'; CharTmp2 = 0xA6; goto _COMBINEDFONT;
|
|
case 0xEA: // 'e' with hat
|
|
CharTmp1 = 'e'; CharTmp2 = '^'; goto _COMBINEDFONT;
|
|
case 0xEB: // 'e' with umlaut
|
|
CharTmp1 = 'e'; CharTmp2 = 0xBE; goto _COMBINEDFONT;
|
|
case 0xF1: // 'n' with tilde
|
|
CharTmp1 = 'n'; CharTmp2 = '~'; goto _COMBINEDFONT;
|
|
case 0xF2: // 'o' with right-down dash
|
|
CharTmp1 = 'o'; CharTmp2 = '`'; goto _COMBINEDFONT;
|
|
case 0xF3: // 'o' with left-down dash
|
|
CharTmp1 = 'o'; CharTmp2 = 0xA7; goto _COMBINEDFONT;
|
|
case 0xF4: // 'o' with hat
|
|
CharTmp1 = 'o'; CharTmp2 = '^'; goto _COMBINEDFONT;
|
|
case 0xF5: // 'o' with tilde
|
|
CharTmp1 = 'o'; CharTmp2 = '~'; goto _COMBINEDFONT;
|
|
case 0xF6: // 'o' with umlaut
|
|
CharTmp1 = 'o'; CharTmp2 = 0xBE; goto _COMBINEDFONT;
|
|
case 0xF8: // 'o' with slash
|
|
CharTmp1 = 'o'; CharTmp2 = '/'; goto _COMBINEDFONT;
|
|
case 0xFA: // 'u' with left-down dash
|
|
CharTmp1 = 'u'; CharTmp2 = 0xA7; goto _COMBINEDFONT;
|
|
case 0xFB: // 'u' with hat
|
|
CharTmp1 = 'u'; CharTmp2 = '^'; goto _COMBINEDFONT;
|
|
case 0xFD: // 'y' with left-down dash
|
|
CharTmp1 = 'y'; CharTmp2 = 0xA7; goto _COMBINEDFONT;
|
|
case 0xFF: // 'y' with umlaut
|
|
CharTmp1 = 'y'; CharTmp2 = 0xBE; goto _COMBINEDFONT;
|
|
_COMBINEDFONT:
|
|
WRITESPOOLBUF(pdevobj, &CharTmp2, 1);
|
|
WRITESPOOLBUF(pdevobj, BS, sizeof(BS)-1);
|
|
if (rcID == BOLDFACEPS && CharTmp1 != 'D') // BoldFacePS(except 'D'+'-')
|
|
WRITESPOOLBUF(pdevobj, BS, sizeof(BS)-1);
|
|
WRITESPOOLBUF(pdevobj, &CharTmp1, 1);
|
|
break;
|
|
|
|
case 0x9F: // 'Y' with umlaut
|
|
CharTmp1 = 'Y'; CharTmp2 = 0xBE; goto _COMBINEDFONT_HALFUP;
|
|
case 0xC0: // 'A' with right-down dash
|
|
CharTmp1 = 'A'; CharTmp2 = '`'; goto _COMBINEDFONT_HALFUP;
|
|
case 0xC1: // 'A' with left-down dash
|
|
CharTmp1 = 'A'; CharTmp2 = 0xA7; goto _COMBINEDFONT_HALFUP;
|
|
case 0xC2: // 'A' with hat
|
|
CharTmp1 = 'A'; CharTmp2 = '^'; goto _COMBINEDFONT_HALFUP;
|
|
case 0xC3: // 'A' with tilde
|
|
CharTmp1 = 'A'; CharTmp2 = '~'; goto _COMBINEDFONT_HALFUP;
|
|
case 0xC8: // 'E' with right-down dash
|
|
CharTmp1 = 'E'; CharTmp2 = '`'; goto _COMBINEDFONT_HALFUP;
|
|
case 0xCA: // 'E' with hat
|
|
CharTmp1 = 'E'; CharTmp2 = '^'; goto _COMBINEDFONT_HALFUP;
|
|
case 0xCB: // 'E' with umlaut
|
|
CharTmp1 = 'E'; CharTmp2 = 0xBE; goto _COMBINEDFONT_HALFUP;
|
|
case 0xCC: // 'I' with right-down dash
|
|
CharTmp1 = 'I'; CharTmp2 = '`'; goto _COMBINEDFONT_HALFUP;
|
|
case 0xCD: // 'I' with left-down dash
|
|
CharTmp1 = 'I'; CharTmp2 = 0xA7; goto _COMBINEDFONT_HALFUP;
|
|
case 0xCE: // 'I' with hat
|
|
CharTmp1 = 'I'; CharTmp2 = '^'; goto _COMBINEDFONT_HALFUP;
|
|
case 0xCF: // 'I' with umlaut
|
|
CharTmp1 = 'I'; CharTmp2 = 0xBE; goto _COMBINEDFONT_HALFUP;
|
|
case 0xD1: // 'N' with tilde
|
|
CharTmp1 = 'N'; CharTmp2 = '~'; goto _COMBINEDFONT_HALFUP;
|
|
case 0xD2: // 'O' with right-down dash
|
|
CharTmp1 = 'O'; CharTmp2 = '`'; goto _COMBINEDFONT_HALFUP;
|
|
case 0xD3: // 'O' with left-down dash
|
|
CharTmp1 = 'O'; CharTmp2 = 0xA7; goto _COMBINEDFONT_HALFUP;
|
|
case 0xD4: // 'O' with hat
|
|
CharTmp1 = 'O'; CharTmp2 = '^'; goto _COMBINEDFONT_HALFUP;
|
|
case 0xD5: // 'O' with tilde
|
|
CharTmp1 = 'O'; CharTmp2 = '~'; goto _COMBINEDFONT_HALFUP;
|
|
case 0xD9: // 'U' with right-down dash
|
|
CharTmp1 = 'U'; CharTmp2 = '`'; goto _COMBINEDFONT_HALFUP;
|
|
case 0xDA: // 'U' with left-down dash
|
|
CharTmp1 = 'U'; CharTmp2 = 0xA7; goto _COMBINEDFONT_HALFUP;
|
|
case 0xDB: // 'U' with hat
|
|
CharTmp1 = 'U'; CharTmp2 = '^'; goto _COMBINEDFONT_HALFUP;
|
|
case 0xDD: // 'Y' with left-down dash
|
|
CharTmp1 = 'Y'; CharTmp2 = 0xA7; goto _COMBINEDFONT_HALFUP;
|
|
_COMBINEDFONT_HALFUP:
|
|
WRITESPOOLBUF(pdevobj, ESC_HALFUP, sizeof(ESC_HALFUP)-1);
|
|
WRITESPOOLBUF(pdevobj, &CharTmp2, 1);
|
|
WRITESPOOLBUF(pdevobj, ESC_HALFDOWN, sizeof(ESC_HALFDOWN)-1);
|
|
WRITESPOOLBUF(pdevobj, BS, sizeof(BS)-1);
|
|
if (rcID == BOLDFACEPS && CharTmp1 != 'I') // BoldFacePS(except 'I')
|
|
WRITESPOOLBUF(pdevobj, BS, sizeof(BS)-1);
|
|
WRITESPOOLBUF(pdevobj, &CharTmp1, 1);
|
|
break;
|
|
|
|
|
|
case 0x84: // double quatation at bottom
|
|
CharTmp1 = 0x22;
|
|
WRITESPOOLBUF(pdevobj, ESC_DOWN, sizeof(ESC_DOWN)-1);
|
|
WRITESPOOLBUF(pdevobj, &CharTmp1, 1);
|
|
WRITESPOOLBUF(pdevobj, ESC_UP, sizeof(ESC_UP)-1);
|
|
break;
|
|
|
|
case 0xB1: // plus-minus
|
|
if (rcID == BOLDFACEPS)
|
|
{
|
|
CharTmp2 = '_'; CharTmp1 = '+';
|
|
WRITESPOOLBUF(pdevobj, &CharTmp2, 1);
|
|
WRITESPOOLBUF(pdevobj, BS, sizeof(BS)-1);
|
|
}
|
|
else
|
|
{
|
|
CharTmp2 = '+'; CharTmp1 = '-';
|
|
WRITESPOOLBUF(pdevobj, &CharTmp2, 1);
|
|
}
|
|
WRITESPOOLBUF(pdevobj, BS, sizeof(BS)-1);
|
|
WRITESPOOLBUF(pdevobj, ESC_DOWN, sizeof(ESC_DOWN)-1);
|
|
WRITESPOOLBUF(pdevobj, &CharTmp1, 1);
|
|
WRITESPOOLBUF(pdevobj, ESC_UP, sizeof(ESC_UP)-1);
|
|
break;
|
|
|
|
case 0x95:
|
|
case 0xB7:
|
|
default: // print unprintable font by dot(KATAKANA)
|
|
// Set 2nd SBCS font table(0x80-0xFF) as KATAKANA
|
|
WRITESPOOLBUF(pdevobj, ESC_SHIFT_IN, sizeof(ESC_SHIFT_IN)-1);
|
|
CharTmp1 = 0xA5;
|
|
WRITESPOOLBUF(pdevobj, &CharTmp1, 1);
|
|
// Set 2nd SBCS font table(0x80-0xFF) as 2ndANK
|
|
WRITESPOOLBUF(pdevobj, ESC_SHIFT_OUT, sizeof(ESC_SHIFT_OUT)-1);
|
|
break;
|
|
} // 'switch (CharTmp1)' end
|
|
}
|
|
else //** Japanese font (HANKAKU) **
|
|
{
|
|
if (fVertFont) // vertical font
|
|
{
|
|
// HANKAKU(Alphabetical&Numeric) fonts must not become vertical.
|
|
WRITESPOOLBUF(pdevobj, ESC_VERT_OFF, sizeof(ESC_VERT_OFF)-1);
|
|
WRITESPOOLBUF(pdevobj, lpChar, 1);
|
|
WRITESPOOLBUF(pdevobj, ESC_VERT_ON, sizeof(ESC_VERT_ON)-1);
|
|
}
|
|
else // normal (non vertical) font
|
|
{
|
|
WRITESPOOLBUF(pdevobj, lpChar, 1);
|
|
}
|
|
} // 'if European font else Japanese font(HANKAKU)' end
|
|
|
|
|
|
break;
|
|
|
|
case MTYPE_PAIRED: // DBCS (Japanes font ZENKAKU)
|
|
// VERBOSE((("TYPE_TRANSDATA:ubPairs:0x%x\n"), *(PWORD)(pTrans->uCode.ubPairs)));
|
|
|
|
lpChar = pTrans->uCode.ubPairs;
|
|
|
|
// For proportional font UFM which has GTT @Oct/27/98 ->
|
|
#ifdef JISGTT
|
|
if (fJisCode)
|
|
{
|
|
BYTE jis[2], sjis[2];
|
|
|
|
jis[0] = *lpChar;
|
|
jis[1] = *(lpChar+1);
|
|
jis2sjis(jis, sjis);
|
|
(BYTE)*lpChar = sjis[0];
|
|
(BYTE)*(lpChar+1) = sjis[1];
|
|
}
|
|
#endif // JISGTT
|
|
// @Oct/27/98 <-
|
|
CharTmp1 = *lpChar;
|
|
CharTmp2 = *(lpChar+1);
|
|
// Some vertical device font differ from TrueType font
|
|
if (fVertFont)
|
|
{
|
|
if (CharTmp1 == 0x81)
|
|
{
|
|
// Make vertical device font same to TrueType
|
|
if (IsDifferentPRNFONT(CharTmp2))
|
|
{
|
|
WRITESPOOLBUF(pdevobj, ESC_VERT_OFF, sizeof(ESC_VERT_OFF)-1);
|
|
WRITESPOOLBUF(pdevobj, ESC_ROT90, sizeof(ESC_ROT90)-1);
|
|
WRITESPOOLBUF(pdevobj, lpChar, 2);
|
|
WRITESPOOLBUF(pdevobj, ESC_ROT0, sizeof(ESC_ROT0)-1);
|
|
WRITESPOOLBUF(pdevobj, ESC_VERT_ON, sizeof(ESC_VERT_ON)-1);
|
|
continue; // goto for-loop end
|
|
}
|
|
else if (CharTmp2 >= 0xA8 && CharTmp2 <= 0xAB)
|
|
{ //IMAGIO's GOTHIC device font differ from TrueType font
|
|
goto _WITHOUTROTATION;
|
|
}
|
|
}
|
|
|
|
if (CharTmp1 == 0x84 &&
|
|
CharTmp2 >= 0x9F && CharTmp2 <= 0xBE)
|
|
{
|
|
_WITHOUTROTATION:
|
|
WRITESPOOLBUF(pdevobj, ESC_VERT_OFF, sizeof(ESC_VERT_OFF)-1);
|
|
WRITESPOOLBUF(pdevobj, lpChar, 2);
|
|
WRITESPOOLBUF(pdevobj, ESC_VERT_ON, sizeof(ESC_VERT_ON)-1);
|
|
continue; // goto for-loop end
|
|
}
|
|
} // 'if(fVertFont)' end
|
|
|
|
// Code of HEISEI mark of device font differs from SJIS
|
|
if (CharTmp1 == 0x87 && CharTmp2 == 0x7E)
|
|
{
|
|
(BYTE)*(lpChar+1) = 0x9E;
|
|
WRITESPOOLBUF(pdevobj, lpChar, 2);
|
|
continue; // goto for-loop end
|
|
}
|
|
|
|
// If models which support IBM ext char code
|
|
if (fIBMFontSupport)
|
|
{
|
|
WRITESPOOLBUF(pdevobj, lpChar, 2);
|
|
continue; // goto for-loop end
|
|
}
|
|
|
|
// Handle IBM ext char code here at models which do not support it
|
|
switch (CharTmp1)
|
|
{
|
|
case 0xFA:
|
|
if (CharTmp2 >= 0x40 && CharTmp2 <= 0xFC)
|
|
(BYTE)*lpChar = 0x0EB;
|
|
goto _WRITE2BYTE;
|
|
|
|
case 0xFB:
|
|
if (CharTmp2 >= 0x40 && CharTmp2 <= 0x9E)
|
|
{
|
|
(BYTE)*lpChar = 0xEC;
|
|
goto _WRITE2BYTE;
|
|
}
|
|
if (CharTmp2 >= 0x9F && CharTmp2 <= 0xDD)
|
|
{
|
|
(BYTE)*lpChar = 0x8A;
|
|
(BYTE)*(lpChar+1) -= 0x5F;
|
|
goto _WRITE2BYTE_SWITCHBLOCK;
|
|
}
|
|
if (CharTmp2 >= 0xDE && CharTmp2 <= 0xFC)
|
|
{
|
|
(BYTE)*lpChar = 0x8A;
|
|
(BYTE)*(lpChar+1) -= 0x5E;
|
|
goto _WRITE2BYTE_SWITCHBLOCK;
|
|
}
|
|
goto _WRITE2BYTE;
|
|
|
|
case 0xFC:
|
|
if (CharTmp2 >= 0x40 && CharTmp2 <= 0x4B)
|
|
{
|
|
(BYTE)*lpChar = 0x8A;
|
|
(BYTE)*(lpChar+1) += 0x5F;
|
|
goto _WRITE2BYTE_SWITCHBLOCK;
|
|
}
|
|
goto _WRITE2BYTE;
|
|
|
|
|
|
case 0xED: //IBM extended char selected by NEC
|
|
if (CharTmp2 >= 0x40 && CharTmp2 <= 0x62)
|
|
{
|
|
(BYTE)*lpChar = 0xEB;
|
|
(BYTE)*(lpChar+1) += 0x1C;
|
|
goto _WRITE2BYTE;
|
|
}
|
|
if (CharTmp2 >= 0x63 && CharTmp2 <= 0x7E)
|
|
{
|
|
(BYTE)*lpChar = 0xEB;
|
|
(BYTE)*(lpChar+1) += 0x1D;
|
|
goto _WRITE2BYTE;
|
|
}
|
|
if (CharTmp2 >= 0x80 && CharTmp2 <= 0xE0)
|
|
{
|
|
(BYTE)*lpChar = 0xEB;
|
|
(BYTE)*(lpChar+1) += 0x1C;
|
|
goto _WRITE2BYTE;
|
|
}
|
|
if (CharTmp2 >= 0xE1 && CharTmp2 <= 0xFC)
|
|
{
|
|
(BYTE)*lpChar = 0xEC;
|
|
(BYTE)*(lpChar+1) -= 0xA1;
|
|
goto _WRITE2BYTE;
|
|
}
|
|
goto _WRITE2BYTE;
|
|
|
|
case 0xEE: //IBM extended char selected by NEC
|
|
if (CharTmp2 >= 0x40 && CharTmp2 <= 0x62)
|
|
{
|
|
(BYTE)*lpChar = 0xEC;
|
|
(BYTE)*(lpChar+1) += 0x1C;
|
|
goto _WRITE2BYTE;
|
|
}
|
|
if (CharTmp2 >= 0x63 && CharTmp2 <= 0x7E)
|
|
{
|
|
(BYTE)*lpChar = 0xEC;
|
|
(BYTE)*(lpChar+1) += 0x1D;
|
|
goto _WRITE2BYTE;
|
|
}
|
|
if (CharTmp2 >= 0x80 && CharTmp2 <= 0x82)
|
|
{
|
|
(BYTE)*lpChar = 0xEC;
|
|
(BYTE)*(lpChar+1) += 0x1C;
|
|
goto _WRITE2BYTE;
|
|
}
|
|
if (CharTmp2 >= 0x83 && CharTmp2 <= 0xC1)
|
|
{
|
|
(BYTE)*lpChar = 0x8A;
|
|
(BYTE)*(lpChar+1) -= 0x43;
|
|
goto _WRITE2BYTE_SWITCHBLOCK;
|
|
}
|
|
if (CharTmp2 >= 0xC2 && CharTmp2 <= 0xEC)
|
|
{
|
|
(BYTE)*lpChar = 0x8A;
|
|
(BYTE)*(lpChar+1) -= 0x42;
|
|
goto _WRITE2BYTE_SWITCHBLOCK;
|
|
}
|
|
if (CharTmp2 >= 0xEF && CharTmp2 <= 0xF8)
|
|
{
|
|
(BYTE)*lpChar = 0xEB;
|
|
(BYTE)*(lpChar+1) -= 0xAF;
|
|
goto _WRITE2BYTE;
|
|
}
|
|
if (CharTmp2 >= 0xF9 && CharTmp2 <= 0xFC)
|
|
{
|
|
(BYTE)*lpChar = 0xEB;
|
|
(BYTE)*(lpChar+1) -= 0xA5;
|
|
goto _WRITE2BYTE;
|
|
}
|
|
goto _WRITE2BYTE;
|
|
|
|
_WRITE2BYTE_SWITCHBLOCK:
|
|
// Assign IBM char to JIS1 block
|
|
AssignIBMfont(pdevobj, rcID, IBMFONT_ENABLE_ALL);
|
|
// Output char code
|
|
WRITESPOOLBUF(pdevobj, lpChar, 2);
|
|
// Resume the block
|
|
AssignIBMfont(pdevobj, rcID, IBMFONT_RESUME);
|
|
break;
|
|
|
|
default:
|
|
_WRITE2BYTE:
|
|
WRITESPOOLBUF(pdevobj, lpChar, 2);
|
|
break;
|
|
} // 'switch (CharTmp1)' end
|
|
|
|
break;
|
|
} // 'switch (pTrans->ubType & MTYPE_FORMAT_MASK)' end
|
|
} // 'for (dwI = 0; dwI < dwCount; dwI ++, pTrans++)' end
|
|
//** Draw device font END **
|
|
|
|
if(fMemAllocated)
|
|
MemFree(aubBuff);
|
|
|
|
break;
|
|
|
|
|
|
case TYPE_GLYPHID: // donwload font
|
|
#ifdef DOWNLOADFONT
|
|
// If negative, do not draw. (lFontID should begin from 0.)
|
|
// VERBOSE((("** ulFontID=%d **\n"), pUFObj->ulFontID));
|
|
if ((lFontID = (LONG)pUFObj->ulFontID - DLFONT_ID_MIN_GPD) < 0)
|
|
break; // exit
|
|
|
|
//** Draw download font **
|
|
for (dwI = 0; dwI < dwCount; dwI ++, ((PDWORD)pGlyph)++)
|
|
{
|
|
// If negative, do not draw. (lGlyphID should begin from 0.)
|
|
if ((lGlyphID = (LONG)*(PWORD)pGlyph - DLFONT_GLYPH_MIN_GPD) < 0)
|
|
break; // exit for-loop
|
|
wSerialNum = (WORD)lGlyphID + (WORD)lFontID * DLFONT_GLYPH_TOTAL;
|
|
lpDLFont = &pOEM->pDLFontGlyphInfo[wSerialNum];
|
|
|
|
// VERBOSE((("** pGlyph=%d, local glyph_id=%d **\n"), *(PWORD)pGlyph, lGlyphID));
|
|
|
|
// If space character
|
|
if (lpDLFont->nPitch < 0)
|
|
{
|
|
// Save moving value for next font print with reseting flag
|
|
pOEM->nCharPosMoveX += -lpDLFont->nPitch;
|
|
}
|
|
else
|
|
{
|
|
// Locate print position.
|
|
if ((mov = pOEM->nCharPosMoveX + lpDLFont->nOffsetX) != 0)
|
|
{
|
|
if (mov > 0)
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), ESC_XM_REL, mov);
|
|
else
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), ESC_XM_RELLEFT, -mov);
|
|
}
|
|
|
|
// Print download font
|
|
ocmd += safe_sprintfA(&Cmd[ocmd], sizeof(Cmd) - ocmd, DLFONT_PRINT, wSerialNum,
|
|
pOEM->TextCurPos.y - lpDLFont->nOffsetY);
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
ocmd = 0;
|
|
|
|
// Save moving value for next font print.
|
|
pOEM->nCharPosMoveX = lpDLFont->nPitch - lpDLFont->nOffsetX;
|
|
} // 'if (pitch < 0) else' end
|
|
} // 'for (dwI = 0; dwI < dwCount; dwI ++, ((PDWORD)pGlyph)++)' end
|
|
#endif // DOWNLOADFONT
|
|
break;
|
|
//** Draw download font END **
|
|
} // 'switch (dwType)' end
|
|
return TRUE; // BOOL <- VOID @Mar/27/2002
|
|
} //*** bOEMOutputCharStr
|
|
|
|
|
|
DWORD APIENTRY OEMDownloadFontHeader(
|
|
PDEVOBJ pdevobj,
|
|
PUNIFONTOBJ pUFObj)
|
|
{
|
|
#ifndef DOWNLOADFONT
|
|
return 0; // not available
|
|
#else // DOWNLOADFONT
|
|
VERBOSE(("** OEMDownloadFontHeader() entry. **\n"));
|
|
VERBOSE((" FontID=%d\n", pUFObj->ulFontID));
|
|
// OBSOLETE @Apr/02/99 ->
|
|
// SPEC of Unidrv5
|
|
// Unidrv5 doesn't handle 0-return, once OEMTTDownloadMethod returns TTDOWNLOAD_BITMAP.
|
|
// POEMPDEV pOEM = MINIDEV_DATA(pdevobj); // @Oct/06/98
|
|
// LONG lFontID; // @Aug/21/98
|
|
// // If FontID is beyond limit, exit.
|
|
// if ((lFontID = (LONG)pUFObj->ulFontID - DLFONT_ID_MIN_GPD) < 0 ||
|
|
// lFontID >= (LONG)pOEM->DLFontMaxID)
|
|
// {
|
|
// return 0;
|
|
// }
|
|
// @Apr/02/99 <-
|
|
return 1; // available
|
|
#endif // DOWNLOADFONT
|
|
} //*** OEMDownloadFontHeader
|
|
|
|
|
|
DWORD APIENTRY OEMDownloadCharGlyph(
|
|
PDEVOBJ pdevobj,
|
|
PUNIFONTOBJ pUFObj,
|
|
HGLYPH hGlyph,
|
|
PDWORD pdwWidth)
|
|
{
|
|
#ifndef DOWNLOADFONT
|
|
return 0; // not available
|
|
#else // DOWNLOADFONT
|
|
WORD wSerialNum, wHeight, wWidthByte;
|
|
DWORD dwNeeded, dwSize;
|
|
LPBYTE lpBitmap;
|
|
LPFONTPOS lpDLFont;
|
|
GETINFO_GLYPHBITMAP GBmp;
|
|
POEMPDEV pOEM = MINIDEV_DATA(pdevobj); // @Oct/06/98
|
|
LONG lFontID, lGlyphID;
|
|
|
|
VERBOSE(("** OEMDownloadCharGlyph() entry. **\n"));
|
|
|
|
// If negative or beyond limit, do not download. (lGlyphID should begin from 0.)
|
|
if ((lGlyphID = (LONG)pOEM->DLFontCurGlyph - DLFONT_GLYPH_MIN_GPD) < 0 ||
|
|
lGlyphID >= pOEM->DLFontMaxGlyph)
|
|
{
|
|
return 0; // exit
|
|
}
|
|
|
|
// If beyond limit, do not download. (lFontID should begin from 0.)
|
|
if ((lFontID = (LONG)pUFObj->ulFontID - DLFONT_ID_MIN_GPD) < 0 ||
|
|
lFontID >= (LONG)pOEM->DLFontMaxID)
|
|
{
|
|
return 0; // exit
|
|
}
|
|
VERBOSE((" FontID=%d, GlyphID=%d\n", lFontID, lGlyphID));
|
|
|
|
wSerialNum = (WORD)lGlyphID + (WORD)lFontID * DLFONT_GLYPH_TOTAL;
|
|
|
|
//
|
|
// GETINFO_GLYPHBITMAP
|
|
//
|
|
GBmp.dwSize = sizeof(GETINFO_GLYPHBITMAP);
|
|
GBmp.hGlyph = hGlyph;
|
|
if (!pUFObj->pfnGetInfo(pUFObj, UFO_GETINFO_GLYPHBITMAP, &GBmp,
|
|
GBmp.dwSize, &dwNeeded))
|
|
{
|
|
ERR(("UNIFONTOBJ_GetInfo:UFO_GETINFO_GLYPHBITMAP failed.\n"));
|
|
return 0; // exit
|
|
}
|
|
wWidthByte = ((WORD)GBmp.pGlyphData->gdf.pgb->sizlBitmap.cx + 7) >> 3; // byte:8bit-boundary
|
|
wHeight = (WORD)GBmp.pGlyphData->gdf.pgb->sizlBitmap.cy;
|
|
lpBitmap = (LPBYTE)GBmp.pGlyphData->gdf.pgb->aj;
|
|
lpDLFont = &pOEM->pDLFontGlyphInfo[wSerialNum];
|
|
lpDLFont->nPitch = (SHORT)(GBmp.pGlyphData->fxD >> 4);
|
|
lpDLFont->nOffsetX = (SHORT)GBmp.pGlyphData->gdf.pgb->ptlOrigin.x;
|
|
lpDLFont->nOffsetY = -(SHORT)GBmp.pGlyphData->gdf.pgb->ptlOrigin.y;
|
|
dwSize = wHeight * wWidthByte;
|
|
|
|
// VERBOSE((" width=%dbyte,height=%ddot,bmp[0]=%x\n", wWidthByte, wHeight, *lpBitmap));
|
|
// VERBOSE((" pitch=%d(FIX(28.4):%lxh),offsetx=%d,offsety=%d\n",
|
|
// GBmp.pGlyphData->fxD >> 4, GBmp.pGlyphData->fxD,
|
|
// lpDLFont->nOffsetX, lpDLFont->nOffsetY));
|
|
// VERBOSE((" dwSize(raw)=%ldbyte\n", dwSize));
|
|
|
|
// If space character
|
|
if (dwSize == 0 || dwSize == 1 && *lpBitmap == 0)
|
|
{
|
|
// Negate pitch to indicate space character
|
|
lpDLFont->nPitch = -lpDLFont->nPitch;
|
|
return 1; // success return (1<-0 @Jun/15/98)
|
|
}
|
|
else
|
|
{
|
|
BYTE Cmd[64];
|
|
INT ocmd; // INT<-SHORT @Feb/22/99
|
|
WORD fDRC = FALSE;
|
|
DWORD dwSizeRPDL, dwSizeDRC;
|
|
|
|
// Do FE-DeltaRow compression (@Jun/15/98, pOEM->pRPDLHeap2K<-OutBuf[1024] @Sep/09/98)
|
|
if (TEST_CAPABLE_DOWNLOADFONT_DRC(pOEM->fModel) && pOEM->pRPDLHeap2K &&
|
|
-1 != (dwSizeDRC = DRCompression(lpBitmap, pOEM->pRPDLHeap2K, dwSize, HEAPSIZE2K,
|
|
(DWORD)wWidthByte, (DWORD)wHeight)))
|
|
{
|
|
fDRC = TRUE;
|
|
dwSize = dwSizeDRC;
|
|
lpBitmap = pOEM->pRPDLHeap2K;
|
|
}
|
|
|
|
// Include header size and make it 32byte-boudary.
|
|
dwSizeRPDL = (dwSize + (DLFONT_HEADER_SIZE + DLFONT_MIN_BLOCK - 1))
|
|
/ DLFONT_MIN_BLOCK * DLFONT_MIN_BLOCK;
|
|
|
|
// Check available memory size
|
|
if((pOEM->dwDLFontUsedMem += dwSizeRPDL) > ((DWORD)pOEM->DLFontMaxMemKB << 10))
|
|
{
|
|
ERR(("DOWNLOAD MEMORY OVERFLOW.\n"));
|
|
return 0; // exit
|
|
}
|
|
VERBOSE((" Consumed Memory=%ldbyte\n", pOEM->dwDLFontUsedMem));
|
|
|
|
// Register glyph bitmap image
|
|
if (fDRC) // @Jun/15/98
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), DLFONT_SEND_BLOCK_DRC, wWidthByte*8, wHeight, wSerialNum, dwSize);
|
|
else
|
|
ocmd = safe_sprintfA(Cmd, sizeof(Cmd), DLFONT_SEND_BLOCK, wWidthByte*8, wHeight, wSerialNum);
|
|
WRITESPOOLBUF(pdevobj, Cmd, ocmd);
|
|
WRITESPOOLBUF(pdevobj, lpBitmap, dwSize);
|
|
return dwSizeRPDL;
|
|
}
|
|
#endif // DOWNLOADFONT
|
|
} //*** OEMDownloadCharGlyph
|
|
|
|
|
|
DWORD APIENTRY OEMTTDownloadMethod(
|
|
PDEVOBJ pdevobj,
|
|
PUNIFONTOBJ pUFObj)
|
|
{
|
|
#ifndef DOWNLOADFONT
|
|
return TTDOWNLOAD_DONTCARE;
|
|
#else // DOWNLOADFONT
|
|
// @Nov/18/98 ->
|
|
GETINFO_FONTOBJ GFo;
|
|
POEMPDEV pOEM = MINIDEV_DATA(pdevobj);
|
|
DWORD dwNeeded, dwWidth;
|
|
|
|
VERBOSE(("** OEMTTDownloadMethod() entry. **\n"));
|
|
|
|
// If printer doesn't support or user disabled downloading, do not download.
|
|
if (!pOEM->DLFontMaxMemKB)
|
|
return TTDOWNLOAD_DONTCARE;
|
|
|
|
//
|
|
// GETINFO_FONTOBJ
|
|
//
|
|
GFo.dwSize = sizeof(GETINFO_FONTOBJ);
|
|
if (!pUFObj->pfnGetInfo(pUFObj, UFO_GETINFO_FONTOBJ, &GFo,
|
|
GFo.dwSize, &dwNeeded))
|
|
{
|
|
ERR(("UNIFONTOBJ_GetInfo:UFO_GETINFO_FONTOBJ failed.\n"));
|
|
return TTDOWNLOAD_GRAPHICS; // <-TTDOWNLOAD_DONTCARE @Apr/02/99
|
|
}
|
|
|
|
// If bold or italic font, do not download.
|
|
// (SBCS font which has bold or italic glyph (e.g. Arial) doesn't fit this condition.)
|
|
if (GFo.pFontObj->flFontType & (FO_SIM_BOLD | FO_SIM_ITALIC))
|
|
{
|
|
VERBOSE((" UNAVAILABLE: BOLD/ITALIC\n"));
|
|
return TTDOWNLOAD_GRAPHICS; // <-TTDOWNLOAD_DONTCARE @Apr/02/99
|
|
}
|
|
|
|
dwWidth = GFo.pFontObj->cxMax * pOEM->nResoRatio; // masterunit
|
|
// VERBOSE((" FontSize=%d\n", GFo.pFontObj->cxMax));
|
|
|
|
// If font width is beyond limit, do not download.
|
|
if (IS_DBCSCHARSET(pUFObj->pIFIMetrics->jWinCharSet))
|
|
{
|
|
if (dwWidth > DLFONT_SIZE_DBCS11PT_MU || dwWidth < DLFONT_SIZE_DBCS9PT_MU)
|
|
{
|
|
VERBOSE((" UNAVAILABLE: DBCS FONTSIZE OUT OF RANGE(%ddot,%dcpt)\n",
|
|
GFo.pFontObj->cxMax, dwWidth*7200L/MASTERUNIT));
|
|
return TTDOWNLOAD_GRAPHICS; // <-TTDOWNLOAD_DONTCARE @Apr/02/99
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (dwWidth > DLFONT_SIZE_SBCS11PT_MU || dwWidth < DLFONT_SIZE_SBCS9PT_MU)
|
|
{
|
|
VERBOSE((" UNAVAILABLE: SBCS FONTSIZE OUT OF RANGE(%ddot,%dcpt)\n",
|
|
GFo.pFontObj->cxMax, dwWidth*7200L/MASTERUNIT));
|
|
return TTDOWNLOAD_GRAPHICS; // <-TTDOWNLOAD_DONTCARE @Apr/02/99
|
|
}
|
|
}
|
|
VERBOSE((" AVAILABLE\n"));
|
|
// @Nov/18/98 <-
|
|
return TTDOWNLOAD_BITMAP;
|
|
#endif // DOWNLOADFONT
|
|
} //*** OEMTTDownloadMethod
|
|
|
|
|
|
INT APIENTRY OEMCompression( // @Jun/04/98
|
|
PDEVOBJ pdevobj,
|
|
PBYTE pInBuf,
|
|
PBYTE pOutBuf,
|
|
DWORD dwInLen,
|
|
DWORD dwOutLen)
|
|
{
|
|
POEMPDEV pOEM = MINIDEV_DATA(pdevobj); // @Oct/06/98
|
|
|
|
// VERBOSE(("OEMCompression() entry.\n"));
|
|
return DRCompression(pInBuf, pOutBuf, dwInLen, dwOutLen,
|
|
pOEM->dwSrcBmpWidthByte, pOEM->dwSrcBmpHeight);
|
|
} //*** OEMCompression
|
|
|
|
|
|
//---------------------------*[LOCAL] DRCompression*---------------------------
|
|
// Action: Compress data by FE-DeltaRow method
|
|
// Return: number of compressed bytes if successful
|
|
// -1 if unable to compress the data within the specific buffer
|
|
// History:
|
|
// Oct/25/97 Tatsuro Yoshioka(RICOH) Created.
|
|
// Jun/11/98 Masatoshi Kubokura(RICOH) Modified.
|
|
//-----------------------------------------------------------------------------
|
|
static INT DRCompression(
|
|
PBYTE pInBuf, // Pointer to raster data to compress
|
|
PBYTE pOutBuf, // Pointer to output buffer for compressed data
|
|
DWORD dwInLen, // size of input data to compress
|
|
DWORD dwOutLen, // size of output buffer in bytes
|
|
DWORD dwWidthByte, // width of raster data in bytes
|
|
DWORD dwHeight) // height of raster data
|
|
{
|
|
DWORD dwCurRow, dwCurByte, dwSameByteCnt, dwRepeatByteCnt, dwTmp;
|
|
DWORD dwCompLen, dwCnt, dwCnt2;
|
|
BYTE *pTmpPre, *pTmpCur, *pCurRow, *pPreRow;
|
|
BYTE DiffBytes[16], FlagBit;
|
|
|
|
// VERBOSE((" dwInLen, dwOutLen=%d, %d\n", dwInLen, dwOutLen));
|
|
// VERBOSE((" Width, Height=%d, %d\n", dwWidthByte, dwHeight));
|
|
|
|
if (dwOutLen > dwInLen) // add @Jun/19/98
|
|
dwOutLen = dwInLen;
|
|
|
|
// @Apr/07/2000 ->
|
|
// PRINTER SIDE ISSUE: RPDL
|
|
// Bitmap image is destorted when width or height >= 10000dots
|
|
if (dwWidthByte >= (10000L/8L) || dwHeight >= 10000L)
|
|
return -1;
|
|
// @Apr/07/2000 <-
|
|
if (dwHeight <= 3 || dwOutLen <= dwWidthByte * 3)
|
|
return -1;
|
|
pPreRow = pTmpPre = pOutBuf + dwOutLen - dwWidthByte;
|
|
dwCnt = dwWidthByte;
|
|
while (dwCnt--) // fill seed row with 0
|
|
*pTmpPre++ = 0;
|
|
dwCompLen = 0;
|
|
|
|
// Loop of each row
|
|
for (dwCurRow = 0, pCurRow = pInBuf; dwCurRow < dwHeight;
|
|
dwCurRow++, pCurRow += dwWidthByte)
|
|
{
|
|
dwCurByte = 0;
|
|
// Loop of each byte-data in row
|
|
while (dwCurByte < dwWidthByte)
|
|
{
|
|
// Search same byte-data between current row and previous row
|
|
dwSameByteCnt = 0;
|
|
dwTmp = dwCurByte;
|
|
pTmpPre = pPreRow + dwTmp;
|
|
pTmpCur = pCurRow + dwTmp;
|
|
while (*pTmpCur++ == *pTmpPre++)
|
|
{
|
|
// bug fix @Nov/19/98 ->
|
|
// if (dwTmp++ >= dwWidthByte)
|
|
// break;
|
|
// dwSameByteCnt++;
|
|
dwSameByteCnt++;
|
|
if (++dwTmp >= dwWidthByte)
|
|
break;
|
|
// @Nov/19/98 <-
|
|
}
|
|
|
|
// If we have same byte-data between current row and previous row
|
|
if (dwSameByteCnt)
|
|
{
|
|
if (dwSameByteCnt != dwWidthByte)
|
|
{
|
|
if ((dwCnt = dwSameByteCnt) >= 63)
|
|
{
|
|
dwCnt -= 63;
|
|
if (++dwCompLen > dwOutLen)
|
|
{
|
|
VERBOSE((" OVERSIZE COMPRESSION(1)\n"));
|
|
return -1;
|
|
}
|
|
*pOutBuf++ = 0xBF; // control data (same to previous row)
|
|
|
|
while (dwCnt >= 255)
|
|
{
|
|
dwCnt -= 255;
|
|
if (++dwCompLen > dwOutLen)
|
|
{
|
|
VERBOSE((" OVERSIZE COMPRESSION(2)\n"));
|
|
return -1;
|
|
}
|
|
*pOutBuf++ = 0xFF; // repeating count
|
|
}
|
|
}
|
|
else // less than 63
|
|
{
|
|
dwCnt |= 0x80;
|
|
}
|
|
|
|
if (++dwCompLen > dwOutLen)
|
|
{
|
|
VERBOSE((" OVERSIZE COMPRESSION(3)\n"));
|
|
return -1;
|
|
}
|
|
// If 63 or more, set the last repeating count, else set control data.
|
|
*pOutBuf++ = (BYTE)dwCnt;
|
|
}
|
|
dwCurByte += dwSameByteCnt;
|
|
}
|
|
// Same byte-data in previous row is none
|
|
else
|
|
{
|
|
BYTE bTmp = *(pCurRow + dwCurByte);
|
|
|
|
// How many same byte-data in current row?
|
|
dwRepeatByteCnt = 1;
|
|
dwTmp = dwCurByte + 1;
|
|
pTmpCur = pCurRow + dwTmp;
|
|
while (bTmp == *pTmpCur++)
|
|
{
|
|
// bug fix @Nov/19/98 ->
|
|
// if (dwTmp++ >= dwWidthByte)
|
|
// break;
|
|
// dwRepeatByteCnt++;
|
|
dwRepeatByteCnt++;
|
|
if (++dwTmp >= dwWidthByte)
|
|
break;
|
|
// @Nov/19/98 <-
|
|
}
|
|
|
|
// If we have same byte-data in current row
|
|
if (dwRepeatByteCnt > 1)
|
|
{
|
|
if ((dwCnt = dwRepeatByteCnt) >= 63)
|
|
{
|
|
dwCnt -= 63;
|
|
if (++dwCompLen > dwOutLen)
|
|
{
|
|
VERBOSE((" OVERSIZE COMPRESSION(4)\n"));
|
|
return -1;
|
|
}
|
|
*pOutBuf++ = 0xFF; // repeating count
|
|
|
|
while (dwCnt >= 255)
|
|
{
|
|
dwCnt -= 255;
|
|
if (++dwCompLen > dwOutLen)
|
|
{
|
|
VERBOSE((" OVERSIZE COMPRESSION(5)\n"));
|
|
return -1;
|
|
}
|
|
*pOutBuf++ = 0xFF; // repeating count
|
|
}
|
|
}
|
|
// Less than 63
|
|
else
|
|
{
|
|
dwCnt |= 0xC0;
|
|
}
|
|
|
|
if ((dwCompLen += 2) > dwOutLen)
|
|
{
|
|
VERBOSE((" OVERSIZE COMPRESSION(6)\n"));
|
|
return -1;
|
|
}
|
|
// If 63 or more, set the last repeating count, else set control data.
|
|
*pOutBuf++ = (BYTE)dwCnt;
|
|
*pOutBuf++ = *(pCurRow+dwCurByte); // replacing data
|
|
|
|
dwCurByte += dwRepeatByteCnt;
|
|
}
|
|
// Same byte-data in current row is none
|
|
else
|
|
{
|
|
// If next serial 2 byte-data are same
|
|
if (dwWidthByte - dwCurByte > 2 &&
|
|
*(pCurRow+dwCurByte+1) == *(pCurRow+dwCurByte+2))
|
|
{
|
|
if ((dwCompLen += 2) > dwOutLen)
|
|
{
|
|
VERBOSE((" OVERSIZE COMPRESSION(7)\n"));
|
|
return -1;
|
|
}
|
|
*pOutBuf++ = 0xC1; // control data (1 data)
|
|
*pOutBuf++ = *(pCurRow+dwCurByte); // replacing data
|
|
|
|
dwCurByte++;
|
|
continue; // continue while(dwCurByte < dwWidthByte)
|
|
}
|
|
|
|
// We can pack 8 serial byte-data (may or may not be different to previus row)
|
|
DiffBytes[0] = 0x00;
|
|
DiffBytes[1] = *(pCurRow+dwCurByte);
|
|
dwCnt2 = 2;
|
|
dwTmp = dwCurByte + 1;
|
|
pTmpPre = pPreRow + dwTmp;
|
|
pTmpCur = pCurRow + dwTmp;
|
|
FlagBit = 0x01;
|
|
if ((dwCnt = dwWidthByte - dwTmp) > 7)
|
|
dwCnt = 7;
|
|
while (dwCnt--)
|
|
{
|
|
// If encountered different data
|
|
if (*pTmpCur != *pTmpPre++)
|
|
{
|
|
DiffBytes[0] |= FlagBit; // set different-flag
|
|
DiffBytes[dwCnt2++] = *pTmpCur; // data
|
|
}
|
|
FlagBit <<= 1;
|
|
pTmpCur++;
|
|
}
|
|
|
|
if ((dwCompLen += dwCnt2) > dwOutLen)
|
|
{
|
|
VERBOSE((" OVERSIZE COMPRESSION(8)\n"));
|
|
return -1;
|
|
}
|
|
pTmpCur = &DiffBytes[0];
|
|
while (dwCnt2--)
|
|
*pOutBuf++ = *pTmpCur++; // different packed-data
|
|
|
|
dwCurByte += 8; // 8 byte-data are packed
|
|
} // 'if (dwRepeatByteCnt > 1) else' end
|
|
} // 'if (dwSameByteCnt) else' end
|
|
} // 'while (dwCurByte < dwWidthByte)' end
|
|
|
|
if (++dwCompLen > dwOutLen)
|
|
{
|
|
VERBOSE((" OVERSIZE COMPRESSION(9)\n"));
|
|
return -1;
|
|
}
|
|
*pOutBuf++ = 0x80; // terminator of row
|
|
|
|
pPreRow = pCurRow;
|
|
} // 'for (...; dwCurRow < dwHeight; ...)' end
|
|
|
|
// VERBOSE((" dwCompLen=%d\n", dwCompLen));
|
|
return dwCompLen;
|
|
} //*** DRCompression
|