1/*
2 * $XConsortium: DviP.h,v 1.5 89/07/22 19:44:08 keith Exp $
3 */
4
5/*
6 * DviP.h - Private definitions for Dvi widget
7 */
8
9#ifndef _XtDviP_h
10#define _XtDviP_h
11
12#include "Dvi.h"
13#include "DviChar.h"
14#include "device.h"
15
16/***********************************************************************
17 *
18 * Dvi Widget Private Data
19 *
20 ***********************************************************************/
21
22/************************************
23 *
24 *  Class structure
25 *
26 ***********************************/
27
28/* Type for save method. */
29
30typedef void (*DviSaveProc)(Widget, FILE *);
31
32/*
33 * New fields for the Dvi widget class record
34 */
35
36
37typedef struct _DviClass {
38      DviSaveProc	save;
39} DviClassPart;
40
41/*
42 * Full class record declaration
43 */
44
45typedef struct _DviClassRec {
46	CoreClassPart	core_class;
47	DviClassPart	command_class;
48} DviClassRec;
49
50extern DviClassRec dviClassRec;
51
52/***************************************
53 *
54 *  Instance (widget) structure
55 *
56 **************************************/
57
58/*
59 * a list of fonts we've used for this widget
60 */
61
62typedef struct _dviFontSizeList {
63	struct _dviFontSizeList	*next;
64	int			size;
65	char			*x_name;
66	XFontStruct		*font;
67	int			doesnt_exist;
68} DviFontSizeList;
69
70typedef struct _dviFontList {
71	struct _dviFontList	*next;
72	char			*dvi_name;
73	char			*x_name;
74	int			dvi_number;
75	Boolean			initialized;
76	Boolean			scalable;
77	DviFontSizeList		*sizes;
78	DviCharNameMap		*char_map;
79	DeviceFont		*device_font;
80} DviFontList;
81
82typedef struct _dviFontMap {
83	struct _dviFontMap	*next;
84	char			*dvi_name;
85	char			*x_name;
86} DviFontMap;
87
88#define DVI_TEXT_CACHE_SIZE	256
89#define DVI_CHAR_CACHE_SIZE	1024
90
91typedef struct _dviCharCache {
92	XTextItem	cache[DVI_TEXT_CACHE_SIZE];
93	char		adjustable[DVI_TEXT_CACHE_SIZE];
94	char		char_cache[DVI_CHAR_CACHE_SIZE];
95	int		index;
96	int		max;
97	int		char_index;
98	int		font_size;
99	int		font_number;
100	XFontStruct	*font;
101	int		start_x, start_y;
102	int		x, y;
103} DviCharCache;
104
105typedef struct _dviState {
106	struct _dviState	*next;
107	int			font_size;
108	int			font_number;
109	int			x;
110	int			y;
111} DviState;
112
113typedef struct _dviFileMap {
114	struct _dviFileMap	*next;
115	long			position;
116	int			page_number;
117} DviFileMap;
118
119/*
120 * New fields for the Dvi widget record
121 */
122
123typedef struct {
124	/*
125	 * resource specifiable items
126	 */
127	char		*font_map_string;
128	unsigned long	foreground;
129	unsigned long	background;
130	int		requested_page;
131	int		last_page;
132	XFontStruct	*default_font;
133	FILE		*file;
134	Boolean		noPolyText;
135	Boolean		seek;		/* file is "seekable" */
136	int		default_resolution;
137	/*
138 	 * private state
139 	 */
140	FILE		*tmpFile;	/* used when reading stdin */
141	char		readingTmp;	/* reading now from tmp */
142	char		ungot;		/* have ungetc'd a char */
143	GC		normal_GC;
144	GC		fill_GC;
145	DviFileMap	*file_map;
146	DviFontList	*fonts;
147	DviFontMap	*font_map;
148	int		current_page;
149	int		font_size;
150	int		font_number;
151	DeviceFont	*device_font;
152	int		device_font_number;
153	Device		*device;
154	int		native;
155	int		device_resolution;
156	int		display_resolution;
157	int		paperlength;
158	int		paperwidth;
159	double		scale_factor;	/* display res / device res */
160	int		sizescale;
161	int		line_thickness;
162	int		line_width;
163
164#define DVI_FILL_MAX 1000
165
166	int		fill;
167#define DVI_FILL_WHITE 0
168#define DVI_FILL_GRAY 1
169#define DVI_FILL_BLACK 2
170	int		fill_type;
171	Pixmap		gray[8];
172	int		backing_store;
173	XFontStruct	*font;
174	int		display_enable;
175	struct ExposedExtents {
176	    int x1, y1, x2, y2;
177	}		extents;
178	DviState	*state;
179	DviCharCache	cache;
180	int		text_x_width;
181	int		text_device_width;
182	int		word_flag;
183} DviPart;
184
185int DviGetAndPut(DviWidget, int *);
186#define DviGetIn(dw,cp)\
187    (dw->dvi.tmpFile ? (\
188	DviGetAndPut (dw, cp) \
189    ) :\
190	(*cp = getc (dw->dvi.file))\
191)
192
193#define DviGetC(dw, cp)\
194    (dw->dvi.readingTmp ? (\
195	((*cp = getc (dw->dvi.tmpFile)) == EOF) ? (\
196	    fseek (dw->dvi.tmpFile, 0l, 2),\
197	    (dw->dvi.readingTmp = 0),\
198	    DviGetIn (dw,cp)\
199	) : (\
200	    *cp\
201	)\
202    ) : (\
203	DviGetIn(dw,cp)\
204    )\
205)
206
207#define DviUngetC(dw, c)\
208    (dw->dvi.readingTmp ? (\
209	ungetc (c, dw->dvi.tmpFile)\
210    ) : ( \
211	(dw->dvi.ungot = 1),\
212	ungetc (c, dw->dvi.file)))
213
214/*
215 * Full widget declaration
216 */
217
218typedef struct _DviRec {
219	CorePart	core;
220	DviPart		dvi;
221} DviRec;
222
223#define InheritSaveToFile ((DviSaveProc)_XtInherit)
224
225XFontStruct	*QueryFont (DviWidget, int, int);
226
227DviCharNameMap	*QueryFontMap (DviWidget, int);
228
229DeviceFont	*QueryDeviceFont (DviWidget, int);
230
231char *GetWord(DviWidget, char *, int);
232char *GetLine(DviWidget, char *, int);
233#endif /* _XtDviP_h */
234