/* Copyright (C) 1998, 1999 Norihito Ohmori.

   Ghostscript printer driver
   for Canon LBP, BJC-680J and BJC-880J printers (LIPS II+/III/IVc/IV)

   This software is distributed in the hope that it will be useful, but
   WITHOUT ANY WARRANTY.  No author or distributor accepts responsibility
   to anyone for the consequences of using it or for whether it serves any
   particular purpose or works at all, unless he says so in writing.  Refer
   to the GNU General Public License for full details.

   Everyone is granted permission to copy, modify and redistribute
   this software, but only under the conditions described in the GNU
   General Public License.  A copy of this license is supposed to have been
   given to you along with this software so you can know your rights and
   responsibilities.  It should be in a file named COPYING.  Among other
   things, the copyright notice and this notice must be preserved on all
   copies.
 */

/*$Id: gdevlips.h,v 1.4 2002/10/12 23:24:34 tillkamppeter Exp $ */
/* Common header file for LIPS driver */

#ifndef gdevlips_h_INCLUDED
#define gdevlips_h_INCLUDED

#define	LIPS_ESC	0x1b
#define	LIPS_FF		0x0c
#define	LIPS_CSI	0x9b	/* LIPS_ESC "[" */
#define	LIPS_DCS	0x90	/* LIPS_ESC "P" */
#define	LIPS_ST		0x9c	/* LIPS_ESC "\\" */
#define LIPS_SP         0x20
#define LIPS_IS1        0x1f
#define LIPS_IS2        0x1e

#define TRUE 1
#define FALSE 0

/* Media Size */
#define LIPS_A3_HEIGHT 1190
#define LIPS_A3_WIDTH  842
#define LIPS_A4_HEIGHT LIPS_A3_WIDTH
#define LIPS_A4_WIDTH  595
#define LIPS_A5_HEIGHT LIPS_A4_WIDTH
#define LIPS_A5_WIDTH  421
#define LIPS_POSTCARD_HEIGHT 419
#define LIPS_POSTCARD_WIDTH 284
#define LIPS_B4_HEIGHT 1032
#define LIPS_B4_WIDTH  729
#define LIPS_B5_HEIGHT LIPS_B4_WIDTH
#define LIPS_B5_WIDTH  516
#define LIPS_B6_HEIGHT LIPS_B5_WIDTH
#define LIPS_B6_WIDTH  363
#define LIPS_LETTER_HEIGHT 792
#define LIPS_LETTER_WIDTH  612
#define LIPS_LEGAL_HEIGHT  1008
#define LIPS_LEGAL_WIDTH  LIPS_LETTER_WIDTH
#define LIPS_LEDGER_HEIGHT 1224
#define LIPS_LEDGER_WIDTH LIPS_LETTER_HEIGHT
#define LIPS_EXECTIVE_HEIGHT 756
#define LIPS_EXECTIVE_WIDTH 522
#define LIPS_ENVYOU4_HEIGHT 666
#define LIPS_ENVYOU4_WIDTH  298

#define LIPS_HEIGHT_MAX LIPS_A3_HEIGHT
#define LIPS_WIDTH_MAX  LIPS_A3_WIDTH
#define LIPS_HEIGHT_MIN LIPS_POSTCARD_HEIGHT
#define LIPS_WIDTH_MIN LIPS_POSTCARD_WIDTH

#define	LIPS_HEIGHT_MAX_720	11905	/* =420mm */
#define	LIPS_WIDTH_MAX_720	8418	/* =294mm */

#define LIPS_MAX_SIZE 51840	/* 72 inch */

#define GS_A4_WIDTH 597
#define GS_A4_HEIGHT 841

#define	MMETER_PER_INCH	25.4

#define A3_SIZE 12
#define A4_SIZE 14
#define A5_SIZE 16
#define POSTCARD_SIZE 18
#define B4_SIZE 24
#define B5_SIZE 26
#define B6_SIZE 28
#define LETTER_SIZE 30
#define LEGAL_SIZE 32
#define LEDGER_SIZE 34
#define EXECUTIVE_SIZE 40
#define ENVYOU4_SIZE 50
#define USER_SIZE 80

#define LANDSCAPE 1

#define LIPS_MANUALFEED_DEFAULT FALSE
#define LIPS_CASSETFEED_DEFAULT 0
/* 0, 1 to 3, 10 to 17 (1 to 3 is not reccomended. It's obsoleted value.) */
/* 0: Auto Feed */
/* 1: MP tray, 2: Lower casset, 3: Upper casset */
/* 10: MP tray, 11: casset 1, 12: casset 2, 13: casset 3, .... */

#define LIPS_TUMBLE_DEFAULT FALSE
#define LIPS_NUP_DEFAULT 1
#define LIPS_PJL_DEFAULT FALSE
#define LIPS_FACEUP_DEFAULT FALSE

/* display text to printer panel */
#define LIPS_USERNAME_MAX 12	/* If your printer have two line display,
                                   this value can change to 14 */
