summaryrefslogtreecommitdiff
path: root/Build/source/texk/dvipsk/dvips.h
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-17 21:41:51 +0000
committerKarl Berry <karl@freefriends.org>2006-01-17 21:41:51 +0000
commit487ca4806cc046076293cf6cc5fbba0db282bac7 (patch)
tree847b412ab5158dd7bdd7ed7e5a4cc3fbca94be32 /Build/source/texk/dvipsk/dvips.h
parenta3d3111bfe26b8e5f5bc6049dfb2a4ca2edc7881 (diff)
texk 1
git-svn-id: svn://tug.org/texlive/trunk@1485 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/dvipsk/dvips.h')
-rw-r--r--Build/source/texk/dvipsk/dvips.h408
1 files changed, 408 insertions, 0 deletions
diff --git a/Build/source/texk/dvipsk/dvips.h b/Build/source/texk/dvipsk/dvips.h
new file mode 100644
index 00000000000..8ac55006a45
--- /dev/null
+++ b/Build/source/texk/dvipsk/dvips.h
@@ -0,0 +1,408 @@
+/*
+ * This is dvips, a freely redistributable PostScript driver
+ * for dvi files. It is (C) Copyright 1986-2004 by Tomas Rokicki.
+ * You may modify and use this program to your heart's content,
+ * so long as you send modifications to Tomas Rokicki. It can
+ * be included in any distribution, commercial or otherwise, so
+ * long as the banner string defined below is not modified (except
+ * for the version number) and this banner is printed on program
+ * invocation, or can be printed on program invocation with the -? option.
+ */
+
+/* This file is the header for dvips's global data structures. */
+
+#define BANNER \
+"This is dvips(k) 5.95b Copyright 2005 Radical Eye Software"
+#define BANNER2 "(www.radicaleye.com)"
+#ifdef KPATHSEA
+#include "config.h"
+#include "debug.h"
+#endif
+/* Please don't turn debugging off! */
+#ifndef DEBUG
+#define DEBUG
+#endif
+
+#ifndef KPATHSEA
+#include <stdio.h>
+#if defined(SYSV) || defined(VMS) || defined(__THINK__) || defined(MSDOS) || defined(OS2) || defined(ATARIST) || defined(WIN32)
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#endif
+#if defined(lint) && defined(sun)
+extern char *sprintf() ;
+#endif
+#include "paths.h"
+#include "debug.h"
+#ifdef VMS
+#include "[.vms]vms.h"
+#endif /* VMS */
+#include <stdlib.h>
+/*
+ * Is your malloc big?
+ */
+#if defined(MSDOS) && !defined(__EMX__) && !defined(DJGPP)
+#define SMALLMALLOC
+#endif
+#if defined(OS2) && defined(_MSC_VER)
+#define SMALLMALLOC
+#endif
+/*
+ * Constants, used to increase or decrease the capacity of this program.
+ *
+ * Strings are now more dynamically allocated, so STRINGSIZE is not the
+ * strict limit it once was. However, it still sets the maximum size
+ * of a string that can be handled in specials, so it should not be
+ * set too small.
+ */
+#define STRINGSIZE (200000) /* maximum total chars in strings in program */
+#define RASTERCHUNK (8192) /* size of chunk of raster */
+#define MINCHUNK (240) /* minimum size char to get own raster */
+#define STACKSIZE (350) /* maximum stack size for dvi files */
+#define MAXFRAME (10) /* maximum depth of virtual font recursion */
+#define MAXFONTHD (100) /* number of unique names of included fonts */
+#define STDOUTSIZE (75) /* width of a standard output line */
+/*
+ * Other constants, which define printer-dependent stuff.
+ */
+#define SWMEM (180000) /* available virtual memory in PostScript printer */
+#define DPI (actualdpi) /* dots per inch */
+#define VDPI (vactualdpi) /* dots per inch */
+#define RES_TOLERANCE(dpi) ((int)(1+dpi/500))
+ /* error in file name resolution versus desired */
+#define FONTCOST (298) /* overhead cost of each sw font */
+#define PSFONTCOST (1100) /* overhead cost for PostScript fonts */
+#define PSCHARCOST (20) /* overhead cost for PostScript font chars */
+#define DNFONTCOST (35000) /* overhead cost for downloaded PS font */
+#define CHARCOST (15) /* overhead cost for each character */
+#define OVERCOST (30000) /* cost of overhead */
+#define DICTITEMCOST (20) /* cost per key, value in dictionary */
+#define NAMECOST (40) /* overhead cost of each new name */
+/*
+ * Type declarations. integer must be a 32-bit signed; shalfword must
+ * be a sixteen-bit signed; halfword must be a sixteen-bit unsigned;
+ * quarterword must be an eight-bit unsigned.
+ */
+#if (defined(MSDOS) && !defined(DJGPP)) || (defined(OS2) && defined(_MSC_VER)) || defined(ATARIST)
+typedef long integer;
+#else
+typedef int integer;
+#endif
+#ifndef KPATHSEA
+typedef char boolean;
+#endif
+typedef double real;
+typedef short shalfword ;
+typedef unsigned short halfword ;
+typedef unsigned char quarterword ;
+#ifdef WIN32
+#define Boolean boolean
+#else
+#ifndef __THINK__
+typedef short Boolean ;
+#endif
+#endif
+/*
+ * If the machine has a default integer size of 16 bits, and 32-bit
+ * integers must be manipulated with %ld, set the macro SHORTINT.
+ */
+#ifdef XENIX
+#define SHORTINT
+#else
+#undef SHORTINT
+#endif
+#if defined(MSDOS) && !defined(__EMX__) && !defined(DJGPP) || defined(ATARIST)
+#define SHORTINT
+#endif
+#if defined(OS2) && defined(_MSC_VER)
+#define SHORTINT
+#endif
+
+/*
+ * This is the structure definition for resident fonts. We use
+ * a small and simple hash table to handle these. We don't need
+ * a big hash table.
+ */
+#define RESHASHPRIME (73)
+struct resfont {
+ struct resfont *next ;
+ char *Keyname, *PSname, *TeXname, *Fontfile, *Vectfile;
+ char *specialinstructions ;
+ char *downloadheader ; /* possibly multiple files */
+ quarterword sent ;
+} ;
+
+/*
+ * A chardesc describes an individual character. Before the fonts are
+ * downloaded, the flags indicate that the character has already been used
+ * with the following meanings:
+ */
+typedef struct tcd {
+ integer TFMwidth ;
+ quarterword *packptr ;
+ shalfword pixelwidth ;
+ quarterword flags, flags2 ;
+} chardesctype ;
+#define EXISTS (1)
+#define PREVPAGE (2)
+#define THISPAGE (4)
+#define TOOBIG (8) /* not used at the moment */
+#define REPACKED (16)
+#define BIGCHAR (32)
+#define STATUSFLAGS (EXISTS|REPACKED|BIGCHAR)
+/*
+ * The new field flags2 above is now an immutable field (once a font is
+ * loaded); for now it only indicates whether a character EXISTS or not.
+ * This fixes a problem with -G.
+ */
+/*
+ * A fontdesc describes a font. The name, area, and scalename are located in
+ * the string pool. The nextsize pointer is used to link fonts that are used
+ * in included psfiles and differ only in scaledsize. Such fonts also have
+ * a non-NULL scalename that gives the scaledsize as found in the included
+ * file. The psflag indicates that the font has been used in an included
+ * psfile. It can be 0, PREVPAGE, THISPAGE, or EXISTS.
+ */
+typedef struct tfd {
+ integer checksum, scaledsize, designsize, thinspace ;
+ halfword dpi, loadeddpi ;
+ halfword alreadyscaled ;
+ halfword psname ;
+ halfword loaded ;
+ quarterword psflag;
+ quarterword codewidth ;
+ integer maxchars ;
+ char *name, *area ;
+ struct resfont *resfont ;
+ struct tft *localfonts ;
+ struct tfd *next ;
+ struct tfd *nextsize;
+ char *scalename;
+ chardesctype *chardesc ;
+} fontdesctype ;
+
+/* A fontmap associates a fontdesc with a font number.
+ */
+typedef struct tft {
+ integer fontnum ;
+ fontdesctype *desc ;
+ struct tft *next ;
+} fontmaptype ;
+
+/* Virtual fonts require a `macro' capability that is implemented by
+ * using a stack of `frames'.
+ */
+typedef struct {
+ quarterword *curp, *curl ;
+ fontdesctype *curf ;
+ fontmaptype *ff ;
+} frametype ;
+
+/*
+ * The next type holds the font usage information in a 256-bit table;
+ * there's a 1 for each character that was used in a section.
+ */
+typedef struct {
+ fontdesctype *fd ;
+ halfword psfused ;
+ halfword bitmap[16] ;
+} charusetype ;
+
+/* Next we want to record the relevant data for a section. A section is
+ * a largest portion of the document whose font usage does not overflow
+ * the capacity of the printer. (If a single page does overflow the
+ * capacity all by itself, it is made into its own section and a warning
+ * message is printed; the page is still printed.)
+ *
+ * The sections are in a linked list, built during the prescan phase and
+ * processed in proper order (so that pages stack correctly on output) during
+ * the second phase.
+ */
+typedef struct t {
+ integer bos ;
+ struct t *next ;
+ halfword numpages ;
+} sectiontype ;
+
+/*
+ * Sections are actually represented not by sectiontype but by a more
+ * complex data structure of variable size, having the following layout:
+ * sectiontype sect ;
+ * charusetype charuse[numfonts] ;
+ * fontdesctype *sentinel = NULL ;
+ * (Here numfonts is the number of bitmap fonts currently defined.)
+ * Since we can't declare this or take a sizeof it, we build it and
+ * manipulate it ourselves (see the end of the prescan routine).
+ */
+/*
+ * This is how we build up headers and other lists.
+ */
+struct header_list {
+ struct header_list *next ;
+ char *Hname ;
+ char *precode ;
+ char *postcode ;
+ char name[1] ;
+} ;
+/*
+ * Some machines define putlong in their library.
+ * We get around this here.
+ */
+#define putlong was_putlong
+/*
+ * Information on available paper sizes is stored here.
+ */
+struct papsiz {
+ struct papsiz *next ;
+ integer xsize, ysize ;
+ char *name ;
+ char *specdat ;
+} ;
+#ifdef MVSXA /* IBM: MVS/XA */
+/* this is where we fix problems with conflicts for truncation
+ of long names (we might only do this if LONGNAME not set but ...) */
+# define pprescanpages pprscnpgs /* confict with pprescan */
+# define flushDashedPath flshDshdPth /* conflict with flushDash */
+# define PageList PgList /* re-definition conflict with pagelist */
+/* adding ascii2ebcdic conversion table to extern */
+ extern char ascii2ebcdic[] ;
+#endif /* IBM: MVS/XA */
+#ifdef VMCMS /* IBM: VM/CMS */
+/* this is where we fix problems with conflicts for truncation
+ of long names (we might only do this if LONGNAME not set but ...) */
+# define pprescanpages pprscnpgs /* confict with pprescan */
+# define flushDashedPath flshDshdPth /* conflict with flushDash */
+/* adding ascii2ebcdic conversion table to extern */
+ extern char ascii2ebcdic[] ;
+/* redefining fopen for VMCMS, see DVIPSCMS.C */
+ extern FILE *cmsfopen() ;
+# ifdef fopen
+# undef fopen
+# endif
+# define fopen cmsfopen
+#define downloadpspk dnldpspk
+#endif /* IBM: VM/CMS */
+/*
+ * Remove namespace conflict with standard library on Macintosh
+ */
+#ifdef __THINK__
+#define newstring newpoolstring
+#endif
+
+#ifndef VOID
+#define VOID void
+#endif
+
+#define USE_PCLOSE (801)
+#define USE_FCLOSE (802)
+
+/* Things that KPATHSEA knows, and are useful even without it. */
+#if !defined(KPATHSEA)
+
+#if defined(MSDOS) || defined(OS2) || defined(WIN32)
+#define FOPEN_ABIN_MODE "ab"
+#define FOPEN_RBIN_MODE "rb"
+#else
+#define FOPEN_ABIN_MODE "a"
+#define FOPEN_RBIN_MODE "r"
+#endif
+
+#if (defined MSDOS || defined OS2 || defined WIN32)
+#define WRITEBIN "wb"
+#else
+#ifdef VMCMS
+#define WRITEBIN "wb, lrecl=1024, recfm=f"
+#else
+#define WRITEBIN "w"
+#endif
+#endif
+
+#if defined(WIN32)
+#define STDC_HEADERS
+#include <io.h>
+#include <fcntl.h>
+#define O_BINARY _O_BINARY
+#define popen _popen
+#define pclose _pclose
+#define register
+#define SET_BINARY(fd) _setmode((fd), _O_BINARY)
+#else /* !WIN32 */
+#define SET_BINARY(fd)
+#endif
+
+#if defined(DEVICESEP)
+#define IS_DEVICE_SEP(c) ((c) == DEVICESEP)
+#else
+#define IS_DEVICE_SEP(c) 0
+#endif
+#define STREQ(s1, s2) (((s1) != NULL) && ((s2) != NULL) && !strcmp((s1), (s2)))
+
+#if defined(MSDOS) || defined(OS2) || defined(WIN32)
+#define NAME_BEGINS_WITH_DEVICE(name) (*(name) && IS_DEVICE_SEP((name)[1]))
+#define IS_DIR_SEP(c) ((c) == '/' || (c) == '\\')
+#define FILESTRCASEEQ(s1, s2) (strcasecmp (s1, s2) == 0)
+#else
+#define NAME_BEGINS_WITH_DEVICE(name) 0
+#define IS_DIR_SEP(c) ((c) == DIRSEP)
+#define FILESTRCASEEQ STREQ
+#endif
+
+#define TOLOWER(c) tolower(c)
+#define ISALNUM(c) isalnum(c)
+#define ISXDIGIT(c) (isascii (c) && isxdigit(c))
+
+ /* To Prototype or not to prototype ? */
+#ifdef NeedFunctionPrototypes
+
+#define AA(args) args /* For an arbitrary number; ARGS must be in parens. */
+
+#define P1H(p1) (p1)
+#define P2H(p1,p2) (p1, p2)
+#define P3H(p1,p2,p3) (p1, p2, p3)
+#define P4H(p1,p2,p3,p4) (p1, p2, p3, p4)
+#define P5H(p1,p2,p3,p4,p5) (p1, p2, p3, p4, p5)
+#define P6H(p1,p2,p3,p4,p5,p6) (p1, p2, p3, p4, p5, p6)
+
+#define P1C(t1,n1)(t1 n1)
+#define P2C(t1,n1, t2,n2)(t1 n1, t2 n2)
+#define P3C(t1,n1, t2,n2, t3,n3)(t1 n1, t2 n2, t3 n3)
+#define P4C(t1,n1, t2,n2, t3,n3, t4,n4)(t1 n1, t2 n2, t3 n3, t4 n4)
+#define P5C(t1,n1, t2,n2, t3,n3, t4,n4, t5,n5) \
+ (t1 n1, t2 n2, t3 n3, t4 n4, t5 n5)
+#define P6C(t1,n1, t2,n2, t3,n3, t4,n4, t5,n5, t6,n6) \
+ (t1 n1, t2 n2, t3 n3, t4 n4, t5 n5, t6 n6)
+
+#else /* no function prototypes */
+
+#define AA(args) ()
+
+#define P1H(p1) ()
+#define P2H(p1, p2) ()
+#define P3H(p1, p2, p3) ()
+#define P4H(p1, p2, p3, p4) ()
+#define P5H(p1, p2, p3, p4, p5) ()
+#define P6H(p1, p2, p3, p4, p5, p6) ()
+
+#define P1C(t1,n1) (n1) t1 n1;
+#define P2C(t1,n1, t2,n2) (n1,n2) t1 n1; t2 n2;
+#define P3C(t1,n1, t2,n2, t3,n3) (n1,n2,n3) t1 n1; t2 n2; t3 n3;
+#define P4C(t1,n1, t2,n2, t3,n3, t4,n4) (n1,n2,n3,n4) \
+ t1 n1; t2 n2; t3 n3; t4 n4;
+#define P5C(t1,n1, t2,n2, t3,n3, t4,n4, t5,n5) (n1,n2,n3,n4,n5) \
+ t1 n1; t2 n2; t3 n3; t4 n4; t5 n5;
+#define P6C(t1,n1, t2,n2, t3,n3, t4,n4, t5,n5, t6,n6) (n1,n2,n3,n4,n5,n6) \
+ t1 n1; t2 n2; t3 n3; t4 n4; t5 n5; t6 n6;
+
+#endif /* function prototypes */
+
+#ifdef NeedFunctionPrototypes
+#define P9C(t1,n1, t2,n2, t3,n3, t4,n4, t5,n5, t6,n6, t7,n7, t8,n8, t9,n9) \
+ (t1 n1, t2 n2, t3 n3, t4 n4, t5 n5, t6 n6, t7 n7, t8 n8, t9 n9)
+#else
+#define P9C(t1,n1, t2,n2, t3,n3, t4,n4, t5,n5, t6,n6, t7,n7, t8,n8, t9,n9) \
+ t1 n1; t2 n2; t3 n3; t4 n4; t5 n5; t6 n6; t7 n7; t8 n8; t9 n9;
+#endif
+
+#endif