shithub: freetype+ttf2subf

Download patch

ref: bd5ae40006959667299f09f13defa6f025caa744
parent: c6157665acf2520a039aa991d03f4af3d0de9001
author: Werner Lemberg <[email protected]>
date: Wed Jul 5 00:32:02 EDT 2000

Run g++ on the FreeType library.  This should make the use of code in
C++ programs easier:

  Renamed FT_WordXX to FT_UIntXX.

  Changed a lot of void* to FT_Byte* if related to i/o streams -- FreeType
  always accesses streams byte-wise, so this makes sense IMHO.

  Added a lot of #ifdef __cplusplus to header files (and removed a few).

  Other minor syntax fixes (mostly casts).

  Replaced the variable `private' with `private_dict' -- `private' is
  reserved in C++.

git/fs: mount .git/fs: mount/attach disallowed
--- a/config/unix/ftconfig.in
+++ b/config/unix/ftconfig.in
@@ -97,17 +97,17 @@
   /*   Used to guarantee the size of some specific integers.               */
   /*                                                                       */
   typedef signed short    FT_Int16;
-  typedef unsigned short  FT_Word16;
+  typedef unsigned short  FT_UInt16;
 
 #if FT_SIZEOF_INT == 4
 
   typedef signed int      FT_Int32;
-  typedef unsigned int    FT_Word32;
+  typedef unsigned int    FT_UInt32;
 
 #elif FT_SIZEOF_LONG == 4
 
   typedef signed long     FT_Int32;
-  typedef unsigned long   FT_Word32;
+  typedef unsigned long   FT_UInt32;
 
 #else
 #error "no 32bit type found - please check your configuration files"
--- a/include/freetype/config/ftconfig.h
+++ b/include/freetype/config/ftconfig.h
@@ -121,17 +121,17 @@
   /*   Used to guarantee the size of some specific integers.               */
   /*                                                                       */
   typedef signed short    FT_Int16;
-  typedef unsigned short  FT_Word16;
+  typedef unsigned short  FT_UInt16;
 
 #if FT_SIZEOF_INT == 4
 
   typedef signed int      FT_Int32;
-  typedef unsigned int    FT_Word32;
+  typedef unsigned int    FT_UInt32;
 
 #elif FT_SIZEOF_LONG == 4
 
   typedef signed long     FT_Int32;
-  typedef unsigned long   FT_Word32;
+  typedef unsigned long   FT_UInt32;
 
 #else
 #error "no 32bit type found - please check your configuration files"
--- a/include/freetype/freetype.h
+++ b/include/freetype/freetype.h
@@ -1367,7 +1367,7 @@
   /*    recognized, or non-zero if not.                                    */
   /*                                                                       */
   FT_EXPORT_DEF(FT_Error)  FT_New_Memory_Face( FT_Library   library,
-                                               void*        file_base,
+                                               FT_Byte*     file_base,
                                                FT_Long      file_size,
                                                FT_Long      face_index,
                                                FT_Face*     face );
--- a/include/freetype/ftimage.h
+++ b/include/freetype/ftimage.h
@@ -22,6 +22,12 @@
 #ifndef FTIMAGE_H
 #define FTIMAGE_H
 
+
+#ifdef __cplusplus
+  extern "C" {
+#endif
+
+
   /*************************************************************************/
   /*                                                                       */
   /* <Type>                                                                */
@@ -206,14 +212,14 @@
 
   typedef struct FT_Bitmap_
   {
-    int    rows;
-    int    width;
-    int    pitch;
-    void*  buffer;
-    short  num_grays;
-    char   pixel_mode;
-    char   palette_mode;
-    void*  palette;
+    int             rows;
+    int             width;
+    int             pitch;
+    unsigned char*  buffer;
+    short           num_grays;
+    char            pixel_mode;
+    char            palette_mode;
+    void*           palette;
 
   } FT_Bitmap;
 
@@ -861,9 +867,9 @@
   *
   **************************************************************************/
 
-  typedef void (*FT_Raster_Reset_Func)( FT_Raster    raster,
-                                        const char*  pool_base,
-                                        long         pool_size );
+  typedef void (*FT_Raster_Reset_Func)( FT_Raster       raster,
+                                        unsigned char*  pool_base,
+                                        unsigned long   pool_size );
 
 
  /**************************************************************************
@@ -954,6 +960,12 @@
     FT_Raster_Done_Func      raster_done;
 
   } FT_Raster_Funcs;
+
+
+#ifdef __cplusplus
+  }
+#endif
+
 
 #endif /* FTIMAGE_H */
 
--- a/include/freetype/ftrender.h
+++ b/include/freetype/ftrender.h
@@ -21,6 +21,12 @@
 #include <freetype/ftmodule.h>
 #include <freetype/ftglyph.h>
 
+
+#ifdef __cplusplus
+  extern "C" {
+#endif
+
+
  /* create a new glyph object */
   typedef  FT_Error  (*FT_Glyph_Init_Func)( FT_Glyph      glyph,
                                             FT_GlyphSlot  slot );
@@ -175,6 +181,11 @@
                                            FT_UInt        num_params,
                                            FT_Parameter*  parameters );
 
+
+
+#ifdef __cplusplus
+  }
+#endif
 
 
 #endif /* FTMODULE_H */
--- a/include/freetype/ftsystem.h
+++ b/include/freetype/ftsystem.h
@@ -67,16 +67,16 @@
 
   typedef struct FT_StreamRec_*  FT_Stream;
 
-  typedef  unsigned long (*FT_Stream_IO)( FT_Stream      stream,
-                                          unsigned long  offset,
-                                          char*          buffer,
-                                          unsigned long  count );
+  typedef  unsigned long (*FT_Stream_IO)( FT_Stream       stream,
+                                          unsigned long   offset,
+                                          unsigned char*  buffer,
+                                          unsigned long   count );
 
   typedef  void (*FT_Stream_Close)( FT_Stream  stream );
 
   struct FT_StreamRec_
   {
-    char*           base;
+    unsigned char*  base;
     unsigned long   size;
     unsigned long   pos;
 
@@ -87,8 +87,8 @@
     FT_Stream_Close close;
 
     FT_Memory       memory;
-    char*           cursor;
-    char*           limit;
+    unsigned char*  cursor;
+    unsigned char*  limit;
   };
 
 
--- a/include/freetype/internal/ftcalc.h
+++ b/include/freetype/internal/ftcalc.h
@@ -50,8 +50,8 @@
 
   typedef struct  FT_Int64_
   {
-    FT_Word32  lo;
-    FT_Word32  hi;
+    FT_UInt32  lo;
+    FT_UInt32  hi;
 
   } FT_Int64;
 
--- a/include/freetype/internal/ftobjs.h
+++ b/include/freetype/internal/ftobjs.h
@@ -30,6 +30,12 @@
 #include <freetype/internal/ftdriver.h>
 #include <freetype/internal/autohint.h>
 
+
+#ifdef __cplusplus
+  extern "C" {
+#endif
+
+
   /*************************************************************************/
   /*                                                                       */
   /* Some generic definitions.                                             */
@@ -403,8 +409,8 @@
     FT_Renderer         cur_renderer;  /* current outline renderer */
     FT_Module           auto_hinter;
 
-    void*               raster_pool;      /* scan-line conversion render pool */
-    unsigned long       raster_pool_size; /* size of render pool in bytes     */
+    FT_Byte*            raster_pool;      /* scan-line conversion render pool */
+    FT_ULong            raster_pool_size; /* size of render pool in bytes     */
 
     FT_DebugHook_Func   debug_hooks[4];
 
@@ -438,6 +444,11 @@
 /*                                                                                           */
 #ifndef FT_NO_DEFAULT_RASTER
   FT_EXPORT_VAR(FT_Raster_Funcs)  ft_default_raster;
+#endif
+
+
+#ifdef __cplusplus
+  }
 #endif
 
 
