Add GNU LGPL headers to all .c .C and .h files
[oweals/cde.git] / cde / programs / dtinfo / dtinfo / src / cgm / cgmcommon.c
1 /*
2  * CDE - Common Desktop Environment
3  *
4  * Copyright (c) 1993-2012, The Open Group. All rights reserved.
5  *
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)
10  * any later version.
11  *
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
16  * details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with these librararies and programs; if not, write
20  * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21  * Floor, Boston, MA 02110-1301 USA
22  */
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 cgm_defs(cgm_s_type *cgm_s)
28 {
29   int i;
30   
31   /* metafile descriptors */
32   cgm_s->vdctype        = VDC_INT;
33   cgm_s->intprec        = 16;
34   cgm_s->realprec.fixed = 1;
35   cgm_s->realprec.exp   = 16;
36   cgm_s->realprec.fract = 16;
37   cgm_s->indexprec      = 16;
38   cgm_s->colprec        = 8;
39   cgm_s->cindprec       = 8;
40   cgm_s->maxcind        = 63;
41   for (i=0; i<3; ++i) {
42     cgm_s->cvextent[i] = 0;
43     cgm_s->cvextent[3 + i] = 255;
44   }
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;
49   }
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;
57   for (i=0; i<2; ++i) {
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;
62   }
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;
71   cgm_s->transp         = ON;
72   for (i=0; i<4; ++i) {
73     cgm_s->cliprect[i].i        = cgm_s->vdcextent[i].i;
74     cgm_s->cliprect[i].r        = cgm_s->vdcextent[i].r;
75   }
76   cgm_s->clipindic      = ON;
77   cgm_s->lbindex        = 1;
78   cgm_s->ltype          = SOLID_L;
79   cgm_s->lwidth.r       = 0.001;
80   cgm_s->lwidth.i       = 33;
81   cgm_s->lwidth.s       = 1.0;
82   for (i=0; i<3; ++i) cgm_s->lcolr[i] = cgm_s->cvextent[i];
83   cgm_s->lcolr[3]       = 1;
84   cgm_s->mbindex        = 1;
85   cgm_s->mtype          = 3;
86   cgm_s->msize.r        = 0.01; /* unused in XLib */
87   cgm_s->msize.i        = 5; /* XLib sepcific */
88   cgm_s->msize.s        = 1.0;
89   for (i=0; i<3; ++i) cgm_s->mcolr[i] = cgm_s->cvextent[i];
90   cgm_s->mcolr[3]       = 1;
91   cgm_s->tbindex        = 1;
92   cgm_s->tfindex        = 1;
93   cgm_s->tprec          = STRING_P;
94   cgm_s->cexpfac        = 1.0;
95   cgm_s->cspace         = 0.0;
96   for (i=0; i<3; ++i) cgm_s->tcolr[i] = cgm_s->cvextent[i];
97   cgm_s->tcolr[3]       = 1;
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;
117   cgm_s->patindex       = 1;
118   cgm_s->edbindex       = 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];
124   cgm_s->ecolr[3]       = 1;
125   cgm_s->evis           = OFF;
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;
129   }
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;
134   }
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");
138     return(0);
139   }
140   for (i=0; i<NO_ASPSF; ++i) cgm_s->aspsflags[i] = F_INDIV;
141   
142   return(1);
143 }
144 /* this routine sets one cgm state equal to another */
145 cgm_assign(cgm_s_type *cgm_1, cgm_s_type *cgm_2)
146 {
147   int i;
148   
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];
160   }
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];
165   }
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;
176   }
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;
188   }
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;
237   }
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;
243   }
244   if (cgm_2->maxcind < cgm_1->maxcind) {
245     if (cgm_2->coltab) {
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");
250         return(0);
251       } 
252     } else {
253       if (!(cgm_2->coltab =
254             (int *) malloc(
255                            3 * sizeof(int) * (cgm_1->maxcind + 1)))) {
256         burp(stderr, "couldn't allocate mem for coltab\n");
257         return(0);
258       }
259     }
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];
263   }
264   cgm_2->maxcind                = cgm_1->maxcind;
265   for (i=0; i<NO_ASPSF; ++i) cgm_2->aspsflags[i] = cgm_1->aspsflags[i];
266   
267   return(1);
268 }