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