shithub: freetype+ttf2subf

Download patch

ref: bfe2f98f1f352135da49f19dc0819607af27b8a0
parent: 4f2c5544bbbe663483544da8d15675dfce9c0f89
author: David Turner <[email protected]>
date: Fri May 12 08:17:15 EDT 2000

a new massive grunt work. Redefined the EXPORT_DEF,
EXPORT_FUNC, BASE_DEF and BASE_FUNC macros to
let them take an argument..

This is needed to compile the library as a DLL on some platforms
that have different compiler conventions..

git/fs: mount .git/fs: mount/attach disallowed
--- a/CHANGES
+++ b/CHANGES
@@ -1,10 +1,46 @@
 LATEST CHANGES - 
 
+  - yet another massive grunt work. I've changed the definition of the
+    EXPORT_DEF, EXPORT_FUNC, BASE_DEF & BASE_FUNC macros. These now take
+    an argument, which is the function's return value type.
+    
+    This is necessary to compile FreeType as a DLL on Windows and OS/2.
+    Depending on the compiler used, a compiler-specific keyword like __export
+    or __system must be placed before (VisualC++) or after (BorlandC++)
+    the type..
+    
+    Of course, this needed a lot of changes throughout the source code
+    to make it compile again... All cleaned up now, apparently..
+
+    Note also that there is a new EXPORT_VAR macro defined to allow the
+    _declaration_ of an exportable public (constant) variable. This is the
+    case of the raster interfaces (see ftraster.h and ftgrays.h), as well
+    as each module's interface (see sfdriver.h, psdriver.h, etc..)
+
+  - new feature: it is now possible to pass extra parameters to font
+                 drivers when creating a new face object. For now, this
+                 capability is unused. It could however prove to be useful
+                 in a near future..
+
+      the FT_Open_Args structure was changes, as well as the internal
+      driver interface (the specific "init_face" module function has now
+      a different signature).
+
+  - updated the tutorial (not finished though).
+
+  - added the declaration of FT_New_Memory_Face in <freetype/freetype.h>, as
+    it was missing from the public header (the implementation was already
+    in "ftobjs.c").
+
+  - the file <freetype/fterrors.h> has been seriously updated in order to
+    allow the automatic generation of error message tables. See the comments
+    within it for more information.
+
   - major directory hierarchy re-organisation. This was done for two things:
   
       * first, to ease the "manual" compilation of the library by requiring
         at lot less include paths :-)
-        
+
       * second, to allow external programs to effectively access internal
         data fields. For example, this can be extremely useful if someone
         wants to write a font producer or a font manager on top of FreeType.
--- a/demos/src/ftrast2.h
+++ b/demos/src/ftrast2.h
@@ -25,12 +25,11 @@
 extern "C" {
 #endif
 
-#ifndef EXPORT_DEF
-#define EXPORT_DEF  /* nothing */
+#ifndef EXPORT_VAR
+#define EXPORT_VAR(x)  extern x
 #endif
 
-  EXPORT_DEF
-  FT_Raster_Funcs   ft_black2_raster;
+  EXPORT_VAR(FT_Raster_Funcs)   ft_black2_raster;
 
 #ifdef __cplusplus
 }
--- a/include/freetype/config/ftconfig.h
+++ b/include/freetype/config/ftconfig.h
@@ -165,19 +165,23 @@
 #endif
 
 #ifdef FT_MAKE_OPTION_SINGLE_LIBRARY_OBJECT
-#define  BASE_DEF    LOCAL_DEF
-#define  BASE_FUNC   LOCAL_FUNC
+#define  BASE_DEF(x)    static  x
+#define  BASE_FUNC(x)   static  x
 #else
-#define  BASE_DEF    extern
-#define  BASE_FUNC   /* nothing */
+#define  BASE_DEF(x)    extern   x
+#define  BASE_FUNC(x)   extern   x /* nothing */
 #endif
 
 #ifndef  EXPORT_DEF
-#define  EXPORT_DEF   extern
+#define  EXPORT_DEF(x)   extern  x
 #endif
 
 #ifndef  EXPORT_FUNC
-#define  EXPORT_FUNC  /* nothing */
+#define  EXPORT_FUNC(x)     extern  x
+#endif
+
+#ifndef  EXPORT_VAR
+#define  EXPORT_VAR(x)  extern x
 #endif
 
 #endif /* FTCONFIG_H */
--- a/include/freetype/freetype.h
+++ b/include/freetype/freetype.h
@@ -49,7 +49,7 @@
   /* necessary to compile the library as a DLL.                            */
   /*                                                                       */
 #ifndef EXPORT_DEF
-#define EXPORT_DEF  extern
+#define EXPORT_DEF(x)  extern  x
 #endif
 
 #include <freetype/fterrors.h>
@@ -1352,8 +1352,7 @@
   /* <Return>                                                              */
   /*    Error code.  0 means success.                                      */
   /*                                                                       */
-  EXPORT_DEF
-  FT_Error  FT_Init_FreeType( FT_Library*  library );
+  EXPORT_DEF(FT_Error)  FT_Init_FreeType( FT_Library*  library );
 
 
   /*************************************************************************/
@@ -1371,8 +1370,7 @@
   /* <Return>                                                              */
   /*    Error code.  0 means success.                                      */
   /*                                                                       */
-  EXPORT_DEF
-  FT_Error  FT_Done_FreeType( FT_Library  library );
+  EXPORT_DEF(FT_Error)  FT_Done_FreeType( FT_Library  library );
 
 
   /*************************************************************************/
@@ -1519,11 +1517,10 @@
   /*    through the FT_New_GlyphSlot() API function.  Slots are linked in  */
   /*    a single list through their `next' field.                          */
   /*                                                                       */
-  EXPORT_DEF
-  FT_Error  FT_New_Face( FT_Library   library,
-                         const char*  filepathname,
-                         FT_Long      face_index,
-                         FT_Face*     face );
+  EXPORT_DEF(FT_Error)  FT_New_Face( FT_Library   library,
+                                     const char*  filepathname,
+                                     FT_Long      face_index,
+                                     FT_Face*     face );
 
 
   /*************************************************************************/
@@ -1564,12 +1561,11 @@
   /*    `*face'.  Its return value should be 0 if the resource is          */
   /*    recognized, or non-zero if not.                                    */
   /*                                                                       */
-  EXPORT_DEF
-  FT_Error  FT_New_Memory_Face( FT_Library   library,
-                                void*        file_base,
-                                FT_Long      file_size,
-                                FT_Long      face_index,
-                                FT_Face*     face );
+  EXPORT_DEF(FT_Error)  FT_New_Memory_Face( FT_Library   library,
+                                            void*        file_base,
+                                            FT_Long      file_size,
+                                            FT_Long      face_index,
+                                            FT_Face*     face );
 
 
   /*************************************************************************/
@@ -1607,11 +1603,10 @@
   /*    when the face is destroyed. This means calling the stream's        */
   /*    "close" function.                                                  */
   /*                                                                       */
-  EXPORT_DEF
-  FT_Error  FT_Open_Face( FT_Library    library,
-                          FT_Open_Args* args,
-                          FT_Long       face_index,
-                          FT_Face*      face );
+  EXPORT_DEF(FT_Error)  FT_Open_Face( FT_Library    library,
+                        FT_Open_Args* args,
+                        FT_Long       face_index,
+                        FT_Face*      face );
 
 
   /*************************************************************************/
@@ -1645,9 +1640,8 @@
   /*    when invoking this function. Most drivers simply do not implement  */
   /*    file attachments..                                                 */
   /*                                                                       */
-  EXPORT_DEF
-  FT_Error  FT_Attach_File( FT_Face      face,
-                            const char*  filepathname );
+  EXPORT_DEF(FT_Error)  FT_Attach_File( FT_Face      face,
+                                        const char*  filepathname );
 
   /*************************************************************************/
   /*                                                                       */
@@ -1674,9 +1668,8 @@
   /*    when invoking this function. Most drivers simply do not implement  */
   /*    file attachments..                                                 */
   /*                                                                       */
-  EXPORT_DEF
-  FT_Error  FT_Attach_Stream( FT_Face       face,
-                              FT_Open_Args* parameters );
+  EXPORT_DEF(FT_Error)  FT_Attach_Stream( FT_Face       face,
+                                          FT_Open_Args* parameters );
 
 
   /*************************************************************************/
@@ -1694,8 +1687,7 @@
   /* <Return>                                                              */
   /*    Error code.  0 means success.                                      */
   /*                                                                       */
-  EXPORT_DEF
-  FT_Error  FT_Done_Face( FT_Face  face );
+  EXPORT_DEF(FT_Error)  FT_Done_Face( FT_Face  face );
 
 
   /*************************************************************************/
@@ -1719,12 +1711,11 @@
   /*    When dealing with fixed-size faces (i.e., non-scalable formats),   */
   /*    use the function FT_Set_Pixel_Sizes().                             */
   /*                                                                       */
-  EXPORT_DEF
-  FT_Error  FT_Set_Char_Size( FT_Face     face,
-                              FT_F26Dot6  char_width,
-                              FT_F26Dot6  char_height,
-                              FT_UInt     horz_resolution,
-                              FT_UInt     vert_resolution );
+  EXPORT_DEF(FT_Error)   FT_Set_Char_Size( FT_Face     face,
+                                           FT_F26Dot6  char_width,
+                                           FT_F26Dot6  char_height,
+                                           FT_UInt     horz_resolution,
+                                           FT_UInt     vert_resolution );
 
 
   /*************************************************************************/
@@ -1744,10 +1735,9 @@
   /* <Return>                                                              */
   /*    Error code.  0 means success.                                      */
   /*                                                                       */
-  EXPORT_DEF
-  FT_Error  FT_Set_Pixel_Sizes( FT_Face    face,
-                                FT_UInt    pixel_width,
-                                FT_UInt    pixel_height );
+  EXPORT_DEF(FT_Error)  FT_Set_Pixel_Sizes( FT_Face    face,
+                                            FT_UInt    pixel_width,
+                                            FT_UInt    pixel_height );
 
 
   /*************************************************************************/
@@ -1774,10 +1764,9 @@
   /* <Return>                                                              */
   /*    FreeType error code.  0 means success.                             */
   /*                                                                       */
-  EXPORT_DEF
-  FT_Error  FT_Load_Glyph( FT_Face  face,
-                           FT_UInt  glyph_index,
-                           FT_Int   load_flags );
+  EXPORT_DEF(FT_Error)   FT_Load_Glyph( FT_Face  face,
+                                        FT_UInt  glyph_index,
+                                        FT_Int   load_flags );
 
 
   /*************************************************************************/
@@ -1809,10 +1798,9 @@
   /*    is not defined in the charmap, this function will return an        */
   /*    error..                                                            */
   /*                                                                       */
-  EXPORT_DEF
-  FT_Error  FT_Load_Char( FT_Face   face,
-                          FT_ULong  char_code,
-                          FT_Int    load_flags );
+  EXPORT_DEF(FT_Error)   FT_Load_Char( FT_Face   face,
+                                       FT_ULong  char_code,
+                                       FT_Int    load_flags );
 
   /*************************************************************************/
   /*                                                                       */
@@ -1988,24 +1976,21 @@
   /*    kernings, are out of the scope of this API function -- they can be */
   /*    implemented through format-specific interfaces.                    */
   /*                                                                       */
-  EXPORT_DEF
-  FT_Error  FT_Get_Kerning( FT_Face     face,
-                            FT_UInt     left_glyph,
-                            FT_UInt     right_glyph,
-                            FT_Vector*  kerning );
+  EXPORT_DEF(FT_Error)  FT_Get_Kerning( FT_Face     face,
+                                        FT_UInt     left_glyph,
+                                        FT_UInt     right_glyph,
+                                        FT_Vector*  kerning );
 
 
 
 /* XXX : Not implemented yet, but should come soon */
 #if 0
-  EXPORT_DEF
-  FT_Error  FT_Select_Charmap( FT_Face      face,
-                               FT_Encoding  encoding );
+  EXPORT_DEF(FT_Error)  FT_Select_Charmap( FT_Face      face,
+                                           FT_Encoding  encoding );
 
 
-  EXPORT_DEF
-  FT_Error  FT_Set_Charmap( FT_Face     face,
-                            FT_CharMap  charmap );
+  EXPORT_DEF(FT_Error)  FT_Error  FT_Set_Charmap( FT_Face     face,
+                                                  FT_CharMap  charmap );
 #endif
 
   /*************************************************************************/
@@ -2024,9 +2009,8 @@
   /* <Return>                                                              */
   /*    The glyph index.  0 means `undefined character code'.              */
   /*                                                                       */
-  EXPORT_DEF
-  FT_UInt  FT_Get_Char_Index( FT_Face   face,
-                              FT_ULong  charcode );
+  EXPORT_DEF(FT_UInt)   FT_Get_Char_Index( FT_Face   face,
+                                           FT_ULong  charcode );
 
 
   /*************************************************************************/
@@ -2052,10 +2036,9 @@
   /*    divide by zero, it simply returns `MaxInt' or `MinInt' depending   */
   /*    on the signs of `a' and `b'.                                       */
   /*                                                                       */
-  EXPORT_DEF
-  FT_Long  FT_MulDiv( FT_Long  a,
-                      FT_Long  b,
-                      FT_Long  c );
+  EXPORT_DEF(FT_Long)  FT_MulDiv( FT_Long  a,
+                                  FT_Long  b,
+                                  FT_Long  c );
 
 
   /*************************************************************************/
@@ -2087,9 +2070,8 @@
   /*    _second_ argument of this function; this can make a great          */
   /*    difference.                                                        */
   /*                                                                       */
-  EXPORT_DEF
-  FT_Long  FT_MulFix( FT_Long  a,
-                      FT_Long  b );
+  EXPORT_DEF(FT_Long)  FT_MulFix( FT_Long  a,
+                                  FT_Long  b );
 
 
   /*************************************************************************/
@@ -2115,9 +2097,8 @@
   /*    in 32 bits, then the division is computed directly. Otherwise,     */
   /*    we use a specialised version of the old FT_MulDiv64                */
   /*                                                                       */
-  EXPORT_DEF
-  FT_Long  FT_DivFix( FT_Long  a,
-                      FT_Long  b );
+  EXPORT_DEF(FT_Long)  FT_DivFix( FT_Long  a,
+                                  FT_Long  b );
 
 
   /*************************************************************************/
@@ -2148,10 +2129,9 @@
   /*                                                                       */
   /*    It will use the raster correponding to the default glyph format.   */
   /*                                                                       */
-  EXPORT_DEF
-  FT_Error  FT_Outline_Get_Bitmap( FT_Library   library,
-                                   FT_Outline*  outline,
-                                   FT_Bitmap*   map );
+  EXPORT_DEF(FT_Error)  FT_Outline_Get_Bitmap( FT_Library   library,
+                                               FT_Outline*  outline,
+                                               FT_Bitmap*   map );
 
   /*************************************************************************/
   /*                                                                       */
@@ -2184,10 +2164,9 @@
   /*    scan converter is called, which means that the value you give it   */
   /*    is actually ignored..                                              */
   /*                                                                       */
-  EXPORT_DEF
-  FT_Error  FT_Outline_Render( FT_Library        library,
-                               FT_Outline*       outline,
-                               FT_Raster_Params* params );
+  EXPORT_DEF(FT_Error)  FT_Outline_Render( FT_Library        library,
+                                           FT_Outline*       outline,
+                                           FT_Raster_Params* params );
 
   /*************************************************************************/
   /*                                                                       */
@@ -2213,10 +2192,9 @@
   /* <Return>                                                              */
   /*    Error code.  0 means sucess.                                       */
   /*                                                                       */
-  EXPORT_DEF
-  int  FT_Outline_Decompose( FT_Outline*        outline,
-                             FT_Outline_Funcs*  funcs,
-                             void*              user );
+  EXPORT_DEF(int)  FT_Outline_Decompose( FT_Outline*        outline,
+                                         FT_Outline_Funcs*  funcs,
+                                         void*              user );
 
 
   /*************************************************************************/
@@ -2253,11 +2231,10 @@
   /*    code of this function, replacing allocations with `malloc()' if    */
   /*    you want to control where the objects go.                          */
   /*                                                                       */
-  EXPORT_DEF
-  FT_Error  FT_Outline_New( FT_Library   library,
-                            FT_UInt      numPoints,
-                            FT_Int       numContours,
-                            FT_Outline*  outline );
+  EXPORT_DEF(FT_Error)  FT_Outline_New( FT_Library   library,
+                                        FT_UInt      numPoints,
+                                        FT_Int       numContours,
+                                        FT_Outline*  outline );
 
 
   /*************************************************************************/
@@ -2289,9 +2266,8 @@
   /*    of this function, replacing allocations with `malloc()' in your    */
   /*    application if you want something simpler.                         */
   /*                                                                       */
