summaryrefslogtreecommitdiff
path: root/dviware/dvibook/libtex/dvistuff.h
blob: 040e02bdac159d7b8800d7a68424525ec1d0a124 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/*
 * Copyright 1989 Dirk Grunwald
 * 
 * Permission to use, copy, modify, distribute, and sell this software
 * and its documentation for any purpose is hereby granted without fee,
 * provided that the above copyright notice appear in all copies and that
 * both that copyright notice and this permission notice appear in
 * supporting documentation, and that the name of Dirk Grunwald or M.I.T.
 * not be used in advertising or publicity pertaining to distribution of
 * the software without specific, written prior permission.  Dirk
 * Grunwald and M.I.T. makes no representations about the suitability of
 * this software for any purpose.  It is provided "as is" without express
 * or implied warranty.
 * 
 * DIRK GRUNWALD AND M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
 * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
 * FITNESS, IN NO EVENT SHALL M.I.T.  BE LIABLE FOR ANY SPECIAL, INDIRECT
 * OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
 * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
 * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE
 * OR PERFORMANCE OF THIS SOFTWARE.
 * 
 * Author:
 * 	Dr. Dirk Grunwald
 * 	Dept. of Computer Science
 * 	Campus Box 430
 * 	Univ. of Colorado, Boulder
 * 	Boulder, CO 80309
 * 
 * 	grunwald@colorado.edu
 * 	
 */ 

static char *dvistuff_header_rcsid="$Header: /home/reed/grunwald/Iptex/drivers/RCS/dvistuff.h,v 1.11 89/02/15 16:31:56 grunwald Exp $" ;

/*
 *	Include the following from the CTex distribution
 */

#include <stdio.h>

#include "types.h"
#include "font.h"
#include "conv.h"

/*
 *	We use the following flags to keep track of shrunk fonts
 */

#define	GF_SHRUNK	GF_USR0

#define	GLYPH_SHRUNK(g) ((g) -> g_flags & GF_SHRUNK)

#define SHRUNK_GLYPH_BYTES_WIDE(g) ((((g) -> g_width + 15) >> 4) * 2)

typedef struct font DviFont;
typedef struct glyph DviGlyph;

#define MAX_GLYPH	128
#define MAX_FONTFAMILY	128

#define DEFAULT_DPI	300
#define DEFAULT_HHMARGIN	DEFAULT_DPI
#define DEFAULT_VVMARGIN	DEFAULT_DPI
#define DEFAULT_MAX_DRIFT	3

#define DEFAULT_BLACKNESS 3


struct fontinfo {
	struct font *f;		/* the font */
	i32 pspace;		/* boundary between `small & `large spaces
				   (for positive horizontal motion) */
	i32 nspace;		/* -4 * pspace, for negative motion */
	i32 vspace;		/* 5 * pspace, for vertical motion */
	int family;		/* Imagen family number (we pick one) */
};

typedef struct fontinfo DviFontInfo;

/* DVI file info */

/*
 * Units of distance are stored in scaled points, but we can convert to
 * units of 10^-7 meters by multiplying by the numbers in the preamble.
 */

/* the structure of the stack used to hold the values (h,v,w,x,y,z) */

typedef struct dvi_stack {
	i32	h;		/* the saved h */
	i32	v;		/* the saved v */
	i32	w;		/* etc */
	i32	x;
	i32	y;
	i32	z;
} DviStack;

extern DviStack dvi_current;	/* the current values of h, v, etc */
extern int	dvi_f;			/* the current font */

#define dvi_h dvi_current.h
#define dvi_v dvi_current.v
#define dvi_w dvi_current.w
#define dvi_x dvi_current.x
#define dvi_y dvi_current.y
#define dvi_z dvi_current.z



extern int	dviHH;		/* current horizontal position, in DEVs */
extern int	dviVV;		/* current vertical position, in DEVs */
#define DVI_COUNT	10	/* count0 .. count9 */
extern long	*dviCount[DVI_COUNT];	/* values of count */

extern Conv Conversion;

extern int	dviHHMargin;
extern int	dviVVMargin;
extern int	dviDPI;
extern int	dviTallestPage;
extern int	dviWidestPage;
extern int	dviTotalPages;
extern int	dviCurrentPage;
extern int	dviMaxDrift;
extern char 	*dviPrintEngine;
extern int      dviBlackness;
extern int	dviFontRotation;
extern int	dviUserMag;

extern DviFontInfo *dviCurrentFont;
extern char	*DVIFileName;
extern FILE	*dviFile;				/* user's file */
extern char	*ProgName;

extern int dviInit();
extern void dviFini();
extern void dviPreparePage( /* int */ );
extern struct glyph *dviShrinkGlyph();

void applicationPutChar( /* hh, vv, charCode */ );
DviFont *applicationNewFont( /* font structure */);
void applicationResetFont(/* font info, key */);
void applicationSetRule( /* hh, vv, height, width  : long*/ );
void applicationDoSpecial();