summaryrefslogtreecommitdiff
path: root/Build/source/texk/dvipsk/dvips.h
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/dvipsk/dvips.h')
-rw-r--r--Build/source/texk/dvipsk/dvips.h379
1 files changed, 379 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..bc8b9186b75
--- /dev/null
+++ b/Build/source/texk/dvipsk/dvips.h
@@ -0,0 +1,379 @@
+/* $Id$
+ * Copyright 1986-2021 Tomas Rokicki.
+ * This is dvips, a freely redistributable PostScript driver
+ * for dvi files. You may freely use, modify and/or distribute this
+ * program or any portion thereof.
+ */
+
+/* This file is the header for dvips's global data structures. */
+
+#define CREATIONDATE
+
+#define MAX_CODE 0x110000
+#define MAX_2BYTES_CODE 0x10000
+#define VF_MEM_UNIT 0x10000
+#define CD_IDX(i) ((i>=MAX_2BYTES_CODE ? MAX_2BYTES_CODE : i))
+
+#define BANNER \
+"This is dvips(k) 2021.1 Copyright 2021 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 (500) /* maximum stack size for dvi files */
+#define MAXFRAME (50) /* maximum depth of virtual font recursion */
+#define MAXFONTHD (1024) /* number of unique names of included fonts */
+#define STDOUTSIZE (75) /* width of a standard output line */
+#define DOWNLOADEDPSSIZE (1000) /* max number of downloaded fonts to check */
+/*
+ * 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;
+typedef unsigned long uinteger;
+#else
+typedef int integer;
+typedef unsigned int uinteger;
+#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, dir;
+ halfword dpi, loadeddpi;
+ halfword alreadyscaled;
+ halfword psname;
+ halfword loaded;
+ quarterword psflag;
+ quarterword codewidth;
+ integer maxchars;
+ integer llx, lly, urx, ury ;
+ char *name, *area;
+ struct resfont *resfont;
+ struct tft *localfonts;
+ struct tfd *next;
+ struct tfd *nextsize;
+ char *scalename;
+ chardesctype *chardesc;
+ int iswide, kind;
+} fontdesctype;
+
+#define VF_TEX (1)
+#define VF_OMEGA (2)
+#define VF_PTEX (3)
+
+/* 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;
+ const char *Hname;
+ char *precode;
+ char *postcode;
+ char *name;
+};
+/*
+ * 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;
+ const char *name;
+ const 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)
+
+/* output Unicode string on console in windows */
+#if defined(KPATHSEA) && defined(WIN32)
+#undef perror
+#define fprintf_str win32_fprintf
+#define fputs_str win32_fputs
+#define putc_str win32_putc
+#define perror win32_perror
+#else
+#define fprintf_str fprintf
+#define fputs_str fputs
+#define putc_str putc
+#endif
+
+/* 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 register
+#define SET_BINARY(fd) (void)_setmode((fd), _O_BINARY)
+#else /* !WIN32 */
+#define SET_BINARY(fd) (void)0
+#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))
+
+#endif