]> git.sesse.net Git - rdpsrv/blob - Xserver/lib/font/Type1/objects.h
f191710e075077181abcd09a9b6e56309374866e
[rdpsrv] / Xserver / lib / font / Type1 / objects.h
1 /* $XConsortium: objects.h,v 1.8 94/03/22 19:08:58 gildea Exp $ */
2 /* Copyright International Business Machines, Corp. 1991
3  * All Rights Reserved
4  * Copyright Lexmark International, Inc. 1991
5  * All Rights Reserved
6  *
7  * License to use, copy, modify, and distribute this software and its
8  * documentation for any purpose and without fee is hereby granted,
9  * provided that the above copyright notice appear in all copies and that
10  * both that copyright notice and this permission notice appear in
11  * supporting documentation, and that the name of IBM or Lexmark not be
12  * used in advertising or publicity pertaining to distribution of the
13  * software without specific, written prior permission.
14  *
15  * IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF
16  * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY
17  * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
18  * AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.  THE ENTIRE RISK AS TO THE
19  * QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
20  * OR MAINTAIN, BELONGS TO THE LICENSEE.  SHOULD ANY PORTION OF THE
21  * SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE
22  * ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION.  IN NO EVENT SHALL
23  * IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
24  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
25  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
26  * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
27  * THIS SOFTWARE.
28  */
29 /*SHARED*/
30  
31 /*END SHARED*/
32 /*SHARED*/
33
34 #define   Permanent(obj)    t1_Permanent(obj)
35 #define   Temporary(obj)    t1_Temporary(obj)
36 #define   Destroy(obj)      t1_Destroy(obj)
37 #define   Dup(obj)          t1_Dup(obj)
38 #define   InitImager()      t1_InitImager()
39 #define   TermImager()      t1_TermImager()
40 #define   Pragmatics(f,v)   t1_Pragmatics(f,v)
41 #define   ErrorMsg()        t1_ErrorMsg()
42  
43 struct xobject *t1_Permanent();  /* make an object permanent                 */
44 struct xobject *t1_Temporary();  /* make an object temporary                 */
45 struct xobject *t1_Destroy();    /* destroy an object                        */
46 struct xobject *t1_Dup();     /* duplicate an object                         */
47 void t1_InitImager();         /* initialize TYPE1IMAGER                      */
48 void t1_TermImager();         /* terminate TYPE1IMAGER                       */
49 void t1_Pragmatics();         /* set debug flags, etc.                       */
50 char *t1_ErrorMsg();          /* return last TYPE1IMAGER error message       */
51  
52 /*END SHARED*/
53 /*SHARED*/
54  
55 #define   abort(line)       FatalError(line)
56 #define   Allocate(n,t,s)   t1_Allocate(n,t,s)
57 #define   Free(obj)         t1_Free(obj)
58 #define   NonObjectFree(a)  xiFree(a)
59 #define   Consume           t1_Consume
60 #define   ArgErr(s,o,r)     t1_ArgErr(s,o,r)
61 #define   TypeErr(n,o,e,r)  t1_TypeErr(n,o,e,r)
62 #define   Copy(obj)         t1_Copy(obj)
63 #define   Unique(obj)       t1_Unique(obj)
64  
65 struct xobject *t1_Allocate();    /* allocate memory                         */
66 void t1_Free();               /* free memory                                 */
67 struct xobject *t1_Unique();  /* make a unique temporary copy of an object   */
68 struct xobject *t1_ArgErr();  /* handle argument errors                      */
69 struct xobject *t1_TypeErr(); /* handle 'bad type' argument errors           */
70 void t1_Consume();            /* consume a variable number of arguments      */
71 struct xobject *t1_Copy();    /* make a new copy, not reference bump PNM     */
72  
73 /*END SHARED*/
74 /*SHARED*/
75  
76 #define   ON          (~0)   /* all bits on                                  */
77 #ifndef FALSE
78 #define   FALSE       0      /* handy zero value                             */
79 #endif
80 #ifndef TRUE
81 #define   TRUE        1      /* handy non-zero value                         */
82 #endif
83  
84 #ifndef   NULL
85 #define   NULL        0
86 /*
87 The NULL pointer is system specific.  (Most systems, however, use 0.)
88 TYPE1IMAGER could have its own NULL, independent of the rest of the system,
89 were it not for malloc().  The system call malloc() returns NULL when
90 out of memory.
91 :i1/portibility assumptions/
92 */
93 #endif
94  
95 #ifndef MIN
96 #define   MIN(a,b)    (((a)<(b)) ? a : b)
97 #endif
98 #ifndef MAX
99 #define   MAX(a,b)    (((a)>(b)) ? a : b)
100 #endif
101 #ifndef ABS
102 #define   ABS(a)      (((a)>=0)?(a):-(a))
103 #endif
104
105 /*END SHARED*/
106 /*SHARED*/
107  
108 struct xobject {
109        char type;           /* encoded type of object                        */
110        unsigned char flag;  /* flag byte for temporary object characteristics*/
111        short references;    /* count of pointers to this object
112                                (plus 1 for permanent objects) PNM            */
113 } ;
114  
115 /*END SHARED*/
116 /*SHARED*/
117  
118 #define XOBJ_COMMON      char type; unsigned char flag; short references;
119  
120 /*END SHARED*/
121 /*SHARED*/
122  
123  
124 #define   INVALIDTYPE    0
125 #define   FONTTYPE       1
126 #define   REGIONTYPE     3
127 #define   PICTURETYPE    4
128 #define   SPACETYPE      5
129 #define   LINESTYLETYPE  6
130 #define   EDGETYPE       7
131 #define   STROKEPATHTYPE 8
132 #define   CLUTTYPE       9
133  
134 #define   ISPATHTYPE(type)    ((type)&0x10)  /* all path segments have this bit on */
135 #define   LINETYPE    (0+ISPATHTYPE(ON))
136 #define   CONICTYPE   (1+ISPATHTYPE(ON))
137 #define   BEZIERTYPE  (2+ISPATHTYPE(ON))
138 #define   HINTTYPE    (3+ISPATHTYPE(ON))
139  
140 #define   MOVETYPE    (5+ISPATHTYPE(ON))
141 #define   TEXTTYPE    (6+ISPATHTYPE(ON))
142  
143 /*END SHARED*/
144 /*SHARED*/
145  
146 #define   ISPERMANENT(flag)   ((flag)&0x01)
147 #define   ISIMMORTAL(flag)    ((flag)&0x02)
148  
149 /*END SHARED*/
150 /*SHARED*/
151  
152 #define   PRESERVE(obj)   if (!ISPERMANENT((obj)->flag)) \
153    (obj)->references++;
154  
155 /*END SHARED*/
156 /*SHARED*/
157  
158 #define  LONGCOPY(dest,source,bytes) { \
159     register long *p1 = (long *)dest;  register long *p2 = (long *)source; \
160     register int count = (bytes) / sizeof(long); \
161     while (--count >= 0) *p1++ = *p2++; }
162  
163  
164 /*END SHARED*/
165 /*SHARED*/
166  
167 #define   FOLLOWING(p)  ((p)+1)
168  
169 /*END SHARED*/
170 /*SHARED*/
171  
172 #define  TYPECHECK(name, obj, expect, whenBAD, consumables, rettype) { \
173     if (obj->type != expect) { \
174          (Consume)consumables; \
175          return((rettype)TypeErr(name, obj, expect, whenBAD)); \
176     } \
177 }
178  
179 /*END SHARED*/
180 /*SHARED*/
181  
182 #define  ARGCHECK(test,msg,obj,whenBAD,consumables,rettype) { \
183     if (test) { \
184         (Consume)consumables; \
185         return((rettype)ArgErr(msg, obj, whenBAD)); \
186     } \
187 }
188  
189 /*END SHARED*/
190 /*SHARED*/
191  
192 /* Changed use of Dup() below to Temporary(Copy()) because Dup() does not
193    necessarily return a Unique Copy anymore! 3-26-91 */
194 #define  TYPENULLCHECK(name, obj, expect, whenBAD, consumables,rettype) \
195     if (obj == NULL) { \
196         (Consume)consumables; \
197         if (whenBAD != NULL && ISPERMANENT(whenBAD->flag)) \
198               return((rettype)Temporary(Copy(whenBAD))); \
199         else  return((rettype)whenBAD); \
200     } else { \
201         if (obj->type != expect) { \
202              (Consume)consumables; \
203              return((rettype)TypeErr(name, obj, expect, whenBAD)); \
204         } \
205     }
206 /*END SHARED*/
207 /*SHARED*/
208  
209 #define  MAKECONSUME(obj,stmt)  { if (!ISPERMANENT(obj->flag)) stmt; }
210  
211 /*END SHARED*/
212 /*SHARED*/
213  
214 #define MAKEUNIQUE(obj,stmt) ( ( (obj)->references > 1 ) ? stmt : obj )
215  
216 /*END SHARED*/
217 /*SHARED*/
218 #define IfTrace0(condition,model)
219 #define IfTrace1(condition,model,arg0)
220 #define IfTrace2(condition,model,arg0,arg1)
221 #define IfTrace3(condition,model,arg0,arg1,arg2)
222 #define IfTrace4(condition,model,arg0,arg1,arg2,arg3)
223 #define IfTrace5(condition,model,arg0,arg1,arg2,arg3,arg4)
224 #define IfTrace6(condition,model,arg0,arg1,arg2,arg3,arg4,arg5)
225  
226  
227 void Trace0();
228 char *Trace1(),*Trace2(),*Trace3(),*Trace4(),*Trace5(),*Trace6();
229  
230 #ifdef GLOBALS
231  
232 #define   extern
233 #define   INITIALIZED(value)      = value
234  
235 #else
236  
237 #define   INITIALIZED(value)
238  
239 #endif
240  
241 extern char MustCheckArgs  INITIALIZED(TRUE);
242 extern char MustTraceCalls INITIALIZED(FALSE);
243 extern char MustCrash      INITIALIZED(TRUE);
244 extern char InternalTrace  INITIALIZED(TRUE);
245 extern char LineIOTrace    INITIALIZED(TRUE);
246  
247 extern char ProcessHints   INITIALIZED(TRUE);
248  
249 extern char SaveFontPaths  INITIALIZED(TRUE);
250  
251 extern short CRASTERCompressionType   INITIALIZED(1);
252  
253 extern char ConicDebug     INITIALIZED(0);
254 extern char LineDebug      INITIALIZED(0);
255 extern char RegionDebug    INITIALIZED(0);
256 extern char PathDebug      INITIALIZED(0);
257 extern char FontDebug      INITIALIZED(0);
258 extern char SpaceDebug     INITIALIZED(0);
259 extern char StrokeDebug    INITIALIZED(0);
260 extern char MemoryDebug    INITIALIZED(0);
261 extern char HintDebug      INITIALIZED(0);
262 extern char ImageDebug     INITIALIZED(0);
263 extern char OffPageDebug   INITIALIZED(0);
264  
265 extern short CachedChars   INITIALIZED(0x7FFF);
266 extern short CachedFonts   INITIALIZED(0x7FFF);
267 extern int   CacheBLimit   INITIALIZED(12500);
268 extern char  Continuity    INITIALIZED(2);
269  
270 #ifdef extern
271 #undef extern
272 #endif
273  
274 /*
275 We define other routines formatting parameters
276 */
277 #define    DumpArea(area)    t1_DumpArea(area)
278 #define    DumpText(text)    t1_DumpText(text)
279 #define    DumpPath(path)    t1_DumpPath(path)
280 #define    DumpSpace(space)  t1_DumpSpace(space)
281 #define    DumpEdges(e)      t1_DumpEdges(e)
282 #define    FormatFP(s,p)     t1_FormatFP(s,p)
283  
284 void t1_DumpArea();           /* dump a region structure                     */
285 void t1_DumpText();           /* dump a textpath structure                   */
286 void t1_DumpPath();           /* dump a path list                            */
287 void t1_DumpSpace();          /* dump a coordinate space structure           */
288 void t1_DumpEdges();          /* dump a region's edge list                   */
289 void t1_FormatFP();           /* dump a format a "fractpel" coordinate       */
290  
291 /*END SHARED*/