-  EXPORT_DEF
-  FT_Error  FT_Outline_Done( FT_Library   library,
-                             FT_Outline*  outline );
+  EXPORT_DEF(FT_Error)  FT_Outline_Done( FT_Library   library,
+                                         FT_Outline*  outline );
 
   /*************************************************************************/
   /*                                                                       */
@@ -2319,9 +2295,8 @@
   /* <MT-Note>                                                             */
   /*    Yes.                                                               */
   /*                                                                       */
-  EXPORT_DEF
-  void  FT_Outline_Get_CBox( FT_Outline*  outline,
-                             FT_BBox*     cbox );
+  EXPORT_DEF(void)  FT_Outline_Get_CBox( FT_Outline*  outline,
+                                         FT_BBox*     cbox );
 
 
   /*************************************************************************/
@@ -2340,10 +2315,9 @@
   /* <MT-Note>                                                             */
   /*    Yes.                                                               */
   /*                                                                       */
-  EXPORT_DEF
-  void  FT_Outline_Translate( FT_Outline*  outline,
-                              FT_Pos       xOffset,
-                              FT_Pos       yOffset );
+  EXPORT_DEF(void)  FT_Outline_Translate( FT_Outline*  outline,
+                                          FT_Pos       xOffset,
+                                          FT_Pos       yOffset );
 
 
   /*************************************************************************/
@@ -2372,9 +2346,8 @@
   /*                                                                       */
   /*    - the new raster is registered for the glyph format                */
   /*                                                                       */
-  EXPORT_DEF
-  FT_Error  FT_Set_Raster( FT_Library        library,
-                           FT_Raster_Funcs*  raster_funcs );
+  EXPORT_DEF(FT_Error)  FT_Set_Raster( FT_Library        library,
+                                       FT_Raster_Funcs*  raster_funcs );
 
 
   /*************************************************************************/
@@ -2397,9 +2370,8 @@
   /*    as FT_Set_Raster unregisters the previous raster for a given       */
   /*    glyph format..                                                     */
   /*                                                                       */
-  EXPORT_DEF
-  FT_Error  FT_Unset_Raster( FT_Library        library,
-                             FT_Raster_Funcs*  raster_funcs );
+  EXPORT_DEF(FT_Error)  FT_Unset_Raster( FT_Library        library,
+                                         FT_Raster_Funcs*  raster_funcs );
 
 
  /*************************************************************************
@@ -2424,10 +2396,9 @@
   *
   *************************************************************************/
 
-  EXPORT_DEF
-  FT_Raster  FT_Get_Raster( FT_Library        library,
-                            FT_Glyph_Format   glyph_format,
-                            FT_Raster_Funcs  *raster_funcs );
+  EXPORT_DEF(FT_Raster)  FT_Get_Raster( FT_Library        library,
+                                        FT_Glyph_Format   glyph_format,
+                                        FT_Raster_Funcs  *raster_funcs );
 
 
   /*************************************************************************/
@@ -2446,11 +2417,10 @@
   /* <Return>                                                              */
   /*    Error code.  0 means success.                                      */
   /*                                                                       */
-  EXPORT_DEF
-  FT_Error  FT_Set_Raster_Mode( FT_Library      library,
-                                FT_Glyph_Format format,
-                                unsigned long   mode,
-                                void*           args );
+  EXPORT_DEF(FT_Error)  FT_Set_Raster_Mode( FT_Library      library,
+                                            FT_Glyph_Format format,
+                                            unsigned long   mode,
+                                            void*           args );
 
 
  /***************************************************************************/
@@ -2486,9 +2456,8 @@
   /* <Return>                                                              */
   /*    FreeType error code.  0 means success.                             */
   /*                                                                       */
-  EXPORT_DEF
-  FT_Error  FT_Outline_Copy( FT_Outline*  source,
-                             FT_Outline*  target );
+  EXPORT_DEF(FT_Error)  FT_Outline_Copy( FT_Outline*  source,
+                                         FT_Outline*  target );
 
 
 
@@ -2512,9 +2481,8 @@
   /*    You can use FT_Outline_Translate() if you need to translate the    */
   /*    outline's points.                                                  */
   /*                                                                       */
-  EXPORT_DEF
-  void  FT_Outline_Transform( FT_Outline*  outline,
-                              FT_Matrix*   matrix );
+  EXPORT_DEF(void)  FT_Outline_Transform( FT_Outline*  outline,
+                                          FT_Matrix*   matrix );
 
   /*************************************************************************/
   /*                                                                       */
@@ -2535,8 +2503,7 @@
   /*    It shouldn't be used by a normal client application, unless it     */
   /*    knows what it's doing..                                            */
   /*                                                                       */
-  EXPORT_DEF
-  void  FT_Outline_Reverse( FT_Outline*  outline );
+  EXPORT_DEF(void)  FT_Outline_Reverse( FT_Outline*  outline );
 
 
   /*************************************************************************/
@@ -2556,9 +2523,8 @@
   /* <MT-Note>                                                             */
   /*    Yes.                                                               */
   /*                                                                       */
-  EXPORT_DEF
-  void  FT_Vector_Transform( FT_Vector*  vector,
-                             FT_Matrix*  matrix );
+  EXPORT_DEF(void)  FT_Vector_Transform( FT_Vector*  vector,
+                                         FT_Matrix*  matrix );
 
 
   /*************************************************************************/
@@ -2578,9 +2544,8 @@
   /* <MT-Note>                                                             */
   /*    Yes.                                                               */
   /*                                                                       */
-  EXPORT_DEF
-  void  FT_Matrix_Multiply( FT_Matrix*  a,
-                            FT_Matrix*  b );
+  EXPORT_DEF(void)  FT_Matrix_Multiply( FT_Matrix*  a,
+                                        FT_Matrix*  b );
 
 
   /*************************************************************************/
@@ -2601,8 +2566,7 @@
   /* <MT-Note>                                                             */
   /*    Yes.                                                               */
   /*                                                                       */
-  EXPORT_DEF
-  FT_Error  FT_Matrix_Invert( FT_Matrix*  matrix );
+  EXPORT_DEF(FT_Error)   FT_Matrix_Invert( FT_Matrix*  matrix );
 
   /*************************************************************************/
   /*                                                                       */
@@ -2615,8 +2579,7 @@
   /* <InOut>                                                               */
   /*    library :: A handle to a new library object.                       */
   /*                                                                       */
-  EXPORT_DEF
-  void  FT_Default_Drivers( FT_Library  library );
+  EXPORT_DEF(void)  FT_Default_Drivers( FT_Library  library );
 
 #ifdef __cplusplus
   }
--- a/include/freetype/ftbbox.h
+++ b/include/freetype/ftbbox.h
@@ -58,9 +58,8 @@
   /* <Return>                                                              */
   /*    Error code.  0 means success.                                      */
   /*                                                                       */
-  EXPORT_DEF
-  FT_Error  FT_Raster_GetBBox( FT_Outline*  outline,
-                               FT_BBox*     abbox );
+  EXPORT_DEF(FT_Error)  FT_Raster_GetBBox( FT_Outline*  outline,
+                                           FT_BBox*     abbox );
 
 
 #ifdef __cplusplus
--- a/include/freetype/ftglyph.h
+++ b/include/freetype/ftglyph.h
@@ -200,13 +200,12 @@
   *
   ***********************************************************************/
 
-  EXPORT_DEF
-  FT_Error  FT_Get_Glyph_Bitmap( FT_Face         face,
-                                 FT_UInt         glyph_index,
-                                 FT_UInt         load_flags,
-                                 FT_Int          grays,
-                                 FT_Vector*      origin,
-                                 FT_BitmapGlyph  *abitglyph );
+  EXPORT_DEF(FT_Error)  FT_Get_Glyph_Bitmap( FT_Face         face,
+                                             FT_UInt         glyph_index,
+                                             FT_UInt         load_flags,
+                                             FT_Int          grays,
+                                             FT_Vector*      origin,
+                                             FT_BitmapGlyph  *abitglyph );
 
 
  /***********************************************************************
@@ -238,11 +237,10 @@
   *
   ***********************************************************************/
   
-  EXPORT_DEF
-  FT_Error  FT_Get_Glyph_Outline( FT_Face           face,
-                                  FT_UInt           glyph_index,
-                                  FT_UInt           load_flags,
-                                  FT_OutlineGlyph  *vecglyph );
+  EXPORT_DEF(FT_Error)  FT_Get_Glyph_Outline( FT_Face           face,
+                                              FT_UInt           glyph_index,
+                                              FT_UInt           load_flags,
+                                              FT_OutlineGlyph  *vecglyph );
 
 
  /***********************************************************************
@@ -266,10 +264,9 @@
   *
   ***********************************************************************/
   
-  EXPORT_DEF
-  void FT_Set_Transform( FT_Face     face,
-                         FT_Matrix*  matrix,
-                         FT_Vector*  delta );
+  EXPORT_DEF(void)  FT_Set_Transform( FT_Face     face,
+                                      FT_Matrix*  matrix,
+                                      FT_Vector*  delta );
 
 
  /***********************************************************************
@@ -285,8 +282,7 @@
   *
   ***********************************************************************/
   
-  EXPORT_DEF
-  void  FT_Done_Glyph( FT_Glyph  glyph );
+  EXPORT_DEF(void)  FT_Done_Glyph( FT_Glyph  glyph );
 
 
  /***********************************************************************
@@ -313,8 +309,7 @@
   *
   ***********************************************************************/
   
-  EXPORT_DEF
-  void  FT_Glyph_Get_Box( FT_Glyph  glyph,
-                          FT_BBox  *box );
+  EXPORT_DEF(void)  FT_Glyph_Get_Box( FT_Glyph  glyph,
+                                      FT_BBox  *box );
 
 #endif /* FTGLYPH_H */
--- a/include/freetype/ftgrays.h
+++ b/include/freetype/ftgrays.h
@@ -11,10 +11,10 @@
   /* On some systems and compilers (Win32 mostly), an extra keyword is     */
   /* necessary to compile the library as a DLL.                            */
   /*                                                                       */
-#ifndef EXPORT_DEF
-#define EXPORT_DEF  extern
+#ifndef EXPORT_VAR
+#define EXPORT_VAR(x)  extern  x
 #endif
 
-  EXPORT_DEF  FT_Raster_Funcs  ft_grays_raster;
+  EXPORT_VAR(FT_Raster_Funcs)  ft_grays_raster;
 
 #endif
--- a/include/freetype/ftraster.h
+++ b/include/freetype/ftraster.h
@@ -33,12 +33,11 @@
 
 #include <freetype/freetype.h>
 
-#ifndef EXPORT_DEF
-#define EXPORT_DEF  /* nothing */
+#ifndef EXPORT_VAR
+#define EXPORT_VAR(x)  x
 #endif
 
-  EXPORT_DEF
-  FT_Raster_Funcs  ft_raster_funcs;
+  EXPORT_VAR(FT_Raster_Funcs)  ft_raster_funcs;
 
 #ifdef __cplusplus
   }
--- a/include/freetype/internal/ftcalc.h
+++ b/include/freetype/internal/ftcalc.h
@@ -41,8 +41,7 @@
 
 #define SQRT_64( z )  FT_Sqrt64( z )
 
-  EXPORT_DEF
-  FT_Int32  FT_Sqrt64( FT_Int64  x );
+  EXPORT_DEF(FT_Int32)  FT_Sqrt64( FT_Int64  x );
   
 #endif /* OLD_CALCS */
 
@@ -59,21 +58,17 @@
 #define MUL_64( x, y, z )  FT_MulTo64( x, y, &z )
 #define DIV_64( x, y )     FT_Div64by32( &x, y )
 
-  EXPORT_DEF
-  void      FT_Add64    ( FT_Int64* x, FT_Int64* y, FT_Int64*  z );
+  EXPORT_DEF(void)      FT_Add64    ( FT_Int64* x, FT_Int64* y, FT_Int64*  z );
 
-  EXPORT_DEF
-  void      FT_MulTo64  ( FT_Int32  x, FT_Int32  y, FT_Int64*  z );
+  EXPORT_DEF(void)      FT_MulTo64  ( FT_Int32  x, FT_Int32  y, FT_Int64*  z );
+                      
+  EXPORT_DEF(FT_Int32)  FT_Div64by32( FT_Int64* x, FT_Int32  y );
 
-  EXPORT_DEF
-  FT_Int32  FT_Div64by32( FT_Int64* x, FT_Int32  y );
-
 #ifdef FT_CONFIG_OPTION_OLD_CALCS
 
 #define SQRT_64( z )  FT_Sqrt64( &z )
 
-  EXPORT_DEF
-  FT_Int32  FT_Sqrt64( FT_Int64*  x );
+  EXPORT_DEF(FT_Int32)  FT_Sqrt64( FT_Int64*  x );
   
 #endif /* OLD_CALC */
 
@@ -84,8 +79,7 @@
 
 #define SQRT_32( x )       FT_Sqrt32( x )
 
-  BASE_DEF
-  FT_Int32  FT_Sqrt32( FT_Int32  l );
+  BASE_DEF(FT_Int32)  FT_Sqrt32( FT_Int32  l );
 #endif
 
   /*************************************************************************/
--- a/include/freetype/internal/ftdebug.h
+++ b/include/freetype/internal/ftdebug.h
@@ -124,9 +124,8 @@
           } while ( 0 )
 
 
-  EXPORT_DEF
-  void  FT_SetTraceLevel( FT_Trace  component,
-                          char      level );
+  EXPORT_DEF(void)  FT_SetTraceLevel( FT_Trace  component,
+                                      char      level );
 
 
 #elif defined( FT_DEBUG_LEVEL_ERROR )
@@ -170,10 +169,10 @@
           } while ( 0 )
 
   /* print a message */
-  extern void  FT_Message( const char*  fmt, ... );
+  EXPORT_DEF(void)  FT_Message( const char*  fmt, ... );
 
   /* print a message and exit */
-  extern void  FT_Panic  ( const char*  fmt, ... );
+  EXPORT_DEF(void)  FT_Panic  ( const char*  fmt, ... );
 
 #define FT_ERROR( varformat )  FT_Message##varformat
 
--- a/include/freetype/internal/ftextend.h
+++ b/include/freetype/internal/ftextend.h
@@ -120,9 +120,8 @@
   } FT_Extension_Class;
   
 
-  EXPORT_DEF
-  FT_Error  FT_Register_Extension( FT_Driver            driver,
-                                   FT_Extension_Class*  clazz );
+  EXPORT_DEF(FT_Error)  FT_Register_Extension( FT_Driver            driver,
+                                               FT_Extension_Class*  clazz );
 
 
 #ifdef FT_CONFIG_OPTION_EXTEND_ENGINE
@@ -151,10 +150,9 @@
 
 
   /* Returns an extension's data & interface according to its ID */
-  EXPORT_DEF
-  void*     FT_Get_Extension( FT_Face      face,
-                              const char*  extension_id,
-                              void*       *extension_interface );
+  EXPORT_DEF(void*)     FT_Get_Extension( FT_Face      face,
+                                          const char*  extension_id,
+                                          void*       *extension_interface );
 
 #ifdef __cplusplus
   }
--- a/include/freetype/internal/ftlist.h
+++ b/include/freetype/internal/ftlist.h
@@ -33,27 +33,22 @@
 #endif
 
 
-  EXPORT_DEF
-  FT_ListNode  FT_List_Find( FT_List  list,
-                             void*    data );
+  EXPORT_DEF(FT_ListNode)  FT_List_Find( FT_List  list,
+                                         void*    data );
 
-  EXPORT_DEF
-  void  FT_List_Add( FT_List      list,
-                     FT_ListNode  node );
+  EXPORT_DEF(void)  FT_List_Add( FT_List      list,
+                                 FT_ListNode  node );
 
-  EXPORT_DEF
-  void  FT_List_Insert( FT_List      list,
-                        FT_ListNode  node );
+  EXPORT_DEF(void)  FT_List_Insert( FT_List      list,
+                                    FT_ListNode  node );
 
-  EXPORT_DEF
-  void  FT_List_Remove( FT_List      list,
-                        FT_ListNode  node );
-
-  EXPORT_DEF
-  void  FT_List_Up( FT_List      list,
-                    FT_ListNode  node );
+  EXPORT_DEF(void)  FT_List_Remove( FT_List      list,
+                                    FT_ListNode  node );
 
+  EXPORT_DEF(void)  FT_List_Up( FT_List      list,
+                                FT_ListNode  node );
 
+
   /*************************************************************************/
   /*                                                                       */
   /* <FuncType>                                                            */
@@ -72,10 +67,9 @@
                                          void*        user );
 
 
-  EXPORT_DEF
-  FT_Error  FT_List_Iterate( FT_List           list,
-                             FT_List_Iterator  iterator,
-                             void*             user );
+  EXPORT_DEF(FT_Error)  FT_List_Iterate( FT_List           list,
+                                         FT_List_Iterator  iterator,
+                                         void*             user );
 
 
   /*************************************************************************/
