/*---------------------------------------------------------*
 | Author:  Maurizio Loreti, aka MLO or I3NOO.             |
 | Address: University of Padova - Department of Physics   |
 |          Via F. Marzolo, 8 - 35131 PADOVA - Italy       |
 | Phone:   (39)(49) 844-313         FAX: (39)(49) 844-245 |
 | E-Mail:  LORETI at IPDINFN (BITNET); or VAXFPD::LORETI  |
 |         (DECnet) - VAXFPD is node 38.257 i.e. 39169; or |
 |          LORETI@PADOVA.INFN.IT (INTERNET).              |
 | Home: Via G. Donizetti 6 - 35010 CADONEGHE (PD) - Italy |
 *---------------------------------------------------------*/

/**
 | Printer port constants
**/

#define PORT_NAME       "pf.port"
#define INIT_DELAY      300

/**
 | Constants to be used in printer initialisation
**/

#define PORTRAIT        0               /* Orientation */
#define LANDSCAPE       1
#define ROMAN           0               /* Style */
#define ITALIC          1
#define P10CPI          0               /* Pitch & Spacing */
#define P12CPI          1
#define P16_67CPI       2
#define P20CPI          3
#define P24CPI          4
#define PROPORTIONAL    -1
#define COURIER         3               /* Font */
#define GOTHIC          6
#define TIMES           4101
#define DRAFT_Q         1               /* Quality */
#define LETTER_Q        2

/**
 | Other #define's
**/

#define VERSION         2.10            /* Guess what is this ... */
#define LAST_CHANGE     910625
#define REVISION        33              /* Library revision (Kickstart 1.2) */

#define MAX_FILES       50              /* Maximum number of selected files */
#define DIR_MAX         (DSIZE+1)       /* Directory names size */
#define FIL_MAX         (FCHARS+1)      /* File names size */
#define TOT_MAX         (DSIZE+FCHARS+2)

#define GAD_X           50              /* Left edge (all gadgets) */
#define GAD_Y0          30              /* Top edge (upper gadget) */
#define GAD_DY          20              /* Delta Y between gadgets */

#define LINE_LENGTH     256             /* Input line buffer length */

#define OUTPUT_LENGTH   80              /* Various parameters for the 2-page */
#define SIDE_LENGTH     3               /*   mode: output text length, width */
#define SEP_LENGTH      5               /*     of the  blank borders,  space */
#define PAGE_LENGTH     55              /*       between pages on sheet, ... */

#define TOTAL_LENGTH    (OUTPUT_LENGTH + 2 * SIDE_LENGTH)
#define BUFFER_SIZE     (OUTPUT_LENGTH * PAGE_LENGTH)

#define ESC             '\x1B'          /* Special characters */
#define FORM_FEED       '\x0C'
#define H_LINE          '\xC4'          /* Semigraphic characters (PC-8) */
#define V_LINE          '\xB3'
#define NE              '\xBF'
#define SE              '\xD9'
#define SW              '\xC0'
#define NW              '\xDA'

#define UP              1               /* Internal flags */
#define DOWN            2

#define SINGLE_PAGE     1
#define LEFT_PAGE       2
#define RIGHT_PAGE      3

#define BLUE_PEN        0               /* Workbench defaults */
#define WHITE_PEN       1
#define BLACK_PEN       2
#define RED_PEN         3

/**
 | Structures
**/

typedef struct sPageBuffer {            /* Page buffer pointers (2-p mode) */
  char *line[PAGE_LENGTH];
} PageBuffer;

typedef union uPrinterIO {              /* Exec I/O structure (printer) */
  struct IOStdReq ios;
  struct IODRPReq iod;
  struct IOPrtCmdReq iop;
} PrintIO;

/**
 | ANSI prototypes
**/

int     Ask(char *pTitle, int nText, char *Text[]);
Boolean CheckBreak(void);
void    CheckDefaults(void);
void    Cleanup(int code);
void    ClearPageBuffer(void);
void    ClearThisPage(void);
void    Detab(char *buffer, int length);
void    DoOutput(char *FileName);
void    DoubleLine(char *left, char *right);
void    EjectPage(void);
void    ErrMes(char *mForm, ...);
void    ExitProgram(void);
void    FlushBuffers(void);
void    Header(int type);
void    InitPrinter(void);
void    InterLine(void);
void   *LibOpen(char *Name, long Rev);
void    OutLine(void);
void    ResetPrinter(void);
void    SendBuffer(char *buffer);
void    SendToPrinter(char *fmt, ...);
void    SetSpecialMode(void);
char  **Setup(int *pArgc, char **argv);
void    SetupWB(void);
void    Syntax(void);
void    windowOff(void);
