shithub: freetype+ttf2subf

Download patch

ref: 7a4fda8821e8fc48167ff3603f7a0b323fa46963
parent: 78575dc0d188d18f806e802e36752ea85318e543
author: Werner Lemberg <[email protected]>
date: Tue Jun 13 19:21:00 EDT 2000

The next round of formatting, checking documentation, etc.

git/fs: mount .git/fs: mount/attach disallowed
--- a/src/cff/t2driver.c
+++ b/src/cff/t2driver.c
@@ -16,6 +16,7 @@
 /***************************************************************************/
 
 
+#include <freetype/freetype.h>
 #include <freetype/internal/ftdebug.h>
 #include <freetype/internal/ftstream.h>
 #include <freetype/internal/sfnt.h>
@@ -24,7 +25,9 @@
 #include <t2driver.h>
 #include <t2gload.h>
 
+#include <freetype/internal/t2errors.h>
 
+
   /*************************************************************************/
   /*                                                                       */
   /* The macro FT_COMPONENT is used in trace mode.  It is an implicit      */
@@ -47,6 +50,7 @@
   /*************************************************************************/
   /*************************************************************************/
 
+
 #undef  PAIR_TAG
 #define PAIR_TAG( left, right )  ( ( (TT_ULong)left << 16 ) | \
                                      (TT_ULong)right        )
@@ -74,12 +78,12 @@
   /*                   formats.                                            */
   /*                                                                       */
   /* <Return>                                                              */
-  /*    FreeType error code.  0 means success.                             */
+  /*    TrueType error code.  0 means success.                             */
   /*                                                                       */
   /* <Note>                                                                */
   /*    Only horizontal layouts (left-to-right & right-to-left) are        */
   /*    supported by this function.  Other layouts, or more sophisticated  */
-  /*    kernings are out of scope of this method (the basic driver         */
+  /*    kernings, are out of scope of this method (the basic driver        */
   /*    interface is meant to be simple).                                  */
   /*                                                                       */
   /*    They can be implemented by format-specific interfaces.             */
@@ -94,7 +98,7 @@
 
 
     if ( !face )
-      return FT_Err_Invalid_Face_Handle;
+      return T2_Err_Invalid_Face_Handle;
 
     kerning->x = 0;
     kerning->y = 0;
@@ -111,7 +115,7 @@
 
       while ( left <= right )
       {
-        TT_Int    middle   = left + ((right-left) >> 1);
+        TT_Int    middle = left + ( ( right - left ) >> 1 );
         TT_ULong  cur_pair;
 
 
@@ -122,14 +126,14 @@
           goto Found;
 
         if ( cur_pair < search_tag )
-          left = middle+1;
+          left = middle + 1;
         else
-          right = middle-1;
+          right = middle - 1;
       }
     }
 
   Exit:
-    return FT_Err_Ok;
+    return T2_Err_Ok;
 
   Found:
     kerning->x = pair->value;
@@ -163,47 +167,54 @@
   /*    and vertical) expressed in fractional points.                      */
   /*                                                                       */
   /* <Input>                                                               */
-  /*    char_width  :: The character width expressed in 26.6 fractional    */
-  /*                   points.                                             */
-  /*    char_height :: The character height expressed in 26.6 fractional   */
-  /*                   points.                                             */
+  /*    char_width      :: The character width expressed in 26.6           */
+  /*                       fractional points.                              */
   /*                                                                       */
+  /*    char_height     :: The character height expressed in 26.6          */
+  /*                       fractional points.                              */
+  /*                                                                       */
+  /*    horz_resolution :: The horizontal resolution of the output device. */
+  /*                                                                       */
+  /*    vert_resolution :: The vertical resolution of the output device.   */
+  /*                                                                       */
   /* <InOut>                                                               */
   /*    size        :: A handle to the target size object.                 */
   /*                                                                       */
   /* <Return>                                                              */