#define LIPS_MEDIACHAR_MAX 32
#define LIPS_USERNAME_DEFAULT "Ghostscript"
#define LIPS_MEDIATYPE_DEFAULT "Default"	/* Dummy */
#define LIPS2P_COMPRESS_DEFAULT FALSE
#define LIPS3_COMPRESS_DEFAULT FALSE
#define LIPS4C_COMPRESS_DEFAULT TRUE
#define LIPS4_COMPRESS_DEFAULT FALSE

#define	LIPS2P_DPI_DEFAULT 240
#define	LIPS2P_LEFT_MARGIN_DEFAULT    (float)(5. / MMETER_PER_INCH)
#define	LIPS2P_BOTTOM_MARGIN_DEFAULT  (float)(5. / MMETER_PER_INCH)
#define	LIPS2P_RIGHT_MARGIN_DEFAULT   (float)(5. / MMETER_PER_INCH)
#define	LIPS2P_TOP_MARGIN_DEFAULT     (float)(5. / MMETER_PER_INCH)

#define	LIPS3_DPI_DEFAULT 300
#define	LIPS3_LEFT_MARGIN_DEFAULT     (float)(5. / MMETER_PER_INCH)
#define	LIPS3_BOTTOM_MARGIN_DEFAULT   (float)(5. / MMETER_PER_INCH)
#define	LIPS3_RIGHT_MARGIN_DEFAULT    (float)(5. / MMETER_PER_INCH)
#define	LIPS3_TOP_MARGIN_DEFAULT      (float)(5. / MMETER_PER_INCH)

#define	BJC880J_DPI_DEFAULT 360
#define	BJC880J_LEFT_MARGIN_DEFAULT   (float)(5. / MMETER_PER_INCH)
#define	BJC880J_BOTTOM_MARGIN_DEFAULT (float)(8. / MMETER_PER_INCH)
#define	BJC880J_RIGHT_MARGIN_DEFAULT  (float)(5. / MMETER_PER_INCH)
#define	BJC880J_TOP_MARGIN_DEFAULT    (float)(2. / MMETER_PER_INCH)

#define	LIPS4_DPI_DEFAULT 600

#define	LIPS4_LEFT_MARGIN_DEFAULT     (float)(5. / MMETER_PER_INCH)
#define	LIPS4_BOTTOM_MARGIN_DEFAULT   (float)(5. / MMETER_PER_INCH)
#define	LIPS4_RIGHT_MARGIN_DEFAULT    (float)(5. / MMETER_PER_INCH)
#define	LIPS4_TOP_MARGIN_DEFAULT      (float)(5. / MMETER_PER_INCH)

/* Define the default resolutions. */

#define LIPS2P_DPI1 80
#define LIPS2P_DPI2 120
#define LIPS2P_DPI_MAX 240
#define LIPS3_DPI_MAX 300
#define BJC880J_DPI_MAX 360
#define LIPS4_DPI_MAX 600
#define	LIPS4_DPI_SUPERFINE 1200
#define LIPS_DPI_MIN 60

#define LIPS2P_STRING "lips2p:"
#define LIPS3_STRING "lips3:"
#define LIPS4_STRING "lips4:"
#define BJC880J_STRING "bjc880j:"
#define L4VMONO_STRING "lips4v:"
#define L4VCOLOR_STRING "lips4vc:"
#define LIPS_VERSION "2.3.6"
/* ``LIPS*_STRING'' + ``VERSION string'' < 17 characters */

#define LIPS_OPTION_MANUALFEED              "ManualFeed"
#define LIPS_OPTION_CASSETFEED              "Casset"
#define LIPS_OPTION_USER_NAME               "UserName"
#define LIPS_OPTION_PJL			    "PJL"

/* LIPS IV Option */
#define LIPS_OPTION_DUPLEX_TUMBLE           "Tumble"
#define LIPS_OPTION_NUP			    "Nup"
#define LIPS_OPTION_TONERDENSITY	    "TonerDensity"
#define LIPS_OPTION_TONERSAVING		    "TonerSaving"
#define LIPS_OPTION_FONTDOWNLOAD	    "FontDL"
#define LIPS_OPTION_FACEUP		    "OutputFaceUp"
#define LIPS_OPTION_MEDIATYPE		    "MediaType"

#define lips_params_common \
    int cassetFeed;                    /* Input Casset */ \
    char Username[LIPS_USERNAME_MAX];  /* Display text on printer panel */\
    bool pjl; \
    int toner_density;\
    bool toner_saving;\
    bool toner_saving_set;\
    int prev_paper_size; \
    int prev_paper_width; \
    int prev_paper_height; \
    int prev_num_copies; \
    int prev_feed_mode

#define lips4_params_common \
    int prev_duplex_mode;\
    int nup;\
    bool faceup;\
    char mediaType[LIPS_MEDIACHAR_MAX]

int lips_media_selection(int width, int height);
int lips_packbits_encode(byte * inBuff, byte * outBuff, int Length);
int lips_mode3format_encode(byte * inBuff, byte * outBuff, int Length);
int lips_rle_encode(byte * inBuff, byte * outBuff, int Length);

#endif
