summaryrefslogtreecommitdiff
path: root/dviware/dviljk/dvi2xx.h
diff options
context:
space:
mode:
Diffstat (limited to 'dviware/dviljk/dvi2xx.h')
-rw-r--r--dviware/dviljk/dvi2xx.h723
1 files changed, 723 insertions, 0 deletions
diff --git a/dviware/dviljk/dvi2xx.h b/dviware/dviljk/dvi2xx.h
new file mode 100644
index 0000000000..0a06d43ceb
--- /dev/null
+++ b/dviware/dviljk/dvi2xx.h
@@ -0,0 +1,723 @@
+/* $Id: dvi2xx.h,v 2.3 1996/05/20 11:05:57 neumann Exp $ */
+#ifndef DVI2XX_H
+#define DVI2XX_H
+/**********************************************************************
+ ************************ Global Definitions ************************
+ **********************************************************************/
+/* #define IBM3812 */
+/* #define LJ */
+/* #define DRAWGLYPH */
+
+#ifdef KPATHSEA
+#include <kpathsea/config.h>
+#include <kpathsea/c-std.h>
+#include <kpathsea/c-limits.h>
+#include <kpathsea/c-pathch.h>
+#include <kpathsea/magstep.h>
+#include <kpathsea/proginit.h>
+#include <kpathsea/progname.h>
+#include <kpathsea/tex-file.h>
+#include <kpathsea/tex-glyph.h>
+#include <kpathsea/tex-hush.h>
+#include <kpathsea/tex-make.h>
+#include <kpathsea/version.h>
+#include <stdarg.h>
+#include <c-auto.h>
+#else
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#ifdef unix
+#include <limits.h>
+#endif
+#endif
+
+#include <signal.h>
+#include <ctype.h>
+#ifdef vms
+#include <file.h>
+#else
+# ifndef __riscos
+# include <fcntl.h>
+# endif
+#endif
+#ifdef MSC5
+#include <dos.h> /* only for binaryopen on device */
+#endif
+
+
+#include "config.h"
+#include "commands.h"
+
+#define DVIFORMAT 2
+#ifndef UNKNOWN
+#define UNKNOWN -1
+#endif
+#define FIRSTFNTCHAR 0
+
+#ifdef __riscos
+# ifdef RISC_USE_OSL
+# define MAXOPEN_OS 16
+# else
+# define MAXOPEN_OS 8 /* don't know if this IS the maximum */
+# endif
+#else
+# ifdef OPEN_MAX /* ... in a friendly unix system */
+# ifndef vms
+# define MAXOPEN_OS (OPEN_MAX - 8)
+# else
+# define MAXOPEN_OS 12 /* OPEN_MAX seems to be 8 on VMS systems */
+# endif
+# else
+# ifdef __DJGPP__
+# if __DJGPP_MINOR__ <= 1
+ /* DJGPP needs few handles free in the first 20, or else child programs
+ (called by MakeTeX... scripts) won't run, since the stub loader
+ cannot open the .exe program. This is because DOS only copies the
+ first 20 handles to the child program. */
+# define MAXOPEN_OS 5
+# else
+ /* DJGPP v2.02 and later works around this. Assume they have at least
+ FILES=30 in their CONFIG.SYS (everybody should). */
+# define MAXOPEN_OS 20
+# endif
+# else
+# define MAXOPEN_OS 12 /* limit on number of open font files */
+# endif
+# endif
+#endif
+
+#ifdef LJ_RESIDENT_FONTS
+/* we have to read tfm files as well */
+#define MAXOPEN (MAXOPEN_OS - 1)
+#else
+#define MAXOPEN MAXOPEN_OS
+#endif
+
+#define NFNTCHARS LASTFNTCHAR+1
+#define STACK_SIZE 100 /* DVI-stack size */
+#define NONEXISTANT -1 /* offset for PXL files not found */
+#ifdef RISC_USE_OSL
+# define NO_FILE (FPNULL-1)
+#else
+# define NO_FILE ((FILE *)-1)
+#endif
+#define NEW(A) ((A *) malloc(sizeof(A)))
+#define EQ(a,b) (strcmp(a,b)==0)
+#define MM_TO_PXL(x) (int)(((x)*RESOLUTION*10)/254)
+#define PT_TO_PXL(x) (int)((long4)((x)*RESOLUTION*100l)/7224)
+#define PT_TO_DVI(x) (long4)((x)*65536l)
+#define BINOPEN(f) BOPENCMD(f,READ_BINARY)
+/* SMALL_SIZE characters are loaded into font storage of the printer */
+/* LARGE_SIZE characters are rastered */
+/* HUGE_SIZE characters are not loaded into the memory of the host */
+#define SMALL_SIZE (unsigned char) 0
+#define LARGE_SIZE (unsigned char) 1
+#define HUGE_SIZE (unsigned char) 2
+#define HUGE_CHAR_PATTERN 32767l
+#define BYTES_PER_PIXEL_LINE 500 /* max number of bytes per pixel line */
+#define MAX_SPECIAL_DEFPOINTS 80 /* max number of defpoint specials */
+
+
+#define PK_POST 245
+#define PK_PRE 247
+#define PK_ID 89
+
+/* to speedup the program a little: redefinition of PixRound and PutWord */
+/*#define PIXROUND(x,c) ((((double)x+(double)(c>>1))/(double)c)+0.5)*/
+#define PIXROUND(x,c) (((x)+c)/c)
+#define PUTWORD(w) EMITC( ((unsigned char)(w>>8) & 0xff)), EMITC((unsigned char)(w & 0xff))
+/*************************************************************************/
+#ifdef RISC_BUFFER
+# define EMIT emsize = sprintf
+# define EMFLUSH b_wrtmult(outfp,embuf,emsize)
+# define EMTO embuf
+# define EMIT1(a) emsize = sprintf(embuf,a), EMFLUSH
+# define EMIT2(a,b) emsize = sprintf(embuf,a,b), EMFLUSH
+# define EMIT3(a,b,c) emsize = sprintf(embuf,a,b,c), EMFLUSH
+# define EMIT4(a,b,c,d) emsize = sprintf(embuf,a,b,c,d), EMFLUSH
+#else
+# ifdef RISC_USE_OSL
+# define EMIT emsize = sprintf
+# define EMFLUSH write_multi(embuf,1,emsize,outfp)
+# define EMTO embuf
+# define EMIT1(a) emsize = sprintf(embuf,a), EMFLUSH
+# define EMIT2(a,b) emsize = sprintf(embuf,a,b), EMFLUSH
+# define EMIT3(a,b,c) emsize = sprintf(embuf,a,b,c), EMFLUSH
+# define EMIT4(a,b,c,d) emsize = sprintf(embuf,a,b,c,d), EMFLUSH
+# else
+# define EMIT fprintf /* output a formatted string */
+# define EMTO outfp
+# define EMIT1(a) fprintf(outfp,a)
+# define EMIT2(a,b) fprintf(outfp,a,b)
+# define EMIT3(a,b,c) fprintf(outfp,a,b,c)
+# define EMIT4(a,b,c,d) fprintf(outfp,a,b,c,d)
+# endif
+#endif
+#ifndef vms
+# ifdef RISC_BUFFER
+# define EMITB(len,b) b_wrtmult(outfp,b,len) /* output binary data of len*/
+# else
+# define EMITB(len,b) write_multi(b,1,len,outfp)
+# endif
+#else
+ /* VMS doesn't like to use fwrite on a file with fixed record sizes,
+ so use number of putc calls */
+# define EMITB(len,b) for (kk = 0;kk < len; kk++) fputc(*(b+kk),outfp);
+#endif
+#define EMITWORD(w) PUTWORD((w)) /* output a 2 byte word of data */
+
+#define MoveOver(b) h += (long4) b
+#define MoveDown(a) v += (long4) a
+#define qfprintf if (!G_quiet) fprintf
+#define qprintf if (!G_quiet) printf
+#define LARGER(a,b) (((a)>(b)) ? (a) : (b))
+
+#ifdef IBM3812
+#define PRINTER "IBM 3812 pageprinter"
+#define EMITC(c) PMPoutC(c) /* output a single character */
+#define PMPcont(l) PMPout(-1,(char *)l) /* next l bytes continuous */
+#define PMPflush PMPout(0l,"") /* flush PMP-buffer */
+#define EMITL(l,d) PMPout((int)l,d) /* EMIT-logical: via PMP-buffer */
+#define hconvRESOLUTION 240
+#define vconvRESOLUTION 240
+#define CHAR_WIDTH_LARGE 100 /* limit for loading into printer font */
+#define CHAR_HEIGTH_LARGE 127 /* limit for loading into printer font */
+#define OUTBUFSIZE 20000 /* size of output buffer for PMP cmds */
+ /* has to be less max(signed int) */
+#define MAXFONTSTORAGE 130000l /* font storage in the 3812 pageprinter */
+#define EMITFILE_EXTENSION ".pmp" /* default extension of emit file */
+#define XDEFAULTOFF ((int)(0.72*RESOLUTION))/* default x and y offset */
+#define YDEFAULTOFF RESOLUTION
+#define CHARSTRINGMAX 80 /* bufferlength for SetString */
+#define MAX_PAGE_WIDTH 2040
+#define MAX_PAGE_HEIGHT 3360
+/**********************************************************************/
+/************** Positioning for the 3812 ****************************/
+/**********************************************************************/
+#define VERT_HALF(n) ((short)((n+1)>>1)-1)
+#define HOR_HALF(n) ((short)(n>>1))
+#define MoveHor(n) if ((n)!=0) { PMPcont(3); PMPout(1,"\342"); EMITWORD((n)); }
+#define MoveVert(n) if ((n)!=0) { PMPcont(3); PMPout(1,"\343"); EMITWORD((n)); }
+#endif /* IBM 3812 */
+
+#ifdef LJ
+# ifdef LJ4
+# ifdef LJ4L
+# define PRINTER "HP Laserjet 4L"
+# else
+# define PRINTER "HP Laserjet 4"
+# endif
+# else
+# ifdef LJ2P
+# define PRINTER "HP LaserJet IIP"
+# else
+# ifdef LJ2
+# define PRINTER "HP LaserJet 2"
+# else
+# define PRINTER "HP LaserJet"
+# endif
+# endif
+# endif
+
+# ifdef LJ4
+# ifdef LJ4L
+int RESOLUTION = 300;
+const char *MFMODE = MFMODE300;
+# else
+int RESOLUTION = 600;
+const char *MFMODE = MFMODE600;
+# endif
+# else
+# define RESOLUTION 300
+# endif
+# define hconvRESOLUTION RESOLUTION
+# define vconvRESOLUTION RESOLUTION
+# ifdef LJ2
+/* the printer limit of the LJ2P is actually 16384x16384,
+ * but to exploit it, one would need lots of memory in the printer
+ */
+# define CHAR_WIDTH_LARGE 200 /* limit for loading into printer font */
+# define CHAR_HEIGTH_LARGE 255 /* y_offset reaches the same size! */
+# else /* such as LaserJet+, Laserjet II */
+# define CHAR_WIDTH_LARGE 100 /* limit for loading into printer font */
+# define CHAR_HEIGTH_LARGE 127 /* y_offset reaches the same size! */
+# endif
+# define EMITFILE_EXTENSION ".lj" /* default extension of emit file */
+# ifndef MAX_FONTS_PER_PAGE
+# define MAX_FONTS_PER_PAGE 16 /* maximum number of fonts per page */
+# endif
+# define HANDLE_MAX_FONTS 255 /* max nr of fonts handled (rasterfont) */
+# define FONTS_DOWNLOADABLE 32 /* max nr of fonts that can be downloaded */
+# ifdef SHARP_JX_9500
+# define MAXFONTSTORAGE (200l*1024l) /* standard user memory */
+# else
+# define MAXFONTSTORAGE (395l*1024l) /* standard user memory */
+# endif
+# ifdef RISC_BUFFER
+# define EMITC(c) b_write(outfp,c) /* output a single character */
+# else
+# define EMITC(c) write_byte(outfp,c) /* output a single character */
+# endif
+# define EMITL(l,d) EMITB(l,d) /* EMIT-logical = EMITB */
+
+# define XDEFAULTOFF ((int)(0.72*RESOLUTION))
+# define YDEFAULTOFF RESOLUTION
+#ifdef NEVER
+# define XDEFAULTOFF RESOLUTION /*x default offset on page 1in (LJ2)*/
+# define YDEFAULTOFF RESOLUTION /* y default offset on page 1inch */
+#endif
+# ifndef vms
+# define INT_ASCII(b,i) \
+ if (i == 0) b[0] = '\0'; else sprintf((char *)b,"%hd",i)
+# else
+# define INT_ASCII(b,i) \
+ if (i == 0) b[0] = '\0'; else sprintf((char *)b,"%d",i)
+# endif
+#endif
+
+
+#ifndef SEVENBIT
+#define VisChar(c) (unsigned char)(c)
+#endif
+
+/* Used to be a function. buf is always an array, never a pointer.
+ Without that invariant, we would have to introduce full dynamic
+ memory management in this driver -- probably it would be easier to
+ write a new one. [27 Jun 07 -js] */
+#define GetBytes(fp,buf,n) \
+ ( sizeof(buf) != sizeof(void *) && sizeof(buf) > n ? \
+ (void)read_multi(buf, 1, n, fp) \
+ : Fatal("Try to read %d bytes in an array of size %d", n, sizeof(buf)) )
+
+
+/**********************************************************************/
+/*********************** external definitions ***********************/
+/**********************************************************************/
+
+#ifndef WIN32
+#ifndef _AMIGA
+# ifndef unix
+long access(char *, int); /* all the other ones known under RISC OS */
+# ifndef __riscos
+FILEPTR BOPENCMD();
+void exit();
+int fclose();
+int fprintf();
+int fseek();
+/*char *index();*/
+int printf();
+int sscanf();
+int strcmp();
+char *strcpy();
+char *strncpy();
+# ifdef MSC5
+unsigned int strlen();
+# endif
+void free();
+void setbuf();
+# endif
+
+# ifdef MSC5
+int intdos();
+# endif
+# endif
+#endif
+#else /* WIN32 */
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#endif
+
+#ifndef USEPXL
+/* interface to gf.c */
+extern FILEPTR gfin;
+extern int checksum;
+extern long4 tfm_wd[], char_pointer[];
+extern char char_exists[];
+extern int num_cols, num_rows, num_bytes, x_offset, y_offset;
+extern unsigned char bits[];
+extern int gf_font_max_m, gf_font_max_n, gf_font_min_n;
+extern int gettochar();
+extern void readbits();
+extern void readpost();
+extern void seekpost();
+extern int seekchar();
+#endif
+
+/**********************************************************************/
+/********************** Special Data Structures ***********************/
+/**********************************************************************/
+
+typedef enum { None, String, Integer /*, Number, Dimension*/ } ValTyp;
+typedef struct {
+ char *Key; /* the keyword string */
+ char *Val; /* the value string */
+ ValTyp vt; /* the value type */
+ union { /* the decoded value */
+ int i;
+ float n;
+ } v;
+} KeyWord;
+typedef struct {
+ int KeyId; /* the keyword ID */
+ const char *Entry;
+ ValTyp Typ;
+} KeyDesc;
+
+/**********************************************************************/
+/*********************** Font Data Structures ***********************/
+/**********************************************************************/
+
+struct char_entry { /* character entry */
+#ifdef USEPXL
+ unsigned short width, height; /* width and height in pixels */
+ short xOffset, yOffset, yyOffset; /* x offset and y offset in pixels*/
+#endif
+ struct {
+ bool isloaded;
+ union {
+ long4 fileOffset;
+ long4 *pixptr;
+ } address;
+ } where;
+ long4 tfmw; /* TFM width */
+ long4 cw; /* character width in pixels */
+ unsigned char flag_byte; /* for PK-files */
+ unsigned char charsize;
+};
+struct font_entry { /* font entry */
+ long4 k, c, s, d;
+ int a, l;
+ char n[STRSIZE]; /* FNT_DEF command parameters */
+ long4 font_mag; /* computed from FNT_DEF s and d parameters */
+ /*char psname[STRSIZE];*/ /* PostScript name of the font */
+ char *name; /* full name of PXL file */
+ FILEPTR font_file_id; /* file identifier (NO_FILE if none) */
+#ifdef USEPXL
+ long4 magnification; /* magnification read from PXL file */
+ long4 designsize; /* design size read from PXL file */
+#endif
+ struct char_entry ch[NFNTCHARS]; /* character information */
+ struct font_entry *next;
+ unsigned short ncdl; /* #of different chars actually downloaded */
+ unsigned short plusid; /* Font id in Printer */
+ bool used_on_this_page;
+#ifdef LJ_RESIDENT_FONTS
+ bool resident_p; /* is font resident in printer? */
+ char symbol_set[40]; /* symbol set value (resident fonts) */
+ unsigned short resid; /* typeface id (resident fonts) */
+ unsigned spacing; /* 0=monospace, 1=variable (resident fonts) */
+ unsigned style; /* upright/italic/... (resident fonts) */
+ int weight; /* regular/bold/... (resident fonts) */
+ double pitch; /* chars per inch (monospaced resident fonts)*/
+#endif
+ enum PxlId {
+ id1001, id1002, pk89 } id;
+#ifdef LJ
+ unsigned short max_width, max_height, max_yoff;
+#endif
+};
+
+
+struct pixel_list {
+ FILEPTR pixel_file_id; /* file identifier */
+ int use_count; /* count of "opens" */
+};
+
+#ifdef __riscos
+typedef struct {
+ int scalex;
+ int scaley;
+ int cropl;
+ int cropb;
+ int cropr;
+ int cropt;
+} diagtrafo; /* to be passed to diagrams */
+#endif
+
+
+/**********************************************************************/
+/************************* Global Procedures ************************/
+/**********************************************************************/
+/* Note: Global procedures are declared here in alphabetical order, with
+ those which do not return values typed "void". Their bodies occur in
+ alphabetical order following the main() procedure. The names are
+ kept unique in the first 6 characters for portability. */
+
+double ActualFactor(long4);
+void AllDone(bool);
+#ifdef MSC5
+void AssureBinary(FILEPTR); /* DOS and Microsoft C dependent !!! */
+#endif
+void CloseFiles(void);
+void my_CopyFile(const char *);
+void CopyHPFile(char *);
+void DecodeArgs(int, char *[]);
+#ifdef __riscos
+void diagram(char *, diagtrafo *);
+void *xosfile_set_type(char *, int);
+void MakeMetafontFile(char *, char *, int);
+#endif
+void DoBop(void);
+long4 DoConv(long4, long4, int);
+void DoSpecial(char *, int);
+void EmitChar(long4, struct char_entry *);
+void FindPostAmblePtr(long *);
+void FormFeed(void);
+void GetFontDef(void);
+char *GetKeyStr(char *, KeyWord *);
+bool GetKeyVal(KeyWord *, KeyDesc[], int, int *);
+bool IsSame(const char *, const char *);
+void LoadAChar(long4, register struct char_entry *);
+void OpenFontFile(void);
+long4 PixRound(long4, long4);
+void PkRaster(struct char_entry *, int);
+void RasterLine(struct char_entry *, unsigned int,
+ unsigned int, unsigned char *);
+void RasterChar(struct char_entry *);
+void ReadFontDef(long4);
+void ReadPostAmble(bool);
+void SetChar(long4, short, int, bool, bool);
+void SetFntNum(long4, bool);
+void SetPosn(long4, long4);
+void SetRule(long4, long4, int);
+void SetString(short, int);
+long4 SignExtend(FILEPTR, int);
+void SkipFontDef(void);
+unsigned char skip_specials(long4 *);
+#ifdef LJ4
+int CompressLine2(unsigned char *, unsigned char *, int);
+int CompressLine3(unsigned char *, unsigned char *, int);
+void CompressedCharLine(struct char_entry *,int,unsigned char *);
+#endif
+#ifdef IBM3812
+void PMPout(int, char *);
+void PMPoutC(char);
+#endif
+
+/* buffer IO */
+char b_read(FILEPTR);
+#ifdef RISC_BUFFER
+void b_write(FILEPTR, char);
+void b_wrtmult(FILEPTR, char *, int);
+void b_oflush(FILEPTR);
+#endif
+
+
+/**********************************************************************/
+/************************* Global Variables *************************/
+/**********************************************************************/
+bool ManualFeed = _FALSE;
+long4 FirstPage = -1000000; /* first page to print (uses count0) */
+long4 LastPage = 1000000; /* last page to print */
+long4 PrintPages = 1000000; /* nr of pages to print */
+bool FirstPageSpecified = _FALSE;
+bool LastPageSpecified = _FALSE;
+#ifndef KPATHSEA
+char *PXLpath = FONTAREA;
+#endif
+char *G_progname; /* program name */
+char *filename; /* DVI file name */
+char *rootname; /* DVI filename without extension */
+const char *HeaderFileName = ""; /* file name & path of Headerfile */
+const char *EmitFileName = ""; /* file name & path for output */
+char tmp_dir[STRSIZE] = ""; /* temporary directory for auxiliary files */
+enum { Ignore, PSFile_dvilj /*, PSFile_dvips */ } PSFileSyntaxTyp = PSFile_dvilj;
+#ifdef IBM3812
+bool FirstAlternate = _FALSE; /* first page from alternate casette ? */
+#endif
+bool Reverse = _FALSE; /* process DVI pages in reverse order? */
+bool Landscape = _FALSE; /* print document in ladscape mode */
+bool my_ResetPrinter = _TRUE; /* reset printer at the begin of the job */
+bool DoublePage = _FALSE; /* print on both sides of a paper */
+bool PrintSecondPart = _TRUE; /* print First Part when DoublePage */
+bool PrintFirstPart = _TRUE; /* print Second Part when DoublePage */
+bool PrintEmptyPages = _TRUE; /* print Empty pages in DoublePage mode */
+short PageParity = 1;
+#ifdef MAKETEXPK
+#ifdef KPATHSEA
+bool makeTexPK = MAKE_TEX_PK_BY_DEFAULT;
+#else
+bool makeTexPK = _TRUE;
+#endif
+#endif
+
+#ifdef LJ
+bool kyocera_mode = _FALSE; /* bug fixes for Kyocera F-1200 LJ-Emulation */
+bool brother_mode = _FALSE; /* bug fixes for Brother HL-8D LJ-Emulation */
+#ifdef LJ2P
+int DuplexMode = 0;
+#endif
+#ifdef LJ4
+bool econoMode = _FALSE;
+bool LJ6 = _FALSE;
+#endif
+bool PrintTestPage = _FALSE; /* print testpage with pagecounter after job */
+unsigned short pagesize = 0; /* page size value */
+unsigned short pgsiz_dots = 0; /* page size in dots (for rule-clipping)*/
+#endif
+
+
+#ifndef vms
+short G_errenc = 0; /* has an error been encountered? */
+#else
+long4 G_errenc = SS$_NORMAL; /* has an error been encountered? */
+#endif
+bool G_header = _FALSE; /* copy header file to output? */
+bool G_quiet = _FALSE; /* for quiet operation */
+bool G_verbose = _FALSE; /* inform user about pxl-files used */
+bool G_nowarn = _FALSE; /* don't print out warnings */
+short x_origin; /* x-origin in dots */
+short y_origin; /* y-origin in dots */
+short x_goffset; /* global x-offset in dots */
+short y_goffset; /* global y-offset in dots */
+unsigned short ncopies = 1; /* number of copies to print */
+long4 hconv, vconv; /* converts DVI units to pixels */
+long4 h; /* current horizontal position */
+long4 hh = 0; /* current h on device */
+long4 v; /* current vertical position */
+long4 vv = 0; /* current v on device */
+long4 mag; /* magnification specified in preamble */
+long usermag = 0; /* user specified magnification */
+int ndone = 0; /* number of pages converted */
+int nopen = 0; /* number of open PXL files */
+#ifdef vms
+int kk; /* loop variable for EMITB */
+#endif
+FILEPTR outfp = FPNULL; /* output file */
+FILEPTR pxlfp; /* PXL file pointer */
+FILEPTR dvifp = FPNULL; /* DVI file pointer */
+struct font_entry *prevfont = NULL; /* font_entry pointer previous font*/
+struct font_entry *fontptr; /* font_entry pointer */
+struct font_entry *hfontptr = NULL; /* font_entry pointer */
+struct font_entry *pfontptr = NULL; /* previous font_entry pointer */
+struct pixel_list pixel_files[MAXOPEN+1]; /* list of open PXL files */
+long postambleptr; /* Pointer to the postamble */
+long ppagep; /* previous page pointer */
+static int last_ry = UNKNOWN; /* last y-position on page */
+static int last_rx = UNKNOWN; /* last x-position on page */
+long4 StartPrintPages; /* notpad for double paged output */
+int WouldPrint = 0;
+bool ZeroPage = _FALSE; /* Document starts with a Zero Page */
+bool EvenPage = _FALSE; /* Document starts with an even Page */
+long4 LastPtobePrinted = 0;
+int G_ncdl = 0;
+
+long allocated_storage = 0; /* size of mallocated storage (statistics) */
+long4 power[32] ;
+long4 gpower[33] ;
+
+unsigned char buffin[BUFFSIZE]; /* Input buffer; always used for Copy[HP]File */
+int binumber=0; /* number of valid bytes in input buffer */
+int biact=0; /* number of next byte to read from input buffer */
+#ifdef RISC_BUFFER
+char buffout[BUFFSIZE]; /* Output buffer; used if RISC_BUFFER defined */
+int boact=0; /* number of next byte to write to output buffer */
+#endif
+
+#ifdef LJ4
+# define DEFAULT_COMPRESS_MODE 3
+# define DEFAULT_COMPRESS_WIDTH 0
+# define COMPRESS_WIDTH0 0
+# define COMPRESS_WIDTH2 72
+# define COMPRESS_WIDTH3 0
+/* Raster chars compression */
+int CompressCharWidth = -1; /* Value to be determined dependent at runtime */
+int CompressCharMode; /* Used only from within RasterChar/Line */
+int UseCompression = DEFAULT_COMPRESS_MODE; /* This performs very well with Characters */
+/* Shared by both compression types */
+unsigned char *PrevLine = NULL; /* Holds last raster line; set at runtime */
+int PrevSize = 0; /* Size of PrevLine */
+/* Downloaded chars compression */
+int CChar_Off, CChar_Last; /* For compressed character downloading */
+bool CompressFontMode = _TRUE; /* Download characters compressed */
+#endif /* LJ4 */
+
+#ifdef RISC_USE_OSL
+char embuf[STRSIZE]; /* Buffer for emitting stuff */
+int emsize; /* Number of bytes written in buffer */
+#else
+# ifdef RISC_BUFFER
+char embuf[STRSIZE];
+int emsize;
+# endif
+#endif
+
+#ifdef __riscos
+#define DIAGDIRSIZE 32
+char diagdir[DIAGDIRSIZE] = "LJdiag"; /* Prefix name of directory for
+ cached printouts */
+bool cachediag = _FALSE; /* cache PDriver's output in document folder */
+bool printdiag = _TRUE; /* printf diagrams */
+FILEPTR metafile = FPNULL; /* Filepointer of file containing
+ metafont directives*/
+
+char MFFileName[STRSIZE];
+int RasterMultipass = 0;
+#endif
+
+#ifdef DEBUG
+int Debug = 0;
+#define DEBUG_START() do { if (Debug) {
+#define DEBUG_END() fflush (stdout); } } while (0)
+#define DEBUG_PRINT(str) \
+ DEBUG_START (); fputs (str, stdout); DEBUG_END ()
+#define DEBUG_PRINT1(str, e1) \
+ DEBUG_START (); printf (str, e1); DEBUG_END ()
+#else
+#define DEBUG_PRINT(str)
+#define DEBUG_PRINT1(str, e1)
+#endif
+
+#ifdef LJ
+int fonts_used_on_this_page = MAX_FONTS_PER_PAGE+1;
+char rasterfont[HANDLE_MAX_FONTS];
+ /* raster if fonts/page>MAX_FONTS_PER_PAGE*/
+#ifdef LJ_RESIDENT_FONTS
+unsigned resident_count = 0;
+#ifndef KPATHSEA
+char *TFMpath = DEFAULT_TFM_PATH;
+#endif
+#endif
+#endif
+
+long used_fontstorage = 0;
+
+#ifdef IBM3812
+char PMPformat[20];
+char CharString[CHARSTRINGMAX];
+unsigned int CharStringPos = 0;
+#define CharStringOut \
+ if (CharStringPos>0) { \
+ PMPcont(CharStringPos+1);\
+ PMPoutC((unsigned char)CharStringPos);\
+ PMPout(CharStringPos, CharString); \
+ CharStringPos=0; }
+#endif
+
+
+/************************timing stuff*********************/
+#ifdef TIMING
+# ifdef BSD_TIME_CALLS
+# ifndef vms
+# include <sys/timeb.h>
+# else
+# include <timeb.h>
+# endif
+struct timeb timebuffer;
+double start_time;
+# else
+# ifdef __riscos
+# include <sys/times.h>
+# else
+# include <sys/time.h>
+struct timeval Tp;
+double start_time;
+# endif
+# endif
+#endif /* TIMING */
+
+
+#endif /* DVI2XX_H */