--- a/include/freetype/internal/ftstream.h
+++ b/include/freetype/internal/ftstream.h
@@ -3,6 +3,12 @@
 
 #include <freetype/internal/ftobjs.h>
 
+
+#ifdef __cplusplus
+  extern "C" {
+#endif
+
+
 /* format of an 8-bit frame_op value = [ xxxxx | e | s ] */
 /* where s is set to 1 when the value is signed..        */
 /* where e is set to 1 when the value is little-endian   */
@@ -185,27 +191,27 @@
 
 
 
-  BASE_DEF(void) FT_New_Memory_Stream( FT_Library     library,
-                                       void*          base,
-                                       unsigned long  size,
-                                       FT_Stream      stream );
+  BASE_DEF(void) FT_New_Memory_Stream( FT_Library  library,
+                                       FT_Byte*    base,
+                                       FT_ULong    size,
+                                       FT_Stream   stream );
 
   BASE_DEF(FT_Error)  FT_Seek_Stream( FT_Stream  stream,
                                       FT_ULong   pos );
 
   BASE_DEF(FT_Error)  FT_Skip_Stream( FT_Stream  stream,
-                                                FT_Long    distance );
+                                      FT_Long    distance );
 
   BASE_DEF(FT_Long)   FT_Stream_Pos( FT_Stream  stream );
 
 
   BASE_DEF(FT_Error)  FT_Read_Stream( FT_Stream  stream,
-                                      void*      buffer,
+                                      FT_Byte*   buffer,
                                       FT_ULong   count );
 
   BASE_DEF(FT_Error)  FT_Read_Stream_At( FT_Stream  stream,
                                          FT_ULong   pos,
-                                         void*      buffer,
+                                         FT_Byte*   buffer,
                                          FT_ULong   count );
 
   BASE_DEF(FT_Error)  FT_Access_Frame( FT_Stream  stream,
@@ -274,18 +280,24 @@
 #define FILE_Pos() \
           FT_Stream_Pos( stream )
 
-#define FILE_Read( buffer, count )                         \
-          FT_SET_ERROR( FT_Read_Stream( stream,            \
-                                        (FT_Char*)buffer,  \
+#define FILE_Read( buffer, count )                        \
+          FT_SET_ERROR( FT_Read_Stream( stream,           \
+                                        (FT_Byte*)buffer, \
                                         count ) )
 
 #define FILE_Read_At( position, buffer, count )              \
           FT_SET_ERROR( FT_Read_Stream_At( stream,           \
                                            position,         \
-                                           (FT_Char*)buffer, \
+                                           (FT_Byte*)buffer, \
                                            count ) )
 
 #define READ_Fields( fields, object )  \
           ((error = FT_Read_Fields( stream, fields, object )) != FT_Err_Ok)
+
+
+#ifdef __cplusplus
+  }
+#endif
+
 
 #endif /* FTSTREAM_H */
--- a/include/freetype/internal/sfnt.h
+++ b/include/freetype/internal/sfnt.h
@@ -214,11 +214,11 @@
   /*    TrueType error code.  0 means success.                             */
   /*                                                                       */
   typedef
-  FT_Error  (*TT_Load_Any_Func)( TT_Face   face,
-                                 FT_ULong  tag,
-                                 FT_Long   offset,
-                                 void*     buffer,
-                                 FT_Long*  length );
+  FT_Error  (*TT_Load_Any_Func)( TT_Face    face,
+                                 FT_ULong   tag,
+                                 FT_Long    offset,
+                                 FT_Byte*   buffer,
+                                 FT_ULong*  length );
 
 
   /*************************************************************************/
--- a/include/freetype/internal/t1types.h
+++ b/include/freetype/internal/t1types.h
@@ -24,12 +24,8 @@
 #include <freetype/t1tables.h>
 #include <freetype/internal/psnames.h>
 
-#ifdef __cplusplus
-  extern "C" {
-#endif
 
 
-
 /*************************************************************************/
 /*************************************************************************/
 /*************************************************************************/
@@ -188,11 +184,6 @@
     CID_Subrs*    subrs;
   
   } CID_FaceRec;
-
-
-#ifdef __cplusplus
-  }
-#endif
 
 
 #endif /* T1TYPES_H */
--- a/include/freetype/internal/t2types.h
+++ b/include/freetype/internal/t2types.h
@@ -27,10 +27,6 @@
 #include <freetype/freetype.h>
 
 
-#ifdef __cplusplus
-  extern "C" {
-#endif
-
  /*************************************************************************
   *
   * <Struct>
@@ -215,9 +211,8 @@
 
   } CFF_Font;
 
-#ifdef __cplusplus
-  }
-#endif
 
 #endif /* T2TYPES_H */
+
+
 /* END */
--- a/include/freetype/internal/tttypes.h
+++ b/include/freetype/internal/tttypes.h
@@ -27,11 +27,6 @@
 #include <freetype/tttables.h>
 
 
-#ifdef __cplusplus
-  extern "C" {
-#endif
-
-
   /*************************************************************************/
   /*************************************************************************/
   /*************************************************************************/
@@ -1504,13 +1499,6 @@
     void*           other;
 
   };
-
-
-
-
-#ifdef __cplusplus
-  }
-#endif
 
 
 #endif /* TTTYPES_H */
--- a/src/base/ftcalc.c
+++ b/src/base/ftcalc.c
@@ -223,7 +223,7 @@
                                         FT_Long  b )
   {
     FT_Int32   s;
-    FT_Word32  q;
+    FT_UInt32  q;
 
 
     s  = a; a = ABS(a);
@@ -366,7 +366,7 @@
 
       FT_MulTo64( a, b, &temp );
       temp2.hi = (FT_Int32)( c >> 31 );
-      temp2.lo = (FT_Word32)( c / 2 );
+      temp2.lo = (FT_UInt32)( c / 2 );
       FT_Add64( &temp, &temp2, &temp );
       a = FT_Div64by32( &temp, c );
     }