-  /*    FreeType error code.  0 means success.                             */
+  /*    TrueType error code.  0 means success.                             */
   /*                                                                       */
   static
   TT_Error  Set_Char_Sizes( T2_Size     size,
-                            FT_F26Dot6  char_width,
-                            FT_F26Dot6  char_height,
-                            FT_UInt     horz_resolution,
-                            FT_UInt     vert_resolution )
+                            TT_F26Dot6  char_width,
+                            TT_F26Dot6  char_height,
+                            TT_UInt     horz_resolution,
+                            TT_UInt     vert_resolution )
   {
     FT_Size_Metrics*  metrics = &size->metrics;
     T2_Face           face    = (T2_Face)size->face;
     FT_Long           dim_x, dim_y;
 
+
     /* This bit flag, when set, indicates that the pixel size must be */
-    /* truncated to an integer. Nearly all TrueType fonts have this   */
+    /* truncated to an integer.  Nearly all TrueType fonts have this  */
     /* bit set, as hinting won't work really well otherwise.          */
     /*                                                                */
     /* However, for those rare fonts who do not set it, we override   */
-    /* the default computations performed by the base layer. I really */
-    /* don't know if this is useful, but hey, that's the spec :-)     */
+    /* the default computations performed by the base layer.  I       */
+    /* really don't know whether this is useful, but hey, that's the  */
+    /* spec :-)                                                       */
     /*                                                                */
-    if ( (face->header.Flags & 8) == 0 )
+    if ( ( face->header.Flags & 8 ) == 0 )
     {
       /* Compute pixel sizes in 26.6 units */
-      dim_x = (char_width * horz_resolution) / 72;
-      dim_y = (char_height * vert_resolution) / 72;
+      dim_x = ( char_width  * horz_resolution ) / 72;
+      dim_y = ( char_height * vert_resolution ) / 72;
 
       metrics->x_scale = FT_DivFix( dim_x, face->root.units_per_EM );
       metrics->y_scale = FT_DivFix( dim_y, face->root.units_per_EM );
 
-      metrics->x_ppem    = (TT_UShort)(dim_x >> 6);
-      metrics->y_ppem    = (TT_UShort)(dim_y >> 6);
+      metrics->x_ppem  = (TT_UShort)( dim_x >> 6 );
+      metrics->y_ppem  = (TT_UShort)( dim_y >> 6 );
     }
 
     return T2_Reset_Size( size );
@@ -228,15 +239,15 @@
   /*    size         :: A handle to the target size object.                */
   /*                                                                       */
   /* <Return>                                                              */
-  /*    FreeType error code. 0 means success                               */
+  /*    TrueType error code.  0 means success.                             */
   /*                                                                       */
   static
-  FT_Error  Set_Pixel_Sizes( T2_Size  size,
-                             FT_UInt  pixel_width,
-                             FT_UInt  pixel_height )
+  TT_Error  Set_Pixel_Sizes( T2_Size  size,
+                             TT_UInt  pixel_width,
+                             TT_UInt  pixel_height )
   {
-    UNUSED(pixel_width);
-    UNUSED(pixel_height);
+    UNUSED( pixel_width );
+    UNUSED( pixel_height );
 
     return T2_Reset_Size( size );
   }
@@ -255,7 +266,7 @@
   /*                   will be loaded.                                     */
   /*                                                                       */
   /*    size        :: A handle to the source face size at which the glyph */
-  /*                   must be scaled/loaded/etc.                          */
+  /*                   must be scaled, loaded, etc.                        */
   /*                                                                       */
   /*    glyph_index :: The index of the glyph in the font file.            */
   /*                                                                       */
@@ -264,27 +275,23 @@
   /*                   glyph loading process (e.g., whether the outline    */
   /*                   should be scaled, whether to load bitmaps or not,   */
   /*                   whether to hint the outline, etc).                  */
-  /* <Output>                                                              */
-  /*    result      :: A set of bit flags indicating the type of data that */
-  /*                   was loaded in the glyph slot (outline, bitmap,      */
-  /*                   pixmap, etc).                                       */
   /*                                                                       */
   /* <Return>                                                              */
-  /*    FreeType error code.  0 means success.                             */
+  /*    TrueType error code.  0 means success.                             */
   /*                                                                       */
   static
-  FT_Error  Load_Glyph( T2_GlyphSlot  slot,
+  TT_Error  Load_Glyph( T2_GlyphSlot  slot,
                         T2_Size       size,
-                        FT_UShort     glyph_index,
-                        FT_UInt       load_flags )
+                        TT_UShort     glyph_index,
+                        TT_UInt       load_flags )
   {
-    FT_Error  error;
+    TT_Error  error;
 
 
     if ( !slot )
-      return FT_Err_Invalid_Handle;
+      return T2_Err_Invalid_Glyph_Handle;
 
-    /* check that we want a scaled outline or bitmap */
+    /* check whether we want a scaled outline or bitmap */
     if ( !size )
       load_flags |= FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING;
 
@@ -296,7 +303,7 @@
     {
       /* these two object must have the same parent */
       if ( size->face != slot->root.face )
-        return FT_Err_Invalid_Face_Handle;
+        return T2_Err_Invalid_Face_Handle;
     }
 
     /* now load the glyph outline if necessary */
@@ -336,13 +343,14 @@
   /*    Glyph index.  0 means `undefined character code'.                  */
   /*                                                                       */
   static
-  FT_UInt  Get_Char_Index( TT_CharMap  charmap,
-                           FT_Long     charcode )
+  TT_UInt  Get_Char_Index( TT_CharMap  charmap,
+                           TT_Long     charcode )
   {
-    FT_Error       error;
+    TT_Error       error;
     T2_Face        face;
     TT_CMapTable*  cmap;
 
+
     cmap = &charmap->cmap;
     face = (T2_Face)charmap->root.face;
 
@@ -351,29 +359,47 @@
     {
       SFNT_Interface*  sfnt = (SFNT_Interface*)face->sfnt;
 
+
       error = sfnt->load_charmap( face, cmap, face->root.stream );
-      if (error) return error;
+      if ( error )
+        return 0;
 
       cmap->loaded = TRUE;
     }
 
-    return (cmap->get_index ? cmap->get_index( cmap, charcode ) : 0 );
+    return ( cmap->get_index ? cmap->get_index( cmap, charcode ) : 0 );
   }
 
 
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /****                                                                 ****/
+  /****                                                                 ****/
+  /****                D R I V E R  I N T E R F A C E                   ****/
+  /****                                                                 ****/
+  /****                                                                 ****/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
   static
-  FTDriver_Interface  t2_get_interface( T2_Driver  driver, const char* interface )
+  FTDriver_Interface  t2_get_interface( T2_Driver    driver,
+                                        const char*  interface )
   {
     FT_Driver        sfntd = FT_Get_Driver( driver->root.library, "sfnt" );
     SFNT_Interface*  sfnt;
-    
+
+
     /* only return the default interface from the SFNT module */
-    if (sfntd)
+    if ( sfntd )
     {
       sfnt = (SFNT_Interface*)(sfntd->interface.format_interface);
-      if (sfnt)
+      if ( sfnt )
         return sfnt->get_interface( (FT_Driver)driver, interface );
     }
+
     return 0;
   }
 
@@ -393,28 +419,30 @@
 
     (void*)0,
 
-    (FTDriver_initDriver)        T2_Init_Driver,
-    (FTDriver_doneDriver)        T2_Done_Driver,
-    (FTDriver_getInterface)      t2_get_interface,
+    (FTDriver_initDriver)     T2_Init_Driver,
+    (FTDriver_doneDriver)     T2_Done_Driver,
+    (FTDriver_getInterface)   t2_get_interface,
 
-    (FTDriver_initFace)          T2_Init_Face,
-    (FTDriver_doneFace)          T2_Done_Face,
-    (FTDriver_getKerning)        Get_Kerning,
+    (FTDriver_initFace)       T2_Init_Face,
+    (FTDriver_doneFace)       T2_Done_Face,
+    (FTDriver_getKerning)     Get_Kerning,
 
-    (FTDriver_initSize)          T2_Init_Size,
-    (FTDriver_doneSize)          T2_Done_Size,
-    (FTDriver_setCharSizes)      Set_Char_Sizes,
-    (FTDriver_setPixelSizes)     Set_Pixel_Sizes,
+    (FTDriver_initSize)       T2_Init_Size,
+    (FTDriver_doneSize)       T2_Done_Size,
+    (FTDriver_setCharSizes)   Set_Char_Sizes,
+    (FTDriver_setPixelSizes)  Set_Pixel_Sizes,
 
-    (FTDriver_initGlyphSlot)     T2_Init_GlyphSlot,
-    (FTDriver_doneGlyphSlot)     T2_Done_GlyphSlot,
-    (FTDriver_loadGlyph)         Load_Glyph,
+    (FTDriver_initGlyphSlot)  T2_Init_GlyphSlot,
+    (FTDriver_doneGlyphSlot)  T2_Done_GlyphSlot,
+    (FTDriver_loadGlyph)      Load_Glyph,
 
-    (FTDriver_getCharIndex)      Get_Char_Index,
+    (FTDriver_getCharIndex)   Get_Char_Index,
   };
 
 
+#ifdef FT_CONFIG_OPTION_DYNAMIC_DRIVERS
 
+
   /*************************************************************************/
   /*                                                                       */
   /* <Function>                                                            */
@@ -434,12 +462,11 @@
   /*    format-specific interface can then be retrieved through the method */
   /*    interface->get_format_interface.                                   */
   /*                                                                       */
-#ifdef FT_CONFIG_OPTION_DYNAMIC_DRIVERS
-
-  EXPORT_FUNC(FT_DriverInterface*)  getDriverInterface( void )
+  EXPORT_FUNC( FT_DriverInterface* )  getDriverInterface( void )
   {
     return &cff_driver_interface;
   }
+
 
 #endif /* CONFIG_OPTION_DYNAMIC_DRIVERS */
 
--- a/src/cff/t2driver.h
+++ b/src/cff/t2driver.h
@@ -4,7 +4,7 @@
 /*                                                                         */
 /*    High-level OpenType driver interface (specification).                */
 /*                                                                         */
-/*  Copyright 1996-1999 by                                                 */
+/*  Copyright 1996-2000 by                                                 */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
@@ -19,13 +19,12 @@
 #ifndef T2DRIVER_H
 #define T2DRIVER_H
 
+#include <freetype/freetype.h>
 #include <freetype/internal/ftdriver.h>
-#include <freetype/ttnameid.h>
 #include <t2objs.h>
-#include <freetype/internal/t2errors.h>
 
 
-  FT_EXPORT_VAR(const FT_DriverInterface)  cff_driver_interface;
+  FT_EXPORT_VAR( const FT_DriverInterface )  cff_driver_interface;
 
 
 #endif /* T2DRIVER_H */
--- a/src/cff/t2gload.c
+++ b/src/cff/t2gload.c
@@ -25,7 +25,9 @@
 #include <t2load.h>
 #include <t2gload.h>
 
+#include <freetype/internal/t2errors.h>
 
+
   /*************************************************************************/
   /*                                                                       */
   /* The macro FT_COMPONENT is used in trace mode.  It is an implicit      */
@@ -39,12 +41,15 @@
   typedef enum  T2_Operator_
   {
     t2_op_unknown = 0,
+
     t2_op_rmoveto,
     t2_op_hmoveto,
     t2_op_vmoveto,
+
     t2_op_rlineto,
     t2_op_hlineto,
     t2_op_vlineto,
+
     t2_op_rrcurveto,
     t2_op_hhcurveto,
     t2_op_hvcurveto,
@@ -52,17 +57,22 @@
     t2_op_rlinecurve,
     t2_op_vhcurveto,
     t2_op_vvcurveto,
+
     t2_op_flex,
     t2_op_hflex,
     t2_op_hflex1,
     t2_op_flex1,
+
     t2_op_endchar,
+
     t2_op_hstem,
     t2_op_vstem,
     t2_op_hstemhm,
     t2_op_vstemhm,
+
     t2_op_hintmask,
     t2_op_cntrmask,
+
     t2_op_abs,
     t2_op_add,
     t2_op_sub,
@@ -71,37 +81,45 @@
     t2_op_random,
     t2_op_mul,
     t2_op_sqrt,
+
     t2_op_blend,
+
     t2_op_drop,
     t2_op_exch,
     t2_op_index,
     t2_op_roll,
     t2_op_dup,
+
     t2_op_put,
     t2_op_get,
     t2_op_store,
     t2_op_load,
+
     t2_op_and,
     t2_op_or,
     t2_op_not,
     t2_op_eq,
     t2_op_ifelse,
+
     t2_op_callsubr,
     t2_op_callgsubr,
     t2_op_return,
+
     /* do not remove */
     t2_op_max
-    
+
   } T2_Operator;
 
-  #define T2_COUNT_CHECK_WIDTH  0x80
-  #define T2_COUNT_EXACT        0x40
-  #define T2_COUNT_CLEAR_STACK  0x20
 
+#define T2_COUNT_CHECK_WIDTH  0x80
+#define T2_COUNT_EXACT        0x40
+#define T2_COUNT_CLEAR_STACK  0x20
+
+
   static const FT_Byte  t2_argument_counts[] =
   {
     0,  /* unknown */
-    
+
     2 | T2_COUNT_CHECK_WIDTH | T2_COUNT_EXACT, /* rmoveto */
     1 | T2_COUNT_CHECK_WIDTH | T2_COUNT_EXACT,
     1 | T2_COUNT_CHECK_WIDTH | T2_COUNT_EXACT,
@@ -123,16 +141,16 @@
     9,
     11,
 
-    0, /* enchar */
-    
+    0, /* endchar */
+
     2 | T2_COUNT_CHECK_WIDTH, /* hstem */
     2 | T2_COUNT_CHECK_WIDTH,
     2 | T2_COUNT_CHECK_WIDTH,
     2 | T2_COUNT_CHECK_WIDTH,
-    
+
     0, /* hintmask */
     0, /* cntrmask */
-    
+
     1, /* abs */
     2,
     2,
@@ -141,64 +159,63 @@
     0,
     2,
     1,
-    
+
     1, /* blend */
-    
+
     1, /* drop */
     2,
     1,
     2,
     1,
-    
+
     2, /* put */
     1,
     4,
     3,
-    
+
     2, /* and */
     2,
     1,
     2,
     4,
-    
+
     1, /* callsubr */
     1,
     0
   };
 
-  /* required for the tracing mode */
-#undef  FT_COMPONENT
-#define FT_COMPONENT  trace_ttgload
 
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /**********                                                      *********/
+  /**********                                                      *********/
+  /**********             GENERIC CHARSTRING PARSING               *********/
+  /**********                                                      *********/
+  /**********                                                      *********/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
 
-  /**********************************************************************/
-  /**********************************************************************/
-  /**********************************************************************/
-  /**********                                                   *********/
-  /**********                                                   *********/
-  /**********           GENERIC CHARSTRINGS PARSING             *********/
-  /**********                                                   *********/
-  /**********                                                   *********/
-  /**********************************************************************/
-  /**********************************************************************/
-  /**********************************************************************/
 
-/*********************************************************************
- *
- * <Function>
- *    T2_Init_Builder
- *
- * <Description>
- *    Initialise a given glyph builder.
- *
- * <Input>
- *    builder :: glyph builder to initialise
- *    face    :: current face object
- *    size    :: current size object
- *    glyph   :: current glyph object
- *
- *********************************************************************/
-
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    T2_Init_Builder                                                    */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Initializes a given glyph builder.                                 */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    builder :: A pointer to the glyph builder to initialize.           */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    face    :: The current face object.                                */
+  /*                                                                       */
+  /*    size    :: The current size object.                                */
+  /*                                                                       */
+  /*    glyph   :: The current glyph object.                               */
+  /*                                                                       */
   static
   void  T2_Init_Builder( T2_Builder*   builder,
                          TT_Face       face,
@@ -212,7 +229,7 @@
     builder->glyph  = glyph;
     builder->memory = face->root.memory;
 
-    if (glyph)
+    if ( glyph )
     {
       builder->base         = glyph->root.outline;
       builder->max_points   = glyph->max_points;
@@ -219,7 +236,7 @@
       builder->max_contours = glyph->max_contours;
     }
 
-    if (size)
+    if ( size )
     {
       builder->scale_x = size->metrics.x_scale;
       builder->scale_y = size->metrics.y_scale;
@@ -239,27 +256,26 @@
   }
 
 
-/*********************************************************************
- *
- * <Function>
- *    T2_Done_Builder
- *
- * <Description>
- *    Finalise a given glyph builder. Its content can still be
- *    used after the call, but the function saves important information
- *    within the corresponding glyph slot.
- *
- * <Input>
- *    builder :: glyph builder to initialise
- *
- *********************************************************************/
-
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    T2_Done_Builder                                                    */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Finalizes a given glyph builder.  Its contents can still be used   */
+  /*    after the call, but the function saves important information       */
+  /*    within the corresponding glyph slot.                               */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    builder :: A pointer to the glyph builder to finalize.             */
+  /*                                                                       */
   static
-  void T2_Done_Builder( T2_Builder*  builder )
+  void  T2_Done_Builder( T2_Builder*  builder )
   {
     T2_GlyphSlot  glyph = builder->glyph;
 
-    if (glyph)
+
+    if ( glyph )
     {
       glyph->root.outline = builder->base;
       glyph->max_points   = builder->max_points;
@@ -268,36 +284,55 @@
   }
 
 
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    t2_compute_bias                                                    */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Computes the bias value in dependence of the number of glyph       */
+  /*    subroutines.                                                       */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    num_subrs :: The number of glyph subroutines.                      */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    The bias value.                                                    */
+  static
+  TT_Int  t2_compute_bias( TT_UInt  num_subrs )
+  {
+    TT_Int  result;
 
-/*********************************************************************
- *
- * <Function>
- *    T2_Init_Decoder
- *
- * <Description>
- *    Initialise a given Type 2 decoder for parsing
- *
- * <Input>
- *    decoder :: Type 1 decoder to initialise
- *    funcs   :: hinter functions interface
- *
- *********************************************************************/
 
-  static FT_Int  t2_compute_bias( FT_UInt  num_subrs )
-  {
-    FT_Int  result;
-    
-    if (num_subrs < 1240)
+    if ( num_subrs < 1240 )
       result = 107;
-    else if (num_subrs < 33900)
+    else if ( num_subrs < 33900 )
       result = 1131;
     else
       result = 32768;
-      
+
     return result;
   }
 
 
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    T2_Init_Decoder                                                    */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Initializes a given glyph decoder.                                 */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    decoder :: A pointer to the glyph builder to initialize.           */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    face    :: The current face object.                                */
+  /*                                                                       */
+  /*    size    :: The current size object.                                */
+  /*                                                                       */
+  /*    slot    :: The current glyph object.                               */
+  /*                                                                       */
   LOCAL_FUNC
   void  T2_Init_Decoder( T2_Decoder*  decoder,
                          TT_Face      face,
@@ -305,14 +340,15 @@
                          T2_GlyphSlot slot )
   {
     CFF_Font*  cff = (CFF_Font*)face->other;
-    
+
+
     /* clear everything */
-    MEM_Set( decoder, 0, sizeof(*decoder) );
+    MEM_Set( decoder, 0, sizeof ( *decoder ) );
 
-    /* initialise builder */
+    /* initialize builder */
     T2_Init_Builder( &decoder->builder, face, size, slot );
-    
-    /* initialise Type2 decoder */
+
+    /* initialize Type2 decoder */
     decoder->num_locals   = cff->num_local_subrs;
     decoder->num_globals  = cff->num_global_subrs;
     decoder->locals       = cff->local_subrs;
@@ -319,41 +355,43 @@
     decoder->globals      = cff->global_subrs;
     decoder->locals_bias  = t2_compute_bias( decoder->num_locals );
     decoder->globals_bias = t2_compute_bias( decoder->num_globals );
-    
+
     decoder->glyph_width   = cff->private_dict.default_width;
     decoder->nominal_width = cff->private_dict.nominal_width;
   }
 
 
-  /* check that there is enough room for "count" more points */
+  /* check that there is enough room for `count' more points */
   static
-  FT_Error  check_points( T2_Builder*  builder,
-                          FT_Int       count )
+  TT_Error  check_points( T2_Builder*  builder,
+                          TT_Int       count )
   {
     FT_Outline*  base    = &builder->base;
     FT_Outline*  outline = &builder->current;
 
-    if (!builder->load_points)
-      return FT_Err_Ok;
 
+    if ( !builder->load_points )
+      return T2_Err_Ok;
+
     count += base->n_points + outline->n_points;
 
     /* realloc points table if necessary */
     if ( count >= builder->max_points )
     {
-      FT_Error   error;
+      TT_Error   error;
       FT_Memory  memory    = builder->memory;
-      FT_Int     increment = outline->points - base->points;
-      FT_Int     current   = builder->max_points;
+      TT_Int     increment = outline->points - base->points;
+      TT_Int     current   = builder->max_points;
 
+
       while ( builder->max_points < count )
         builder->max_points += 8;
 
       if ( REALLOC_ARRAY( base->points, current,
-                          builder->max_points, FT_Vector )  ||
+                          builder->max_points, TT_Vector )  ||
 
            REALLOC_ARRAY( base->tags, current,
-                          builder->max_points, FT_Byte )    )
+                          builder->max_points, TT_Byte )    )
       {
         builder->error = error;
         return error;
@@ -362,7 +400,8 @@
       outline->points = base->points + increment;
       outline->tags  = base->tags  + increment;
     }
-    return FT_Err_Ok;
+
+    return T2_Err_Ok;
   }
 
 
@@ -369,20 +408,22 @@
   /* add a new point, do not check room */
   static
   void  add_point( T2_Builder*  builder,
-                   FT_Pos       x,
-                   FT_Pos       y,
-                   FT_Byte      flag )
+                   TT_Pos       x,
+                   TT_Pos       y,
+                   TT_Byte      flag )
   {
     FT_Outline*  outline = &builder->current;
 
-    if (builder->load_points)
+
+    if ( builder->load_points )
     {
-      FT_Vector*  point   = outline->points + outline->n_points;
-      FT_Byte*    control = (FT_Byte*)outline->tags + outline->n_points;
+      TT_Vector*  point   = outline->points + outline->n_points;
+      TT_Byte*    control = (FT_Byte*)outline->tags + outline->n_points;
 
+
       point->x = x >> 16;
       point->y = y >> 16;
-      *control = ( flag ? FT_Curve_Tag_On : FT_Curve_Tag_Cubic );
+      *control = flag ? FT_Curve_Tag_On : FT_Curve_Tag_Cubic;
 
       builder->last = *point;
     }
@@ -393,14 +434,15 @@
 
   /* check room for a new on-curve point, then add it */
   static
-  FT_Error  add_point1( T2_Builder*  builder,
-                        FT_Pos       x,
-                        FT_Pos       y )
+  TT_Error  add_point1( T2_Builder*  builder,
+                        TT_Pos       x,
+                        TT_Pos       y )
   {
-    FT_Error  error;
+    TT_Error  error;
 
-    error = check_points(builder,1);
-    if (!error)
+
+    error = check_points( builder, 1 );
+    if ( !error )
       add_point( builder, x, y, 1 );
 
     return error;
@@ -409,15 +451,16 @@
 
   /* check room for a new contour, then add it */
   static
-  FT_Error  add_contour( T2_Builder*  builder )
+  TT_Error  add_contour( T2_Builder*  builder )
   {
     FT_Outline*  base    = &builder->base;
     FT_Outline*  outline = &builder->current;
 
-    if (!builder->load_points)
+
+    if ( !builder->load_points )
     {
       outline->n_contours++;
-      return FT_Err_Ok;
+      return T2_Err_Ok;
     }
 
     /* realloc contours array if necessary */
@@ -424,15 +467,16 @@
     if ( base->n_contours + outline->n_contours >= builder->max_contours &&
          builder->load_points )
     {
-      FT_Error  error;
-      FT_Memory memory = builder->memory;
-      FT_Int    increment = outline->contours - base->contours;
-      FT_Int    current   = builder->max_contours;
+      TT_Error  error;
+      FT_Memory memory    = builder->memory;
+      TT_Int    increment = outline->contours - base->contours;
+      TT_Int    current   = builder->max_contours;
 
+
       builder->max_contours += 4;
 
       if ( REALLOC_ARRAY( base->contours,
-                          current, builder->max_contours, FT_Short ) )
+                          current, builder->max_contours, TT_Short ) )
       {
         builder->error = error;
         return error;
@@ -441,28 +485,33 @@
       outline->contours = base->contours + increment;
     }
 
-    if (outline->n_contours > 0)
-      outline->contours[ outline->n_contours-1 ] = outline->n_points-1;
+    if ( outline->n_contours > 0 )
+      outline->contours[outline->n_contours - 1] = outline->n_points - 1;
 
     outline->n_contours++;
-    return FT_Err_Ok;
+
+    return T2_Err_Ok;
   }
 
+
   /* if a path was begun, add its first on-curve point */
   static
-  FT_Error  start_point( T2_Builder*  builder,
-                         FT_Pos       x,
-                         FT_Pos       y )
+  TT_Error  start_point( T2_Builder*  builder,
+                         TT_Pos       x,
+                         TT_Pos       y )
   {
-    /* test wether we're building a new contour */
-    if (!builder->path_begun)
+    /* test whether we are building a new contour */
+    if ( !builder->path_begun )
     {
-      FT_Error  error;
+      TT_Error  error;
 
+
       builder->path_begun = 1;
       error = add_contour( builder );
-      if (error) return error;
+      if ( error )
+        return error;
     }
+
     return add_point1( builder, x, y );
   }
 
@@ -473,77 +522,77 @@
   {
     FT_Outline*  outline = &builder->current;
 
+
     if ( outline->n_contours > 0 )
-      outline->contours[outline->n_contours-1] = outline->n_points-1;
+      outline->contours[outline->n_contours - 1] = outline->n_points - 1;
   }
 
 
-/*********************************************************************
- *
- * <Function>
- *    T2_Parse_CharStrings
- *
- * <Description>
- *    Parses a given Type 1 charstrings program
- *
- * <Input>
- *    decoder          :: current Type 1 decoder
- *    charstring_base  :: base of the charstring stream
- *    charstring_len   :: length in bytes of the charstring stream
- *    num_subrs        :: number of sub-routines
- *    subrs_base       :: array of sub-routines addresses
- *    subrs_len        :: array of sub-routines lengths
- *
- * <Return>
- *    Error code. 0 means success.
- *
- *********************************************************************/
-
 #define USE_ARGS(n)  top -= n; if (top < decoder->stack) goto Stack_Underflow
 
 
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    T2_Parse_CharStrings                                               */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Parses a given Type 2 charstrings program.                         */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    decoder          :: The current Type 1 decoder.                    */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    charstring_base  :: The base of the charstring stream.             */
+  /*                                                                       */
+  /*    charstring_len   :: The length in bytes of the charstring stream.  */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    TrueType error code.  0 means success.                             */
+  /*                                                                       */
   LOCAL_FUNC
-  FT_Error   T2_Parse_CharStrings( T2_Decoder*  decoder,
-                                   FT_Byte*     charstring_base,
-                                   FT_Int       charstring_len )
+  TT_Error  T2_Parse_CharStrings( T2_Decoder*  decoder,
+                                  TT_Byte*     charstring_base,
+                                  TT_Int       charstring_len )
   {
-    FT_Error            error;
+    TT_Error            error;
     T2_Decoder_Zone*    zone;
-    FT_Byte*            ip;
-    FT_Byte*            limit;
+    TT_Byte*            ip;
+    TT_Byte*            limit;
     T2_Builder*         builder = &decoder->builder;
     FT_Outline*         outline;
-    FT_Pos              x, y;
-    FT_Fixed            seed;
-    FT_Fixed*           stack;
+    TT_Pos              x, y;
+    TT_Fixed            seed;
+    TT_Fixed*           stack;
 
+
     /* set default width */
-    decoder->num_hints   = 0;
-    decoder->read_width  = 1;
-    
+    decoder->num_hints  = 0;
+    decoder->read_width = 1;
+
     /* compute random seed from stack address of parameter */
-    seed                 = (FT_Fixed)(char*)&seed ^
-                           (FT_Fixed)(char*)&decoder ^
-                           (FT_Fixed)(char*)&charstring_base;
-    seed = (seed ^ (seed >> 10) ^ (seed >> 20)) & 0xFFFF;
-    if (seed == 0)
+    seed = (FT_Fixed)(char*)&seed           ^
+           (FT_Fixed)(char*)&decoder        ^
+           (FT_Fixed)(char*)&charstring_base;
+    seed = ( seed ^ ( seed >> 10 ) ^ ( seed >> 20 ) ) & 0xFFFF;
+    if ( seed == 0 )
       seed = 0x7384;
-    
-    /* First of all, initialise the decoder */
+
+    /* First of all, initialize the decoder */
     decoder->top  = decoder->stack;
     decoder->zone = decoder->zones;
     zone          = decoder->zones;
     stack         = decoder->top;
 
-    builder->path_begun  = 0;
+    builder->path_begun = 0;
 
     zone->base           = charstring_base;
     limit = zone->limit  = charstring_base + charstring_len;
     ip    = zone->cursor = zone->base;
 
-    error   = FT_Err_Ok;
+    error   = T2_Err_Ok;
     outline = &builder->current;
-                                  
+
     x = builder->pos_x;
     y = builder->pos_y;
 
@@ -551,9 +600,10 @@
     while ( ip < limit )
     {
       T2_Operator  op;
-      FT_Byte      v;
-      FT_Byte      count;
+      TT_Byte      v;
+      TT_Byte      count;
 
+
       /********************************************************************/
       /*                                                                  */
       /* Decode operator or operand                                       */
@@ -560,16 +610,18 @@
       /*                                                                  */
       /*                                                                  */
       v = *ip++;
-      if (v >= 32 || v == 28)
+      if ( v >= 32 || v == 28 )
       {
-        FT_Int  shift = 16;
-        FT_Long val;
-        
+        TT_Int  shift = 16;
+        TT_Long val;
+
+
         /* this is an operand, push it on the stack */
-        if ( v == 28)
+        if ( v == 28 )
         {
-          if ( ip+1 >= limit ) goto Syntax_Error;
-          val = (FT_Short)(((FT_Int)ip[0] << 8) + ip[1]);
+          if ( ip + 1 >= limit )
+            goto Syntax_Error;
+          val = (FT_Short)( ( (FT_Int)ip[0] << 8 ) + ip[1] );
           ip += 2;
         }
         else if ( v < 247 )
@@ -576,111 +628,217 @@
           val = v - 139;
         else if ( v < 251 )
         {
-          if ( ip >= limit ) goto Syntax_Error;
-          val = (v-247)*256 + *ip++ + 108;
+          if ( ip >= limit )
+            goto Syntax_Error;
+          val = (v - 247) * 256 + *ip++ + 108;
         }
         else if ( v < 255 )
         {
-          if ( ip >= limit ) goto Syntax_Error;
-          val = -((v-251)*256) - *ip++ - 108;
+          if ( ip >= limit )
+            goto Syntax_Error;
+          val = -( v - 251 ) * 256 - *ip++ - 108;
         }
         else
         {
-          if ( ip + 3 >= limit ) goto Syntax_Error;
-          val = ((FT_Long)ip[0] << 24) |
-                ((FT_Long)ip[1] << 16) |
-                ((FT_Long)ip[2] <<  8) | ip[3];
+          if ( ip + 3 >= limit )
+            goto Syntax_Error;
+          val = ( (FT_Long)ip[0] << 24 ) |
+                ( (FT_Long)ip[1] << 16 ) |
+                ( (FT_Long)ip[2] <<  8 ) | ip[3];
           ip    += 4;
-          shift = 0;
+          shift  = 0;
         }
-        if (decoder->top - stack >= T2_MAX_OPERANDS)
+        if ( decoder->top - stack >= T2_MAX_OPERANDS )
           goto Stack_Overflow;
-          
-        val <<= shift;
-        *decoder->top ++ = val;
-        
-        #ifdef FT_DEBUG_LEVEL_TRACE
-        if (!(val & 0xFFFF))
-          FT_TRACE4(( " %d", (FT_Int)(val >> 16) ));
+
+        val           <<= shift;
+        *decoder->top++ = val;
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+        if ( !( val & 0xFFFF ) )
+          FT_TRACE4(( " %d", (FT_Int)( val >> 16 ) ));
         else
           FT_TRACE4(( " %.2f", val/65536.0 ));
-        #endif
+#endif
+
       }
       else
       {
-        FT_Fixed*  args    = decoder->top;
-        FT_Int     num_args = args - decoder->stack;
-        FT_Int     req_args;
-        
+        TT_Fixed*  args     = decoder->top;
+        TT_Int     num_args = args - decoder->stack;
+        TT_Int     req_args;
+
+
         /* find operator */
         op = t2_op_unknown;
-        switch (v)
+        switch ( v )
         {
-          case 1:  op = t2_op_hstem; break;
-          case 3:  op = t2_op_vstem; break;
-          case 4:  op = t2_op_vmoveto; break;
-          case 5:  op = t2_op_rlineto; break;
-          case 6:  op = t2_op_hlineto; break;
-          case 7:  op = t2_op_vlineto; break;
-          case 8:  op = t2_op_rrcurveto; break;
-          case 10: op = t2_op_callsubr; break;
-          case 11: op = t2_op_return;   break;
-          case 12:
+        case 1:
+          op = t2_op_hstem;
+          break;
+        case 3:
+          op = t2_op_vstem;
+          break;
+        case 4:
+          op = t2_op_vmoveto;
+          break;
+        case 5:
+          op = t2_op_rlineto;
+          break;
+        case 6:
+          op = t2_op_hlineto;
+          break;
+        case 7:
+          op = t2_op_vlineto;
+          break;
+        case 8:
+          op = t2_op_rrcurveto;
+          break;
+        case 10:
+          op = t2_op_callsubr;
+          break;
+        case 11:
+          op = t2_op_return;
+          break;
+        case 12:
+          {
+            if ( ip >= limit )
+              goto Syntax_Error;
+            v = *ip++;
+
+            switch ( v )
             {
-              if (ip >= limit) goto Syntax_Error;
-              v = *ip++;
-              switch (v)
-              {
-                case 3:  op = t2_op_and; break;
-                case 4:  op = t2_op_or; break;
-                case 5:  op = t2_op_not; break;
-                case 8:  op = t2_op_store; break;
-                case 9:  op = t2_op_abs; break;
-                case 10: op = t2_op_add; break;
-                case 11: op = t2_op_sub; break;
-                case 12: op = t2_op_div; break;
-                case 13: op = t2_op_load; break;
-                case 14: op = t2_op_neg; break;
-                case 15: op = t2_op_eq; break;
-                case 18: op = t2_op_drop; break;
-                case 20: op = t2_op_put; break;
-                case 21: op = t2_op_get; break;
-                case 22: op = t2_op_ifelse; break;
-                case 23: op = t2_op_random; break;
-                case 24: op = t2_op_mul; break;
-                case 26: op = t2_op_sqrt; break;
-                case 27: op = t2_op_dup; break;
-                case 28: op = t2_op_exch; break;
-                case 29: op = t2_op_index; break;
-                case 30: op = t2_op_roll; break;
-                case 34: op = t2_op_hflex; break;
-                case 35: op = t2_op_flex; break;
-                case 36: op = t2_op_hflex1; break;
-                case 37: op = t2_op_flex1; break;
-              default:
-                /* decrement ip for syntax error message */
-                ip--;
-              }
+            case 3:
+              op = t2_op_and;
+              break;
+            case 4:
+              op = t2_op_or;
+              break;
+            case 5:
+              op = t2_op_not;
+              break;
+            case 8:
+              op = t2_op_store;
+              break;
+            case 9:
+              op = t2_op_abs;
+              break;
+            case 10:
+              op = t2_op_add;
+              break;
+            case 11:
+              op = t2_op_sub;
+              break;
+            case 12:
+              op = t2_op_div;
+              break;
+            case 13:
+              op = t2_op_load;
+              break;
+            case 14:
+              op = t2_op_neg;
+              break;
+            case 15:
+              op = t2_op_eq;
+              break;
+            case 18:
+              op = t2_op_drop;
+              break;
+            case 20:
+              op = t2_op_put;
+              break;
+            case 21:
+              op = t2_op_get;
+              break;
+            case 22:
+              op = t2_op_ifelse;
+              break;
+            case 23:
+              op = t2_op_random;
+              break;
+            case 24:
+              op = t2_op_mul;
+              break;
+            case 26:
+              op = t2_op_sqrt;
+              break;
+            case 27:
+              op = t2_op_dup;
+              break;
+            case 28:
+              op = t2_op_exch;
+              break;
+            case 29:
+              op = t2_op_index;
+              break;
+            case 30:
+              op = t2_op_roll;
+              break;
+            case 34:
+              op = t2_op_hflex;
+              break;
+            case 35:
+              op = t2_op_flex;
+              break;
+            case 36:
+              op = t2_op_hflex1;
+              break;
+            case 37:
+              op = t2_op_flex1;
+              break;
+            default:
+              /* decrement ip for syntax error message */
+              ip--;
             }
-            break;
-            
-          case 14: op = t2_op_endchar;   break;
-          case 16: op = t2_op_blend;     break;
-          case 18: op = t2_op_hstemhm; break;
-          case 19: op = t2_op_hintmask; break;
-          case 20: op = t2_op_cntrmask; break;
-          case 21: op = t2_op_rmoveto; break;
-          case 22: op = t2_op_hmoveto; break;
-          case 23: op = t2_op_vstemhm; break;
-          case 24: op = t2_op_rcurveline; break;
-          case 25: op = t2_op_rlinecurve; break;
-          case 26: op = t2_op_vvcurveto; break;
-          case 27: op = t2_op_hhcurveto; break;
-          case 29: op = t2_op_callgsubr; break;
-          case 30: op = t2_op_vhcurveto; break;
-          case 31: op = t2_op_hvcurveto; break;
-          default:
-            ;
+          }
+          break;
+        case 14:
+          op = t2_op_endchar;
+          break;
+        case 16:
+          op = t2_op_blend;
+          break;
+        case 18:
+          op = t2_op_hstemhm;
+          break;
+        case 19:
+          op = t2_op_hintmask;
+          break;
+        case 20:
+          op = t2_op_cntrmask;
+          break;
+        case 21:
+          op = t2_op_rmoveto;
+          break;
+        case 22:
+          op = t2_op_hmoveto;
+          break;
+        case 23:
+          op = t2_op_vstemhm;
+          break;
+        case 24:
+          op = t2_op_rcurveline;
+          break;
+        case 25:
+          op = t2_op_rlinecurve;
+          break;
+        case 26:
+          op = t2_op_vvcurveto;
+          break;
+        case 27:
+          op = t2_op_hhcurveto;
+          break;
+        case 29:
+          op = t2_op_callgsubr;
+          break;
+        case 30:
+          op = t2_op_vhcurveto;
+          break;
+        case 31:
+          op = t2_op_hvcurveto;
+          break;
+        default:
+          ;
         }
         if ( op == t2_op_unknown )
           goto Syntax_Error;
@@ -687,12 +845,13 @@
 
         /* check arguments */
         req_args = count = t2_argument_counts[op];
-        if (req_args & T2_COUNT_CHECK_WIDTH)
+        if ( req_args & T2_COUNT_CHECK_WIDTH )
         {
           args = stack;
           if ( decoder->read_width )
           {
-            decoder->glyph_width = decoder->nominal_width + (stack[0] >> 16);
+            decoder->glyph_width = decoder->nominal_width +
+                                     ( stack[0] >> 16 );
             decoder->read_width  = 0;
             num_args--;
             args++;
@@ -699,661 +858,713 @@
           }
           req_args = 0;
         }
-        
+
         req_args &= 15;
-        if (num_args < req_args) goto Stack_Underflow;
+        if ( num_args < req_args )
+          goto Stack_Underflow;
         args     -= req_args;
         num_args -= req_args;
-        
-        switch (op)
+
+        switch ( op )
         {
-          case t2_op_hstem:
-          case t2_op_vstem:
-          case t2_op_hstemhm:
-          case t2_op_vstemhm:
-            {
-              /* if the number of arguments is no even, the first one  */
-              /* is simply the glyph width.. encoded as the difference */
-              /* to nominalWidthX                                      */
-              FT_TRACE4(( op == t2_op_hstem ? " hstem" :
-                          op == t2_op_vstem ? " vstem" :
-                          op == t2_op_hstemhm ? " hstemhm" :
-                          " vstemhm" ));
-              decoder->num_hints += num_args/2;
-              args = stack;
-            }
-            break;
-            
-          case t2_op_hintmask:
-          case t2_op_cntrmask:
-            {
-              FT_TRACE4(( op == t2_op_hintmask ? " hintmask" : " cntrmask" ));
-              decoder->num_hints += num_args/2;
-              ip += (decoder->num_hints+7) >> 3;
-              if (ip >= limit) goto Syntax_Error;
-              args = stack;
-            }
-            break;
-            
-          case t2_op_rmoveto:
-            {
-              FT_TRACE4(( " rmoveto" ));
-              close_contour( builder );
-              builder->path_begun = 0;
-              x   += args[0];
-              y   += args[1];
-              args = stack;
-            }
-            break;
-          
-          case t2_op_vmoveto:
-            {
-              FT_TRACE4(( " vmoveto" ));
-              close_contour( builder );
-              builder->path_begun = 0;
-              y   += args[0];
-              args = stack;
-            }
-            break;
-            
-          case t2_op_hmoveto:
-            {
-              FT_TRACE4(( " vmoveto" ));
-              close_contour( builder );
-              builder->path_begun = 0;
-              x   += args[0];
-              args = stack;
-            }
-            break;
-            
-          case t2_op_rlineto:
-            {
-              FT_TRACE4(( " rlineto" ));
+        case t2_op_hstem:
+        case t2_op_vstem:
+        case t2_op_hstemhm:
+        case t2_op_vstemhm:
+          /* if the number of arguments is no even, the first one  */
+          /* is simply the glyph width.. encoded as the difference */
+          /* to nominalWidthX                                      */
+          FT_TRACE4(( op == t2_op_hstem   ? " hstem"   :
+                      op == t2_op_vstem   ? " vstem"   :
+                      op == t2_op_hstemhm ? " hstemhm" :
+                                            " vstemhm" ));
+          decoder->num_hints += num_args / 2;
+          args = stack;
+          break;
 
-              if ( start_point ( builder, x, y )       ||
-                   check_points( builder, num_args/2 ) ) goto Memory_Error;
+        case t2_op_hintmask:
+        case t2_op_cntrmask:
+          FT_TRACE4(( op == t2_op_hintmask ? " hintmask" :
+                                             " cntrmask" ));
 
-              if ( num_args < 2 || num_args & 1 ) goto Stack_Underflow;
-              args = stack;
-              while ( args < decoder->top )
-              {
-                x += args[0];
-                y += args[1];
-                add_point( builder, x, y, 1 );
-                args += 2;
-              }
-              args = stack;
-            }
-            break;
+          decoder->num_hints += num_args / 2;
+          ip += ( decoder->num_hints + 7 ) >> 3;
+          if ( ip >= limit )
+            goto Syntax_Error;
+          args = stack;
+          break;
 
-          case t2_op_hlineto:
-          case t2_op_vlineto:
-            {
-              FT_Int  phase = ( op == t2_op_hlineto );
+        case t2_op_rmoveto:
+          FT_TRACE4(( " rmoveto" ));
 
-              FT_TRACE4(( op == t2_op_hlineto ? " hlineto" : " vlineto" ));
+          close_contour( builder );
+          builder->path_begun = 0;
+          x   += args[0];
+          y   += args[1];
+          args = stack;
+          break;
 
-              if ( start_point ( builder, x, y )     ||
-                   check_points( builder, num_args ) ) goto Memory_Error;
+        case t2_op_vmoveto:
+          FT_TRACE4(( " vmoveto" ));
 
-              args = stack;
-              while (args < decoder->top )
-              {
-                if (phase) x += args[0];
-                      else y += args[0];
-                      
-                if (add_point1( builder, x, y )) goto Memory_Error;
-                args++;
-                phase ^= 1;
-              }
-              args = stack;
-            }
-            break;
+          close_contour( builder );
+          builder->path_begun = 0;
+          y   += args[0];
+          args = stack;
+          break;
 
-          case t2_op_rrcurveto:
-            {
-              FT_TRACE4(( " rrcurveto" ));
+        case t2_op_hmoveto:
+          FT_TRACE4(( " vmoveto" ));
 
-              /* check number of arguments, must be a multiple of 6 */
-              if (num_args % 6 != 0) goto Stack_Underflow;
-              
-              if ( start_point ( builder, x, y )       ||
-                   check_points( builder, num_args/2 ) ) goto Memory_Error;
-                   
-              args = stack;
-              while (args < decoder->top)
-              {
+          close_contour( builder );
+          builder->path_begun = 0;
+          x   += args[0];
+          args = stack;
+          break;
+
+        case t2_op_rlineto:
+          FT_TRACE4(( " rlineto" ));
+
+          if ( start_point ( builder, x, y )         ||
+               check_points( builder, num_args / 2 ) )
+            goto Memory_Error;
+
+          if ( num_args < 2 || num_args & 1 )
+            goto Stack_Underflow;
+
+          args = stack;
+          while ( args < decoder->top )
+          {
+            x += args[0];
+            y += args[1];
+            add_point( builder, x, y, 1 );
+            args += 2;
+          }
+          args = stack;
+          break;
+
+        case t2_op_hlineto:
+        case t2_op_vlineto:
+          {
+            TT_Int  phase = ( op == t2_op_hlineto );
+
+
+            FT_TRACE4(( op == t2_op_hlineto ? " hlineto" :
+                                              " vlineto" ));
+
+            if ( start_point ( builder, x, y )     ||
+                 check_points( builder, num_args ) )
+              goto Memory_Error;
+
+            args = stack;
+            while (args < decoder->top )
+            {
+              if ( phase )
                 x += args[0];
-                y += args[1];
-                add_point( builder, x, y, 0 );
-                x += args[2];
-                y += args[3];
-                add_point( builder, x, y, 0 );
-                x += args[4];
-                y += args[5];
-                add_point( builder, x, y, 1 );
-                args += 6;
-              }
-              args = stack;
+              else
+                y += args[0];
+
+              if ( add_point1( builder, x, y ) )
+                goto Memory_Error;
+
+              args++;
+              phase ^= 1;
             }
-            break;
-            
-          case t2_op_vvcurveto:
+            args = stack;
+          }
+          break;
+
+        case t2_op_rrcurveto:
+          FT_TRACE4(( " rrcurveto" ));
+
+          /* check number of arguments, must be a multiple of 6 */
+          if ( num_args % 6 != 0 )
+            goto Stack_Underflow;
+
+          if ( start_point ( builder, x, y )         ||
+               check_points( builder, num_args / 2 ) )
+            goto Memory_Error;
+
+          args = stack;
+          while ( args < decoder->top )
+          {
+            x += args[0];
+            y += args[1];
+            add_point( builder, x, y, 0 );
+            x += args[2];
+            y += args[3];
+            add_point( builder, x, y, 0 );
+            x += args[4];
+            y += args[5];
+            add_point( builder, x, y, 1 );
+            args += 6;
+          }
+          args = stack;
+          break;
+
+        case t2_op_vvcurveto:
+          FT_TRACE4(( " vvcurveto" ));
+
+          if ( start_point ( builder, x, y ) )
+            goto Memory_Error;
+
+          args = stack;
+          if ( num_args & 1 )
+          {
+            x += args[0];
+            args++;
+            num_args--;
+          }
+
+          if ( num_args % 4 != 0 )
+            goto Stack_Underflow;
+
+          if ( check_points( builder, 3 * ( num_args / 4 ) ) )
+            goto Memory_Error;
+
+          while ( args < decoder->top )
+          {
+            y += args[0];
+            add_point( builder, x, y, 0 );
+            x += args[1];
+            y += args[2];
+            add_point( builder, x, y, 0 );
+            y += args[3];
+            add_point( builder, x, y, 1 );
+            args += 4;
+          }
+          args = stack;
+          break;
+
+        case t2_op_hhcurveto:
+          FT_TRACE4(( " hhcurveto" ));
+
+          if ( start_point ( builder, x, y ) )
+            goto Memory_Error;
+
+          args = stack;
+          if ( num_args & 1 )
+          {
+            y += args[0];
+            args++;
+            num_args--;
+          }
+
+          if ( num_args % 4 != 0 )
+            goto Stack_Underflow;
+
+          if ( check_points( builder, 3 * ( num_args / 4 ) ) )
+            goto Memory_Error;
+
+          while ( args < decoder->top )
+          {
+            x += args[0];
+            add_point( builder, x, y, 0 );
+            x += args[1];
+            y += args[2];
+            add_point( builder, x, y, 0 );
+            x += args[3];
+            add_point( builder, x, y, 1 );
+            args += 4;
+          }
+          args = stack;
+          break;
+
+        case t2_op_vhcurveto:
+        case t2_op_hvcurveto:
+          {
+            TT_Int  phase;
+
+
+            FT_TRACE4(( op == t2_op_vhcurveto ? " vhcurveto" :
+                                                " hvcurveto" ));
+
+            if ( start_point ( builder, x, y ) )
+              goto Memory_Error;
+
+            args = stack;
+            if (num_args < 4 || ( num_args % 4 ) > 1 )
+              goto Stack_Underflow;
+
+            if ( check_points( builder, ( num_args / 4 ) * 3 ) )
+              goto Stack_Underflow;
+
+            phase = ( op == t2_op_hvcurveto );
+            while ( num_args >= 4 )
             {
-              FT_TRACE4(( " vvcurveto" ));
-              
-              if ( start_point ( builder, x, y ) ) goto Memory_Error;
-              
-              args = stack;
-              if (num_args & 1)
+              num_args -= 4;
+              if ( phase )
               {
                 x += args[0];
-                args++;
-                num_args--;
-              }
-              if (num_args % 4 != 0) goto Stack_Underflow;
-              if (check_points( builder, 3*(num_args/4) )) goto Memory_Error;
-
-              while (args < decoder->top)
-              {
-                y += args[0];
                 add_point( builder, x, y, 0 );
                 x += args[1];
                 y += args[2];
                 add_point( builder, x, y, 0 );
                 y += args[3];
+                if ( num_args == 1 )
+                  x += args[4];
                 add_point( builder, x, y, 1 );
-                args += 4;
               }
-              args = stack;
-            }
-            break;
-
-          case t2_op_hhcurveto:
-            {
-              FT_TRACE4(( " hhcurveto" ));
-              
-              if ( start_point ( builder, x, y ) ) goto Memory_Error;
-              args = stack;
-              if (num_args & 1)
+              else
               {
                 y += args[0];
-                args++;
-                num_args--;
-              }
-              if (num_args % 4 != 0) goto Stack_Underflow;
-              if (check_points( builder, 3*(num_args/4) )) goto Memory_Error;
-
-              while (args < decoder->top)
-              {
-                x += args[0];
                 add_point( builder, x, y, 0 );
                 x += args[1];
                 y += args[2];
                 add_point( builder, x, y, 0 );
                 x += args[3];
+                if ( num_args == 1 )
+                  y += args[4];
                 add_point( builder, x, y, 1 );
-                args += 4;
               }
-              args = stack;
+              args  += 4;
+              phase ^= 1;
             }
-            break;
+            args = stack;
+          }
+          break;
 
-          case t2_op_vhcurveto:
-          case t2_op_hvcurveto:
-            {
-              FT_Int  phase;
-              
-              FT_TRACE4(( op == t2_op_vhcurveto ? " vhcurveto" : " hvcurveto" ));
-              
-              if ( start_point ( builder, x, y ) ) goto Memory_Error;
-              args = stack;
-              if (num_args < 4 || (num_args % 4) > 1 ) goto Stack_Underflow;
-              if (check_points( builder, (num_args/4)*3 )) goto Stack_Underflow;
-              phase = ( op == t2_op_hvcurveto );
-              while (num_args >= 4)
-              {
-                num_args -= 4;
-                if (phase)
-                {
-                  x += args[0];
-                  add_point( builder, x, y, 0 );
-                  x += args[1];
-                  y += args[2];
-                  add_point( builder, x, y, 0 );
-                  y += args[3];
-                  if (num_args == 1)
-                    x += args[4];
-                  add_point( builder, x, y, 1 );
-                }
-                else
-                {
-                  y += args[0];
-                  add_point( builder, x, y, 0 );
-                  x += args[1];
-                  y += args[2];
-                  add_point( builder, x, y, 0 );
-                  x += args[3];
-                  if (num_args == 1)
-                    y += args[4];
-                  add_point( builder, x, y, 1 );
-                }
-                args     += 4;
-                phase    ^= 1;
-              }
-              args = stack;
-            }
-            break;
+        case t2_op_rlinecurve:
+        case t2_op_rcurveline:
+          {
+            TT_Int  mod6 = num_args % 6;
 
-          case t2_op_rlinecurve:
-          case t2_op_rcurveline:
-            {
-              FT_Int  mod6 = num_args % 6;
-              
-              FT_TRACE4(( op == t2_op_rcurveline ? " rcurveline" :
-                                                   " rlinecurve" ));
-              
-              if ( num_args < 8 || (mod6 != 0 && mod6 != 2) )
-                goto Stack_Underflow;
 
-              if ( start_point ( builder, x, y ) ||
-                   check_points( builder, (num_args/6)*3 + mod6/2 ) )
-                goto Memory_Error;
-              
-              args = stack;
-              if (op == t2_op_rlinecurve && mod6)
-              {
-                x += args[0];
-                y += args[1];
-                add_point( builder, x, y, 1 );
-                args     += 2;
-                num_args -= 2;
-              }
-              while (num_args >= 6)
-              {
-                x += args[0];
-                y += args[1];
-                add_point( builder, x, y, 0 );
-                x += args[2];
-                y += args[3];
-                add_point( builder, x, y, 0 );
-                x += args[4];
-                y += args[5];
-                add_point( builder, x, y, 1 );
-                args     += 6;
-                num_args -= 6;
-              }
-              if ( op == t2_op_rcurveline && num_args)
-              {
-                x += args[0];
-                y += args[1];
-                add_point( builder, x, y, 1 );
-              }
-              args = stack;
-            }
-            break;
-            
-          case t2_op_endchar:
+            FT_TRACE4(( op == t2_op_rcurveline ? " rcurveline" :
+                                                 " rlinecurve" ));
+
+            if ( num_args < 8 || ( mod6 != 0 && mod6 != 2 ) )
+              goto Stack_Underflow;
+
+            if ( start_point ( builder, x, y ) ||
+                 check_points( builder, ( num_args / 6 ) * 3 + mod6 / 2 ) )
+              goto Memory_Error;
+
+            args = stack;
+            if ( op == t2_op_rlinecurve && mod6 )
             {
-              FT_TRACE4(( " endchar" ));
-              close_contour( builder );
-  
-              /* add current outline to the glyph slot */
-              builder->base.n_points   += builder->current.n_points;
-              builder->base.n_contours += builder->current.n_contours;
-  
-              /* return now !! */
-              FT_TRACE4(( "\n\n" ));
-              return FT_Err_Ok;
+              x += args[0];
+              y += args[1];
+              add_point( builder, x, y, 1 );
+              args     += 2;
+              num_args -= 2;
             }
-            
-          case t2_op_abs:
+
+            while ( num_args >= 6 )
             {
-              FT_TRACE4(( " abs" ));
-              if (args[0] < 0)
-                args[0] = -args[0];
-              args++;
+              x += args[0];
+              y += args[1];
+              add_point( builder, x, y, 0 );
+              x += args[2];
+              y += args[3];
+              add_point( builder, x, y, 0 );
+              x += args[4];
+              y += args[5];
+              add_point( builder, x, y, 1 );
+              args     += 6;
+              num_args -= 6;
             }
-            break;
-            
-          case t2_op_add:
+
+            if ( op == t2_op_rcurveline && num_args )
             {
-              FT_TRACE4(( " add" ));
-              args[0] += args[1];
-              args++;
+              x += args[0];
+              y += args[1];
+              add_point( builder, x, y, 1 );
             }
-            break;
-            
-          case t2_op_sub:
+            args = stack;
+          }
+          break;
+
+        case t2_op_endchar:
+          FT_TRACE4(( " endchar" ));
+
+          close_contour( builder );
+
+          /* add current outline to the glyph slot */
+          builder->base.n_points   += builder->current.n_points;
+          builder->base.n_contours += builder->current.n_contours;
+
+          /* return now! */
+          FT_TRACE4(( "\n\n" ));
+          return T2_Err_Ok;
+
+        case t2_op_abs:
+          FT_TRACE4(( " abs" ));
+
+          if ( args[0] < 0 )
+            args[0] = -args[0];
+          args++;
+          break;
+
+        case t2_op_add:
+          FT_TRACE4(( " add" ));
+
+          args[0] += args[1];
+          args++;
+          break;
+
+        case t2_op_sub:
+          FT_TRACE4(( " sub" ));
+
+          args[0] -= args[1];
+          args++;
+          break;
+
+        case t2_op_div:
+          FT_TRACE4(( " div" ));
+
+          args[0] = FT_DivFix( args[0], args[1] );
+          args++;
+          break;
+
+        case t2_op_neg:
+          FT_TRACE4(( " neg" ));
+
+          args[0] = -args[0];
+          args++;
+          break;
+
+        case t2_op_random:
+          {
+            TT_Fixed  rand;
+
+
+            FT_TRACE4(( " rand" ));
+
+            rand = seed;
+            if ( rand >= 0x8000 )
+              rand++;
+
+            args[0] = rand;
+            seed    = FT_MulFix( seed, 0x10000L - seed );
+            if ( seed == 0 )
+              seed += 0x2873;
+            args++;
+          }
+          break;
+
+        case t2_op_mul:
+          FT_TRACE4(( " mul" ));
+
+          args[0] = FT_MulFix( args[0], args[1] );
+          args++;
+          break;
+
+        case t2_op_sqrt:
+          FT_TRACE4(( " sqrt" ));
+
+          if ( args[0] > 0 )
+          {
+            TT_Int    count = 9;
+            TT_Fixed  root  = args[0];
+            TT_Fixed  new_root;
+
+
+            for (;;)
             {
-              FT_TRACE4(( " sub" ));
-              args[0] -= args[1];
-              args++;
+              new_root = ( root + FT_DivFix(args[0],root) + 1 ) >> 1;
+              if ( new_root == root || count <= 0 )
+                break;
+              root = new_root;
             }
-            break;
-          
-          case t2_op_div:
+            args[0] = new_root;
+          }
+          else
+            args[0] = 0;
+          args++;
+          break;
+
+        case t2_op_drop:
+          /* nothing */
+          FT_TRACE4(( " drop" ));
+          break;
+
+        case t2_op_exch:
+          {
+            TT_Fixed  tmp;
+
+
+            FT_TRACE4(( " exch" ));
+
+            tmp     = args[0];
+            args[0] = args[1];
+            args[1] = tmp;
+            args   += 2;
+          }
+          break;
+
+        case t2_op_index:
+          {
+            TT_Int  index = args[0] >> 16;
+
+
+            FT_TRACE4(( " index" ));
+
+            if ( index < 0 )
+              index = 0;
+            else if ( index > num_args - 2 )
+              index = num_args - 2;
+            args[0] = args[-( index + 1 )];
+            args++;
+          }
+          break;
+
+        case t2_op_roll:
+          {
+            TT_Int count = (FT_Int)( args[0] >> 16 );
+            TT_Int index = (FT_Int)( args[1] >> 16 );
+
+
+            FT_TRACE4(( " roll" ));
+
+            if ( count <= 0 )
+              count = 1;
+
+            args -= count;
+            if ( args < stack )
+              goto Stack_Underflow;
+
+            if ( index >= 0 )
             {
-              FT_TRACE4(( " div" ));
-              args[0] = FT_DivFix( args[0], args[1] );
-              args++;
+              while ( index > 0 )
+              {
+                TT_Fixed tmp = args[count - 1];
+                TT_Int   i;
+
+
+                for ( i = count - 2; i >= 0; i-- )
+                  args[i + 1] = args[i];
+                args[0] = tmp;
+                index--;
+              }
             }
-            break;
-          
-          case t2_op_neg:
+            else
             {
-              FT_TRACE4(( " neg" ));
-              args[0] = -args[0];
-              args++;
-            }
-            break;
-            
-          case t2_op_random:
-            {
-              FT_Fixed  rand;
-              
-              FT_TRACE4(( " rand" ));
-              rand = seed;
-              if (rand >= 0x8000)
-                rand++;
-                   
-              args[0] = rand;
-              seed    = FT_MulFix( seed, 0x10000 - seed );
-              if (seed == 0) seed += 0x2873;
-              args++;
-            }
-            break;
-            
-          case t2_op_mul:
-            {
-              FT_TRACE4(( " mul" ));
-              args[0] = FT_MulFix( args[0], args[1] );
-              args++;
-            }
-            break;
-          
-          case t2_op_sqrt:
-            {
-              FT_TRACE4(( " sqrt" ));
-              if (args[0] > 0)
+              while (index < 0)
               {
-                FT_Int    count = 9;
-                FT_Fixed  root  = args[0];
-                FT_Fixed  new_root;
-                
-                for (;;)
-                {
-                  new_root = ( root + FT_DivFix(args[0],root) + 1 ) >> 1;
-                  if (new_root == root || count <= 0)
-                    break;
-                  root = new_root;
-                }
-                args[0] = new_root;
+                TT_Fixed  tmp = args[0];
+                TT_Int    i;
+
+
+                for ( i = 0; i < count - 1; i++ )
+                  args[i] = args[i + 1];
+                args[count - 1] = tmp;
+                index++;
               }
-              else
-                args[0] = 0;
-              args++;
             }
-            break;
-            
-          case t2_op_drop:
+            args += count;
+          }
+          break;
+
+        case t2_op_dup:
+          FT_TRACE4(( " dup" ));
+
+          args[1] = args[0];
+          args++;
+          break;
+
+        case t2_op_put:
+          {
+            TT_Fixed  val   = args[0];
+            TT_Int    index = (FT_Int)( args[1] >> 16 );
+
+
+            FT_TRACE4(( " put" ));
+            if ( index >= 0 && index < decoder->len_buildchar )
+              decoder->buildchar[index] = val;
+          }
+          break;
+
+        case t2_op_get:
+          {
+            FT_Int   index = (FT_Int)( args[0] >> 16 );
+            FT_Fixed val   = 0;
+
+
+            FT_TRACE4(( " get" ));
+
+            if ( index >= 0 && index < decoder->len_buildchar )
+              val = decoder->buildchar[index];
+
+            args[0] = val;
+            args++;
+          }
+          break;
+
+        case t2_op_store:
+          FT_TRACE4(( " store "));
+
+          goto Unimplemented;
+
+        case t2_op_load:
+           FT_TRACE4(( " load" ));
+
+          goto Unimplemented;
+
+        case t2_op_and:
+          {
+            FT_Fixed  cond = args[0] && args[1];
+
+
+            FT_TRACE4(( " and" ));
+
+            args[0] = cond ? 0x10000L : 0;
+            args++;
+          }
+          break;
+
+        case t2_op_or:
+          {
+            FT_Fixed  cond = args[0] || args[1];
+
+
+            FT_TRACE4(( " or" ));
+
+            args[0] = cond ? 0x10000L : 0;
+            args++;
+          }
+          break;
+
+        case t2_op_eq:
+          {
+            FT_Fixed  cond = !args[0];
+
+
+            FT_TRACE4(( " eq" ));
+
+            args[0] = cond ? 0x10000L : 0;
+            args++;
+          }
+          break;
+
+        case t2_op_ifelse:
+          {
+            FT_Fixed  cond = (args[2] <= args[3]);
+
+
+            FT_TRACE4(( " ifelse" ));
+
+            if ( !cond )
+              args[0] = args[1];
+            args++;
+          }
+          break;
+
+        case t2_op_callsubr:
+          {
+            TT_UInt  index = (FT_UInt)( ( args[0] >> 16 ) +
+                                        decoder->locals_bias );
+
+
+            FT_TRACE4(( " callsubr(%d)", index ));
+
+            if ( index >= decoder->num_locals )
             {
-              /* nothing */
-              FT_TRACE4(( " drop" ));
+              FT_ERROR(( "T2_Parse_Charstrings: invalid local subr index\n" ));
+              goto Syntax_Error;
             }
-            break;  
-            
-          case t2_op_exch:
+
+            if ( zone - decoder->zones >= T2_MAX_SUBRS_CALLS )
             {
-              FT_Fixed  tmp;
-              FT_TRACE4(( " exch" ));
-              tmp     = args[0];
-              args[0] = args[1];
-              args[1] = tmp;
-              args   += 2;
+              FT_ERROR(( "T2_Parse_CharStrings: too many nested subrs\n" ));
+              goto Syntax_Error;
             }
-            break;
-            
-          case t2_op_index:
+
+            zone->cursor = ip;  /* save current instruction pointer */
+
+            zone++;
+            zone->base    = decoder->locals[index];
+            zone->limit   = decoder->locals[index+1];
+            zone->cursor  = zone->base;
+
+            if ( !zone->base )
             {
-              FT_Int  index = args[0] >> 16;
-              FT_TRACE4(( " index" ));
-              if (index < 0)
-                index = 0;
-              else if (index > num_args-2)
-                index = num_args-2;
-              args[0] = args[-(index+1)];
-              args++;
+              FT_ERROR(( "T2_Parse_CharStrings: invoking empty subrs!\n" ));
+              goto Syntax_Error;
             }
-            break;
-            
-          case t2_op_roll:
-            {
-              FT_Int count = (FT_Int)(args[0] >> 16);
-              FT_Int index = (FT_Int)(args[1] >> 16);
-              
-              FT_TRACE4(( " roll" ));
-              
-              if (count <= 0)
-                count = 1;
-                
-              args -= count;
-              if (args < stack) goto Stack_Underflow;
-              if (index >= 0)
-              {
-                while (index > 0)
-                {
-                  FT_Fixed tmp = args[count-1];
-                  FT_Int   i;
-                  for ( i = count-2; i >= 0; i-- )
-                    args[i+1] = args[i];
-                  args[0] = tmp;
-                  index--;
-                }
-              }
-              else
-              {
-                while (index < 0)
-                {
-                  FT_Fixed  tmp = args[0];
-                  FT_Int    i;
-                  for ( i = 0; i < count-1; i++ )
-                    args[i] = args[i+1];
-                  args[count-1] = tmp;
-                  index++;
-                }
-              }
-              args += count;
-            }
-            break;
-            
-          case t2_op_dup:
+
+            decoder->zone = zone;
+            ip            = zone->base;
+            limit         = zone->limit;
+          }
+          break;
+
+        case t2_op_callgsubr:
+          {
+            TT_UInt  index = (FT_UInt)( ( args[0] >> 16 ) +
+                                        decoder->globals_bias );
+
+
+            FT_TRACE4(( " callgsubr(%d)", index ));
+
+            if ( index >= decoder->num_globals )
             {
-              FT_TRACE4(( " dup" ));
-              args[1] = args[0];
-              args++;
+              FT_ERROR(( "T2_Parse_Charstrings: invalid global subr index\n" ));
+              goto Syntax_Error;
             }
-            break;
-            
-          case t2_op_put:
+
+            if ( zone - decoder->zones >= T2_MAX_SUBRS_CALLS )
             {
-              FT_Fixed  val   = args[0];
-              FT_Int    index = (FT_Int)(args[1] >> 16);
-              
-              FT_TRACE4(( " put" ));
-              if (index >= 0 && index < decoder->len_buildchar)
-                decoder->buildchar[index] = val;
+              FT_ERROR(( "T2_Parse_CharStrings: too many nested subrs\n" ));
+              goto Syntax_Error;
             }
-            break;
-                      
-          case t2_op_get:
-            {
-              FT_Int   index = (FT_Int)(args[0] >> 16);
-              FT_Fixed val   = 0;
-              FT_TRACE4(( " get" ));
-              
-              if (index >= 0 && index < decoder->len_buildchar)
-                val = decoder->buildchar[index];
-                
-              args[0] = val;
-              args++;
+
+            zone->cursor = ip;  /* save current instruction pointer */
+
+            zone++;
+            zone->base   = decoder->globals[index];
+            zone->limit  = decoder->globals[index+1];
+            zone->cursor = zone->base;
+
+            if ( !zone->base )
+            {
+              FT_ERROR(( "T2_Parse_CharStrings: invoking empty subrs!\n" ));
+              goto Syntax_Error;
             }
-            break;
 
-         case t2_op_store:
-           FT_TRACE4(( " store "));
-           goto Unimplemented;
-           
-         case t2_op_load:
-           FT_TRACE4(( " load" ));
-           goto Unimplemented;
+            decoder->zone = zone;
+            ip            = zone->base;
+            limit         = zone->limit;
+          }
+          break;
 
-         case t2_op_and:
-           {
-             FT_Fixed  cond = args[0] && args[1];
-             FT_TRACE4(( " and" ));
-             args[0] = cond ? 0x10000 : 0;
-             args++;
-           }
-           break;
+        case t2_op_return:
+          FT_TRACE4(( " return" ));
 
-         case t2_op_or:
-           {
-             FT_Fixed  cond = args[0] || args[1];
-             FT_TRACE4(( " or" ));
-             args[0] = cond ? 0x10000 : 0;
-             args++;
-           }
-           break;
-           
-         case t2_op_eq:
-           {
-             FT_Fixed  cond = !args[0];
-             FT_TRACE4(( " eq" ));
-             args[0] = cond ? 0x10000 : 0;
-             args++;
-           }
-           break;
-           
-         case t2_op_ifelse:
-           {
-             FT_Fixed  cond = args[2] <= args[3];
-             FT_TRACE4(( " ifelse" ));
-             if (!cond)
-               args[0] = args[1];
-             args++;
-           }
-           break;
-         
-         case t2_op_callsubr:
-           {
-             FT_UInt  index = (FT_UInt)((args[0] >> 16) + decoder->locals_bias);
-             
-             FT_TRACE4(( " callsubr(%d)", index ));
-             if (index >= decoder->num_locals)
-             {
-               FT_ERROR(( "T2.Parse_Charstrings: invalid local subr index\n" ));
-               goto Syntax_Error;
-             }
-             
-             if ( zone - decoder->zones >= T2_MAX_SUBRS_CALLS )
-             {
-               FT_ERROR(( "T2.Parse_CharStrings : too many nested subrs\n" ));
-               goto Syntax_Error;
-             }
- 
-             zone->cursor = ip;  /* save current instruction pointer */
- 
-             zone++;
-             zone->base    = decoder->locals[index];
-             zone->limit   = decoder->locals[index+1];
-             zone->cursor  = zone->base;
- 
-             if (!zone->base)
-             {
-               FT_ERROR(( "T2.Parse_CharStrings : invoking empty subrs !!\n" ));
-               goto Syntax_Error;
-             }
- 
-             decoder->zone = zone;
-             ip            = zone->base;
-             limit         = zone->limit;
-           }
-           break;
-           
-         case t2_op_callgsubr:
-           {
-             FT_UInt  index = (FT_UInt)((args[0] >> 16) + decoder->globals_bias);
-             
-             FT_TRACE4(( " callgsubr(%d)", index ));
-             if (index >= decoder->num_globals)
-             {
-               FT_ERROR(( "T2.Parse_Charstrings: invalid global subr index\n" ));
-               goto Syntax_Error;
-             }
+          if ( decoder->zone <= decoder->zones )
+          {
+            FT_ERROR(( "T2_Parse_CharStrings: unexpected return\n" ));
+            goto Syntax_Error;
+          }
 
-             if ( zone - decoder->zones >= T2_MAX_SUBRS_CALLS )
-             {
-               FT_ERROR(( "T2.Parse_CharStrings : too many nested subrs\n" ));
-               goto Syntax_Error;
-             }
- 
-             zone->cursor = ip;  /* save current instruction pointer */
- 
-             zone++;
-             zone->base    = decoder->globals[index];
-             zone->limit   = decoder->globals[index+1];
-             zone->cursor  = zone->base;
- 
-             if (!zone->base)
-             {
-               FT_ERROR(( "T2.Parse_CharStrings : invoking empty subrs !!\n" ));
-               goto Syntax_Error;
-             }
- 
-             decoder->zone = zone;
-             ip            = zone->base;
-             limit         = zone->limit;
-           }
-           break;
-           
-         case t2_op_return:
-           {
-             FT_TRACE4(( " return" ));
-             if ( decoder->zone <= decoder->zones )
-             {
-               FT_ERROR(( "T2.Parse_CharStrings : unexpected return\n" ));
-               goto Syntax_Error;
-             }
- 
-             decoder->zone--;
-             zone  = decoder->zone;
-             ip    = zone->cursor;
-             limit = zone->limit;
-           }
-           break;
+          decoder->zone--;
+          zone  = decoder->zone;
+          ip    = zone->cursor;
+          limit = zone->limit;
+          break;
 
-         default:
-         
-       Unimplemented:  
-           FT_ERROR(( "Unimplemented opcode: %d", ip[-1] ));
-           if (ip[-1] == 12)
-           {
-             FT_ERROR(( " %d", ip[0] ));
-           }
-           FT_ERROR(( "\n" ));
-           return FT_Err_Unimplemented_Feature;
+        default:
+        Unimplemented:
+          FT_ERROR(( "Unimplemented opcode: %d", ip[-1] ));
+
+          if ( ip[-1] == 12 )
+            FT_ERROR(( " %d", ip[0] ));
+          FT_ERROR(( "\n" ));
+          return T2_Err_Unimplemented_Feature;
         }
-        decoder->top = args;
-        
+
+      decoder->top = args;
+
       } /* general operator processing */
 
     } /* while ip < limit */
+
     FT_TRACE4(( "..end..\n\n" ));
+
     return error;
 
   Syntax_Error:
-    return FT_Err_Invalid_File_Format;
+    return T2_Err_Invalid_File_Format;
 
   Stack_Underflow:
     return T2_Err_Too_Few_Arguments;
@@ -1360,43 +1571,46 @@
 
   Stack_Overflow:
     return T2_Err_Stack_Overflow;
-    
+
   Memory_Error:
     return builder->error;
   }
 
 
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /**********                                                      *********/
+  /**********                                                      *********/
+  /**********            COMPUTE THE MAXIMUM ADVANCE WIDTH         *********/
+  /**********                                                      *********/
+  /**********    The following code is in charge of computing      *********/
+  /**********    the maximum advance width of the font.  It        *********/
+  /**********    quickly processes each glyph charstring to        *********/
+  /**********    extract the value from either a `sbw' or `seac'   *********/
+  /**********    operator.                                         *********/
+  /**********                                                      *********/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
 
-  /**********************************************************************/
-  /**********************************************************************/
-  /**********************************************************************/
-  /**********                                                   *********/
-  /**********                                                   *********/
-  /**********           COMPUTE THE MAXIMUM ADVANCE WIDTH       *********/
-  /**********                                                   *********/
-  /**********   The following code is in charge of computing    *********/
-  /**********   the maximum advance width of the font. It       *********/
-  /**********   quickly process each glyph charstring to        *********/
-  /**********   extract the value from either a "sbw" or "seac" *********/
-  /**********   operator.                                       *********/
-  /**********                                                   *********/
-  /**********************************************************************/
-  /**********************************************************************/
-  /**********************************************************************/
 
 #if 0 /* unused until we support pure CFF fonts */
+
+
   LOCAL_FUNC
-  FT_Error  T2_Compute_Max_Advance( TT_Face  face,
-                                    FT_Int  *max_advance )
+  TT_Error  T2_Compute_Max_Advance( TT_Face  face,
+                                    TT_Int*  max_advance )
   {
-    FT_Error    error = 0;
+    TT_Error    error = 0;
     T2_Decoder  decoder;
-    FT_Int      glyph_index;
+    TT_Int      glyph_index;
     CFF_Font*   cff = (CFF_Font*)face->other;
 
+
     *max_advance = 0;
 
-    /* Initialise load decoder */
+    /* Initialize load decoder */
     T2_Init_Decoder( &decoder, face, 0, 0 );
 
     decoder.builder.metrics_only = 1;
@@ -1403,59 +1617,67 @@
     decoder.builder.load_points  = 0;
 
     /* For each glyph, parse the glyph charstring and extract */
-    /* the advance width..                                    */
-    for ( glyph_index = 0; glyph_index < face->root.num_glyphs; glyph_index++ )
+    /* the advance width.                                     */
+    for ( glyph_index = 0; glyph_index < face->root.num_glyphs;
+          glyph_index++ )
     {
-      FT_Byte*  charstring;
-      FT_ULong  charstring_len;
-      
+      TT_Byte*  charstring;
+      TT_ULong  charstring_len;
+
+
       /* now get load the unscaled outline */
       error = T2_Access_Element( &cff->charstrings_index, glyph_index,
                                  &charstring, &charstring_len );
-      if (!error)
+      if ( !error )
       {
         error = T2_Parse_CharStrings( &decoder, charstring, charstring_len );
-                                      
+
         T2_Forget_Element( &cff->charstrings_index, &charstring );
       }
-      /* ignore the error if one occured - skip to next glyph */
+
+      /* ignore the error if one has occured - skip to next glyph */
       error = 0;
     }
 
     *max_advance = decoder.builder.advance.x;
-    return FT_Err_Ok;
+
+    return T2_Err_Ok;
   }
-#endif
 
-  /**********************************************************************/
-  /**********************************************************************/
-  /**********************************************************************/
-  /**********                                                   *********/
-  /**********                                                   *********/
-  /**********              UNHINTED GLYPH LOADER                *********/
-  /**********                                                   *********/
-  /**********   The following code is in charge of loading a    *********/
-  /**********   single outline. It completely ignores hinting   *********/
-  /**********   and is used when FT_LOAD_NO_HINTING is set.     *********/
-  /**********                                                   *********/
-  /**********************************************************************/
-  /**********************************************************************/
-  /**********************************************************************/
 
+#endif /* 0 */
 
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /**********                                                      *********/
+  /**********                                                      *********/
+  /**********               UNHINTED GLYPH LOADER                  *********/
+  /**********                                                      *********/
+  /**********    The following code is in charge of loading a      *********/
+  /**********    single outline.  It completely ignores hinting    *********/
+  /**********    and is used when FT_LOAD_NO_HINTING is set.       *********/
+  /**********                                                      *********/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
   LOCAL_FUNC
-  FT_Error  T2_Load_Glyph( T2_GlyphSlot  glyph,
+  TT_Error  T2_Load_Glyph( T2_GlyphSlot  glyph,
                            T2_Size       size,
-                           FT_Int        glyph_index,
-                           FT_Int        load_flags )
+                           TT_Int        glyph_index,
+                           TT_Int        load_flags )
   {
-    FT_Error        error;
-    T2_Decoder      decoder;
-    TT_Face         face = (TT_Face)glyph->root.face;
-    FT_Bool         hinting;
-    CFF_Font*       cff = (CFF_Font*)face->other;
+    TT_Error    error;
+    T2_Decoder  decoder;
+    TT_Face     face = (TT_Face)glyph->root.face;
+    TT_Bool     hinting;
+    CFF_Font*   cff = (CFF_Font*)face->other;
 
-    if (load_flags & FT_LOAD_NO_RECURSE)
+
+    if ( load_flags & FT_LOAD_NO_RECURSE )
       load_flags |= FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING;
 
     glyph->x_scale = size->metrics.x_scale;
@@ -1472,18 +1694,20 @@
     {
       FT_Byte*  charstring;
       FT_ULong  charstring_len;
-      
+
+
       T2_Init_Decoder( &decoder, face, size, glyph );
 
-      decoder.builder.no_recurse = (FT_Bool)!!(load_flags & FT_LOAD_NO_RECURSE);
+      decoder.builder.no_recurse =
+        (FT_Bool)( load_flags & FT_LOAD_NO_RECURSE );
 
       /* now load the unscaled outline */
       error = T2_Access_Element( &cff->charstrings_index, glyph_index,
                                  &charstring, &charstring_len );
-      if (!error)
+      if ( !error )
       {
         error = T2_Parse_CharStrings( &decoder, charstring, charstring_len );
-                                      
+
         T2_Forget_Element( &cff->charstrings_index, &charstring );
       }
 
@@ -1491,22 +1715,22 @@
       T2_Done_Builder( &decoder.builder );
     }
 
-    /* Now, set the metrics.. - this is rather simple, as : */
-    /* the left side bearing is the xMin, and the top side  */
-    /* bearing the yMax..                                   */
-    if (!error)
+    /* Now, set the metrics - this is rather simple, as    */
+    /* the left side bearing is the xMin, and the top side */
+    /* bearing the yMax.                                   */
+    if ( !error )
     {
       /* for composite glyphs, return only the left side bearing and the */
       /* advance width..                                                 */
       if ( load_flags & FT_LOAD_NO_RECURSE )
       {
-#if 0      
+#if 0
         glyph->root.metrics.horiBearingX = decoder.builder.left_bearing.x;
         glyph->root.metrics.horiAdvance  = decoder.builder.advance.x;
 #else
         glyph->root.metrics.horiBearingX = decoder.builder.left_bearing.x;
         glyph->root.metrics.horiAdvance  = decoder.glyph_width;
-#endif        
+#endif /* 0 */
       }
       else
       {
@@ -1513,12 +1737,14 @@
         FT_BBox           cbox;
         FT_Glyph_Metrics* metrics = &glyph->root.metrics;
 
+
         /* copy the _unscaled_ advance width */
-#if 0        
+#if 0
         metrics->horiAdvance  = decoder.builder.advance.x;
 #else
         metrics->horiAdvance  = decoder.glyph_width;
-#endif
+#endif /* 0 */
+
         /* make up vertical metrics */
         metrics->vertBearingX = 0;
         metrics->vertBearingY = 0;
@@ -1532,21 +1758,22 @@
 
         glyph->root.outline.flags |= ft_outline_reverse_fill;
 
-        /*
+#if 0
         glyph->root.outline.second_pass    = TRUE;
-        glyph->root.outline.high_precision = ( size->root.metrics.y_ppem < 24 );
+        glyph->root.outline.high_precision = size->root.metrics.y_ppem < 24;
         glyph->root.outline.dropout_mode   = 2;
-        */
+#endif
 
-        if ( (load_flags & FT_LOAD_NO_SCALE) == 0 )
+        if ( ( load_flags & FT_LOAD_NO_SCALE ) == 0 )
         {
           /* scale the outline and the metrics */
-          FT_Int       n;
-          FT_Outline*  cur = &decoder.builder.base;
-          FT_Vector*   vec = cur->points;
-          FT_Fixed     x_scale = glyph->x_scale;
-          FT_Fixed     y_scale = glyph->y_scale;
+          TT_Int       n;
+          FT_Outline*  cur     = &decoder.builder.base;
+          TT_Vector*   vec     = cur->points;
+          TT_Fixed     x_scale = glyph->x_scale;
+          TT_Fixed     y_scale = glyph->y_scale;
 
+
           /* First of all, scale the points */
           for ( n = cur->n_points; n > 0; n--, vec++ )
           {
@@ -1565,13 +1792,15 @@
         }
 
         /* apply the font matrix */
-        /* FT_Outline_Transform( &glyph->root.outline, cff->font_matrix ); */
+#if 0
+        FT_Outline_Transform( &glyph->root.outline, cff->font_matrix );
+#endif
 
         /* compute the other metrics */
         FT_Outline_Get_CBox( &glyph->root.outline, &cbox );
 
         /* grid fit the bounding box if necessary */
-        if (hinting)
+        if ( hinting )
         {
           cbox.xMin &= -64;
           cbox.yMin &= -64;
@@ -1586,7 +1815,9 @@
         metrics->horiBearingY = cbox.yMax;
       }
     }
+
     return error;
   }
+
 
 /* END */
--- a/src/cff/t2gload.h
+++ b/src/cff/t2gload.h
@@ -4,11 +4,11 @@
 /*                                                                         */
 /*    OpenType Glyph Loader (specification).                               */
 /*                                                                         */
-/*  Copyright 1996-1999 by                                                 */
+/*  Copyright 1996-2000 by                                                 */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
-/*  This file is part of the FreeType project, and may only be used        */
-/*  modified and distributed under the terms of the FreeType project       */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
 /*  this file you indicate that you have read the license and              */
 /*  understand and accept it fully.                                        */
@@ -19,6 +19,7 @@
 #ifndef T2GLOAD_H
 #define T2GLOAD_H
 
+#include <freetype/freetype.h>
 #include <t2objs.h>
 
 #ifdef __cplusplus
@@ -25,49 +26,64 @@
   extern "C" {
 #endif
 
-  #define T2_MAX_OPERANDS     48
-  #define T2_MAX_SUBRS_CALLS  32
 
-/*************************************************************************/
-/*                                                                       */
-/* <Structure> T2_Builder                                                */
-/*                                                                       */
-/* <Description>                                                         */
-/*     a structure used during glyph loading to store its outline.       */
-/*                                                                       */
-/* <Fields>                                                              */
-/*    system :: current system object                                    */
-/*    face   :: current face object                                      */
-/*    glyph  :: current glyph slot                                       */
-/*                                                                       */
-/*    current :: current glyph outline                                   */
-/*    base    :: base glyph outline                                      */
-/*                                                                       */
-/*    max_points   :: maximum points in builder outline                  */
-/*    max_contours :: maximum contours in builder outline                */
-/*                                                                       */
-/*    last     :: last point position                                    */
-/*                                                                       */
-/*    scale_x  :: horizontal scale ( FUnits to sub-pixels )              */
-/*    scale_y  :: vertical scale   ( FUnits to sub-pixels )              */
-/*    pos_x    :: horizontal translation (composite glyphs)              */
-/*    pos_y    :: vertical translation   (composite glyph)               */
-/*                                                                       */
-/*    left_bearing  :: left side bearing point                           */
-/*    advance       :: horizontal advance vector                         */
-/*                                                                       */
-/*    path_begun    :: flag, indicates that a new path has begun         */
-/*    load_points   :: flag, if not set, no points are loaded            */
-/*                                                                       */
-/*    error         :: an error code that is only used to report         */
-/*                     memory allocation problems..                      */
-/*                                                                       */
-/*    metrics_only  :: a boolean indicating that we only want to         */
-/*                     compute the metrics of a given glyph, not load    */
-/*                     all of its points..                               */
-/*                                                                       */
+#define T2_MAX_OPERANDS     48
+#define T2_MAX_SUBRS_CALLS  32
 
-  typedef struct T2_Builder_
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Structure>                                                           */
+  /*    T2_Builder                                                         */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*     A structure used during glyph loading to store its outline.       */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    memory       :: The current memory object.                         */
+  /*                                                                       */
+  /*    face         :: The current face object.                           */
+  /*                                                                       */
+  /*    glyph        :: The current glyph slot.                            */
+  /*                                                                       */
+  /*    current      :: The current glyph outline.                         */
+  /*                                                                       */
+  /*    base         :: The base glyph outline.                            */
+  /*                                                                       */
+  /*    max_points   :: maximum points in builder outline                  */
+  /*                                                                       */
+  /*    max_contours :: Maximal number of contours in builder outline.     */
+  /*                                                                       */
+  /*    last         :: The last point position.                           */
+  /*                                                                       */
+  /*    scale_x      :: The horizontal scale (FUnits to sub-pixels).       */
+  /*                                                                       */
+  /*    scale_y      :: The vertical scale (FUnits to sub-pixels).         */
+  /*                                                                       */
+  /*    pos_x        :: The horizontal translation (if composite glyph).   */
+  /*                                                                       */
+  /*    pos_y        :: The vertical translation (if composite glyph).     */
+  /*                                                                       */
+  /*    left_bearing :: The left side bearing point.                       */
+  /*                                                                       */
+  /*    advance      :: The horizontal advance vector.                     */
+  /*                                                                       */
+  /*    bbox         :: Unused.                                            */
+  /*                                                                       */
+  /*    path_begun   :: A flag which indicates that a new path has begun.  */
+  /*                                                                       */
+  /*    load_points  :: If this flag is not set, no points are loaded.     */
+  /*                                                                       */
+  /*    no_recurse   :: Set but not used.                                  */
+  /*                                                                       */
+  /*    error        :: An error code that is only used to report memory   */
+  /*                    allocation problems.                               */
+  /*                                                                       */
+  /*    metrics_only :: A boolean indicating that we only want to compute  */
+  /*                    the metrics of a given glyph, not load all of its  */
+  /*                    points.                                            */
+  /*                                                                       */
+  typedef struct  T2_Builder_
   {
     FT_Memory     memory;
     TT_Face       face;
@@ -76,107 +92,104 @@
     FT_Outline    current;       /* the current glyph outline   */
     FT_Outline    base;          /* the composite glyph outline */
 
-    FT_Int        max_points;    /* capacity of base outline in points   */
-    FT_Int        max_contours;  /* capacity of base outline in contours */
+    TT_Int        max_points;    /* capacity of base outline in points   */
+    TT_Int        max_contours;  /* capacity of base outline in contours */
 
-    FT_Vector     last;
+    TT_Vector     last;
 
-    FT_Fixed      scale_x;
-    FT_Fixed      scale_y;
+    TT_Fixed      scale_x;
+    TT_Fixed      scale_y;
 
-    FT_Pos        pos_x;
-    FT_Pos        pos_y;
+    TT_Pos        pos_x;
+    TT_Pos        pos_y;
 
-    FT_Vector     left_bearing;
-    FT_Vector     advance;
+    TT_Vector     left_bearing;
+    TT_Vector     advance;
 
-    FT_BBox       bbox;          /* bounding box */
-    FT_Bool       path_begun;
-    FT_Bool       load_points;
-    FT_Bool       no_recurse;
+    TT_BBox       bbox;          /* bounding box */
+    TT_Bool       path_begun;
+    TT_Bool       load_points;
+    TT_Bool       no_recurse;
 
-    FT_Error      error;         /* only used for memory errors */
-    FT_Bool       metrics_only;
+    TT_Error      error;         /* only used for memory errors */
+    TT_Bool       metrics_only;
 
   } T2_Builder;
 
 
   /* execution context charstring zone */
-  typedef struct T2_Decoder_Zone_
+
+  typedef struct  T2_Decoder_Zone_
   {
-    FT_Byte*  base;
-    FT_Byte*  limit;
-    FT_Byte*  cursor;
+    TT_Byte*  base;
+    TT_Byte*  limit;
+    TT_Byte*  cursor;
 
   } T2_Decoder_Zone;
 
 
-  typedef struct T2_Decoder_
+  typedef struct  T2_Decoder_
   {
-    T2_Builder         builder;
-    CFF_Font*          cff;
+    T2_Builder        builder;
+    CFF_Font*         cff;
 
-    FT_Fixed           stack[ T2_MAX_OPERANDS+1 ];
-    FT_Fixed*          top;
+    TT_Fixed          stack[T2_MAX_OPERANDS + 1];
+    TT_Fixed*         top;
 
-    T2_Decoder_Zone    zones[ T2_MAX_SUBRS_CALLS+1 ];
-    T2_Decoder_Zone*   zone;
+    T2_Decoder_Zone   zones[T2_MAX_SUBRS_CALLS + 1];
+    T2_Decoder_Zone*  zone;
 
-    FT_Int             flex_state;
-    FT_Int             num_flex_vectors;
-    FT_Vector          flex_vectors[7];
+    TT_Int            flex_state;
+    TT_Int            num_flex_vectors;
+    TT_Vector         flex_vectors[7];
 
-    FT_Pos             glyph_width;
-    FT_Pos             nominal_width;
-    
-    FT_Bool            read_width;
-    FT_Int             num_hints;
-    FT_Fixed*          buildchar;
-    FT_Int             len_buildchar;
+    TT_Pos            glyph_width;
+    TT_Pos            nominal_width;
 
-    FT_UInt            num_locals;
-    FT_UInt            num_globals;
-    
-    FT_Int             locals_bias;
-    FT_Int             globals_bias;
-    
-    FT_Byte**          locals;
-    FT_Byte**          globals;
+    TT_Bool           read_width;
+    TT_Int            num_hints;
+    TT_Fixed*         buildchar;
+    TT_Int            len_buildchar;
 
+    TT_UInt           num_locals;
+    TT_UInt           num_globals;
 
-  } T2_Decoder;
+    TT_Int            locals_bias;
+    TT_Int            globals_bias;
 
+    TT_Byte**         locals;
+    TT_Byte**         globals;
 
+  } T2_Decoder;
 
+
   LOCAL_DEF
-  void  T2_Init_Decoder( T2_Decoder*  decoder,
-                         TT_Face      face,
-                         T2_Size      size,
-                         T2_GlyphSlot slot );
+  void  T2_Init_Decoder( T2_Decoder*   decoder,
+                         TT_Face       face,
+                         T2_Size       size,
+                         T2_GlyphSlot  slot );
 
 
 #if 0  /* unused until we support pure CFF fonts */
+
   /* Compute the maximum advance width of a font through quick parsing */
   LOCAL_DEF
-  FT_Error  T2_Compute_Max_Advance( TT_Face  face,
-                                    FT_Int  *max_advance );
+  TT_Error  T2_Compute_Max_Advance( TT_Face  face,
+                                    TT_Int*  max_advance );
+
 #endif
 
   /* This function is exported, because it is used by the T1Dump utility */
   LOCAL_DEF
-  FT_Error   T2_Parse_CharStrings( T2_Decoder*  decoder,
-                                   FT_Byte*     charstring_base,
-                                   FT_Int       charstring_len );
+  TT_Error  T2_Parse_CharStrings( T2_Decoder*  decoder,
+                                  TT_Byte*     charstring_base,
+                                  TT_Int       charstring_len );
 
-
-
   LOCAL_DEF
-  FT_Error  T2_Load_Glyph( T2_GlyphSlot  glyph,
+  TT_Error  T2_Load_Glyph( T2_GlyphSlot  glyph,
                            T2_Size       size,
-                           FT_Int        glyph_index,
-                           FT_Int        load_flags );
-
-
+                           TT_Int        glyph_index,
+                           TT_Int        load_flags );
 
 
 #ifdef __cplusplus
--- a/src/cff/t2load.c
+++ b/src/cff/t2load.c
@@ -21,7 +21,7 @@
 #include <freetype/internal/ftstream.h>
 #include <freetype/internal/psnames.h>
 
-#include <freetype/fterrors.h>
+#include <freetype/internal/t2errors.h>
 #include <freetype/tttags.h>
 #include <t2load.h>
 #include <t2parse.h>
@@ -39,37 +39,42 @@
 
  /* read a CFF offset from memory */
   static
-  FT_ULong  t2_get_offset( FT_Byte*  p,
-                           FT_Byte   off_size )
+  TT_ULong  t2_get_offset( TT_Byte*  p,
+                           TT_Byte   off_size )
   {
-    FT_ULong  result;
+    TT_ULong  result;
+
+
     for ( result = 0; off_size > 0; off_size-- )
-      result = (result <<= 8) | *p++;
+      result = ( result <<= 8 ) | *p++;
+
     return result;
   }
 
 
-
   static
-  FT_Error  t2_new_cff_index( CFF_Index*  index,
+  TT_Error  t2_new_cff_index( CFF_Index*  index,
                               FT_Stream   stream,
-                              FT_Bool     load )
+                              TT_Bool     load )
   {
-    FT_Error  error;
+    TT_Error  error;
     FT_Memory memory = stream->memory;
-    FT_UShort count;
+    TT_UShort count;
 
-    MEM_Set( index, 0, sizeof(*index) );
+
+    MEM_Set( index, 0, sizeof ( *index ) );
+
     index->stream = stream;
     if ( !READ_UShort( count ) &&
           count > 0            )
     {
-      FT_Byte*  p;
-      FT_Byte   offsize;
-      FT_ULong  data_size;
-      FT_ULong* poff;
+      TT_Byte*   p;
+      TT_Byte    offsize;
+      TT_ULong   data_size;
+      TT_ULong*  poff;
 
-      /* there is at least one element, read the offset size            */
+
+      /* there is at least one element; read the offset size            */
       /* then access the offset table to compute the index's total size */
       if ( READ_Byte( offsize ) )
         goto Exit;
@@ -77,15 +82,16 @@
       index->stream   = stream;
       index->count    = count;
       index->off_size = offsize;
-      data_size       = (FT_ULong)(count+1) * offsize;
+      data_size       = (TT_ULong)( count + 1 ) * offsize;
 
-      if ( ALLOC_ARRAY( index->offsets, count+1, FT_ULong ) ||
-           ACCESS_Frame( data_size ))
+      if ( ALLOC_ARRAY( index->offsets, count + 1, FT_ULong ) ||
+           ACCESS_Frame( data_size )                          )
         goto Exit;
 
       poff = index->offsets;
-      p    = (FT_Byte*)stream->cursor;
-      for ( ; (FT_Short)count >= 0; count-- )
+      p    = (TT_Byte*)stream->cursor;
+
+      for ( ; (TT_Short)count >= 0; count-- )
       {
         poff[0] = t2_get_offset( p, offsize );
         poff++;
@@ -95,9 +101,9 @@
       FORGET_Frame();
 
       index->data_offset = FILE_Pos();
-      data_size          = poff[-1]-1;
+      data_size          = poff[-1] - 1;
 
-      if (load)
+      if ( load )
       {
         /* load the data */
         if ( EXTRACT_Frame( data_size, index->bytes ) )
@@ -109,8 +115,9 @@
         (void)FILE_Skip( data_size );
       }
     }
+
   Exit:
-    if (error)
+    if ( error )
       FREE( index->offsets );
 
     return error;
@@ -124,60 +131,66 @@
     {
       FT_Stream  stream = index->stream;
       FT_Memory  memory = stream->memory;
-    
-      if (index->bytes)
+
+
+      if ( index->bytes )
         RELEASE_Frame( index->bytes );
 
       FREE( index->offsets );
-      MEM_Set( index, 0, sizeof(*index) );
+      MEM_Set( index, 0, sizeof ( *index ) );
     }
   }
 
 
   static
-  FT_Error  t2_explicit_cff_index( CFF_Index*  index,
-                                   FT_Byte**  *table )
+  TT_Error  t2_explicit_cff_index( CFF_Index*  index,
+                                   TT_Byte***  table )
   {
-    FT_Error  error  = 0;
-    FT_Memory memory = index->stream->memory;
-    FT_UInt   n, offset, old_offset;
-    FT_Byte** t;
+    TT_Error   error  = 0;
+    FT_Memory  memory = index->stream->memory;
+    TT_UInt    n, offset, old_offset;
+    TT_Byte**  t;
 
-    *table  = 0;
-    if ( index->count > 0 && !ALLOC_ARRAY( t, index->count+1, FT_Byte* ) )
+
+    *table = 0;
+
+    if ( index->count > 0 && !ALLOC_ARRAY( t, index->count + 1, TT_Byte* ) )
     {
       old_offset = 1;
       for ( n = 0; n <= index->count; n++ )
       {
         offset = index->offsets[n];
-        if (!offset)
+        if ( !offset )
           offset = old_offset;
-        
+
         t[n] = index->bytes + offset - 1;
-        
+
         old_offset = offset;
       }
       *table = t;
     }
-    return error;    
+
+    return error;
   }
 
 
   LOCAL_FUNC
-  FT_Error  T2_Access_Element( CFF_Index*   index,
-                               FT_UInt      element,
-                               FT_Byte*    *pbytes,
-                               FT_ULong    *pbyte_len )
+  TT_Error  T2_Access_Element( CFF_Index*  index,
+                               TT_UInt     element,
+                               TT_Byte**   pbytes,
+                               TT_ULong*   pbyte_len )
   {
-    FT_Error  error = 0;
+    TT_Error  error = 0;
 
+
     if ( index && index->count > element )
     {
       /* compute start and end offsets */
-      FT_ULong  off1, off2;
-      
+      TT_ULong  off1, off2;
+
+
       off1 = index->offsets[element];
-      if (off1)
+      if ( off1 )
       {
         do
         {
@@ -184,28 +197,30 @@
           element++;
           off2 = index->offsets[element];
         }
-        while (off2 == 0 && element < index->count);
-        if (!off2)
+        while ( off2 == 0 && element < index->count );
+
+        if ( !off2 )
           off1 = 0;
       }
-    
+
       /* access element */
-      if (off1)
+      if ( off1 )
       {
         *pbyte_len = off2 - off1;
-        
-        if (index->bytes)
+
+        if ( index->bytes )
         {
           /* this index was completely loaded in memory, that's easy */
-          *pbytes   = index->bytes + off1 - 1;
+          *pbytes = index->bytes + off1 - 1;
         }
         else
         {
           /* this index is still on disk/file, access it through a frame */
           FT_Stream  stream = index->stream;
-          
+
+
           if ( FILE_Seek( index->data_offset + off1 - 1 ) ||
-               EXTRACT_Frame( off2-off1, *pbytes )        )
+               EXTRACT_Frame( off2 - off1, *pbytes )      )
             goto Exit;
         }
       }
@@ -217,8 +232,8 @@
       }
     }
     else
-      error = FT_Err_Invalid_Argument;
-      
+      error = T2_Err_Invalid_Argument;
+
   Exit:
     return error;
   }
@@ -226,30 +241,34 @@
 
   LOCAL_FUNC
   void  T2_Forget_Element( CFF_Index*  index,
-                           FT_Byte*   *pbytes )
+                           TT_Byte**   pbytes )
   {
-    if (index->bytes == 0)
+    if ( index->bytes == 0 )
     {
       FT_Stream  stream = index->stream;
+
+
       RELEASE_Frame( *pbytes );
     }
-  }                           
+  }
 
 
   LOCAL_FUNC
-  FT_String*  T2_Get_Name( CFF_Index*  index,
-                           FT_UInt     element )
+  TT_String*  T2_Get_Name( CFF_Index*  index,
+                           TT_UInt     element )
   {
-    FT_Memory  memory = index->stream->memory;
-    FT_Byte*   bytes;
-    FT_ULong   byte_len;
-    FT_Error   error;
-    FT_String* name = 0;
-    
+    FT_Memory   memory = index->stream->memory;
+    TT_Byte*    bytes;
+    TT_ULong    byte_len;
+    TT_Error    error;
+    TT_String*  name = 0;
+
+
     error = T2_Access_Element( index, element, &bytes, &byte_len );
-    if (error) goto Exit;
-    
-    if ( !ALLOC( name, byte_len+1 ) )
+    if ( error )
+      goto Exit;
+
+    if ( !ALLOC( name, byte_len + 1 ) )
     {
       MEM_Copy( name, bytes, byte_len );
       name[byte_len] = 0;
@@ -258,60 +277,69 @@
 
   Exit:
     return name;
-  }                           
+  }
 
 
 #if 0 /* unused until we fully support pure-CFF fonts */
+
   LOCAL_FUNC
-  FT_String*  T2_Get_String( CFF_Index*          index,
-                             FT_UInt             sid,
+  TT_String*  T2_Get_String( CFF_Index*          index,
+                             TT_UInt             sid,
                              PSNames_Interface*  interface )
   {
-    /* if it's not a standard string, return it */
+    /* if it is not a standard string, return it */
     if ( sid > 390 )
       return T2_Get_Name( index, sid - 390 );
-      
-    /* that's a standard string, fetch a copy from the psnamed module */
+
+    /* that's a standard string, fetch a copy from the PSName module */
     {
-      FT_String*   name       = 0;
+      TT_String*   name       = 0;
       const char*  adobe_name = interface->adobe_std_strings( sid );
-      FT_UInt      len;
-      
-      if (adobe_name)
+      TT_UInt      len;
+
+
+      if ( adobe_name )
       {
         FT_Memory memory = index->stream->memory;
-        FT_Error  error;
-        
-        len = (FT_UInt)strlen(adobe_name);
-        if ( !ALLOC( name, len+1 ) )
+        TT_Error  error;
+
+
+        len = (TT_UInt)strlen( adobe_name );
+        if ( !ALLOC( name, len + 1 ) )
         {
           MEM_Copy( name, adobe_name, len );
           name[len] = 0;
         }
       }
+
       return name;
     }
-  }                             
-#endif
+  }
 
+#endif /* 0 */
+
+
   LOCAL_FUNC
-  FT_Error  T2_Load_CFF_Font( FT_Stream   stream,
-                              FT_Int      face_index,
-                              CFF_Font*   font )
+  FT_Error  T2_Load_CFF_Font( FT_Stream  stream,
+                              TT_Int     face_index,
+                              CFF_Font*  font )
   {
-    static const FT_Frame_Field  cff_header_fields[] = {
-                     FT_FRAME_START(4),
-                       FT_FRAME_BYTE( CFF_Font,  version_major ),
-                       FT_FRAME_BYTE( CFF_Font,  version_minor ),
-                       FT_FRAME_BYTE( CFF_Font,  header_size   ),
-                       FT_FRAME_BYTE( CFF_Font,  absolute_offsize ),
-                     FT_FRAME_END };
+    static const FT_Frame_Field  cff_header_fields[] =
+    {
+      FT_FRAME_START( 4 ),
+        FT_FRAME_BYTE( CFF_Font, version_major ),
+        FT_FRAME_BYTE( CFF_Font, version_minor ),
+        FT_FRAME_BYTE( CFF_Font, header_size ),
+        FT_FRAME_BYTE( CFF_Font, absolute_offsize ),
+      FT_FRAME_END
+    };
 
-    FT_Error  error;
-    FT_Memory memory = stream->memory;
-    FT_ULong  base_offset;
+    FT_Error   error;
+    FT_Memory  memory = stream->memory;
+    FT_ULong   base_offset;
 
-    MEM_Set( font, 0, sizeof(*font) );
+
+    MEM_Set( font, 0, sizeof ( *font ) );
     font->stream = stream;
     font->memory = memory;
     base_offset  = FILE_Pos();
@@ -325,7 +353,7 @@
          font->header_size      < 4 ||
          font->absolute_offsize > 4 )
     {
-      FT_ERROR(( "incorrect CFF font header !!\n" ));
+      FT_ERROR(( "incorrect CFF font header!\n" ));
       error = FT_Err_Unknown_File_Format;
       goto Exit;
     }
@@ -338,115 +366,125 @@
             t2_new_cff_index( &font->top_dict_index, stream, 0 )   ||
             t2_new_cff_index( &font->string_index, stream, 0 )     ||
             t2_new_cff_index( &font->global_subrs_index, stream, 1 );
-    if (error) goto Exit;
+    if ( error )
+      goto Exit;
 
-    /* well, we don't really forget the "disabled" fonts.. */
+    /* well, we don't really forget the `disabled' fonts... */
     font->num_faces = font->name_index.count;
-    if (face_index >= font->num_faces)
+    if ( face_index >= font->num_faces )
     {
-      FT_ERROR(( "T2.Load_Font: incorrect face index = %d\n", face_index ));
-      error = FT_Err_Invalid_Argument;
+      FT_ERROR(( "T2_Load_CFF_Font: incorrect face index = %d\n",
+                 face_index ));
+      error = T2_Err_Invalid_Argument;
     }
 
     /* in case of a font format check, simply exit now */
-    if (face_index >= 0)
+    if ( face_index >= 0 )
     {
-      T2_Parser  parser;
-      FT_Byte*   dict;
-      FT_ULong   dict_len;
-      CFF_Index* index = &font->top_dict_index;
-      CFF_Top_Dict*  top = &font->top_dict;
+      T2_Parser      parser;
+      TT_Byte*       dict;
+      TT_ULong       dict_len;
+      CFF_Index*     index = &font->top_dict_index;
+      CFF_Top_Dict*  top   = &font->top_dict;
 
-      /* parse the top-level font dictionary */      
+
+      /* parse the top-level font dictionary */
       T2_Parser_Init( &parser, T2CODE_TOPDICT, &font->top_dict );
 
       /* set defaults */
-      memset( top, 0, sizeof(*top) );
+      memset( top, 0, sizeof ( *top ) );
+
       top->underline_position  = -100;
       top->underline_thickness = 50;
       top->charstring_type     = 2;
-      top->font_matrix.xx      = 0x10000;
-      top->font_matrix.yy      = 0x10000;
+      top->font_matrix.xx      = 0x10000L;
+      top->font_matrix.yy      = 0x10000L;
       top->cid_count           = 8720;
-      
+
       error = T2_Access_Element( index, face_index, &dict, &dict_len ) ||
               T2_Parser_Run( &parser, dict, dict + dict_len );
 
       T2_Forget_Element( &font->top_dict_index, &dict );
-      if (error) goto Exit;
-      
+
+      if ( error )
+        goto Exit;
+
       /* parse the private dictionary, if any */
       if (font->top_dict.private_offset && font->top_dict.private_size)
       {
         CFF_Private*  priv = &font->private_dict;
-        
+
+
         /* set defaults */
         priv->blue_shift       = 7;
         priv->blue_fuzz        = 1;
         priv->lenIV            = -1;
-        priv->expansion_factor = (FT_Fixed)0.06*0x10000;
-        priv->blue_scale       = (FT_Fixed)0.039625*0x10000;
+        priv->expansion_factor = (TT_Fixed)0.06 * 0x10000L;
+        priv->blue_scale       = (TT_Fixed)0.039625 * 0x10000L;
 
         T2_Parser_Init( &parser, T2CODE_PRIVATE, priv );
-        
+
         if ( FILE_Seek( base_offset + font->top_dict.private_offset ) ||
              ACCESS_Frame( font->top_dict.private_size )               )
           goto Exit;
 
         error = T2_Parser_Run( &parser,
-                               (FT_Byte*)stream->cursor,
-                               (FT_Byte*)stream->limit );        
-        FORGET_Frame();             
-        if (error) goto Exit;
+                               (TT_Byte*)stream->cursor,
+                               (TT_Byte*)stream->limit );
+        FORGET_Frame();
+        if ( error )
+          goto Exit;
       }
-      
+
       /* read the charstrings index now */
       if ( font->top_dict.charstrings_offset == 0 )
       {
-        FT_ERROR(( "T2.New_CFF_Font: no charstrings offset !!\n" ));
+        FT_ERROR(( "T2_Load_CFF_Font: no charstrings offset!\n" ));
         error = FT_Err_Unknown_File_Format;
         goto Exit;
       }
-      
+
       if ( FILE_Seek( base_offset + font->top_dict.charstrings_offset ) )
         goto Exit;
-        
+
       error = t2_new_cff_index( &font->charstrings_index, stream, 0 );
-      if (error) goto Exit;
+      if ( error )
+        goto Exit;
 
       /* read the local subrs, if any */
 
-      if (font->private_dict.local_subrs_offset) {
+      if ( font->private_dict.local_subrs_offset )
+      {
+        if ( FILE_Seek( base_offset + font->top_dict.private_offset +
+                        font->private_dict.local_subrs_offset ) )
+          goto Exit;
 
-	if ( FILE_Seek( base_offset + font->top_dict.private_offset +
-			font->private_dict.local_subrs_offset ) )
-	  goto Exit;
-        
-	error = t2_new_cff_index( &font->local_subrs_index, stream, 1 );
-	if (error) goto Exit;
+        error = t2_new_cff_index( &font->local_subrs_index, stream, 1 );
+        if ( error )
+          goto Exit;
       }
-      
+
       /* explicit the global and local subrs */
 
-      if (font->private_dict.local_subrs_offset) {
-	font->num_local_subrs  = font->local_subrs_index.count;
-      } else {
-	font->num_local_subrs = 0;
-      }
+      if ( font->private_dict.local_subrs_offset )
+        font->num_local_subrs = font->local_subrs_index.count;
+      else
+        font->num_local_subrs = 0;
 
       font->num_global_subrs = font->global_subrs_index.count;
-      
 
-      error = t2_explicit_cff_index( &font->global_subrs_index, &font->global_subrs ) ;
+      error = t2_explicit_cff_index( &font->global_subrs_index,
+                                     &font->global_subrs ) ;
 
-      if (font->private_dict.local_subrs_offset) {
-	error |= t2_explicit_cff_index( &font->local_subrs_index, &font->local_subrs ) ;
-      }
+      if ( font->private_dict.local_subrs_offset )
+        error |= t2_explicit_cff_index( &font->local_subrs_index,
+                                        &font->local_subrs ) ;
 
-      if (error) goto Exit;
+      if ( error )
+        goto Exit;
     }
 
-    /* get the font name */      
+    /* get the font name */
     font->font_name = T2_Get_Name( &font->name_index, face_index );
 
   Exit:
@@ -453,11 +491,13 @@
     return error;
   }
 
+
   LOCAL_FUNC
   void  T2_Done_CFF_Font( CFF_Font*  font )
   {
     FT_Memory  memory = font->memory;
-    
+
+
     t2_done_cff_index( &font->global_subrs_index );
     t2_done_cff_index( &font->string_index );
     t2_done_cff_index( &font->top_dict_index );
@@ -465,20 +505,9 @@
     t2_done_cff_index( &font->charstrings_index );
 
     FREE( font->local_subrs );
-    FREE( font->global_subrs );    
+    FREE( font->global_subrs );
     FREE( font->font_name );
   }
 
-
-
- /***********************************************************************/
- /***********************************************************************/
- /***********************************************************************/
- /*****                                                             *****/
- /*****      TYPE 2 TABLES DECODING..                               *****/
- /*****                                                             *****/
- /***********************************************************************/
- /***********************************************************************/
- /***********************************************************************/
 
 /* END */
--- a/src/cff/t2load.h
+++ b/src/cff/t2load.h
@@ -4,11 +4,11 @@
 /*                                                                         */
 /*    OpenType glyph data/program tables loader (specification).           */
 /*                                                                         */
-/*  Copyright 1996-1999 by                                                 */
+/*  Copyright 1996-2000 by                                                 */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
-/*  This file is part of the FreeType project, and may only be used        */
-/*  modified and distributed under the terms of the FreeType project       */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
 /*  this file you indicate that you have read the license and              */
 /*  understand and accept it fully.                                        */
@@ -25,33 +25,35 @@
   extern "C" {
 #endif
 
-  LOCAL_FUNC
+  LOCAL_DEF
   FT_String*  T2_Get_Name( CFF_Index*  index,
                            FT_UInt     element );
 
 #if 0  /* will be used later for pure-CFF font support */
+
   LOCAL_DEF
-  FT_String*  T2_Get_String( CFF_Index*          index,
-                             FT_UInt             sid,
+  TT_String*  T2_Get_String( CFF_Index*          index,
+                             TT_UInt             sid,
                              PSNames_Interface*  interface );
+
 #endif
 
   LOCAL_DEF
-  FT_Error  T2_Access_Element( CFF_Index*   index,
-                               FT_UInt      element,
-                               FT_Byte*    *pbytes,
-                               FT_ULong    *pbyte_len );
+  TT_Error  T2_Access_Element( CFF_Index*  index,
+                               TT_UInt     element,
+                               TT_Byte**   pbytes,
+                               TT_ULong*   pbyte_len );
 
   LOCAL_DEF
   void  T2_Forget_Element( CFF_Index*  index,
-                           FT_Byte*   *pbytes );
+                           TT_Byte**   pbytes );
 
-  LOCAL_FUNC
-  FT_Error  T2_Load_CFF_Font( FT_Stream  stream,
-                              FT_Int     face_index,
+  LOCAL_DEF
+  TT_Error  T2_Load_CFF_Font( FT_Stream  stream,
+                              TT_Int     face_index,
                               CFF_Font*  font );
 
-  LOCAL_FUNC
+  LOCAL_DEF
   void  T2_Done_CFF_Font( CFF_Font*  font );
 
 
--- a/src/cff/t2objs.c
+++ b/src/cff/t2objs.c
@@ -53,11 +53,18 @@
   /*    T2_Init_Face                                                       */
   /*                                                                       */
   /* <Description>                                                         */
-  /*    Initializes a given TrueType face object.                          */
+  /*    Initializes a given OpenType face object.                          */
   /*                                                                       */
   /* <Input>                                                               */
-  /*    resource   :: The source font resource.                            */
+  /*    stream     :: The source font stream.                              */
+  /*                                                                       */
   /*    face_index :: The index of the font face in the resource.          */
+  /*                                                                       */
+  /*    num_params :: Number of additional generic parameters.  Ignored.   */
+  /*                                                                       */
+  /*    params     :: Additional generic parameters.  Ignored.             */
+  /*                                                                       */
+  /* <InOut>                                                               */
   /*    face       :: The newly built face object.                         */
   /*                                                                       */
   /* <Return>                                                              */
@@ -70,70 +77,77 @@
                           FT_Int         num_params,
                           FT_Parameter*  params )
   {
-    TT_Error           error;
-    FT_Driver          sfnt_driver;
-    SFNT_Interface*    sfnt;
+    TT_Error         error;
+    FT_Driver        sfnt_driver;
+    SFNT_Interface*  sfnt;
 
+
     sfnt_driver = FT_Get_Driver( face->root.driver->library, "sfnt" );
-    if (!sfnt_driver) goto Bad_Format;
+    if ( !sfnt_driver )
+      goto Bad_Format;
 
     sfnt = (SFNT_Interface*)(sfnt_driver->interface.format_interface);
-    if (!sfnt) goto Bad_Format;
+    if ( !sfnt )
+      goto Bad_Format;
 
     /* create input stream from resource */
-    if ( FILE_Seek(0) )
+    if ( FILE_Seek( 0 ) )
       goto Exit;
 
-    /* check that we have a valid TrueType file */
+    /* check that we have a valid OpenType file */
     error = sfnt->init_face( stream, face, face_index, num_params, params );
-    if (error) goto Exit;
+    if ( error )
+      goto Exit;
 
-    /* We must also be able to accept Mac/GX fonts, as well as OT ones */
-    if ( face->format_tag != 0x4f54544f )     /* OpenType/CFF font */
+    if ( face->format_tag != 0x4f54544fL )     /* OpenType/CFF font */
     {
       FT_TRACE2(( "[not a valid OpenType/CFF font]\n" ));
       goto Bad_Format;
     }
 
-    /* If we're performing a simple font format check, exit immediately */
+    /* If we are performing a simple font format check, exit immediately */
     if ( face_index < 0 )
-      return FT_Err_Ok;
+      return T2_Err_Ok;
 
     /* Load font directory */
     error = sfnt->load_face( stream, face, face_index, num_params, params );
-    if ( error ) goto Exit;
+    if ( error )
+      goto Exit;
 
     /* now, load the CFF part of the file.. */
     error = face->goto_table( face, TTAG_CFF, stream, 0 );
-    if (error) goto Exit;
+    if ( error )
+      goto Exit;
 
     {
       CFF_Font*  cff;
       FT_Memory  memory = face->root.memory;
       FT_Face    root;
-      
-      if ( ALLOC( cff, sizeof(*cff) ) )
+
+
+      if ( ALLOC( cff, sizeof ( *cff ) ) )
         goto Exit;
-        
+
       face->other = cff;
       error = T2_Load_CFF_Font( stream, face_index, cff );
-      if (error) goto Exit;
+      if ( error )
+        goto Exit;
 
-      /* complement the root flags with some interesting information  */
+      /* Complement the root flags with some interesting information. */
       /* note that for OpenType/CFF, there is no need to do this, but */
-      /* this will be necessary for pure CFF fonts through..          */
+      /* this will be necessary for pure CFF fonts through.           */
       root = &face->root;
     }
 
   Exit:
     return error;
-  Bad_Format:    
+
+  Bad_Format:
     error = FT_Err_Unknown_File_Format;
     goto Exit;
   }
 
 
-
   /*************************************************************************/
   /*                                                                       */
   /* <Function>                                                            */
@@ -149,23 +163,26 @@
   void  T2_Done_Face( T2_Face  face )
   {
     FT_Memory  memory = face->root.memory;
-#if 0  
+#if 0
     FT_Stream  stream = face->root.stream;
 #endif
 
     SFNT_Interface*  sfnt = face->sfnt;
 
-    if (sfnt)
-      sfnt->done_face(face);
 
+    if ( sfnt )
+      sfnt->done_face( face );
+
     {
       CFF_Font*  cff = (CFF_Font*)face->other;
-      if (cff)
+
+
+      if ( cff )
       {
-        T2_Done_CFF_Font(cff);
-        FREE(face->other);
+        T2_Done_CFF_Font( cff );
+        FREE( face->other );
       }
-    }    
+    }
   }
 
 
@@ -193,7 +210,8 @@
   LOCAL_DEF
   FT_Error  T2_Init_Size( T2_Size  size )
   {
-    UNUSED(size);
+    UNUSED( size );
+
     return 0;
   }
 
@@ -212,7 +230,7 @@
   LOCAL_FUNC
   void  T2_Done_Size( T2_Size  size )
   {
-    UNUSED(size);
+    UNUSED( size );
   }
 
 
@@ -229,14 +247,15 @@
   /*    size :: A handle to the target size object.                        */
   /*                                                                       */
   LOCAL_DEF
-  FT_Error  T2_Reset_Size( T2_Size  size )
+  TT_Error  T2_Reset_Size( T2_Size  size )
   {
     T2_Face           face    = (T2_Face)size->face;
     FT_Size_Metrics*  metrics = &size->metrics;
-    FT_Error          error   = FT_Err_Ok;
+    TT_Error          error   = T2_Err_Ok;
 
+
     if ( metrics->x_ppem < 1 || metrics->y_ppem < 1 )
-      return FT_Err_Invalid_Argument;
+      return T2_Err_Invalid_PPem;
 
     /* Compute root ascender, descender, test height, and max_advance */
     metrics->ascender = ( FT_MulFix( face->root.ascender,
@@ -250,6 +269,7 @@
 
     metrics->max_advance = ( FT_MulFix( face->root.max_advance_width,
                                         metrics->x_scale ) + 32 ) & -64;
+
     return error;
   }
 
@@ -269,10 +289,11 @@
   /*    TrueType error code.  0 means success.                             */
   /*                                                                       */
   LOCAL_FUNC
-  FT_Error  T2_Init_GlyphSlot( T2_GlyphSlot  slot )
+  TT_Error  T2_Init_GlyphSlot( T2_GlyphSlot  slot )
   {
     FT_Library  library = slot->root.face->driver->library;
 
+
     slot->max_points         = 0;
     slot->max_contours       = 0;
     slot->root.bitmap.buffer = 0;
@@ -284,7 +305,7 @@
   /*************************************************************************/
   /*                                                                       */
   /* <Function>                                                            */
-  /*    TT_Done_GlyphSlot                                                  */
+  /*    T2_Done_GlyphSlot                                                  */
   /*                                                                       */
   /* <Description>                                                         */
   /*    The OpenType glyph slot finalizer.                                 */
@@ -298,7 +319,8 @@
     FT_Library  library = slot->root.face->driver->library;
     FT_Memory   memory  = library->memory;
 
-    if (slot->root.flags & ft_glyph_own_bitmap)
+
+    if ( slot->root.flags & ft_glyph_own_bitmap )
       FREE( slot->root.bitmap.buffer );
 
     FT_Outline_Done( library, &slot->root.outline );
@@ -321,19 +343,22 @@
   /*    TrueType error code.  0 means success.                             */
   /*                                                                       */
   LOCAL_FUNC
-  FT_Error  T2_Init_Driver( T2_Driver  driver )
+  TT_Error  T2_Init_Driver( T2_Driver  driver )
   {
     FT_Memory  memory = driver->root.memory;
     FT_Error   error;
 
+
     error = FT_New_GlyphZone( memory, 0, 0, &driver->zone );
-    if (error) return error;
+    if ( error )
+      return error;
 
     /* init extension registry if needed */
-#ifdef T2_CONFIG_OPTION_EXTEND_ENGINE
+
+#ifdef TT_CONFIG_OPTION_EXTEND_ENGINE
     return TT_Init_Extensions( driver );
 #else
-    return FT_Err_Ok;
+    return T2_Err_Ok;
 #endif
   }
 
@@ -341,19 +366,20 @@
   /*************************************************************************/
   /*                                                                       */
   /* <Function>                                                            */
-  /*    TT_Done_Driver                                                     */
+  /*    T2_Done_Driver                                                     */
   /*                                                                       */
   /* <Description>                                                         */
-  /*    Finalizes a given TrueType driver.                                 */
+  /*    Finalizes a given OpenType driver.                                 */
   /*                                                                       */
   /* <Input>                                                               */
-  /*    driver :: A handle to the target TrueType driver.                  */
+  /*    driver :: A handle to the target OpenType driver.                  */
   /*                                                                       */
   LOCAL_FUNC
   void  T2_Done_Driver( T2_Driver  driver )
   {
     /* destroy extensions registry if needed */
-#ifdef T2_CONFIG_OPTION_EXTEND_ENGINE
+
+#ifdef TT_CONFIG_OPTION_EXTEND_ENGINE
     TT_Done_Extensions( driver );
 #endif
 
--- a/src/cff/t2objs.h
+++ b/src/cff/t2objs.h
@@ -2,13 +2,13 @@
 /*                                                                         */
 /*  t2objs.h                                                               */
 /*                                                                         */
-/*    Objects manager (specification).                                     */
+/*    OpenType objects manager (specification).                            */
 /*                                                                         */
-/*  Copyright 1996-1999 by                                                 */
+/*  Copyright 1996-2000 by                                                 */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
-/*  This file is part of the FreeType project, and may only be used        */
-/*  modified and distributed under the terms of the FreeType project       */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
 /*  this file you indicate that you have read the license and              */
 /*  understand and accept it fully.                                        */
@@ -42,6 +42,7 @@
 
   typedef TT_Face  T2_Face;
 
+
   /*************************************************************************/
   /*                                                                       */
   /* <Type>                                                                */
@@ -61,23 +62,18 @@
   /* <Description>                                                         */
   /*    A handle to an OpenType glyph slot object.                         */
   /*                                                                       */
-  /* <Note>                                                                */
-  /*    This is a direct typedef of FT_GlyphSlot, as there is nothing      */
-  /*    specific about the OpenType glyph slot.                            */
-  /*                                                                       */
-
   typedef struct T2_GlyphSlotRec_
   {
     FT_GlyphSlotRec  root;
 
-    FT_Bool          hint;
-    FT_Bool          scaled;
+    TT_Bool          hint;
+    TT_Bool          scaled;
 
-    FT_Int           max_points;
-    FT_Int           max_contours;
+    TT_Int           max_points;
+    TT_Int           max_contours;
 
-    FT_Fixed         x_scale;
-    FT_Fixed         y_scale;
+    TT_Fixed         x_scale;
+    TT_Fixed         y_scale;
 
   } T2_GlyphSlotRec, *T2_GlyphSlot;
 
@@ -89,9 +85,9 @@
   /*                                                                       */
   typedef struct  T2_Transform_
   {
-    FT_Fixed    xx, xy;     /* transformation matrix coefficients */
-    FT_Fixed    yx, yy;
-    FT_F26Dot6  ox, oy;     /* offsets        */
+    TT_Fixed    xx, xy;     /* transformation matrix coefficients */
+    TT_Fixed    yx, yy;
+    TT_F26Dot6  ox, oy;     /* offsets        */
 
   } T2_Transform;
 
@@ -110,38 +106,55 @@
   } T2_DriverRec;
 
 
- /*************************************************************************/
- /*  Face Funcs                                                           */
+  /*************************************************************************/
+  /*                                                                       */
+  /* Face functions                                                        */
+  /*                                                                       */
+  LOCAL_DEF
+  FT_Error  T2_Init_Face( FT_Stream      stream,
+                          T2_Face        face,
+                          TT_Int         face_index,
+                          TT_Int         num_params,
+                          FT_Parameter*  params );
 
-  LOCAL_DEF FT_Error  T2_Init_Face( FT_Stream      stream,
-                                    T2_Face        face,
-                                    TT_Int         face_index,
-                                    TT_Int         num_params,
-                                    FT_Parameter*  params );
+  LOCAL_DEF
+  void  T2_Done_Face( T2_Face  face );
 
-  LOCAL_DEF void      T2_Done_Face( T2_Face  face );
 
+  /*************************************************************************/
+  /*                                                                       */
+  /* Size functions                                                        */
+  /*                                                                       */
+  LOCAL_DEF
+  FT_Error  T2_Init_Size( T2_Size  size );
 
- /*************************************************************************/
- /*  Size funcs                                                           */
+  LOCAL_DEF
+  void  T2_Done_Size( T2_Size  size );
 
-  LOCAL_DEF FT_Error  T2_Init_Size ( T2_Size  size );
-  LOCAL_DEF void      T2_Done_Size ( T2_Size  size );
-  LOCAL_DEF FT_Error  T2_Reset_Size( T2_Size  size );
+  LOCAL_DEF
+  TT_Error  T2_Reset_Size( T2_Size  size );
 
 
- /*************************************************************************/
- /*  GlyphSlot funcs                                                      */
+  /*************************************************************************/
+  /*                                                                       */
+  /* GlyphSlot functions                                                   */
+  /*                                                                       */
+  LOCAL_DEF
+  TT_Error  T2_Init_GlyphSlot( T2_GlyphSlot  slot );
 
-  LOCAL_DEF FT_Error  T2_Init_GlyphSlot( T2_GlyphSlot  slot );
-  LOCAL_DEF void      T2_Done_GlyphSlot( T2_GlyphSlot  slot );
+  LOCAL_DEF
+  void  T2_Done_GlyphSlot( T2_GlyphSlot  slot );
 
 
- /*************************************************************************/
- /*  Driver funcs                                                         */
+  /*************************************************************************/
+  /*                                                                       */
+  /* Driver functions                                                      */
+  /*                                                                       */
+  LOCAL_DEF
+  TT_Error  T2_Init_Driver( T2_Driver  driver );
 
-  LOCAL_DEF  FT_Error  T2_Init_Driver( T2_Driver  driver );
-  LOCAL_DEF  void      T2_Done_Driver( T2_Driver  driver );
+  LOCAL_DEF
+  void  T2_Done_Driver( T2_Driver  driver );
 
 
 #ifdef __cplusplus
--- a/src/cff/t2parse.c
+++ b/src/cff/t2parse.c
@@ -17,7 +17,7 @@
 
 
 #include <t2parse.h>
-#include <freetype/fterrors.h>
+#include <freetype/internal/t2errors.h>
 
 
   /*************************************************************************/
@@ -33,6 +33,7 @@
 #define T2_Err_Stack_Underflow   FT_Err_Invalid_Argument
 #define T2_Err_Syntax_Error      FT_Err_Invalid_Argument
 
+
   enum
   {
     t2_kind_none = 0,
@@ -42,34 +43,34 @@
     t2_kind_bool,
     t2_kind_delta,
     t2_kind_callback,
-    
+
     t2_kind_max  /* do not remove */
   };
 
 
   /* now generate handlers for the most simple fields */
-  typedef FT_Error  (*T2_Field_Reader)( T2_Parser*  parser );
+  typedef TT_Error  (*T2_Field_Reader)( T2_Parser*  parser );
 
-  typedef struct T2_Field_Handler_
+  typedef struct  T2_Field_Handler_
   {
     int              kind;
     int              code;
-    FT_UInt          offset;
-    FT_Byte          size;
+    TT_UInt          offset;
+    TT_Byte          size;
     T2_Field_Reader  reader;
-    FT_UInt          array_max;
-    FT_UInt          count_offset;
-    
+    TT_UInt          array_max;
+    TT_UInt          count_offset;
+
   } T2_Field_Handler;
 
 
-
-
-
   LOCAL_FUNC
-  void  T2_Parser_Init( T2_Parser*  parser, FT_UInt code, void*  object )
+  void  T2_Parser_Init( T2_Parser*  parser,
+                        TT_UInt     code,
+                        void*       object )
   {
-    MEM_Set(parser,0,sizeof(*parser));
+    MEM_Set( parser, 0, sizeof ( *parser ) );
+
     parser->top         = parser->stack;
     parser->object_code = code;
     parser->object      = object;
@@ -76,49 +77,53 @@
   }
 
 
-
-
-
-
-
   /* reads an integer */
   static
-  FT_Long   parse_t2_integer( FT_Byte* start,
-                              FT_Byte* limit )
+  TT_Long  parse_t2_integer( TT_Byte*  start,
+                             TT_Byte*  limit )
   {
-    FT_Byte* p   = start;
-    FT_Int   v   = *p++;
-    FT_Long  val = 0;
+    TT_Byte*  p   = start;
+    TT_Int    v   = *p++;
+    TT_Long   val = 0;
 
-    if (v == 28)
+
+    if ( v == 28 )
     {
-      if ( p+2 > limit ) goto Bad;
-      val = (FT_Short)(((FT_Int)p[0] << 8) | p[1]);
+      if ( p + 2 > limit )
+        goto Bad;
+
+      val = (TT_Short)( ( (TT_Int)p[0] << 8 ) | p[1] );
       p  += 2;
     }
-    else if (v == 29)
+    else if ( v == 29 )
     {
-      if ( p+4 > limit ) goto Bad;
-      val = ((FT_Long)p[0] << 24) |
-            ((FT_Long)p[1] << 16) |
-            ((FT_Long)p[2] <<  8) | p[3];
+      if ( p + 4 > limit )
+        goto Bad;
+
+      val = ( (TT_Long)p[0] << 24 ) |
+            ( (TT_Long)p[1] << 16 ) |
+            ( (TT_Long)p[2] <<  8 ) | p[3];
       p += 4;
     }
-    else if (v < 247)
+    else if ( v < 247 )
     {
       val = v - 139;
     }
-    else if (v < 251)
+    else if ( v < 251 )
     {
-      if (p+1 > limit) goto Bad;
-      val = (v-247)*256 + p[0]+108;
-      p  ++;
+      if ( p + 1 > limit )
+        goto Bad;
+
+      val = ( v - 247 ) * 256 + p[0] + 108;
+      p++;
     }
     else
     {
-      if (p+1 > limit) goto Bad;
-      val = -(v-251)*256 - p[0]-108;
-      p  ++;
+      if ( p + 1 > limit )
+        goto Bad;
+
+      val = -( v - 251 ) * 256 - p[0] - 108;
+      p++;
     }
 
   Exit:
@@ -132,16 +137,17 @@
 
   /* reads a real */
   static
-  FT_Fixed  parse_t2_real( FT_Byte*  start,
-                           FT_Byte*  limit,
-                           FT_Int    power_ten )
+  TT_Fixed  parse_t2_real( TT_Byte*  start,
+                           TT_Byte*  limit,
+                           TT_Int    power_ten )
   {
-    FT_Byte*  p    = start;
-    FT_Long   num, divider, result, exp;
-    FT_Int    sign = 0, exp_sign = 0;
-    FT_Byte   nib;
-    FT_Byte   phase;
+    TT_Byte*  p    = start;
+    TT_Long   num, divider, result, exp;
+    TT_Int    sign = 0, exp_sign = 0;
+    TT_Byte   nib;
+    TT_Byte   phase;
 
+
     result  = 0;
     num     = 0;
     divider = 1;
@@ -149,62 +155,72 @@
     /* first of all, read the integer part */
     phase = 4;
     p--;
+
     for (;;)
     {
       /* read one nibble at a time */
-      if (phase && ++p >= limit) goto Bad;
-      nib   = (p[0] >> phase) & 0xF;
-      phase = 4-phase;
+      if ( phase && ++p >= limit )
+        goto Bad;
 
-      if (nib == 0xE)
+      nib   = ( p[0] >> phase ) & 0xF;
+      phase = 4 - phase;
+
+      if ( nib == 0xE )
         sign = 1;
-      else if (nib > 9)
+      else if ( nib > 9 )
         break;
       else
-        result = result*10 + nib;
+        result = result * 10 + nib;
     }
 
     /* read decimal part, if any */
-    if (nib == 0xa)
+    if ( nib == 0xa )
       for (;;)
       {
         /* read one nibble at a time */
-        if (!phase && ++p >= limit) goto Bad;
-        phase = 4-phase;
-        nib   = (p[0] >> phase) & 0xF;
+        if ( !phase && ++p >= limit )
+          goto Bad;
 
-        if (nib >= 10)
+        phase = 4 - phase;
+        nib   = ( p[0] >> phase ) & 0xF;
+
+        if ( nib >= 10 )
           break;
 
         if (divider < 10000000L)
         {
-          num      = num*10 + nib;
+          num      = num * 10 + nib;
           divider *= 10;
         }
       }
 
     /* read exponent, if any */
-    if (nib == 12)
+    if ( nib == 12 )
     {
       exp_sign = 1;
       nib      = 11;
     }
-    if (nib == 11)
+
+    if ( nib == 11 )
     {
       exp = 0;
+
       for (;;)
       {
         /* read one nibble at a time */
-        if (!phase && ++p >= limit) goto Bad;
-        phase = 4-phase;
-        nib   = (p[0] >> phase) & 0xF;
+        if ( !phase && ++p >= limit )
+          goto Bad;
 
-        if (nib >= 10)
+        phase = 4 - phase;
+        nib   = ( p[0] >> phase ) & 0xF;
+
+        if ( nib >= 10 )
           break;
 
-        exp = exp*10 + nib;
+        exp = exp * 10 + nib;
       }
-      if (exp_sign)
+
+      if ( exp_sign )
         exp = -exp;
 
       power_ten += exp;
@@ -211,24 +227,26 @@
     }
 
     /* raise to power of ten if needed */
-    while (power_ten > 0)
+    while ( power_ten > 0 )
     {
-      result = result*10;
-      num    = num*10;
+      result = result * 10;
+      num    = num * 10;
+
       power_ten--;
     }
 
-    while (power_ten < 0)
+    while ( power_ten < 0 )
     {
-      result  = result/10;
-      divider = divider*10;
+      result  = result / 10;
+      divider = divider * 10;
+
       power_ten++;
     }
 
-    if (num)
+    if ( num )
       result += FT_DivFix( num, divider );
 
-    if (sign)
+    if ( sign )
       result = -result;
 
   Exit:
@@ -242,32 +260,34 @@
 
   /* reads a number, either integer or real */
   static
-  FT_Long  t2_parse_num( FT_Byte** d )
+  TT_Long  t2_parse_num( TT_Byte**  d )
   {
-    return ( **d == 30 ? (parse_t2_real   ( d[0], d[1], 0 ) >> 16):
-                          parse_t2_integer( d[0], d[1] ) );
+    return ( **d == 30 ? ( parse_t2_real( d[0], d[1], 0 ) >> 16 )
+                       : parse_t2_integer( d[0], d[1] ) );
   }
 
+
   /* reads a floating point number, either integer or real */
   static
-  FT_Fixed  t2_parse_fixed( FT_Byte** d )
+  TT_Fixed  t2_parse_fixed( TT_Byte**  d )
   {
-    return ( **d == 30 ? parse_t2_real( d[0], d[1], 0 ) :
-                         parse_t2_integer( d[0], d[1] ) << 16 );
+    return ( **d == 30 ? parse_t2_real( d[0], d[1], 0 )
+                       : parse_t2_integer( d[0], d[1] ) << 16 );
   }
 
 
-
   static
-  FT_Error  parse_font_matrix( T2_Parser*  parser )
+  TT_Error  parse_font_matrix( T2_Parser*  parser )
   {
     CFF_Top_Dict*  dict   = (CFF_Top_Dict*)parser->object;
-    FT_Matrix*     matrix = &dict->font_matrix;
-    FT_Byte**      data   = parser->stack;
-    FT_Error       error;
+    TT_Matrix*     matrix = &dict->font_matrix;
+    TT_Byte**      data   = parser->stack;
+    TT_Error       error;
 
+
     error = T2_Err_Stack_Underflow;
-    if (parser->top >= parser->stack + 4)
+
+    if ( parser->top >= parser->stack + 4 )
     {
       matrix->xx = t2_parse_fixed( data++ );
       matrix->yx = t2_parse_fixed( data++ );
@@ -275,20 +295,23 @@
       matrix->yy = t2_parse_fixed( data   );
       error = 0;
     }
+
     return error;
   }
 
 
   static
-  FT_Error  parse_font_bbox( T2_Parser*  parser )
+  TT_Error  parse_font_bbox( T2_Parser*  parser )
   {
     CFF_Top_Dict*  dict   = (CFF_Top_Dict*)parser->object;
     FT_BBox*       bbox   = &dict->font_bbox;
-    FT_Byte**      data   = parser->stack;
-    FT_Error       error;
+    TT_Byte**      data   = parser->stack;
+    TT_Error       error;
 
+
     error = T2_Err_Stack_Underflow;
-    if (parser->top >= parser->stack + 4)
+
+    if ( parser->top >= parser->stack + 4 )
     {
       bbox->xMin = t2_parse_num( data++ );
       bbox->yMin = t2_parse_num( data++ );
@@ -296,146 +319,176 @@
       bbox->yMax = t2_parse_num( data   );
       error = 0;
     }
+
     return error;
   }
 
 
   static
-  FT_Error  parse_private_dict( T2_Parser*  parser )
+  TT_Error  parse_private_dict( T2_Parser*  parser )
   {
-    CFF_Top_Dict*  dict   = (CFF_Top_Dict*)parser->object;
-    FT_Byte**      data   = parser->stack;
-    FT_Error       error;
+    CFF_Top_Dict*  dict = (CFF_Top_Dict*)parser->object;
+    TT_Byte**      data = parser->stack;
+    TT_Error       error;
 
+
     error = T2_Err_Stack_Underflow;
-    if (parser->top >= parser->stack + 2)
+
+    if ( parser->top >= parser->stack + 2 )
     {
       dict->private_size   = t2_parse_num( data++ );
       dict->private_offset = t2_parse_num( data   );
       error = 0;
     }
+
     return error;
   }
 
 
   static
-  FT_Error  parse_cid_ros( T2_Parser*  parser )
+  TT_Error  parse_cid_ros( T2_Parser*  parser )
   {
     CFF_Top_Dict*  dict   = (CFF_Top_Dict*)parser->object;
-    FT_Byte**      data   = parser->stack;
-    FT_Error       error;
+    TT_Byte**      data   = parser->stack;
+    TT_Error       error;
 
+
     error = T2_Err_Stack_Underflow;
-    if (parser->top >= parser->stack + 3)
+
+    if ( parser->top >= parser->stack + 3 )
     {
-      dict->cid_registry   = (FT_UInt)t2_parse_num( data++ );
-      dict->cid_ordering   = (FT_UInt)t2_parse_num( data++ );
-      dict->cid_supplement = (FT_ULong)t2_parse_num( data );
+      dict->cid_registry   = (TT_UInt)t2_parse_num( data++ );
+      dict->cid_ordering   = (TT_UInt)t2_parse_num( data++ );
+      dict->cid_supplement = (TT_ULong)t2_parse_num( data );
       error = 0;
     }
+
     return error;
   }
 
 
+#define T2_FIELD_NUM( code, name ) \
+          T2_FIELD( code, name, t2_kind_num )
+#define T2_FIELD_FIXED( code, name ) \
+          T2_FIELD( code, name, t2_kind_fixed )
+#define T2_FIELD_STRING( code, name ) \
+          T2_FIELD( code, name, t2_kind_string )
+#define T2_FIELD_BOOL( code, name ) \
+          T2_FIELD( code, name, t2_kind_bool )
+#define T2_FIELD_DELTA( code, name,max ) \
+          T2_FIELD( code, name, t2_kind_delta )
 
-#define T2_FIELD_NUM(code,name)        T2_FIELD( code, name, t2_kind_num )
-#define T2_FIELD_FIXED(code,name)      T2_FIELD( code, name, t2_kind_fixed )
-#define T2_FIELD_STRING(code,name)     T2_FIELD( code, name, t2_kind_string )
-#define T2_FIELD_BOOL(code,name)       T2_FIELD( code, name, t2_kind_bool )
-#define T2_FIELD_DELTA(code,name,max)  T2_FIELD( code, name, t2_kind_delta )
+#define T2_REF( s, f )  ( ((s*)0)->f )
 
-
-#define T2_REF(s,f)   (((s*)0)->f)
-
 #define T2_FIELD_CALLBACK( code, name ) \
-     { t2_kind_callback, code | T2CODE, 0, 0, parse_ ## name, 0, 0 },
-     
+          {                             \
+            t2_kind_callback,           \
+            code | T2CODE,              \
+            0, 0,                       \
+            parse_ ## name,             \
+            0, 0 },
+
 #undef  T2_FIELD
-#define T2_FIELD( code, name, kind )           \
-    { kind, code | T2CODE,                     \
-      (FT_UInt)(char*)&T2_REF( T2TYPE, name ), \
-      sizeof( T2_REF( T2TYPE, name ) ),        \
-      0 },
+#define T2_FIELD( code, name, kind )                 \
+          {                                          \
+            kind,                                    \
+            code | T2CODE,                           \
+            (TT_UInt)(char*)&T2_REF( T2TYPE, name ), \
+            sizeof( T2_REF( T2TYPE, name ) ),        \
+            0                                        \
+          },
 
-#undef T2_FIELD_DELTA
-#define T2_FIELD_DELTA( code, name, max )                     \
-    { t2_kind_delta, code | T2CODE,                           \
-      (FT_UInt)(char*)&T2_REF( T2TYPE, name ),                \
-      sizeof( T2_REF( T2TYPE, name ) ),                       \
-      0,                                                      \
-      max, (FT_UInt)(char*)&T2_REF( T2TYPE, num_ ## name ) },
+#undef  T2_FIELD_DELTA
+#define T2_FIELD_DELTA( code, name, max )                    \
+        {                                                    \
+          t2_kind_delta,                                     \
+          code | T2CODE,                                     \
+          (TT_UInt)(char*)&T2_REF( T2TYPE, name ),           \
+          sizeof( T2_REF( T2TYPE, name ) ),                  \
+          0,                                                 \
+          max,                                               \
+          (TT_UInt)(char*)&T2_REF( T2TYPE, num_ ## name )    \
+        },
 
-
 #define T2CODE_TOPDICT  0x1000
 #define T2CODE_PRIVATE  0x2000
 
   static const T2_Field_Handler  t2_field_handlers[] =
   {
-    #include <t2tokens.h>
+#include <t2tokens.h>
     { 0, 0, 0, 0, 0, 0, 0 }
   };
 
 
   LOCAL_FUNC
-  FT_Error  T2_Parser_Run( T2_Parser*  parser,
-                           FT_Byte*    start,
-                           FT_Byte*    limit )
+  TT_Error  T2_Parser_Run( T2_Parser*  parser,
+                           TT_Byte*    start,
+                           TT_Byte*    limit )
   {
-    FT_Byte*  p     = start;
-    FT_Error  error = 0;
-    
+    TT_Byte*  p     = start;
+    TT_Error  error = 0;
+
+
     parser->top    = parser->stack;
     parser->start  = start;
     parser->limit  = limit;
     parser->cursor = start;
-    
-    while (p < limit)
+
+    while ( p < limit )
     {
-      FT_Byte  v = *p;
+      TT_Byte  v = *p;
+
+
       if ( v >= 27 && v != 31 )
       {
-        /* its a number, we'll push its position on the stack */
-        if (parser->top - parser->stack >= T2_MAX_STACK_DEPTH)
+        /* it's a number; we will push its position on the stack */
+        if ( parser->top - parser->stack >= T2_MAX_STACK_DEPTH )
           goto Stack_Overflow;
 
         *parser->top ++ = p;
-        
+
         /* now, skip it */
-        if (v == 30)
+        if ( v == 30 )
         {
           /* skip real number */
           for (;;)
           {
-            if (p >= limit) goto Syntax_Error;
+            if ( p >= limit )
+              goto Syntax_Error;
             v = p[0] >> 4;
-            if (v == 15) break;
+            if ( v == 15 )
+              break;
             v = p[0] & 0xF;
-            if (v == 15) break;
+            if ( v == 15 )
+              break;
             p++;
           }
           p++;
         }
-        else if (v == 28) 
+        else if ( v == 28 )
           p += 2;
-        else if (v == 29)
+        else if ( v == 29 )
           p += 4;
-        else if (v > 246)
+        else if ( v > 246 )
           p += 1;
       }
       else
       {
-        /* this is not a number, hence it's an operator. Compute its code */
-        /* and look for it in our current list..                          */
-        FT_UInt                  code;
-        FT_Int                   num_args = parser->top - parser->stack;
+        /* this is not a number, hence it's an operator.  Compute its code */
+        /* and look for it in our current list.                            */
+
+        TT_UInt                  code;
+        TT_Int                   num_args = parser->top - parser->stack;
         const T2_Field_Handler*  field;
 
+
         /* first of all, a trivial check */
-        if ( num_args < 1 ) goto Stack_Underflow;
+        if ( num_args < 1 )
+          goto Stack_Underflow;
 
         *parser->top = p;
         code = v;
-        if (v == 12)
+        if ( v == 12 )
         {
           /* two byte operator */
           p++;
@@ -442,101 +495,112 @@
           code = 0x100 | p[0];
         }
         code = code | parser->object_code;
-        
+
         for ( field = t2_field_handlers; field->kind; field++ )
         {
-          if (field->code == code)
+          if ( field->code == code )
           {
-            /* we found our field's handler, read it.. */
-            FT_Long  val;
-            FT_Byte* q = (FT_Byte*)parser->object + field->offset;
-            
-            switch (field->kind)
+            /* we found our field's handler; read it */
+            TT_Long   val;
+            TT_Byte*  q = (TT_Byte*)parser->object + field->offset;
+
+
+            switch ( field->kind )
             {
-              case t2_kind_bool:
-              case t2_kind_string:
-              case t2_kind_num:
-                       val = t2_parse_num( parser->stack );
-                       goto Store_Number;
-                       
-              case t2_kind_fixed:
-                       val = t2_parse_fixed( parser->stack );
-                       
-                 Store_Number:                       
-                       switch (field->size)
-                       {
-                         case 1: *(FT_Byte*) q = (FT_Byte)val; break;
-                         case 2: *(FT_Short*)q = (FT_Short)val; break;
-                         default: *(FT_Long*)q = val;
-                       }
-                       break;
-              
-              
-              case t2_kind_delta:
-                       {
-                         FT_Byte*  qcount = (FT_Byte*)parser->object +
-                                                field->count_offset;
+            case t2_kind_bool:
+            case t2_kind_string:
+            case t2_kind_num:
+              val = t2_parse_num( parser->stack );
+              goto Store_Number;
 
-                         FT_Long   val;
-                         FT_Byte** data = parser->stack;
-                                                
-                         if (num_args > field->array_max)
-                           num_args = field->array_max;
-                         
-                         /* store count */
-                         *qcount = (FT_Byte)num_args;
-                         
-                         val = 0;
-                         while (num_args > 0)
-                         {
-                           val += t2_parse_num( data++ );
-                           switch (field->size)
-                           {
-                             case 1: *(FT_Byte*) q = (FT_Byte)val; break;
-                             case 2: *(FT_Short*)q = (FT_Short)val; break;
-                             default: *(FT_Long*)q = val; 
-                           }
-                           q += field->size;
-                           num_args--;
-                         }
-                       }
-                       break;
-              
-              default:  /* callback */
-                  error = field->reader( parser );
-                  if (error) goto Exit;
+            case t2_kind_fixed:
+              val = t2_parse_fixed( parser->stack );
+
+            Store_Number:
+              switch ( field->size )
+              {
+              case 1:
+                *(TT_Byte*)q = (TT_Byte)val;
+                break;
+              case 2:
+                *(TT_Short*)q = (TT_Short)val;
+                break;
+              default:
+                *(TT_Long*)q = val;
+              }
+              break;
+
+            case t2_kind_delta:
+              {
+                TT_Byte*  qcount = (TT_Byte*)parser->object +
+                                     field->count_offset;
+
+                TT_Long   val;
+                TT_Byte** data = parser->stack;
+
+
+                if ( num_args > field->array_max )
+                  num_args = field->array_max;
+
+                /* store count */
+                *qcount = (TT_Byte)num_args;
+
+                val = 0;
+                while ( num_args > 0 )
+                {
+                  val += t2_parse_num( data++ );
+                  switch ( field->size )
+                  {
+                  case 1:
+                    *(TT_Byte*)q = (TT_Byte)val;
+                    break;
+                  case 2:
+                    *(TT_Short*)q = (TT_Short)val;
+                    break;
+                  default:
+                    *(TT_Long*)q = val;
+                  }
+
+                  q += field->size;
+                  num_args--;
+                }
+              }
+              break;
+
+            default:  /* callback */
+              error = field->reader( parser );
+              if ( error )
+                goto Exit;
             }
             goto Found;
           }
         }
 
-        /* this is an unknown operator, or it is unsupported, we will ignore */
-        /* it for now...                                                     */
+        /* this is an unknown operator, or it is unsupported; */
+        /* we will ignore it for now.                         */
 
-  Found:        
+      Found:
         /* clear stack */
         parser->top = parser->stack;
       }
       p++;
     }
+
   Exit:
     return error;
-    
+
   Stack_Overflow:
-    error = FT_Err_Invalid_Argument;
+    error = T2_Err_Invalid_Argument;
     goto Exit;
-    
+
   Stack_Underflow:
-    error = FT_Err_Invalid_Argument;
+    error = T2_Err_Invalid_Argument;
     goto Exit;
-    
+
   Syntax_Error:
-    error = FT_Err_Invalid_Argument;
+    error = T2_Err_Invalid_Argument;
     goto Exit;
-    
-  }                           
+  }
 
 
-
-
-
+/* END */
--- a/src/cff/t2parse.h
+++ b/src/cff/t2parse.h
@@ -1,3 +1,21 @@
+/***************************************************************************/
+/*                                                                         */
+/*  t2parse.h                                                              */
+/*                                                                         */
+/*    OpenType parser (specification).                                     */
+/*                                                                         */
+/*  Copyright 1996-2000 by                                                 */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
 #ifndef T2PARSE_H
 #define T2PARSE_H
 
@@ -6,31 +24,47 @@
 
 #define T2_MAX_STACK_DEPTH  96
 
-#define T2CODE_TOPDICT   0x1000
-#define T2CODE_PRIVATE   0x2000
+#define T2CODE_TOPDICT  0x1000
+#define T2CODE_PRIVATE  0x2000
 
-  typedef struct T2_Parser_
+
+#ifdef __cplusplus
+  extern "C" {
+#endif
+
+
+  typedef struct  T2_Parser_
   {
-    FT_Byte*   start;
-    FT_Byte*   limit;
-    FT_Byte*   cursor;
-    
-    FT_Byte*   stack[ T2_MAX_STACK_DEPTH+1 ];
-    FT_Byte**  top;
-    
-    FT_UInt    object_code;
+    TT_Byte*   start;
+    TT_Byte*   limit;
+    TT_Byte*   cursor;
+
+    TT_Byte*   stack[T2_MAX_STACK_DEPTH + 1];
+    TT_Byte**  top;
+
+    TT_UInt    object_code;
     void*      object;
-    
+
   } T2_Parser;
 
 
   LOCAL_DEF
-  void  T2_Parser_Init( T2_Parser*  parser, FT_UInt code, void*  object );
+  void  T2_Parser_Init( T2_Parser*  parser,
+                        TT_UInt     code,
+                        void*       object );
 
-
   LOCAL_DEF
-  FT_Error  T2_Parser_Run( T2_Parser*  parser,
-                           FT_Byte*    start,
-                           FT_Byte*    limit );
+  TT_Error  T2_Parser_Run( T2_Parser*  parser,
+                           TT_Byte*    start,
+                           TT_Byte*    limit );
 
+
+#ifdef __cplusplus
+  }
+#endif
+
+
 #endif /* T2PARSE_H */
+
+
+/* END */
--- a/src/cff/t2tokens.h
+++ b/src/cff/t2tokens.h
@@ -1,4 +1,21 @@
+/***************************************************************************/
+/*                                                                         */
+/*  t2tokens.h                                                             */
+/*                                                                         */
+/*    OpenType token definitions (specification only).                     */
+/*                                                                         */
+/*  Copyright 1996-2000 by                                                 */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
 
+
 #undef  T2TYPE
 #undef  T2CODE
 #define T2TYPE  CFF_Top_Dict
@@ -28,7 +45,7 @@
   T2_FIELD_STRING  ( 0x115, postscript )
   T2_FIELD_STRING  ( 0x116, base_font_name )
 
-#if 0  
+#if 0
   T2_FIELD_DELTA   ( 0x117, base_font_blend, 16 )
   T2_FIELD_CALLBACK( 0x118, multiple_master )
   T2_FIELD_CALLBACK( 0x119, blend_axit_types )
@@ -48,8 +65,9 @@
   T2_FIELD_NUM     ( 0x127, chameleon )
 #endif
 
-#undef T2TYPE
-#undef T2CODE
+
+#undef  T2TYPE
+#undef  T2CODE
 #define T2TYPE  CFF_Private
 #define T2CODE  T2CODE_PRIVATE
 
@@ -74,3 +92,5 @@
   T2_FIELD_NUM  ( 20, default_width )
   T2_FIELD_NUM  ( 21, nominal_width )
 
+
+/* END */
--- a/src/cid/cidafm.c
+++ b/src/cid/cidafm.c
@@ -1,51 +1,77 @@
-/***************************************************************************
- *
- * t1afm.c  - support for reading Type 1 AFM files
- *
- *
- ***************************************************************************/
+/***************************************************************************/
+/*                                                                         */
+/*  cidafm.c                                                               */
+/*                                                                         */
+/*    AFM support for CID-keyed fonts (body).                              */
+/*                                                                         */
+/*  Copyright 1996-2000 by                                                 */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
 
+
 #include <cidafm.h>
 #include <freetype/internal/ftstream.h>
 #include <freetype/internal/t1types.h>
-#include <stdlib.h>  /* for qsort */
+#include <freetype/internal/t1errors.h>
 
+#include <stdlib.h>  /* for qsort()   */
+#include <string.h>  /* for strcmp()  */
+#include <ctype.h>   /* for isalnum() */
+
+
   LOCAL_FUNC
-  void  CID_Done_AFM( FT_Memory memory, T1_AFM*  afm )
+  void  CID_Done_AFM( FT_Memory memory,
+                      T1_AFM*   afm )
   {
     FREE( afm->kern_pairs );
     afm->num_pairs = 0;
   }
 
+
 #undef  IS_KERN_PAIR
-#define IS_KERN_PAIR(p)  ( p[0] == 'K'  &&  p[1] == 'P' )
+#define IS_KERN_PAIR( p )  ( p[0] == 'K' && p[1] == 'P' )
 
-#define IS_ALPHANUM(c)  ( (c >= 'A' && c <= 'Z') || \
-                          (c >= 'a' && c <= 'z') || \
-                          (c >= '0' && c <= '9') || \
-                          (c == '_' && c == '.') )
+#define IS_ALPHANUM( c )  ( isalnum( c ) || \
+                            c == '_'     || \
+                            c == '.'     )
 
- /* read a glyph name and return the equivalent glyph index */
+
+  /* read a glyph name and return the equivalent glyph index */
   static
-  FT_UInt  afm_atoindex( FT_Byte*  *start, FT_Byte*  limit, T1_Font*  type1 )
+  T1_UInt  afm_atoindex( T1_Byte**  start,
+                         T1_Byte*   limit,
+                         T1_Font*   type1 )
   {
-    FT_Byte* p = *start;
-    FT_Int   len;
-    FT_UInt  result = 0;
-    char     temp[64];
+    T1_Byte*  p = *start;
+    T1_Int    len;
+    T1_UInt   result = 0;
+    char      temp[64];
 
+
     /* skip whitespace */
-    while ( (*p == ' ' || *p == '\t' || *p == ':' || *p == ';') && p < limit )
+    while ( ( *p == ' ' || *p == '\t' || *p == ':' || *p == ';' ) &&
+            p < limit                                             )
       p++;
     *start = p;
 
     /* now, read glyph name */
-    while ( IS_ALPHANUM(*p) && p < limit ) p++;
+    while ( IS_ALPHANUM( *p ) && p < limit )
+      p++;
+
     len = p - *start;
-    if (len > 0 && len < 64)
+
+    if ( len > 0 && len < 64 )
     {
-      FT_Int  n;
+      T1_Int  n;
 
+
       /* copy glyph name to intermediate array */
       MEM_Copy( temp, *start, len );
       temp[len] = 0;
@@ -55,7 +81,8 @@
       {
         char*  gname = (char*)type1->glyph_names[n];
 
-        if ( gname && gname[0] == temp[0] && strcmp(gname,temp) == 0 )
+
+        if ( gname && gname[0] == temp[0] && strcmp( gname, temp ) == 0 )
         {
           result = n;
           break;
@@ -67,16 +94,18 @@
   }
 
 
- /* read an integer */
+  /* read an integer */
   static
-  int  afm_atoi( FT_Byte** start, FT_Byte*  limit )
+  int  afm_atoi( T1_Byte**  start,
+                 T1_Byte*   limit )
   {
-    FT_Byte*  p    = *start;
+    T1_Byte*  p    = *start;
     int       sum  = 0;
     int       sign = 1;
 
+
     /* skip everything that is not a number */
-    while ( p < limit && (*p < '0' || *p > '9') )
+    while ( p < limit && !isdigit( *p ) )
     {
       sign = 1;
       if (*p == '-')
@@ -85,70 +114,75 @@
       p++;
     }
 
-    while ( p < limit && (*p >= '0' && *p < '9') )
+    while ( p < limit && isdigit( *p ) )
     {
-      sum = sum*10 + (*p - '0');
+      sum = sum * 10 + ( *p - '0' );
       p++;
     }
     *start = p;
-    return sum*sign;
+
+    return sum * sign;
   }
 
 
 #undef  KERN_INDEX
-#define KERN_INDEX(g1,g2)   (((FT_ULong)g1 << 16) | g2)
+#define KERN_INDEX( g1, g2 ) ( ( (T1_ULong)g1 << 16 ) | g2 )
 
- /* compare two kerning pairs */
+
+  /* compare two kerning pairs */
   static
-  int  compare_kern_pairs( const void* a, const void* b )
+  int  compare_kern_pairs( const void*  a,
+                           const void*  b )
   {
     T1_Kern_Pair*  pair1 = (T1_Kern_Pair*)a;
     T1_Kern_Pair*  pair2 = (T1_Kern_Pair*)b;
 
-    FT_ULong  index1 = KERN_INDEX(pair1->glyph1,pair1->glyph2);
-    FT_ULong  index2 = KERN_INDEX(pair2->glyph1,pair2->glyph2);
+    T1_ULong  index1 = KERN_INDEX( pair1->glyph1, pair1->glyph2 );
+    T1_ULong  index2 = KERN_INDEX( pair2->glyph1, pair2->glyph2 );
 
+
     return ( index1 - index2 );
   }
 
 
- /* parse an AFM file - for now, only read the kerning pairs */
+  /* parse an AFM file - for now, only read the kerning pairs */
   LOCAL_FUNC
-  FT_Error  CID_Read_AFM( FT_Face   t1_face,
-                         FT_Stream stream )
+  T1_Error  CID_Read_AFM( FT_Face    t1_face,
+                          FT_Stream  stream )
   {
-    FT_Error       error;
+    T1_Error       error;
     FT_Memory      memory = stream->memory;
-    FT_Byte*       start;
-    FT_Byte*       limit;
-    FT_Byte*       p;
-    FT_Int         count = 0;
+    T1_Byte*       start;
+    T1_Byte*       limit;
+    T1_Byte*       p;
+    T1_Int         count = 0;
     T1_Kern_Pair*  pair;
     T1_Font*       type1 = &((T1_Face)t1_face)->type1;
     T1_AFM*        afm   = 0;
 
-    if ( ACCESS_Frame(stream->size) )
+
+    if ( ACCESS_Frame( stream->size ) )
       return error;
 
-    start = (FT_Byte*)stream->cursor;
-    limit = (FT_Byte*)stream->limit;
+    start = (T1_Byte*)stream->cursor;
+    limit = (T1_Byte*)stream->limit;
     p     = start;
 
     /* we are now going to count the occurences of "KP" or "KPX" in */
-    /* the AFM file..                                               */
+    /* the AFM file.                                                */
     count = 0;
-    for ( p = start; p < limit-3; p++ )
+    for ( p = start; p < limit - 3; p++ )
     {
-      if ( IS_KERN_PAIR(p) )
+      if ( IS_KERN_PAIR( p ) )
         count++;
     }
 
-   /* Actually, kerning pairs are simply optional !! */
-    if (count == 0)
+    /* Actually, kerning pairs are simply optional! */
+    if ( count == 0 )
       goto Exit;
 
     /* allocate the pairs */
-    if ( ALLOC(       afm, sizeof(*afm ) )                   ||
+    if ( ALLOC( afm, sizeof ( *afm ) )                       ||
          ALLOC_ARRAY( afm->kern_pairs, count, T1_Kern_Pair ) )
       goto Exit;
 
@@ -159,15 +193,17 @@
     /* save in face object */
     ((T1_Face)t1_face)->afm_data = afm;
 
-    for ( p = start; p < limit-3; p++ )
+    for ( p = start; p < limit - 3; p++ )
     {
-      if ( IS_KERN_PAIR(p) )
+      if ( IS_KERN_PAIR( p ) )
       {
-        FT_Byte*  q;
+        T1_Byte*  q;
 
+
         /* skip keyword (KP or KPX) */
-        q = p+2;
-        if (*q == 'X') q++;
+        q = p + 2;
+        if ( *q == 'X' )
+          q++;
 
         pair->glyph1    = afm_atoindex( &q, limit, type1 );
         pair->glyph2    = afm_atoindex( &q, limit, type1 );
@@ -182,37 +218,41 @@
     }
 
     /* now, sort the kern pairs according to their glyph indices */
-    qsort( afm->kern_pairs, count, sizeof(T1_Kern_Pair), compare_kern_pairs );
+    qsort( afm->kern_pairs, count, sizeof ( T1_Kern_Pair ),
+           compare_kern_pairs );
 
   Exit:
-    if (error)
+    if ( error )
       FREE( afm );
 
     FORGET_Frame();
+
     return error;
   }
 
 
- /* find the kerning for a given glyph pair */
+  /* find the kerning for a given glyph pair */
   LOCAL_FUNC
   void  CID_Get_Kerning( T1_AFM*     afm,
-                        FT_UInt     glyph1,
-                        FT_UInt     glyph2,
-                        FT_Vector*  kerning )
+                         T1_UInt     glyph1,
+                         T1_UInt     glyph2,
+                         T1_Vector*  kerning )
   {
     T1_Kern_Pair  *min, *mid, *max;
-    FT_ULong       index = KERN_INDEX(glyph1,glyph2);
+    T1_ULong       index = KERN_INDEX( glyph1, glyph2 );
 
+
     /* simple binary search */
     min = afm->kern_pairs;
-    max = min + afm->num_pairs-1;
+    max = min + afm->num_pairs - 1;
 
-    while (min <= max)
+    while ( min <= max )
     {
-      FT_ULong  midi;
+      T1_ULong  midi;
 
-      mid = min + (max-min)/2;
-      midi = KERN_INDEX(mid->glyph1,mid->glyph2);
+
+      mid = min + ( max - min ) / 2;
+      midi = KERN_INDEX( mid->glyph1, mid->glyph2 );
       if ( midi == index )
       {
         *kerning = mid->kerning;
@@ -219,10 +259,15 @@
         return;
       }
 
-      if ( midi < index ) min = mid+1;
-                     else max = mid-1;
+      if ( midi < index )
+        min = mid + 1;
+      else
+        max = mid - 1;
     }
+
     kerning->x = 0;
     kerning->y = 0;
   }
 
+
+/* END */
--- a/src/cid/cidafm.h
+++ b/src/cid/cidafm.h
@@ -1,49 +1,61 @@
-/***************************************************************************
- *
- * t1afm.h  - support for reading Type 1 AFM files
- *
- *
- ***************************************************************************/
+/***************************************************************************/
+/*                                                                         */
+/*  cidafm.h                                                               */
+/*                                                                         */
+/*    AFM support for CID-keyed fonts (specification).                     */
+/*                                                                         */
+/*  Copyright 1996-2000 by                                                 */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
 
+
 #ifndef T1AFM_H
 #define T1AFM_H
 
-#include <freetype/internal/ftobjs.h>
+#include <cidobjs.h>
 
-/* In this version, we only read the kerning table from the */
-/* AFM file. We may add support for ligatures a bit later.. */
+  typedef struct  T1_Kern_Pair_
+  {
+    T1_UInt    glyph1;
+    T1_UInt    glyph2;
+    T1_Vector  kerning;
 
-typedef struct T1_Kern_Pair_
-{
-  FT_UInt   glyph1;
-  FT_UInt   glyph2;
-  FT_Vector kerning;
+  } T1_Kern_Pair;
 
-} T1_Kern_Pair;
+  typedef struct  T1_AFM_
+  {
+    T1_Int         num_pairs;
+    T1_Kern_Pair*  kern_pairs;
 
+  } T1_AFM;
 
-typedef struct T1_AFM_
-{
-  FT_Int        num_pairs;
-  T1_Kern_Pair* kern_pairs;
 
-} T1_AFM;
-
 #if 0
 
 LOCAL_DEF
-FT_Error  CID_Read_AFM( FT_Face   face,
+T1_Error  CID_Read_AFM( FT_Face   face,
                         FT_Stream stream );
 
 LOCAL_DEF
-void      CID_Done_AFM( FT_Memory  memory,
-                        T1_AFM*    afm );
+void  CID_Done_AFM( FT_Memory  memory,
+                    T1_AFM*    afm );
 
 LOCAL_DEF
 void  CID_Get_Kerning( T1_AFM*     afm,
-                       FT_UInt     glyph1,
-                       FT_UInt     glyph2,
-                       FT_Vector*  kerning );
+                       T1_UInt     glyph1,
+                       T1_UInt     glyph2,
+                       T1_Vector*  kerning );
+
 #endif
 
 #endif /* T1AFM_H */
+
+
+/* END */
--- a/src/sfnt/sfobjs.c
+++ b/src/sfnt/sfobjs.c
@@ -16,10 +16,11 @@
 /***************************************************************************/
 
 
-#include <freetype/internal/ftobjs.h>
+#include <sfobjs.h>
 #include <freetype/internal/sfnt.h>
 #include <freetype/internal/psnames.h>
 #include <freetype/ttnameid.h>
+#include <freetype/internal/tterrors.h>
 
 
   /*************************************************************************/
@@ -49,13 +50,13 @@
   /*    Character string.  NULL if no name is present.                     */
   /*                                                                       */
   static
-  FT_String*  Get_Name( TT_Face    face,
-                        FT_UShort  nameid )
+  TT_String*  Get_Name( TT_Face    face,
+                        TT_UShort  nameid )
   {
     FT_Memory    memory = face->root.memory;
-    FT_UShort    n;
+    TT_UShort    n;
     TT_NameRec*  rec;
-    FT_Bool      wide_chars = 1;
+    TT_Bool      wide_chars = 1;
 
 
     rec = face->name_table.names;
@@ -64,7 +65,7 @@
       if ( rec->nameID == nameid )
       {
         /* found the name - now create an ASCII string from it */
-        FT_Bool  found = 0;
+        TT_Bool  found = 0;
 
 
         /* test for Microsoft English language */
@@ -88,8 +89,8 @@
         /* found a Unicode name */
         if ( found )
         {
-          FT_String*  string;
-          FT_UInt     len;
+          TT_String*  string;
+          TT_UInt     len;
 
 
           if ( wide_chars )
@@ -172,13 +173,13 @@
 
 
   LOCAL_FUNC
-  FT_Error  SFNT_Init_Face( FT_Stream      stream,
+  TT_Error  SFNT_Init_Face( FT_Stream      stream,
                             TT_Face        face,
                             TT_Int         face_index,
                             TT_Int         num_params,
                             FT_Parameter*  params )
   {
-    FT_Error            error;
+    TT_Error            error;
     SFNT_Interface*     sfnt;
     PSNames_Interface*  psnames;
     SFNT_Header         sfnt_header;
@@ -249,7 +250,7 @@
 
 
 #undef  LOAD_
-#define LOAD_( x )  ( (error = sfnt->load_##x( face, stream )) != FT_Err_Ok )
+#define LOAD_( x )  ( (error = sfnt->load_##x( face, stream )) != TT_Err_Ok )
 
 
   LOCAL_FUNC
@@ -259,7 +260,7 @@
                             TT_Int         num_params,
                             FT_Parameter*  params )
   {
-    FT_Error         error;
+    TT_Error         error;
     SFNT_Interface*  sfnt = (SFNT_Interface*)face->sfnt;
 
 
@@ -268,10 +269,10 @@
          LOAD_( max_profile )   ||
 
          /* load the `hhea' & `hmtx' tables at once */
-         ( error = sfnt->load_metrics( face, stream, 0 ) ) != FT_Err_Ok  ||
+         ( error = sfnt->load_metrics( face, stream, 0 ) ) != TT_Err_Ok  ||
 
          /* try to load the `vhea' & `vmtx' at once if present */
-         ( error = sfnt->load_metrics( face, stream, 1 ) ) != FT_Err_Ok  ||
+         ( error = sfnt->load_metrics( face, stream, 1 ) ) != TT_Err_Ok  ||
 
          LOAD_( charmaps )      ||
          LOAD_( names )         ||
@@ -294,7 +295,7 @@
       goto Exit;
 
 #ifdef TT_CONFIG_OPTION_EXTEND_ENGINE
-    if ( ( error = TT_Extension_Create( face ) ) != FT_Err_Ok )
+    if ( ( error = TT_Extension_Create( face ) ) != TT_Err_Ok )
       goto Exit;
 #endif
 
@@ -304,7 +305,7 @@
     /* now set up root fields */
     {
       FT_Face     root = &face->root;
-      FT_Int      flags;
+      TT_Int      flags;
       TT_CharMap  charmap;
       TT_Int      n;
       FT_Memory   memory;
@@ -377,8 +378,8 @@
 
       for ( n = 0; n < root->num_charmaps; n++, charmap++ )
       {
-        FT_Int  platform = charmap->cmap.platformID;
-        FT_Int  encoding = charmap->cmap.platformEncodingID;
+        TT_Int  platform = charmap->cmap.platformID;
+        TT_Int  encoding = charmap->cmap.platformEncodingID;
 
 
         charmap->root.face        = (FT_Face)face;
@@ -501,7 +502,7 @@
     /* freeing the character mapping tables */
     if (sfnt && sfnt->load_charmaps )
     {
-      FT_UShort  n;
+      TT_UShort  n;
 
 
       for ( n = 0; n < face->num_charmaps; n++ )
--- a/src/sfnt/sfobjs.h
+++ b/src/sfnt/sfobjs.h
@@ -24,7 +24,7 @@
 
 
   LOCAL_DEF
-  FT_Error  SFNT_Init_Face( FT_Stream      stream,
+  TT_Error  SFNT_Init_Face( FT_Stream      stream,
                             TT_Face        face,
                             TT_Int         face_index,
                             TT_Int         num_params,
@@ -31,7 +31,7 @@
                             FT_Parameter*  params );
 
   LOCAL_DEF
-  FT_Error  SFNT_Load_Face( FT_Stream      stream,
+  TT_Error  SFNT_Load_Face( FT_Stream      stream,
                             TT_Face        face,
                             TT_Int         face_index,
                             TT_Int         num_params,
--- a/src/sfnt/ttload.c
+++ b/src/sfnt/ttload.c
@@ -157,9 +157,9 @@
                                  TT_Long       face_index,
                                  SFNT_Header*  sfnt )
   {
-    TT_Error  error;
-    TT_ULong  format_tag;
-    FT_Memory memory = stream->memory;
+    TT_Error   error;
+    TT_ULong   format_tag;
+    FT_Memory  memory = stream->memory;
 
     const FT_Frame_Field  sfnt_header_fields[] =
     {
--- a/src/sfnt/ttpost.c
+++ b/src/sfnt/ttpost.c
@@ -62,7 +62,7 @@
 
   /* the 258 default Mac PS glyph names */
 
-  FT_String*  TT_Post_Default_Names[258] =
+  TT_String*  TT_Post_Default_Names[258] =
   {
     /*   0 */
     ".notdef", ".null", "CR", "space", "exclam",
--- a/src/sfnt/ttsbit.c
+++ b/src/sfnt/ttsbit.c
@@ -63,18 +63,18 @@
   /*                                                                       */
   static
   void  blit_sbit( FT_Bitmap*  target,
-                   FT_Byte*    source,
-                   FT_Int      line_bits,
-                   FT_Bool     byte_padded,
-                   FT_Int      x_offset,
-                   FT_Int      y_offset )
+                   TT_Byte*    source,
+                   TT_Int      line_bits,
+                   TT_Bool     byte_padded,
+                   TT_Int      x_offset,
+                   TT_Int      y_offset )
   {
-    FT_Byte*   line_buff;
-    FT_Int     line_incr;
-    FT_Int     height;
+    TT_Byte*   line_buff;
+    TT_Int     line_incr;
+    TT_Int     height;
 
-    FT_UShort  acc;
-    FT_Byte    loaded;
+    TT_UShort  acc;
+    TT_Byte    loaded;
 
 
     /* first of all, compute starting write position */
@@ -102,10 +102,10 @@
 
     for ( height = target->rows; height > 0; height-- )
     {
-      FT_Byte*  cur   = line_buff;    /* current write cursor          */
-      FT_Int    count = line_bits;    /* # of bits to extract per line */
-      FT_Byte   shift = x_offset & 7; /* current write shift           */
-      FT_Byte   space = 8 - shift;
+      TT_Byte*  cur   = line_buff;    /* current write cursor          */
+      TT_Int    count = line_bits;    /* # of bits to extract per line */
+      TT_Byte   shift = x_offset & 7; /* current write shift           */
+      TT_Byte   space = 8 - shift;
 
 
       /* first of all, read individual source bytes */
@@ -115,18 +115,18 @@
         {
           do
           {
-            FT_Byte  val;
+            TT_Byte  val;
 
 
             /* ensure that there are at least 8 bits in the accumulator */
             if ( loaded < 8 )
             {
-              acc    |= (FT_UShort)*source++ << ( 8 - loaded );
+              acc    |= (TT_UShort)*source++ << ( 8 - loaded );
               loaded += 8;
             }
 
             /* now write one byte */
-            val = (FT_Byte)( acc >> 8 );
+            val = (TT_Byte)( acc >> 8 );
             if ( shift )
             {
               cur[0] |= val >> shift;
@@ -150,18 +150,18 @@
       /* now write remaining bits (count < 8) */
       if ( count > 0 )
       {
-        FT_Byte  val;
+        TT_Byte  val;
 
 
         /* ensure that there are at least `count' bits in the accumulator */
         if ( loaded < count )
         {
-          acc    |= (FT_UShort)*source++ << ( 8 - loaded );
+          acc    |= (TT_UShort)*source++ << ( 8 - loaded );
           loaded += 8;
         }
 
         /* now write remaining bits */
-        val     = ( (FT_Byte)( acc >> 8 ) ) & ~( 0xFF >> count );
+        val     = ( (TT_Byte)( acc >> 8 ) ) & ~( 0xFF >> count );
         cur[0] |= val >> shift;
 
         if ( count > space )
@@ -1148,7 +1148,7 @@
       /* don't forget to multiply `x_offset' by `map->pix_bits' as */
       /* the sbit blitter doesn't make a difference between pixmap */
       /* depths.                                                   */
-      blit_sbit( map, (FT_Byte*)stream->cursor, line_bits, pad_bytes,
+      blit_sbit( map, (TT_Byte*)stream->cursor, line_bits, pad_bytes,
                  x_offset * pix_bits, y_offset );
 
       FORGET_Frame();
@@ -1403,8 +1403,8 @@
     if ( strike->flags & 1 )
     {
       /* in case of a horizontal strike only */
-      FT_Int  advance;
-      FT_Int  top;
+      TT_Int  advance;
+      TT_Int  top;
 
 
       advance = strike->hori.ascender - strike->hori.descender;
--- a/src/truetype/ttdriver.c
+++ b/src/truetype/ttdriver.c
@@ -48,7 +48,6 @@
   /*************************************************************************/
 
 
-
 #undef  PAIR_TAG
 #define PAIR_TAG( left, right )  ( ( (TT_ULong)left << 16 ) | \
                                      (TT_ULong)right        )
@@ -396,6 +395,7 @@
   /*************************************************************************/
   /*************************************************************************/
   /*************************************************************************/
+
 
   static
   FTDriver_Interface  tt_get_interface( TT_Driver    driver,
--- a/src/truetype/ttgload.c
+++ b/src/truetype/ttgload.c
@@ -681,7 +681,7 @@
       do
       {
         TT_Fixed  xx, xy, yy, yx;
-        FT_UInt   total_subglyphs;
+        TT_UInt   total_subglyphs;
 
 
         /* grow the `glyph->subglyphs' table if necessary */
@@ -689,7 +689,7 @@
 
         if ( total_subglyphs >= glyph->max_subglyphs )
         {
-          FT_UInt    new_max = glyph->max_subglyphs;
+          TT_UInt    new_max = glyph->max_subglyphs;
           FT_Memory  memory = loader->face->root.memory;
 
 
@@ -1113,8 +1113,9 @@
       if ( !( loader->load_flags & FT_LOAD_NO_SCALE ) &&
               loader->load_flags & FT_LOAD_LINEAR     )
       {
-        FT_Pos  em_size    = face->root.units_per_EM;
-        FT_Pos  pixel_size = (FT_Pos)face->root.size->metrics.x_ppem << 16;
+        TT_Pos  em_size    = face->root.units_per_EM;
+        TT_Pos  pixel_size = (TT_Pos)face->root.size->metrics.x_ppem << 16;
+
 
         lsb2 = FT_MulDiv( lsb2, pixel_size, em_size );
         adv2 = FT_MulDiv( adv2, pixel_size, em_size );
--- a/src/truetype/ttinterp.c
+++ b/src/truetype/ttinterp.c
@@ -854,7 +854,7 @@
   static TT_F26Dot6  Norm( TT_F26Dot6  X,
                            TT_F26Dot6  Y )
   {
-    FT_Int64  T1, T2;
+    TT_INT64  T1, T2;
 
 
     MUL_64( X, X, T1 );
--- a/src/truetype/ttobjs.c
+++ b/src/truetype/ttobjs.c
@@ -133,7 +133,6 @@
   }
 
 
-
   /*************************************************************************/
   /*                                                                       */
   /* <Function>                                                            */
@@ -645,7 +644,7 @@
   TT_Error  TT_Init_Driver( TT_Driver  driver )
   {
     FT_Memory  memory = driver->root.memory;
-    FT_Error   error;
+    TT_Error   error;
 
 
     error = FT_New_GlyphZone( memory, 0, 0, &driver->zone );