2 * CDE - Common Desktop Environment
4 * Copyright (c) 1993-2012, The Open Group. All rights reserved.
6 * These libraries and programs are free software; you can
7 * redistribute them and/or modify them under the terms of the GNU
8 * Lesser General Public License as published by the Free Software
9 * Foundation; either version 2 of the License, or (at your option)
12 * These libraries and programs are distributed in the hope that
13 * they will be useful, but WITHOUT ANY WARRANTY; without even the
14 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU Lesser General Public License for more
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with these libraries and programs; if not, write
20 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21 * Floor, Boston, MA 02110-1301 USA
23 /* $XConsortium: cgmcommon.c /main/3 1996/06/11 16:09:35 cde-hal $ */
24 /* this is the module of common routines for the CGM interpreter */
25 #include "cgm.h" /* our defs */
26 /* this routine sets a cgm state variable to its defaults */
27 int cgm_defs(cgm_s_type *cgm_s)
31 /* metafile descriptors */
32 cgm_s->vdctype = VDC_INT;
34 cgm_s->realprec.fixed = 1;
35 cgm_s->realprec.exp = 16;
36 cgm_s->realprec.fract = 16;
37 cgm_s->indexprec = 16;
42 cgm_s->cvextent[i] = 0;
43 cgm_s->cvextent[3 + i] = 255;
45 for (i=0; i<MAX_FONTS; ++i) {
46 cgm_s->fontlist[i] = NULL;
47 cgm_s->chartype[i] = 0;
48 cgm_s->charlist[i] = NULL;
50 cgm_s->charannounce = 0;
51 /* picture descriptors */
52 cgm_s->scalmode = ABSTRACT_S;
53 cgm_s->colselmode = I_C_M;
54 cgm_s->lwidspecmode = SCALED;
55 cgm_s->marksizspecmode= SCALED;
56 cgm_s->edwidspecmode = SCALED;
58 cgm_s->vdcextent[i].i = 0;
59 cgm_s->vdcextent[i].r = 0.0;
60 cgm_s->vdcextent[i + 2].i = 32767;
61 cgm_s->vdcextent[i + 2].r = 1.0;
63 for (i=0; i<3; ++i) cgm_s->backcolr[i] = cgm_s->cvextent[3 + i];
64 /* control elements */
65 cgm_s->vdcintprec = 16;
66 cgm_s->vdcrprec.fixed = 1;
67 cgm_s->vdcrprec.exp = 16;
68 cgm_s->vdcrprec.fract = 16;
69 for (i=0; i<3; ++i) cgm_s->auxcolr[i] = cgm_s->cvextent[i];
70 cgm_s->auxcolr[3] = 1;
73 cgm_s->cliprect[i].i = cgm_s->vdcextent[i].i;
74 cgm_s->cliprect[i].r = cgm_s->vdcextent[i].r;
76 cgm_s->clipindic = ON;
78 cgm_s->ltype = SOLID_L;
79 cgm_s->lwidth.r = 0.001;
81 cgm_s->lwidth.s = 1.0;
82 for (i=0; i<3; ++i) cgm_s->lcolr[i] = cgm_s->cvextent[i];
86 cgm_s->msize.r = 0.01; /* unused in XLib */
87 cgm_s->msize.i = 5; /* XLib sepcific */
89 for (i=0; i<3; ++i) cgm_s->mcolr[i] = cgm_s->cvextent[i];
93 cgm_s->tprec = STRING_P;
96 for (i=0; i<3; ++i) cgm_s->tcolr[i] = cgm_s->cvextent[i];
98 cgm_s->cheight.r = 0.01; /* unused in XLib */
99 cgm_s->cheight.i = 10; /* XLib specific */
100 cgm_s->corient[0].i = 0;
101 cgm_s->corient[0].r = 0.0;
102 cgm_s->corient[1].i = 1;
103 cgm_s->corient[1].r = 1.0;
104 cgm_s->corient[2].i = 1;
105 cgm_s->corient[2].r = 1.0;
106 cgm_s->corient[3].i = 0;
107 cgm_s->corient[3].r = 0.0;
108 cgm_s->tpath = RIGHT_P;
109 cgm_s->talign[0].i = NORMAL_H;
110 cgm_s->talign[1].i = NORMAL_V;
111 cgm_s->csetindex = 1;
112 cgm_s->fillbindex = 1;
113 cgm_s->intstyle = HOLLOW_F;
114 for (i=0; i<3; ++i) cgm_s->fillcolr[i] = cgm_s->cvextent[i];
115 cgm_s->fillcolr[3] = 1;
116 cgm_s->hatchindex = 1;
119 cgm_s->etype = SOLID_L;
120 cgm_s->ewidth.r = 0.001;
121 cgm_s->ewidth.i = 33;
122 cgm_s->ewidth.s = 1.0;
123 for (i=0; i<3; ++i) cgm_s->ecolr[i] = cgm_s->cvextent[i];
126 for (i=0; i<2; ++i) {
127 cgm_s->fillref[i].i = cgm_s->vdcextent[i].i;
128 cgm_s->fillref[i].r = cgm_s->vdcextent[i].r;
130 cgm_s->pattab = NULL;
131 for (i=0; i<4; ++i) {
132 cgm_s->patsize[i].i = cgm_s->vdcextent[i].i;
133 cgm_s->patsize[i].r = cgm_s->vdcextent[i].r;
135 if (!(cgm_s->coltab = (int *)
136 malloc(3 * sizeof(int) * (cgm_s->maxcind + 1)))) {
137 burp(stderr, "couldn't get memory for def colour table\n");
140 for (i=0; i<NO_ASPSF; ++i) cgm_s->aspsflags[i] = F_INDIV;
144 /* this routine sets one cgm state equal to another */
145 int cgm_assign(cgm_s_type *cgm_1, cgm_s_type *cgm_2)
149 /* metafile descriptors */
150 cgm_2->vdctype = cgm_1->vdctype;
151 cgm_2->intprec = cgm_1->intprec;
152 cgm_2->realprec.fixed = cgm_1->realprec.fixed;
153 cgm_2->realprec.exp = cgm_1->realprec.exp;
154 cgm_2->realprec.fract = cgm_1->realprec.fract;
155 cgm_2->indexprec = cgm_1->indexprec;
156 cgm_2->colprec = cgm_1->colprec;
157 cgm_2->cindprec = cgm_1->cindprec;
158 for (i=0; i<6; ++i) {
159 cgm_2->cvextent[i] = cgm_1->cvextent[i];
161 for (i=0; i<MAX_FONTS; ++i) {
162 cgm_2->fontlist[i] = cgm_1->fontlist[i];
163 cgm_2->chartype[i] = cgm_1->chartype[i];
164 cgm_2->charlist[i] = cgm_1->charlist[i];
166 cgm_2->charannounce = cgm_1->charannounce;
167 /* picture descriptors */
168 cgm_2->scalmode = cgm_1->scalmode;
169 cgm_2->colselmode = cgm_1->colselmode;
170 cgm_2->lwidspecmode = cgm_1->lwidspecmode;
171 cgm_2->marksizspecmode= cgm_1->marksizspecmode;
172 cgm_2->edwidspecmode = cgm_1->edwidspecmode;
173 for (i=0; i<4; ++i) {
174 cgm_2->vdcextent[i].i = cgm_1->vdcextent[i].i;
175 cgm_2->vdcextent[i].r = cgm_1->vdcextent[i].r;
177 for (i=0; i<3; ++i) cgm_2->backcolr[i] = cgm_1->backcolr[i];
178 /* control elements */
179 cgm_2->vdcintprec = cgm_1->vdcintprec;
180 cgm_2->vdcrprec.fixed = cgm_1->vdcrprec.fixed;
181 cgm_2->vdcrprec.exp = cgm_1->vdcrprec.exp;
182 cgm_2->vdcrprec.fract = cgm_1->vdcrprec.fract;
183 for (i=0; i<4; ++i) cgm_2->auxcolr[i] = cgm_1->auxcolr[i];
184 cgm_2->transp = cgm_1->transp;
185 for (i=0; i<4; ++i) {
186 cgm_2->cliprect[i].i = cgm_1->cliprect[i].i;
187 cgm_2->cliprect[i].r = cgm_1->cliprect[i].r;
189 cgm_2->clipindic = cgm_1->clipindic;
190 cgm_2->lbindex = cgm_1->lbindex;
191 cgm_2->ltype = cgm_1->ltype;
192 cgm_2->lwidth.r = cgm_1->lwidth.r;
193 cgm_2->lwidth.i = cgm_1->lwidth.i;
194 cgm_2->lwidth.s = cgm_1->lwidth.s;
195 for (i=0; i<4; ++i) cgm_2->lcolr[i] = cgm_1->lcolr[i];
196 cgm_2->mbindex = cgm_1->mbindex;
197 cgm_2->mtype = cgm_1->mtype;
198 cgm_2->msize.r = cgm_1->msize.r;
199 cgm_2->msize.i = cgm_1->msize.i;
200 cgm_2->msize.s = cgm_1->msize.s;
201 for (i=0; i<4; ++i) cgm_2->mcolr[i] = cgm_1->mcolr[i];
202 cgm_2->tbindex = cgm_1->tbindex;
203 cgm_2->tfindex = cgm_1->tfindex;
204 cgm_2->tprec = cgm_1->tprec;
205 cgm_2->cexpfac = cgm_1->cexpfac;
206 cgm_2->cspace = cgm_1->cspace;
207 for (i=0; i<4; ++i) cgm_2->tcolr[i] = cgm_1->tcolr[i];
208 cgm_2->cheight.r = cgm_1->cheight.r;
209 cgm_2->cheight.i = cgm_1->cheight.i;
210 cgm_2->corient[0].i = cgm_1->corient[0].i;
211 cgm_2->corient[0].r = cgm_1->corient[0].r;
212 cgm_2->corient[1].i = cgm_1->corient[1].i;
213 cgm_2->corient[1].r = cgm_1->corient[1].r;
214 cgm_2->corient[2].i = cgm_1->corient[2].i;
215 cgm_2->corient[2].r = cgm_1->corient[2].r;
216 cgm_2->corient[3].i = cgm_1->corient[3].i;
217 cgm_2->corient[3].r = cgm_1->corient[3].r;
218 cgm_2->tpath = cgm_1->tpath;
219 cgm_2->talign[0].i = cgm_1->talign[0].i;
220 cgm_2->talign[1].i = cgm_1->talign[1].i;
221 cgm_2->csetindex = cgm_1->csetindex;
222 cgm_2->fillbindex = cgm_1->fillbindex;
223 cgm_2->intstyle = cgm_1->intstyle;
224 for (i=0; i<4; ++i) cgm_2->fillcolr[i] = cgm_1->fillcolr[i];
225 cgm_2->hatchindex = cgm_1->hatchindex;
226 cgm_2->patindex = cgm_1->patindex;
227 cgm_2->edbindex = cgm_1->edbindex;
228 cgm_2->etype = cgm_1->etype;
229 cgm_2->ewidth.r = cgm_1->ewidth.r;
230 cgm_2->ewidth.i = cgm_1->ewidth.i;
231 cgm_2->ewidth.s = cgm_1->ewidth.s;
232 for (i=0; i<4; ++i) cgm_2->ecolr[i] = cgm_1->ecolr[i];
233 cgm_2->evis = cgm_1->evis;
234 for (i=0; i<2; ++i) {
235 cgm_2->fillref[i].i = cgm_1->fillref[i].i;
236 cgm_2->fillref[i].r = cgm_1->fillref[i].r;
238 if (cgm_2->pattab) free(cgm_2->pattab); /* fix later */
239 cgm_2->pattab = cgm_1->pattab;
240 for (i=0; i<4; ++i) {
241 cgm_2->patsize[i].i = cgm_1->patsize[i].i;
242 cgm_2->patsize[i].r = cgm_1->patsize[i].r;
244 if (cgm_2->maxcind < cgm_1->maxcind) {
246 if (!(cgm_2->coltab =
247 (int *) realloc(cgm_2->coltab,
248 3 * sizeof(int) * (cgm_1->maxcind + 1)))) {
249 burp(stderr, "couldn't reallocate mem for coltab\n");
253 if (!(cgm_2->coltab =
255 3 * sizeof(int) * (cgm_1->maxcind + 1)))) {
256 burp(stderr, "couldn't allocate mem for coltab\n");
260 } /* have enough memory now */
261 for (i=0; i<((cgm_1->maxcind + 1) * 3); ++i) {
262 cgm_2->coltab[i] = cgm_1->coltab[i];
264 cgm_2->maxcind = cgm_1->maxcind;
265 for (i=0; i<NO_ASPSF; ++i) cgm_2->aspsflags[i] = cgm_1->aspsflags[i];