xref: /plan9/sys/src/cmd/gs/src/ttconfig.h (revision 593dc095aefb2a85c828727bbfa9da139a49bdf4)
1 /* Copyright (C) 2003 Aladdin Enterprises.  All rights reserved.
2 
3   This software is provided AS-IS with no warranty, either express or
4   implied.
5 
6   This software is distributed under license and may not be copied,
7   modified or distributed except as expressly authorized under the terms
8   of the license contained in the file LICENSE in this distribution.
9 
10   For more information about licensing, please refer to
11   http://www.ghostscript.com/licensing/. For information on
12   commercial licensing, go to http://www.artifex.com/licensing/ or
13   contact Artifex Software, Inc., 101 Lucas Valley Road #110,
14   San Rafael, CA  94903, U.S.A., +1(415)492-9861.
15 */
16 
17 /* $Id: ttconfig.h,v 1.1 2003/10/01 13:44:56 igor Exp $ */
18 /* Changes after FreeType: cut out the TrueType instruction interpreter. */
19 
20 /*******************************************************************
21  *
22  *  ttconfig.h                                                1.0
23  *
24  *    Configuration settings header file (spec only).
25  *
26  *  Copyright 1996-1998 by
27  *  David Turner, Robert Wilhelm, and Werner Lemberg.
28  *
29  *  This file is part of the FreeType project, and may only be used
30  *  modified and distributed under the terms of the FreeType project
31  *  license, LICENSE.TXT.  By continuing to use, modify, or distribute
32  *  this file you indicate that you have read the license and
33  *  understand and accept it fully.
34  *
35  *  Notes:
36  *
37  *    All the configuration #define statements have been gathered in
38  *    this file to allow easy check and modification.
39  *
40  ******************************************************************/
41 
42 #ifndef TTCONFIG_H
43 #define TTCONFIG_H
44 
45 /* ------------ auto configuration ------------------------------------- */
46 
47 /* Here we include the file ft_conf.h for system dependent stuff.        */
48 /* The specific makefile is responsible for providing the right path to  */
49 /* this file.                                                            */
50 
51 #include "ttconf.h"
52 
53 
54 /* ------------ general debugging -------------------------------------- */
55 
56 /* Define DEBUG if you want the program to output a series of messages   */
57 /* to stderr regarding its behaviour.  Only useful during development.   */
58 
59 /* #define DEBUG */
60 
61 
62 /* ------------ arithmetic and processor support - ttcalc, ttraster ---- */
63 
64 /* Define ONE_COMPLEMENT if this matches your processor's artihmetic.    */
65 /* The default is 2's complement.  1's complement is not supported yet   */
66 /* (and probably never will :-).                                         */
67 
68 /* #define ONE_COMPLEMENT */
69 
70 
71 /* BOUND_CALC isn't needed anymore due to changes in the ttcalc */
72 /* component.  All computations are now bounded.                */
73 
74 
75 /* Define _GNUC_LONG64_ if you want to enable the use of the 'long long' */
76 /* 64-bit type provided by gcc.  Note that:                              */
77 /*                                                                       */
78 /*   1. The type isn't ANSI, and thus will produce many warnings         */
79 /*      during library compilation.                                      */
80 /*                                                                       */
81 /*   2. Though the generated object files are slightly smaller, the      */
82 /*      resulting executables are bigger of about 4Kb! gcc must be       */
83 /*      linking some extra code in there!                                */
84 /*                                                                       */
85 /*   3. There is really no speed gain in doing so (but it may help       */
86 /*      debug the ttcalc component).                                     */
87 /*                                                                       */
88 /* IMPORTANT NOTE: You don't need to define it on 64-bits machines!      */
89 
90 /* #define _GNUC_LONG64_ */
91 
92 
93 /* define BUS_ERROR if your processor is unable to access words that */
94 /* are not aligned to their respective size (i.e. a 4byte dword      */
95 /* beginning at address 3 will result in a bus error on a Sun).      */
96 
97 /* This may speed up a bit some parts of the engine */
98 
99 /* #define BUS_ERROR */
100 
101 
102 /* define ALIGNMENT to your processor/environment preferred alignment */
103 /* size. A value of 8 should work on all current processors, even     */
104 /* 64-bits ones.                                                      */
105 
106 #define ALIGNMENT 8
107 
108 
109 /* ------------ rasterizer configuration ----- ttraster ----------------- */
110 
111 /* Define this if you want to use the 'MulDiv' function from 'ttcalc'.    */
112 /* (It computes (A*B)/C with 64 bits intermediate accuracy.  However, for */
113 /* 99.9% of screen display, this operation can be done directly with      */
114 /* good accuracy, because 'B' is only a 6bit integer.)                    */
115 /*                                                                        */
116 /* Note that some compilers can manage directly 'a*b/c' with intermediate */
117 /* accuracy (GCC can use long longs, for example).  Using the unsecure    */
118 /* definition of MulDiv would then be sufficient.                         */
119 /*                                                                        */
120 /* The SECURE_COMPUTATIONS option is probably a good option for 16 bits   */
121 /* compilers.                                                             */
122 
123 #define SECURE_COMPUTATIONS
124 
125 
126 /* Define this if you want to generate a debug version of the rasterizer. */
127 /* This will progressively draw the glyphs while the computations are     */
128 /* done directly on the graphics screen... (with inverted glyphs)         */
129 /*                                                                        */
130 
131 /* IMPORTANT: This is reserved to developers willing to debug the */
132 /*            rasterizer, which seems working very well in its    */
133 /*            current state...                                    */
134 
135 /* #define DEBUG_RASTER */
136 
137 
138 /* The TrueType specs stipulate that the filled regions delimited by  */
139 /* the contours must be to the right of the drawing orientation.      */
140 /* Unfortunately, a lot of cheapo fonts do not respect this rule.     */
141 /*                                                                    */
142 /* Defining IGNORE_FILL_FLOW builds an engine that manages all cases. */
143 /* Not defining it will only draw 'valid' glyphs & contours.          */
144 
145 #define IGNORE_FILL_FLOW
146 /* We want to draw all kinds of glyphs, even incorrect ones... */
147 
148 
149 
150 
151 /* --------------- automatic setup -- don't touch ------------------ */
152 
153 /* Some systems can't use vfprintf for error messages on stderr; if  */
154 /* HAVE_PRINT_FUNCTION is defined, the Print macro must be supplied  */
155 /* externally (having the same parameters).                          */
156 
157 #ifndef HAVE_PRINT_FUNCTION
158 #define Print( format, ap )  vfprintf( stderr, (format), (ap) )
159 #endif
160 
161 #define FT_BIG_ENDIAN     4321
162 #define FT_LITTLE_ENDIAN  1234
163 
164 #ifdef WORDS_BIGENDIAN
165 #define FT_BYTE_ORDER  FT_BIG_ENDIAN
166 #else
167 #define FT_BYTE_ORDER  FT_LITTLE_ENDIAN
168 #endif
169 
170 #if FT_BYTE_ORDER == FT_BIG_ENDIAN
171 #ifndef BUS_ERROR
172 
173 /* Some big-endian machines that are not alignment-sensitive may   */
174 /* benefit from an easier access to the data found in the TrueType */
175 /* files. (used in ttfile.c)                                       */
176 
177 #define LOOSE_ACCESS
178 
179 #endif /* !BUS_ERROR */
180 #endif /* FT_BYTE_ORDER */
181 
182 /* -------------------- table management configuration ------------ */
183 
184 /* Define TT_CONFIG_THREAD_SAFE if you want to build a thread-safe */
185 /* version of the library.                                         */
186 #undef TT_CONFIG_THREAD_SAFE
187 
188 /* Define TT_CONFIG_REENTRANT if you want to build a re-entrant version */
189 /* of the library.  This flag takes over TT_CONFIG_THREAD_SAFE but it   */
190 /* is highly recommended to leave only one of them defined.             */
191 #undef TT_CONFIG_REENTRANT
192 
193 #if defined(TT_CONFIG_THREAD_SAFE) || defined(TT_CONFIG_REENTRANT)
194 #define TT_CONFIG_THREADS
195 #endif
196 
197 /* Defining none of these two flags produces a single-thread version of */
198 /* the library.                                                         */
199 
200 #undef TT_STATIC_INTERPRETER
201 /* Do not undefine this configuration macro. It is now a default that */
202 /* must be kept in all release builds.                                */
203 
204 #undef TT_STATIC_RASTER
205 /* Define this if you want to generate a static raster.  This makes */
206 /* a non re-entrant version of the scan-line converter, which is    */
207 /* about 10% faster and 50% bigger than an indirect one!            */
208 
209 #define TT_EXTEND_ENGINE
210 /* Undefine this macro if you don't want to generate any extensions to */
211 /* the engine.  This may be useful to detect if a bug comes from the   */
212 /* engine itself or some badly written extension.                      */
213 
214 #endif /* TTCONFIG_H */
215 
216 
217 /* END */
218