Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4680 | right-hear | 1 | /***************************************************************************/ |
2 | /* */ |
||
3 | /* fterrors.h */ |
||
4 | /* */ |
||
5 | /* FreeType error code handling (specification). */ |
||
6 | /* */ |
||
7 | /* Copyright 1996-2001, 2002, 2004, 2007 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). You can then use the macro */ |
||
32 | /* FT_ERROR_BASE macro to extract the generic error code from an */ |
||
33 | /* FT_Error value. */ |
||
34 | /* */ |
||
35 | /* */ |
||
36 | /* II - Error Message strings */ |
||
37 | /* -------------------------- */ |
||
38 | /* */ |
||
39 | /* The error definitions below are made through special macros that */ |
||
40 | /* allow client applications to build a table of error message strings */ |
||
41 | /* if they need it. The strings are not included in a normal build of */ |
||
42 | /* FreeType 2 to save space (most client applications do not use */ |
||
43 | /* them). */ |
||
44 | /* */ |
||
45 | /* To do so, you have to define the following macros before including */ |
||
46 | /* this file: */ |
||
47 | /* */ |
||
48 | /* FT_ERROR_START_LIST :: */ |
||
49 | /* This macro is called before anything else to define the start of */ |
||
50 | /* the error list. It is followed by several FT_ERROR_DEF calls */ |
||
51 | /* (see below). */ |
||
52 | /* */ |
||
53 | /* FT_ERROR_DEF( e, v, s ) :: */ |
||
54 | /* This macro is called to define one single error. */ |
||
55 | /* `e' is the error code identifier (e.g. FT_Err_Invalid_Argument). */ |
||
56 | /* `v' is the error numerical value. */ |
||
57 | /* `s' is the corresponding error string. */ |
||
58 | /* */ |
||
59 | /* FT_ERROR_END_LIST :: */ |
||
60 | /* This macro ends the list. */ |
||
61 | /* */ |
||
62 | /* Additionally, you have to undefine __FTERRORS_H__ before #including */ |
||
63 | /* this file. */ |
||
64 | /* */ |
||
65 | /* Here is a simple example: */ |
||
66 | /* */ |
||
67 | /* { */ |
||
68 | /* #undef __FTERRORS_H__ */ |
||
69 | /* #define FT_ERRORDEF( e, v, s ) { e, s }, */ |
||
70 | /* #define FT_ERROR_START_LIST { */ |
||
71 | /* #define FT_ERROR_END_LIST { 0, 0 } }; */ |
||
72 | /* */ |
||
73 | /* const struct */ |
||
74 | /* { */ |
||
75 | /* int err_code; */ |
||
76 | /* const char* err_msg; */ |
||
77 | /* } ft_errors[] = */ |
||
78 | /* */ |
||
79 | /* #include FT_ERRORS_H */ |
||
80 | /* } */ |
||
81 | /* */ |
||
82 | /*************************************************************************/ |
||
83 | |||
84 | |||
85 | #ifndef __FTERRORS_H__ |
||
86 | #define __FTERRORS_H__ |
||
87 | |||
88 | |||
89 | /* include module base error codes */ |
||
90 | #include FT_MODULE_ERRORS_H |
||
91 | |||
92 | |||
93 | /*******************************************************************/ |
||
94 | /*******************************************************************/ |
||
95 | /***** *****/ |
||
96 | /***** SETUP MACROS *****/ |
||
97 | /***** *****/ |
||
98 | /*******************************************************************/ |
||
99 | /*******************************************************************/ |
||
100 | |||
101 | |||
102 | #undef FT_NEED_EXTERN_C |
||
103 | |||
104 | #undef FT_ERR_XCAT |
||
105 | #undef FT_ERR_CAT |
||
106 | |||
107 | #define FT_ERR_XCAT( x, y ) x ## y |
||
108 | #define FT_ERR_CAT( x, y ) FT_ERR_XCAT( x, y ) |
||
109 | |||
110 | |||
111 | /* FT_ERR_PREFIX is used as a prefix for error identifiers. */ |
||
112 | /* By default, we use `FT_Err_'. */ |
||
113 | /* */ |
||
114 | #ifndef FT_ERR_PREFIX |
||
115 | #define FT_ERR_PREFIX FT_Err_ |
||
116 | #endif |
||
117 | |||
118 | |||
119 | /* FT_ERR_BASE is used as the base for module-specific errors. */ |
||
120 | /* */ |
||
121 | #ifdef FT_CONFIG_OPTION_USE_MODULE_ERRORS |
||
122 | |||
123 | #ifndef FT_ERR_BASE |
||
124 | #define FT_ERR_BASE FT_Mod_Err_Base |
||
125 | #endif |
||
126 | |||
127 | #else |
||
128 | |||
129 | #undef FT_ERR_BASE |
||
130 | #define FT_ERR_BASE 0 |
||
131 | |||
132 | #endif /* FT_CONFIG_OPTION_USE_MODULE_ERRORS */ |
||
133 | |||
134 | |||
135 | /* If FT_ERRORDEF is not defined, we need to define a simple */ |
||
136 | /* enumeration type. */ |
||
137 | /* */ |
||
138 | #ifndef FT_ERRORDEF |
||
139 | |||
140 | #define FT_ERRORDEF( e, v, s ) e = v, |
||
141 | #define FT_ERROR_START_LIST enum { |
||
142 | #define FT_ERROR_END_LIST FT_ERR_CAT( FT_ERR_PREFIX, Max ) }; |
||
143 | |||
144 | #ifdef __cplusplus |
||
145 | #define FT_NEED_EXTERN_C |
||
146 | extern "C" { |
||
147 | #endif |
||
148 | |||
149 | #endif /* !FT_ERRORDEF */ |
||
150 | |||
151 | |||
152 | /* this macro is used to define an error */ |
||
153 | #define FT_ERRORDEF_( e, v, s ) \ |
||
154 | FT_ERRORDEF( FT_ERR_CAT( FT_ERR_PREFIX, e ), v + FT_ERR_BASE, s ) |
||
155 | |||
156 | /* this is only used for |
||
157 | #define FT_NOERRORDEF_( e, v, s ) \ |
||
158 | FT_ERRORDEF( FT_ERR_CAT( FT_ERR_PREFIX, e ), v, s ) |
||
159 | |||
160 | |||
161 | #ifdef FT_ERROR_START_LIST |
||
162 | FT_ERROR_START_LIST |
||
163 | #endif |
||
164 | |||
165 | |||
166 | /* now include the error codes */ |
||
167 | #include FT_ERROR_DEFINITIONS_H |
||
168 | |||
169 | |||
170 | #ifdef FT_ERROR_END_LIST |
||
171 | FT_ERROR_END_LIST |
||
172 | #endif |
||
173 | |||
174 | |||
175 | /*******************************************************************/ |
||
176 | /*******************************************************************/ |
||
177 | /***** *****/ |
||
178 | /***** SIMPLE CLEANUP *****/ |
||
179 | /***** *****/ |
||
180 | /*******************************************************************/ |
||
181 | /*******************************************************************/ |
||
182 | |||
183 | #ifdef FT_NEED_EXTERN_C |
||
184 | } |
||
185 | #endif |
||
186 | |||
187 | #undef FT_ERROR_START_LIST |
||
188 | #undef FT_ERROR_END_LIST |
||
189 | |||
190 | #undef FT_ERRORDEF |
||
191 | #undef FT_ERRORDEF_ |
||
192 | #undef FT_NOERRORDEF_ |
||
193 | |||
194 | #undef FT_NEED_EXTERN_C |
||
195 | #undef FT_ERR_CONCAT |
||
196 | #undef FT_ERR_BASE |
||
197 | |||
198 | /* FT_KEEP_ERR_PREFIX is needed for ftvalid.h */ |
||
199 | #ifndef FT_KEEP_ERR_PREFIX |
||
200 | #undef FT_ERR_PREFIX |
||
201 | #endif |
||
202 | |||
203 | #endif /* __FTERRORS_H__ */ |
||
204 | |||
205 | |||
206 | /* END */ |