forked from minhngoc25a/freetype2
227 lines
11 KiB
C
227 lines
11 KiB
C
/***************************************************************************/
|
|
/* */
|
|
/* fterrors.h */
|
|
/* */
|
|
/* FreeType error code handling (specification). */
|
|
/* */
|
|
/* Copyright 1996-2016 by */
|
|
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
|
/* */
|
|
/* This file is part of the FreeType project, and may only be used, */
|
|
/* modified, and distributed under the terms of the FreeType project */
|
|
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
|
|
/* this file you indicate that you have read the license and */
|
|
/* understand and accept it fully. */
|
|
/* */
|
|
/***************************************************************************/
|
|
|
|
|
|
/*************************************************************************/
|
|
/* */
|
|
/* <Section> */
|
|
/* error_enumerations */
|
|
/* */
|
|
/* <Title> */
|
|
/* Error Enumerations */
|
|
/* */
|
|
/* <Abstract> */
|
|
/* How to handle errors and error strings. */
|
|
/* */
|
|
/* <Description> */
|
|
/* The header file `fterrors.h' (which is automatically included by */
|
|
/* `freetype.h' defines the handling of FreeType's enumeration */
|
|
/* constants. It can also be used to generate error message strings */
|
|
/* with a small macro trick explained below. */
|
|
/* */
|
|
/* *Error* *Formats* */
|
|
/* */
|
|
/* The configuration macro FT_CONFIG_OPTION_USE_MODULE_ERRORS can be */
|
|
/* defined in `ftoption.h' in order to make the higher byte indicate */
|
|
/* the module where the error has happened (this is not compatible */
|
|
/* with standard builds of FreeType 2, however). See the file */
|
|
/* `ftmoderr.h' for more details. */
|
|
/* */
|
|
/* *Error* *Message* *Strings* */
|
|
/* */
|
|
/* Error definitions are set up with special macros that allow client */
|
|
/* applications to build a table of error message strings. The */
|
|
/* strings are not included in a normal build of FreeType 2 to */
|
|
/* save space (most client applications do not use them). */
|
|
/* */
|
|
/* To do so, you have to define the following macros before including */
|
|
/* this file. */
|
|
/* */
|
|
/* { */
|
|
/* FT_ERROR_START_LIST */
|
|
/* } */
|
|
/* */
|
|
/* This macro is called before anything else to define the start of */
|
|
/* the error list. It is followed by several FT_ERROR_DEF calls. */
|
|
/* */
|
|
/* { */
|
|
/* FT_ERROR_DEF( e, v, s ) */
|
|
/* } */
|
|
/* */
|
|
/* This macro is called to define one single error. `e' is the error */
|
|
/* code identifier (e.g., `Invalid_Argument'), `v' is the error's */
|
|
/* numerical value, and `s' is the corresponding error string. */
|
|
/* */
|
|
/* { */
|
|
/* FT_ERROR_END_LIST */
|
|
/* } */
|
|
/* */
|
|
/* This macro ends the list. */
|
|
/* */
|
|
/* Additionally, you have to undefine `FTERRORS_H_' before #including */
|
|
/* this file. */
|
|
/* */
|
|
/* Here is a simple example. */
|
|
/* */
|
|
/* { */
|
|
/* #undef FTERRORS_H_ */
|
|
/* #define FT_ERRORDEF( e, v, s ) { e, s }, */
|
|
/* #define FT_ERROR_START_LIST { */
|
|
/* #define FT_ERROR_END_LIST { 0, NULL } }; */
|
|
/* */
|
|
/* const struct */
|
|
/* { */
|
|
/* int err_code; */
|
|
/* const char* err_msg; */
|
|
/* } ft_errors[] = */
|
|
/* */
|
|
/* #include FT_ERRORS_H */
|
|
/* } */
|
|
/* */
|
|
/* Note that `FT_Err_Ok' is _not_ defined with `FT_ERRORDEF' but with */
|
|
/* `FT_NOERRORDEF'; it is always zero. */
|
|
/* */
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* In previous FreeType versions we used `__FTERRORS_H__'. However, */
|
|
/* using two successive underscores in a non-system symbol name */
|
|
/* violates the C (and C++) standard, so it was changed to the */
|
|
/* current form. In spite of this, we have to make */
|
|
/* */
|
|
/* #undefine __FTERRORS_H__ */
|
|
/* */
|
|
/* work for backwards compatibility. */
|
|
/* */
|
|
#if !( defined( FTERRORS_H_ ) && defined ( __FTERRORS_H__ ) )
|
|
#define FTERRORS_H_
|
|
#define __FTERRORS_H__
|
|
|
|
|
|
/* include module base error codes */
|
|
#include FT_MODULE_ERRORS_H
|
|
|
|
|
|
/*******************************************************************/
|
|
/*******************************************************************/
|
|
/***** *****/
|
|
/***** SETUP MACROS *****/
|
|
/***** *****/
|
|
/*******************************************************************/
|
|
/*******************************************************************/
|
|
|
|
|
|
#undef FT_NEED_EXTERN_C
|
|
|
|
|
|
/* FT_ERR_PREFIX is used as a prefix for error identifiers. */
|
|
/* By default, we use `FT_Err_'. */
|
|
/* */
|
|
#ifndef FT_ERR_PREFIX
|
|
#define FT_ERR_PREFIX FT_Err_
|
|
#endif
|
|
|
|
|
|
/* FT_ERR_BASE is used as the base for module-specific errors. */
|
|
/* */
|
|
#ifdef FT_CONFIG_OPTION_USE_MODULE_ERRORS
|
|
|
|
#ifndef FT_ERR_BASE
|
|
#define FT_ERR_BASE FT_Mod_Err_Base
|
|
#endif
|
|
|
|
#else
|
|
|
|
#undef FT_ERR_BASE
|
|
#define FT_ERR_BASE 0
|
|
|
|
#endif /* FT_CONFIG_OPTION_USE_MODULE_ERRORS */
|
|
|
|
|
|
/* If FT_ERRORDEF is not defined, we need to define a simple */
|
|
/* enumeration type. */
|
|
/* */
|
|
#ifndef FT_ERRORDEF
|
|
|
|
#define FT_ERRORDEF( e, v, s ) e = v,
|
|
#define FT_ERROR_START_LIST enum {
|
|
#define FT_ERROR_END_LIST FT_ERR_CAT( FT_ERR_PREFIX, Max ) };
|
|
|
|
#ifdef __cplusplus
|
|
#define FT_NEED_EXTERN_C
|
|
extern "C" {
|
|
#endif
|
|
|
|
#endif /* !FT_ERRORDEF */
|
|
|
|
|
|
/* this macro is used to define an error */
|
|
#define FT_ERRORDEF_( e, v, s ) \
|
|
FT_ERRORDEF( FT_ERR_CAT( FT_ERR_PREFIX, e ), v + FT_ERR_BASE, s )
|
|
|
|
/* this is only used for <module>_Err_Ok, which must be 0! */
|
|
#define FT_NOERRORDEF_( e, v, s ) \
|
|
FT_ERRORDEF( FT_ERR_CAT( FT_ERR_PREFIX, e ), v, s )
|
|
|
|
|
|
#ifdef FT_ERROR_START_LIST
|
|
FT_ERROR_START_LIST
|
|
#endif
|
|
|
|
|
|
/* now include the error codes */
|
|
#include FT_ERROR_DEFINITIONS_H
|
|
|
|
|
|
#ifdef FT_ERROR_END_LIST
|
|
FT_ERROR_END_LIST
|
|
#endif
|
|
|
|
|
|
/*******************************************************************/
|
|
/*******************************************************************/
|
|
/***** *****/
|
|
/***** SIMPLE CLEANUP *****/
|
|
/***** *****/
|
|
/*******************************************************************/
|
|
/*******************************************************************/
|
|
|
|
#ifdef FT_NEED_EXTERN_C
|
|
}
|
|
#endif
|
|
|
|
#undef FT_ERROR_START_LIST
|
|
#undef FT_ERROR_END_LIST
|
|
|
|
#undef FT_ERRORDEF
|
|
#undef FT_ERRORDEF_
|
|
#undef FT_NOERRORDEF_
|
|
|
|
#undef FT_NEED_EXTERN_C
|
|
#undef FT_ERR_BASE
|
|
|
|
/* FT_ERR_PREFIX is needed internally */
|
|
#ifndef FT2_BUILD_LIBRARY
|
|
#undef FT_ERR_PREFIX
|
|
#endif
|
|
|
|
#endif /* !(FTERRORS_H_ && __FTERRORS_H__) */
|
|
|
|
|
|
/* END */
|