|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T s
Length: 6645 (0x19f5) Types: TextFile Names: »structures.h«
└─⟦52210d11f⟧ Bits:30007239 EUUGD2: TeX 3 1992-12 └─⟦8d3183c2b⟧ »utils/dvips541.tar.Z« └─⟦008d6ff64⟧ └─⟦this⟧ »./dvips/structures.h«
/* * This is dvips, a freely redistributable PostScript driver * for dvi files. It is (C) Copyright 1986-90 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, version 5.41 (C) 1986-90 Radical Eye Software\n" #include <stdio.h> #ifdef SYSV #include <string.h> #else #ifdef VMS #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.h" #endif /* VMS */ /* * Constants, used to increase or decrease the capacity of this program. */ #define STRINGSIZE (25000) /* maximum number of strings in program */ #define RASTERCHUNK (8192) /* size of chunk of raster */ #define MINCHUNK (256) /* minimum size char to get own raster */ #define STACKSIZE (100) /* maximum stack size for dvi files */ #define MAXFRAME (5) /* maximum depth of virtual font recursion */ #define MAXFONTHD (100) /* number of unique names of included fonts */ /* * 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 (8300) /* overhead cost for PostScript fonts */ #define DNFONTCOST (35000) /* overhead cost for downloaded PS font */ #define CHARCOST (15) /* overhead cost for each character */ #define OVERCOST (40000) /* 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. */ typedef long integer; typedef char boolean; typedef double real; typedef short shalfword ; typedef unsigned short halfword ; typedef unsigned char quarterword ; typedef short Boolean ; /* * 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 #ifdef MSDOS #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 (23) struct resfont { char *Keyname, *PSname, *TeXname ; char *specialinstructions ; char *downloadheader ; struct resfont *next ; 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 { integer TFMwidth ; shalfword pixelwidth ; quarterword *packptr ; quarterword flags ; } 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) /* * 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 ; halfword maxchars ; char *name, *area ; struct resfont *resfont ; struct tft *localfonts ; struct tfd *next ; struct tfd *nextsize; char *scalename; quarterword psflag; chardesctype chardesc[256] ; } 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 { char *name ; struct header_list *next ; } ; /* * Some machines define putlong in their library. * We get around this here. */ #define putlong was_putlong