@@ -99,11 +93,10 @@
                                        void*      user );
 
 
-  EXPORT_DEF
-  void  FT_List_Finalize( FT_List             list,
-                          FT_List_Destructor  destroy,
-                          FT_Memory           memory,
-                          void*               user );
+  EXPORT_DEF(void)  FT_List_Finalize( FT_List             list,
+                                      FT_List_Destructor  destroy,
+                                      FT_Memory           memory,
+                                      void*               user );
 
 
 #ifdef __cplusplus
--- a/include/freetype/internal/ftobjs.h
+++ b/include/freetype/internal/ftobjs.h
@@ -94,20 +94,17 @@
   /*************************************************************************/
   /*************************************************************************/
 
-  BASE_DEF
-  FT_Error  FT_Alloc( FT_Memory  memory,
-                      FT_Long    size,
-                      void**     P );
+  BASE_DEF(FT_Error)  FT_Alloc( FT_Memory  memory,
+                                FT_Long    size,
+                                void**     P );
 
-  BASE_DEF
-  FT_Error  FT_Realloc( FT_Memory  memory,
-                        FT_Long    current,
-                        FT_Long    size,
-                        void**     P );
+  BASE_DEF(FT_Error)  FT_Realloc( FT_Memory  memory,
+                                  FT_Long    current,
+                                  FT_Long    size,
+                                  void**     P );
 
-  BASE_DEF
-  void  FT_Free( FT_Memory  memory,
-                 void**     P );
+  BASE_DEF(void)      FT_Free( FT_Memory  memory,
+                               void**     P );
 
 
 
@@ -165,33 +162,21 @@
 
 #define FREE( _pointer_ )  FT_Free( memory, (void**)&(_pointer_) )
 
-  /* various useful types and definitions */
 
-  extern void FP_Panic( const char* message );
 
-  extern  FT_Memory  FP_New_Memory( void );
+  EXPORT_DEF(FT_Error)  FT_New_Size( FT_Face   face,
+                                     FT_Size*  size );
 
+  EXPORT_DEF(FT_Error)  FT_Done_Size( FT_Size  size );
 
+  EXPORT_DEF(FT_Error)  FT_New_GlyphSlot( FT_Face        face,
+                                          FT_GlyphSlot*  aslot );
 
+  EXPORT_DEF(void)      FT_Done_GlyphSlot( FT_GlyphSlot  slot );
 
 
-  EXPORT_DEF
-  FT_Error  FT_New_Size( FT_Face   face,
-                         FT_Size*  size );
 
-  EXPORT_DEF
-  FT_Error  FT_Done_Size( FT_Size  size );
 
-  EXPORT_DEF
-  FT_Error  FT_New_GlyphSlot( FT_Face        face,
-                              FT_GlyphSlot*  aslot );
-
-  EXPORT_DEF
-  void  FT_Done_GlyphSlot( FT_GlyphSlot  slot );
-
-
-
-
   /*************************************************************************/
   /*************************************************************************/
   /*************************************************************************/
@@ -314,19 +299,16 @@
   } FT_GlyphZone;
 
 
-  BASE_DEF
-  FT_Error  FT_New_GlyphZone( FT_Memory      memory,
-                              FT_UShort      maxPoints,
-                              FT_Short       maxContours,
-                              FT_GlyphZone*  zone );
+  BASE_DEF(FT_Error)  FT_New_GlyphZone( FT_Memory      memory,
+                                        FT_UShort      maxPoints,
+                                        FT_Short       maxContours,
+                                        FT_GlyphZone*  zone );
 
-  BASE_DEF
-  void      FT_Done_GlyphZone( FT_GlyphZone*  zone );
+  BASE_DEF(void)      FT_Done_GlyphZone( FT_GlyphZone*  zone );
   
-  BASE_DEF
-  FT_Error  FT_Update_GlyphZone( FT_GlyphZone*  zone,
-                                 FT_UShort      num_points,
-                                 FT_Short       num_contours );
+  BASE_DEF(FT_Error)  FT_Update_GlyphZone( FT_GlyphZone*  zone,
+                                           FT_UShort      num_points,
+                                           FT_Short       num_contours );
 
 
   /*************************************************************************/
@@ -395,46 +377,37 @@
   } FT_LibraryRec;
 
 
-  EXPORT_DEF
-  FT_Error  FT_New_Library( FT_Memory    memory,
-                            FT_Library*  library );
+  EXPORT_DEF(FT_Error)  FT_New_Library( FT_Memory    memory,
+                                        FT_Library*  library );
 
 
-  EXPORT_DEF
-  FT_Error  FT_Done_Library( FT_Library  library );
+  EXPORT_DEF(FT_Error)  FT_Done_Library( FT_Library  library );
 
 
 
-  EXPORT_DEF
-  void  FT_Set_Debug_Hook( FT_Library         library,
-                           FT_UInt            hook_index,
-                           FT_DebugHook_Func  debug_hook );
+  EXPORT_DEF(void)  FT_Set_Debug_Hook( FT_Library         library,
+                                       FT_UInt            hook_index,
+                                       FT_DebugHook_Func  debug_hook );
 
 
-  EXPORT_DEF
-  FT_Error  FT_Add_Driver( FT_Library                 library,
-                           const FT_DriverInterface*  driver_interface );
+  EXPORT_DEF(FT_Error)  FT_Add_Driver( FT_Library                 library,
+                                       const FT_DriverInterface*  driver_interface );
 
 
-  EXPORT_DEF
-  FT_Error  FT_Remove_Driver( FT_Driver  driver );
+  EXPORT_DEF(FT_Error)  FT_Remove_Driver( FT_Driver  driver );
 
 
-  EXPORT_DEF
-  FT_Driver  FT_Get_Driver( FT_Library  library,
-                            char*       driver_name );
+  EXPORT_DEF(FT_Driver) FT_Get_Driver( FT_Library  library,
+                                       char*       driver_name );
 
 #ifndef FT_CONFIG_OPTION_NO_DEFAULT_SYSTEM
 
-  EXPORT_DEF
-  FT_Error  FT_New_Stream( const char*  filepathname,
-                           FT_Stream    astream );
+  EXPORT_DEF(FT_Error)   FT_New_Stream( const char*  filepathname,
+                                        FT_Stream    astream );
 
-  EXPORT_DEF
-  void  FT_Done_Stream( FT_Stream  stream );
+  EXPORT_DEF(void)       FT_Done_Stream( FT_Stream  stream );
 
-  extern
-  FT_Memory  FT_New_Memory( void );
+  EXPORT_DEF(FT_Memory)  FT_New_Memory( void );
 
 #endif
 
@@ -443,8 +416,7 @@
 /* Client applications can register new rasters through the FT_Set_Raster API..              */
 /*                                                                                           */
 #ifndef FT_NO_DEFAULT_RASTER
-  extern
-  FT_Raster_Funcs  ft_default_raster;
+  EXPORT_VAR(FT_Raster_Funcs)  ft_default_raster;
 #endif
 
 
--- a/include/freetype/internal/ftstream.h
+++ b/include/freetype/internal/ftstream.h
@@ -167,79 +167,61 @@
 
 
 
-  BASE_DEF
-  void  FT_New_Memory_Stream( FT_Library     library,
-                              void*          base,
-     			      unsigned long  size,
-                              FT_Stream      stream );
+  BASE_DEF(void) FT_New_Memory_Stream( FT_Library     library,
+                                       void*          base,
+                                       unsigned long  size,
+                                       FT_Stream      stream );
  
-  BASE_DEF
-  FT_Error  FT_Seek_Stream( FT_Stream  stream,
-                            FT_ULong   pos );
+  BASE_DEF(FT_Error)  FT_Seek_Stream( FT_Stream  stream,
+                                      FT_ULong   pos );
 
-  BASE_DEF
-  FT_Error  FT_Skip_Stream( FT_Stream  stream,
-                            FT_Long    distance );
+  BASE_DEF(FT_Error)  FT_Skip_Stream( FT_Stream  stream,
+                                                FT_Long    distance );
                             
-  BASE_DEF
-  FT_Long   FT_Stream_Pos( FT_Stream  stream );
+  BASE_DEF(FT_Long)   FT_Stream_Pos( FT_Stream  stream );
 
 
-  BASE_DEF
-  FT_Error  FT_Read_Stream( FT_Stream  stream,
-                            void*      buffer,
-                            FT_ULong   count );
-                            
-  BASE_DEF
-  FT_Error  FT_Read_Stream_At( FT_Stream  stream,
-                               FT_ULong   pos,
-                               void*      buffer,
-                               FT_ULong   count );
+  BASE_DEF(FT_Error)  FT_Read_Stream( FT_Stream  stream,
+                                      void*      buffer,
+                                      FT_ULong   count );
+                                      
+  BASE_DEF(FT_Error)  FT_Read_Stream_At( FT_Stream  stream,
+                                         FT_ULong   pos,
+                                         void*      buffer,
+                                         FT_ULong   count );
                                
-  BASE_DEF
-  FT_Error  FT_Access_Frame( FT_Stream  stream,
-                             FT_ULong   count );
+  BASE_DEF(FT_Error)  FT_Access_Frame( FT_Stream  stream,
+                                       FT_ULong   count );
                              
-  BASE_DEF
-  void      FT_Forget_Frame( FT_Stream  stream );
+  BASE_DEF(void)      FT_Forget_Frame( FT_Stream  stream );
 
 
 
-  BASE_DEF
-  FT_Char   FT_Get_Char( FT_Stream  stream );
+  BASE_DEF(FT_Char)   FT_Get_Char( FT_Stream  stream );
   
-  BASE_DEF
-  FT_Short  FT_Get_Short( FT_Stream  stream );
+  BASE_DEF(FT_Short)  FT_Get_Short( FT_Stream  stream );
   
-  BASE_DEF
-  FT_Long   FT_Get_Offset( FT_Stream  stream );
+  BASE_DEF(FT_Long)   FT_Get_Offset( FT_Stream  stream );
   
-  BASE_DEF
-  FT_Long   FT_Get_Long( FT_Stream  stream );
+  BASE_DEF(FT_Long)   FT_Get_Long( FT_Stream  stream );
 
 
 
-  BASE_DEF
-  FT_Char  FT_Read_Char( FT_Stream  stream,
-                         FT_Error*  error ); 
-
-  BASE_DEF
-  FT_Short  FT_Read_Short( FT_Stream  stream,
-                           FT_Error*  error ); 
+  BASE_DEF(FT_Char)   FT_Read_Char( FT_Stream  stream,
+                                    FT_Error*  error ); 
 
-  BASE_DEF
-  FT_Long  FT_Read_Offset( FT_Stream  stream,
-                           FT_Error*  error ); 
+  BASE_DEF(FT_Short)  FT_Read_Short( FT_Stream  stream,
+                                     FT_Error*  error ); 
 
-  BASE_DEF
-  FT_Long  FT_Read_Long( FT_Stream  stream,
-                         FT_Error*  error ); 
+  BASE_DEF(FT_Long)   FT_Read_Offset( FT_Stream  stream,
+                                      FT_Error*  error ); 
 
-  BASE_DEF
-  FT_Error FT_Read_Fields( FT_Stream             stream,
-                           const FT_Frame_Field* fields,
-                           void*                 structure );
+  BASE_DEF(FT_Long)   FT_Read_Long( FT_Stream  stream,
+                                    FT_Error*  error ); 
 
+  BASE_DEF(FT_Error)  FT_Read_Fields( FT_Stream             stream,
+                                      const FT_Frame_Field* fields,
+                                      void*                 structure );
 
 #define USE_Stream( resource, stream )  \
           FT_SET_ERROR( FT_Open_Stream( resource, stream ) )
--- a/include/freetype/tttables.h
+++ b/include/freetype/tttables.h
@@ -525,9 +525,8 @@
   *
   ***************************************************************************/
   
-  EXPORT_DEF
-  void*  FT_Get_Sfnt_Table( FT_Face      face,
-                            FT_Sfnt_Tag  tag );
+  EXPORT_DEF(void*)  FT_Get_Sfnt_Table( FT_Face      face,
+                                        FT_Sfnt_Tag  tag );
 
 
 #endif /* TTTABLES_H */
--- a/src/base/ftcalc.c
+++ b/src/base/ftcalc.c
@@ -69,8 +69,7 @@
   /* <Return>                                                              */
   /*    The result of `sqrt(x)'.                                           */
   /*                                                                       */
