1151497Sru/*
2151497Sru * $XConsortium: DviP.h,v 1.5 89/07/22 19:44:08 keith Exp $
3151497Sru */
4151497Sru
5151497Sru/*
6151497Sru * DviP.h - Private definitions for Dvi widget
7151497Sru */
8151497Sru
9151497Sru#ifndef _XtDviP_h
10151497Sru#define _XtDviP_h
11151497Sru
12151497Sru#include "Dvi.h"
13151497Sru#include "DviChar.h"
14151497Sru#include "device.h"
15151497Sru
16151497Sru/***********************************************************************
17151497Sru *
18151497Sru * Dvi Widget Private Data
19151497Sru *
20151497Sru ***********************************************************************/
21151497Sru
22151497Sru/************************************
23151497Sru *
24151497Sru *  Class structure
25151497Sru *
26151497Sru ***********************************/
27151497Sru
28151497Sru/* Type for save method. */
29151497Sru
30151497Srutypedef void (*DviSaveProc)(Widget, FILE *);
31151497Sru
32151497Sru/*
33151497Sru * New fields for the Dvi widget class record
34151497Sru */
35151497Sru
36151497Sru
37151497Srutypedef struct _DviClass {
38151497Sru      DviSaveProc	save;
39151497Sru} DviClassPart;
40151497Sru
41151497Sru/*
42151497Sru * Full class record declaration
43151497Sru */
44151497Sru
45151497Srutypedef struct _DviClassRec {
46151497Sru	CoreClassPart	core_class;
47151497Sru	DviClassPart	command_class;
48151497Sru} DviClassRec;
49151497Sru
50151497Sruextern DviClassRec dviClassRec;
51151497Sru
52151497Sru/***************************************
53151497Sru *
54151497Sru *  Instance (widget) structure
55151497Sru *
56151497Sru **************************************/
57151497Sru
58151497Sru/*
59151497Sru * a list of fonts we've used for this widget
60151497Sru */
61151497Sru
62151497Srutypedef struct _dviFontSizeList {
63151497Sru	struct _dviFontSizeList	*next;
64151497Sru	int			size;
65151497Sru	char			*x_name;
66151497Sru	XFontStruct		*font;
67151497Sru	int			doesnt_exist;
68151497Sru} DviFontSizeList;
69151497Sru
70151497Srutypedef struct _dviFontList {
71151497Sru	struct _dviFontList	*next;
72151497Sru	char			*dvi_name;
73151497Sru	char			*x_name;
74151497Sru	int			dvi_number;
75151497Sru	Boolean			initialized;
76151497Sru	Boolean			scalable;
77151497Sru	DviFontSizeList		*sizes;
78151497Sru	DviCharNameMap		*char_map;
79151497Sru	DeviceFont		*device_font;
80151497Sru} DviFontList;
81151497Sru
82151497Srutypedef struct _dviFontMap {
83151497Sru	struct _dviFontMap	*next;
84151497Sru	char			*dvi_name;
85151497Sru	char			*x_name;
86151497Sru} DviFontMap;
87151497Sru
88151497Sru#define DVI_TEXT_CACHE_SIZE	256
89151497Sru#define DVI_CHAR_CACHE_SIZE	1024
90151497Sru
91151497Srutypedef struct _dviCharCache {
92151497Sru	XTextItem	cache[DVI_TEXT_CACHE_SIZE];
93151497Sru	char		adjustable[DVI_TEXT_CACHE_SIZE];
94151497Sru	char		char_cache[DVI_CHAR_CACHE_SIZE];
95151497Sru	int		index;
96151497Sru	int		max;
97151497Sru	int		char_index;
98151497Sru	int		font_size;
99151497Sru	int		font_number;
100151497Sru	XFontStruct	*font;
101151497Sru	int		start_x, start_y;
102151497Sru	int		x, y;
103151497Sru} DviCharCache;
104151497Sru
105151497Srutypedef struct _dviState {
106151497Sru	struct _dviState	*next;
107151497Sru	int			font_size;
108151497Sru	int			font_number;
109151497Sru	int			x;
110151497Sru	int			y;
111151497Sru} DviState;
112151497Sru
113151497Srutypedef struct _dviFileMap {
114151497Sru	struct _dviFileMap	*next;
115151497Sru	long			position;
116151497Sru	int			page_number;
117151497Sru} DviFileMap;
118151497Sru
119151497Sru/*
120151497Sru * New fields for the Dvi widget record
121151497Sru */
122151497Sru
123151497Srutypedef struct {
124151497Sru	/*
125151497Sru	 * resource specifiable items
126151497Sru	 */
127151497Sru	char		*font_map_string;
128151497Sru	unsigned long	foreground;
129151497Sru	unsigned long	background;
130151497Sru	int		requested_page;
131151497Sru	int		last_page;
132151497Sru	XFontStruct	*default_font;
133151497Sru	FILE		*file;
134151497Sru	Boolean		noPolyText;
135151497Sru	Boolean		seek;		/* file is "seekable" */
136151497Sru	int		default_resolution;
137151497Sru	/*
138151497Sru 	 * private state
139151497Sru 	 */
140151497Sru	FILE		*tmpFile;	/* used when reading stdin */
141151497Sru	char		readingTmp;	/* reading now from tmp */
142151497Sru	char		ungot;		/* have ungetc'd a char */
143151497Sru	GC		normal_GC;
144151497Sru	GC		fill_GC;
145151497Sru	DviFileMap	*file_map;
146151497Sru	DviFontList	*fonts;
147151497Sru	DviFontMap	*font_map;
148151497Sru	int		current_page;
149151497Sru	int		font_size;
150151497Sru	int		font_number;
151151497Sru	DeviceFont	*device_font;
152151497Sru	int		device_font_number;
153151497Sru	Device		*device;
154151497Sru	int		native;
155151497Sru	int		device_resolution;
156151497Sru	int		display_resolution;
157151497Sru	int		paperlength;
158151497Sru	int		paperwidth;
159151497Sru	double		scale_factor;	/* display res / device res */
160151497Sru	int		sizescale;
161151497Sru	int		line_thickness;
162151497Sru	int		line_width;
163151497Sru
164151497Sru#define DVI_FILL_MAX 1000
165151497Sru
166151497Sru	int		fill;
167151497Sru#define DVI_FILL_WHITE 0
168151497Sru#define DVI_FILL_GRAY 1
169151497Sru#define DVI_FILL_BLACK 2
170151497Sru	int		fill_type;
171151497Sru	Pixmap		gray[8];
172151497Sru	int		backing_store;
173151497Sru	XFontStruct	*font;
174151497Sru	int		display_enable;
175151497Sru	struct ExposedExtents {
176151497Sru	    int x1, y1, x2, y2;
177151497Sru	}		extents;
178151497Sru	DviState	*state;
179151497Sru	DviCharCache	cache;
180151497Sru	int		text_x_width;
181151497Sru	int		text_device_width;
182151497Sru	int		word_flag;
183151497Sru} DviPart;
184151497Sru
185151497Sruint DviGetAndPut(DviWidget, int *);
186151497Sru#define DviGetIn(dw,cp)\
187151497Sru    (dw->dvi.tmpFile ? (\
188151497Sru	DviGetAndPut (dw, cp) \
189151497Sru    ) :\
190151497Sru	(*cp = getc (dw->dvi.file))\
191151497Sru)
192151497Sru
193151497Sru#define DviGetC(dw, cp)\
194151497Sru    (dw->dvi.readingTmp ? (\
195151497Sru	((*cp = getc (dw->dvi.tmpFile)) == EOF) ? (\
196151497Sru	    fseek (dw->dvi.tmpFile, 0l, 2),\
197151497Sru	    (dw->dvi.readingTmp = 0),\
198151497Sru	    DviGetIn (dw,cp)\
199151497Sru	) : (\
200151497Sru	    *cp\
201151497Sru	)\
202151497Sru    ) : (\
203151497Sru	DviGetIn(dw,cp)\
204151497Sru    )\
205151497Sru)
206151497Sru
207151497Sru#define DviUngetC(dw, c)\
208151497Sru    (dw->dvi.readingTmp ? (\
209151497Sru	ungetc (c, dw->dvi.tmpFile)\
210151497Sru    ) : ( \
211151497Sru	(dw->dvi.ungot = 1),\
212151497Sru	ungetc (c, dw->dvi.file)))
213151497Sru
214151497Sru/*
215151497Sru * Full widget declaration
216151497Sru */
217151497Sru
218151497Srutypedef struct _DviRec {
219151497Sru	CorePart	core;
220151497Sru	DviPart		dvi;
221151497Sru} DviRec;
222151497Sru
223151497Sru#define InheritSaveToFile ((DviSaveProc)_XtInherit)
224151497Sru
225151497SruXFontStruct	*QueryFont (DviWidget, int, int);
226151497Sru
227151497SruDviCharNameMap	*QueryFontMap (DviWidget, int);
228151497Sru
229151497SruDeviceFont	*QueryDeviceFont (DviWidget, int);
230151497Sru
231151497Sruchar *GetWord(DviWidget, char *, int);
232151497Sruchar *GetLine(DviWidget, char *, int);
233151497Sru#endif /* _XtDviP_h */
234