File: object.h

package info (click to toggle)
transfig 1%3A3.2.3.d-rel-2
  • links: PTS
  • area: main
  • in suites: woody
  • size: 1,356 kB
  • ctags: 1,637
  • sloc: ansic: 19,456; makefile: 68; sh: 38; csh: 25
file content (325 lines) | stat: -rw-r--r-- 8,313 bytes parent folder | download
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
/*
 * TransFig: Facility for Translating Fig code
 * Copyright (c) 1991 by Micah Beck
 * Parts Copyright (c) 1985-1988 by Supoj Sutanthavibul
 * Parts Copyright (c) 1989-1999 by Brian V. Smith
 *
 * Any party obtaining a copy of these files is granted, free of charge, a
 * full and unrestricted irrevocable, world-wide, paid up, royalty-free,
 * nonexclusive right and license to deal in this software and
 * documentation files (the "Software"), including without limitation the
 * rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons who receive
 * copies from any such party to do so, with the only requirement being
 * that this copyright notice remain intact.
 *
 */

/* for the xpm package */
#ifdef USE_XPM
#include <xpm.h>
#endif

#define	BLACK_COLOR	0
#define	WHITE_COLOR	7

#define		DEFAULT				(-1)

typedef		struct f_point {
			int			x, y;
			struct f_point		*next;
			}
		F_point;

typedef		struct f_pos {
			int			x, y;
			}
		F_pos;

typedef		struct f_arrow {
			int			type;
			int			style;
			double			thickness;
			double			wid;
			double			ht;
			}
		F_arrow;

typedef		struct f_comment {
			char			*comment;
			struct f_comment	*next;
			}
		F_comment;

typedef		struct f_ellipse {
			int			type;
#define					T_ELLIPSE_BY_RAD	1
#define					T_ELLIPSE_BY_DIA	2
#define					T_CIRCLE_BY_RAD		3
#define					T_CIRCLE_BY_DIA		4
			int			style;
			int			thickness;
			int			pen_color;
			int			fill_color;
			int			depth;
			int			pen;
			int			fill_style;
			double			style_val;
			int			direction;
			double			angle;
#define		       			UNFILLED	-1
#define		       			WHITE_FILL	0
#define		       			BLACK_FILL	20
			struct f_pos		center;
			struct f_pos		radiuses;
			struct f_pos		start;
			struct f_pos		end;
			struct f_comment	*comments;
			struct f_ellipse	*next;
			}
		F_ellipse;

typedef		struct f_arc {
			int			type;
#define					T_OPEN_ARC		1
#define					T_PIE_WEDGE_ARC		2
			int			style;
			int			thickness;
			int			pen_color;
			int			fill_color;
			int			depth;
			int			pen;
			int			fill_style;
			double			style_val;
			struct f_arrow		*for_arrow;
			struct f_arrow		*back_arrow;
			int			cap_style;
/* IMPORTANT: everything above this point must be in the same order 
	      for ARC, LINE and SPLINE (LINE has join_style following cap_style */
			int			direction;
			struct {double x, y;}	center;
			struct f_pos		point[3];
			struct f_comment	*comments;
			struct f_arc		*next;
			}
		F_arc;

typedef		struct f_line {
			int			type;
#define					T_POLYLINE	1
#define					T_BOX		2
#define					T_POLYGON	3
#define	                                T_ARC_BOX       4
#define	                                T_PIC_BOX       5 

			int			style;
			int			thickness;
			int			pen_color;
			int			fill_color;
			int			depth;
			int			pen;
 			int			fill_style;
			double			style_val;
			struct f_arrow		*for_arrow;
			struct f_arrow		*back_arrow;
			int			cap_style;
			struct f_point		*points;
/* IMPORTANT: everything above this point must be in the same order 
	      for ARC, LINE and SPLINE (LINE has join_style following cap_style */
 			int			join_style;
			int			radius;	/* for T_ARC_BOX */
		    	struct f_pic   		*pic;
			struct f_comment	*comments;
			struct f_line		*next;
			}
		F_line;

/* for colormap */

#define RED 0
#define GREEN 1
#define BLUE 2

typedef struct f_pic {
    int		    subtype;
#define	P_EPS	0	/* EPS picture type */
#define	P_XBM	1	/* X11 bitmap picture type */
#define	P_XPM	2	/* X11 pixmap (XPM) picture type */
#define	P_GIF	3	/* GIF picture type */
#define	P_JPEG	4	/* JPEG picture type */
#define	P_PCX	5	/* PCX picture type */
#define	P_PPM	6	/* PPM picture type */
#define	P_TIF	7	/* TIFF picture type */
#define	P_PNG	8	/* PNG picture type */
    char            file[256];
    int             flipped;
    unsigned char  *bitmap;
#ifdef USE_XPM
    XpmImage	    xpmimage;		/* for Xpm images */
#endif /* USE_XPM */
    unsigned char   cmap[3][MAXCOLORMAPSIZE]; /* for color files */
    int		    numcols;		/* number of colors in cmap */
    int		    transp;		/* transparent color (-1 if none) for GIFs */
    float	    hw_ratio;
    struct f_pos    bit_size;
    int             pix_rotation, pix_width, pix_height, pix_flipped;
#ifdef V4_0
    struct f_compound *figure; /*ggstemme*/
#endif /* V4_0 */
}
		F_pic;