-  EXPORT_FUNC
-  FT_Int32  FT_Sqrt32( FT_Int32 x )
+  EXPORT_FUNC(FT_Int32)  FT_Sqrt32( FT_Int32 x )
   {
     FT_ULong  val, root, newroot, mask;
 
@@ -123,10 +122,9 @@
   /*    divide by zero, it simply returns `MaxInt' or `MinInt' depending   */
   /*    on the signs of `a' and `b'.                                       */
   /*                                                                       */
-  EXPORT_FUNC
-  FT_Long  FT_MulDiv( FT_Long  a,
-                      FT_Long  b,
-                      FT_Long  c )
+  EXPORT_FUNC(FT_Long)  FT_MulDiv( FT_Long  a,
+                                   FT_Long  b,
+                                   FT_Long  c )
   {
     FT_Int s;
 
@@ -169,9 +167,8 @@
   /*    _second_ argument of this function; this can make a great          */
   /*    difference.                                                        */
   /*                                                                       */
-  EXPORT_FUNC
-  FT_Long  FT_MulFix( FT_Long  a,
-                      FT_Long  b )
+  EXPORT_FUNC(FT_Long)  FT_MulFix( FT_Long  a,
+                                   FT_Long  b )
   {
     FT_Int s;
 
@@ -207,9 +204,8 @@
   /*    32 bits, then the division is computed directly.  Otherwise, we    */
   /*    use a specialized version of the old FT_MulDiv64().                */
   /*                                                                       */
-  EXPORT_FUNC
-  FT_Int32  FT_DivFix( FT_Long  a,
-                       FT_Long  b )
+  EXPORT_FUNC(FT_Int32)  FT_DivFix( FT_Long  a,
+                                    FT_Long  b )
   {
     FT_Int32   s;
     FT_Word32  q;
@@ -262,8 +258,7 @@
      }
 
 
-  EXPORT_FUNC
-  FT_Int32  FT_Sqrt64( FT_Int64  l )
+  EXPORT_FUNC(FT_Int32)  FT_Sqrt64( FT_Int64  l )
   {
     FT_Int64  r, s;
 
@@ -327,10 +322,9 @@
   /*                                                                       */
   /*      and 2*0x157F0 = 176096.                                          */
   /*                                                                       */
-  EXPORT_FUNC
-  FT_Long  FT_MulDiv( FT_Long  a,
-                      FT_Long  b,
-                      FT_Long  c )
+  EXPORT_FUNC(FT_Long)  FT_MulDiv( FT_Long  a,
+                                   FT_Long  b,
+                                   FT_Long  c )
   {
     long   s;
 
@@ -393,9 +387,8 @@
   /*    idea is to use bounds like 2048 and 1048576 (=floor((2^31-1)/2048) */
   /*    for `a' and `b', respectively.                                     */
   /*                                                                       */
-  EXPORT_FUNC
-  FT_Long  FT_MulFix( FT_Long  a,
-                      FT_Long  b )
+  EXPORT_FUNC(FT_Long)  FT_MulFix( FT_Long  a,
+                                   FT_Long  b )
   {
     FT_Long   s;
     FT_ULong  ua, ub;
@@ -448,9 +441,8 @@
   /*    32 bits, then the division is computed directly.  Otherwise, we    */
   /*    use a specialized version of the old FT_MulDiv64().                */
   /*                                                                       */
-  EXPORT_FUNC
-  FT_Long  FT_DivFix( FT_Long  a,
-                      FT_Long  b )
+  EXPORT_FUNC(FT_Long)  FT_DivFix( FT_Long  a,
+                                   FT_Long  b )
   {
     FT_Int32   s;
     FT_Word32  q;
@@ -510,10 +502,9 @@
   /* <Note>                                                                */
   /*    Will be wrapped by the ADD_64() macro.                             */
   /*                                                                       */
-  EXPORT_FUNC
-  void  FT_Add64( FT_Int64*  x,
-                  FT_Int64*  y,
-                  FT_Int64*  z )
+  EXPORT_FUNC(void)  FT_Add64( FT_Int64*  x,
+                               FT_Int64*  y,
+                               FT_Int64*  z )
   {
     register FT_Word32  lo, hi;
 
@@ -543,10 +534,9 @@
   /* <Note>                                                                */
   /*    Will be wrapped by the MUL_64() macro.                             */
   /*                                                                       */
-  EXPORT_FUNC
-  void  FT_MulTo64( FT_Int32   x,
-                    FT_Int32   y,
-                    FT_Int64*  z )
+  EXPORT_FUNC(void)  FT_MulTo64( FT_Int32   x,
+                                 FT_Int32   y,
+                                 FT_Int64*  z )
   {
     FT_Int32   s;
 
@@ -609,9 +599,8 @@
   /* <Note>                                                                */
   /*    Will be wrapped by the DIV_64() macro.                             */
   /*                                                                       */
-  EXPORT_FUNC
-  FT_Int32  FT_Div64by32( FT_Int64*  x,
-                          FT_Int32   y )
+  EXPORT_FUNC(FT_Int32)  FT_Div64by32( FT_Int64*  x,
+                                       FT_Int32   y )
   {
     FT_Int32   s;
     FT_Word32  q, r, i, lo;
@@ -712,8 +701,7 @@
         return j-1;
       }
 
-  EXPORT_FUNC
-  FT_Int32  FT_Sqrt64( FT_Int64*  l )
+  EXPORT_FUNC(FT_Int32)  FT_Sqrt64( FT_Int64*  l )
   {
     FT_Int64  l2;
     FT_Int32  r, s;
--- a/src/base/ftdebug.c
+++ b/src/base/ftdebug.c
@@ -31,7 +31,7 @@
 #include <string.h>
 
 
-  void  FT_Message( const char*  fmt, ... )
+  EXPORT_FUNC(void)  FT_Message( const char*  fmt, ... )
   {
     va_list  ap;
 
@@ -42,7 +42,7 @@
   }
 
 
-  void  FT_Panic( const char*  fmt, ... )
+  EXPORT_FUNC(void)  FT_Panic( const char*  fmt, ... )
   {
     va_list  ap;
 
@@ -72,9 +72,8 @@
   /*                 components will be traced.                            */
   /*    level     :: The tracing level.                                    */
   /*                                                                       */
-  EXPORT_FUNC
-  void  FT_SetTraceLevel( FT_Trace  component,
-                          char      level )
+  EXPORT_FUNC(void)  FT_SetTraceLevel( FT_Trace  component,
+                                       char      level )
   {
     if ( component >= trace_max )
       return;
--- a/src/base/ftextend.c
+++ b/src/base/ftextend.c
@@ -114,9 +114,8 @@
   /* <Return>                                                              */
   /*    FreeType error code.  0 means success.                             */
   /*                                                                       */
-  EXPORT_FUNC
-  FT_Error  FT_Register_Extension( FT_Driver            driver,
-                                   FT_Extension_Class*  class )
+  EXPORT_FUNC(FT_Error)  FT_Register_Extension( FT_Driver            driver,
+                                                FT_Extension_Class*  class )
   {
     FT_Extension_Registry*  registry;
 
@@ -163,10 +162,9 @@
   /* <Return>                                                              */
   /*    A pointer to the extension block.                                  */
   /*                                                                       */
-  EXPORT_FUNC
-  void*  FT_Get_Extension( FT_Face      face,
-                           const char*  extension_id,
-                           void*       *extension_interface )
+  EXPORT_FUNC(void*)  FT_Get_Extension( FT_Face      face,
+                                        const char*  extension_id,
+                                        void*       *extension_interface )
   {
     FT_Extension_Registry*  registry;
 
--- a/src/base/ftglyph.c
+++ b/src/base/ftglyph.c
@@ -95,13 +95,12 @@
   *
   ***********************************************************************/
 
-  EXPORT_FUNC
-  FT_Error  FT_Get_Glyph_Bitmap( FT_Face         face,
-                                 FT_UInt         glyph_index,
-                                 FT_UInt         load_flags,
-                                 FT_Int          grays,
-                                 FT_Vector*      origin,
-                                 FT_BitmapGlyph  *abitglyph )
+  EXPORT_FUNC(FT_Error)  FT_Get_Glyph_Bitmap( FT_Face         face,
+                                              FT_UInt         glyph_index,
+                                              FT_UInt         load_flags,
+                                              FT_Int          grays,
+                                              FT_Vector*      origin,
+                                              FT_BitmapGlyph  *abitglyph )
   {
     FT_Error         error;
     FT_Memory        memory;
@@ -271,11 +270,10 @@
   *
   ***********************************************************************/
   
-  EXPORT_FUNC
-  FT_Error  FT_Get_Glyph_Outline( FT_Face           face,
-                                  FT_UInt           glyph_index,
-                                  FT_UInt           load_flags,
-                                  FT_OutlineGlyph  *vecglyph )
+  EXPORT_FUNC(FT_Error)  FT_Get_Glyph_Outline( FT_Face           face,
+                                               FT_UInt           glyph_index,
+                                               FT_UInt           load_flags,
+                                               FT_OutlineGlyph  *vecglyph )
   {
     FT_Error         error;
     FT_Memory        memory;
@@ -360,10 +358,9 @@
   *
   ***********************************************************************/
   
-  EXPORT_FUNC
-  void FT_Set_Transform( FT_Face     face,
-                         FT_Matrix*  matrix,
-                         FT_Vector*  delta )
+  EXPORT_FUNC(void) FT_Set_Transform( FT_Face     face,
+                                      FT_Matrix*  matrix,
+                                      FT_Vector*  delta )
   {
     face->transform_flags = 0;
     
@@ -411,8 +408,7 @@
   *
   ***********************************************************************/
   
-  EXPORT_FUNC
-  void  FT_Done_Glyph( FT_Glyph  glyph )
+  EXPORT_FUNC(void)  FT_Done_Glyph( FT_Glyph  glyph )
   {
     if (glyph)
     {
@@ -463,9 +459,8 @@
   *
   ***********************************************************************/
   
-  EXPORT_DEF
-  void  FT_Glyph_Get_Box( FT_Glyph  glyph,
-                          FT_BBox  *box )
+  EXPORT_FUNC(void)  FT_Glyph_Get_Box( FT_Glyph  glyph,
+                                       FT_BBox  *box )
   {
     box->xMin = box->xMax = 0;
     box->yMin = box->yMax = 0;
--- a/src/base/ftinit.c
+++ b/src/base/ftinit.c
@@ -76,8 +76,7 @@
   /* <InOut>                                                               */
   /*    library :: A handle to a new library object.                       */
   /*                                                                       */
-  EXPORT_FUNC
-  void  FT_Default_Drivers( FT_Library  library )
+  EXPORT_FUNC(void)  FT_Default_Drivers( FT_Library  library )
   {
     FT_Error                   error;
     const FT_DriverInterface* *cur;
@@ -111,8 +110,7 @@
   /* <Return>                                                              */
   /*    FreeTyoe error code.  0 means success.                             */
   /*                                                                       */
-  EXPORT_FUNC
-  FT_Error  FT_Init_FreeType( FT_Library*  library )
+  EXPORT_FUNC(FT_Error)  FT_Init_FreeType( FT_Library*  library )
   {
     FT_Error   error;
     FT_Memory  memory;
--- a/src/base/ftlist.c
+++ b/src/base/ftlist.c
@@ -43,9 +43,8 @@
   /* <Return>                                                              */
   /*    List node.  NULL if it wasn't found.                               */
   /*                                                                       */
-  BASE_FUNC
-  FT_ListNode  FT_List_Find( FT_List  list,
-                             void*    data )
+  BASE_FUNC(FT_ListNode)  FT_List_Find( FT_List  list,
+                                        void*    data )
   {
     FT_ListNode  cur;
 
@@ -75,9 +74,8 @@
   /*    list :: A pointer to the parent list.                              */
   /*    node :: The node to append.                                        */
   /*                                                                       */
-  BASE_FUNC
-  void  FT_List_Add( FT_List      list,
-                     FT_ListNode  node )
+  BASE_FUNC(void)  FT_List_Add( FT_List      list,
+                                FT_ListNode  node )
   {
     FT_ListNode  before = list->tail;
 
@@ -106,9 +104,8 @@
   /*    list :: A pointer to parent list.                                  */
   /*    node :: The node to insert.                                        */
   /*                                                                       */
-  BASE_FUNC
-  void  FT_List_Insert( FT_List      list,
-                        FT_ListNode  node )
+  BASE_FUNC(void)  FT_List_Insert( FT_List      list,
+                                   FT_ListNode  node )
   {
     FT_ListNode  after = list->head;
 
@@ -140,9 +137,8 @@
   /* <InOut>                                                               */
   /*    list :: A pointer to the parent list.                              */
   /*                                                                       */
-  BASE_FUNC
-  void  FT_List_Remove( FT_List      list,
-                        FT_ListNode  node )
+  BASE_FUNC(void)  FT_List_Remove( FT_List      list,
+                                   FT_ListNode  node )
   {
     FT_ListNode  before, after;
 
@@ -175,9 +171,8 @@
   /*    list :: A pointer to the parent list.                              */
   /*    node :: The node to move.                                          */
   /*                                                                       */
-  BASE_FUNC
-  void  FT_List_Up( FT_List      list,
-                    FT_ListNode  node )
+  BASE_FUNC(void)  FT_List_Up( FT_List      list,
+                               FT_ListNode  node )
   {
     FT_ListNode  before, after;
 
@@ -223,10 +218,9 @@
   /* <Return>                                                              */
   /*    The result (an error code) of the last iterator call.              */
   /*                                                                       */
-  BASE_FUNC
-  FT_Error  FT_List_Iterate( FT_List            list,
-                             FT_List_Iterator   iterator,
-                             void*              user )
+  BASE_FUNC(FT_Error)  FT_List_Iterate( FT_List            list,
+                                        FT_List_Iterator   iterator,
+                                        void*              user )
   {
     FT_ListNode  cur   = list->head;
     FT_Error     error = FT_Err_Ok;
@@ -268,11 +262,10 @@
   /*    user    :: A user-supplied field which is passed as the last       */
   /*               argument to the destructor.                             */
   /*                                                                       */
-  BASE_FUNC
-  void  FT_List_Finalize( FT_List             list,
-                          FT_List_Destructor  destroy,
-                          FT_Memory           memory,
-                          void*               user )
+  BASE_FUNC(void)  FT_List_Finalize( FT_List             list,
+                                     FT_List_Destructor  destroy,
+                                     FT_Memory           memory,
+                                     void*               user )
   {
     FT_ListNode  cur;
 
--- a/src/base/ftobjs.c
+++ b/src/base/ftobjs.c
@@ -66,10 +66,9 @@
   /* <Return>                                                              */
   /*    FreeType error code.  0 means success.                             */
   /*                                                                       */
-  BASE_FUNC
-  FT_Error  FT_Alloc( FT_Memory  memory,
-                      FT_Long    size,
-                      void**     P )
+  BASE_FUNC(FT_Error)  FT_Alloc( FT_Memory  memory,
+                                 FT_Long    size,
+                                 void**     P )
   {
     FT_Assert( P != 0 );
 
@@ -131,11 +130,10 @@
   /*                                                                       */
   /*    (Some embedded systems do not have a working realloc function).    */
   /*                                                                       */
-  BASE_FUNC
-  FT_Error  FT_Realloc( FT_Memory  memory,
-                        FT_Long    current,
-                        FT_Long    size,
-                        void**     P )
+  BASE_FUNC(FT_Error)  FT_Realloc( FT_Memory  memory,
+                                   FT_Long    current,
+                                   FT_Long    size,
+                                   void**     P )
   {
     void*  Q;
 
@@ -191,9 +189,8 @@
   /*    This is a strong convention within all of FreeType and its         */
   /*    drivers.                                                           */
   /*                                                                       */
-  BASE_FUNC
-  void  FT_Free( FT_Memory  memory,
-                 void**     P )
+  BASE_FUNC(void)  FT_Free( FT_Memory  memory,
+                            void**     P )
   {
     FT_TRACE2(( "FT_Free:" ));
     FT_TRACE2(( " Freeing block 0x%08lx, ref 0x%08lx\n",
@@ -274,8 +271,7 @@
   /* <Description>                                                         */
   /*    Closes and destroys a stream object.                               */
   /*                                                                       */
-  EXPORT_FUNC
-  void  FT_Done_Stream( FT_Stream  stream )
+  EXPORT_FUNC(void)  FT_Done_Stream( FT_Stream  stream )
   {
     if ( stream->close )
       stream->close( stream );
@@ -413,10 +409,9 @@
   *
   *************************************************************************/
   
-  EXPORT_FUNC
-  FT_Raster  FT_Get_Raster( FT_Library        library,
-                            FT_Glyph_Format   glyph_format,
-                            FT_Raster_Funcs  *raster_funcs )
+  EXPORT_FUNC(FT_Raster)  FT_Get_Raster( FT_Library        library,
+                                         FT_Glyph_Format   glyph_format,
+                                         FT_Raster_Funcs  *raster_funcs )
   {
     FT_Int  n;
     
@@ -459,9 +454,8 @@
   /*                                                                       */
   /*    - the new raster is registered for the glyph format                */
   /*                                                                       */
-  EXPORT_FUNC
-  FT_Error  FT_Set_Raster( FT_Library        library,
-                           FT_Raster_Funcs*  raster_funcs )
+  EXPORT_FUNC(FT_Error)  FT_Set_Raster( FT_Library        library,
+                                        FT_Raster_Funcs*  raster_funcs )
   {
     FT_Glyph_Format  glyph_format = raster_funcs->glyph_format;
     FT_Raster_Funcs* funcs;
@@ -534,9 +528,8 @@
   /* <Return>                                                              */
   /*    Error code.  0 means success.                                      */
   /*                                                                       */
-  EXPORT_DEF
-  FT_Error  FT_Unset_Raster( FT_Library        library,
-                             FT_Raster_Funcs*  raster_funcs )
+  EXPORT_DEF(FT_Error)  FT_Unset_Raster( FT_Library        library,
+                                         FT_Raster_Funcs*  raster_funcs )
   {
     FT_Glyph_Format  glyph_format = raster_funcs->glyph_format;
     FT_Error         error;
@@ -581,11 +574,10 @@
   /* <Return>                                                              */
   /*    Error code.  0 means success.                                      */
   /*                                                                       */
-  EXPORT_FUNC
-  FT_Error  FT_Set_Raster_Mode( FT_Library      library,
-                                FT_Glyph_Format format,
-                                unsigned long   mode,
-                                void*           args )
+  EXPORT_FUNC(FT_Error)  FT_Set_Raster_Mode( FT_Library      library,
+                                             FT_Glyph_Format format,
+                                             unsigned long   mode,
+                                             void*           args )
   {
     FT_Raster_Funcs  funcs;
     FT_Raster        raster;
@@ -617,10 +609,9 @@
   /*    Currently, four debug hook slots are available, but only two (for  */
   /*    the TrueType and the Type 1 interpreter) are defined.              */
   /*                                                                       */
-  EXPORT_FUNC
-  void  FT_Set_Debug_Hook( FT_Library         library,
-                           FT_UInt            hook_index,
-                           FT_DebugHook_Func  debug_hook )
+  EXPORT_FUNC(void)  FT_Set_Debug_Hook( FT_Library         library,
+                                        FT_UInt            hook_index,
+                                        FT_DebugHook_Func  debug_hook )
   {
     if ( hook_index < ( sizeof ( library->debug_hooks ) / sizeof ( void* ) ) )
       library->debug_hooks[hook_index] = debug_hook;
@@ -646,9 +637,8 @@
   /* <Return>                                                              */
   /*    FreeType error code.  0 means success.                             */
   /*                                                                       */
-  EXPORT_FUNC
-  FT_Error  FT_New_Library( FT_Memory    memory,
-                            FT_Library*  alibrary )
+  EXPORT_FUNC(FT_Error)  FT_New_Library( FT_Memory    memory,
+                                         FT_Library*  alibrary )
   {
     FT_Library library = 0;
     FT_Error   error;
@@ -694,8 +684,7 @@
   /* <Return>                                                              */
   /*    FreeType error code.  0 means success.                             */
   /*                                                                       */
-  EXPORT_FUNC
-  FT_Error  FT_Done_Library( FT_Library  library )
+  EXPORT_FUNC(FT_Error)  FT_Done_Library( FT_Library  library )
   {
     FT_Memory  memory;
     FT_Int     n;
@@ -772,9 +761,8 @@
   /*    This function doesn't check whether the driver is already          */
   /*    installed!                                                         */
   /*                                                                       */
-  EXPORT_FUNC
-  FT_Error  FT_Add_Driver( FT_Library                 library,
-                           const FT_DriverInterface*  driver_interface )
+  EXPORT_FUNC(FT_Error)  FT_Add_Driver( FT_Library                 library,
+                                        const FT_DriverInterface*  driver_interface )
   {
     FT_Error   error;
     FT_Driver  driver;
@@ -834,8 +822,7 @@
   /* <Return>                                                              */
   /*    FreeType error code.  0 means success.                             */
   /*                                                                       */
-  EXPORT_FUNC
-  FT_Error  FT_Remove_Driver( FT_Driver  driver )
+  EXPORT_FUNC(FT_Error)  FT_Remove_Driver( FT_Driver  driver )
   {
     FT_Library  library;
     FT_Memory   memory;
@@ -898,9 +885,8 @@
   /* <Return>                                                              */
   /*    A handle to the driver object, 0 otherwise.                        */
   /*                                                                       */
-  EXPORT_FUNC
-  FT_Driver  FT_Get_Driver( FT_Library  library,
-                            char*       driver_name )
+  EXPORT_FUNC(FT_Driver)  FT_Get_Driver( FT_Library  library,
+                                         char*       driver_name )
   {
     FT_Driver  *cur, *limit;
 
@@ -1008,11 +994,10 @@
   /*    `*face'.  Its return value should be 0 if the resource is          */
   /*    recognized, or non-zero if not.                                    */
   /*                                                                       */
-  EXPORT_FUNC
-  FT_Error  FT_New_Face( FT_Library   library,
-                         const char*  pathname,
-                         FT_Long      face_index,
-                         FT_Face*     aface )
+  EXPORT_FUNC(FT_Error)  FT_New_Face( FT_Library   library,
+                                      const char*  pathname,
+                                      FT_Long      face_index,
+                                      FT_Face*     aface )
   {
     FT_Open_Args  args;
 
@@ -1060,12 +1045,11 @@
   /*    `*face'.  Its return value should be 0 if the resource is          */
   /*    recognized, or non-zero if not.                                    */
   /*                                                                       */
-  EXPORT_FUNC
-  FT_Error  FT_New_Memory_Face( FT_Library   library,
-                                void*        file_base,
-                                FT_Long      file_size,
-                                FT_Long      face_index,
-                                FT_Face*     face )
+  EXPORT_FUNC(FT_Error)  FT_New_Memory_Face( FT_Library   library,
+                                             void*        file_base,
+                                             FT_Long      file_size,
+                                             FT_Long      face_index,
+                                             FT_Face*     face )
   {
     FT_Open_Args  args;
 
@@ -1115,11 +1099,10 @@
   /*    `*face'.  Its return value should be 0 if the resource is          */
   /*    recognized, or non-zero if not.                                    */
   /*                                                                       */
-  EXPORT_FUNC
-  FT_Error  FT_Open_Face( FT_Library     library,
-                          FT_Open_Args*  args,
-                          FT_Long        face_index,
-                          FT_Face*       aface )
+  EXPORT_FUNC(FT_Error)  FT_Open_Face( FT_Library     library,
+                                       FT_Open_Args*  args,
+                                       FT_Long        face_index,
+                                       FT_Face*       aface )
   {
     FT_Error     error;
     FT_Driver    driver;
@@ -1290,9 +1273,8 @@
   /*    when invoking this function. Most  drivers simply do not implement */
   /*    file attachments.                                                  */
   /*                                                                       */
-  EXPORT_FUNC
-  FT_Error  FT_Attach_File( FT_Face      face,
-                            const char*  filepathname )
+  EXPORT_FUNC(FT_Error)  FT_Attach_File( FT_Face      face,
+                                         const char*  filepathname )
   {
     FT_Open_Args  open;
 
@@ -1327,9 +1309,8 @@
   /*    when invoking this function. Most drivers simply do not implement  */
   /*    file attachments..                                                 */
   /*                                                                       */
-  EXPORT_DEF
-  FT_Error  FT_Attach_Stream( FT_Face       face,
-                              FT_Open_Args* parameters )
+  EXPORT_FUNC(FT_Error)  FT_Attach_Stream( FT_Face       face,
+                                          FT_Open_Args* parameters )
   {
     FT_Stream  stream;
     FT_Error   error;
@@ -1382,8 +1363,7 @@
   /* <Return>                                                              */
   /*    Error code.  0 means success.                                      */
   /*                                                                       */
-  EXPORT_FUNC
-  FT_Error  FT_Done_Face( FT_Face  face )
+  EXPORT_FUNC(FT_Error)  FT_Done_Face( FT_Face  face )
   {
     FT_Error             error;
     FT_Driver            driver;
@@ -1435,9 +1415,8 @@
   /* <Return>                                                              */
   /*    Error code.  0 means success.                                      */
   /*                                                                       */
-  EXPORT_FUNC
-  FT_Error  FT_New_Size( FT_Face   face,
-                         FT_Size*  asize )
+  EXPORT_FUNC(FT_Error)  FT_New_Size( FT_Face   face,
+                                      FT_Size*  asize )
   {
     FT_Error             error;
     FT_Memory            memory;
@@ -1501,8 +1480,7 @@
   /* <Return>                                                              */
   /*    Error code.  0 means success.                                      */
   /*                                                                       */
-  EXPORT_FUNC
-  FT_Error  FT_Done_Size( FT_Size  size )
+  EXPORT_FUNC(FT_Error)  FT_Done_Size( FT_Size  size )
   {
     FT_Error     error;
     FT_Driver    driver;
@@ -1565,12 +1543,11 @@
   /*    When dealing with fixed-size faces (i.e., non-scalable formats),   */
   /*    use the function FT_Set_Pixel_Sizes().                             */
   /*                                                                       */
-  EXPORT_FUNC
-  FT_Error  FT_Set_Char_Size( FT_Face     face,
-                              FT_F26Dot6  char_width,
-                              FT_F26Dot6  char_height,
-                              FT_UInt     horz_resolution,
-                              FT_UInt     vert_resolution )
+  EXPORT_FUNC(FT_Error)  FT_Set_Char_Size( FT_Face     face,
+                                           FT_F26Dot6  char_width,
+                                           FT_F26Dot6  char_height,
+                                           FT_UInt     horz_resolution,
+                                           FT_UInt     vert_resolution )
   {
     FT_Error             error;
     FT_Driver            driver;
@@ -1643,10 +1620,9 @@
   /* <Return>                                                              */
   /*    Error code.  0 means success.                                      */
   /*                                                                       */
-  EXPORT_FUNC
-  FT_Error  FT_Set_Pixel_Sizes( FT_Face  face,
-                                FT_UInt  pixel_width,
-                                FT_UInt  pixel_height )
+  EXPORT_FUNC(FT_Error)  FT_Set_Pixel_Sizes( FT_Face  face,
+                                             FT_UInt  pixel_width,
+                                             FT_UInt  pixel_height )
   {
     FT_Error             error;
     FT_Driver            driver;
@@ -1704,9 +1680,8 @@
   /* <Return>                                                              */
   /*    Error code.  0 means success.                                      */
   /*                                                                       */
-  EXPORT_FUNC
-  FT_Error  FT_New_GlyphSlot( FT_Face        face,
-                              FT_GlyphSlot*  aslot )
+  EXPORT_FUNC(FT_Error)  FT_New_GlyphSlot( FT_Face        face,
+                                           FT_GlyphSlot*  aslot )
   {
     FT_Error             error;
     FT_Driver            driver;
@@ -1765,8 +1740,7 @@
   /* <Input>                                                               */
   /*    slot :: A handle to a target glyph slot.                           */
   /*                                                                       */
-  EXPORT_FUNC
-  void  FT_Done_GlyphSlot( FT_GlyphSlot  slot )
+  EXPORT_FUNC(void)  FT_Done_GlyphSlot( FT_GlyphSlot  slot )
   {
     if (slot)
     {
@@ -1829,10 +1803,9 @@
   /* <Return>                                                              */
   /*    FreeType error code.  0 means success.                             */
   /*                                                                       */
-  EXPORT_FUNC
-  FT_Error  FT_Load_Glyph( FT_Face  face,
-                           FT_UInt  glyph_index,
-                           FT_Int   load_flags )
+  EXPORT_FUNC(FT_Error)  FT_Load_Glyph( FT_Face  face,
+                                        FT_UInt  glyph_index,
+                                        FT_Int   load_flags )
   {
     FT_Error   error;
     FT_Driver  driver;
@@ -1855,10 +1828,9 @@
   }
 
 
-  EXPORT_FUNC
-  FT_Error  FT_Load_Char( FT_Face   face,
-                          FT_ULong  char_code,
-                          FT_Int    load_flags )
+  EXPORT_FUNC(FT_Error)  FT_Load_Char( FT_Face   face,
+                                       FT_ULong  char_code,
+                                       FT_Int    load_flags )
   {
     FT_Error   error;
     FT_Driver  driver;
@@ -1909,11 +1881,10 @@
   /*    kernings, are out of the scope of this API function -- they can be */
   /*    implemented through format-specific interfaces.                    */
   /*                                                                       */
-  EXPORT_FUNC
-  FT_Error  FT_Get_Kerning( FT_Face     face,
-                            FT_UInt     left_glyph,
-                            FT_UInt     right_glyph,
-                            FT_Vector*  kerning )
+  EXPORT_FUNC(FT_Error)  FT_Get_Kerning( FT_Face     face,
+                                         FT_UInt     left_glyph,
+                                         FT_UInt     right_glyph,
+                                         FT_Vector*  kerning )
   {
     FT_Error   error;
     FT_Driver  driver;
@@ -1962,9 +1933,8 @@
   /* <Return>                                                              */
   /*    The glyph index.  0 means `undefined character code'.              */
   /*                                                                       */
-  EXPORT_DEF
-  FT_UInt  FT_Get_Char_Index( FT_Face  face,
-                              FT_ULong charcode )
+  EXPORT_FUNC(FT_UInt)  FT_Get_Char_Index( FT_Face  face,
+                                           FT_ULong charcode )
   {
     FT_UInt    result;
     FT_Driver  driver;
@@ -2006,9 +1976,8 @@
   ***************************************************************************/
   
   
-  EXPORT_FUNC
-  void*  FT_Get_Sfnt_Table( FT_Face      face,
-                            FT_Sfnt_Tag  tag )
+  EXPORT_FUNC(void*)  FT_Get_Sfnt_Table( FT_Face      face,
+                                         FT_Sfnt_Tag  tag )
   {
     void*                   table = 0;
     FT_Get_Sfnt_Table_Func  func;
@@ -2043,8 +2012,7 @@
   /* <Return>                                                              */
   /*    Error code.  0 means success.                                      */
   /*                                                                       */
-  EXPORT_FUNC
-  FT_Error  FT_Done_FreeType( FT_Library  library )
+  EXPORT_FUNC(FT_Error)  FT_Done_FreeType( FT_Library  library )
   {
     /* Discard the library object */
     FT_Done_Library( library );
--- a/src/base/ftoutln.c
+++ b/src/base/ftoutln.c
@@ -55,12 +55,9 @@
   /* <Return>                                                              */
   /*    Error code.  0 means sucess.                                       */
   /*                                                                       */
-#if 1
-
-  EXPORT_FUNC
-  int  FT_Outline_Decompose( FT_Outline*        outline,
-                             FT_Outline_Funcs*  interface,
-                             void*              user )
+  EXPORT_FUNC(int)  FT_Outline_Decompose( FT_Outline*        outline,
+                                          FT_Outline_Funcs*  interface,
+                                          void*              user )
   {
 #undef SCALED
 #define SCALED( x )   ( ((x) << shift) - delta )
@@ -243,177 +240,7 @@
   Invalid_Outline:
     return -1;
   }
-#else
-  EXPORT_FUNC
-  int  FT_Outline_Decompose( FT_Outline*        outline,
-                             FT_Outline_Funcs*  interface,
-                             void*              user )
-  {
-    typedef enum  _phases
-    {
-      phase_point,
-      phase_conic,
-      phase_cubic,
-      phase_cubic2
 
-    } TPhase;
-
-    FT_Vector  v_first;
-    FT_Vector  v_last;
-    FT_Vector  v_control;
-    FT_Vector  v_start;
-
-    FT_Vector* point;
-    FT_Vector* limit;
-    char*      tags;
-
-    int    n;         /* index of contour in outline     */
-    int    first;     /* index of first point in contour */
-    int    error;
-    char   tag;       /* current point's state           */
-
-
-    first = 0;
-
-    for ( n = 0; n < outline->n_contours; n++ )
-    {
-      int  last;  /* index of last point in contour */
-
-      last  = outline->contours[n];
-      limit = outline->points + last;
-
-      v_first = outline->points[first];
-      v_last  = outline->points[last];
-
-      v_start = v_control = v_first;
-
-      point = outline->points + first;
-      tags  = outline->tags  + first;
-      tag   = FT_CURVE_TAG( tags[0] );
-
-      /* A contour cannot start with a cubic control point! */
-      if ( tag == FT_Curve_Tag_Cubic )
-        goto Invalid_Outline;
-
-      /* check first point to determine origin */
-      if ( tag == FT_Curve_Tag_Conic )
-      {
-        /* first point is conic control.  Yes, this happens. */
-        if ( FT_CURVE_TAG( outline->tags[last] ) == FT_Curve_Tag_On )
-        {
-          /* start at last point if it is on the curve */
-          v_start = v_last;
-          limit--;
-        }
-        else
-        {
-          /* if both first and last points are conic,         */
-          /* start at their middle and record its position    */
-          /* for closure                                      */
-          v_start.x = ( v_start.x + v_last.x ) / 2;
-          v_start.y = ( v_start.y + v_last.y ) / 2;
-
-          v_last = v_start;
-        }
-        point--;
-        tags--;
-      }
-
-      error = interface->move_to( &v_start, user );
-      if (error) goto Exit;
-
-      while (point < limit)
-      {
-        point++;
-        tags++;
-  
-        tag = FT_CURVE_TAG( tags[0] );
-        switch (tag)
-        {
-          case FT_Curve_Tag_On:  /* emit a single line_to */
-            {
-              error = interface->line_to( point, user );
-              if (error) goto Exit;
-              continue;
-            }
-
-          
-          case FT_Curve_Tag_Conic:  /* consume conic arcs */
-            {
-              v_control = point[0];
-              
-            Do_Conic:
-              if (point < limit)
-              {
-                FT_Vector  v_middle;
-                
-                point++;
-                tags++;
-                tag = FT_CURVE_TAG( tags[0] );
-                
-                if (tag == FT_Curve_Tag_On)
-                {
-                  error = interface->conic_to( &v_control, point, user );
-                  if (error) goto Exit;
-                  continue;
-                }
-                
-                if (tag != FT_Curve_Tag_Conic)
-                  goto Invalid_Outline;
-  
-                v_middle.x = (v_control.x + point->x)/2;
-                v_middle.y = (v_control.y + point->y)/2;
-  
-                error = interface->conic_to( &v_control, &v_middle, user );
-                if (error) goto Exit;
-                
-                v_control = point[0];
-                goto Do_Conic;
-              }
-              
-              error = interface->conic_to( &v_control, &v_start, user );
-              goto Close;
-            }
-          
-          default:  /* FT_Curve_Tag_Cubic */
-            {
-              if ( point+1 > limit         ||
-                   FT_CURVE_TAG( tags[1] ) != FT_Curve_Tag_Cubic )
-                goto Invalid_Outline;
-                
-              point += 2;
-              tags  += 2;
-              
-              if (point <= limit)
-              {
-                error = interface->cubic_to( point-2, point-1, point, user );
-                if (error) goto Exit;
-                continue;
-              }
-              
-              error = interface->cubic_to( point-2, point-1, &v_start, user );
-              goto Close;
-            }
-        }
-      }
-
-      /* close the contour with a line segment */
-      error = interface->line_to( &v_start, user );
-      
-   Close:
-      if (error) goto Exit;
-      first = last+1;
-    }
-
-    return 0;
-  Exit:
-    return error;
-    
-  Invalid_Outline:
-    return -1;
-  }
-#endif
-
   /*************************************************************************/
   /*                                                                       */
   /* <Function>                                                            */
@@ -448,11 +275,10 @@
   /*    code of this function, replacing allocations with `malloc()' if    */
   /*    you want to control where the objects go.                          */
   /*                                                                       */
-  BASE_FUNC
-  FT_Error  FT_Outline_New( FT_Library   library,
-                            FT_UInt      numPoints,
-                            FT_Int       numContours,
-                            FT_Outline*  outline )
+  BASE_FUNC(FT_Error)  FT_Outline_New( FT_Library   library,
+                                       FT_UInt      numPoints,
+                                       FT_Int       numContours,
+                                       FT_Outline*  outline )
   {
     FT_Error   error;
     FT_Memory  memory;
@@ -512,9 +338,8 @@
   /*    of this function, replacing allocations with `malloc()' in your    */
   /*    application if you want something simpler.                         */
   /*                                                                       */
-  BASE_FUNC
-  FT_Error  FT_Outline_Done( FT_Library   library,
-                             FT_Outline*  outline )
+  BASE_FUNC(FT_Error)  FT_Outline_Done( FT_Library   library,
+                                        FT_Outline*  outline )
   {
     FT_Memory  memory = library->memory;
 
@@ -561,9 +386,8 @@
   /* <MT-Note>                                                             */
   /*    Yes.                                                               */
   /*                                                                       */
-  BASE_FUNC
-  void  FT_Outline_Get_CBox( FT_Outline*  outline,
-                             FT_BBox*     cbox )
+  BASE_FUNC(void)  FT_Outline_Get_CBox( FT_Outline*  outline,
+                                        FT_BBox*     cbox )
   {
     FT_Pos  xMin, yMin, xMax, yMax;
     
@@ -623,10 +447,9 @@
   /* <MT-Note>                                                             */
   /*    Yes.                                                               */
   /*                                                                       */
-  BASE_FUNC
-  void  FT_Outline_Translate( FT_Outline*  outline,
-                              FT_Pos       xOffset,
-                              FT_Pos       yOffset )
+  BASE_FUNC(void)  FT_Outline_Translate( FT_Outline*  outline,
+                                         FT_Pos       xOffset,
+                                         FT_Pos       yOffset )
   {
     FT_UShort   n;
     FT_Vector*  vec = outline->points;
@@ -655,8 +478,7 @@
   /*    This functions toggles the bit flag ft_outline_reverse_fill in     */
   /*    the outline's "flags" field..                                      */
   /*                                                                       */
-  BASE_FUNC
-  void  FT_Outline_Reverse( FT_Outline*  outline )
+  BASE_FUNC(void)  FT_Outline_Reverse( FT_Outline*  outline )
   {
     FT_UShort  n;
     FT_Int     first, last;
@@ -714,8 +536,7 @@
   /* <Input>                                                               */
   /*    zone  :: pointer to the target glyph zone.                         */
   /*                                                                       */
-  BASE_FUNC 
-  void  FT_Done_GlyphZone( FT_GlyphZone*  zone )
+  BASE_FUNC(void)  FT_Done_GlyphZone( FT_GlyphZone*  zone )
   {
     FT_Memory  memory = zone->memory;
     
@@ -749,11 +570,10 @@
   /* <Return>                                                              */
   /*    FreeType error code.  0 means success.                             */
   /*                                                                       */
-  BASE_FUNC 
-  FT_Error  FT_New_GlyphZone( FT_Memory      memory,
-                              FT_UShort      maxPoints,
-                              FT_Short       maxContours,
-                              FT_GlyphZone*  zone )
+  BASE_FUNC(FT_Error)  FT_New_GlyphZone( FT_Memory      memory,
+                                         FT_UShort      maxPoints,
+                                         FT_Short       maxContours,
+                                         FT_GlyphZone*  zone )
   {
     FT_Error      error;
 
@@ -796,10 +616,9 @@
   /*    maxContours :: The address of the zone's current capacity for      */
   /*                   contours.                                           */
   /*                                                                       */
-  BASE_FUNC
-  FT_Error  FT_Update_GlyphZone( FT_GlyphZone*  zone,
-                                 FT_UShort      newPoints,
-                                 FT_Short       newContours )
+  BASE_FUNC(FT_Error)  FT_Update_GlyphZone( FT_GlyphZone*  zone,
+                                            FT_UShort      newPoints,
+                                            FT_Short       newContours )
   {
     FT_Error      error  = FT_Err_Ok;
     FT_Memory     memory = zone->memory;
@@ -856,10 +675,9 @@
   /*                                                                       */
   /*    It will use the raster correponding to the default glyph format.   */
   /*                                                                       */
-  EXPORT_FUNC
-  FT_Error  FT_Outline_Get_Bitmap( FT_Library   library,
-                                   FT_Outline*  outline,
-                                   FT_Bitmap*   map )
+  EXPORT_FUNC(FT_Error)  FT_Outline_Get_Bitmap( FT_Library   library,
+                                                FT_Outline*  outline,
+                                                FT_Bitmap*   map )
   {
     FT_Error          error;
     FT_Raster         raster;
@@ -912,10 +730,9 @@
   /*    scan converter is called, which means that the value you give it   */
   /*    is actually ignored..                                              */
   /*                                                                       */
-  EXPORT_FUNC
-  FT_Error  FT_Outline_Render( FT_Library        library,
-                               FT_Outline*       outline,
-                               FT_Raster_Params* params )
+  EXPORT_FUNC(FT_Error)  FT_Outline_Render( FT_Library        library,
+                                            FT_Outline*       outline,
+                                            FT_Raster_Params* params )
   {                               
     FT_Error         error;
     FT_Raster        raster;
@@ -968,9 +785,8 @@
   /* <Return>                                                              */
   /*    FreeType error code.  0 means success.                             */
   /*                                                                       */
-  BASE_FUNC
-  FT_Error  FT_Outline_Copy( FT_Outline*  source,
-                             FT_Outline*  target )
+  BASE_FUNC(FT_Error)  FT_Outline_Copy( FT_Outline*  source,
+                                        FT_Outline*  target )
   {
     FT_Int  is_owner;
     
@@ -1018,9 +834,8 @@
   /*    You can use FT_Outline_Translate() if you need to translate the    */
   /*    outline's points.                                                  */
   /*                                                                       */
-  BASE_FUNC
-  void  FT_Outline_Transform( FT_Outline*  outline,
-                              FT_Matrix*   matrix )
+  BASE_FUNC(void)  FT_Outline_Transform( FT_Outline*  outline,
+                                         FT_Matrix*   matrix )
   {
     FT_UShort   n;
     FT_Vector*  vec;
@@ -1061,9 +876,8 @@
   /* <MT-Note>                                                             */
   /*    Yes.                                                               */
   /*                                                                       */
-  EXPORT_DEF
-  void  FT_Vector_Transform( FT_Vector*  vector,
-                             FT_Matrix*  matrix )
+  EXPORT_FUNC(void)  FT_Vector_Transform( FT_Vector*  vector,
+                                          FT_Matrix*  matrix )
   {
     FT_Pos xz, yz;
 
@@ -1095,9 +909,8 @@
   /* <MT-Note>                                                             */
   /*    Yes.                                                               */
   /*                                                                       */
-  BASE_FUNC
-  void  FT_Matrix_Multiply( FT_Matrix*  a,
-                            FT_Matrix*  b )
+  BASE_FUNC(void)  FT_Matrix_Multiply( FT_Matrix*  a,
+                                       FT_Matrix*  b )
   {
     FT_Fixed  xx, xy, yx, yy;
 
@@ -1130,8 +943,7 @@
   /* <MT-Note>                                                             */
   /*    Yes.                                                               */
   /*                                                                       */
-  BASE_FUNC
-  FT_Error  FT_Matrix_Invert( FT_Matrix*  matrix )
+  BASE_FUNC(FT_Error)  FT_Matrix_Invert( FT_Matrix*  matrix )
   {
     FT_Pos  delta, xx, yy;
 
--- a/src/base/ftstream.c
+++ b/src/base/ftstream.c
@@ -5,11 +5,10 @@
 #define FT_COMPONENT  trace_stream
 
 
-  BASE_FUNC
-  void  FT_New_Memory_Stream( FT_Library     library,
-                              void*          base,
-                              unsigned long  size,
-                              FT_Stream      stream )
+  BASE_FUNC(void)  FT_New_Memory_Stream( FT_Library     library,
+                                         void*          base,
+                                         unsigned long  size,
+                                         FT_Stream      stream )
   {
     stream->memory = library->memory;
     stream->base   = (char*)base;
@@ -21,9 +20,8 @@
   }
 
 
-  BASE_FUNC
-  FT_Error  FT_Seek_Stream( FT_Stream  stream,
-                            FT_ULong   pos )
+  BASE_FUNC(FT_Error)  FT_Seek_Stream( FT_Stream  stream,
+                                       FT_ULong   pos )
   {
     FT_Error  error;
 
@@ -59,9 +57,8 @@
   }
 
 
-  BASE_FUNC
-  FT_Error  FT_Skip_Stream( FT_Stream  stream,
-                            FT_Long    distance )
+  BASE_FUNC(FT_Error)  FT_Skip_Stream( FT_Stream  stream,
+                                       FT_Long    distance )
   {
     return FT_Seek_Stream( stream, (FT_ULong)(stream->pos + distance) );
   }
@@ -68,27 +65,24 @@
 
 
 
-  BASE_FUNC
-  FT_Long   FT_Stream_Pos( FT_Stream  stream )
+  BASE_FUNC(FT_Long)   FT_Stream_Pos( FT_Stream  stream )
   {
     return stream->pos;
   }
 
 
-  BASE_FUNC
-  FT_Error  FT_Read_Stream( FT_Stream  stream,
-                            void*      buffer,
-                            FT_ULong   count )
+  BASE_FUNC(FT_Error)  FT_Read_Stream( FT_Stream  stream,
+                                       void*      buffer,
+                                       FT_ULong   count )
   {
     return FT_Read_Stream_At( stream, stream->pos, buffer, count );
   }
 
 
-  BASE_FUNC
-  FT_Error  FT_Read_Stream_At( FT_Stream  stream,
-                               FT_ULong   pos,
-                               void*      buffer,
-                               FT_ULong   count )
+  BASE_FUNC(FT_Error)  FT_Read_Stream_At( FT_Stream  stream,
+                                          FT_ULong   pos,
+                                          void*      buffer,
+                                          FT_ULong   count )
   {
     FT_Error  error = FT_Err_Ok;
     FT_ULong  read_bytes;
@@ -128,9 +122,8 @@
 
 
 
-  BASE_FUNC
-  FT_Error  FT_Access_Frame( FT_Stream  stream,
-                             FT_ULong   count )
+  BASE_FUNC(FT_Error)  FT_Access_Frame( FT_Stream  stream,
+                                        FT_ULong   count )
   {
     FT_Error  error = FT_Err_Ok;
     FT_ULong  read_bytes;
@@ -185,8 +178,7 @@
   }
 
 
-  BASE_FUNC
-  void  FT_Forget_Frame( FT_Stream  stream )
+  BASE_FUNC(void)  FT_Forget_Frame( FT_Stream  stream )
   {
     /* IMPORTANT: The assertion stream->cursor != 0 was removed, given    */
     /*            that it is possible to access a frame of length 0 in    */
@@ -210,8 +202,7 @@
   }
 
 
-  BASE_FUNC
-  FT_Char  FT_Get_Char( FT_Stream  stream )
+  BASE_FUNC(FT_Char)  FT_Get_Char( FT_Stream  stream )
   {
     FT_Char  result;
 
@@ -225,8 +216,7 @@
   }
 
 
-  BASE_FUNC
-  FT_Short  FT_Get_Short( FT_Stream  stream )
+  BASE_FUNC(FT_Short)  FT_Get_Short( FT_Stream  stream )
   {
     char*     p;
     FT_Short  result;
@@ -242,8 +232,7 @@
   }
 
 
-  BASE_FUNC
-  FT_Long  FT_Get_Offset( FT_Stream  stream )
+  BASE_FUNC(FT_Long)  FT_Get_Offset( FT_Stream  stream )
   {
     char*    p;
     FT_Long  result;
@@ -259,8 +248,7 @@
   }
 
 
-  BASE_FUNC
-  FT_Long  FT_Get_Long( FT_Stream  stream )
+  BASE_FUNC(FT_Long)  FT_Get_Long( FT_Stream  stream )
   {
     char*    p;
     FT_Long  result;
@@ -276,9 +264,8 @@
   }
 
 
-  BASE_FUNC
-  FT_Char  FT_Read_Char( FT_Stream  stream,
-                         FT_Error*  error )
+  BASE_FUNC(FT_Char)  FT_Read_Char( FT_Stream  stream,
+                                    FT_Error*  error )
   {
     char  result = 0;
 
@@ -310,9 +297,8 @@
   }
 
 
-  BASE_FUNC
-  FT_Short  FT_Read_Short( FT_Stream  stream,
-                           FT_Error*  error )
+  BASE_FUNC(FT_Short)  FT_Read_Short( FT_Stream  stream,
+                                      FT_Error*  error )
   {
     char     reads[2];
     char*    p = 0;
@@ -353,9 +339,8 @@
   }
 
 
-  BASE_FUNC
-  FT_Long  FT_Read_Offset( FT_Stream  stream,
-                           FT_Error*  error )
+  BASE_FUNC(FT_Long)  FT_Read_Offset( FT_Stream  stream,
+                                      FT_Error*  error )
   {
     char     reads[3];
     char*    p = 0;
@@ -396,9 +381,8 @@
   }
 
 
-  BASE_FUNC
-  FT_Long  FT_Read_Long( FT_Stream  stream,
-                         FT_Error*  error )
+  BASE_FUNC(FT_Long)  FT_Read_Long( FT_Stream  stream,
+                                    FT_Error*  error )
   {
     char     reads[4];
     char*    p = 0;
@@ -438,10 +422,9 @@
     return 0;
   }
 
-  BASE_FUNC
-  FT_Error FT_Read_Fields( FT_Stream              stream,
-                           const FT_Frame_Field*  fields,
-                           void*                  structure )
+  BASE_FUNC(FT_Error) FT_Read_Fields( FT_Stream              stream,
+                                      const FT_Frame_Field*  fields,
+                                      void*                  structure )
   {
     FT_Error  error;
     FT_Bool   frame_accessed = 0;
--- a/src/base/ftsystem.c
+++ b/src/base/ftsystem.c
@@ -19,7 +19,8 @@
  *  understand and accept it fully.                                          
  *                                                                           
  **************************************************************************/
-
+ 
+#include <freetype/config/ftconfig.h>
 #include <freetype/ftsystem.h>
 #include <freetype/fterrors.h>
 
@@ -172,9 +173,8 @@
   }
 
 
-  extern
-  int  FT_New_Stream( const char*  filepathname,
-                      FT_Stream    stream )
+  EXPORT_FUNC(int)  FT_New_Stream( const char*  filepathname,
+                                   FT_Stream    stream )
   {
     FILE*  file;
     
@@ -196,8 +196,7 @@
   }
 
 
-  extern
-  FT_Memory  FT_New_Memory( void )
+  EXPORT_FUNC(FT_Memory)  FT_New_Memory( void )
   {
     FT_Memory  memory;
     
--- a/src/psnames/psdriver.c
+++ b/src/psnames/psdriver.c
@@ -222,7 +222,6 @@
   };
   
 
-  EXPORT_FUNC
   const FT_DriverInterface  psnames_driver_interface =
   {
     sizeof(FT_DriverRec),
@@ -239,7 +238,6 @@
 
 #else
 
-  EXPORT_FUNC
   const FT_DriverInterface  psnames_driver_interface =
   {
     0,
--- a/src/psnames/psdriver.h
+++ b/src/psnames/psdriver.h
@@ -19,11 +19,9 @@
 #ifndef PSDRIVER_H
 #define PSDRIVER_H
 
-#include <freetype/freetype.h>
 #include <freetype/internal/ftdriver.h>
 
-  EXPORT_DEF
-  const FT_DriverInterface  psnames_driver_interface;
+  EXPORT_VAR(const FT_DriverInterface)  psnames_driver_interface;
 
 #endif /* PSDRIVER_H */
 
--- a/src/sfnt/sfdriver.c
+++ b/src/sfnt/sfdriver.c
@@ -55,7 +55,6 @@
   };
   
 
-  EXPORT_FUNC
   const FT_DriverInterface  sfnt_driver_interface =
   {
     sizeof(FT_DriverRec),
--- a/src/sfnt/sfdriver.h
+++ b/src/sfnt/sfdriver.h
@@ -21,8 +21,7 @@
 
 #include <freetype/internal/ftdriver.h>
 
-  EXPORT_DEF
-  const FT_DriverInterface  sfnt_driver_interface;
+  EXPORT_VAR(const FT_DriverInterface)  sfnt_driver_interface;
 
 #endif /* SFDRIVER_H */
 
--- a/src/sfnt/ttload.c
+++ b/src/sfnt/ttload.c
@@ -50,7 +50,7 @@
   /* <Return>                                                              */
   /*    pointer to table directory entry. 0 if not found..                 */
   /*                                                                       */
-  EXPORT_FUNC
+  LOCAL_FUNC
   TT_Table*  TT_LookUp_Table( TT_Face   face,
                               TT_ULong  tag  )
   {
@@ -91,7 +91,7 @@
   /* <Return>                                                              */
   /*    pointer to table directory entry. 0 if not found..                 */
   /*                                                                       */
-  EXPORT_FUNC
+  LOCAL_FUNC
   TT_Error   TT_Goto_Table( TT_Face    face,
                             TT_ULong   tag,
                             FT_Stream  stream,
--- a/src/sfnt/ttload.h
+++ b/src/sfnt/ttload.h
@@ -32,7 +32,7 @@
 #endif
 
 
-  EXPORT_DEF
+  LOCAL_DEF
   TT_Table*  TT_LookUp_Table( TT_Face   face,
                               TT_ULong  tag );
 
--- a/src/sfnt/ttpost.c
+++ b/src/sfnt/ttpost.c
@@ -403,7 +403,7 @@
   /* <Output>                                                              */
   /*    TrueType error code.  0 means success.                             */
   /*                                                                       */
-  EXPORT_FUNC
+  LOCAL_FUNC
   TT_Error  TT_Get_PS_Name( TT_Face      face,
                             TT_UInt      index,
                             TT_String**  PSname )
--- a/src/sfnt/ttpost.h
+++ b/src/sfnt/ttpost.h
@@ -66,7 +66,7 @@
   /* <Output>                                                              */
   /*    TrueType error code.  0 means success.                             */
   /*                                                                       */
-  EXPORT_DEF
+  LOCAL_DEF
   TT_Error TT_Get_PS_Name( TT_Face      face,
                            TT_UInt      index,
                            TT_String**  PSname );
--- a/src/truetype/ttdriver.c
+++ b/src/truetype/ttdriver.c
@@ -707,8 +707,7 @@
   /*                                                                       */
 #ifdef FT_CONFIG_OPTION_DYNAMIC_DRIVERS
 
-  EXPORT_FUNC
-  FT_DriverInterface*  getDriverInterface( void )
+  EXPORT_FUNC(FT_DriverInterface*)  getDriverInterface( void )
   {
     return &tt_driver_interface;
   }
--- a/src/truetype/ttdriver.h
+++ b/src/truetype/ttdriver.h
@@ -25,8 +25,7 @@
 #include <tterrors.h>
 
 
-  EXPORT_DEF
-  const FT_DriverInterface  tt_driver_interface;
+  EXPORT_VAR(const FT_DriverInterface)  tt_driver_interface;
 
 
 #endif /* TTDRIVER_H */
--- a/src/truetype/ttinterp.c
+++ b/src/truetype/ttinterp.c
@@ -254,7 +254,7 @@
   /* <Return>                                                              */
   /*   TrueType error code.  0 means success.                              */
   /*                                                                       */
-  EXPORT_FUNC
+  LOCAL_FUNC
   TT_Error  TT_Goto_CodeRange( TT_ExecContext  exec,
                                TT_Int          range,
                                TT_Long         IP )
@@ -302,7 +302,7 @@
   /* <Return>                                                              */
   /*   TrueType error code.  0 means success.                              */
   /*                                                                       */
-  EXPORT_FUNC
+  LOCAL_FUNC
   TT_Error  TT_Set_CodeRange( TT_ExecContext  exec,
                               TT_Int          range,
                               void*           base,
@@ -337,7 +337,7 @@
   /* <Note>                                                                */
   /*    Does not set the Error variable.                                   */
   /*                                                                       */
-  EXPORT_FUNC
+  LOCAL_FUNC
   TT_Error  TT_Clear_CodeRange( TT_ExecContext  exec,
                                 TT_Int          range )
   {
@@ -540,7 +540,7 @@
   /* <Note>                                                                */
   /*    Only the glyph loader and debugger should call this function.      */
   /*                                                                       */
-  EXPORT_FUNC
+  LOCAL_FUNC
   TT_Error  TT_Load_Context( TT_ExecContext  exec,
                              TT_Face         face,
                              TT_Size         size )
@@ -642,7 +642,7 @@
   /* <Note>                                                                */
   /*    Only the glyph loader and debugger should call this function.      */
   /*                                                                       */
-  EXPORT_FUNC
+  LOCAL_FUNC
   TT_Error  TT_Save_Context( TT_ExecContext  exec,
                              TT_Size         size )
   {
@@ -686,7 +686,7 @@
   /* <Note>                                                                */
   /*    Only the glyph loader and debugger should call this function.      */
   /*                                                                       */
-  EXPORT_FUNC
+  LOCAL_FUNC
   TT_Error  TT_Run_Context( TT_ExecContext  exec,
                             TT_Bool         debug )
   {
@@ -762,8 +762,7 @@
   /* <Note>                                                                */
   /*    Only the glyph loader and debugger should call this function.      */
   /*                                                                       */
-  EXPORT_FUNC
-  TT_ExecContext  TT_New_Context( TT_Face  face )
+  EXPORT_FUNC(TT_ExecContext)  TT_New_Context( TT_Face  face )
   {
     TT_Driver       driver = (TT_Driver)face->root.driver;
     TT_ExecContext  exec;
@@ -817,7 +816,7 @@
   /* <Note>                                                                */
   /*    Only the glyph loader and debugger should call this function.      */
   /*                                                                       */
-  EXPORT_FUNC
+  LOCAL_FUNC
   TT_Error  TT_Done_Context( TT_ExecContext  exec )
   {
     /* Nothing at all for now */
@@ -6668,18 +6667,13 @@
   /*************************************************************************/
 
 
-  EXPORT_FUNC
-#ifndef DEBUG_INTERPRETER
-  TT_Error  TT_RunIns( TT_ExecContext  exc )
-#else
-  TT_Error  TT_RunIns2( TT_ExecContext  exc )
-#endif
+  EXPORT_FUNC(TT_Error)  TT_RunIns( TT_ExecContext  exc )
   {
     TT_Long    ins_counter = 0;  /* executed instructions counter */
 
-#ifdef TT_CONFIG_OPTION_STATIC_RASTER
+    #ifdef TT_CONFIG_OPTION_STATIC_RASTER
     cur = *exc;
-#endif
+    #endif
 
     /* set CVT functions */
     CUR.tt_metrics.ratio = 0;
@@ -7361,9 +7355,9 @@
     } while ( !CUR.instruction_trap );
 
   LNo_Error_:
-#ifdef TT_CONFIG_OPTION_STATIC_RASTER
+    #ifdef TT_CONFIG_OPTION_STATIC_RASTER
     *exc = cur;
-#endif
+    #endif
     return TT_Err_Ok;
 
   LErrorCodeOverflow_:
@@ -7370,685 +7364,12 @@
     CUR.error = TT_Err_Code_Overflow;
 
   LErrorLabel_:
-#ifdef TT_CONFIG_OPTION_STATIC_RASTER
+    #ifdef TT_CONFIG_OPTION_STATIC_RASTER
     *exc = cur;
-#endif
+    #endif
     return CUR.error;
   }
 
-
-#if 0
-
-  /* This function must be declared by the debugger front end */
-  /* in order to specify which code range to debug.           */
-
-  int  debug_coderange = tt_coderange_glyph;
-
-  static char  tempStr[128];
-
-  static const char*  OpStr[256] =
-  {
-    "SVTCA y",       /* Set vectors to coordinate axis y    */
-    "SVTCA x",       /* Set vectors to coordinate axis x    */
-    "SPvTCA y",      /* Set Proj. vec. to coord. axis y     */
-    "SPvTCA x",      /* Set Proj. vec. to coord. axis x     */
-    "SFvTCA y",      /* Set Free. vec. to coord. axis y     */
-    "SFvTCA x",      /* Set Free. vec. to coord. axis x     */
-    "SPvTL //",      /* Set Proj. vec. parallel to segment  */
-    "SPvTL +",       /* Set Proj. vec. normal to segment    */
-    "SFvTL //",      /* Set Free. vec. parallel to segment  */
-    "SFvTL +",       /* Set Free. vec. normal to segment    */
-    "SPvFS",         /* Set Proj. vec. from stack           */
-    "SFvFS",         /* Set Free. vec. from stack           */
-    "GPV",           /* Get projection vector               */
-    "GFV",           /* Get freedom vector                  */
-    "SFvTPv",        /* Set free. vec. to proj. vec.        */
-    "ISECT",         /* compute intersection                */
-
-    "SRP0",          /* Set reference point 0               */
-    "SRP1",          /* Set reference point 1               */
-    "SRP2",          /* Set reference point 2               */
-    "SZP0",          /* Set Zone Pointer 0                  */
-    "SZP1",          /* Set Zone Pointer 1                  */
-    "SZP2",          /* Set Zone Pointer 2                  */
-    "SZPS",          /* Set all zone pointers               */
-    "SLOOP",         /* Set loop counter                    */
-    "RTG",           /* Round to Grid                       */
-    "RTHG",          /* Round to Half-Grid                  */
-    "SMD",           /* Set Minimum Distance                */
-    "ELSE",          /* Else                                */
-    "JMPR",          /* Jump Relative                       */
-    "SCvTCi",        /* Set CVT                             */
-    "SSwCi",         /*                                     */
-    "SSW",           /*                                     */
-
-    "DUP",
-    "POP",
-    "CLEAR",
-    "SWAP",
-    "DEPTH",
-    "CINDEX",
-    "MINDEX",
-    "AlignPTS",
-    "INS_$28",
-    "UTP",
-    "LOOPCALL",
-    "CALL",
-    "FDEF",
-    "ENDF",
-    "MDAP[-]",
-    "MDAP[r]",
-
-    "IUP[y]",
-    "IUP[x]",
-    "SHP[0]",
-    "SHP[1]",
-    "SHC[0]",
-    "SHC[1]",
-    "SHZ[0]",
-    "SHZ[1]",
-    "SHPIX",
-    "IP",
-    "MSIRP[0]",
-    "MSIRP[1]",
-    "AlignRP",
-    "RTDG",
-    "MIAP[-]",
-    "MIAP[r]",
-
-    "NPushB",
-    "NPushW",
-    "WS",
-    "RS",
-    "WCvtP",
-    "RCvt",
-    "GC[0]",
-    "GC[1]",
-    "SCFS",
-    "MD[0]",
-    "MD[1]",
-    "MPPEM",
-    "MPS",
-    "FlipON",
-    "FlipOFF",
-    "DEBUG",
-
-    "LT",
-    "LTEQ",
-    "GT",
-    "GTEQ",
-    "EQ",
-    "NEQ",
-    "ODD",
-    "EVEN",
-    "IF",
-    "EIF",
-    "AND",
-    "OR",
-    "NOT",
-    "DeltaP1",
-    "SDB",
-    "SDS",
-
-    "ADD",
-    "SUB",
-    "DIV",
-    "MUL",
-    "ABS",
-    "NEG",
-    "FLOOR",
-    "CEILING",
-    "ROUND[G]",
-    "ROUND[B]",
-    "ROUND[W]",
-    "ROUND[?]",
-    "NROUND[G]",
-    "NROUND[B]",
-    "NROUND[W]",
-    "NROUND[?]",
-
-    "WCvtF",
-    "DeltaP2",
-    "DeltaP3",
-    "DeltaC1",
-    "DeltaC2",
-    "DeltaC3",
-    "SROUND",
-    "S45Round",
-    "JROT",
-    "JROF",
-    "ROFF",
-    "INS_$7B",
-    "RUTG",
-    "RDTG",
-    "SANGW",
-    "AA",
-
-    "FlipPT",
-    "FlipRgON",
-    "FlipRgOFF",
-    "INS_$83",
-    "INS_$84",
-    "ScanCTRL",
-    "SDPVTL[0]",
-    "SDPVTL[1]",
-    "GetINFO",
-    "IDEF",
-    "ROLL",
-    "MAX",
-    "MIN",
-    "ScanTYPE",
-    "IntCTRL",
-    "INS_$8F",
-
-    "INS_$90",
-    "INS_$91",
-    "INS_$92",
-    "INS_$93",
-    "INS_$94",
-    "INS_$95",
-    "INS_$96",
-    "INS_$97",
-    "INS_$98",
-    "INS_$99",
-    "INS_$9A",
-    "INS_$9B",
-    "INS_$9C",
-    "INS_$9D",
-    "INS_$9E",
-    "INS_$9F",
-
-    "INS_$A0",
-    "INS_$A1",
-    "INS_$A2",
-    "INS_$A3",
-    "INS_$A4",
-    "INS_$A5",
-    "INS_$A6",
-    "INS_$A7",
-    "INS_$A8",
-    "INS_$A9",
-    "INS_$AA",
-    "INS_$AB",
-    "INS_$AC",
-    "INS_$AD",
-    "INS_$AE",
-    "INS_$AF",
-
-    "PushB[0]",
-    "PushB[1]",
-    "PushB[2]",
-    "PushB[3]",
-    "PushB[4]",
-    "PushB[5]",
-    "PushB[6]",
-    "PushB[7]",
-    "PushW[0]",
-    "PushW[1]",
-    "PushW[2]",
-    "PushW[3]",
-    "PushW[4]",
-    "PushW[5]",
-    "PushW[6]",
-    "PushW[7]",
-
-    "MDRP[G]",
-    "MDRP[B]",
-    "MDRP[W]",
-    "MDRP[?]",
-    "MDRP[rG]",
-    "MDRP[rB]",
-    "MDRP[rW]",
-    "MDRP[r?]",
-    "MDRP[mG]",
-    "MDRP[mB]",
-    "MDRP[mW]",
-    "MDRP[m?]",
-    "MDRP[mrG]",
-    "MDRP[mrB]",
-    "MDRP[mrW]",
-    "MDRP[mr?]",
-    "MDRP[pG]",
-    "MDRP[pB]",
-
-    "MDRP[pW]",
-    "MDRP[p?]",
-    "MDRP[prG]",
-    "MDRP[prB]",
-    "MDRP[prW]",
-    "MDRP[pr?]",
-    "MDRP[pmG]",
-    "MDRP[pmB]",
-    "MDRP[pmW]",
-    "MDRP[pm?]",
-    "MDRP[pmrG]",
-    "MDRP[pmrB]",
-    "MDRP[pmrW]",
-    "MDRP[pmr?]",
-
-    "MIRP[G]",
-    "MIRP[B]",
-    "MIRP[W]",
-    "MIRP[?]",
-    "MIRP[rG]",
-    "MIRP[rB]",
-    "MIRP[rW]",
-    "MIRP[r?]",
-    "MIRP[mG]",
-    "MIRP[mB]",
-    "MIRP[mW]",
-    "MIRP[m?]",
-    "MIRP[mrG]",
-    "MIRP[mrB]",
-    "MIRP[mrW]",
-    "MIRP[mr?]",
-    "MIRP[pG]",
-    "MIRP[pB]",
-
-    "MIRP[pW]",
-    "MIRP[p?]",
-    "MIRP[prG]",
-    "MIRP[prB]",
-    "MIRP[prW]",
-    "MIRP[pr?]",
-    "MIRP[pmG]",
-    "MIRP[pmB]",
-    "MIRP[pmW]",
-    "MIRP[pm?]",
-    "MIRP[pmrG]",
-    "MIRP[pmrB]",
-    "MIRP[pmrW]",
-    "MIRP[pmr?]"
-  };
-
-
-  const char* Cur_U_Line( TT_ExecContext exec )
-  {
-    char  s[32];
-
-    int  op, i, n;
-
-    op = exec->code[exec->IP];
-
-    sprintf( tempStr, "%s", OpStr[op] );
-
-    if ( op == 0x40 )
-    {
-      n = exec->code[exec->IP + 1];
-      sprintf( s, "(%d)", n );
-      strncat( tempStr, s, 8 );
-
-      if ( n > 20 ) n = 20; /* limit output */
-
-      for ( i = 0; i < n; i++ )
-      {
-        sprintf( s, " $%02hx", exec->code[exec->IP + i + 2] );
-        strncat( tempStr, s, 8 );
-      }
-    }
-    else if ( op == 0x41 )
-    {
-      n = exec->code[exec->IP + 1];
-      sprintf( s, "(%d)", n );
-      strncat( tempStr, s, 8 );
-
-      if ( n > 20 ) n = 20; /* limit output */
-
-      for ( i = 0; i < n; i++ )
-      {
-        sprintf( s, " $%02hx%02hx", exec->code[exec->IP + i*2 + 2],
-                                    exec->code[exec->IP + i*2 + 3] );
-        strncat( tempStr, s, 8 );
-      }
-    }
-    else if ( (op & 0xF8) == 0xB0 )
-    {
-      n = op - 0xB0;
-
-      for ( i = 0; i <= n; i++ )
-      {
-        sprintf( s, " $%02hx", exec->code[exec->IP + i + 1] );
-        strncat( tempStr, s, 8 );
-      }
-    }
-    else if ( (op & 0xF8) == 0xB8 )
-    {
-      n = op-0xB8;
-
-      for ( i = 0; i <= n; i++ )
-      {
-        sprintf( s, " $%02hx%02hx", exec->code[exec->IP + i*2 + 1],
-                                    exec->code[exec->IP + i*2 + 2] );
-        strncat( tempStr, s, 8 );
-      }
-    }
-
-    return (char*)tempStr;
-  }
-
-
-  EXPORT_FUNC
-  TT_Error  TT_RunIns( TT_ExecContext  exc )
-  {
-    TT_Int    A, diff;
-    TT_ULong  next_IP;
-    TT_Char   ch, oldch;
-    char     *temp;
-    int       key;
-    FT_Memory memory;
-
-    TT_Error  error = 0;
-
-    FT_GlyphZone  save;
-    FT_GlyphZone  pts;
-
-#define TT_Round_Off             5
-#define TT_Round_To_Half_Grid    0
-#define TT_Round_To_Grid         1
-#define TT_Round_To_Double_Grid  2
-#define TT_Round_Up_To_Grid      4
-#define TT_Round_Down_To_Grid    3
-#define TT_Round_Super           6
-#define TT_Round_Super_45        7
-
-    const char*  round_str[8] =
-    {
-      "to half-grid",
-      "to grid",
-      "to double grid",
-      "down to grid",
-      "up to grid",
-      "off",
-      "super",
-      "super 45"
-    };
-
-    /* Check that we're running the code range that is effectively */
-    /* asked by the debugger front end.                            */
-    if ( exc->curRange != debug_coderange )
-      return TT_RunIns2( exc );
-
-    pts = exc->pts;
-
-    memory = exc->face->root.memory;
-
-    save.n_points   = pts.n_points;
-    save.n_contours = pts.n_contours;
-
-    MEM_Alloc( save.org, sizeof ( TT_Vector ) * save.n_points );
-    MEM_Alloc( save.cur, sizeof ( TT_Vector ) * save.n_points );
-    MEM_Alloc( save.tags, sizeof ( TT_Byte ) * save.n_points );
-
-    exc->instruction_trap = 1;
-
-    oldch = '\0';
-
-    do
-    {
-      if ( exc->IP < exc->codeSize )
-      {
-#ifdef TT_CONFIG_OPTION_STATIC_INTERPRETER
-        cur = *exc;
-#endif
-        if ( ( CUR.length = opcode_length[CUR.opcode] ) < 0 )
-        {
-          if ( CUR.IP + 1 > CUR.codeSize )
-            goto LErrorCodeOverflow_;
-
-          CUR.length = CUR.code[CUR.IP + 1] + 2;
-        }
-
-        exc->args = exc->top - (Pop_Push_Count[exc->opcode] >> 4);
-
-        /* `args' is the top of the stack once arguments have been popped. */
-        /* One can also interpret it as the index of the last argument.    */
-
-        /* Print the current line.  We use a 80-columns console with the   */
-        /* following formatting:                                           */
-        /*                                                                 */
-        /* [loc]:[addr] [opcode]  [disassemby]          [a][b]|[c][d]      */
-        /*                                                                 */
-
-        {
-          char      temp[80];
-          int       n, col, pop;
-          int       args = CUR.args;
-
-
-          sprintf( temp, "%78c\n", ' ' );
-
-          /* first letter of location */
-          switch ( CUR.curRange )
-          {
-          case tt_coderange_glyph:
-            temp[0] = 'g';
-            break;
-          case tt_coderange_cvt:
-            temp[0] = 'c';
-            break;
-          default:
-            temp[0] = 'f';
-          }
-
-          /* current IP */
-          sprintf( temp+1, "%04lx: %02x  %-36.36s",
-                   CUR.IP,
-                   CUR.opcode,
-                   Cur_U_Line(&CUR) );
-
-          strncpy( temp+46, " (", 2 );
-
-          args = CUR.top - 1;
-          pop  = Pop_Push_Count[CUR.opcode] >> 4;
-          col  = 48;
-          for ( n = 6; n > 0; n-- )
-          {
-            if ( pop == 0 )
-              temp[col-1] = (temp[col-1] == '(' ? ' ' : ')' );
-
-            if ( args < CUR.top && args >= 0 )
-              sprintf( temp+col, "%04lx", CUR.stack[args] );
-            else
-              sprintf( temp+col, "    " );
-
-            temp[col+4] = ' ';
-            col += 5;
-            pop--;
-            args--;
-          }
-          temp[78] = '\n';
-          temp[79] = '\0';
-          FT_TRACE0(( temp ));
-        }
-
-        /* First, check for empty stack and overflow */
-        if ( CUR.args < 0 )
-        {
-          FT_TRACE0(( "ERROR : Too few arguments\n" ));
-          exc->error = TT_Err_Too_Few_Arguments;
-          goto LErrorLabel_;
-        }
-
-        CUR.new_top = CUR.args + (Pop_Push_Count[CUR.opcode] & 15);
-
-      /* new_top  is the new top of the stack, after the instruction's */
-      /* execution. top will be set to new_top after the 'case'        */
-
-        if ( CUR.new_top > CUR.stackSize )
-        {
-          FT_TRACE0(( "ERROR : Stack overflow\n" ));
-          exc->error = TT_Err_Stack_Overflow;
-          goto LErrorLabel_;
-        }
-      }
-      else
-        FT_TRACE0(( "End of program reached.\n" ));
-
-      key = 0;
-      do
-      {
-       /* read keyboard */
-
-        ch = getch();
-
-        switch ( ch )
-        {
-        /* Help - show keybindings */
-        case '?':
-          FT_TRACE0(( "FDebug Help\n\n" ));
-          FT_TRACE0(( "?   Show this page\n" ));
-          FT_TRACE0(( "q   Quit debugger\n" ));
-          FT_TRACE0(( "n   Skip to next instruction\n" ));
-          FT_TRACE0(( "s   Step into\n" ));
-          FT_TRACE0(( "v   Show vector info\n" ));
-          FT_TRACE0(( "g   Show graphics state\n" ));
-          FT_TRACE0(( "p   Show points zone\n\n" ));
-          break;
-
-        /* Show vectors */
-        case 'v':
-          FT_TRACE0(( "freedom    (%04hx,%04hx)\n", exc->GS.freeVector.x,
-                                                  exc->GS.freeVector.y ));
-          FT_TRACE0(( "projection (%04hx,%04hx)\n", exc->GS.projVector.x,
-                                                  exc->GS.projVector.y ));
-          FT_TRACE0(( "dual       (%04hx,%04hx)\n\n", exc->GS.dualVector.x,
-                                                    exc->GS.dualVector.y ));
-          break;
-
-        /* Show graphics state */
-        case 'g':
-          FT_TRACE0(( "rounding   %s\n", round_str[exc->GS.round_state] ));
-          FT_TRACE0(( "min dist   %04lx\n", exc->GS.minimum_distance ));
-          FT_TRACE0(( "cvt_cutin  %04lx\n", exc->GS.control_value_cutin ));
-          break;
-
-        /* Show points table */
-        case 'p':
-          for ( A = 0; A < exc->pts.n_points; A++ )
-          {
-            FT_TRACE0(( "%02hx  ", A ));
-            FT_TRACE0(( "%08lx,%08lx - ", pts.org[A].x, pts.org[A].y ));
-            FT_TRACE0(( "%08lx,%08lx\n",  pts.cur[A].x, pts.cur[A].y ));
-          }
-          FT_TRACE0(( "\n" ));
-          break;
-
-        default:
-          key = 1;
-        }
-      } while ( !key );
-
-      MEM_Copy( save.org,   pts.org, pts.n_points * sizeof ( TT_Vector ) );
-      MEM_Copy( save.cur,   pts.cur, pts.n_points * sizeof ( TT_Vector ) );
-      MEM_Copy( save.tags, pts.tags, pts.n_points );
-
-      /* a return indicate the last command */
-      if (ch == '\r')
-        ch = oldch;
-
-      switch ( ch )
-      {
-      /* Quit debugger */
-      case 'q':
-        goto LErrorLabel_;
-
-      /* Step over */
-      case 'n':
-        if ( exc->IP < exc->codeSize )
-        {
-          /* `step over' is equivalent to `step into' except if  */
-          /* the current opcode is a CALL or LOOPCALL            */
-          if ( CUR.opcode != 0x2a && CUR.opcode != 0x2b )
-            goto Step_into;
-
-          /* otherwise, loop execution until we reach the next opcode */
-          next_IP = CUR.IP + CUR.length;
-          while ( exc->IP != next_IP )
-          {
-            if ( ( error = TT_RunIns2( exc ) ) )
-              goto LErrorLabel_;
-          }
-        }
-        oldch = ch;
-        break;
-
-      /* Step into */
-      case 's':
-        if ( exc->IP < exc->codeSize )
-
-      Step_into:
-          if ( ( error = TT_RunIns2( exc ) ) )
-            goto LErrorLabel_;
-        oldch = ch;
-        break;
-
-      default:
-        FT_TRACE0(( "unknown command. Press ? for help\n" ));
-        oldch = '\0';
-      }
-
-      for ( A = 0; A < pts.n_points; A++ )
-      {
-        diff = 0;
-        if ( save.org[A].x != pts.org[A].x ) diff |= 1;
-        if ( save.org[A].y != pts.org[A].y ) diff |= 2;
-        if ( save.cur[A].x != pts.cur[A].x ) diff |= 4;
-        if ( save.cur[A].y != pts.cur[A].y ) diff |= 8;
-        if ( save.tags[A] != pts.tags[A] ) diff |= 16;
-
-        if ( diff )
-        {
-          FT_TRACE0(( "%02hx  ", A ));
-
-          if ( diff & 16 ) temp = "(%01hx)"; else temp = " %01hx ";
-          FT_TRACE0(( temp, save.tags[A] & 7 ));
-
-          if ( diff & 1 ) temp = "(%08lx)"; else temp = " %08lx ";
-          FT_TRACE0(( temp, save.org[A].x ));
-
-          if ( diff & 2 ) temp = "(%08lx)"; else temp = " %08lx ";
-          FT_TRACE0(( temp, save.org[A].y ));
-
-          if ( diff & 4 ) temp = "(%08lx)"; else temp = " %08lx ";
-          FT_TRACE0(( temp, save.cur[A].x ));
-
-          if ( diff & 8 ) temp = "(%08lx)"; else temp = " %08lx ";
-          FT_TRACE0(( temp, save.cur[A].y ));
-
-          FT_TRACE0(( "\n" ));
-
-          FT_TRACE0(( "%02hx  ", A ));
-
-          if ( diff & 16 ) temp = "[%01hx]"; else temp = " %01hx ";
-          FT_TRACE0(( temp, pts.tags[A] & 7 ));
-
-          if ( diff & 1 ) temp = "[%08lx]"; else temp = " %08lx ";
-          FT_TRACE0(( temp, pts.org[A].x ));
-
-          if ( diff & 2 ) temp = "[%08lx]"; else temp = " %08lx ";
-          FT_TRACE0(( temp, pts.org[A].y ));
-
-          if ( diff & 4 ) temp = "[%08lx]"; else temp = " %08lx ";
-          FT_TRACE0(( temp, pts.cur[A].x ));
-
-          if ( diff & 8 ) temp = "[%08lx]"; else temp = " %08lx ";
-          FT_TRACE0(( temp, pts.cur[A].y ));
-
-          FT_TRACE0(( "\n\n" ));
-        }
-      }
-    } while ( TRUE );
-
-  LErrorLabel_:
-
-    return error;
-
-  LErrorCodeOverflow_:
-    error = TT_Err_Code_Overflow;
-    return error;
-  }
-
-#endif /* DEBUG_INTERPRETER */
 
 #endif /* TT_CONFIG_OPTION_BYTECODE_INTERPRETER */
 
--- a/src/truetype/ttinterp.h
+++ b/src/truetype/ttinterp.h
@@ -314,8 +314,10 @@
   /* <Note>                                                                */
   /*    Only the glyph loader and debugger should call this function.      */
   /*                                                                       */
-  EXPORT_DEF
-  TT_ExecContext  TT_New_Context( TT_Face  face );
+  /*    This function is publicly exported because it is directly          */
+  /*    invoked by the TrueType debugger..                                 */
+  /*                                                                       */
+  EXPORT_DEF(TT_ExecContext)  TT_New_Context( TT_Face  face );
 
 
   /*************************************************************************/
@@ -335,7 +337,7 @@
   /* <Note>                                                                */
   /*    Only the glyph loader and debugger should call this function.      */
   /*                                                                       */
-  EXPORT_DEF
+  LOCAL_DEF
   TT_Error  TT_Done_Context( TT_ExecContext  exec );
 
 
@@ -381,7 +383,7 @@
   /* <Note>                                                                */
   /*    Only the glyph loader and debugger should call this function.      */
   /*                                                                       */
-  EXPORT_DEF
+  LOCAL_DEF
   TT_Error  TT_Load_Context( TT_ExecContext  exec,
                              TT_Face         face,
                              TT_Size         size );
@@ -456,8 +458,10 @@
   /* <Note>                                                                */
   /*    Only object manager and debugger should call this function.        */
   /*                                                                       */
-  EXPORT_DEF
-  TT_Error  TT_RunIns( TT_ExecContext  exec );
+  /*    This function is publicly exported because it is directly          */
+  /*    invoked by the TrueType debugger..                                 */
+  /*                                                                       */
+  EXPORT_DEF(TT_Error)  TT_RunIns( TT_ExecContext  exec );
 
 
 #ifdef __cplusplus
--- a/src/type1/t1driver.c
+++ b/src/type1/t1driver.c
@@ -360,7 +360,6 @@
   /*        return a loaded glyph's metrics.                        */
   /*                                                                */
 
-  EXPORT_FUNC
   const  FT_DriverInterface  t1_driver_interface =
   {
     sizeof( FT_DriverRec ),
@@ -427,8 +426,7 @@
 
 #ifdef FT_CONFIG_OPTION_DYNAMIC_DRIVERS
   
-  EXPORT_FUNC
-  FT_DriverInterface*  getDriverInterface( void )
+  EXPORT_FUNC(FT_DriverInterface*)  getDriverInterface( void )
   {
     return &t1_driver_interface;
   }
--- a/src/type1/t1driver.h
+++ b/src/type1/t1driver.h
@@ -21,8 +21,7 @@
 #include <t1objs.h>
 #include <t1errors.h>
 
-  EXPORT_DEF
-  const  FT_DriverInterface  t1_driver_interface;
+  EXPORT_VAR(const  FT_DriverInterface)  t1_driver_interface;
 
 #endif /* T1DRIVER_H */
 
--- a/src/type1/t1gload.c
+++ b/src/type1/t1gload.c
@@ -52,7 +52,7 @@
  *
  *********************************************************************/
 
-  EXPORT_FUNC
+  LOCAL_FUNC
   void  T1_Init_Builder( T1_Builder*             builder,
                          T1_Face                 face,
                          T1_Size                 size,
@@ -113,7 +113,7 @@
  *
  *********************************************************************/
 
-  EXPORT_FUNC
+  LOCAL_FUNC
   void T1_Done_Builder( T1_Builder*  builder )
   {
     T1_GlyphSlot  glyph = builder->glyph;
@@ -142,7 +142,7 @@
  *
  *********************************************************************/
 
-  EXPORT_FUNC
+  LOCAL_FUNC
   void  T1_Init_Decoder( T1_Decoder*             decoder,
                          const T1_Hinter_Funcs*  funcs )
   {
@@ -438,7 +438,7 @@
  *
  *********************************************************************/
 
-  EXPORT_FUNC
+  LOCAL_FUNC
   T1_Error   T1_Parse_CharStrings( T1_Decoder*  decoder,
                                    T1_Byte*     charstring_base,
                                    T1_Int       charstring_len,
--- a/src/type1/t1gload.h
+++ b/src/type1/t1gload.h
@@ -299,7 +299,7 @@
  *
  *********************************************************************/
 
-  EXPORT_DEF
+  LOCAL_DEF
   void  T1_Init_Builder( T1_Builder*             builder,
                          T1_Face                 face,
                          T1_Size                 size,
@@ -326,7 +326,7 @@
  *
  *********************************************************************/
 
-  EXPORT_DEF
+  LOCAL_DEF
   void T1_Done_Builder( T1_Builder*  builder );
 
 
@@ -349,7 +349,7 @@
  *
  *********************************************************************/
 
-  EXPORT_DEF
+  LOCAL_DEF
   void  T1_Init_Decoder( T1_Decoder*             decoder,
                          const T1_Hinter_Funcs*  funcs );
 
@@ -362,7 +362,7 @@
 
 
   /* This function is exported, because it is used by the T1Dump utility */
-  EXPORT_DEF
+  LOCAL_DEF
   T1_Error   T1_Parse_CharStrings( T1_Decoder*  decoder,
                                    T1_Byte*     charstring_base,
                                    T1_Int       charstring_len,
--- a/src/type1z/t1driver.c
+++ b/src/type1z/t1driver.c
@@ -359,7 +359,6 @@
   /*        return a loaded glyph's metrics.                        */
   /*                                                                */
 
-  EXPORT_FUNC
   const  FT_DriverInterface  t1z_driver_interface =
   {
     sizeof( FT_DriverRec ),
@@ -426,8 +425,7 @@
 
 #ifdef FT_CONFIG_OPTION_DYNAMIC_DRIVERS
   
-  EXPORT_FUNC
-  FT_DriverInterface*  getDriverInterface( void )
+  EXPORT_FUNC(FT_DriverInterface*)  getDriverInterface( void )
   {
     return &t1_driver_interface;
   }
--- a/src/type1z/t1driver.h
+++ b/src/type1z/t1driver.h
@@ -21,8 +21,7 @@
 #include <t1objs.h>
 #include <t1errors.h>
 
-  EXPORT_DEF
-  const  FT_DriverInterface  t1z_driver_interface;
+  EXPORT_VAR(const  FT_DriverInterface)  t1z_driver_interface;
 
 #endif /* T1DRIVER_H */
 
--- a/src/type1z/t1gload.c
+++ b/src/type1z/t1gload.c
@@ -198,7 +198,7 @@
  *
  *********************************************************************/
 
-  EXPORT_FUNC
+  LOCAL_FUNC
   void  T1_Init_Decoder( T1_Decoder* decoder )
   {
     decoder->top              = 0;