1 | /***************************************************************************/ |
2 | /* */ |
3 | /* fterrors.h */ |
4 | /* */ |
5 | /* FreeType error code handling (specification). */ |
6 | /* */ |
7 | /* Copyright 1996-2002, 2004, 2007, 2013 by */ |
8 | /* David Turner, Robert Wilhelm, and Werner Lemberg. */ |
9 | /* */ |
10 | /* This file is part of the FreeType project, and may only be used, */ |
11 | /* modified, and distributed under the terms of the FreeType project */ |
12 | /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ |
13 | /* this file you indicate that you have read the license and */ |
14 | /* understand and accept it fully. */ |
15 | /* */ |
16 | /***************************************************************************/ |
17 | |
18 | |
19 | /*************************************************************************/ |
20 | /* */ |
21 | /* This special header file is used to define the handling of FT2 */ |
22 | /* enumeration constants. It can also be used to generate error message */ |
23 | /* strings with a small macro trick explained below. */ |
24 | /* */ |
25 | /* I - Error Formats */ |
26 | /* ----------------- */ |
27 | /* */ |
28 | /* The configuration macro FT_CONFIG_OPTION_USE_MODULE_ERRORS can be */ |
29 | /* defined in ftoption.h in order to make the higher byte indicate */ |
30 | /* the module where the error has happened (this is not compatible */ |
31 | /* with standard builds of FreeType 2). See the file `ftmoderr.h' for */ |
32 | /* more details. */ |
33 | /* */ |
34 | /* */ |
35 | /* II - Error Message strings */ |
36 | /* -------------------------- */ |
37 | /* */ |
38 | /* The error definitions below are made through special macros that */ |
39 | /* allow client applications to build a table of error message strings */ |
40 | /* if they need it. The strings are not included in a normal build of */ |
41 | /* FreeType 2 to save space (most client applications do not use */ |
42 | /* them). */ |
43 | /* */ |
44 | /* To do so, you have to define the following macros before including */ |
45 | /* this file: */ |
46 | /* */ |
47 | /* FT_ERROR_START_LIST :: */ |
48 | /* This macro is called before anything else to define the start of */ |
49 | /* the error list. It is followed by several FT_ERROR_DEF calls */ |
50 | /* (see below). */ |
51 | /* */ |
52 | /* FT_ERROR_DEF( e, v, s ) :: */ |
53 | /* This macro is called to define one single error. */ |
54 | /* `e' is the error code identifier (e.g. FT_Err_Invalid_Argument). */ |
55 | /* `v' is the error numerical value. */ |
56 | /* `s' is the corresponding error string. */ |
57 | /* */ |
58 | /* FT_ERROR_END_LIST :: */ |
59 | /* This macro ends the list. */ |
60 | /* */ |
61 | /* Additionally, you have to undefine __FTERRORS_H__ before #including */ |
62 | /* this file. */ |
63 | /* */ |
64 | /* Here is a simple example: */ |
65 | /* */ |
66 | /* { */ |
67 | /* #undef __FTERRORS_H__ */ |
68 | /* #define FT_ERRORDEF( e, v, s ) { e, s }, */ |
69 | /* #define FT_ERROR_START_LIST { */ |
70 | /* #define FT_ERROR_END_LIST { 0, 0 } }; */ |
71 | /* */ |
72 | /* const struct */ |
73 | /* { */ |
74 | /* int err_code; */ |
75 | /* const char* err_msg; */ |
76 | /* } ft_errors[] = */ |
77 | /* */ |
78 | /* #include FT_ERRORS_H */ |
79 | /* } */ |
80 | /* */ |
81 | /*************************************************************************/ |
82 | |
83 | |
84 | #ifndef __FTERRORS_H__ |
85 | #define __FTERRORS_H__ |
86 | |
87 | |
88 | /* include module base error codes */ |
89 | #include FT_MODULE_ERRORS_H |
90 | |
91 | |
92 | /*******************************************************************/ |
93 | /*******************************************************************/ |
94 | /***** *****/ |
95 | /***** SETUP MACROS *****/ |
96 | /***** *****/ |
97 | /*******************************************************************/ |
98 | /*******************************************************************/ |
99 | |
100 | |
101 | #undef FT_NEED_EXTERN_C |
102 | |
103 | |
104 | /* FT_ERR_PREFIX is used as a prefix for error identifiers. */ |
105 | /* By default, we use `FT_Err_'. */ |
106 | /* */ |
107 | #ifndef FT_ERR_PREFIX |
108 | #define FT_ERR_PREFIX FT_Err_ |
109 | #endif |
110 | |
111 | |
112 | /* FT_ERR_BASE is used as the base for module-specific errors. */ |
113 | /* */ |
114 | #ifdef FT_CONFIG_OPTION_USE_MODULE_ERRORS |
115 | |
116 | #ifndef FT_ERR_BASE |
117 | #define FT_ERR_BASE FT_Mod_Err_Base |
118 | #endif |
119 | |
120 | #else |
121 | |
122 | #undef FT_ERR_BASE |
123 | #define FT_ERR_BASE 0 |
124 | |
125 | #endif /* FT_CONFIG_OPTION_USE_MODULE_ERRORS */ |
126 | |
127 | |
128 | /* If FT_ERRORDEF is not defined, we need to define a simple */ |
129 | /* enumeration type. */ |
130 | /* */ |
131 | #ifndef FT_ERRORDEF |
132 | |
133 | #define FT_ERRORDEF( e, v, s ) e = v, |
134 | #define FT_ERROR_START_LIST enum { |
135 | #define FT_ERROR_END_LIST FT_ERR_CAT( FT_ERR_PREFIX, Max ) }; |
136 | |
137 | #ifdef __cplusplus |
138 | #define FT_NEED_EXTERN_C |
139 | extern "C" { |
140 | #endif |
141 | |
142 | #endif /* !FT_ERRORDEF */ |
143 | |
144 | |
145 | /* this macro is used to define an error */ |
146 | #define FT_ERRORDEF_( e, v, s ) \ |
147 | FT_ERRORDEF( FT_ERR_CAT( FT_ERR_PREFIX, e ), v + FT_ERR_BASE, s ) |
148 | |
149 | /* this is only used for <module>_Err_Ok, which must be 0! */ |
150 | #define FT_NOERRORDEF_( e, v, s ) \ |
151 | FT_ERRORDEF( FT_ERR_CAT( FT_ERR_PREFIX, e ), v, s ) |
152 | |
153 | |
154 | #ifdef FT_ERROR_START_LIST |
155 | FT_ERROR_START_LIST |
156 | #endif |
157 | |
158 | |
159 | /* now include the error codes */ |
160 | #include FT_ERROR_DEFINITIONS_H |
161 | |
162 | |
163 | #ifdef FT_ERROR_END_LIST |
164 | FT_ERROR_END_LIST |
165 | #endif |
166 | |
167 | |
168 | /*******************************************************************/ |
169 | /*******************************************************************/ |
170 | /***** *****/ |
171 | /***** SIMPLE CLEANUP *****/ |
172 | /***** *****/ |
173 | /*******************************************************************/ |
174 | /*******************************************************************/ |
175 | |
176 | #ifdef FT_NEED_EXTERN_C |
177 | } |
178 | #endif |
179 | |
180 | #undef FT_ERROR_START_LIST |
181 | #undef FT_ERROR_END_LIST |
182 | |
183 | #undef FT_ERRORDEF |
184 | #undef FT_ERRORDEF_ |
185 | #undef FT_NOERRORDEF_ |
186 | |
187 | #undef FT_NEED_EXTERN_C |
188 | #undef FT_ERR_BASE |
189 | |
190 | /* FT_ERR_PREFIX is needed internally */ |
191 | #ifndef FT2_BUILD_LIBRARY |
192 | #undef FT_ERR_PREFIX |
193 | #endif |
194 | |
195 | #endif /* __FTERRORS_H__ */ |
196 | |
197 | |
198 | /* END */ |
199 | |