extern char EMPTY_PIC[];

typedef		struct f_text {
			int			type;
#define					T_LEFT_JUSTIFIED	0
#define					T_CENTER_JUSTIFIED	1
#define					T_RIGHT_JUSTIFIED	2
			int			font;
#define					DEFAULT_FONT		0
#define					ROMAN_FONT		1
#define					BOLD_FONT		2
#define					ITALIC_FONT		3
#define					MODERN_FONT		4
#define					TYPEWRITER_FONT		5
#define					MAX_FONT		5
			double			size;	/* point size */
			int			color;
			int			depth;
			double			angle;	/* in radian */
			int			flags;
#define					RIGID_TEXT	1	
#define					SPECIAL_TEXT	2
#define					PSFONT_TEXT	4
#define					HIDDEN_TEXT	8
			double			height;	/* pixels */
			double			length;	/* pixels */
			int			base_x;
			int			base_y;
			int			pen;
			char			*cstring;
			struct f_comment	*comments;
			struct f_text		*next;
			}
		F_text;

#define MAX_PSFONT	34
#define MAXFONT(T) (psfont_text(T) ? MAX_PSFONT : MAX_FONT)

#define		rigid_text(t) \
			(t->flags == DEFAULT \
				|| (t->flags & RIGID_TEXT))

#define		special_text(t) \
			((t->flags != DEFAULT \
				&& (t->flags & SPECIAL_TEXT)))

#define		psfont_text(t) \
			(t->flags != DEFAULT \
				&& (t->flags & PSFONT_TEXT))

#define		hidden_text(t) \
			(t->flags != DEFAULT \
				&& (t->flags & HIDDEN_TEXT))

typedef		struct f_control {
			double			lx, ly, rx, ry;
			          /* used by older versions*/
			struct f_control	*next;
			double                  s;
			         /* used by 3.2 version */
			}
		F_control;

#define		int_spline(s)		(s->type & 0x2)
#define         x_spline(s)	        (s->type & 0x4)
#define		approx_spline(s)	(!(int_spline(s)|x_spline(s)))
#define		closed_spline(s)	(s->type & 0x1)
#define		open_spline(s)		(!(s->type & 0x1))


#define S_SPLINE_ANGULAR 0.0
#define S_SPLINE_APPROX 1.0
#define S_SPLINE_INTERP (-1.0)


typedef		struct f_spline {
			int			type;
#define					T_OPEN_APPROX		0
#define					T_CLOSED_APPROX		1
#define					T_OPEN_INTERPOLATED	2
#define					T_CLOSED_INTERPOLATED	3
#define                                 T_OPEN_XSPLINE          4
#define                                 T_CLOSED_XSPLINE        5

			int			style;
			int			thickness;
			int			pen_color;
			int			fill_color;
			int			depth;
			int			pen;
			int			fill_style;
			double			style_val;
			struct f_arrow		*for_arrow;
			struct f_arrow		*back_arrow;
			int			cap_style;
			struct f_point		*points;
/* IMPORTANT: everything above this point must be in the same order 
	      for ARC, LINE and SPLINE (LINE has join_style following cap_style */

			struct f_control	*controls;
			struct f_comment	*comments;
			struct f_spline		*next;
			}
		F_spline;

typedef		struct f_compound {
			struct f_pos		nwcorner;
			struct f_pos		secorner;
			struct f_line		*lines;
			struct f_ellipse	*ellipses;
			struct f_spline		*splines;
			struct f_text		*texts;
			struct f_arc		*arcs;
			struct f_compound	*compounds;
			struct f_comment	*comments;
			struct f_compound	*next;
			}
		F_compound;

#define		ARROW_SIZE		sizeof(struct f_arrow)
#define		POINT_SIZE		sizeof(struct f_point)
#define		CONTROL_SIZE		sizeof(struct f_control)
#define		ELLOBJ_SIZE		sizeof(struct f_ellipse)
#define		ARCOBJ_SIZE		sizeof(struct f_arc)
#define		LINOBJ_SIZE		sizeof(struct f_line)
#define		PIC_SIZE		sizeof(struct f_pic)
#define		TEXOBJ_SIZE		sizeof(struct f_text)
#define		SPLOBJ_SIZE		sizeof(struct f_spline)
#define		COMOBJ_SIZE		sizeof(struct f_compound)
#define		COMMENT_SIZE		sizeof(struct f_comment)

/**********************  object codes  **********************/

#define		O_COLOR_DEF		0
#define		O_ELLIPSE		1
#define		O_POLYLINE		2
#define		O_SPLINE		3
#define		O_TEXT			4
#define		O_ARC			5
#define		O_COMPOUND		6
#define		O_END_COMPOUND		(-O_COMPOUND)
#define		O_ALL_OBJECT		99

/************  object styles (except for f_text)  ************/

#define		SOLID_LINE		0
#define		DASH_LINE		1
#define		DOTTED_LINE		2
#define		DASH_DOT_LINE		3
#define		DASH_2_DOTS_LINE	4
#define		DASH_3_DOTS_LINE	5

#define		CLOSED_PATH		0
#define		OPEN_PATH		1