123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401 |
- /* Copyright (C) 1998 Aladdin Enterprises. All rights reserved.
-
- This file is part of AFPL Ghostscript.
-
- AFPL Ghostscript is distributed with NO WARRANTY OF ANY KIND. No author or
- distributor accepts any responsibility for the consequences of using it, or
- for whether it serves any particular purpose or works at all, unless he or
- she says so in writing. Refer to the Aladdin Free Public License (the
- "License") for full details.
-
- Every copy of AFPL Ghostscript must include a copy of the License, normally
- in a plain ASCII text file named PUBLIC. The License grants you the right
- to copy, modify and redistribute AFPL Ghostscript, but only under certain
- conditions described in the License. Among other things, the License
- requires that the copyright notice and this notice be preserved on all
- copies.
- */
- /*$Id: gdevbjcl.h,v 1.2 2000/09/19 19:00:11 lpd Exp $*/
- /* Canon BJC command generation library interface */
- /****** PRELIMINARY, SUBJECT TO CHANGE WITHOUT NOTICE. ******/
- #ifndef gdevcbjc_INCLUDED
- # define gdevcbjc_INCLUDED
- #include <stdio.h> /* ****** PATCH FOR stream.h ****** */
- #include "stream.h"
- /*
- * These procedures generate command strings for the Canon BJC family of
- * printers. Note that not all printers support all commands.
- */
- /* ---------------- Printer capabilities ---------------- */
- /*
- * Different printer models implement different subsets of the command set.
- * We define a mask bit for each capability, and a mask for each printer
- * indicating which capabilities it supports. In some cases, a capability
- * is a parameter value for a command rather than a separate command.
- */
- /*
- * Single-character commands.
- *
- * All BJC models implement CR and FF.
- */
- #define BJC_OPT_NUL 0x00000001
- #define BJC_OPT_LF 0x00000002
- /*
- * Session commands.
- *
- * All BJC models implement Set initial condition, Initialize,
- * Print method, and Media Supply.
- */
- #define BJC_OPT_IDENTIFY_CARTRIDGE 0x00000004
- #define BJC_OPT_MONOCHROME_SMOOTHING 0x00000008 /* for bjc_print_color_t */
- /*
- * Page commands.
- *
- * All BJC models implement Page margins.
- */
- #define BJC_OPT_EXTENDED_MARGINS 0x00000010
- #define BJC_OPT_PAGE_ID 0x00000020
- /*
- * Resolution. This varies considerably from model to model.
- * The _300 or _360 option gives the base resolution; the other options
- * indicate which multiples of the base are available.
- * Note that the resolution multipliers are specified as X, then Y.
- */
- #define BJC_OPT_RESOLUTION_360 0x00000040
- #define BJC_OPT_RESOLUTION_300 0x00000080
- #define BJC_OPT_RESOLUTION_HALF 0x00000100 /* 180 or 150 */
- #define BJC_OPT_RESOLUTION_QUARTER 0x00000200 /* 90 or 75 */
- #define BJC_OPT_RESOLUTION_2X 0x00000400 /* 720 or 600 */
- #define BJC_OPT_RESOLUTION_2X_1X 0x00000800
- #define BJC_OPT_RESOLUTION_4X_2X 0x00001000
- /*
- * Image commands.
- *
- * All BJC models implement Raster resolution, Raster skip, CMYK image,
- * and Data compression.
- */
- #define BJC_OPT_X_Y_RESOLUTION 0x00002000 /* for raster_resolution */
- #define BJC_OPT_MOVE_LINES 0x00004000
- #define BJC_OPT_IMAGE_FORMAT 0x00008000
- #define BJC_OPT_CONTINUE_IMAGE 0x00010000
- #define BJC_OPT_INDEXED_IMAGE 0x00020000
- #define BJC_OPT_SET_COLOR_COMPONENT 0x00040000
- /*
- * Define the capabilities of the models that we know about.
- */
- /*
- * We don't have the documentation for the 50, but Canon says it's the
- * same as the 80.
- */
- #define BJC_OPT_50\
- (BJC_OPT_NUL | BJC_OPT_LF |\
- BJC_OPT_IDENTIFY_CARTRIDGE |\
- BJC_OPT_EXTENDED_MARGINS | BJC_OPT_PAGE_ID |\
- BJC_OPT_RESOLUTION_360 | BJC_OPT_RESOLUTION_HALF |\
- BJC_OPT_RESOLUTION_QUARTER | BJC_OPT_RESOLUTION_2X_1X |\
- BJC_OPT_X_Y_RESOLUTION | BJC_OPT_MOVE_LINES | BJC_OPT_IMAGE_FORMAT |\
- BJC_OPT_CONTINUE_IMAGE)
- #define BJC_OPT_70\
- (BJC_OPT_LF |\
- BJC_OPT_IDENTIFY_CARTRIDGE | BJC_OPT_MONOCHROME_SMOOTHING |\
- BJC_OPT_RESOLUTION_360)
- #define BJC_OPT_80\
- BJC_OPT_50
- #define BJC_OPT_210\
- (BJC_OPT_IDENTIFY_CARTRIDGE | BJC_OPT_MONOCHROME_SMOOTHING |\
- BJC_OPT_EXTENDED_MARGINS |\
- BJC_OPT_RESOLUTION_360 |\
- BJC_OPT_X_Y_RESOLUTION | BJC_OPT_MOVE_LINES | BJC_OPT_CONTINUE_IMAGE)
- #define BJC_OPT_250\
- (BJC_OPT_LF |\
- BJC_OPT_IDENTIFY_CARTRIDGE | BJC_OPT_MONOCHROME_SMOOTHING |\
- BJC_OPT_EXTENDED_MARGINS | BJC_OPT_PAGE_ID |\
- BJC_OPT_RESOLUTION_360 | BJC_OPT_RESOLUTION_HALF |\
- BJC_OPT_RESOLUTION_QUARTER | BJC_OPT_RESOLUTION_2X_1X |\
- BJC_OPT_X_Y_RESOLUTION | BJC_OPT_MOVE_LINES | BJC_OPT_IMAGE_FORMAT |\
- BJC_OPT_CONTINUE_IMAGE)
- #define BJC_OPT_610\
- (BJC_OPT_LF |\
- BJC_OPT_RESOLUTION_360)
- #define BJC_OPT_620\
- BJC_OPT_610
- #define BJC_OPT_4000\
- (BJC_OPT_LF |\
- BJC_OPT_IDENTIFY_CARTRIDGE | BJC_OPT_MONOCHROME_SMOOTHING |\
- BJC_OPT_RESOLUTION_360 | BJC_OPT_RESOLUTION_HALF |\
- BJC_OPT_RESOLUTION_QUARTER)
- #define BJC_OPT_4100\
- (BJC_OPT_IDENTIFY_CARTRIDGE |\
- BJC_OPT_EXTENDED_MARGINS |\
- BJC_OPT_RESOLUTION_360 |\
- BJC_OPT_MOVE_LINES | BJC_OPT_CONTINUE_IMAGE)
- #define BJC_OPT_4200\
- (BJC_OPT_LF |\
- BJC_OPT_IDENTIFY_CARTRIDGE |\
- BJC_OPT_EXTENDED_MARGINS | BJC_OPT_PAGE_ID |\
- BJC_OPT_RESOLUTION_360 |\
- BJC_OPT_MOVE_LINES | BJC_OPT_IMAGE_FORMAT | BJC_OPT_CONTINUE_IMAGE)
- #define BJC_OPT_4300\
- BJC_OPT_250
- #define BJC_OPT_4550\
- BJC_OPT_250
- #define BJC_OPT_4650\
- BJC_OPT_250
- #define BJC_OPT_5500\
- (BJC_OPT_IDENTIFY_CARTRIDGE | BJC_OPT_MONOCHROME_SMOOTHING |\
- BJC_OPT_EXTENDED_MARGINS |\
- BJC_OPT_RESOLUTION_360 |\
- BJC_OPT_MOVE_LINES | BJC_OPT_CONTINUE_IMAGE)
- /* The 7000 is not well documented. The following is a semi-guess. */
- #define BJC_OPT_7000\
- (BJC_OPT_NUL | BJC_OPT_LF |\
- BJC_OPT_IDENTIFY_CARTRIDGE |\
- BJC_OPT_EXTENDED_MARGINS | BJC_OPT_PAGE_ID |\
- BJC_OPT_RESOLUTION_300 | BJC_OPT_RESOLUTION_2X_1X |\
- BJC_OPT_RESOLUTION_4X_2X |\
- BJC_OPT_MOVE_LINES | BJC_OPT_IMAGE_FORMAT | BJC_OPT_CONTINUE_IMAGE |\
- BJC_OPT_INDEXED_IMAGE | BJC_OPT_SET_COLOR_COMPONENT)
- /*
- * Enumerate the options for all the printer models we know about.
- * m(x, y) will normally be {x, y}, to generate a table.
- */
- #define BJC_ENUMERATE_OPTIONS(m)\
- m(50, BJC_OPT_50)\
- m(70, BJC_OPT_70)\
- m(80, BJC_OPT_80)\
- m(210, BJC_OPT_210)\
- m(250, BJC_OPT_250)\
- m(610, BJC_OPT_610)\
- m(620, BJC_OPT_620)\
- m(4000, BJC_OPT_4000)\
- m(4100, BJC_OPT_4100)\
- m(4200, BJC_OPT_4200)\
- m(4300, BJC_OPT_4300)\
- m(4550, BJC_OPT_4550)\
- m(4650, BJC_OPT_4650)\
- m(5500, BJC_OPT_5500)\
- m(7000, BJC_OPT_7000)
- /* ---------------- Command generation ---------------- */
- /*
- * Single-character commands.
- */
- /* Carriage return (^M) */
- void bjc_put_CR(P1(stream *s));
- /* Form feed (^L) */
- void bjc_put_FF(P1(stream *s));
- /* Line feed (^J) */
- void bjc_put_LF(P1(stream *s));
- /*
- * Session commands.
- */
- /* Set initial condition */
- void bjc_put_initial_condition(P1(stream *s));
- /* Return to initial condition */
- void bjc_put_initialize(P1(stream *s));
- /* Select print method */
- /****** DIFFERENT FOR 7000 ******/
- typedef enum {
- BJC_PRINT_COLOR_COLOR = 0x0,
- BJC_PRINT_COLOR_MONOCHROME = 0x1,
- BJC_PRINT_COLOR_MONOCHROME_WITH_SMOOTHING = 0x2 /* option */
- } bjc_print_color_t;
- typedef enum {
- BJC_PRINT_MEDIA_PLAIN_PAPER = 0x0,
- BJC_PRINT_MEDIA_COATED_PAPER = 0x1,
- BJC_PRINT_MEDIA_TRANSPARENCY_FILM = 0x2,
- BJC_PRINT_MEDIA_BACK_PRINT_FILM = 0x3,
- BJC_PRINT_MEDIA_TEXTILE_SHEET = 0x4,
- BJC_PRINT_MEDIA_GLOSSY_PAPER = 0x5,
- BJC_PRINT_MEDIA_HIGH_GLOSS_FILM = 0x6,
- BJC_PRINT_MEDIA_HIGH_RESOLUTION_PAPER = 0x7 /* BJC-80 only */
- } bjc_print_media_t;
- typedef enum {
- BJC_PRINT_QUALITY_NORMAL = 0x0,
- BJC_PRINT_QUALITY_HIGH = 0x1,
- BJC_PRINT_QUALITY_DRAFT = 0x2,
- BJC_PRINT_QUALITY_COLOR_NON_BLEED = 0x8 /* not 6x0 */
- } bjc_print_quality_t;
- typedef enum {
- /* 6x0 only */
- BJC_BLACK_DENSITY_NORMAL = 0x0,
- BJC_BLACK_DENSITY_HIGH = 0x1
- } bjc_black_density_t;
- void bjc_put_print_method(P5(stream *s, bjc_print_color_t color,
- bjc_print_media_t media,
- bjc_print_quality_t quality,
- bjc_black_density_t density));
- typedef enum {
- /* 70, 4000, 4550, 4650 */
- BJC_70_PRINT_COLOR_SHORT_FINE = 0x0, /* also 0x1, 0x2 */
- BJC_70_PRINT_COLOR_SHORT_HQ = 0x3,
- BJC_70_PRINT_COLOR_SHORT_ECO = 0x4,
- /* 80, 250, 4200, 4300 */
- BJC_80_PRINT_COLOR_SHORT_STD = 0x0,
- BJC_80_PRINT_COLOR_SHORT_STD_SPECIALTY = 0x1,
- BJC_80_PRINT_COLOR_SHORT_HQ_SPECIALTY = 0x2,
- BJC_80_PRINT_COLOR_SHORT_HQ = 0x3,
- BJC_80_PRINT_COLOR_SHORT_HIGH_SPEED = 0x4,
- /* 210, 4100 */
- BJC_210_PRINT_COLOR_SHORT_HQ = 0x0, /* also 0x1 */
- BJC_210_PRINT_COLOR_SHORT_FINE = 0x2, /* also 0x3 */
- BJC_210_PRINT_COLOR_SHORT_HIGH_SPEED = 0x4,
- /* 5500 */
- BJC_5500_PRINT_COLOR_SHORT_COATED = 0x0,
- BJC_5500_PRINT_COLOR_SHORT_TRANSPARENCY = 0x1,
- BJC_5500_PRINT_COLOR_SHORT_PLAIN = 0x2,
- BJC_5500_PRINT_COLOR_SHORT_HQ_NON_BLEED = 0x3,
- BJC_5500_PRINT_COLOR_SHORT_HIGH_SPEED = 0x4
- } bjc_print_color_short_t;
- void bjc_put_print_method_short(P2(stream *s, bjc_print_color_short_t color));
- /* Set media supply method */
- /****** DIFFERENT FOR 7000 ******/
- typedef enum {
- /* 70, 210, 250, 6x0, 4100 */
- BJC_70_MEDIA_SUPPLY_MANUAL_1 = 0x0,
- BJC_70_MEDIA_SUPPLY_MANUAL_2 = 0x1,
- BJC_70_MEDIA_SUPPLY_ASF = 0x4,
- /* 250, 4000, 4300, 4650, 5500 */
- BJC_250_MEDIA_SUPPLY_CONTINUOUS_FORM = 0x2,
- BJC_250_MEDIA_SUPPLY_ASF_BIN_2 = 0x5,
- /* 250, 4650, 5500 */
- BJC_250_MEDIA_SUPPLY_AUTO_SWITCH = 0xf,
- /* 4000, 4300, 4650 */
- BJC_4000_MEDIA_SUPPLY_CASSETTE = 0x8,
- /* 80 */
- BJC_80_MEDIA_SUPPLY_ASF_OFFLINE = 0x0,
- BJC_80_MEDIA_SUPPLY_ASF_ONLINE = 0x1 /* also 0x4 */
- } bjc_media_supply_t;
- typedef enum {
- BJC_MEDIA_TYPE_PLAIN_PAPER = 0x0,
- BJC_MEDIA_TYPE_COATED_PAPER = 0x1,
- BJC_MEDIA_TYPE_TRANSPARENCY_FILM = 0x2,
- BJC_MEDIA_TYPE_BACK_PRINT_FILM = 0x3,
- BJC_MEDIA_TYPE_PAPER_WITH_LEAD = 0x4,
- BJC_MEDIA_TYPE_TEXTILE_SHEET = 0x5,
- BJC_MEDIA_TYPE_GLOSSY_PAPER = 0x6,
- BJC_MEDIA_TYPE_HIGH_GLOSS_FILM = 0x7,
- BJC_MEDIA_TYPE_ENVELOPE = 0x8,
- BJC_MEDIA_TYPE_CARD = 0x9,
- BJC_MEDIA_TYPE_HIGH_RESOLUTION_6X0 = 0xa, /* 6x0 only */
- BJC_MEDIA_TYPE_HIGH_RESOLUTION = 0xb, /* 720x720, other models */
- BJC_MEDIA_TYPE_FULL_BLEED = 0xc,
- BJC_MEDIA_TYPE_BANNER = 0xd
- } bjc_media_type_t;
- void bjc_put_media_supply(P3(stream *s, bjc_media_supply_t supply,
- bjc_media_type_t type));
- /* Identify ink cartridge */
- typedef enum {
- BJC_IDENTIFY_CARTRIDGE_PREPARE = 0x0,
- BJC_IDENTIFY_CARTRIDGE_REQUEST = 0x1
- } bjc_identify_cartridge_command_t;
- void bjc_put_identify_cartridge(P2(stream *s,
- bjc_identify_cartridge_command_t command));
- /*
- * Page commands.
- */
- /* Set page margins */
- /* Left margin is 1-origin; margins are both from left edge; indent <= 8 */
- void bjc_put_page_margins(P5(stream *s, int length10ths, int lm10ths,
- int rm10ths, int indent60ths));
- /* Set extended margins */
- /* All values are 0-origin; margins are both from left edge; indent <= 8 */
- void bjc_put_extended_margins(P5(stream *s, int length60ths, int lm60ths,
- int rm60ths, int indent60ths));
- /* Page ID */
- /* 0 <= id <= 127 */
- void bjc_put_page_id(P2(stream *s, int id));
- /*
- * Image commands.
- */
- /* Set raster compression */
- typedef enum {
- BJC_RASTER_COMPRESSION_NONE = 0x0,
- BJC_RASTER_COMPRESSION_PACKBITS = 0x1
- } bjc_raster_compression_t;
- void bjc_put_compression(P2(stream *s, bjc_raster_compression_t compression));
- /* Set raster resolution */
- void bjc_put_raster_resolution(P3(stream *s, int x_resolution,
- int y_resolution));
- /* Raster skip */
- /* Maximum skip on 6x0 and 4000 is 0x17ff */
- void bjc_put_raster_skip(P2(stream *s, int skip));
- /* CMYK raster image */
- typedef enum {
- BJC_CMYK_IMAGE_CYAN = 'C',
- BJC_CMYK_IMAGE_MAGENTA = 'M',
- BJC_CMYK_IMAGE_YELLOW = 'Y',
- BJC_CMYK_IMAGE_BLACK = 'K',
- } bjc_cmyk_image_component_t;
- void bjc_put_cmyk_image(P4(stream *s, bjc_cmyk_image_component_t component,
- const byte *data, int count));
- /* Move by raster lines */
- /* Distance must be a multiple of the raster resolution */
- void bjc_put_move_lines(P2(stream *s, int lines));
- /* Set unit for movement by raster lines */
- /* unit = 360 for printers other than 7000 */
- /* unit = 300 or 600 for 7000 */
- void bjc_put_move_lines_unit(P2(stream *s, int unit));
- /* Set image format */
- /* depth is 1 or 2 */
- /****** DIFFERENT FOR 7000 ******/
- typedef enum {
- BJC_IMAGE_FORMAT_REGULAR = 0x00,
- BJC_IMAGE_FORMAT_INDEXED = 0x80
- } bjc_image_format_t;
- typedef enum {
- BJC_INK_SYSTEM_REGULAR = 0x01,
- BJC_INK_SYSTEM_PHOTO = 0x02,
- BJC_INK_SYSTEM_REGULAR_DVM = 0x09, /* drop volume modulation */
- BJC_INK_SYSTEM_PHOTO_DVM = 0x0a /* drop volume modulation */
- } bjc_ink_system_t;
- void bjc_put_image_format(P4(stream *s, int depth,
- bjc_image_format_t format,
- bjc_ink_system_t ink));
- /* 4550 only */
- void bjc_put_photo_image(P2(stream *s, bool photo));
- /* Continue raster image */
- void bjc_put_continue_image(P3(stream *s, const byte *data, int count));
- /* BJ indexed image */
- void bjc_put_indexed_image(P4(stream *s, int dot_rows, int dot_cols,
- int layers));
- #endif /* gdevcbjc_INCLUDED */
|