0,0 → 1,206 |
/***************************************************************************/ |
/* */ |
/* fterrors.h */ |
/* */ |
/* FreeType error code handling (specification). */ |
/* */ |
/* Copyright 1996-2001, 2002, 2004, 2007 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. */ |
/* */ |
/***************************************************************************/ |
|
|
/*************************************************************************/ |
/* */ |
/* This special header file is used to define the handling of FT2 */ |
/* enumeration constants. It can also be used to generate error message */ |
/* strings with a small macro trick explained below. */ |
/* */ |
/* I - 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). You can then use the macro */ |
/* FT_ERROR_BASE macro to extract the generic error code from an */ |
/* FT_Error value. */ |
/* */ |
/* */ |
/* II - Error Message strings */ |
/* -------------------------- */ |
/* */ |
/* The error definitions below are made through special macros that */ |
/* allow client applications to build a table of error message strings */ |
/* if they need it. 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 */ |
/* (see below). */ |
/* */ |
/* FT_ERROR_DEF( e, v, s ) :: */ |
/* This macro is called to define one single error. */ |
/* `e' is the error code identifier (e.g. FT_Err_Invalid_Argument). */ |
/* `v' is the error numerical value. */ |
/* `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, 0 } }; */ |
/* */ |
/* const struct */ |
/* { */ |
/* int err_code; */ |
/* const char* err_msg; */ |
/* } ft_errors[] = */ |
/* */ |
/* #include FT_ERRORS_H */ |
/* } */ |
/* */ |
/*************************************************************************/ |
|
|
#ifndef __FTERRORS_H__ |
#define __FTERRORS_H__ |
|
|
/* include module base error codes */ |
#include FT_MODULE_ERRORS_H |
|
|
/*******************************************************************/ |
/*******************************************************************/ |
/***** *****/ |
/***** SETUP MACROS *****/ |
/***** *****/ |
/*******************************************************************/ |
/*******************************************************************/ |
|
|
#undef FT_NEED_EXTERN_C |
|
#undef FT_ERR_XCAT |
#undef FT_ERR_CAT |
|
#define FT_ERR_XCAT( x, y ) x ## y |
#define FT_ERR_CAT( x, y ) FT_ERR_XCAT( x, y ) |
|
|
/* 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_CONCAT |
#undef FT_ERR_BASE |
|
/* FT_KEEP_ERR_PREFIX is needed for ftvalid.h */ |
#ifndef FT_KEEP_ERR_PREFIX |
#undef FT_ERR_PREFIX |
#endif |
|
#endif /* __FTERRORS_H__ */ |
|
|
/* END */ |