2000-05-11 20:23:52 +02:00
|
|
|
/***************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* ftconfig.h */
|
|
|
|
/* */
|
|
|
|
/* ANSI-specific configuration file (specification only). */
|
|
|
|
/* */
|
2013-05-05 17:50:22 +02:00
|
|
|
/* Copyright 1996-2004, 2006-2008, 2010-2011, 2013 by */
|
2000-05-11 20:23:52 +02:00
|
|
|
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
|
|
|
/* */
|
2000-07-19 18:17:55 +02:00
|
|
|
/* This file is part of the FreeType project, and may only be used, */
|
|
|
|
/* modified, and distributed under the terms of the FreeType project */
|
2000-05-11 20:23:52 +02:00
|
|
|
/* 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 header file contains a number of macro definitions that are used */
|
2000-07-19 18:17:55 +02:00
|
|
|
/* by the rest of the engine. Most of the macros here are automatically */
|
2000-05-11 20:23:52 +02:00
|
|
|
/* determined at compile time, and you should not need to change it to */
|
2000-07-19 18:17:55 +02:00
|
|
|
/* port FreeType, except to compile the library with a non-ANSI */
|
|
|
|
/* compiler. */
|
2000-05-11 20:23:52 +02:00
|
|
|
/* */
|
|
|
|
/* Note however that if some specific modifications are needed, we */
|
|
|
|
/* advise you to place a modified copy in your build directory. */
|
|
|
|
/* */
|
2013-11-13 08:55:46 +01:00
|
|
|
/* The build directory is usually `builds/<system>', and contains */
|
|
|
|
/* system-specific files that are always included first when building */
|
|
|
|
/* the library. */
|
2000-05-11 20:23:52 +02:00
|
|
|
/* */
|
2013-11-13 08:55:46 +01:00
|
|
|
/* This ANSI version should stay in `include/config/'. */
|
2000-05-11 20:23:52 +02:00
|
|
|
/* */
|
|
|
|
/*************************************************************************/
|
|
|
|
|
2000-12-01 00:12:33 +01:00
|
|
|
#ifndef __FTCONFIG_H__
|
|
|
|
#define __FTCONFIG_H__
|
2000-07-19 18:17:55 +02:00
|
|
|
|
2000-12-09 01:45:38 +01:00
|
|
|
#include <ft2build.h>
|
|
|
|
#include FT_CONFIG_OPTIONS_H
|
* README.UNX: updated the Unix-specific quick-compilation guide to
warn about the GNU Make requirement at compile time..
* include/freetype/config/ftstdlib.h,
include/freetype/config/ftconfig.h,
include/freetype/config/ftheader.h,
include/freetype/internal/ftmemory.h,
include/freetype/internal/ftobjs.h,
src/autohint/ahoptim.c,
src/base/ftdbgmem.c, src/base/ftdebug.c,
src/base/ftmac.c, src/base/ftobjs.c,
src/base/ftsystem.c,
src/cache/ftcimage.c, src/cache/ftcsbits.c,
src/cff/cffdriver.c, src/cff/cffload.c, src/cff/cffobjs.c,
src/cid/cidload.c, src/cid/cidparse.c, src/cid/cidriver.c,
src/pcf/pcfdriver.c, src/pcf/pcfread.c,
src/psaux/t1cmap.c, src/psaux/t1decode.c,
src/pshinter/pshalgo1.c, src/pshinter/pshalgo2.c,
src/pshinter/pshrec.c,
src/psnames/psmodule.c,
src/raster/ftraster.c,
src/sfnt/sfdriver.c, src/sfnt/ttload.c, src/sfnt/ttpost.c,
src/smooth/ftgrays.c,
src/type1/t1afm.c, src/type1/t1driver.c, src/type1/t1gload.c,
src/type1/t1load.c, src/type1/t1objs.c, src/type1/t1parse.c:
added the new configuration file "ftstdlib.h" used to define
aliases for all ISO C library functions used by the engine
(e.g. strlen, qsort, setjmp, etc...)
this eases the porting of FreeType 2 to exotic environments like
XFree86 modules/extensions..
also removed many #include <string.h>, #include <stdlib.h>, etc...
from the engine's sources where they're not needed..
2002-04-12 11:31:48 +02:00
|
|
|
#include FT_CONFIG_STANDARD_LIBRARY_H
|
2000-12-01 00:12:33 +01:00
|
|
|
|
2008-09-12 18:27:48 +02:00
|
|
|
|
2000-12-01 00:12:33 +01:00
|
|
|
FT_BEGIN_HEADER
|
2000-08-01 15:17:04 +02:00
|
|
|
|
2000-12-09 01:45:38 +01:00
|
|
|
|
2000-05-11 20:23:52 +02:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* PLATFORM-SPECIFIC CONFIGURATION MACROS */
|
|
|
|
/* */
|
|
|
|
/* These macros can be toggled to suit a specific system. The current */
|
|
|
|
/* ones are defaults used to compile FreeType in an ANSI C environment */
|
|
|
|
/* (16bit compilers are also supported). Copy this file to your own */
|
2013-11-13 08:55:46 +01:00
|
|
|
/* `builds/<system>' directory, and edit it to port the engine. */
|
2000-05-11 20:23:52 +02:00
|
|
|
/* */
|
|
|
|
/*************************************************************************/
|
|
|
|
|
|
|
|
|
2004-04-13 23:08:17 +02:00
|
|
|
/* There are systems (like the Texas Instruments 'C54x) where a `char' */
|
|
|
|
/* has 16 bits. ANSI C says that sizeof(char) is always 1. Since an */
|
|
|
|
/* `int' has 16 bits also for this system, sizeof(int) gives 1 which */
|
|
|
|
/* is probably unexpected. */
|
|
|
|
/* */
|
|
|
|
/* `CHAR_BIT' (defined in limits.h) gives the number of bits in a */
|
|
|
|
/* `char' type. */
|
|
|
|
|
2004-04-16 05:50:55 +02:00
|
|
|
#ifndef FT_CHAR_BIT
|
|
|
|
#define FT_CHAR_BIT CHAR_BIT
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
2004-04-13 23:08:17 +02:00
|
|
|
/* The size of an `int' type. */
|
2004-07-28 02:09:02 +02:00
|
|
|
#if FT_UINT_MAX == 0xFFFFUL
|
2004-04-16 05:50:55 +02:00
|
|
|
#define FT_SIZEOF_INT (16 / FT_CHAR_BIT)
|
2004-07-28 02:09:02 +02:00
|
|
|
#elif FT_UINT_MAX == 0xFFFFFFFFUL
|
|
|
|
#define FT_SIZEOF_INT (32 / FT_CHAR_BIT)
|
|
|
|
#elif FT_UINT_MAX > 0xFFFFFFFFUL && FT_UINT_MAX == 0xFFFFFFFFFFFFFFFFUL
|
2004-04-16 05:50:55 +02:00
|
|
|
#define FT_SIZEOF_INT (64 / FT_CHAR_BIT)
|
2000-05-11 20:23:52 +02:00
|
|
|
#else
|
2004-04-13 23:08:17 +02:00
|
|
|
#error "Unsupported size of `int' type!"
|
2000-05-11 20:23:52 +02:00
|
|
|
#endif
|
|
|
|
|
2004-07-28 02:09:02 +02:00
|
|
|
/* The size of a `long' type. A five-byte `long' (as used e.g. on the */
|
|
|
|
/* DM642) is recognized but avoided. */
|
|
|
|
#if FT_ULONG_MAX == 0xFFFFFFFFUL
|
|
|
|
#define FT_SIZEOF_LONG (32 / FT_CHAR_BIT)
|
|
|
|
#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFUL
|
2004-04-16 05:50:55 +02:00
|
|
|
#define FT_SIZEOF_LONG (32 / FT_CHAR_BIT)
|
2004-07-28 02:09:02 +02:00
|
|
|
#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFFFFFFFUL
|
2004-04-16 05:50:55 +02:00
|
|
|
#define FT_SIZEOF_LONG (64 / FT_CHAR_BIT)
|
2000-05-11 20:23:52 +02:00
|
|
|
#else
|
2004-04-13 23:08:17 +02:00
|
|
|
#error "Unsupported size of `long' type!"
|
2000-05-11 20:23:52 +02:00
|
|
|
#endif
|
|
|
|
|
|
|
|
|
2002-02-19 02:12:23 +01:00
|
|
|
/* FT_UNUSED is a macro used to indicate that a given parameter is not */
|
|
|
|
/* used -- this is only used to get rid of unpleasant compiler warnings */
|
2000-07-04 20:12:13 +02:00
|
|
|
#ifndef FT_UNUSED
|
2000-07-19 18:17:55 +02:00
|
|
|
#define FT_UNUSED( arg ) ( (arg) = (arg) )
|
2000-05-12 17:01:18 +02:00
|
|
|
#endif
|
|
|
|
|
|
|
|
|
2000-05-11 20:23:52 +02:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* AUTOMATIC CONFIGURATION MACROS */
|
|
|
|
/* */
|
2000-07-19 18:17:55 +02:00
|
|
|
/* These macros are computed from the ones defined above. Don't touch */
|
|
|
|
/* their definition, unless you know precisely what you are doing. No */
|
|
|
|
/* porter should need to mess with them. */
|
2000-05-11 20:23:52 +02:00
|
|
|
/* */
|
|
|
|
/*************************************************************************/
|
|
|
|
|
|
|
|
|
2002-04-30 16:26:49 +02:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* Mac support */
|
|
|
|
/* */
|
|
|
|
/* This is the only necessary change, so it is defined here instead */
|
|
|
|
/* providing a new configuration file. */
|
|
|
|
/* */
|
2011-12-02 13:14:18 +01:00
|
|
|
#if defined( __APPLE__ ) || ( defined( __MWERKS__ ) && defined( macintosh ) )
|
2007-03-26 07:40:55 +02:00
|
|
|
/* no Carbon frameworks for 64bit 10.4.x */
|
2011-06-01 10:36:04 +02:00
|
|
|
/* AvailabilityMacros.h is available since Mac OS X 10.2, */
|
2011-05-28 18:33:34 +02:00
|
|
|
/* so guess the system version by maximum errno before inclusion */
|
|
|
|
#include <errno.h>
|
|
|
|
#ifdef ECANCELED /* defined since 10.2 */
|
2007-03-26 07:40:55 +02:00
|
|
|
#include "AvailabilityMacros.h"
|
2011-05-28 18:33:34 +02:00
|
|
|
#endif
|
2007-03-26 07:40:55 +02:00
|
|
|
#if defined( __LP64__ ) && \
|
|
|
|
( MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 )
|
2011-12-02 13:14:18 +01:00
|
|
|
#undef FT_MACINTOSH
|
2007-03-26 07:40:55 +02:00
|
|
|
#endif
|
2008-10-03 13:52:22 +02:00
|
|
|
|
2008-10-04 13:39:03 +02:00
|
|
|
#elif defined( __SC__ ) || defined( __MRC__ )
|
2008-10-03 13:52:22 +02:00
|
|
|
/* Classic MacOS compilers */
|
|
|
|
#include "ConditionalMacros.h"
|
|
|
|
#if TARGET_OS_MAC
|
|
|
|
#define FT_MACINTOSH 1
|
|
|
|
#endif
|
|
|
|
|
2002-04-30 16:26:49 +02:00
|
|
|
#endif
|
|
|
|
|
|
|
|
|
2000-05-11 20:23:52 +02:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
2008-05-31 09:03:30 +02:00
|
|
|
/* <Section> */
|
|
|
|
/* basic_types */
|
2000-05-11 20:23:52 +02:00
|
|
|
/* */
|
2008-05-31 09:03:30 +02:00
|
|
|
/*************************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <Type> */
|
|
|
|
/* FT_Int16 */
|
|
|
|
/* */
|
|
|
|
/* <Description> */
|
|
|
|
/* A typedef for a 16bit signed integer type. */
|
|
|
|
/* */
|
|
|
|
typedef signed short FT_Int16;
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <Type> */
|
|
|
|
/* FT_UInt16 */
|
|
|
|
/* */
|
|
|
|
/* <Description> */
|
|
|
|
/* A typedef for a 16bit unsigned integer type. */
|
2000-05-11 20:23:52 +02:00
|
|
|
/* */
|
2000-07-05 06:32:02 +02:00
|
|
|
typedef unsigned short FT_UInt16;
|
2000-05-11 20:23:52 +02:00
|
|
|
|
2008-05-31 09:03:30 +02:00
|
|
|
/* */
|
|
|
|
|
|
|
|
|
|
|
|
/* this #if 0 ... #endif clause is for documentation purposes */
|
|
|
|
#if 0
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <Type> */
|
|
|
|
/* FT_Int32 */
|
|
|
|
/* */
|
|
|
|
/* <Description> */
|
|
|
|
/* A typedef for a 32bit signed integer type. The size depends on */
|
|
|
|
/* the configuration. */
|
|
|
|
/* */
|
|
|
|
typedef signed XXX FT_Int32;
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <Type> */
|
|
|
|
/* FT_UInt32 */
|
|
|
|
/* */
|
|
|
|
/* A typedef for a 32bit unsigned integer type. The size depends on */
|
|
|
|
/* the configuration. */
|
|
|
|
/* */
|
|
|
|
typedef unsigned XXX FT_UInt32;
|
|
|
|
|
2013-05-05 10:44:21 +02:00
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <Type> */
|
|
|
|
/* FT_Int64 */
|
|
|
|
/* */
|
|
|
|
/* A typedef for a 64bit signed integer type. The size depends on */
|
|
|
|
/* the configuration. Only defined if there is real 64bit support; */
|
|
|
|
/* otherwise, it gets emulated with a structure (if necessary). */
|
|
|
|
/* */
|
|
|
|
typedef signed XXX FT_Int64;
|
|
|
|
|
2013-05-12 07:27:48 +02:00
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <Type> */
|
|
|
|
/* FT_UInt64 */
|
|
|
|
/* */
|
|
|
|
/* A typedef for a 64bit unsigned integer type. The size depends on */
|
|
|
|
/* the configuration. Only defined if there is real 64bit support; */
|
|
|
|
/* otherwise, it gets emulated with a structure (if necessary). */
|
|
|
|
/* */
|
|
|
|
typedef unsigned XXX FT_UInt64;
|
|
|
|
|
2008-05-31 09:03:30 +02:00
|
|
|
/* */
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
2004-04-16 05:50:55 +02:00
|
|
|
#if FT_SIZEOF_INT == (32 / FT_CHAR_BIT)
|
2000-05-11 20:23:52 +02:00
|
|
|
|
|
|
|
typedef signed int FT_Int32;
|
2000-07-05 06:32:02 +02:00
|
|
|
typedef unsigned int FT_UInt32;
|
2000-05-11 20:23:52 +02:00
|
|
|
|
2004-04-16 05:50:55 +02:00
|
|
|
#elif FT_SIZEOF_LONG == (32 / FT_CHAR_BIT)
|
2000-05-11 20:23:52 +02:00
|
|
|
|
|
|
|
typedef signed long FT_Int32;
|
2000-07-05 06:32:02 +02:00
|
|
|
typedef unsigned long FT_UInt32;
|
2000-05-11 20:23:52 +02:00
|
|
|
|
|
|
|
#else
|
2000-07-19 18:17:55 +02:00
|
|
|
#error "no 32bit type found -- please check your configuration files"
|
2000-05-11 20:23:52 +02:00
|
|
|
#endif
|
|
|
|
|
2008-09-12 18:27:48 +02:00
|
|
|
|
2003-11-09 09:37:14 +01:00
|
|
|
/* look up an integer type that is at least 32 bits */
|
2004-04-16 05:50:55 +02:00
|
|
|
#if FT_SIZEOF_INT >= (32 / FT_CHAR_BIT)
|
* include/freetype/fttrigon.h, src/base/fttrigon.c, src/base/ftbase.c,
src/base/Jamfile, src/base/rules.mk: adding trigonometric functions
to the core API (using Cordic algorithms).
* builds/top_level.mk, builds/newline, builds/detect.mk: fixed problems
with Make on Windows 2000, as well as problems when "make distclean" is
invoked on a non-Unix platform when there is no "config.mk" in the
current directory..
* builds/freetype.mk: fixed a problem with object deletions under
Dos/Windows/OS/2 systems
* src/tools: added new directory to hold tools and test programs
moved docmaker.py, glnames.py to it..
* src/tools/docmaker.py: improved the script to add the current date
at the footer of each web page (useful to distinguish between versions)
* Jamfile: fixed incorrect HDRMACRO argument.
* TODO: removed the cubic arc bbox computation note, since it has been
fixed recently..
* include/freetype/t1tables.h, include/freetype/config/ftoption.h:
formatting
2001-05-11 16:25:57 +02:00
|
|
|
|
2002-03-29 08:43:04 +01:00
|
|
|
typedef int FT_Fast;
|
|
|
|
typedef unsigned int FT_UFast;
|
* include/freetype/fttrigon.h, src/base/fttrigon.c, src/base/ftbase.c,
src/base/Jamfile, src/base/rules.mk: adding trigonometric functions
to the core API (using Cordic algorithms).
* builds/top_level.mk, builds/newline, builds/detect.mk: fixed problems
with Make on Windows 2000, as well as problems when "make distclean" is
invoked on a non-Unix platform when there is no "config.mk" in the
current directory..
* builds/freetype.mk: fixed a problem with object deletions under
Dos/Windows/OS/2 systems
* src/tools: added new directory to hold tools and test programs
moved docmaker.py, glnames.py to it..
* src/tools/docmaker.py: improved the script to add the current date
at the footer of each web page (useful to distinguish between versions)
* Jamfile: fixed incorrect HDRMACRO argument.
* TODO: removed the cubic arc bbox computation note, since it has been
fixed recently..
* include/freetype/t1tables.h, include/freetype/config/ftoption.h:
formatting
2001-05-11 16:25:57 +02:00
|
|
|
|
2004-04-16 05:50:55 +02:00
|
|
|
#elif FT_SIZEOF_LONG >= (32 / FT_CHAR_BIT)
|
* include/freetype/fttrigon.h, src/base/fttrigon.c, src/base/ftbase.c,
src/base/Jamfile, src/base/rules.mk: adding trigonometric functions
to the core API (using Cordic algorithms).
* builds/top_level.mk, builds/newline, builds/detect.mk: fixed problems
with Make on Windows 2000, as well as problems when "make distclean" is
invoked on a non-Unix platform when there is no "config.mk" in the
current directory..
* builds/freetype.mk: fixed a problem with object deletions under
Dos/Windows/OS/2 systems
* src/tools: added new directory to hold tools and test programs
moved docmaker.py, glnames.py to it..
* src/tools/docmaker.py: improved the script to add the current date
at the footer of each web page (useful to distinguish between versions)
* Jamfile: fixed incorrect HDRMACRO argument.
* TODO: removed the cubic arc bbox computation note, since it has been
fixed recently..
* include/freetype/t1tables.h, include/freetype/config/ftoption.h:
formatting
2001-05-11 16:25:57 +02:00
|
|
|
|
2002-03-29 08:43:04 +01:00
|
|
|
typedef long FT_Fast;
|
|
|
|
typedef unsigned long FT_UFast;
|
2001-06-28 19:49:10 +02:00
|
|
|
|
* include/freetype/fttrigon.h, src/base/fttrigon.c, src/base/ftbase.c,
src/base/Jamfile, src/base/rules.mk: adding trigonometric functions
to the core API (using Cordic algorithms).
* builds/top_level.mk, builds/newline, builds/detect.mk: fixed problems
with Make on Windows 2000, as well as problems when "make distclean" is
invoked on a non-Unix platform when there is no "config.mk" in the
current directory..
* builds/freetype.mk: fixed a problem with object deletions under
Dos/Windows/OS/2 systems
* src/tools: added new directory to hold tools and test programs
moved docmaker.py, glnames.py to it..
* src/tools/docmaker.py: improved the script to add the current date
at the footer of each web page (useful to distinguish between versions)
* Jamfile: fixed incorrect HDRMACRO argument.
* TODO: removed the cubic arc bbox computation note, since it has been
fixed recently..
* include/freetype/t1tables.h, include/freetype/config/ftoption.h:
formatting
2001-05-11 16:25:57 +02:00
|
|
|
#endif
|
|
|
|
|
|
|
|
|
2001-04-21 20:34:30 +02:00
|
|
|
/* determine whether we have a 64-bit int type for platforms without */
|
|
|
|
/* Autoconf */
|
2004-04-16 05:50:55 +02:00
|
|
|
#if FT_SIZEOF_LONG == (64 / FT_CHAR_BIT)
|
2000-05-11 20:23:52 +02:00
|
|
|
|
2000-07-19 18:17:55 +02:00
|
|
|
/* FT_LONG64 must be defined if a 64-bit type is available */
|
2001-04-21 20:34:30 +02:00
|
|
|
#define FT_LONG64
|
2013-05-12 07:27:48 +02:00
|
|
|
#define FT_INT64 long
|
|
|
|
#define FT_UINT64 unsigned long
|
2001-04-20 10:50:36 +02:00
|
|
|
|
2002-03-13 10:37:50 +01:00
|
|
|
#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
|
2001-04-20 10:50:36 +02:00
|
|
|
|
2001-04-21 20:34:30 +02:00
|
|
|
/* this compiler provides the __int64 type */
|
|
|
|
#define FT_LONG64
|
2013-05-12 07:27:48 +02:00
|
|
|
#define FT_INT64 __int64
|
|
|
|
#define FT_UINT64 unsigned __int64
|
2001-04-20 10:50:36 +02:00
|
|
|
|
2001-04-21 20:34:30 +02:00
|
|
|
#elif defined( __BORLANDC__ ) /* Borland C++ */
|
2001-04-20 10:50:36 +02:00
|
|
|
|
2001-04-21 20:34:30 +02:00
|
|
|
/* XXXX: We should probably check the value of __BORLANDC__ in order */
|
|
|
|
/* to test the compiler version. */
|
2001-04-20 10:50:36 +02:00
|
|
|
|
2001-04-21 20:34:30 +02:00
|
|
|
/* this compiler provides the __int64 type */
|
|
|
|
#define FT_LONG64
|
2013-05-12 07:27:48 +02:00
|
|
|
#define FT_INT64 __int64
|
|
|
|
#define FT_UINT64 unsigned __int64
|
2001-04-20 10:50:36 +02:00
|
|
|
|
2001-04-21 20:34:30 +02:00
|
|
|
#elif defined( __WATCOMC__ ) /* Watcom C++ */
|
2001-04-20 10:50:36 +02:00
|
|
|
|
2001-04-21 20:34:30 +02:00
|
|
|
/* Watcom doesn't provide 64-bit data types */
|
2001-04-20 10:50:36 +02:00
|
|
|
|
2003-06-09 17:54:18 +02:00
|
|
|
#elif defined( __MWERKS__ ) /* Metrowerks CodeWarrior */
|
2001-04-20 10:50:36 +02:00
|
|
|
|
2003-06-23 21:26:53 +02:00
|
|
|
#define FT_LONG64
|
2013-05-12 07:27:48 +02:00
|
|
|
#define FT_INT64 long long int
|
|
|
|
#define FT_UINT64 unsigned long long int
|
2001-04-20 10:50:36 +02:00
|
|
|
|
2001-04-21 20:34:30 +02:00
|
|
|
#elif defined( __GNUC__ )
|
2001-04-20 10:50:36 +02:00
|
|
|
|
2006-03-24 13:46:49 +01:00
|
|
|
/* GCC provides the `long long' type */
|
2001-04-21 20:34:30 +02:00
|
|
|
#define FT_LONG64
|
2013-05-12 07:27:48 +02:00
|
|
|
#define FT_INT64 long long int
|
|
|
|
#define FT_UINT64 unsigned long long int
|
2001-04-20 10:50:36 +02:00
|
|
|
|
2004-04-16 05:50:55 +02:00
|
|
|
#endif /* FT_SIZEOF_LONG == (64 / FT_CHAR_BIT) */
|
2000-05-11 20:23:52 +02:00
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
2001-04-20 10:50:36 +02:00
|
|
|
/* A 64-bit data type will create compilation problems if you compile */
|
2008-09-12 18:27:48 +02:00
|
|
|
/* in strict ANSI mode. To avoid them, we disable its use if __STDC__ */
|
|
|
|
/* is defined. You can however ignore this rule by defining the */
|
|
|
|
/* FT_CONFIG_OPTION_FORCE_INT64 configuration macro. */
|
2000-05-11 20:23:52 +02:00
|
|
|
/* */
|
2001-04-21 20:34:30 +02:00
|
|
|
#if defined( FT_LONG64 ) && !defined( FT_CONFIG_OPTION_FORCE_INT64 )
|
2001-04-20 10:50:36 +02:00
|
|
|
|
2001-04-21 20:34:30 +02:00
|
|
|
#ifdef __STDC__
|
2001-04-20 10:50:36 +02:00
|
|
|
|
2001-04-21 20:34:30 +02:00
|
|
|
/* undefine the 64-bit macros in strict ANSI compilation mode */
|
|
|
|
#undef FT_LONG64
|
|
|
|
#undef FT_INT64
|
2001-04-20 10:50:36 +02:00
|
|
|
|
2001-04-21 20:34:30 +02:00
|
|
|
#endif /* __STDC__ */
|
2001-04-20 10:50:36 +02:00
|
|
|
|
|
|
|
#endif /* FT_LONG64 && !FT_CONFIG_OPTION_FORCE_INT64 */
|
|
|
|
|
2013-05-05 10:44:21 +02:00
|
|
|
#ifdef FT_LONG64
|
2013-05-12 07:27:48 +02:00
|
|
|
typedef FT_INT64 FT_Int64;
|
|
|
|
typedef FT_UINT64 FT_UInt64;
|
2013-05-05 10:44:21 +02:00
|
|
|
#endif
|
|
|
|
|
2001-04-20 10:50:36 +02:00
|
|
|
|
2008-09-12 18:27:48 +02:00
|
|
|
#define FT_BEGIN_STMNT do {
|
|
|
|
#define FT_END_STMNT } while ( 0 )
|
|
|
|
#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef FT_CONFIG_OPTION_NO_ASSEMBLER
|
|
|
|
/* Provide assembler fragments for performance-critical functions. */
|
|
|
|
/* These must be defined `static __inline__' with GCC. */
|
|
|
|
|
2010-01-11 06:28:56 +01:00
|
|
|
#if defined( __CC_ARM ) || defined( __ARMCC__ ) /* RVCT */
|
2013-07-16 12:52:18 +02:00
|
|
|
|
2010-01-11 06:28:56 +01:00
|
|
|
#define FT_MULFIX_ASSEMBLER FT_MulFix_arm
|
|
|
|
|
|
|
|
/* documentation is in freetype.h */
|
|
|
|
|
|
|
|
static __inline FT_Int32
|
|
|
|
FT_MulFix_arm( FT_Int32 a,
|
|
|
|
FT_Int32 b )
|
|
|
|
{
|
|
|
|
register FT_Int32 t, t2;
|
|
|
|
|
|
|
|
|
|
|
|
__asm
|
|
|
|
{
|
|
|
|
smull t2, t, b, a /* (lo=t2,hi=t) = a*b */
|
|
|
|
mov a, t, asr #31 /* a = (hi >> 31) */
|
|
|
|
add a, a, #0x8000 /* a += 0x8000 */
|
|
|
|
adds t2, t2, a /* t2 += a */
|
|
|
|
adc t, t, #0 /* t += carry */
|
|
|
|
mov a, t2, lsr #16 /* a = t2 >> 16 */
|
|
|
|
orr a, a, t, lsl #16 /* a |= t << 16 */
|
|
|
|
}
|
|
|
|
return a;
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif /* __CC_ARM || __ARMCC__ */
|
|
|
|
|
|
|
|
|
2008-09-12 18:27:48 +02:00
|
|
|
#ifdef __GNUC__
|
|
|
|
|
2013-07-16 12:40:03 +02:00
|
|
|
#if defined( __arm__ ) && \
|
|
|
|
( !defined( __thumb__ ) || defined( __thumb2__ ) ) && \
|
2010-01-11 06:28:56 +01:00
|
|
|
!( defined( __CC_ARM ) || defined( __ARMCC__ ) )
|
2013-07-16 12:52:18 +02:00
|
|
|
|
2008-09-12 18:27:48 +02:00
|
|
|
#define FT_MULFIX_ASSEMBLER FT_MulFix_arm
|
|
|
|
|
|
|
|
/* documentation is in freetype.h */
|
|
|
|
|
|
|
|
static __inline__ FT_Int32
|
|
|
|
FT_MulFix_arm( FT_Int32 a,
|
|
|
|
FT_Int32 b )
|
|
|
|
{
|
|
|
|
register FT_Int32 t, t2;
|
|
|
|
|
|
|
|
|
2011-01-15 13:53:32 +01:00
|
|
|
__asm__ __volatile__ (
|
|
|
|
"smull %1, %2, %4, %3\n\t" /* (lo=%1,hi=%2) = a*b */
|
|
|
|
"mov %0, %2, asr #31\n\t" /* %0 = (hi >> 31) */
|
2013-10-15 11:40:34 +02:00
|
|
|
#ifdef __clang__
|
|
|
|
"add.w %0, %0, #0x8000\n\t" /* %0 += 0x8000 */
|
|
|
|
#else
|
2011-01-15 13:53:32 +01:00
|
|
|
"add %0, %0, #0x8000\n\t" /* %0 += 0x8000 */
|
2013-10-15 11:40:34 +02:00
|
|
|
#endif
|
2011-01-15 13:53:32 +01:00
|
|
|
"adds %1, %1, %0\n\t" /* %1 += %0 */
|
|
|
|
"adc %2, %2, #0\n\t" /* %2 += carry */
|
|
|
|
"mov %0, %1, lsr #16\n\t" /* %0 = %1 >> 16 */
|
|
|
|
"orr %0, %0, %2, lsl #16\n\t" /* %0 |= %2 << 16 */
|
2008-09-12 18:27:48 +02:00
|
|
|
: "=r"(a), "=&r"(t2), "=&r"(t)
|
2012-07-07 10:57:30 +02:00
|
|
|
: "r"(a), "r"(b)
|
|
|
|
: "cc" );
|
2008-09-12 18:27:48 +02:00
|
|
|
return a;
|
|
|
|
}
|
|
|
|
|
2013-07-16 12:40:03 +02:00
|
|
|
#endif /* __arm__ && */
|
|
|
|
/* ( __thumb2__ || !__thumb__ ) && */
|
|
|
|
/* !( __CC_ARM || __ARMCC__ ) */
|
2008-09-12 18:27:48 +02:00
|
|
|
|
2013-07-16 12:52:18 +02:00
|
|
|
|
2010-08-06 01:39:26 +02:00
|
|
|
#if defined( __i386__ )
|
2013-07-16 12:52:18 +02:00
|
|
|
|
2008-09-12 18:27:48 +02:00
|
|
|
#define FT_MULFIX_ASSEMBLER FT_MulFix_i386
|
|
|
|
|
|
|
|
/* documentation is in freetype.h */
|
|
|
|
|
|
|
|
static __inline__ FT_Int32
|
|
|
|
FT_MulFix_i386( FT_Int32 a,
|
|
|
|
FT_Int32 b )
|
|
|
|
{
|
|
|
|
register FT_Int32 result;
|
|
|
|
|
|
|
|
|
|
|
|
__asm__ __volatile__ (
|
|
|
|
"imul %%edx\n"
|
|
|
|
"movl %%edx, %%ecx\n"
|
|
|
|
"sarl $31, %%ecx\n"
|
|
|
|
"addl $0x8000, %%ecx\n"
|
|
|
|
"addl %%ecx, %%eax\n"
|
|
|
|
"adcl $0, %%edx\n"
|
|
|
|
"shrl $16, %%eax\n"
|
|
|
|
"shll $16, %%edx\n"
|
|
|
|
"addl %%edx, %%eax\n"
|
2009-01-19 09:55:15 +01:00
|
|
|
: "=a"(result), "=d"(b)
|
|
|
|
: "a"(a), "d"(b)
|
|
|
|
: "%ecx", "cc" );
|
2008-09-12 18:27:48 +02:00
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif /* i386 */
|
|
|
|
|
|
|
|
#endif /* __GNUC__ */
|
|
|
|
|
2011-02-12 21:51:36 +01:00
|
|
|
|
|
|
|
#ifdef _MSC_VER /* Visual C++ */
|
|
|
|
|
|
|
|
#ifdef _M_IX86
|
|
|
|
|
|
|
|
#define FT_MULFIX_ASSEMBLER FT_MulFix_i386
|
|
|
|
|
|
|
|
/* documentation is in freetype.h */
|
|
|
|
|
|
|
|
static __inline FT_Int32
|
|
|
|
FT_MulFix_i386( FT_Int32 a,
|
|
|
|
FT_Int32 b )
|
|
|
|
{
|
|
|
|
register FT_Int32 result;
|
|
|
|
|
|
|
|
__asm
|
|
|
|
{
|
|
|
|
mov eax, a
|
|
|
|
mov edx, b
|
|
|
|
imul edx
|
|
|
|
mov ecx, edx
|
|
|
|
sar ecx, 31
|
|
|
|
add ecx, 8000h
|
|
|
|
add eax, ecx
|
|
|
|
adc edx, 0
|
|
|
|
shr eax, 16
|
|
|
|
shl edx, 16
|
|
|
|
add eax, edx
|
|
|
|
mov result, eax
|
|
|
|
}
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif /* _M_IX86 */
|
|
|
|
|
|
|
|
#endif /* _MSC_VER */
|
|
|
|
|
2013-07-16 12:52:18 +02:00
|
|
|
|
|
|
|
#if defined( __GNUC__ ) && defined( __x86_64__ )
|
|
|
|
|
|
|
|
#define FT_MULFIX_ASSEMBLER FT_MulFix_x86_64
|
|
|
|
|
|
|
|
static __inline__ FT_Int32
|
|
|
|
FT_MulFix_x86_64( FT_Int32 a,
|
|
|
|
FT_Int32 b )
|
|
|
|
{
|
|
|
|
/* Temporarily disable the warning that C90 doesn't support */
|
|
|
|
/* `long long'. */
|
2013-11-02 08:28:41 +01:00
|
|
|
#if ( __GNUC__ > 4 ) || ( ( __GNUC__ == 4 ) && ( __GNUC_MINOR__ >= 6 ) )
|
2013-07-16 12:52:18 +02:00
|
|
|
#pragma GCC diagnostic push
|
|
|
|
#pragma GCC diagnostic ignored "-Wlong-long"
|
2013-11-02 08:28:41 +01:00
|
|
|
#endif
|
2013-07-16 12:52:18 +02:00
|
|
|
|
|
|
|
#if 1
|
|
|
|
/* Technically not an assembly fragment, but GCC does a really good */
|
|
|
|
/* job at inlining it and generating good machine code for it. */
|
|
|
|
long long ret, tmp;
|
|
|
|
|
|
|
|
|
|
|
|
ret = (long long)a * b;
|
|
|
|
tmp = ret >> 63;
|
|
|
|
ret += 0x8000 + tmp;
|
|
|
|
|
|
|
|
return (FT_Int32)( ret >> 16 );
|
|
|
|
#else
|
|
|
|
|
|
|
|
/* For some reason, GCC 4.6 on Ubuntu 12.04 generates invalid machine */
|
|
|
|
/* code from the lines below. The main issue is that `wide_a' is not */
|
|
|
|
/* properly initialized by sign-extending `a'. Instead, the generated */
|
|
|
|
/* machine code assumes that the register that contains `a' on input */
|
|
|
|
/* can be used directly as a 64-bit value, which is wrong most of the */
|
|
|
|
/* time. */
|
|
|
|
long long wide_a = (long long)a;
|
|
|
|
long long wide_b = (long long)b;
|
|
|
|
long long result;
|
|
|
|
|
|
|
|
|
|
|
|
__asm__ __volatile__ (
|
|
|
|
"imul %2, %1\n"
|
|
|
|
"mov %1, %0\n"
|
|
|
|
"sar $63, %0\n"
|
|
|
|
"lea 0x8000(%1, %0), %0\n"
|
|
|
|
"sar $16, %0\n"
|
|
|
|
: "=&r"(result), "=&r"(wide_a)
|
|
|
|
: "r"(wide_b)
|
|
|
|
: "cc" );
|
|
|
|
|
|
|
|
return (FT_Int32)result;
|
|
|
|
#endif
|
|
|
|
|
2013-11-02 08:28:41 +01:00
|
|
|
#if ( __GNUC__ > 4 ) || ( ( __GNUC__ == 4 ) && ( __GNUC_MINOR__ >= 6 ) )
|
2013-07-16 12:52:18 +02:00
|
|
|
#pragma GCC diagnostic pop
|
2013-11-02 08:28:41 +01:00
|
|
|
#endif
|
2013-07-16 12:52:18 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
#endif /* __GNUC__ && __x86_64__ */
|
|
|
|
|
2008-09-12 18:27:48 +02:00
|
|
|
#endif /* !FT_CONFIG_OPTION_NO_ASSEMBLER */
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef FT_CONFIG_OPTION_INLINE_MULFIX
|
|
|
|
#ifdef FT_MULFIX_ASSEMBLER
|
|
|
|
#define FT_MULFIX_INLINED FT_MULFIX_ASSEMBLER
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
2000-05-11 20:23:52 +02:00
|
|
|
#ifdef FT_MAKE_OPTION_SINGLE_OBJECT
|
2000-08-01 19:05:20 +02:00
|
|
|
|
2002-03-29 08:43:04 +01:00
|
|
|
#define FT_LOCAL( x ) static x
|
|
|
|
#define FT_LOCAL_DEF( x ) static x
|
2000-08-01 19:05:20 +02:00
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
2002-03-29 08:43:04 +01:00
|
|
|
#define FT_LOCAL( x ) extern "C" x
|
|
|
|
#define FT_LOCAL_DEF( x ) extern "C" x
|
2000-05-11 20:23:52 +02:00
|
|
|
#else
|
2002-03-29 08:43:04 +01:00
|
|
|
#define FT_LOCAL( x ) extern x
|
|
|
|
#define FT_LOCAL_DEF( x ) x
|
2000-05-11 20:23:52 +02:00
|
|
|
#endif
|
|
|
|
|
2000-08-01 19:05:20 +02:00
|
|
|
#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */
|
|
|
|
|
2013-08-02 14:50:23 +02:00
|
|
|
#define FT_LOCAL_ARRAY( x ) extern const x
|
|
|
|
#define FT_LOCAL_ARRAY_DEF( x ) const x
|
|
|
|
|
2000-08-01 19:05:20 +02:00
|
|
|
|
2000-11-04 02:55:49 +01:00
|
|
|
#ifndef FT_BASE
|
2000-08-01 19:05:20 +02:00
|
|
|
|
|
|
|
#ifdef __cplusplus
|
2000-11-04 02:55:49 +01:00
|
|
|
#define FT_BASE( x ) extern "C" x
|
2000-05-11 20:23:52 +02:00
|
|
|
#else
|
2000-11-04 02:55:49 +01:00
|
|
|
#define FT_BASE( x ) extern x
|
2000-05-11 20:23:52 +02:00
|
|
|
#endif
|
|
|
|
|
2000-11-04 02:55:49 +01:00
|
|
|
#endif /* !FT_BASE */
|
2000-08-01 19:05:20 +02:00
|
|
|
|
|
|
|
|
2000-11-04 02:55:49 +01:00
|
|
|
#ifndef FT_BASE_DEF
|
2000-08-01 19:05:20 +02:00
|
|
|
|
|
|
|
#ifdef __cplusplus
|
2006-05-03 00:22:16 +02:00
|
|
|
#define FT_BASE_DEF( x ) x
|
2000-08-01 19:05:20 +02:00
|
|
|
#else
|
* include/freetype/fterrdef.h, include/freetype/config/ftconfig.h,
include/freetype/internal/ftmemory.h, src/base/ftdbgmem.c,
src/base/ftutil.c: udpating the memory management functions and
macros to safely deal with array size buffer overflows, this
corresponds to attemps to allocate arrays that are too large. For
an example, consider the following code:
count = read_uint32_from_file();
array = malloc( sizeof(Item) * count );
for ( nn = 0; nn < count; nn++ )
array[nn] = read_item_from_file();
if 'count' is larger than FT_UINT_MAX/sizeof(Item), the multiplication
will overflow and the array allocated will be smaller than the data
read from the file. In this case, the heap will be trashed, and this
can be used as a denial-of-service, or make the engine crash later.
the FT_ARRAY_NEW and FT_ARRAY_RENEW macro now check that the new
count is no more than FT_INT_MAX/item_size, otherwise, a new error,
named 'FT_Err_Array_Too_Large' will be returned.
note that the memory debugger now works again when FT_DEBUG_MEMORY
is defined, and FT_STRICT_ALIASING has disappeared, the corresponding
code being now the default.
2006-05-02 08:34:27 +02:00
|
|
|
#define FT_BASE_DEF( x ) x
|
2000-05-11 20:23:52 +02:00
|
|
|
#endif
|
|
|
|
|
2000-11-04 02:55:49 +01:00
|
|
|
#endif /* !FT_BASE_DEF */
|
2000-08-01 19:05:20 +02:00
|
|
|
|
|
|
|
|
2000-11-04 02:55:49 +01:00
|
|
|
#ifndef FT_EXPORT
|
2000-08-01 19:05:20 +02:00
|
|
|
|
|
|
|
#ifdef __cplusplus
|
2000-11-04 02:55:49 +01:00
|
|
|
#define FT_EXPORT( x ) extern "C" x
|
2000-08-01 19:05:20 +02:00
|
|
|
#else
|
2000-11-04 02:55:49 +01:00
|
|
|
#define FT_EXPORT( x ) extern x
|
2000-08-01 19:05:20 +02:00
|
|
|
#endif
|
|
|
|
|
2000-11-04 02:55:49 +01:00
|
|
|
#endif /* !FT_EXPORT */
|
2000-08-01 19:05:20 +02:00
|
|
|
|
|
|
|
|
2000-11-04 02:55:49 +01:00
|
|
|
#ifndef FT_EXPORT_DEF
|
2000-08-01 19:05:20 +02:00
|
|
|
|
|
|
|
#ifdef __cplusplus
|
2000-11-04 02:55:49 +01:00
|
|
|
#define FT_EXPORT_DEF( x ) extern "C" x
|
2000-08-01 19:05:20 +02:00
|
|
|
#else
|
2000-11-04 02:55:49 +01:00
|
|
|
#define FT_EXPORT_DEF( x ) extern x
|
2000-05-12 14:17:15 +02:00
|
|
|
#endif
|
|
|
|
|
2000-11-04 02:55:49 +01:00
|
|
|
#endif /* !FT_EXPORT_DEF */
|
2000-08-01 19:05:20 +02:00
|
|
|
|
|
|
|
|
|
|
|
#ifndef FT_EXPORT_VAR
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
#define FT_EXPORT_VAR( x ) extern "C" x
|
|
|
|
#else
|
|
|
|
#define FT_EXPORT_VAR( x ) extern x
|
2000-05-11 20:23:52 +02:00
|
|
|
#endif
|
|
|
|
|
2000-08-01 19:05:20 +02:00
|
|
|
#endif /* !FT_EXPORT_VAR */
|
|
|
|
|
2000-11-04 09:33:38 +01:00
|
|
|
/* The following macros are needed to compile the library with a */
|
2001-06-27 18:18:10 +02:00
|
|
|
/* C++ compiler and with 16bit compilers. */
|
2000-11-04 02:55:49 +01:00
|
|
|
/* */
|
2000-08-01 19:05:20 +02:00
|
|
|
|
2000-08-03 02:03:08 +02:00
|
|
|
/* This is special. Within C++, you must specify `extern "C"' for */
|
|
|
|
/* functions which are used via function pointers, and you also */
|
|
|
|
/* must do that for structures which contain function pointers to */
|
|
|
|
/* assure C linkage -- it's not possible to have (local) anonymous */
|
|
|
|
/* functions which are accessed by (global) function pointers. */
|
|
|
|
/* */
|
2000-11-04 02:55:49 +01:00
|
|
|
/* */
|
2000-11-04 09:33:38 +01:00
|
|
|
/* FT_CALLBACK_DEF is used to _define_ a callback function. */
|
2000-11-04 02:55:49 +01:00
|
|
|
/* */
|
2000-11-04 09:33:38 +01:00
|
|
|
/* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */
|
|
|
|
/* contains pointers to callback functions. */
|
2000-11-04 02:55:49 +01:00
|
|
|
/* */
|
|
|
|
/* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable */
|
2000-11-04 09:33:38 +01:00
|
|
|
/* that contains pointers to callback functions. */
|
2000-11-04 02:55:49 +01:00
|
|
|
/* */
|
2001-06-27 18:18:10 +02:00
|
|
|
/* */
|
|
|
|
/* Some 16bit compilers have to redefine these macros to insert */
|
|
|
|
/* the infamous `_cdecl' or `__fastcall' declarations. */
|
|
|
|
/* */
|
2001-06-27 11:26:46 +02:00
|
|
|
#ifndef FT_CALLBACK_DEF
|
2001-06-27 18:18:10 +02:00
|
|
|
#ifdef __cplusplus
|
2002-03-29 08:43:04 +01:00
|
|
|
#define FT_CALLBACK_DEF( x ) extern "C" x
|
2001-06-27 18:18:10 +02:00
|
|
|
#else
|
2002-03-29 08:43:04 +01:00
|
|
|
#define FT_CALLBACK_DEF( x ) static x
|
2001-06-27 11:26:46 +02:00
|
|
|
#endif
|
2001-06-27 18:18:10 +02:00
|
|
|
#endif /* FT_CALLBACK_DEF */
|
2000-08-03 02:03:08 +02:00
|
|
|
|
2001-06-27 11:26:46 +02:00
|
|
|
#ifndef FT_CALLBACK_TABLE
|
2001-06-27 18:18:10 +02:00
|
|
|
#ifdef __cplusplus
|
|
|
|
#define FT_CALLBACK_TABLE extern "C"
|
|
|
|
#define FT_CALLBACK_TABLE_DEF extern "C"
|
|
|
|
#else
|
|
|
|
#define FT_CALLBACK_TABLE extern
|
|
|
|
#define FT_CALLBACK_TABLE_DEF /* nothing */
|
2001-06-27 11:26:46 +02:00
|
|
|
#endif
|
2001-06-27 18:18:10 +02:00
|
|
|
#endif /* FT_CALLBACK_TABLE */
|
2000-08-03 02:03:08 +02:00
|
|
|
|
|
|
|
|
2000-12-01 00:12:33 +01:00
|
|
|
FT_END_HEADER
|
2000-08-01 15:17:04 +02:00
|
|
|
|
|
|
|
|
2000-12-01 00:12:33 +01:00
|
|
|
#endif /* __FTCONFIG_H__ */
|
2000-05-11 20:23:52 +02:00
|
|
|
|
|
|
|
|
|
|
|
/* END */
|