#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <gimp-print/gimp-print.h>
#include "gimp-print-internal.h"
#include <gimp-print/gimp-print-intl-internal.h>
#include <stdio.h>
#include <string.h>
static void pcl_mode0(const stp_vars_t, unsigned char *, unsigned char *,
int, int);
static void pcl_mode2(const stp_vars_t, unsigned char *, unsigned char *,
int, int);
typedef struct
{
const char *pcl_name;
const char *pcl_text;
int pcl_code;
int p0;
int p1;
} pcl_t;
#define PCL_PAPERSIZE_EXECUTIVE 1
#define PCL_PAPERSIZE_LETTER 2
#define PCL_PAPERSIZE_LEGAL 3
#define PCL_PAPERSIZE_TABLOID 6
#define PCL_PAPERSIZE_STATEMENT 15
#define PCL_PAPERSIZE_SUPER_B 16
#define PCL_PAPERSIZE_A5 25
#define PCL_PAPERSIZE_A4 26
#define PCL_PAPERSIZE_A3 27
#define PCL_PAPERSIZE_JIS_B5 45
#define PCL_PAPERSIZE_JIS_B4 46
#define PCL_PAPERSIZE_HAGAKI_CARD 71
#define PCL_PAPERSIZE_OUFUKU_CARD 72
#define PCL_PAPERSIZE_A6_CARD 73
#define PCL_PAPERSIZE_4x6 74
#define PCL_PAPERSIZE_5x8 75
#define PCL_PAPERSIZE_3x5 78
#define PCL_PAPERSIZE_MONARCH_ENV 80
#define PCL_PAPERSIZE_COMMERCIAL10_ENV 81
#define PCL_PAPERSIZE_DL_ENV 90
#define PCL_PAPERSIZE_C5_ENV 91
#define PCL_PAPERSIZE_C6_ENV 92
#define PCL_PAPERSIZE_CUSTOM 101
#define PCL_PAPERSIZE_INVITATION_ENV 109
#define PCL_PAPERSIZE_JAPANESE_3_ENV 110
#define PCL_PAPERSIZE_JAPANESE_4_ENV 111
#define PCL_PAPERSIZE_KAKU_ENV 113
#define PCL_PAPERSIZE_HP_CARD 114
static const pcl_t pcl_media_sizes[] =
{
{ "Executive", "notused", PCL_PAPERSIZE_EXECUTIVE},
{ "Letter", "notused", PCL_PAPERSIZE_LETTER},
{ "Legal", "notused", PCL_PAPERSIZE_LEGAL},
{ "Tabloid", "notused", PCL_PAPERSIZE_TABLOID},
{ "Statement", "notused", PCL_PAPERSIZE_STATEMENT},
{ "SuperB", "notused", PCL_PAPERSIZE_SUPER_B},
{ "A5", "notused", PCL_PAPERSIZE_A5},
{ "A4", "notused", PCL_PAPERSIZE_A4},
{ "A3", "notused", PCL_PAPERSIZE_A3},
{ "B5", "notused", PCL_PAPERSIZE_JIS_B5},
{ "B4", "notused", PCL_PAPERSIZE_JIS_B4},
{ "w283h420", "notused", PCL_PAPERSIZE_HAGAKI_CARD},
{ "w420h567", "notused", PCL_PAPERSIZE_OUFUKU_CARD},
{ "A6", "notused", PCL_PAPERSIZE_A6_CARD},
{ "w288h432", "notused", PCL_PAPERSIZE_4x6},
{ "w360h576", "notused", PCL_PAPERSIZE_5x8},
{ "w216h360", "notused", PCL_PAPERSIZE_3x5},
{ "Monarch", "notused", PCL_PAPERSIZE_MONARCH_ENV},
{ "COM10", "notused", PCL_PAPERSIZE_COMMERCIAL10_ENV},
{ "DL", "notused", PCL_PAPERSIZE_DL_ENV},
{ "C5", "notused", PCL_PAPERSIZE_C5_ENV},
{ "C6", "notused", PCL_PAPERSIZE_C6_ENV},
{ "w315h414", "notused", PCL_PAPERSIZE_INVITATION_ENV},
{ "w340h666", "notused", PCL_PAPERSIZE_JAPANESE_3_ENV},
{ "w255h581", "notused", PCL_PAPERSIZE_JAPANESE_4_ENV},
{ "w680h941", "notused", PCL_PAPERSIZE_KAKU_ENV},
{ "w612h792", "notused", PCL_PAPERSIZE_HP_CARD},
};
#define NUM_PRINTER_PAPER_SIZES (sizeof(pcl_media_sizes) / sizeof(pcl_t))
#define PCL_PAPERTYPE_PLAIN 0
#define PCL_PAPERTYPE_BOND 1
#define PCL_PAPERTYPE_PREMIUM 2
#define PCL_PAPERTYPE_GLOSSY 3
#define PCL_PAPERTYPE_TRANS 4
#define PCL_PAPERTYPE_QPHOTO 5
#define PCL_PAPERTYPE_QTRANS 6
static const pcl_t pcl_media_types[] =
{
{ "Plain", N_ ("Plain"), PCL_PAPERTYPE_PLAIN},
{ "Bond", N_ ("Bond"), PCL_PAPERTYPE_BOND},
{ "Premium", N_ ("Premium"), PCL_PAPERTYPE_PREMIUM},
{ "Glossy", N_ ("Glossy Photo"), PCL_PAPERTYPE_GLOSSY},
{ "Transparency", N_ ("Transparency"), PCL_PAPERTYPE_TRANS},
{ "GlossyQD", N_ ("Quick-dry Photo"), PCL_PAPERTYPE_QPHOTO},
{ "TransparencyQD", N_ ("Quick-dry Transparency"), PCL_PAPERTYPE_QTRANS},
};
#define NUM_PRINTER_PAPER_TYPES (sizeof(pcl_media_types) / sizeof(pcl_t))
#define PAPERSOURCE_MOD 16
#define PCL_PAPERSOURCE_STANDARD 0
#define PCL_PAPERSOURCE_MANUAL 2
#define PCL_PAPERSOURCE_ENVELOPE 3
#define PCL_PAPERSOURCE_LJ_TRAY2 1
#define PCL_PAPERSOURCE_LJ_TRAY3 4
#define PCL_PAPERSOURCE_LJ_TRAY4 5
#define PCL_PAPERSOURCE_LJ_TRAY1 8
#define PCL_PAPERSOURCE_340_PCSF 1 + PAPERSOURCE_MOD
#define PCL_PAPERSOURCE_340_DCSF 4 + PAPERSOURCE_MOD
#define PCL_PAPERSOURCE_DJ_TRAY 1 + PAPERSOURCE_MOD + PAPERSOURCE_MOD
#define PCL_PAPERSOURCE_DJ_TRAY2 4 + PAPERSOURCE_MOD + PAPERSOURCE_MOD
#define PCL_PAPERSOURCE_DJ_OPTIONAL 5 + PAPERSOURCE_MOD + PAPERSOURCE_MOD
#define PCL_PAPERSOURCE_DJ_AUTO 7 + PAPERSOURCE_MOD + PAPERSOURCE_MOD
static const pcl_t pcl_media_sources[] =
{
{ "Standard", N_ ("Standard"), PCL_PAPERSOURCE_STANDARD},
{ "Manual", N_ ("Manual"), PCL_PAPERSOURCE_MANUAL},
{ "MultiPurpose", N_ ("Tray 1"), PCL_PAPERSOURCE_LJ_TRAY1},
{ "Upper", N_ ("Tray 2"), PCL_PAPERSOURCE_LJ_TRAY2},
{ "Lower", N_ ("Tray 3"), PCL_PAPERSOURCE_LJ_TRAY3},
{ "LargeCapacity", N_ ("Tray 4"), PCL_PAPERSOURCE_LJ_TRAY4},
{ "Portable", N_ ("Portable Sheet Feeder"), PCL_PAPERSOURCE_340_PCSF},
{ "Desktop", N_ ("Desktop Sheet Feeder"), PCL_PAPERSOURCE_340_DCSF},
{ "Tray", N_ ("Tray"), PCL_PAPERSOURCE_DJ_TRAY},
{ "Tray2", N_ ("Tray 2"), PCL_PAPERSOURCE_DJ_TRAY2},
{ "Optional", N_ ("Optional Source"), PCL_PAPERSOURCE_DJ_OPTIONAL},
{ "Auto", N_ ("Autoselect"), PCL_PAPERSOURCE_DJ_AUTO},
};
#define NUM_PRINTER_PAPER_SOURCES (sizeof(pcl_media_sources) / sizeof(pcl_t))
#define PCL_RES_150_150 1
#define PCL_RES_300_300 2
#define PCL_RES_600_300 4
#define PCL_RES_600_600_MONO 8
#define PCL_RES_600_600 16
#define PCL_RES_1200_600 32
#define PCL_RES_2400_600 64
static const pcl_t pcl_resolutions[] =
{
{ "150dpi", N_("150x150 DPI"), PCL_RES_150_150, 150, 150},
{ "300dpi", N_("300x300 DPI"), PCL_RES_300_300, 300, 300},
{ "600x300dpi", N_("600x300 DPI"), PCL_RES_600_300, 600, 300},
{ "600mono", N_("600x600 DPI monochrome"), PCL_RES_600_600_MONO, 600, 600},
{ "600dpi", N_("600x600 DPI"), PCL_RES_600_600, 600, 600},
{ "1200x600dpi", N_("1200x600 DPI"), PCL_RES_1200_600, 1200, 600},
{ "2400x600dpi", N_("2400x600 DPI"), PCL_RES_2400_600, 2400, 600},
};
#define NUM_RESOLUTIONS (sizeof(pcl_resolutions) / sizeof (pcl_t))
static void
pcl_describe_resolution(const stp_printer_t printer,
const char *resolution, int *x, int *y)
{
int i;
for (i = 0; i < NUM_RESOLUTIONS; i++)
{
if (!strcmp(resolution, pcl_resolutions[i].pcl_name))
{
*x = pcl_resolutions[i].p0;
*y = pcl_resolutions[i].p1;
return;
}
}
*x = -1;
*y = -1;
}
typedef struct {
int top_margin;
int bottom_margin;
int left_margin;
int right_margin;
} margins_t;
typedef struct {
int model;
int custom_max_width;
int custom_max_height;
int custom_min_width;
int custom_min_height;
int resolutions;
margins_t normal_margins;
margins_t a4_margins;
int color_type;
int stp_printer_type;
const int paper_sizes[NUM_PRINTER_PAPER_SIZES + 1];
const int paper_types[NUM_PRINTER_PAPER_TYPES + 1];
const int paper_sources[NUM_PRINTER_PAPER_SOURCES + 1];
} pcl_cap_t;
#define PCL_COLOR_NONE 0
#define PCL_COLOR_CMY 1
#define PCL_COLOR_CMYK 2
#define PCL_COLOR_CMYK4 4
#define PCL_COLOR_CMYKcm 8
#define PCL_COLOR_CMYK4b 16
#define PCL_PRINTER_LJ 1
#define PCL_PRINTER_DJ 2
#define PCL_PRINTER_NEW_ERG 4
#define PCL_PRINTER_TIFF 8
#define PCL_PRINTER_MEDIATYPE 16
#define PCL_PRINTER_CUSTOM_SIZE 32
#define PCL_PRINTER_BLANKLINE 64
static const pcl_cap_t pcl_model_capabilities[] =
{
{ 0,
17 * 72 / 2, 14 * 72,
1, 1,
PCL_RES_150_150 | PCL_RES_300_300,
{12, 12, 18, 18},
{12, 12, 10, 10},
PCL_COLOR_NONE,
PCL_PRINTER_LJ,
{
PCL_PAPERSIZE_EXECUTIVE,
PCL_PAPERSIZE_STATEMENT,
PCL_PAPERSIZE_LETTER,
PCL_PAPERSIZE_LEGAL,
PCL_PAPERSIZE_A4,
0,
},
{ -1,
},
{ -1,
},
},
{ 10230,
36 * 72, 150 * 12 * 72,
830 * 72 / 100, 583 * 72 / 100,
PCL_RES_300_300 | PCL_RES_600_600,
{49, 49, 15, 15},
{49, 49, 15, 15},
PCL_COLOR_NONE,
PCL_PRINTER_DJ | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE | PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_NEW_ERG,
{
PCL_PAPERSIZE_LETTER,
-1,
},
{
PCL_PAPERTYPE_PLAIN,
PCL_PAPERTYPE_BOND,
PCL_PAPERTYPE_PREMIUM,
PCL_PAPERTYPE_GLOSSY,
PCL_PAPERTYPE_TRANS,
-1,
},
{
PCL_PAPERSOURCE_STANDARD,
-1,
},
},
{ 10250,
36 * 72, 150 * 12 * 72,
830 * 72 / 100, 583 * 72 / 100,
PCL_RES_300_300 | PCL_RES_600_600_MONO,
{49, 49, 15, 15},
{49, 49, 15, 15},
PCL_COLOR_CMYK,
PCL_PRINTER_DJ | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE | PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_NEW_ERG,
{
PCL_PAPERSIZE_LETTER,
-1,
},
{
PCL_PAPERTYPE_PLAIN,
PCL_PAPERTYPE_BOND,
PCL_PAPERTYPE_PREMIUM,
PCL_PAPERTYPE_GLOSSY,
PCL_PAPERTYPE_TRANS,
-1,
},
{
PCL_PAPERSOURCE_STANDARD,
-1,
},
},
{ 10700,
36 * 72, 150 * 12 * 72,
830 * 72 / 100, 583 * 72 / 100,
PCL_RES_300_300 | PCL_RES_600_600,
{30, 30, 15, 15},
{30, 30, 15, 15},
PCL_COLOR_NONE,
PCL_PRINTER_DJ | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE | PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_NEW_ERG,
{
PCL_PAPERSIZE_LETTER,
-1,
},
{
PCL_PAPERTYPE_PLAIN,
PCL_PAPERTYPE_BOND,
PCL_PAPERTYPE_PREMIUM,
PCL_PAPERTYPE_GLOSSY,
PCL_PAPERTYPE_TRANS,
-1,
},
{
PCL_PAPERSOURCE_STANDARD,
-1,
},
},
{ 10750,
36 * 72, 150 * 12 * 72,
830 * 72 / 100, 583 * 72 / 100,
PCL_RES_300_300 | PCL_RES_600_600_MONO,
{30, 30, 15, 15},
{30, 30, 15, 15},
PCL_COLOR_CMYK,
PCL_PRINTER_DJ | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE | PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_NEW_ERG,
{
PCL_PAPERSIZE_LETTER,
-1,
},
{
PCL_PAPERTYPE_PLAIN,
PCL_PAPERTYPE_BOND,
PCL_PAPERTYPE_PREMIUM,
PCL_PAPERTYPE_GLOSSY,
PCL_PAPERTYPE_TRANS,
-1,
},
{
PCL_PAPERSOURCE_STANDARD,
-1,
},
},
{ 12500,
44 * 72, 150 * 12 * 72,
830 * 72 / 100, 583 * 72 / 100,
PCL_RES_300_300 | PCL_RES_600_600_MONO,
{49, 49, 15, 15},
{49, 49, 15, 15},
PCL_COLOR_CMYK,
PCL_PRINTER_DJ | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE | PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_NEW_ERG,
{
PCL_PAPERSIZE_LETTER,
-1,
},
{
PCL_PAPERTYPE_PLAIN,
PCL_PAPERTYPE_BOND,
PCL_PAPERTYPE_PREMIUM,
PCL_PAPERTYPE_GLOSSY,
PCL_PAPERTYPE_TRANS,
-1,
},
{
PCL_PAPERSOURCE_STANDARD,
-1,
},
},
{ 340,
17 * 72 / 2, 14 * 72,
1, 1,
PCL_RES_150_150 | PCL_RES_300_300,
{7, 41, 18, 18},
{7, 41, 10, 10},
PCL_COLOR_CMY,
PCL_PRINTER_DJ | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE,
{
PCL_PAPERSIZE_EXECUTIVE,
PCL_PAPERSIZE_LETTER,
PCL_PAPERSIZE_LEGAL,
PCL_PAPERSIZE_A4,
-1,
},
{
PCL_PAPERTYPE_PLAIN,
PCL_PAPERTYPE_BOND,
PCL_PAPERTYPE_PREMIUM,
PCL_PAPERTYPE_GLOSSY,
PCL_PAPERTYPE_TRANS,
-1,
},
{
PCL_PAPERSOURCE_STANDARD,
PCL_PAPERSOURCE_MANUAL,
PCL_PAPERSOURCE_340_PCSF,
PCL_PAPERSOURCE_340_DCSF,
-1,
},
},
{ 400,
17 * 72 / 2, 14 * 72,
1, 1,
PCL_RES_150_150 | PCL_RES_300_300,
{7, 41, 18, 18},
{7, 41, 10, 10},
PCL_COLOR_CMY,
PCL_PRINTER_DJ | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE,
{
PCL_PAPERSIZE_EXECUTIVE,
PCL_PAPERSIZE_LETTER,
PCL_PAPERSIZE_LEGAL,
PCL_PAPERSIZE_A4,
PCL_PAPERSIZE_JIS_B5,
-1,
},
{
PCL_PAPERTYPE_PLAIN,
PCL_PAPERTYPE_BOND,
PCL_PAPERTYPE_PREMIUM,
PCL_PAPERTYPE_GLOSSY,
PCL_PAPERTYPE_TRANS,
-1,
},
{ -1,
},
},
{ 500,
17 * 72 / 2, 14 * 72,
1, 1,
PCL_RES_150_150 | PCL_RES_300_300,
{7, 41, 18, 18},
{7, 41, 10, 10},
PCL_COLOR_NONE,
PCL_PRINTER_DJ | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE,
{
PCL_PAPERSIZE_LETTER,
PCL_PAPERSIZE_LEGAL,
PCL_PAPERSIZE_A4,
PCL_PAPERSIZE_COMMERCIAL10_ENV,
-1,
},
{
PCL_PAPERTYPE_PLAIN,
PCL_PAPERTYPE_BOND,
PCL_PAPERTYPE_PREMIUM,
PCL_PAPERTYPE_GLOSSY,
PCL_PAPERTYPE_TRANS,
-1,
},
{
PCL_PAPERSOURCE_STANDARD,
PCL_PAPERSOURCE_MANUAL,
PCL_PAPERSOURCE_DJ_TRAY,
-1,
},
},
{ 501,
17 * 72 / 2, 14 * 72,
1, 1,
PCL_RES_150_150 | PCL_RES_300_300,
{7, 33, 18, 18},
{7, 33, 10, 10},
PCL_COLOR_CMY,
PCL_PRINTER_DJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE,
{
PCL_PAPERSIZE_LETTER,
PCL_PAPERSIZE_LEGAL,
PCL_PAPERSIZE_A4,
PCL_PAPERSIZE_COMMERCIAL10_ENV,
-1,
},
{
PCL_PAPERTYPE_PLAIN,
PCL_PAPERTYPE_BOND,
PCL_PAPERTYPE_PREMIUM,
PCL_PAPERTYPE_GLOSSY,
PCL_PAPERTYPE_TRANS,
-1,
},
{
PCL_PAPERSOURCE_STANDARD,
PCL_PAPERSOURCE_MANUAL,
PCL_PAPERSOURCE_DJ_TRAY,
-1,
},
},
{ 540,
17 * 72 / 2, 14 * 72,
1, 1,
PCL_RES_150_150 | PCL_RES_300_300,
{7, 33, 18, 18},
{7, 33, 10, 10},
PCL_COLOR_CMY,
PCL_PRINTER_DJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_MEDIATYPE |
PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_BLANKLINE,
{
PCL_PAPERSIZE_EXECUTIVE,
PCL_PAPERSIZE_LETTER,
PCL_PAPERSIZE_LEGAL,
PCL_PAPERSIZE_A4,
PCL_PAPERSIZE_A5,
PCL_PAPERSIZE_JIS_B5,
PCL_PAPERSIZE_HAGAKI_CARD,
PCL_PAPERSIZE_A6_CARD,
PCL_PAPERSIZE_4x6,
PCL_PAPERSIZE_5x8,
PCL_PAPERSIZE_COMMERCIAL10_ENV,
PCL_PAPERSIZE_DL_ENV,
PCL_PAPERSIZE_C6_ENV,
-1,
},
{
PCL_PAPERTYPE_PLAIN,
PCL_PAPERTYPE_BOND,
PCL_PAPERTYPE_PREMIUM,
PCL_PAPERTYPE_GLOSSY,
PCL_PAPERTYPE_TRANS,
-1,
},
{
PCL_PAPERSOURCE_STANDARD,
PCL_PAPERSOURCE_MANUAL,
PCL_PAPERSOURCE_DJ_TRAY,
-1,
},
},
{ 550,
17 * 72 / 2, 14 * 72,
1, 1,
PCL_RES_150_150 | PCL_RES_300_300,
{3, 33, 18, 18},
{5, 33, 10, 10},
PCL_COLOR_CMYK,
PCL_PRINTER_DJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE,
{
PCL_PAPERSIZE_EXECUTIVE,
PCL_PAPERSIZE_LETTER,
PCL_PAPERSIZE_LEGAL,
PCL_PAPERSIZE_A4,
-1,
},
{
PCL_PAPERTYPE_PLAIN,
PCL_PAPERTYPE_BOND,
PCL_PAPERTYPE_PREMIUM,
PCL_PAPERTYPE_GLOSSY,
PCL_PAPERTYPE_TRANS,
-1,
},
{
PCL_PAPERSOURCE_STANDARD,
PCL_PAPERSOURCE_MANUAL,
PCL_PAPERSOURCE_DJ_TRAY,
-1,
},
},
{ 600,
17 * 72 / 2, 14 * 72,
5 * 72, 583 * 72 / 100,
PCL_RES_150_150 | PCL_RES_300_300 | PCL_RES_600_300 | PCL_RES_600_600_MONO,
{0, 33, 18, 18},
{0, 33, 10, 10},
PCL_COLOR_CMY,
PCL_PRINTER_DJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_MEDIATYPE |
PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_BLANKLINE,
{
PCL_PAPERSIZE_EXECUTIVE,
PCL_PAPERSIZE_LETTER,
PCL_PAPERSIZE_LEGAL,
PCL_PAPERSIZE_A5,
PCL_PAPERSIZE_A4,
PCL_PAPERSIZE_HAGAKI_CARD,
PCL_PAPERSIZE_A6_CARD,
PCL_PAPERSIZE_4x6,
PCL_PAPERSIZE_5x8,
PCL_PAPERSIZE_COMMERCIAL10_ENV,
PCL_PAPERSIZE_DL_ENV,
PCL_PAPERSIZE_C6_ENV,
PCL_PAPERSIZE_INVITATION_ENV,
-1,
},
{
PCL_PAPERTYPE_PLAIN,
PCL_PAPERTYPE_BOND,
PCL_PAPERTYPE_PREMIUM,
PCL_PAPERTYPE_GLOSSY,
PCL_PAPERTYPE_TRANS,
-1,
},
{ -1,
},
},
{ 601,
17 * 72 / 2, 14 * 72,
1, 1,
PCL_RES_150_150 | PCL_RES_300_300 | PCL_RES_600_300 | PCL_RES_600_600_MONO,
{0, 33, 18, 18},
{0, 33, 10, 10},
PCL_COLOR_CMYK,
PCL_PRINTER_DJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_MEDIATYPE |
PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_BLANKLINE,
{
PCL_PAPERSIZE_EXECUTIVE,
PCL_PAPERSIZE_LETTER,
PCL_PAPERSIZE_LEGAL,
PCL_PAPERSIZE_A5,
PCL_PAPERSIZE_A4,
PCL_PAPERSIZE_HAGAKI_CARD,
PCL_PAPERSIZE_A6_CARD,
PCL_PAPERSIZE_4x6,
PCL_PAPERSIZE_5x8,
PCL_PAPERSIZE_COMMERCIAL10_ENV,
PCL_PAPERSIZE_DL_ENV,
PCL_PAPERSIZE_C6_ENV,
PCL_PAPERSIZE_INVITATION_ENV,
-1,
},
{
PCL_PAPERTYPE_PLAIN,
PCL_PAPERTYPE_BOND,
PCL_PAPERTYPE_PREMIUM,
PCL_PAPERTYPE_GLOSSY,
PCL_PAPERTYPE_TRANS,
-1,
},
{
-1,
},
},
{ 690,
17 * 72 / 2, 14 * 72,
1, 1,
PCL_RES_150_150 | PCL_RES_300_300 | PCL_RES_600_300 | PCL_RES_600_600,
{0, 33, 18, 18},
{0, 33, 10, 10},
PCL_COLOR_CMYK | PCL_COLOR_CMYKcm,
PCL_PRINTER_DJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_MEDIATYPE |
PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_BLANKLINE,
{
PCL_PAPERSIZE_EXECUTIVE,
PCL_PAPERSIZE_LETTER,
PCL_PAPERSIZE_LEGAL,
PCL_PAPERSIZE_A5,
PCL_PAPERSIZE_A4,
PCL_PAPERSIZE_HAGAKI_CARD,
PCL_PAPERSIZE_A6_CARD,
PCL_PAPERSIZE_4x6,
PCL_PAPERSIZE_5x8,
PCL_PAPERSIZE_COMMERCIAL10_ENV,
PCL_PAPERSIZE_DL_ENV,
PCL_PAPERSIZE_C6_ENV,
PCL_PAPERSIZE_INVITATION_ENV,
-1,
},
{
PCL_PAPERTYPE_PLAIN,
PCL_PAPERTYPE_BOND,
PCL_PAPERTYPE_PREMIUM,
PCL_PAPERTYPE_GLOSSY,
PCL_PAPERTYPE_TRANS,
-1,
},
{
-1,
},
},
{ 800,
17 * 72 / 2, 14 * 72,
1, 1,
PCL_RES_150_150 | PCL_RES_300_300 | PCL_RES_600_600_MONO,
{3, 33, 18, 18},
{5, 33, 10, 10},
PCL_COLOR_CMYK | PCL_COLOR_CMYK4,
PCL_PRINTER_DJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_MEDIATYPE |
PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_BLANKLINE,
{
PCL_PAPERSIZE_EXECUTIVE,
PCL_PAPERSIZE_LETTER,
PCL_PAPERSIZE_LEGAL,
PCL_PAPERSIZE_A5,
PCL_PAPERSIZE_A4,
PCL_PAPERSIZE_HAGAKI_CARD,
PCL_PAPERSIZE_A6_CARD,
PCL_PAPERSIZE_4x6,
PCL_PAPERSIZE_5x8,
PCL_PAPERSIZE_COMMERCIAL10_ENV,
PCL_PAPERSIZE_DL_ENV,
PCL_PAPERSIZE_C6_ENV,
PCL_PAPERSIZE_INVITATION_ENV,
-1,
},
{
PCL_PAPERTYPE_PLAIN,
PCL_PAPERTYPE_BOND,
PCL_PAPERTYPE_PREMIUM,
PCL_PAPERTYPE_GLOSSY,
PCL_PAPERTYPE_TRANS,
-1,
},
{
-1,
},
},
{ 840,
17 * 72 / 2, 14 * 72,
1, 1,
PCL_RES_150_150 | PCL_RES_300_300 | PCL_RES_600_300 | PCL_RES_600_600,
{0, 33, 18, 18},
{0, 33, 10, 10},
PCL_COLOR_CMYK | PCL_COLOR_CMYK4b,
PCL_PRINTER_DJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_MEDIATYPE |
PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_BLANKLINE,
{
PCL_PAPERSIZE_EXECUTIVE,
PCL_PAPERSIZE_LETTER,
PCL_PAPERSIZE_LEGAL,
PCL_PAPERSIZE_A5,
PCL_PAPERSIZE_A4,
PCL_PAPERSIZE_HAGAKI_CARD,
PCL_PAPERSIZE_A6_CARD,
PCL_PAPERSIZE_4x6,
PCL_PAPERSIZE_5x8,
PCL_PAPERSIZE_COMMERCIAL10_ENV,
PCL_PAPERSIZE_DL_ENV,
PCL_PAPERSIZE_C6_ENV,
PCL_PAPERSIZE_INVITATION_ENV,
-1,
},
{
PCL_PAPERTYPE_PLAIN,
PCL_PAPERTYPE_BOND,
PCL_PAPERTYPE_PREMIUM,
PCL_PAPERTYPE_GLOSSY,
PCL_PAPERTYPE_TRANS,
-1,
},
{
-1,
},
},
{ 900,
17 * 72 / 2, 14 * 72,
1, 1,
PCL_RES_150_150 | PCL_RES_300_300 | PCL_RES_600_600 ,
{3, 33, 18, 18},
{5, 33, 10, 10},
PCL_COLOR_CMYK,
PCL_PRINTER_DJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_MEDIATYPE |
PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_BLANKLINE,
{
PCL_PAPERSIZE_EXECUTIVE,
PCL_PAPERSIZE_LETTER,
PCL_PAPERSIZE_LEGAL,
PCL_PAPERSIZE_A5,
PCL_PAPERSIZE_A4,
PCL_PAPERSIZE_HAGAKI_CARD,
PCL_PAPERSIZE_A6_CARD,
PCL_PAPERSIZE_4x6,
PCL_PAPERSIZE_5x8,
PCL_PAPERSIZE_COMMERCIAL10_ENV,
PCL_PAPERSIZE_DL_ENV,
PCL_PAPERSIZE_C6_ENV,
PCL_PAPERSIZE_INVITATION_ENV,
-1,
},
{
PCL_PAPERTYPE_PLAIN,
PCL_PAPERTYPE_BOND,
PCL_PAPERTYPE_PREMIUM,
PCL_PAPERTYPE_GLOSSY,
PCL_PAPERTYPE_TRANS,
-1,
},
{ -1,
},
},
{ 901,
13 * 72, 19 * 72,
1, 1,
PCL_RES_150_150 | PCL_RES_300_300 | PCL_RES_600_600 ,
{3, 33, 18, 18},
{5, 33, 10, 10},
PCL_COLOR_CMYK,
PCL_PRINTER_DJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_MEDIATYPE |
PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_BLANKLINE,
{
PCL_PAPERSIZE_EXECUTIVE,
PCL_PAPERSIZE_LETTER,
PCL_PAPERSIZE_LEGAL,
PCL_PAPERSIZE_TABLOID,
PCL_PAPERSIZE_STATEMENT,
PCL_PAPERSIZE_SUPER_B,
PCL_PAPERSIZE_A5,
PCL_PAPERSIZE_A4,
PCL_PAPERSIZE_A3,
PCL_PAPERSIZE_JIS_B5,
PCL_PAPERSIZE_JIS_B4,
PCL_PAPERSIZE_HAGAKI_CARD,
PCL_PAPERSIZE_OUFUKU_CARD,
PCL_PAPERSIZE_A6_CARD,
PCL_PAPERSIZE_4x6,
PCL_PAPERSIZE_5x8,
PCL_PAPERSIZE_3x5,
PCL_PAPERSIZE_HP_CARD,
PCL_PAPERSIZE_MONARCH_ENV,
PCL_PAPERSIZE_COMMERCIAL10_ENV,
PCL_PAPERSIZE_DL_ENV,
PCL_PAPERSIZE_C5_ENV,
PCL_PAPERSIZE_C6_ENV,
PCL_PAPERSIZE_INVITATION_ENV,
PCL_PAPERSIZE_JAPANESE_3_ENV,
PCL_PAPERSIZE_JAPANESE_4_ENV,
PCL_PAPERSIZE_KAKU_ENV,
-1,
},
{
PCL_PAPERTYPE_PLAIN,
PCL_PAPERTYPE_BOND,
PCL_PAPERTYPE_PREMIUM,
PCL_PAPERTYPE_GLOSSY,
PCL_PAPERTYPE_TRANS,
-1,
},
{ -1,
},
},
{ 1100,
13 * 72, 19 * 72,
1, 1,
PCL_RES_150_150 | PCL_RES_300_300 | PCL_RES_600_600_MONO,
{3, 33, 18, 18},
{5, 33, 10, 10},
PCL_COLOR_CMYK | PCL_COLOR_CMYK4,
PCL_PRINTER_DJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_MEDIATYPE |
PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_BLANKLINE,
{
PCL_PAPERSIZE_EXECUTIVE,
PCL_PAPERSIZE_LETTER,
PCL_PAPERSIZE_LEGAL,
PCL_PAPERSIZE_TABLOID,
PCL_PAPERSIZE_STATEMENT,
PCL_PAPERSIZE_SUPER_B,
PCL_PAPERSIZE_A5,
PCL_PAPERSIZE_A4,
PCL_PAPERSIZE_A3,
PCL_PAPERSIZE_JIS_B5,
PCL_PAPERSIZE_JIS_B4,
PCL_PAPERSIZE_HAGAKI_CARD,
PCL_PAPERSIZE_A6_CARD,
PCL_PAPERSIZE_4x6,
PCL_PAPERSIZE_5x8,
PCL_PAPERSIZE_COMMERCIAL10_ENV,
PCL_PAPERSIZE_DL_ENV,
PCL_PAPERSIZE_C6_ENV,
PCL_PAPERSIZE_INVITATION_ENV,
PCL_PAPERSIZE_JAPANESE_3_ENV,
PCL_PAPERSIZE_JAPANESE_4_ENV,
PCL_PAPERSIZE_KAKU_ENV,
-1,
},
{
PCL_PAPERTYPE_PLAIN,
PCL_PAPERTYPE_BOND,
PCL_PAPERTYPE_PREMIUM,
PCL_PAPERTYPE_GLOSSY,
PCL_PAPERTYPE_TRANS,
-1,
},
{
PCL_PAPERSOURCE_STANDARD,
PCL_PAPERSOURCE_MANUAL,
PCL_PAPERSOURCE_DJ_TRAY,
-1,
},
},
{ 1200,
17 * 72 / 2, 14 * 72,
1, 1,
PCL_RES_150_150 | PCL_RES_300_300,
{12, 12, 18, 18},
{12, 12, 10, 10},
PCL_COLOR_CMY,
PCL_PRINTER_DJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_MEDIATYPE |
PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_BLANKLINE,
{
PCL_PAPERSIZE_EXECUTIVE,
PCL_PAPERSIZE_LETTER,
PCL_PAPERSIZE_LEGAL,
PCL_PAPERSIZE_A5,
PCL_PAPERSIZE_A4,
PCL_PAPERSIZE_4x6,
PCL_PAPERSIZE_5x8,
-1,
},
{
PCL_PAPERTYPE_PLAIN,
PCL_PAPERTYPE_BOND,
PCL_PAPERTYPE_PREMIUM,
PCL_PAPERTYPE_GLOSSY,
PCL_PAPERTYPE_TRANS,
-1,
},
{
PCL_PAPERSOURCE_STANDARD,
PCL_PAPERSOURCE_MANUAL,
PCL_PAPERSOURCE_DJ_TRAY,
-1,
},
},
{ 1600,
17 * 72 / 2, 14 * 72,
1, 1,
PCL_RES_150_150 | PCL_RES_300_300,
{12, 12, 18, 18},
{12, 12, 10, 10},
PCL_COLOR_CMYK,
PCL_PRINTER_DJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_MEDIATYPE |
PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_BLANKLINE,
{
PCL_PAPERSIZE_EXECUTIVE,
PCL_PAPERSIZE_LETTER,
PCL_PAPERSIZE_LEGAL,
PCL_PAPERSIZE_A5,
PCL_PAPERSIZE_A4,
PCL_PAPERSIZE_4x6,
PCL_PAPERSIZE_5x8,
-1,
},
{
PCL_PAPERTYPE_PLAIN,
PCL_PAPERTYPE_BOND,
PCL_PAPERTYPE_PREMIUM,
PCL_PAPERTYPE_GLOSSY,
PCL_PAPERTYPE_TRANS,
-1,
},
{
PCL_PAPERSOURCE_STANDARD,
PCL_PAPERSOURCE_MANUAL,
PCL_PAPERSOURCE_DJ_TRAY,
-1,
},
},
{ 2000,
17 * 72 / 2, 14 * 72,
1, 1,
PCL_RES_150_150 | PCL_RES_300_300 | PCL_RES_600_600,
{0, 35, 18, 18},
{0, 35, 10, 10},
PCL_COLOR_CMYK,
PCL_PRINTER_DJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_MEDIATYPE |
PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_BLANKLINE,
{
PCL_PAPERSIZE_EXECUTIVE,
PCL_PAPERSIZE_LETTER,
PCL_PAPERSIZE_LEGAL,
PCL_PAPERSIZE_A5,
PCL_PAPERSIZE_A4,
PCL_PAPERSIZE_HAGAKI_CARD,
PCL_PAPERSIZE_A6_CARD,
PCL_PAPERSIZE_4x6,
PCL_PAPERSIZE_5x8,
PCL_PAPERSIZE_3x5,
PCL_PAPERSIZE_COMMERCIAL10_ENV,
PCL_PAPERSIZE_DL_ENV,
PCL_PAPERSIZE_C6_ENV,
PCL_PAPERSIZE_INVITATION_ENV,
-1,
},
{
PCL_PAPERTYPE_PLAIN,
PCL_PAPERTYPE_BOND,
PCL_PAPERTYPE_PREMIUM,
PCL_PAPERTYPE_GLOSSY,
PCL_PAPERTYPE_TRANS,
PCL_PAPERTYPE_QPHOTO,
PCL_PAPERTYPE_QTRANS,
-1,
},
{
PCL_PAPERSOURCE_STANDARD,
PCL_PAPERSOURCE_MANUAL,
PCL_PAPERSOURCE_DJ_TRAY,
-1,
},
},
{ 2500,
13 * 72, 19 * 72,
1, 1,
PCL_RES_150_150 | PCL_RES_300_300 | PCL_RES_600_600,
{12, 12, 18, 18},
{12, 12, 10, 10},
PCL_COLOR_CMYK,
PCL_PRINTER_DJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_MEDIATYPE |
PCL_PRINTER_CUSTOM_SIZE | PCL_PRINTER_BLANKLINE,
{
PCL_PAPERSIZE_EXECUTIVE,
PCL_PAPERSIZE_LETTER,
PCL_PAPERSIZE_LEGAL,
PCL_PAPERSIZE_TABLOID,
PCL_PAPERSIZE_STATEMENT,
PCL_PAPERSIZE_A5,
PCL_PAPERSIZE_A4,
PCL_PAPERSIZE_A3,
PCL_PAPERSIZE_JIS_B5,
PCL_PAPERSIZE_JIS_B4,
PCL_PAPERSIZE_HAGAKI_CARD,
PCL_PAPERSIZE_A6_CARD,
PCL_PAPERSIZE_4x6,
PCL_PAPERSIZE_5x8,
PCL_PAPERSIZE_COMMERCIAL10_ENV,
PCL_PAPERSIZE_DL_ENV,
-1,
},
{
PCL_PAPERTYPE_PLAIN,
PCL_PAPERTYPE_BOND,
PCL_PAPERTYPE_PREMIUM,
PCL_PAPERTYPE_GLOSSY,
PCL_PAPERTYPE_TRANS,
PCL_PAPERTYPE_QPHOTO,
PCL_PAPERTYPE_QTRANS,
-1,
},
{
PCL_PAPERSOURCE_STANDARD,
PCL_PAPERSOURCE_MANUAL,
PCL_PAPERSOURCE_DJ_AUTO,
PCL_PAPERSOURCE_DJ_TRAY,
PCL_PAPERSOURCE_DJ_TRAY2,
PCL_PAPERSOURCE_DJ_OPTIONAL,
-1,
},
},
{ 2,
17 * 72 / 2, 14 * 72,
1, 1,
PCL_RES_150_150 | PCL_RES_300_300,
{12, 12, 18, 18},
{12, 12, 10, 10},
PCL_COLOR_NONE,
PCL_PRINTER_LJ,
{
PCL_PAPERSIZE_EXECUTIVE,
PCL_PAPERSIZE_STATEMENT,
PCL_PAPERSIZE_LETTER,
PCL_PAPERSIZE_LEGAL,
PCL_PAPERSIZE_A4,
PCL_PAPERSIZE_MONARCH_ENV,
PCL_PAPERSIZE_COMMERCIAL10_ENV,
PCL_PAPERSIZE_DL_ENV,
PCL_PAPERSIZE_C5_ENV,
PCL_PAPERSIZE_C6_ENV,
-1,
},
{ -1,
},
{
PCL_PAPERSOURCE_STANDARD,
PCL_PAPERSOURCE_MANUAL,
PCL_PAPERSOURCE_LJ_TRAY1,
PCL_PAPERSOURCE_LJ_TRAY2,
PCL_PAPERSOURCE_LJ_TRAY3,
PCL_PAPERSOURCE_LJ_TRAY4,
-1,
},
},
{ 3,
17 * 72 / 2, 14 * 72,
1, 1,
PCL_RES_150_150 | PCL_RES_300_300,
{12, 12, 18, 18},
{12, 12, 10, 10},
PCL_COLOR_NONE,
PCL_PRINTER_LJ | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE,
{
PCL_PAPERSIZE_EXECUTIVE,
PCL_PAPERSIZE_STATEMENT,
PCL_PAPERSIZE_LETTER,
PCL_PAPERSIZE_LEGAL,
PCL_PAPERSIZE_A4,
PCL_PAPERSIZE_MONARCH_ENV,
PCL_PAPERSIZE_COMMERCIAL10_ENV,
PCL_PAPERSIZE_DL_ENV,
PCL_PAPERSIZE_C5_ENV,
PCL_PAPERSIZE_C6_ENV,
-1,
},
{ -1,
},
{
PCL_PAPERSOURCE_STANDARD,
PCL_PAPERSOURCE_MANUAL,
PCL_PAPERSOURCE_LJ_TRAY1,
PCL_PAPERSOURCE_LJ_TRAY2,
PCL_PAPERSOURCE_LJ_TRAY3,
PCL_PAPERSOURCE_LJ_TRAY4,
-1,
},
},
{ 4,
17 * 72 / 2, 14 * 72,
1, 1,
PCL_RES_150_150 | PCL_RES_300_300,
{12, 12, 18, 18},
{12, 12, 10, 10},
PCL_COLOR_NONE,
PCL_PRINTER_LJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE,
{
PCL_PAPERSIZE_EXECUTIVE,
PCL_PAPERSIZE_STATEMENT,
PCL_PAPERSIZE_LETTER,
PCL_PAPERSIZE_LEGAL,
PCL_PAPERSIZE_A4,
PCL_PAPERSIZE_MONARCH_ENV,
PCL_PAPERSIZE_COMMERCIAL10_ENV,
PCL_PAPERSIZE_DL_ENV,
PCL_PAPERSIZE_C5_ENV,
PCL_PAPERSIZE_C6_ENV,
-1,
},
{ -1,
},
{
PCL_PAPERSOURCE_STANDARD,
PCL_PAPERSOURCE_MANUAL,
PCL_PAPERSOURCE_LJ_TRAY1,
PCL_PAPERSOURCE_LJ_TRAY2,
PCL_PAPERSOURCE_LJ_TRAY3,
PCL_PAPERSOURCE_LJ_TRAY4,
-1,
},
},
{ 5,
13 * 72, 19 * 72,
1, 1,
PCL_RES_150_150 | PCL_RES_300_300 | PCL_RES_600_600,
{12, 12, 18, 18},
{12, 12, 10, 10},
PCL_COLOR_NONE,
PCL_PRINTER_LJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE,
{
PCL_PAPERSIZE_EXECUTIVE,
PCL_PAPERSIZE_STATEMENT,
PCL_PAPERSIZE_LETTER,
PCL_PAPERSIZE_LEGAL,
PCL_PAPERSIZE_TABLOID,
PCL_PAPERSIZE_A5,
PCL_PAPERSIZE_A4,
PCL_PAPERSIZE_A3,
PCL_PAPERSIZE_JIS_B5,
PCL_PAPERSIZE_JIS_B4,
PCL_PAPERSIZE_4x6,
PCL_PAPERSIZE_5x8,
PCL_PAPERSIZE_MONARCH_ENV,
PCL_PAPERSIZE_COMMERCIAL10_ENV,
PCL_PAPERSIZE_DL_ENV,
PCL_PAPERSIZE_C5_ENV,
PCL_PAPERSIZE_C6_ENV,
-1,
},
{ -1,
},
{
PCL_PAPERSOURCE_STANDARD,
PCL_PAPERSOURCE_MANUAL,
PCL_PAPERSOURCE_LJ_TRAY1,
PCL_PAPERSOURCE_LJ_TRAY2,
PCL_PAPERSOURCE_LJ_TRAY3,
PCL_PAPERSOURCE_LJ_TRAY4,
-1,
},
},
{ 6,
17 * 72 / 2, 14 * 72,
1, 1,
PCL_RES_150_150 | PCL_RES_300_300 | PCL_RES_600_600,
{12, 12, 18, 18},
{12, 12, 10, 10},
PCL_COLOR_NONE,
PCL_PRINTER_LJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE,
{
PCL_PAPERSIZE_EXECUTIVE,
PCL_PAPERSIZE_STATEMENT,
PCL_PAPERSIZE_LETTER,
PCL_PAPERSIZE_LEGAL,
PCL_PAPERSIZE_A4,
PCL_PAPERSIZE_MONARCH_ENV,
PCL_PAPERSIZE_COMMERCIAL10_ENV,
PCL_PAPERSIZE_DL_ENV,
PCL_PAPERSIZE_C5_ENV,
PCL_PAPERSIZE_C6_ENV,
-1,
},
{ -1,
},
{
PCL_PAPERSOURCE_STANDARD,
PCL_PAPERSOURCE_MANUAL,
PCL_PAPERSOURCE_LJ_TRAY1,
PCL_PAPERSOURCE_LJ_TRAY2,
PCL_PAPERSOURCE_LJ_TRAY3,
PCL_PAPERSOURCE_LJ_TRAY4,
-1,
},
},
{ 7,
13 * 72, 19 * 72,
1, 1,
PCL_RES_150_150 | PCL_RES_300_300 | PCL_RES_600_600,
{12, 12, 18, 18},
{12, 12, 10, 10},
PCL_COLOR_NONE,
PCL_PRINTER_LJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE,
{
PCL_PAPERSIZE_EXECUTIVE,
PCL_PAPERSIZE_STATEMENT,
PCL_PAPERSIZE_LETTER,
PCL_PAPERSIZE_LEGAL,
PCL_PAPERSIZE_TABLOID,
PCL_PAPERSIZE_A5,
PCL_PAPERSIZE_A4,
PCL_PAPERSIZE_A3,
PCL_PAPERSIZE_JIS_B5,
PCL_PAPERSIZE_JIS_B4,
PCL_PAPERSIZE_4x6,
PCL_PAPERSIZE_5x8,
PCL_PAPERSIZE_MONARCH_ENV,
PCL_PAPERSIZE_COMMERCIAL10_ENV,
PCL_PAPERSIZE_DL_ENV,
PCL_PAPERSIZE_C5_ENV,
PCL_PAPERSIZE_C6_ENV,
-1,
},
{ -1,
},
{
PCL_PAPERSOURCE_STANDARD,
PCL_PAPERSOURCE_MANUAL,
PCL_PAPERSOURCE_LJ_TRAY1,
PCL_PAPERSOURCE_LJ_TRAY2,
PCL_PAPERSOURCE_LJ_TRAY3,
PCL_PAPERSOURCE_LJ_TRAY4,
-1,
},
},
};
static const double sat_adjustment[49] =
{
1.0,
1.1,
1.2,
1.3,
1.4,
1.5,
1.6,
1.7,
1.8,
1.9,
1.9,
1.9,
1.7,
1.5,
1.3,
1.1,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.1,
1.2,
1.3,
1.4,
1.5,
1.5,
1.4,
1.3,
1.2,
1.1,
1.0,
1.0,
1.0,
1.0
};
static const double lum_adjustment[49] =
{
0.50,
0.6,
0.7,
0.8,
0.9,
0.86,
0.82,
0.79,
0.78,
0.8,
0.83,
0.87,
0.9,
0.95,
1.05,
1.15,
1.3,
1.25,
1.2,
1.15,
1.12,
1.09,
1.06,
1.03,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
0.9,
0.8,
0.7,
0.65,
0.6,
0.55,
0.52,
0.48,
0.47,
0.47,
0.49,
0.49,
0.49,
0.52,
0.51,
0.50
};
static const double hue_adjustment[49] =
{
0.00,
0.05,
0.04,
0.01,
-0.03,
-0.10,
-0.18,
-0.26,
-0.35,
-0.43,
-0.40,
-0.32,
-0.25,
-0.18,
-0.10,
-0.07,
0.00,
-0.04,
-0.09,
-0.13,
-0.18,
-0.23,
-0.27,
-0.31,
-0.35,
-0.38,
-0.30,
-0.23,
-0.15,
-0.08,
0.00,
-0.02,
0.00,
0.08,
0.10,
0.08,
0.05,
0.03,
-0.03,
-0.12,
-0.20,
-0.17,
-0.20,
-0.17,
-0.15,
-0.12,
-0.10,
-0.08,
0.00,
};
static int pcl_string_to_val(const char *string,
const pcl_t *options,
int num_options)
{
int i;
int code = -1;
for (i=0; i<num_options; i++) {
if (!strcmp(string, options[i].pcl_name)) {
code=options[i].pcl_code;
break;
}
}
stp_deprintf(STP_DBG_PCL, "String: %s, Code: %d\n", string, code);
return(code);
}
static const char * pcl_val_to_string(int code,
const pcl_t *options,
int num_options)
{
int i;
const char *string = NULL;
for (i=0; i<num_options; i++) {
if (code == options[i].pcl_code) {
string=options[i].pcl_name;
break;
}
}
stp_deprintf(STP_DBG_PCL, "Code: %d, String: %s\n", code, string);
return(string);
}
static const char * pcl_val_to_text(int code,
const pcl_t *options,
int num_options)
{
int i;
const char *string = NULL;
for (i=0; i<num_options; i++) {
if (code == options[i].pcl_code) {
string=options[i].pcl_text;
break;
}
}
stp_deprintf(STP_DBG_PCL, "Code: %d, String: %s\n", code, string);
return(string);
}
static const double dot_sizes[] = { 0.5, 0.832, 1.0 };
static const stp_simple_dither_range_t variable_dither_ranges[] =
{
{ 0.152, 0x1, 1 },
{ 0.255, 0x2, 1 },
{ 0.38, 0x3, 1 },
{ 0.5, 0x1, 0 },
{ 0.67, 0x2, 0 },
{ 1.0, 0x3, 0 }
};
static const pcl_cap_t *
pcl_get_model_capabilities(int model)
{
int i;
int models= sizeof(pcl_model_capabilities) / sizeof(pcl_cap_t);
for (i=0; i<models; i++) {
if (pcl_model_capabilities[i].model == model) {
return &(pcl_model_capabilities[i]);
}
}
stp_erprintf("pcl: model %d not found in capabilities list.\n",model);
return &(pcl_model_capabilities[0]);
}
static char *
c_strdup(const char *s)
{
char *ret = stp_malloc(strlen(s) + 1);
strcpy(ret, s);
return ret;
}
static int pcl_convert_media_size(const char *media_size,
int model)
{
int i;
int media_code = 0;
const pcl_cap_t *caps;
media_code = pcl_string_to_val(media_size, pcl_media_sizes,
sizeof(pcl_media_sizes) / sizeof(pcl_t));
stp_deprintf(STP_DBG_PCL, "Media Size: %s, Code: %d\n", media_size, media_code);
if (media_code != -1) {
caps = pcl_get_model_capabilities(model);
for (i=0; (i<NUM_PRINTER_PAPER_SIZES) && (caps->paper_sizes[i] != -1); i++) {
if (media_code == caps->paper_sizes[i])
return(media_code);
}
stp_deprintf(STP_DBG_PCL, "Media Code %d not supported by printer model %d.\n",
media_code, model);
return(-1);
}
else
return(-1);
}
static stp_param_t ink_types[] =
{
{ "CMYK", N_ ("Color + Black Cartridges") },
{ "Photo", N_ ("Color + Photo Cartridges") }
};
static const int
pcl_papersize_valid(const stp_papersize_t pt,
int model)
{
const pcl_cap_t *caps = pcl_get_model_capabilities(model);
#ifdef PCL_NO_CUSTOM_PAPERSIZES
int use_custom = 0;
#else
int use_custom = ((caps->stp_printer_type & PCL_PRINTER_CUSTOM_SIZE)
== PCL_PRINTER_CUSTOM_SIZE);
#endif
unsigned int pwidth = stp_papersize_get_width(pt);
unsigned int pheight = stp_papersize_get_height(pt);
if (strlen(stp_papersize_get_name(pt)) <= 0)
return(0);
if (pcl_convert_media_size(stp_papersize_get_name(pt), model) != -1)
return(1);
if (use_custom == 0)
return(0);
if (pwidth <= caps->custom_max_width &&
pheight <= caps->custom_max_height &&
(pheight >= caps->custom_min_height || pheight == 0) &&
(pwidth >= caps->custom_min_width || pwidth == 0))
return(1);
return(0);
}
static stp_param_t *
pcl_parameters(const stp_printer_t printer,
const char *ppd_file,
const char *name,
int *count)
{
int model = stp_printer_get_model(printer);
int i;
stp_param_t *valptrs;
const pcl_cap_t *caps;
if (count == NULL)
return (NULL);
*count = 0;
if (name == NULL)
return (NULL);
stp_deprintf(STP_DBG_PCL, "pcl_parameters(): Name = %s\n", name);
caps = pcl_get_model_capabilities(model);
stp_deprintf(STP_DBG_PCL, "Printer model = %d\n", model);
stp_deprintf(STP_DBG_PCL, "PageWidth = %d, PageHeight = %d\n", caps->custom_max_width, caps->custom_max_height);
stp_deprintf(STP_DBG_PCL, "MinPageWidth = %d, MinPageHeight = %d\n", caps->custom_min_width, caps->custom_min_height);
stp_deprintf(STP_DBG_PCL, "Normal Margins: top = %d, bottom = %d, left = %d, right = %d\n",
caps->normal_margins.top_margin, caps->normal_margins.bottom_margin,
caps->normal_margins.left_margin, caps->normal_margins.right_margin);
stp_deprintf(STP_DBG_PCL, "A4 Margins: top = %d, bottom = %d, left = %d, right = %d\n",
caps->a4_margins.top_margin, caps->a4_margins.bottom_margin,
caps->a4_margins.left_margin, caps->a4_margins.right_margin);
stp_deprintf(STP_DBG_PCL, "Resolutions: %d\n", caps->resolutions);
stp_deprintf(STP_DBG_PCL, "ColorType = %d, PrinterType = %d\n", caps->color_type, caps->stp_printer_type);
if (strcmp(name, "PageSize") == 0)
{
int papersizes = stp_known_papersizes();
valptrs = stp_malloc(sizeof(stp_param_t) * papersizes);
*count = 0;
for (i = 0; i < papersizes; i++)
{
const stp_papersize_t pt = stp_get_papersize_by_index(i);
if (strlen(stp_papersize_get_name(pt)) > 0)
{
if (pcl_papersize_valid(pt, model))
{
valptrs[*count].name = c_strdup(stp_papersize_get_name(pt));
valptrs[*count].text = c_strdup(stp_papersize_get_text(pt));
(*count)++;
}
}
}
return (valptrs);
}
else if (strcmp(name, "MediaType") == 0)
{
if (caps->paper_types[0] == -1)
{
*count = 0;
return (NULL);
}
else
{
valptrs = stp_malloc(sizeof(stp_param_t) * NUM_PRINTER_PAPER_TYPES);
*count = 0;
for (i=0; (i < NUM_PRINTER_PAPER_TYPES) && (caps->paper_types[i] != -1); i++)
{
valptrs[i].name = c_strdup(pcl_val_to_string(caps->paper_types[i],
pcl_media_types,
NUM_PRINTER_PAPER_TYPES));
valptrs[i].text = c_strdup(pcl_val_to_text(caps->paper_types[i],
pcl_media_types,
NUM_PRINTER_PAPER_TYPES));
(*count)++;
}
return(valptrs);
}
}
else if (strcmp(name, "InputSlot") == 0)
{
if (caps->paper_sources[0] == -1)
{
*count = 0;
return (NULL);
}
else
{
valptrs = stp_malloc(sizeof(stp_param_t) * NUM_PRINTER_PAPER_SOURCES);
*count = 0;
for (i=0; (i < NUM_PRINTER_PAPER_SOURCES) && (caps->paper_sources[i] != -1); i++)
{
valptrs[i].name = c_strdup(pcl_val_to_string(caps->paper_sources[i],
pcl_media_sources,
NUM_PRINTER_PAPER_SOURCES));
valptrs[i].text = c_strdup(pcl_val_to_text(caps->paper_sources[i],
pcl_media_sources,
NUM_PRINTER_PAPER_SOURCES));
(*count)++;
}
return(valptrs);
}
}
else if (strcmp(name, "Resolution") == 0)
{
*count = 0;
valptrs = stp_malloc(sizeof(stp_param_t) * NUM_RESOLUTIONS);
for (i = 0; i < NUM_RESOLUTIONS; i++)
{
if (caps->resolutions & pcl_resolutions[i].pcl_code)
{
valptrs[*count].name = c_strdup(pcl_val_to_string(pcl_resolutions[i].pcl_code,
pcl_resolutions, NUM_RESOLUTIONS));
valptrs[*count].text = c_strdup(pcl_val_to_text(pcl_resolutions[i].pcl_code,
pcl_resolutions, NUM_RESOLUTIONS));
(*count)++;
}
}
return(valptrs);
}
else if (strcmp(name, "InkType") == 0)
{
if (caps->color_type & PCL_COLOR_CMYKcm)
{
valptrs = stp_malloc(sizeof(stp_param_t) * 2);
valptrs[0].name = c_strdup(ink_types[0].name);
valptrs[0].text = c_strdup(_(ink_types[0].text));
valptrs[1].name = c_strdup(ink_types[1].name);
valptrs[1].text = c_strdup(_(ink_types[1].text));
*count = 2;
return(valptrs);
}
else
return(NULL);
}
else
return (NULL);
}
static const char *
pcl_default_parameters(const stp_printer_t printer,
const char *ppd_file,
const char *name)
{
int model = stp_printer_get_model(printer);
int i;
const pcl_cap_t *caps;
if (name == NULL)
return (NULL);
stp_deprintf(STP_DBG_PCL, "pcl_default_parameters(): Name = %s\n", name);
caps = pcl_get_model_capabilities(model);
stp_deprintf(STP_DBG_PCL, "Printer model = %d\n", model);
stp_deprintf(STP_DBG_PCL, "PageWidth = %d, PageHeight = %d\n", caps->custom_max_width, caps->custom_max_height);
stp_deprintf(STP_DBG_PCL, "MinPageWidth = %d, MinPageHeight = %d\n", caps->custom_min_width, caps->custom_min_height);
stp_deprintf(STP_DBG_PCL, "Normal Margins: top = %d, bottom = %d, left = %d, right = %d\n",
caps->normal_margins.top_margin, caps->normal_margins.bottom_margin,
caps->normal_margins.left_margin, caps->normal_margins.right_margin);
stp_deprintf(STP_DBG_PCL, "A4 Margins: top = %d, bottom = %d, left = %d, right = %d\n",
caps->a4_margins.top_margin, caps->a4_margins.bottom_margin,
caps->a4_margins.left_margin, caps->a4_margins.right_margin);
stp_deprintf(STP_DBG_PCL, "Resolutions: %d\n", caps->resolutions);
stp_deprintf(STP_DBG_PCL, "ColorType = %d, PrinterType = %d\n", caps->color_type, caps->stp_printer_type);
if (strcmp(name, "PageSize") == 0)
{
int papersizes = stp_known_papersizes();
for (i = 0; i < papersizes; i++)
{
const stp_papersize_t pt = stp_get_papersize_by_index(i);
if (strlen(stp_papersize_get_name(pt)) > 0 &&
pcl_papersize_valid(pt, model))
{
return (stp_papersize_get_name(pt));
}
}
return NULL;
}
else if (strcmp(name, "MediaType") == 0)
{
if (caps->paper_types[0] == -1)
{
return (NULL);
}
else
{
return (pcl_val_to_string(caps->paper_types[0], pcl_media_types,
NUM_PRINTER_PAPER_TYPES));
}
}
else if (strcmp(name, "InputSlot") == 0)
{
if (caps->paper_sources[0] == -1)
{
return (NULL);
}
else
{
return (pcl_val_to_string(caps->paper_sources[0], pcl_media_sources,
NUM_PRINTER_PAPER_SOURCES));
}
}
else if (strcmp(name, "Resolution") == 0)
{
for (i = 0; i < NUM_RESOLUTIONS; i++)
{
if ((caps->resolutions & pcl_resolutions[i].pcl_code) &&
(pcl_resolutions[i].pcl_code >= PCL_RES_300_300))
{
return (pcl_val_to_string(pcl_resolutions[i].pcl_code,
pcl_resolutions, NUM_RESOLUTIONS));
}
}
for (i = 0; i < NUM_RESOLUTIONS; i++)
{
if ((caps->resolutions & pcl_resolutions[i].pcl_code))
{
return (pcl_val_to_string(pcl_resolutions[i].pcl_code,
pcl_resolutions, NUM_RESOLUTIONS));
}
}
return NULL;
}
else if (strcmp(name, "InkType") == 0)
{
if (caps->color_type & PCL_COLOR_CMYKcm)
{
return (ink_types[0].name);
}
else
return(NULL);
}
else
return (NULL);
}
static void
pcl_imageable_area(const stp_printer_t printer,
const stp_vars_t v,
int *left,
int *right,
int *bottom,
int *top)
{
int width, height;
const pcl_cap_t *caps;
int pcl_media_size;
const char *media_size;
stp_papersize_t pp;
caps = pcl_get_model_capabilities(stp_printer_get_model(printer));
stp_default_media_size(printer, v, &width, &height);
if (strlen(stp_get_media_size(v)) > 0)
media_size = stp_get_media_size(v);
else if ((pp = stp_get_papersize_by_size(stp_get_page_height(v),
stp_get_page_width(v))) != NULL)
media_size = stp_papersize_get_name(pp);
else
media_size = "";
stp_deprintf(STP_DBG_PCL, "pcl_imageable_area(): media_size: '%s'\n",
media_size);
pcl_media_size = pcl_convert_media_size(media_size,
stp_printer_get_model(printer));
if (pcl_media_size == PCL_PAPERSIZE_A4)
{
*left = caps->a4_margins.left_margin;
*right = width - caps->a4_margins.right_margin;
*top = height - caps->a4_margins.top_margin;
*bottom = caps->a4_margins.bottom_margin;
}
else
{
*left = caps->normal_margins.left_margin;
*right = width - caps->normal_margins.right_margin;
*top = height - caps->normal_margins.top_margin;
*bottom = caps->normal_margins.bottom_margin;
}
}
static void
pcl_limit(const stp_printer_t printer,
const stp_vars_t v,
int *width,
int *height,
int *min_width,
int *min_height)
{
const pcl_cap_t *caps= pcl_get_model_capabilities(stp_printer_get_model(printer));
*width = caps->custom_max_width;
*height = caps->custom_max_height;
*min_width = caps->custom_min_width;
*min_height = caps->custom_min_height;
}
static void
pcl_print(const stp_printer_t printer,
stp_image_t *image,
const stp_vars_t v)
{
int i;
unsigned char *cmap = stp_get_cmap(v);
int model = stp_printer_get_model(printer);
const char *resolution = stp_get_resolution(v);
const char *media_size;
const char *media_type = stp_get_media_type(v);
const char *media_source = stp_get_media_source(v);
const char *ink_type = stp_get_ink_type(v);
int output_type = stp_get_output_type(v);
int orientation = stp_get_orientation(v);
double scaling = stp_get_scaling(v);
int top = stp_get_top(v);
int left = stp_get_left(v);
int y;
int xdpi, ydpi;
unsigned short *out;
unsigned char *in,
*black,
*cyan,
*magenta,
*yellow,
*lcyan,
*lmagenta;
int page_left,
page_right,
page_top,
page_bottom,
page_width,
page_height,
out_width,
out_height,
out_bpp,
height,
errdiv,
errmod,
errval,
errline,
errlast;
stp_convert_t colorfunc;
int zero_mask;
void (*writefunc)(const stp_vars_t, unsigned char *, unsigned char *,
int, int);
int image_height,
image_width,
image_bpp;
void * dither;
const pcl_cap_t *caps;
int do_cret,
do_cretb,
do_6color,
planes;
int pcl_media_size,
pcl_media_type,
pcl_media_source;
const double *dot_sizes_use,dot_sizes_cret[]={1.0,1.0,1.0};
stp_vars_t nv = stp_allocate_copy(v);
stp_papersize_t pp;
int len_c,
len_lc,
len_m,
len_lm,
len_y,
len_k;
int blank_lines,
is_blank,
do_blank;
stp_dither_data_t *dt;
unsigned char *comp_buf;
int the_top_margin,
the_left_margin;
if (!stp_get_verified(nv))
{
stp_eprintf(nv, "Print options not verified; cannot print.\n");
return;
}
caps = pcl_get_model_capabilities(model);
image->init(image);
image_height = image->height(image);
image_width = image->width(image);
image_bpp = image->bpp(image);
xdpi = 0;
ydpi = 0;
for (i = 0; i < NUM_RESOLUTIONS; i++)
{
if (!strcmp(resolution, pcl_resolutions[i].pcl_name))
{
xdpi = pcl_resolutions[i].p0;
ydpi = pcl_resolutions[i].p1;
break;
}
}
stp_deprintf(STP_DBG_PCL,"pcl: resolution=%dx%d\n",xdpi,ydpi);
if (xdpi == 0 || ydpi == 0)
return;
if (((caps->resolutions & PCL_RES_600_600_MONO) == PCL_RES_600_600_MONO) &&
output_type != OUTPUT_GRAY && output_type != OUTPUT_MONOCHROME &&
xdpi == 600 && ydpi == 600)
{
stp_eprintf(v, "600x600 resolution only available in MONO\n");
output_type = OUTPUT_GRAY;
stp_set_output_type(nv, OUTPUT_GRAY);
}
if (caps->color_type == PCL_COLOR_NONE && output_type != OUTPUT_MONOCHROME)
{
output_type = OUTPUT_GRAY;
stp_set_output_type(nv, OUTPUT_GRAY);
}
stp_set_output_color_model(nv, COLOR_MODEL_CMY);
colorfunc = stp_choose_colorfunc(output_type, image_bpp, cmap, &out_bpp, nv);
do_cret = (xdpi >= 300 &&
((caps->color_type & PCL_COLOR_CMYK4) == PCL_COLOR_CMYK4) &&
output_type != OUTPUT_MONOCHROME);
do_cretb = (xdpi >= 600 && ydpi >= 600 &&
((caps->color_type & PCL_COLOR_CMYK4b) == PCL_COLOR_CMYK4b) &&
output_type != OUTPUT_MONOCHROME &&
output_type != OUTPUT_GRAY);
if (do_cretb){
do_cret = 1;
dot_sizes_use=dot_sizes_cret;
}else{
dot_sizes_use=dot_sizes;
}
stp_deprintf(STP_DBG_PCL, "do_cret = %d\n", do_cret);
stp_deprintf(STP_DBG_PCL, "do_cretb = %d\n", do_cretb);
do_6color = (strcmp(ink_type, "Photo") == 0);
stp_deprintf(STP_DBG_PCL, "do_6color = %d\n", do_6color);
pcl_imageable_area(printer, nv, &page_left, &page_right,
&page_bottom, &page_top);
stp_deprintf(STP_DBG_PCL,"Before stp_compute_page_parameters()\n");
stp_deprintf(STP_DBG_PCL,"page_left = %d, page_right = %d, page_top = %d, page_bottom = %d\n",
page_left, page_right, page_top, page_bottom);
stp_deprintf(STP_DBG_PCL,"top = %d, left = %d\n", top, left);
stp_deprintf(STP_DBG_PCL,"scaling = %f, image_width = %d, image_height = %d\n", scaling,
image_width, image_height);
stp_compute_page_parameters(page_right, page_left, page_top, page_bottom,
scaling, image_width, image_height, image,
&orientation, &page_width, &page_height,
&out_width, &out_height, &left, &top);
image_height = image->height(image);
image_width = image->width(image);
stp_deprintf(STP_DBG_PCL,"After stp_compute_page_parameters()\n");
stp_deprintf(STP_DBG_PCL,"page_width = %d, page_height = %d\n", page_width, page_height);
stp_deprintf(STP_DBG_PCL,"out_width = %d, out_height = %d\n", out_width, out_height);
stp_deprintf(STP_DBG_PCL,"top = %d, left = %d\n", top, left);
image->progress_init(image);
if (do_cretb)
{
stp_puts("\033*rbC", v);
}
stp_puts("\033E", v);
if (do_cretb)
{
stp_zprintf(v, "\033%%-12345X@PJL ENTER LANGUAGE=PCL3GUI\n");
}
if (strlen(stp_get_media_size(v)) > 0)
media_size = stp_get_media_size(v);
else if ((pp = stp_get_papersize_by_size(stp_get_page_height(v),
stp_get_page_width(v))) != NULL)
media_size = stp_papersize_get_name(pp);
else
media_size = "";
pcl_media_size = pcl_convert_media_size(media_size, model);
stp_deprintf(STP_DBG_PCL,"pcl_media_size = %d, media_size = %s\n", pcl_media_size, media_size);
if (pcl_media_size == -1) {
stp_deprintf(STP_DBG_PCL, "Paper size %s is not directly supported by printer.\n",
media_size);
stp_deprintf(STP_DBG_PCL, "Trying as custom pagesize (watch the margins!)\n");
pcl_media_size = PCL_PAPERSIZE_CUSTOM;
}
stp_zprintf(v, "\033&l%dA", pcl_media_size);
stp_puts("\033&l0L", v);
stp_puts("\033&l0E", v);
if (strlen(media_source) != 0) {
pcl_media_source = pcl_string_to_val(media_source, pcl_media_sources,
sizeof(pcl_media_sources) / sizeof(pcl_t));
stp_deprintf(STP_DBG_PCL,"pcl_media_source = %d, media_source = %s\n", pcl_media_source,
media_source);
if (pcl_media_source == -1)
stp_deprintf(STP_DBG_PCL, "Unknown media source %s, ignored.\n", media_source);
else if (pcl_media_source != PCL_PAPERSOURCE_STANDARD) {
pcl_media_source = pcl_media_source % PAPERSOURCE_MOD;
stp_zprintf(v, "\033&l%dH", pcl_media_source);
}
}
if (strlen(media_type) != 0) {
pcl_media_type = pcl_string_to_val(media_type, pcl_media_types,
sizeof(pcl_media_types) / sizeof(pcl_t));
stp_deprintf(STP_DBG_PCL,"pcl_media_type = %d, media_type = %s\n", pcl_media_type,
media_type);
if (pcl_media_type == -1) {
stp_deprintf(STP_DBG_PCL, "Unknown media type %s, set to PLAIN.\n", media_type);
pcl_media_type = PCL_PAPERTYPE_PLAIN;
}
if (do_cretb && pcl_media_type == PCL_PAPERTYPE_GLOSSY) {
stp_deprintf(STP_DBG_PCL, "Media type GLOSSY, set to PREMIUM for PhotoRET II.\n");
pcl_media_type = PCL_PAPERTYPE_PREMIUM;
}
}
else
pcl_media_type = PCL_PAPERTYPE_PLAIN;
if ((xdpi >= 300) && ((caps->stp_printer_type & PCL_PRINTER_DJ) == PCL_PRINTER_DJ))
{
if ((caps->stp_printer_type & PCL_PRINTER_MEDIATYPE) == PCL_PRINTER_MEDIATYPE)
{
stp_puts("\033*o1M", v);
stp_zprintf(v, "\033&l%dM", pcl_media_type);
}
else
{
stp_puts("\033*r2Q", v);
stp_puts("\033*o2Q", v);
if ((pcl_media_type == PCL_PAPERTYPE_PLAIN)
|| (pcl_media_type == PCL_PAPERTYPE_BOND)) {
if ((caps->color_type & PCL_COLOR_CMY) == PCL_COLOR_CMY)
stp_puts("\033*o2D", v);
else
stp_puts("\033*o5D", v);
}
else if ((pcl_media_type == PCL_PAPERTYPE_PREMIUM)
|| (pcl_media_type == PCL_PAPERTYPE_GLOSSY)
|| (pcl_media_type == PCL_PAPERTYPE_TRANS))
stp_puts("\033*o1D", v);
}
}
if ((xdpi != ydpi) || (do_cret) || (do_6color))
{
if (output_type != OUTPUT_GRAY && output_type != OUTPUT_MONOCHROME)
if ((caps->color_type & PCL_COLOR_CMY) == PCL_COLOR_CMY)
planes = 3;
else
if (do_6color)
planes = 6;
else
planes = 4;
else
planes = 1;
stp_zprintf(v, "\033*g%dW", 2 + (planes * 6));
stp_putc(2, v);
stp_putc(planes, v);
if (planes != 3) {
stp_putc(xdpi >> 8, v);
stp_putc(xdpi, v);
stp_putc(ydpi >> 8, v);
stp_putc(ydpi, v);
stp_putc(0, v);
if (do_cretb){
stp_putc(2, v);
}else{
stp_putc(do_cret ? 4 : 2, v);
}
}
if (planes != 1) {
stp_putc(xdpi >> 8, v);
stp_putc(xdpi, v);
stp_putc(ydpi >> 8, v);
stp_putc(ydpi, v);
stp_putc(0, v);
stp_putc(do_cret ? 4 : 2, v);
stp_putc(xdpi >> 8, v);
stp_putc(xdpi, v);
stp_putc(ydpi >> 8, v);
stp_putc(ydpi, v);
stp_putc(0, v);
stp_putc(do_cret ? 4 : 2, v);
stp_putc(xdpi >> 8, v);
stp_putc(xdpi, v);
stp_putc(ydpi >> 8, v);
stp_putc(ydpi, v);
stp_putc(0, v);
stp_putc(do_cret ? 4 : 2, v);
}
if (planes == 6)
{
stp_putc(xdpi >> 8, v);
stp_putc(xdpi, v);
stp_putc(ydpi >> 8, v);
stp_putc(ydpi, v);
stp_putc(0, v);
stp_putc(do_cret ? 4 : 2, v);
stp_putc(xdpi >> 8, v);
stp_putc(xdpi, v);
stp_putc(ydpi >> 8, v);
stp_putc(ydpi, v);
stp_putc(0, v);
stp_putc(do_cret ? 4 : 2, v);
}
}
else
{
stp_zprintf(v, "\033*t%dR", xdpi);
if (output_type != OUTPUT_GRAY && output_type != OUTPUT_MONOCHROME)
{
if ((caps->color_type & PCL_COLOR_CMY) == PCL_COLOR_CMY)
stp_puts("\033*r-3U", v);
else
stp_puts("\033*r-4U", v);
}
}
#ifndef PCL_DEBUG_DISABLE_COMPRESSION
if ((caps->stp_printer_type & PCL_PRINTER_TIFF) == PCL_PRINTER_TIFF)
{
stp_puts("\033*b2M", v);
}
else
#endif
{
stp_puts("\033*b0M", v);
}
out_width = xdpi * out_width / 72;
out_height = ydpi * out_height / 72;
if (pcl_media_size == PCL_PAPERSIZE_A4)
{
the_left_margin = caps->a4_margins.left_margin;
the_top_margin = caps->a4_margins.top_margin;
}
else
{
the_left_margin = caps->normal_margins.left_margin;
the_top_margin = caps->normal_margins.top_margin;
}
stp_deprintf(STP_DBG_PCL, "left %d margin %d top %d margin %d width %d height %d\n",
left, the_left_margin, top, the_top_margin, out_width, out_height);
if (!do_cretb) {
stp_zprintf(v, "\033&a%dH", 10 * left);
stp_zprintf(v, "\033&a%dV", 10 * (top + the_top_margin));
}
stp_zprintf(v, "\033*r%dS", out_width);
stp_zprintf(v, "\033*r%dT", out_height);
if (do_cretb)
{
stp_zprintf(v, "\033*p%dY", (top + the_top_margin)*4);
stp_zprintf(v, "\033*p%dX", left*4);
}
stp_puts("\033*r1A", v);
height = (out_width + 7) / 8;
if (do_cret)
height *= 2;
if (output_type == OUTPUT_GRAY || output_type == OUTPUT_MONOCHROME)
{
black = stp_malloc(height);
cyan = NULL;
magenta = NULL;
yellow = NULL;
lcyan = NULL;
lmagenta = NULL;
}
else
{
cyan = stp_malloc(height);
magenta = stp_malloc(height);
yellow = stp_malloc(height);
if ((caps->color_type & PCL_COLOR_CMY) == PCL_COLOR_CMY)
black = NULL;
else
black = stp_malloc(height);
if (do_6color)
{
lcyan = stp_malloc(height);
lmagenta = stp_malloc(height);
}
else
{
lcyan = NULL;
lmagenta = NULL;
}
}
#ifndef PCL_DEBUG_DISABLE_COMPRESSION
if ((caps->stp_printer_type & PCL_PRINTER_TIFF) == PCL_PRINTER_TIFF)
{
comp_buf = stp_malloc((height + 128 + 7) * 129 / 128);
writefunc = pcl_mode2;
}
else
#endif
{
comp_buf = NULL;
writefunc = pcl_mode0;
}
stp_compute_lut(nv, 256);
if (xdpi > ydpi)
dither = stp_init_dither(image_width, out_width, 1, xdpi / ydpi, nv);
else
dither = stp_init_dither(image_width, out_width, ydpi / xdpi, 1, nv);
#if 1
for (i = 0; i <= NCOLORS; i++)
stp_dither_set_black_level(dither, i, 1.2);
stp_dither_set_black_lower(dither, .3);
stp_dither_set_black_upper(dither, .999);
#endif
stp_deprintf(STP_DBG_PCL, "Density: %f\n", stp_get_density(nv));
if (stp_get_density(nv) > 1.0)
stp_set_density(nv, 1.0);
if (do_cret)
{
stp_dither_set_ranges_simple(dither, ECOLOR_Y, 3, dot_sizes_use, stp_get_density(nv));
if (!do_cretb)
stp_dither_set_ranges_simple(dither, ECOLOR_K, 3, dot_sizes_use, stp_get_density(nv));
if (do_6color)
{
stp_dither_set_ranges(dither, ECOLOR_C, 6, variable_dither_ranges,
stp_get_density(nv));
stp_dither_set_ranges(dither, ECOLOR_M, 6, variable_dither_ranges,
stp_get_density(nv));
}
else
{
stp_dither_set_ranges_simple(dither, ECOLOR_C, 3, dot_sizes_use, stp_get_density(nv));
stp_dither_set_ranges_simple(dither, ECOLOR_M, 3, dot_sizes_use, stp_get_density(nv));
}
}
else if (do_6color)
{
stp_dither_set_light_ink(dither, ECOLOR_C, .25, stp_get_density(nv));
stp_dither_set_light_ink(dither, ECOLOR_M, .25, stp_get_density(nv));
}
switch (stp_get_image_type(nv))
{
case IMAGE_LINE_ART:
stp_dither_set_ink_spread(dither, 19);
break;
case IMAGE_SOLID_TONE:
stp_dither_set_ink_spread(dither, 15);
break;
case IMAGE_CONTINUOUS:
stp_dither_set_ink_spread(dither, 14);
break;
}
stp_dither_set_density(dither, stp_get_density(nv));
in = stp_malloc(image_width * image_bpp);
out = stp_malloc(image_width * out_bpp * 2);
errdiv = image_height / out_height;
errmod = image_height % out_height;
errval = 0;
errlast = -1;
errline = 0;
blank_lines = 0;
is_blank = 0;
#ifndef PCL_DEBUG_DISABLE_BLANKLINE_REMOVAL
do_blank = ((caps->stp_printer_type & PCL_PRINTER_BLANKLINE) ==
PCL_PRINTER_BLANKLINE);
#else
do_blank = 0;
#endif
dt = stp_create_dither_data();
stp_add_channel(dt, black, ECOLOR_K, 0);
stp_add_channel(dt, cyan, ECOLOR_C, 0);
stp_add_channel(dt, lcyan, ECOLOR_C, 1);
stp_add_channel(dt, magenta, ECOLOR_M, 0);
stp_add_channel(dt, lmagenta, ECOLOR_M, 1);
stp_add_channel(dt, yellow, ECOLOR_Y, 0);
for (y = 0; y < out_height; y ++)
{
int duplicate_line = 1;
stp_deprintf(STP_DBG_PCL,"pcl_print: y = %d, line = %d, val = %d, mod = %d, height = %d\n",
y, errline, errval, errmod, out_height);
if ((y & 63) == 0)
image->note_progress(image, y, out_height);
if (errline != errlast)
{
errlast = errline;
duplicate_line = 0;
if (image->get_row(image, in, errline) != STP_IMAGE_OK)
break;
(*colorfunc)(nv, in, out, &zero_mask, image_width, image_bpp, cmap,
hue_adjustment, lum_adjustment, NULL);
}
stp_dither(out, y, dither, dt, duplicate_line, zero_mask);
len_c = stp_dither_get_last_position(dither, ECOLOR_C, 0);
len_lc = stp_dither_get_last_position(dither, ECOLOR_C, 1);
len_m = stp_dither_get_last_position(dither, ECOLOR_M, 0);
len_lm = stp_dither_get_last_position(dither, ECOLOR_M, 1);
len_y = stp_dither_get_last_position(dither, ECOLOR_Y, 0);
len_k = stp_dither_get_last_position(dither, ECOLOR_K, 0);
is_blank = (do_blank && (len_c == -1) && (len_lc == -1) && (len_m == -1)
&& (len_lm == -1) && (len_y == -1) && (len_k == -1));
if (is_blank && (blank_lines != 0))
{
blank_lines++;
}
else
{
if (! is_blank)
{
if (blank_lines > 1)
{
blank_lines--;
stp_deprintf(STP_DBG_PCL, "Blank Lines = %d\n", blank_lines);
stp_zprintf(v, "\033*b%dY", blank_lines);
blank_lines=0;
}
else;
}
else
{
blank_lines++;
}
if (do_cret)
{
if (output_type == OUTPUT_GRAY || output_type == OUTPUT_MONOCHROME)
{
(*writefunc)(v, comp_buf, black + height / 2, height / 2, 0);
(*writefunc)(v, comp_buf, black, height / 2, 1);
}
else
{
if(do_cretb)
{
(*writefunc)(v, comp_buf, black, height/2, 0);
}
else
{
(*writefunc)(v, comp_buf, black + height / 2, height / 2, 0);
(*writefunc)(v, comp_buf, black, height / 2, 0);
}
(*writefunc)(v, comp_buf, cyan + height / 2, height / 2, 0);
(*writefunc)(v, comp_buf, cyan, height / 2, 0);
(*writefunc)(v, comp_buf, magenta + height / 2, height / 2, 0);
(*writefunc)(v, comp_buf, magenta, height / 2, 0);
(*writefunc)(v, comp_buf, yellow + height / 2, height / 2, 0);
if (do_6color)
{
(*writefunc)(v, comp_buf, yellow, height / 2, 0);
(*writefunc)(v, comp_buf, lcyan + height / 2, height / 2, 0);
(*writefunc)(v, comp_buf, lcyan, height / 2, 0);
(*writefunc)(v, comp_buf, lmagenta + height / 2, height / 2, 0);
(*writefunc)(v, comp_buf, lmagenta, height / 2, 1);
}
else
(*writefunc)(v, comp_buf, yellow, height / 2, 1);
}
}
else
{
if (output_type == OUTPUT_GRAY || output_type == OUTPUT_MONOCHROME)
{
(*writefunc)(v, comp_buf, black, height, 1);
}
else
{
if (black != NULL)
(*writefunc)(v, comp_buf, black, height, 0);
(*writefunc)(v, comp_buf, cyan, height, 0);
(*writefunc)(v, comp_buf, magenta, height, 0);
if (do_6color)
{
(*writefunc)(v, comp_buf, yellow, height, 0);
(*writefunc)(v, comp_buf, lcyan, height, 0);
(*writefunc)(v, comp_buf, lmagenta, height, 1);
}
else
(*writefunc)(v, comp_buf, yellow, height, 1);
}
}
}
errval += errmod;
errline += errdiv;
if (errval >= out_height)
{
errval -= out_height;
errline ++;
}
}
if (blank_lines > 1)
{
blank_lines--;
stp_deprintf(STP_DBG_PCL, "Blank Lines = %d\n", blank_lines);
stp_zprintf(v, "\033*b%dY", blank_lines);
blank_lines=0;
}
image->progress_conclude(image);
stp_free_dither_data(dt);
stp_free_dither(dither);
stp_free_lut(nv);
stp_free(in);
stp_free(out);
if (black != NULL)
stp_free(black);
if (cyan != NULL)
{
stp_free(cyan);
stp_free(magenta);
stp_free(yellow);
}
if (lcyan != NULL)
{
stp_free(lcyan);
stp_free(lmagenta);
}
if (comp_buf != NULL)
stp_free(comp_buf);
if ((caps->stp_printer_type & PCL_PRINTER_NEW_ERG) == PCL_PRINTER_NEW_ERG)
stp_puts("\033*rC", v);
else
stp_puts("\033*rB", v);
stp_puts("\033&l0H", v);
if (do_cretb)
{
stp_zprintf(v, "\033%%-12345X\n");
}
stp_puts("\033E", v);
stp_free_vars(nv);
}
const stp_printfuncs_t stp_pcl_printfuncs =
{
pcl_parameters,
stp_default_media_size,
pcl_imageable_area,
pcl_limit,
pcl_print,
pcl_default_parameters,
pcl_describe_resolution,
stp_verify_printer_params,
stp_start_job,
stp_end_job
};
static void
pcl_mode0(const stp_vars_t v,
unsigned char *comp_buf,
unsigned char *line,
int height,
int last_plane)
{
stp_zprintf(v, "\033*b%d%c", height, last_plane ? 'W' : 'V');
stp_zfwrite((const char *) line, height, 1, v);
}
static void
pcl_mode2(const stp_vars_t v,
unsigned char *comp_buf,
unsigned char *line,
int height,
int last_plane)
{
unsigned char *comp_ptr;
stp_pack_tiff(line, height, comp_buf, &comp_ptr);
stp_zprintf(v, "\033*b%d%c", (int)(comp_ptr - comp_buf), last_plane ? 'W' : 'V');
stp_zfwrite((const char *)comp_buf, comp_ptr - comp_buf, 1, v);
}