#ifndef GIMP_PRINT_INTERNAL_ESCP2_H
#define GIMP_PRINT_INTERNAL_ESCP2_H
#define PHYSICAL_CHANNEL_LIMIT 8
#define MAX_DROP_SIZES 3
#define XCOLOR_R (STP_NCOLORS + 0)
#define XCOLOR_B (STP_NCOLORS + 1)
#define XCOLOR_GLOSS (STP_NCOLORS + 2)
typedef unsigned long model_cap_t;
typedef unsigned long model_featureset_t;
#define RES_LOW 0
#define RES_360 1
#define RES_720_360 2
#define RES_720 3
#define RES_1440_720 4
#define RES_2880_720 5
#define RES_2880_1440 6
#define RES_2880_2880 7
#define RES_N 8
typedef struct
{
const char *listname;
short numdropsizes;
const double dropsizes[MAX_DROP_SIZES];
} escp2_dropsize_t;
typedef const escp2_dropsize_t *const escp2_drop_list_t[RES_N];
typedef struct
{
const char *name;
float base_density;
float subchannel_cutoff;
float k_transition;
float k_lower;
float k_upper;
float cyan;
float magenta;
float yellow;
float black;
float saturation;
float gamma;
const char *hue_adjustment;
const char *lum_adjustment;
const char *sat_adjustment;
} paper_adjustment_t;
typedef struct
{
const char *listname;
short paper_count;
const paper_adjustment_t *papers;
} paper_adjustment_list_t;
typedef enum
{
PAPER_PLAIN = 0x01,
PAPER_GOOD = 0x02,
PAPER_PHOTO = 0x04,
PAPER_PREMIUM_PHOTO = 0x08,
PAPER_TRANSPARENCY = 0x10
} paper_class_t;
typedef struct
{
const char *name;
const char *text;
paper_class_t paper_class;
short paper_feed_sequence;
short platen_gap;
short feed_adjustment;
short vacuum_intensity;
short paper_thickness;
const char *preferred_ink_type;
const char *preferred_ink_set;
} paper_t;
typedef struct
{
const char *listname;
short paper_count;
const paper_t *papers;
} paperlist_t;
typedef struct
{
const char *name;
const char *text;
short hres;
short vres;
short printed_hres;
short printed_vres;
short softweave;
short printer_weave;
short vertical_passes;
} res_t;
typedef struct
{
short color;
short subchannel;
short head_offset;
const char *channel_density;
const char *subchannel_scale;
} physical_subchannel_t;
typedef struct
{
const char *listname;
const physical_subchannel_t *subchannels;
short n_subchannels;
} ink_channel_t;
typedef enum
{
INKSET_CMYK = 0,
INKSET_CcMmYK = 1,
INKSET_CcMmYyK = 2,
INKSET_CcMmYKk = 3,
INKSET_QUADTONE = 4,
INKSET_CMYKRB = 5,
INKSET_EXTENDED = 6
} inkset_id_t;
typedef struct
{
const char *name;
const ink_channel_t *const *channels;
short channel_count;
} channel_set_t;
typedef struct
{
const char *name;
const char *text;
inkset_id_t inkset;
const channel_set_t *channel_set;
} escp2_inkname_t;
typedef struct
{
int n_shades;
const double shades[PHYSICAL_CHANNEL_LIMIT];
} shade_t;
typedef shade_t shade_set_t[PHYSICAL_CHANNEL_LIMIT];
typedef struct
{
const char *name;
const char *text;
const escp2_inkname_t *const *inknames;
const paperlist_t *papers;
const paper_adjustment_list_t *paper_adjustments;
const shade_set_t *shades;
short n_inks;
} inklist_t;
typedef struct
{
const char *listname;
const inklist_t *const *inklists;
short n_inklists;
} inkgroup_t;
typedef short escp2_dot_size_t[RES_N];
typedef short escp2_bits_t[RES_N];
typedef short escp2_base_resolutions_t[RES_N];
typedef float escp2_densities_t[RES_N];
#define ROLL_FEED_CUT_ALL (1)
#define ROLL_FEED_CUT_LAST (2)
#define ROLL_FEED_DONT_EJECT (4)
typedef struct
{
const char *name;
const char *text;
short is_cd;
short is_roll_feed;
unsigned roll_feed_cut_flags;
const stp_raw_t init_sequence;
const stp_raw_t deinit_sequence;
} input_slot_t;
typedef struct
{
const input_slot_t *slots;
size_t n_input_slots;
} input_slot_list_t;
typedef struct
{
const char *name;
const char *text;
short min_hres;
short min_vres;
short max_hres;
short max_vres;
short desired_hres;
short desired_vres;
} quality_t;
typedef struct
{
const quality_t *qualities;
size_t n_quals;
} quality_list_t;
typedef enum
{
AUTO_MODE_QUALITY,
AUTO_MODE_MANUAL
} auto_mode_t;
typedef struct
{
const char *name;
const char *text;
short value;
} printer_weave_t;
typedef struct
{
const char *name;
size_t n_printer_weaves;
const printer_weave_t *printer_weaves;
} printer_weave_list_t;
#define MODEL_COMMAND_MASK 0xful
#define MODEL_COMMAND_1998 0x0ul
#define MODEL_COMMAND_1999 0x1ul
#define MODEL_COMMAND_2000 0x2ul
#define MODEL_COMMAND_PRO 0x3ul
#define MODEL_XZEROMARGIN_MASK 0x10ul
#define MODEL_XZEROMARGIN_NO 0x00ul
#define MODEL_XZEROMARGIN_YES 0x10ul
#define MODEL_ROLLFEED_MASK 0x20ul
#define MODEL_ROLLFEED_NO 0x00ul
#define MODEL_ROLLFEED_YES 0x20ul
#define MODEL_VARIABLE_DOT_MASK 0x40ul
#define MODEL_VARIABLE_NO 0x00ul
#define MODEL_VARIABLE_YES 0x40ul
#define MODEL_GRAYMODE_MASK 0x80ul
#define MODEL_GRAYMODE_NO 0x00ul
#define MODEL_GRAYMODE_YES 0x80ul
#define MODEL_VACUUM_MASK 0x100ul
#define MODEL_VACUUM_NO 0x000ul
#define MODEL_VACUUM_YES 0x100ul
#define MODEL_FAST_360_MASK 0x200ul
#define MODEL_FAST_360_NO 0x000ul
#define MODEL_FAST_360_YES 0x200ul
#define MODEL_SEND_ZERO_ADVANCE_MASK 0x400ul
#define MODEL_SEND_ZERO_ADVANCE_NO 0x000ul
#define MODEL_SEND_ZERO_ADVANCE_YES 0x400ul
#define MODEL_SUPPORTS_INK_CHANGE_MASK 0x800ul
#define MODEL_SUPPORTS_INK_CHANGE_NO 0x000ul
#define MODEL_SUPPORTS_INK_CHANGE_YES 0x800ul
#define MODEL_PACKET_MODE_MASK 0x1000ul
#define MODEL_PACKET_MODE_NO 0x0000ul
#define MODEL_PACKET_MODE_YES 0x1000ul
#define MODEL_PRINT_TO_CD_MASK 0x2000ul
#define MODEL_PRINT_TO_CD_NO 0x0000ul
#define MODEL_PRINT_TO_CD_YES 0x2000ul
typedef enum
{
MODEL_COMMAND,
MODEL_XZEROMARGIN,
MODEL_ROLLFEED,
MODEL_VARIABLE_DOT,
MODEL_GRAYMODE,
MODEL_VACUUM,
MODEL_FAST_360,
MODEL_SEND_ZERO_ADVANCE,
MODEL_SUPPORTS_INK_CHANGE,
MODEL_PACKET_MODE,
MODEL_PRINT_TO_CD,
MODEL_LIMIT
} escp2_model_option_t;
typedef struct escp2_printer
{
model_cap_t flags;
short nozzles;
short min_nozzles;
short nozzle_separation;
short black_nozzles;
short min_black_nozzles;
short black_nozzle_separation;
short fast_nozzles;
short min_fast_nozzles;
short fast_nozzle_separation;
short physical_channels;
short base_separation;
short resolution_scale;
short max_black_resolution;
short max_hres;
short max_vres;
short min_hres;
short min_vres;
short extra_feed;
short separation_rows;
short pseudo_separation_rows;
short zero_margin_offset;
short initial_vertical_offset;
short black_initial_vertical_offset;
short extra_720dpi_separation;
int max_paper_width;
int max_paper_height;
int min_paper_width;
int min_paper_height;
short left_margin;
short right_margin;
short top_margin;
short bottom_margin;
short m_left_margin;
short m_right_margin;
short m_top_margin;
short m_bottom_margin;
short roll_left_margin;
short roll_right_margin;
short roll_top_margin;
short roll_bottom_margin;
short m_roll_left_margin;
short m_roll_right_margin;
short m_roll_top_margin;
short m_roll_bottom_margin;
short cd_x_offset;
short cd_y_offset;
short cd_page_width;
short cd_page_height;
short alignment_passes;
short alignment_choices;
short alternate_alignment_passes;
short alternate_alignment_choices;
const short *dot_sizes;
const float *densities;
const escp2_drop_list_t *drops;
const res_t *const *reslist;
const inkgroup_t *inkgroup;
const short *bits;
const short *base_resolutions;
const input_slot_list_t *input_slots;
const quality_list_t *quality_list;
const stp_raw_t *preinit_sequence;
const stp_raw_t *postinit_remote_sequence;
const printer_weave_list_t *const printer_weaves;
} stpi_escp2_printer_t;
extern const stpi_escp2_printer_t stpi_escp2_model_capabilities[];
extern const int stpi_escp2_model_limit;
extern const escp2_drop_list_t stpi_escp2_simple_drops;
extern const escp2_drop_list_t stpi_escp2_spro10000_drops;
extern const escp2_drop_list_t stpi_escp2_variable_1_5pl_drops;
extern const escp2_drop_list_t stpi_escp2_variable_2pl_drops;
extern const escp2_drop_list_t stpi_escp2_variable_3pl_drops;
extern const escp2_drop_list_t stpi_escp2_variable_3pl_pigment_drops;
extern const escp2_drop_list_t stpi_escp2_variable_3pl_pmg_drops;
extern const escp2_drop_list_t stpi_escp2_variable_1440_4pl_drops;
extern const escp2_drop_list_t stpi_escp2_variable_ultrachrome_drops;
extern const escp2_drop_list_t stpi_escp2_variable_2880_4pl_drops;
extern const escp2_drop_list_t stpi_escp2_variable_6pl_drops;
extern const escp2_drop_list_t stpi_escp2_variable_2000p_drops;
extern const escp2_drop_list_t stpi_escp2_variable_x80_6pl_drops;
extern const paperlist_t stpi_escp2_standard_paper_list;
extern const paperlist_t stpi_escp2_durabrite_paper_list;
extern const paperlist_t stpi_escp2_ultrachrome_paper_list;
extern const paper_adjustment_list_t stpi_escp2_standard_paper_adjustment_list;
extern const paper_adjustment_list_t stpi_escp2_durabrite_paper_adjustment_list;
extern const paper_adjustment_list_t stpi_escp2_photo_paper_adjustment_list;
extern const paper_adjustment_list_t stpi_escp2_photo2_paper_adjustment_list;
extern const paper_adjustment_list_t stpi_escp2_photo3_paper_adjustment_list;
extern const paper_adjustment_list_t stpi_escp2_sp960_paper_adjustment_list;
extern const paper_adjustment_list_t stpi_escp2_ultrachrome_photo_paper_adjustment_list;
extern const paper_adjustment_list_t stpi_escp2_ultrachrome_matte_paper_adjustment_list;
extern const res_t *const stpi_escp2_superfine_reslist[];
extern const res_t *const stpi_escp2_no_printer_weave_reslist[];
extern const res_t *const stpi_escp2_pro_reslist[];
extern const res_t *const stpi_escp2_sp5000_reslist[];
extern const res_t *const stpi_escp2_720dpi_reslist[];
extern const res_t *const stpi_escp2_720dpi_soft_reslist[];
extern const res_t *const stpi_escp2_g3_720dpi_reslist[];
extern const res_t *const stpi_escp2_1440dpi_reslist[];
extern const res_t *const stpi_escp2_2880dpi_reslist[];
extern const res_t *const stpi_escp2_2880_1440dpi_reslist[];
extern const res_t *const stpi_escp2_g3_reslist[];
extern const res_t *const stpi_escp2_sc500_reslist[];
extern const res_t *const stpi_escp2_sc640_reslist[];
extern const inkgroup_t stpi_escp2_cmy_inkgroup;
extern const inkgroup_t stpi_escp2_standard_inkgroup;
extern const inkgroup_t stpi_escp2_c80_inkgroup;
extern const inkgroup_t stpi_escp2_c64_inkgroup;
extern const inkgroup_t stpi_escp2_x80_inkgroup;
extern const inkgroup_t stpi_escp2_photo_gen1_inkgroup;
extern const inkgroup_t stpi_escp2_photo_gen2_inkgroup;
extern const inkgroup_t stpi_escp2_photo_gen3_inkgroup;
extern const inkgroup_t stpi_escp2_photo_pigment_inkgroup;
extern const inkgroup_t stpi_escp2_photo7_japan_inkgroup;
extern const inkgroup_t stpi_escp2_ultrachrome_inkgroup;
extern const inkgroup_t stpi_escp2_f360_photo_inkgroup;
extern const inkgroup_t stpi_escp2_f360_photo7_japan_inkgroup;
extern const inkgroup_t stpi_escp2_f360_ultrachrome_inkgroup;
extern const inkgroup_t stpi_escp2_cmykrb_inkgroup;
extern const escp2_inkname_t stpi_escp2_default_black_inkset;
extern const printer_weave_list_t stpi_escp2_standard_printer_weave_list;
extern const printer_weave_list_t stpi_escp2_sp2200_printer_weave_list;
extern const printer_weave_list_t stpi_escp2_pro7000_printer_weave_list;
extern const printer_weave_list_t stpi_escp2_pro7500_printer_weave_list;
extern const printer_weave_list_t stpi_escp2_pro7600_printer_weave_list;
typedef struct
{
int nozzles;
int min_nozzles;
int nozzle_separation;
int *head_offset;
int max_head_offset;
int page_management_units;
int vertical_units;
int horizontal_units;
int micro_units;
int unit_scale;
int send_zero_pass_advance;
int bitwidth;
int drop_size;
int ink_resid;
const escp2_inkname_t *inkname;
int logical_channels;
int physical_channels;
int channels_in_use;
unsigned char **cols;
const physical_subchannel_t **channels;
int use_black_parameters;
int use_fast_360;
int advanced_command_set;
int use_extended_commands;
const input_slot_t *input_slot;
const paper_t *paper_type;
const paper_adjustment_t *paper_adjustment;
const inkgroup_t *ink_group;
const stp_raw_t *init_sequence;
const stp_raw_t *deinit_sequence;
model_featureset_t command_set;
int variable_dots;
int has_vacuum;
int has_graymode;
int base_separation;
int resolution_scale;
int printing_resolution;
int separation_rows;
int pseudo_separation_rows;
int extra_720dpi_separation;
int horizontal_passes;
int physical_xdpi;
const res_t *res;
const printer_weave_t *printer_weave;
int use_printer_weave;
int page_left;
int page_right;
int page_top;
int page_bottom;
int page_width;
int page_height;
int page_true_height;
int cd_x_offset;
int cd_y_offset;
int cd_outer_radius;
int cd_inner_radius;
int image_height;
int image_width;
int image_top;
int image_left;
int image_scaled_width;
int image_printed_width;
int image_scaled_height;
int image_printed_height;
int image_left_position;
int printed_something;
int initial_vertical_offset;
int printing_initial_vertical_offset;
int last_color;
int last_pass_offset;
int last_pass;
} escp2_privdata_t;
extern void stpi_escp2_init_printer(stp_vars_t *v);
extern void stpi_escp2_deinit_printer(stp_vars_t *v);
extern void stpi_escp2_flush_pass(stp_vars_t *v, int passno,
int vertical_subpass);
extern void stpi_escp2_terminate_page(stp_vars_t *v);
#ifdef TEST_UNCOMPRESSED
#define COMPRESSION (0)
#define FILLFUNC stp_fill_uncompressed
#define COMPUTEFUNC stp_compute_uncompressed_linewidth
#define PACKFUNC stp_pack_uncompressed
#else
#define COMPRESSION (1)
#define FILLFUNC stp_fill_tiff
#define COMPUTEFUNC stp_compute_tiff_linewidth
#define PACKFUNC stp_pack_tiff
#endif
#endif