@@ -469,7 +469,7 @@
                                         FT_Long  b )
   {
     FT_Int32   s;
-    FT_Word32  q;
+    FT_UInt32  q;
 
 
     s  = a; a = ABS(a);
@@ -483,12 +483,12 @@
     else if ( ( a >> 16 ) == 0 )
     {
       /* compute result directly */
-      q = (FT_Word32)( a << 16 ) / (FT_Word32)b;
+      q = (FT_UInt32)( a << 16 ) / (FT_UInt32)b;
     }
     else
     {
       /* we need more bits; we have to do it by hand */
-      FT_Word32  c;
+      FT_UInt32  c;
 
 
       q  = ( a / b ) << 16;
@@ -531,7 +531,7 @@
                                     FT_Int64*  y,
                                     FT_Int64*  z )
   {
-    register FT_Word32  lo, hi;
+    register FT_UInt32  lo, hi;
 
 
     lo = x->lo + y->lo;
@@ -571,7 +571,7 @@
     s ^= y; y = ABS( y );
 
     {
-      FT_Word32  lo1, hi1, lo2, hi2, lo, hi, i1, i2;
+      FT_UInt32  lo1, hi1, lo2, hi2, lo, hi, i1, i2;
 
 
       lo1 = x & 0x0000FFFF;  hi1 = x >> 16;
@@ -600,7 +600,7 @@
 
     if ( s < 0 )
     {
-      z->lo = (FT_Word32)-(FT_Int32)z->lo;
+      z->lo = (FT_UInt32)-(FT_Int32)z->lo;
       z->hi = ~z->hi + !( z->lo );
     }
   }
@@ -629,13 +629,13 @@
                                             FT_Int32   y )
   {
     FT_Int32   s;
-    FT_Word32  q, r, i, lo;
+    FT_UInt32  q, r, i, lo;
 
 
     s  = x->hi;
     if ( s < 0 )
     {
-      x->lo = (FT_Word32)-(FT_Int32)x->lo;
+      x->lo = (FT_UInt32)-(FT_Int32)x->lo;
       x->hi = ~x->hi + !( x->lo );
     }
     s ^= y;  y = ABS( y );
@@ -654,7 +654,7 @@
     r  = x->hi;
     lo = x->lo;
 
-    if ( r >= (FT_Word32)y ) /* we know y is to be treated as unsigned here */
+    if ( r >= (FT_UInt32)y ) /* we know y is to be treated as unsigned here */
       return ( s < 0 ? 0x80000001UL : 0x7FFFFFFFUL );
                              /* Return Max/Min Int32 if division overflow.  */
                              /* This includes division by zero!             */
@@ -665,7 +665,7 @@
       q <<= 1;
       r  |= lo >> 31;
 
-      if ( r >= (FT_Word32)y )
+      if ( r >= (FT_UInt32)y )
       {
         r -= y;
         q |= 1;
@@ -687,7 +687,7 @@
                   FT_Int64*  y,
                   FT_Int64*  z )
   {
-    register FT_Word32  lo, hi;
+    register FT_UInt32  lo, hi;
 
 
     lo = x->lo - y->lo;
@@ -701,7 +701,7 @@
   static
   int  ft_order64( FT_Int64*  z )
   {
-    FT_Word32  i;
+    FT_UInt32  i;
     int        j;
 
 
--- a/src/base/ftobjs.c
+++ b/src/base/ftobjs.c
@@ -702,7 +702,7 @@
     slot->control_data  = 0;
     slot->control_len   = 0;
     slot->other         = 0;
-    slot->format        = 0;
+    slot->format        = ft_glyph_format_none;
 
     slot->linearHoriAdvance = 0;
     slot->linearVertAdvance = 0;
@@ -1314,7 +1314,7 @@
   /*    recognized, or non-zero if not.                                    */
   /*                                                                       */
   FT_EXPORT_FUNC( FT_Error )  FT_New_Memory_Face( FT_Library  library,
-                                                  void*       file_base,
+                                                  FT_Byte*    file_base,
                                                   FT_Long     file_size,
                                                   FT_Long     face_index,
                                                   FT_Face*    face )
--- a/src/base/ftstream.c
+++ b/src/base/ftstream.c
@@ -30,13 +30,13 @@
 #define FT_COMPONENT  trace_stream
 
 
-  BASE_FUNC( void )  FT_New_Memory_Stream( FT_Library     library,
-                                           void*          base,
-                                           unsigned long  size,
-                                           FT_Stream      stream )
+  BASE_FUNC( void )  FT_New_Memory_Stream( FT_Library  library,
+                                           FT_Byte*    base,
+                                           FT_ULong    size,
+                                           FT_Stream   stream )
   {
     stream->memory = library->memory;
-    stream->base   = (char*)base;
+    stream->base   = base;
     stream->size   = size;
     stream->pos    = 0;
     stream->cursor = 0;
@@ -97,7 +97,7 @@
 
 
   BASE_FUNC( FT_Error )  FT_Read_Stream( FT_Stream  stream,
-                                         void*      buffer,
+                                         FT_Byte*   buffer,
                                          FT_ULong   count )
   {
     return FT_Read_Stream_At( stream, stream->pos, buffer, count );
@@ -106,7 +106,7 @@
 
   BASE_FUNC( FT_Error )  FT_Read_Stream_At( FT_Stream  stream,
                                             FT_ULong   pos,
-                                            void*      buffer,
+                                            FT_Byte*   buffer,
                                             FT_ULong   count )
   {
     FT_Error  error = FT_Err_Ok;
@@ -285,7 +285,7 @@
 
   BASE_FUNC( FT_Short )  FT_Get_Short( FT_Stream  stream )
   {
-    char*     p;
+    FT_Byte*  p;
     FT_Short  result;
 
 
@@ -303,8 +303,8 @@
 
   BASE_FUNC( FT_Long )  FT_Get_Offset( FT_Stream  stream )
   {
-    char*    p;
-    FT_Long  result;
+    FT_Byte*  p;
+    FT_Long   result;
 
 
     FT_Assert( stream && stream->cursor );
@@ -320,8 +320,8 @@
 
   BASE_FUNC( FT_Long )  FT_Get_Long( FT_Stream  stream )
   {
-    char*    p;
-    FT_Long  result;
+    FT_Byte*  p;
+    FT_Long   result;
 
 
     FT_Assert( stream && stream->cursor );
@@ -338,7 +338,7 @@
   BASE_FUNC( FT_Char )  FT_Read_Char( FT_Stream  stream,
                                       FT_Error*  error )
   {
-    char  result = 0;
+    FT_Byte  result = 0;
 
 
     FT_Assert( stream );
@@ -374,8 +374,8 @@
   BASE_FUNC( FT_Short )  FT_Read_Short( FT_Stream  stream,
                                         FT_Error*  error )
   {
-    char      reads[2];
-    char*     p = 0;
+    FT_Byte   reads[2];
+    FT_Byte*  p = 0;
     FT_Short  result = 0;
 
 
@@ -420,9 +420,9 @@
   BASE_FUNC( FT_Long )  FT_Read_Offset( FT_Stream  stream,
                                         FT_Error*  error )
   {
-    char     reads[3];
-    char*    p = 0;
-    FT_Long  result = 0;
+    FT_Byte   reads[3];
+    FT_Byte*  p = 0;
+    FT_Long   result = 0;
 
 
     FT_Assert( stream );
@@ -466,9 +466,9 @@
   BASE_FUNC( FT_Long )  FT_Read_Long( FT_Stream  stream,
                                       FT_Error*  error )
   {
-    char     reads[4];
-    char*    p = 0;
-    FT_Long  result = 0;
+    FT_Byte   reads[4];
+    FT_Byte*  p = 0;
+    FT_Long   result = 0;
 
 
     FT_Assert( stream );
@@ -543,25 +543,24 @@
       case ft_frame_skip:   /* skip some bytes      */
         {
           FT_Int  len = fields->size;
-          
-          if (stream->cursor + len > stream->limit)
+
+
+          if ( stream->cursor + len > stream->limit )
           {
             error = FT_Err_Invalid_Stream_Operation;
             goto Exit;
           }
-          
-          if (fields->value == ft_frame_bytes)
+
+          if ( fields->value == ft_frame_bytes )
           {
             p = (FT_Byte*)structure + fields->offset;
             MEM_Copy( p, stream->cursor, len );
           }
-          stream->cursor += len;  
+          stream->cursor += len;
           fields++;
           continue;
         }
 
-        
-
       case ft_frame_byte:
       case ft_frame_schar:  /* read a single byte */
         value = GET_Byte();
@@ -577,7 +576,7 @@
       case ft_frame_short_le:
       case ft_frame_ushort_le:  /* read a 2-byte little-endian short */
         {
-          char* p;
+          FT_Byte*  p;
 
 
           value = 0;
@@ -601,7 +600,7 @@
       case ft_frame_long_le:
       case ft_frame_ulong_le:  /* read a 4-byte little-endian long */
         {
-          char* p;
+          FT_Byte*  p;
 
 
           value = 0;
@@ -628,7 +627,7 @@
       case ft_frame_off3_le:
       case ft_frame_uoff3_le:  /* read a 3-byte little-endian long */
         {
-          char* p;
+          FT_Byte*  p;
 
 
           value = 0;
@@ -671,7 +670,7 @@
         *(FT_UInt32*)p = (FT_UInt32)value;
         break;
 
-      default:  /* for 64-bits systems */
+      default:  /* for 64-bit systems */
         *(FT_ULong*)p = (FT_ULong)value;
       }
 
--- a/src/base/ftsystem.c
+++ b/src/base/ftsystem.c
@@ -196,10 +196,10 @@
   /*    The number of bytes actually read.                                 */
   /*                                                                       */
   static
-  unsigned long  ft_io_stream( FT_Stream      stream,
-                               unsigned long  offset,
-                               char*          buffer,
-                               unsigned long  count )
+  unsigned long  ft_io_stream( FT_Stream       stream,
+                               unsigned long   offset,
+                               unsigned char*  buffer,
+                               unsigned long   count )
   {
     FILE*  file;
 
--- a/src/cff/t2objs.c
+++ b/src/cff/t2objs.c
@@ -159,7 +159,7 @@
   void  T2_Done_Face( T2_Face  face )
   {
     FT_Memory        memory = face->root.memory;
-    SFNT_Interface*  sfnt   = face->sfnt;
+    SFNT_Interface*  sfnt   = (SFNT_Interface*)face->sfnt;
 
 
     if ( sfnt )
--- a/src/cff/t2parse.c
+++ b/src/cff/t2parse.c
@@ -563,6 +563,7 @@
                   case 1:
                     *(FT_Byte*)q = (FT_Byte)val;
                     break;
+
                   case 2:
                     *(FT_Short*)q = (FT_Short)val;
                     break;
--- a/src/cid/cidafm.h
+++ b/src/cid/cidafm.h
@@ -22,6 +22,11 @@
 #include <cidobjs.h>
 
 
+#ifdef __cplusplus
+  extern "C" {
+#endif
+
+
   typedef struct  CID_Kern_Pair_
   {
     FT_UInt    glyph1;
@@ -51,6 +56,11 @@
                          FT_UInt     glyph1,
                          FT_UInt     glyph2,
                          FT_Vector*  kerning );
+
+
+#ifdef __cplusplus
+  }
+#endif
 
 
 #endif /* CIDAFM_H */
--- a/src/cid/cidload.c
+++ b/src/cid/cidload.c
@@ -239,7 +239,7 @@
   const CID_Field_Rec  t1_field_records[] =
   {
 #include <cidtokens.h>
-    { 0, 0, 0, 0, 0, 0, 0, 0 }
+    { 0 }
   };
 
 
--- a/src/cid/cidobjs.c
+++ b/src/cid/cidobjs.c
@@ -194,7 +194,7 @@
           }
 
           root->style_name = ( *full == ' ' ) ? full + 1
-                                              : "Regular";
+                                              : (char *)"Regular";
         }
         else
         {
--- a/src/cid/cidparse.c
+++ b/src/cid/cidparse.c
@@ -936,7 +936,8 @@
     if ( ACCESS_Frame( 31 ) )
       goto Exit;
 
-    if ( strncmp( stream->cursor, "%!PS-Adobe-3.0 Resource-CIDFont", 31 ) )
+    if ( strncmp( (char *)stream->cursor,
+                  "%!PS-Adobe-3.0 Resource-CIDFont", 31 ) )
     {
       FT_TRACE2(( "[not a valid CID-keyed font]\n" ));
       error = FT_Err_Unknown_File_Format;
@@ -950,7 +951,7 @@
     buff_len = 256;
     for (;;)
     {
-      FT_Byte *p, *limit = buffer + 256;
+      FT_Byte  *p, *limit = buffer + 256;
 
       /* fill input buffer */
       buff_len -= 256;
--- a/src/cid/cidriver.h
+++ b/src/cid/cidriver.h
@@ -19,8 +19,7 @@
 #ifndef CIDRIVER_H
 #define CIDRIVER_H
 
-#include <cidobjs.h>
-#include <freetype/internal/t1errors.h>
+#include <freetype/internal/ftdriver.h>
 
   FT_EXPORT_VAR( const  FT_Driver_Class )  t1cid_driver_class;
 
--- a/src/sfnt/sfobjs.c
+++ b/src/sfnt/sfobjs.c
@@ -347,7 +347,7 @@
           flags |= FT_STYLE_FLAG_ITALIC;
       }
 
-      face->root.style_flags = flags;
+      root->style_flags = flags;
 
       /*********************************************************************/
       /*                                                                   */
@@ -387,8 +387,8 @@
 
       if ( face->num_sbit_strikes )
       {
-       face->root.num_fixed_sizes = face->num_sbit_strikes;
-       if ( ALLOC_ARRAY( face->root.available_sizes,
+       root->num_fixed_sizes = face->num_sbit_strikes;
+       if ( ALLOC_ARRAY( root->available_sizes,
                          face->num_sbit_strikes,
                          FT_Bitmap_Size ) )
          return error;
@@ -395,9 +395,9 @@
 
         for ( n = 0 ; n < face->num_sbit_strikes ; n++ )
         {
-          face->root.available_sizes[n].width =
+          root->available_sizes[n].width =
             face->sbit_strikes[n].x_ppem;
-          face->root.available_sizes[n].height =
+          root->available_sizes[n].height =
             face->sbit_strikes[n].y_ppem;
         }
       }
@@ -464,7 +464,7 @@
   void  SFNT_Done_Face( TT_Face  face )
   {
     FT_Memory        memory = face->root.memory;
-    SFNT_Interface*  sfnt   = face->sfnt;
+    SFNT_Interface*  sfnt   = (SFNT_Interface*)face->sfnt;
 
 
     if ( sfnt )
--- a/src/sfnt/sfobjs.h
+++ b/src/sfnt/sfobjs.h
@@ -23,6 +23,11 @@
 #include <freetype/internal/ftobjs.h>
 
 
+#ifdef __cplusplus
+  extern "C" {
+#endif
+
+
   LOCAL_DEF
   FT_Error  SFNT_Init_Face( FT_Stream      stream,
                             TT_Face        face,
@@ -39,6 +44,11 @@
 
   LOCAL_DEF
   void  SFNT_Done_Face( TT_Face  face );
+
+
+#ifdef __cplusplus
+  }
+#endif
 
 
 #endif /* SFDRIVER_H */
--- a/src/sfnt/ttcmap.c
+++ b/src/sfnt/ttcmap.c
@@ -82,8 +82,8 @@
     TT_CMap4*  cmap4;
     TT_CMap6*  cmap6;
 
-    TT_CMap2SubHeader* cmap2sub;
-    TT_CMap4Segment*   segments;
+    TT_CMap2SubHeader*  cmap2sub;
+    TT_CMap4Segment*    segments;
 
 
     if ( cmap->loaded )
@@ -100,7 +100,7 @@
       cmap0 = &cmap->c.cmap0;
 
       if ( ALLOC( cmap0->glyphIdArray, 256L )            ||
-           FILE_Read( (void*)cmap0->glyphIdArray, 256L ) )
+           FILE_Read( cmap0->glyphIdArray, 256L ) )
          goto Fail;
 
       cmap->get_index = code_to_index0;
--- a/src/sfnt/ttload.c
+++ b/src/sfnt/ttload.c
@@ -376,11 +376,11 @@
   /*    FreeType error code.  0 means success.                             */
   /*                                                                       */
   LOCAL_FUNC
-  FT_Error  TT_Load_Any( TT_Face   face,
-                         FT_ULong  tag,
-                         FT_Long   offset,
-                         void*     buffer,
-                         FT_Long*  length )
+  FT_Error  TT_Load_Any( TT_Face    face,
+                         FT_ULong   tag,
+                         FT_Long    offset,
+                         FT_Byte*   buffer,
+                         FT_ULong*  length )
   {
     FT_Error   error;
     FT_Stream  stream;
@@ -923,7 +923,7 @@
       /* allocate the name storage area in memory, then read it */
       if ( ALLOC( names->storage, storageSize )               ||
            FILE_Read_At( table_pos + names->storageOffset,
-                         (void*)names->storage, storageSize ) )
+                         names->storage, storageSize ) )
         goto Exit;
 
       /* Go through and assign the string pointers to the name records. */
--- a/src/sfnt/ttload.h
+++ b/src/sfnt/ttload.h
@@ -52,11 +52,11 @@
                                SFNT_Header*  sfnt );
 
   LOCAL_DEF
-  FT_Error  TT_Load_Any( TT_Face   face,
-                         FT_ULong  tag,
-                         FT_Long   offset,
-                         void*     buffer,
-                         FT_Long*  length );
+  FT_Error  TT_Load_Any( TT_Face    face,
+                         FT_ULong   tag,
+                         FT_Long    offset,
+                         FT_Byte*   buffer,
+                         FT_ULong*  length );
 
 
   LOCAL_DEF
@@ -119,6 +119,11 @@
   LOCAL_DEF
   FT_Error  TT_Load_Gasp( TT_Face    face,
                           FT_Stream  stream );
+
+
+#ifdef __cplusplus
+  }
+#endif
 
 
 #endif /* TTLOAD_H */
--- a/src/sfnt/ttpost.h
+++ b/src/sfnt/ttpost.h
@@ -24,7 +24,7 @@
 #include <freetype/internal/tttypes.h>
 
 #ifdef __cplusplus
-extern "C" {
+  extern "C" {
 #endif
 
 
@@ -42,7 +42,7 @@
 
 
 #ifdef __cplusplus
-}
+  }
 #endif
 
 
--- a/src/sfnt/ttsbit.h
+++ b/src/sfnt/ttsbit.h
@@ -22,6 +22,11 @@
 #include <ttload.h>
 
 
+#ifdef __cplusplus
+  extern "C" {
+#endif
+
+
   LOCAL_DEF
   FT_Error  TT_Load_SBit_Strikes( TT_Face    face,
                                   FT_Stream  stream );
@@ -38,6 +43,11 @@
                                 FT_Stream         stream,
                                 FT_Bitmap*        map,
                                 TT_SBit_Metrics*  metrics );
+
+
+#ifdef __cplusplus
+  }
+#endif
 
 
 #endif /* TTSBIT_H */
--- a/src/smooth/ftgrays.c
+++ b/src/smooth/ftgrays.c
@@ -125,7 +125,7 @@
 
 
 #include "ftgrays.h"
-#include <freetype/internal/ftobjs.h>  /* for FT_UNUSED()                  */
+#include <freetype/internal/ftobjs.h>  /* for FT_UNUSED()               */
 #include <freetype/internal/ftdebug.h> /* for FT_TRACE() and FT_ERROR() */
 #include <freetype/ftoutln.h>          /* for FT_Outline_Decompose()    */
 
--- a/src/truetype/ttdriver.h
+++ b/src/truetype/ttdriver.h
@@ -20,9 +20,6 @@
 #define TTDRIVER_H
 
 #include <freetype/internal/ftdriver.h>
-#include <freetype/ttnameid.h>
-#include <ttobjs.h>
-#include <freetype/internal/tterrors.h>
 
 
   FT_EXPORT_VAR( const FT_Driver_Class )  tt_driver_class;
--- a/src/truetype/ttgload.c
+++ b/src/truetype/ttgload.c
@@ -187,7 +187,7 @@
     zone->cur        = load->outline.points + start_point;
     zone->tags       = (FT_Byte*)load->outline.tags + start_point;
     zone->contours   = (FT_UShort*)load->outline.contours + start_contour;
-  }                                 
+  }
 
 
 #undef  IS_HINTED
@@ -210,14 +210,14 @@
   {
     FT_Error  error;
     FT_Stream stream = loader->stream;
-    
 
+
     /* the following line sets the `error' variable through macros! */
     (void)( FILE_Seek( offset ) || ACCESS_Frame( byte_count ) );
-    
+
     FT_TRACE5(( "Glyph %ld\n", glyph_index ));
     return error;
-  }                                   
+  }
 
 
   static
@@ -227,7 +227,7 @@
 
 
     FORGET_Frame();
-  }                                   
+  }
 
 
   static
@@ -234,8 +234,8 @@
   FT_Error  TT_Load_Glyph_Header( TT_Loader*  loader )
   {
     FT_Stream   stream = loader->stream;
-    
 
+
     loader->n_contours = GET_Short();
 
     loader->bbox.xMin = GET_Short();
@@ -248,9 +248,9 @@
                                             loader->bbox.xMax ));
     FT_TRACE5(( "  yMin: %4d  yMax: %4d\n", loader->bbox.yMin,
                                             loader->bbox.yMax ));
-    
+
     return FT_Err_Ok;
-  }                                  
+  }
 
 
   static
@@ -271,11 +271,11 @@
     {
       short*  cur   = gloader->current.outline.contours;
       short*  limit = cur + n_contours;
-      
 
+
       for ( ; cur < limit; cur++ )
         cur[0] = GET_UShort();
-        
+
       n_points = 0;
       if ( n_contours > 0 )
         n_points = cur[-1] + 1;
@@ -283,7 +283,7 @@
       error = FT_GlyphLoader_Check_Points( gloader, n_points + 2, 0 );
       if ( error )
         goto Fail;
-      
+
       outline = &gloader->current.outline;
     }
 
@@ -290,7 +290,7 @@
     /* reading the bytecode instructions */
     slot->control_len  = 0;
     slot->control_data = 0;
-    
+
     n_ins = GET_UShort();
 
     FT_TRACE5(( "  Instructions size: %d\n", n_ins ));
@@ -317,7 +317,7 @@
     {
       slot->control_len  = n_ins;
       slot->control_data = load->instructions;
-      
+
       MEM_Copy( load->instructions, stream->cursor, n_ins );
     }
 
@@ -407,7 +407,7 @@
     outline->n_points   = n_points;
     outline->n_contours = n_contours;
 
-  Fail:          
+  Fail:
     return error;
   }
 
@@ -433,7 +433,7 @@
       error = FT_GlyphLoader_Check_Subglyphs( gloader, num_subglyphs + 1 );
       if ( error )
         goto Fail;
-      
+
       subglyph = gloader->current.subglyphs + num_subglyphs;
 
       subglyph->arg1 = subglyph->arg2 = 0;
@@ -609,7 +609,7 @@
                                   load->exec->glyphIns, n_ins );
         if ( error )
           goto Exit;
-          
+
         load->exec->is_composite     = FALSE;
         load->exec->pedantic_hinting = (FT_Bool)( load->load_flags &
                                                   FT_LOAD_PEDANTIC );
@@ -619,7 +619,7 @@
         error = TT_Run_Context( load->exec, debug );
         if ( error && load->exec->pedantic_hinting )
           goto Exit;
-          
+
         error = FT_Err_Ok;  /* ignore bytecode errors in non-pedantic mode */
       }
 
@@ -778,7 +778,7 @@
       error = face->read_simple_glyph( loader );
       if ( error )
         goto Fail;
-      
+
 #ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
 
       {
@@ -815,10 +815,11 @@
       FT_UInt       start_point, start_contour;
       FT_ULong      ins_pos;  /* position of composite instructions, if any */
 
+
       /* for each subglyph, read composite header */
       start_point   = gloader->base.outline.n_points;
       start_contour = gloader->base.outline.n_contours;
-    
+
       error = face->read_composite_glyph( loader );
       if ( error )
         goto Fail;
@@ -835,11 +836,11 @@
       {
         /* set up remaining glyph fields */
         FT_GlyphLoader_Add( gloader );
-        
+
         glyph->num_subglyphs  = gloader->base.num_subglyphs;
         glyph->format         = ft_glyph_format_composite;
         glyph->subglyphs      = gloader->base.subglyphs;
-        
+
         goto Exit;
       }
 
@@ -851,13 +852,13 @@
       {
         FT_Int        n, num_base_points, num_new_points;
         FT_SubGlyph*  subglyph = 0;
-        
+
         FT_UInt num_subglyphs  = gloader->current.num_subglyphs;
         FT_UInt num_base_subgs = gloader->base.num_subglyphs;
-        
 
+
         FT_GlyphLoader_Add( gloader );
-        
+
         for ( n = 0; n < (FT_Int)num_subglyphs; n++ )
         {
           FT_Vector  pp1, pp2;
@@ -937,7 +938,7 @@
 
             p1 = gloader->base.outline.points + start_point + k;
             p2 = gloader->base.outline.points + start_point + l;
-            
+
             x = p1->x - p2->x;
             y = p1->y - p2->y;
           }
@@ -1111,7 +1112,7 @@
       /* copy outline to our glyph slot */
       FT_GlyphLoader_Copy_Points( glyph->loader, loader->gloader );
       glyph->outline = glyph->loader->base.outline;
-      
+
       /* translate array so that (0,0) is the glyph's origin */
       FT_Outline_Translate( &glyph->outline, -loader->pp1.x, 0 );
 
@@ -1394,11 +1395,11 @@
     {
       FT_GlyphLoader*  gloader = FT_FACE_DRIVER(face)->glyph_loader;
 
-      
+
       loader.gloader = gloader;
-      
+
       FT_GlyphLoader_Rewind( gloader );
-      
+
       tt_prepare_zone( &loader.zone, &gloader->base, 0, 0 );
       tt_prepare_zone( &loader.base, &gloader->base, 0, 0 );
     }
@@ -1436,7 +1437,7 @@
     loader.size   = (FT_Size)size;
     loader.glyph  = (FT_GlyphSlot)glyph;
     loader.stream = stream;
-    
+
     loader.glyf_offset  = FILE_Pos();
 
 #ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
--- a/src/truetype/ttinterp.c
+++ b/src/truetype/ttinterp.c
@@ -31,7 +31,7 @@
 #define TT_MULFIX   FT_MulFix
 #define TT_MULDIV   FT_MulDiv
 
-#define TT_FT_INT64    FT_Int64
+#define TT_INT64    FT_Int64
 
 
   /*************************************************************************/
@@ -743,7 +743,6 @@
   }
 
 
-  LOCAL_FUNC
   const TT_GraphicsState  tt_default_graphics_state =
   {
     0, 0, 0,
@@ -850,7 +849,7 @@
   static FT_F26Dot6  Norm( FT_F26Dot6  X,
                            FT_F26Dot6  Y )
   {
-    TT_FT_INT64  T1, T2;
+    TT_INT64  T1, T2;
 
 
     MUL_64( X, X, T1 );
--- a/src/truetype/ttinterp.h
+++ b/src/truetype/ttinterp.h
@@ -216,8 +216,7 @@
   } TT_ExecContextRec;
 
 
-  LOCAL_DEF
-  const TT_GraphicsState  tt_default_graphics_state;
+  extern const TT_GraphicsState  tt_default_graphics_state;
 
 
   LOCAL_DEF
--- a/src/truetype/ttobjs.c
+++ b/src/truetype/ttobjs.c
@@ -225,7 +225,7 @@
     FT_Memory  memory = face->root.memory;
     FT_Stream  stream = face->root.stream;
 
-    SFNT_Interface*  sfnt = face->sfnt;
+    SFNT_Interface*  sfnt = (SFNT_Interface*)face->sfnt;
 
 
     /* for `extended TrueType formats' (i.e. compressed versions) */
--- a/src/truetype/ttpload.h
+++ b/src/truetype/ttpload.h
@@ -39,6 +39,12 @@
   FT_Error  TT_Load_Programs( TT_Face    face,
                               FT_Stream  stream );
 
+
+#ifdef __cplusplus
+  }
+#endif
+
+
 #endif /* TTPLOAD_H */
 
 
--- a/src/type1/t1afm.c
+++ b/src/type1/t1afm.c
@@ -135,7 +135,7 @@
 
 
 #undef  KERN_INDEX
-#define KERN_INDEX( g1, g2 ) ( ( (FT_ULong)g1 << 16 ) | g2 )
+#define KERN_INDEX( g1, g2 )  ( ( (FT_ULong)g1 << 16 ) | g2 )
 
 
   /* compare two kerning pairs */
@@ -154,7 +154,7 @@
   }
 
 
-  /* 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  T1_Read_AFM( FT_Face    t1_face,
                          FT_Stream  stream )
@@ -178,7 +178,7 @@
     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++ )
     {
@@ -250,7 +250,7 @@
     T1_Kern_Pair  *min, *mid, *max;
     FT_ULong      index = KERN_INDEX( glyph1, glyph2 );
 
- 
+
     /* simple binary search */
     min = afm->kern_pairs;
     max = min + afm->num_pairs - 1;
--- a/src/type1/t1afm.h
+++ b/src/type1/t1afm.h
@@ -22,6 +22,11 @@
 #include <freetype/internal/ftobjs.h>
 
 
+#ifdef __cplusplus
+  extern "C" {
+#endif
+
+
   typedef struct  T1_Kern_Pair_
   {
     FT_UInt    glyph1;
@@ -30,6 +35,7 @@
 
   } T1_Kern_Pair;
 
+
   typedef struct  T1_AFM_
   {
     FT_Int         num_pairs;
@@ -51,6 +57,11 @@
                         FT_UInt     glyph1,
                         FT_UInt     glyph2,
                         FT_Vector*  kerning );
+
+
+#ifdef __cplusplus
+  }
+#endif
 
 
 #endif /* T1AFM_H */
--- a/src/type1/t1hinter.c
+++ b/src/type1/t1hinter.c
@@ -763,7 +763,6 @@
   }
 
 
-  LOCAL_FUNC
   const T1_Hinter_Funcs  t1_hinter_funcs =
   {
     (T1_Hinter_ChangeHints)t1_hinter_changehints,
--- a/src/type1/t1hinter.h
+++ b/src/type1/t1hinter.h
@@ -225,8 +225,7 @@
   /*    A table containing the address of various functions used during    */
   /*    the loading of an hinted scaled outline.                           */
   /*                                                                       */
-  LOCAL_DEF
-  const T1_Hinter_Funcs  t1_hinter_funcs;
+  extern const T1_Hinter_Funcs  t1_hinter_funcs;
 
 
   LOCAL_DEF
--- a/src/type1/t1objs.c
+++ b/src/type1/t1objs.c
@@ -342,7 +342,8 @@
             full++;
           }
 
-          root->style_name = ( *full == ' ' ? full + 1 : "Regular" );
+          root->style_name = ( *full == ' ' ? full + 1
+                                            : (char *)"Regular" );
         }
         else
         {
--- a/src/type1/t1tokens.c
+++ b/src/type1/t1tokens.c
@@ -459,7 +459,7 @@
     FT_UShort     tag;
     FT_ULong      size;
 
-    FT_Byte*      private;
+    FT_Byte*      private_dict;
 
     /* are we already in the private dictionary ? */
     if ( tokzer->in_private )
@@ -471,8 +471,8 @@
       /* made of several segments.  We thus first read the number of  */
       /* segments to compute the total size of the private dictionary */
       /* then re-read them into memory.                               */
-      FT_Long   start_pos    = FILE_Pos();
-      FT_ULong  private_size = 0;
+      FT_Long   start_pos         = FILE_Pos();
+      FT_ULong  private_dict_size = 0;
 
 
       for (;;)
@@ -481,7 +481,7 @@
         if ( error || tag != 0x8002 )
           break;
 
-        private_size += size;
+        private_dict_size += size;
 
         if ( FILE_Skip( size ) )
           goto Fail;
@@ -489,7 +489,7 @@
 
       /* check that we have a private dictionary there */
       /* and allocate private dictionary buffer        */
-      if ( private_size == 0 )
+      if ( private_dict_size == 0 )
       {
         FT_ERROR(( "Open_PrivateDict:" ));
         FT_ERROR(( " invalid private dictionary section\n" ));
@@ -497,7 +497,7 @@
         goto Fail;
       }
 
-      if ( ALLOC( private, private_size ) )
+      if ( ALLOC( private_dict, private_dict_size ) )
         goto Fail;
 
       /* read all sections into buffer */
@@ -504,7 +504,7 @@
       if ( FILE_Seek( start_pos ) )
         goto Fail_Private;
 
-      private_size = 0;
+      private_dict_size = 0;
       for (;;)
       {
         error = Read_PFB_Tag( stream, &tag, &size );
@@ -514,10 +514,10 @@
           break;
         }
 
-        if ( FILE_Read( private + private_size, size ) )
+        if ( FILE_Read( private_dict + private_dict_size, size ) )
           goto Fail_Private;
 
-        private_size += size;
+        private_dict_size += size;
       }
 
       /* we must free the field `tokzer.base' if we are in a disk-based */
@@ -525,10 +525,10 @@
       if ( stream->read )
         FREE( tokzer->base );
 
-      tokzer->base   = private;
+      tokzer->base   = private_dict;
       tokzer->cursor = 0;
-      tokzer->limit  = private_size;
-      tokzer->max    = private_size;
+      tokzer->limit  = private_dict_size;
+      tokzer->max    = private_dict_size;
     }
     else
     {
@@ -570,14 +570,14 @@
         {
           size = stream->size - tokzer->cursor - 1; /* remaining bytes */
 
-          if ( ALLOC( private, size ) )  /* allocate private dict buffer */
+          if ( ALLOC( private_dict, size ) )  /* alloc private dict buffer */
             goto Fail;
 
           /* copy eexec-encrypted bytes */
-          MEM_Copy( private, tokzer->base + tokzer->cursor + 1, size );
+          MEM_Copy( private_dict, tokzer->base + tokzer->cursor + 1, size );
 
           /* reset pointers - forget about file mapping */
-          tokzer->base   = private;
+          tokzer->base   = private_dict;
           tokzer->limit  = size;
           tokzer->max    = size;
           tokzer->cursor = 0;
@@ -613,10 +613,10 @@
         count = stream->size - tokzer->cursor;
         size  = count / 2;
 
-        if ( ALLOC( private, size ) )   /* allocate private dict buffer */
+        if ( ALLOC( private_dict, size ) )   /* alloc private dict buffer */
           goto Fail;
 
-        write = private;
+        write = private_dict;
         cur   = tokzer->base + tokzer->cursor;
         limit = tokzer->base + tokzer->limit;
 
@@ -664,7 +664,7 @@
           FREE( tokzer->base );
 
         /* set up pointers */
-        tokzer->base   = private;
+        tokzer->base   = private_dict;
         tokzer->limit  = size;
         tokzer->max    = size;
         tokzer->cursor = 0;
@@ -679,7 +679,7 @@
     return error;
 
   Fail_Private:
-    FREE( private );
+    FREE( private_dict );
     goto Fail;
   }
 
@@ -1004,7 +1004,9 @@
                            tok->token.len - 1,
                            t1_immediates,
                            imm_max - imm_first_ );
-        tok->token.kind2 = ( index >= 0 ) ? imm_first_ + index : 0;
+        tok->token.kind2 = ( index >= 0 )
+                              ? (T1_TokenType)( imm_first_ + index )
+                              : tok_error;
         break;
 
       case tok_any:         /* test for keyword */
@@ -1015,14 +1017,14 @@
         if ( index >= 0 )
         {
           tok->token.kind  = tok_keyword;
-          tok->token.kind2 = key_first_ + index;
+          tok->token.kind2 = (T1_TokenType)( key_first_ + index );
         }
         else
-          tok->token.kind2 = 0;
+          tok->token.kind2 = tok_error;
         break;
 
       default:
-         tok->token.kind2 = 0;
+         tok->token.kind2 = tok_error;
       }
     }
     return tokenizer->error;
--- a/src/type1/t1tokens.h
+++ b/src/type1/t1tokens.h
@@ -21,6 +21,12 @@
 
 #include <t1objs.h>
 
+
+#ifdef __cplusplus
+  extern "C" {
+#endif
+
+
   /* enum value of first keyword */
 #define key_first_  100
 
@@ -231,6 +237,11 @@
   void  t1_decrypt( FT_Byte*   buffer,
                     FT_Int     length,
                     FT_UShort  seed );
+
+
+#ifdef __cplusplus
+  }
+#endif
 
 #endif /* T1TOKENS_H */
 
--- a/src/type1z/type1z.c
+++ b/src/type1z/type1z.c
@@ -1,32 +1,21 @@
 /***************************************************************************/
 /*                                                                         */
-/*  type1.c                                                                */
+/*  type1z.c                                                               */
 /*                                                                         */
-/*  FreeType Type 1 driver component                                       */
+/*    FreeType experimental Type 1 driver component (body only).           */
 /*                                                                         */
-/*  Copyright 1996-1998 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.                                        */
 /*                                                                         */
-/*                                                                         */
-/*  This file is used to compile the FreeType Type 1  font driver.         */
-/*  It relies on all components included in the "base" layer (see          */
-/*  the file "ftbase.c"). Source code is located in "freetype/ttlib"       */
-/*  and contains :                                                         */
-/*                                                                         */
-/*     - a driver interface                                                */
-/*     - an object manager                                                 */
-/*     - a table loader                                                    */
-/*     - a glyph loader                                                    */
-/*     - a glyph hinter                                                    */
-/*                                                                         */
 /***************************************************************************/
 
+
 #define FT_MAKE_OPTION_SINGLE_OBJECT
 
 #include <z1parse.c>
@@ -39,3 +28,5 @@
 #include <z1afm.c>
 #endif
 
+
+/* END */
--- a/src/type1z/z1afm.c
+++ b/src/type1z/z1afm.c
@@ -1,51 +1,86 @@
-/***************************************************************************
- *
- * t1afm.c  - support for reading Type 1 AFM files
- *
- *
- ***************************************************************************/
+/***************************************************************************/
+/*                                                                         */
+/*  z1afm.c                                                                */
+/*                                                                         */
+/*    AFM support for Type 1 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 <z1afm.h>
 #include <freetype/internal/ftstream.h>
 #include <freetype/internal/t1types.h>
-#include <stdlib.h>  /* for qsort */
 
+#include <stdlib.h>  /* for qsort()   */
+#include <string.h>  /* for strcmp()  */
+#include <ctype.h>   /* for isalnum() */
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* The macro FT_COMPONENT is used in trace mode.  It is an implicit      */
+  /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log  */
+  /* messages during execution.                                            */
+  /*                                                                       */
+#undef  FT_COMPONENT
+#define FT_COMPONENT  trace_z1afm
+
+
   LOCAL_FUNC
-  void  Z1_Done_AFM( FT_Memory memory, Z1_AFM*  afm )
+  void  Z1_Done_AFM( FT_Memory  memory,
+                     Z1_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 )
+  FT_UInt  afm_atoindex( FT_Byte**  start,
+                         FT_Byte*   limit,
+                         T1_Font*   type1 )
   {
-    FT_Byte* p = *start;
-    FT_Int   len;
-    FT_UInt  result = 0;
-    char     temp[64];
+    FT_Byte*  p = *start;
+    FT_Int    len;
+    FT_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;
 
+
       /* copy glyph name to intermediate array */
       MEM_Copy( temp, *start, len );
       temp[len] = 0;
@@ -55,7 +90,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,56 +103,61 @@
   }
 
 
- /* read an integer */
+  /* read an integer */
   static
-  int  afm_atoi( FT_Byte** start, FT_Byte*  limit )
+  int  afm_atoi( FT_Byte**  start,
+                 FT_Byte*   limit )
   {
     FT_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 == '-')
+      if ( *p == '-' )
         sign = -1;
 
       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 )  ( ( (FT_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 )
   {
     Z1_Kern_Pair*  pair1 = (Z1_Kern_Pair*)a;
     Z1_Kern_Pair*  pair2 = (Z1_Kern_Pair*)b;
 
-    FT_ULong  index1 = KERN_INDEX(pair1->glyph1,pair1->glyph2);
-    FT_ULong  index2 = KERN_INDEX(pair2->glyph1,pair2->glyph2);
+    FT_ULong  index1 = KERN_INDEX( pair1->glyph1, pair1->glyph2 );
+    FT_ULong  index2 = KERN_INDEX( pair2->glyph1, pair2->glyph2 );
 
-    return ( index1 < index2 ? -1 :
-           ( index1 > index2 ?  1 : 0 ));
+
+    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  Z1_Read_AFM( FT_Face   t1_face,
-                         FT_Stream stream )
+  FT_Error  Z1_Read_AFM( FT_Face    t1_face,
+                         FT_Stream  stream )
   {
     FT_Error       error;
     FT_Memory      memory = stream->memory;
@@ -128,7 +169,8 @@
     T1_Font*       type1 = &((T1_Face)t1_face)->type1;
     Z1_AFM*        afm   = 0;
 
-    if ( ACCESS_Frame(stream->size) )
+
+    if ( ACCESS_Frame( stream->size ) )
       return error;
 
     start = (FT_Byte*)stream->cursor;
@@ -135,21 +177,21 @@
     limit = (FT_Byte*)stream->limit;
     p     = start;
 
-    /* we are now going to count the occurences of "KP" or "KPX" in */
-    /* the AFM file..                                               */
+    /* we are now going to count the occurences of `KP' or `KPX' in */
+    /* 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, Z1_Kern_Pair ) )
       goto Exit;
 
@@ -160,15 +202,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;
 
+
         /* 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 );
@@ -183,18 +227,20 @@
     }
 
     /* now, sort the kern pairs according to their glyph indices */
-    qsort( afm->kern_pairs, count, sizeof(Z1_Kern_Pair), compare_kern_pairs );
+    qsort( afm->kern_pairs, count, sizeof ( Z1_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  Z1_Get_Kerning( Z1_AFM*     afm,
                         FT_UInt     glyph1,
@@ -202,18 +248,21 @@
                         FT_Vector*  kerning )
   {
     Z1_Kern_Pair  *min, *mid, *max;
-    FT_ULong       index = KERN_INDEX(glyph1,glyph2);
+    FT_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;
 
-      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;
@@ -220,10 +269,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/type1z/z1afm.h
+++ b/src/type1z/z1afm.h
@@ -1,50 +1,70 @@
-/***************************************************************************
- *
- * t1afm.h  - support for reading Type 1 AFM files
- *
- *
- ***************************************************************************/
+/***************************************************************************/
+/*                                                                         */
+/*  z1afm.h                                                                */
+/*                                                                         */
+/*    AFM support for Type 1 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/ftstream.h>
-#include <freetype/internal/ftobjs.h>
-#include <freetype/internal/t1types.h>
-#include <freetype/internal/t1errors.h>
+#ifndef Z1AFM_H
+#define Z1AFM_H
 
-/* In this version, we only read the kerning table from the */
-/* AFM file. We may add support for ligatures a bit later.. */
+#include <z1objs.h>
 
-typedef struct Z1_Kern_Pair_
-{
-  FT_UInt   glyph1;
-  FT_UInt   glyph2;
-  FT_Vector kerning;
 
-} Z1_Kern_Pair;
+#ifdef __cplusplus
+  extern "C" {
+#endif
 
 
-typedef struct Z1_AFM_
-{
-  FT_Int        num_pairs;
-  Z1_Kern_Pair* kern_pairs;
+  typedef struct  Z1_Kern_Pair_
+  {
+    FT_UInt    glyph1;
+    FT_UInt    glyph2;
+    FT_Vector  kerning;
 
-} Z1_AFM;
+  } Z1_Kern_Pair;
 
 
-LOCAL_DEF
-FT_Error  Z1_Read_AFM( FT_Face    face,
-                       FT_Stream  stream );
+  typedef struct  Z1_AFM_
+  {
+    FT_Int         num_pairs;
+    Z1_Kern_Pair*  kern_pairs;
 
-LOCAL_DEF
-void  Z1_Done_AFM( FT_Memory  memory,
-                   Z1_AFM*    afm );
+  } Z1_AFM;
 
-LOCAL_DEF
-void  Z1_Get_Kerning( Z1_AFM*     afm,
-                      FT_UInt     glyph1,
-                      FT_UInt     glyph2,
-                      FT_Vector*  kerning );
 
-#endif /* T1AFM_H */
+  LOCAL_DEF
+  FT_Error  Z1_Read_AFM( FT_Face    face,
+                         FT_Stream  stream );
+
+  LOCAL_DEF
+  void  Z1_Done_AFM( FT_Memory  memory,
+                     Z1_AFM*    afm );
+
+  LOCAL_DEF
+  void  Z1_Get_Kerning( Z1_AFM*     afm,
+                        FT_UInt     glyph1,
+                        FT_UInt     glyph2,
+                        FT_Vector*  kerning );
+
+
+#ifdef __cplusplus
+  }
+#endif
+
+
+#endif /* Z1AFM_H */
+
+
+/* END */
--- a/src/type1z/z1driver.h
+++ b/src/type1z/z1driver.h
@@ -15,12 +15,12 @@
  *
  ******************************************************************/
 
-#ifndef T1DRIVER_H
-#define T1DRIVER_H
+#ifndef Z1DRIVER_H
+#define Z1DRIVER_H
 
 #include <freetype/internal/ftdriver.h>
 
   FT_EXPORT_VAR(const  FT_Driver_Class)  t1z_driver_class;
 
-#endif /* T1DRIVER_H */
+#endif /* Z1DRIVER_H */
 
--- a/src/type1z/z1gload.h
+++ b/src/type1z/z1gload.h
@@ -32,8 +32,8 @@
  *
  ******************************************************************/
 
-#ifndef T1GLOAD_H
-#define T1GLOAD_H
+#ifndef Z1GLOAD_H
+#define Z1GLOAD_H
 
 #include <z1objs.h>
 
@@ -185,4 +185,4 @@
   }
 #endif
 
-#endif /* T1GLOAD_H */
+#endif /* Z1GLOAD_H */
--- a/src/type1z/z1load.h
+++ b/src/type1z/z1load.h
@@ -15,8 +15,8 @@
  *
  ******************************************************************/
 
-#ifndef T1LOAD_H
-#define T1LOAD_H
+#ifndef Z1LOAD_H
+#define Z1LOAD_H
 
 #include <freetype/internal/ftstream.h>
 #include <freetype/internal/t1types.h>
@@ -71,7 +71,7 @@
   }
 #endif
 
-#endif /* T1LOAD_H */
+#endif /* Z1LOAD_H */
 
 
 /* END */
--- a/src/type1z/z1objs.c
+++ b/src/type1z/z1objs.c
@@ -201,7 +201,8 @@
             full++;
           }
 
-          root->style_name = ( *full == ' ' ? full+1 : "Regular" );
+          root->style_name = ( *full == ' ' ? full + 1
+                                            : (char *)"Regular" );
         }
         else
         {
--- a/src/type1z/z1objs.h
+++ b/src/type1z/z1objs.h
@@ -15,8 +15,8 @@
  *
  ******************************************************************/
 
-#ifndef T1OBJS_H
-#define T1OBJS_H
+#ifndef Z1OBJS_H
+#define Z1OBJS_H
 
 #include <freetype/internal/ftobjs.h>
 #include <freetype/config/ftconfig.h>
@@ -209,7 +209,7 @@
   }
 #endif
 
-#endif /* T1OBJS_H */
+#endif /* Z1OBJS_H */
 
 
 /* END */
--- a/src/type1z/z1parse.h
+++ b/src/type1z/z1parse.h
@@ -28,8 +28,8 @@
  *
  ******************************************************************/
 
-#ifndef T1PARSE_H
-#define T1PARSE_H
+#ifndef Z1PARSE_H
+#define Z1PARSE_H
 
 #include <freetype/internal/t1types.h>
 
@@ -341,7 +341,7 @@
   }
 #endif
 
-#endif /* T1PARSE_H */
+#endif /* Z1PARSE_H */
 
 
 /* END */