shithub: freetype+ttf2subf

Download patch

ref: 545c4e566e9785ba3c84062e211d21aeb5be989a
parent: 281679de8591f6884ea904c9c812e520ba3cc5dc
author: Werner Lemberg <[email protected]>
date: Wed May 17 18:55:04 EDT 2006

* src/truetype/ttgload.c (TT_Load_Composite_Glyph)
[FT_CONFIG_OPTION_BYTECODE_INTERPRETER]: Make it compilable again.


Formatting, documentation fixes.

git/fs: mount .git/fs: mount/attach disallowed
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,26 +1,69 @@
+2006-05-18  Werner Lemberg  <[email protected]>
+
+	* src/truetype/ttgload.c (TT_Load_Composite_Glyph)
+	[FT_CONFIG_OPTION_BYTECODE_INTERPRETER]: Make it compilable again.
+
 2006-05-17  David Turner  <[email protected]>
 
-        * include/freetype/internal/tttypes.h, src/autofit/afangles.c,
-        src/autofit/afcjk.c, src/autofit/afhints.c, src/autofit/aflatin.c,
-        src/autofit/aftypes.h, src/base/ftcalc.c, src/base/ftoutln.c,
-        src/gzip/ftgzip.c, src/psaux/psconv.c, src/truetype/ttgload.c,
-        src/type1/t1gload.c:
+	This is a major patch used to drastically improve the performance of
+	loading glyphs.  This both speeds up loading the glyph vectors
+	themselves and the auto-fitter module.
 
-          this is a major patch used to drastically improve the performance
-          of loading glyphs. This both speeds up loading the glypn vector
-          themselves and the auto-fitter.
+	We now use inline assembler code with GCC to implement `FT_MulFix',
+	which is probably the most important function related to the
+	engine's performance.
 
-          note that we've started using inline assembler with GCC to
-          implement FT_MulFix, given that this function is so damn
-          important for the engine's performance.
+	The resulting speed-up is about 25%.
 
-          the resulting speed-up is about 25%.
 
+	* include/freetype/internal/tttypes.h (TT_LoaderRec): Add fields
+	`cursor' and `limit'.
 
-        * src/ftccmap.c (FTC_CMapCache_Lookup): changed the threshold
-        used to detect rogue clients from 4 to 16. This is to prevent
-        some segmentation faults with fonts like KozMinProVI-Regular.otf
-        which comes from the Japanese Adobe Reader Asian Font pack.
+	* src/autofit/afangles.c (af_corner_is_flat, af_corner_orientation):
+	New functions.
+	(AF_ATAN_BITS, af_arctan, af_angle_atan): Comment out.
+	[TEST]: Remove.
+
+	* src/autofit/afcjk.c (AF_Script_UniRangeRec): Comment out test
+	code.
+
+	* src/autofit/afhints.c (af_axis_hints_new_segment): Don't call
+	`FT_ZERO'
+	(af_direction_compute, af_glyph_hints_compute_inflections): Rewritten.
+	(af_glyph_hints_reload: Rewrite recognition of weak points.
+
+	* src/autofit/aflatin.c (af_latin_hints_compute_segments): Move
+	constant values out of the loops.
+
+	* src/autofit/aftypes.h: Updated.
+
+	* src/base/ftcalc.c (FT_MulFix): Use inline assembler code.
+
+	* src/base/ftoutln.c (FT_Outline_Get_Orientation): Use vector
+	product to get orientation.
+
+	* src/gzip/ftgzip.c (ft_get_uncompressed_size): New function.
+	(FT_Stream_OpenGzip): Use it to handle small files directly in
+	memory.
+
+	* src/psaux/psconv.c (PS_Conv_ASCIIHexDecode, PS_ConvEexecDecode):
+	Improve performance.
+
+	* src/truetype/ttgload.c (TT_Access_Glyph_Frame): Set `cursor' and
+	`limit'.
+
+	(TT_Load_Glyph_Header, TT_Load_Simple_Glyph,
+	TT_Load_Composite_Glyph): Updated.  Add threshold to protect against
+	exceedingly large values of number of contours.  Speed up by
+	reducing the number of loops.
+
+	* src/type1/t1gload.c (T1_Load_Glyph): Don't apply unit matrix.
+
+
+	* src/cache/ftccmap.c (FTC_CMapCache_Lookup): Change the threshold
+	used to detect rogue clients from 4 to 16.  This is to prevent some
+	segmentation faults with fonts like `KozMinProVI-Regular.otf' which
+	comes from the Japanese Adobe Reader Asian Font pack.
 
 2007-05-17  Werner Lemberg  <[email protected]>
 
--- a/src/autofit/afangles.c
+++ b/src/autofit/afangles.c
@@ -5,7 +5,7 @@
 /*    Routines used to compute vector angles with limited accuracy         */
 /*    and very high speed.  It also contains sorting routines (body).      */
 /*                                                                         */
-/*  Copyright 2003, 2004, 2005 by                                          */
+/*  Copyright 2003, 2004, 2005, 2006 by                                    */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
@@ -21,10 +21,10 @@
 
 
   FT_LOCAL_DEF( FT_Int )
-  af_corner_is_flat( FT_Pos   x_in,
-                     FT_Pos   y_in,
-                     FT_Pos   x_out,
-                     FT_Pos   y_out )
+  af_corner_is_flat( FT_Pos  x_in,
+                     FT_Pos  y_in,
+                     FT_Pos  x_out,
+                     FT_Pos  y_out )
   {
     FT_Pos  ax = x_in;
     FT_Pos  ay = y_in;
@@ -31,19 +31,30 @@
 
     FT_Pos  d_in, d_out, d_corner;
 
-    if ( ax < 0 ) ax = -ax;
-    if ( ay < 0 ) ay = -ay;
+
+    if ( ax < 0 )
+      ax = -ax;
+    if ( ay < 0 )
+      ay = -ay;
     d_in = ax + ay;
 
-    ax = x_out; if ( ax < 0 ) ax = -ax;
-    ay = y_out; if ( ay < 0 ) ay = -ay;
-    d_out = ax+ay;
+    ax = x_out;
+    if ( ax < 0 )
+      ax = -ax;
+    ay = y_out;
+    if ( ay < 0 )
+      ay = -ay;
+    d_out = ax + ay;
 
-    ax = x_out + x_in; if ( ax < 0 ) ax = -ax;
-    ay = y_out + y_in; if ( ay < 0 ) ay = -ay;
-    d_corner = ax+ay;
+    ax = x_out + x_in;
+    if ( ax < 0 )
+      ax = -ax;
+    ay = y_out + y_in;
+    if ( ay < 0 )
+      ay = -ay;
+    d_corner = ax + ay;
 
-    return ( d_in + d_out - d_corner ) < (d_corner >> 4);
+    return ( d_in + d_out - d_corner ) < ( d_corner >> 4 );
   }
 
 
@@ -53,30 +64,39 @@
                          FT_Pos  x_out,
                          FT_Pos  y_out )
   {
-    FT_Pos   delta;
+    FT_Pos  delta;
 
-    delta = x_in*y_out - y_in*x_out;
 
+    delta = x_in * y_out - y_in * x_out;
+
     if ( delta == 0 )
       return 0;
     else
-      return 1 - 2*(delta < 0);
+      return 1 - 2 * ( delta < 0 );
   }
 
 
-  /* we're not using af_angle_atan anymore, but we keep the source
-   * code below just in case :-)
+  /*
+   *  We are not using `af_angle_atan' anymore, but we keep the source
+   *  code below just in case...
    */
+
+
 #if 0
 
- /* the trick here is to realize that we don't need an very accurate
-  * angle approximation. We're going to use the result of af_angle_atan
-  * to only compare the sign of angle differences, or see if its magnitude
-  * is very small.
-  *
-  * the approximation (dy*PI/(|dx|+|dy|))) should be enough, and much
-  * faster to compute.
-  */
+
+  /*
+   *  The trick here is to realize that we don't need a very accurate angle
+   *  approximation.  We are going to use the result of `af_angle_atan' to
+   *  only compare the sign of angle differences, or check whether its
+   *  magnitude is very small.
+   *
+   *  The approximation
+   *
+   *    dy * PI / (|dx|+|dy|)
+   *
+   *  should be enough, and much faster to compute.
+   */
   FT_LOCAL_DEF( AF_Angle )
   af_angle_atan( FT_Fixed  dx,
                  FT_Fixed  dy )
@@ -85,9 +105,12 @@
     FT_Fixed  ax = dx;
     FT_Fixed  ay = dy;
 
-    if ( ax < 0 ) ax = -ax;
-    if ( ay < 0 ) ay = -ay;
 
+    if ( ax < 0 )
+      ax = -ax;
+    if ( ay < 0 )
+      ay = -ay;
+
     ax += ay;
 
     if ( ax == 0 )
@@ -94,7 +117,7 @@
       angle = 0;
     else
     {
-      angle = (AF_ANGLE_PI2*dy)/(ax+ay);
+      angle = ( AF_ANGLE_PI2 * dy ) / ( ax + ay );
       if ( dx < 0 )
       {
         if ( angle >= 0 )
@@ -107,8 +130,10 @@
     return angle;
   }
 
+
 #elif 0
 
+
   /* the following table has been automatically generated with */
   /* the `mather.py' Python script                             */
 
@@ -211,7 +236,7 @@
   }
 
 
-#endif
+#endif /* 0 */
 
 
   FT_LOCAL_DEF( void )
--- a/src/autofit/afcjk.c
+++ b/src/autofit/afcjk.c
@@ -1438,7 +1438,7 @@
   static const AF_Script_UniRangeRec  af_cjk_uniranges[] =
   {
 #if 0
-    { 0x0100,  0xFFFF },  /* why ?? */
+    { 0x0100,  0xFFFF },  /* why this? */
 #endif
     { 0x2E80,  0x2EFF },  /* CJK Radicals Supplement */
     { 0x2F00,  0x2FDF },  /* Kangxi Radicals */
--- a/src/autofit/afhints.c
+++ b/src/autofit/afhints.c
@@ -267,16 +267,18 @@
 #endif /* AF_DEBUG */
 
 
-
   /* compute the direction value of a given vector */
   FT_LOCAL_DEF( AF_Direction )
   af_direction_compute( FT_Pos  dx,
                         FT_Pos  dy )
   {
+
 #if 1
+
     FT_Pos        ll, ss;  /* long and short arm lengths */
     AF_Direction  dir;     /* candidate direction        */
 
+
     if ( dy >= dx )
     {
       if ( dy >= -dx )
@@ -309,11 +311,13 @@
     }
 
     ss *= 12;
-    if ( ll <= FT_ABS(ss) )
+    if ( ll <= FT_ABS( ss ) )
       dir = AF_DIR_NONE;
 
     return dir;
+
 #else /* 0 */
+
     AF_Direction  dir;
     FT_Pos        ax = FT_ABS( dx );
     FT_Pos        ay = FT_ABS( dy );
@@ -335,6 +339,7 @@
     }
 
     return dir;
+
 #endif /* 0 */
 
   }
@@ -341,7 +346,9 @@
 
 
   /* compute all inflex points in a given glyph */
+
 #if 1
+
   static void
   af_glyph_hints_compute_inflections( AF_GlyphHints  hints )
   {
@@ -403,7 +410,7 @@
       in_x = out_x;
       in_y = out_y;
 
-      /* now, process all segments in the contour */
+      /* now process all segments in the contour */
       do
       {
         /* first, extend current segment's end whenever possible */
@@ -439,8 +446,8 @@
           start->flags |= AF_FLAG_INFLECTION;
         }
 
-        start     = end;
-        end       = after;
+        start = end;
+        end   = after;
 
         orient_prev = orient_cur;
         in_x        = out_x;
@@ -454,6 +461,7 @@
   }
 
 #else /* old code */
+
   static void
   af_glyph_hints_compute_inflections( AF_GlyphHints  hints )
   {
@@ -560,6 +568,7 @@
       ;
     }
   }
+
 #endif /* old code */
 
 
@@ -809,7 +818,9 @@
           }
           else if ( point->out_dir == point->in_dir )
           {
+
 #if 1
+
             if ( point->out_dir != AF_DIR_NONE )
               goto Is_Weak_Point;
 
@@ -817,6 +828,7 @@
               goto Is_Weak_Point;
 
 #else /* old code */
+
             AF_Angle  angle_in, angle_out, delta;
 
 
@@ -830,7 +842,9 @@
 
             if ( delta < 2 && delta > -2 )
               goto Is_Weak_Point;
+
 #endif /* old code */
+
           }
           else if ( point->in_dir == -point->out_dir )
             goto Is_Weak_Point;
--- a/src/autofit/aflatin.c
+++ b/src/autofit/aflatin.c
@@ -602,6 +602,7 @@
     FT_Pos    max_coord = -32000;
 #endif
 
+
     FT_ZERO( &seg0 );
     seg0.score = 32000;
     seg0.flags = AF_EDGE_NORMAL;
--- a/src/autofit/aftypes.h
+++ b/src/autofit/aftypes.h
@@ -137,26 +137,29 @@
 #endif /* 0 */
 
 
- /* return TRUE if a corner is flat, or nearly flat, this is equivalent
-  * to say that the angle difference between the 'in' and 'out' vectors is
-  * very small
-  */
+  /*
+   *  Return TRUE if a corner is flat or nearly flat.  This is equivalent to
+   *  saying that the angle difference between the `in' and `out' vectors is
+   *  very small.
+   */
   FT_LOCAL( FT_Int )
-  af_corner_is_flat( FT_Pos   x_in,
-                     FT_Pos   y_in,
-                     FT_Pos   x_out,
-                     FT_Pos   y_out );
+  af_corner_is_flat( FT_Pos  x_in,
+                     FT_Pos  y_in,
+                     FT_Pos  x_out,
+                     FT_Pos  y_out );
 
- /* return a value that can be -1, 0 or +1 depending on the orientation
-  * of a given corner. We're using the Cartesian coordinate system,
-  * with positive Ys going upwards. The function returns +1 when
-  * the corner turns to the left, -1 to the right, and 0 for undecided
-  */
+  /*
+   *  Return -1, 0, or +1, depending on the orientation of a given corner. 
+   *  We use the Cartesian coordinate system, with positive vertical values
+   *  going upwards.  The function returns +1 when the corner turns to the
+   *  left, -1 to the right, and 0 for undecided.
+   */
   FT_LOCAL( FT_Int )
   af_corner_orientation( FT_Pos  x_in,
                          FT_Pos  y_in,
                          FT_Pos  x_out,
                          FT_Pos  y_out );
+
 
 #define AF_ANGLE_DIFF( result, angle1, angle2 ) \
   FT_BEGIN_STMNT                                \
--- a/src/base/ftcalc.c
+++ b/src/base/ftcalc.c
@@ -396,29 +396,32 @@
   FT_MulFix( FT_Long  a,
              FT_Long  b )
   {
-    /* let's use inline assembly to speed things a bit */
-#if defined(__GNUC__) && defined(i386)
+    /* use inline assembly to speed up things a bit */
 
+#if defined( __GNUC__ ) && defined( i386 )
+
     FT_Long  result;
 
+
     __asm__ __volatile__ (
-        "imul  %%edx\n"
-        "movl  %%edx, %%ecx\n"
-        "sarl  $31, %%ecx\n"
-        "addl  $0x8000, %%ecx\n"
-        "addl  %%ecx, %%eax\n"
-        "adcl  $0, %%edx\n"
-        "shrl  $16, %%eax\n"
-        "shll  $16, %%edx\n"
-        "addl  %%edx, %%eax\n"
-        "mov  %%eax, %0\n"
-       : "=r"(result)
-       : "a"(a), "d"(b)
-       : "%ecx"
-     );
-     return result;
+      "imul  %%edx\n"
+      "movl  %%edx, %%ecx\n"
+      "sarl  $31, %%ecx\n"
+      "addl  $0x8000, %%ecx\n"
+      "addl  %%ecx, %%eax\n"
+      "adcl  $0, %%edx\n"
+      "shrl  $16, %%eax\n"
+      "shll  $16, %%edx\n"
+      "addl  %%edx, %%eax\n"
+      "mov   %%eax, %0\n"
+      : "=r"(result)
+      : "a"(a), "d"(b)
+      : "%ecx"
+    );
+    return result;
 
 #elif 1
+
     FT_Long   sa, sb;
     FT_ULong  ua, ub;
 
@@ -427,24 +430,22 @@
       return a;
 
     sa = ( a >> ( sizeof ( a ) * 8 - 1 ) );
-     a = ( a ^ sa ) - sa;
+    a  = ( a ^ sa ) - sa;
     sb = ( b >> ( sizeof ( b ) * 8 - 1 ) );
-     b = ( b ^ sb ) - sb;
+    b  = ( b ^ sb ) - sb;
 
     ua = (FT_ULong)a;
     ub = (FT_ULong)b;
 
     if ( ua <= 2048 && ub <= 1048576L )
-    {
-      ua = ( ua * ub + 0x8000 ) >> 16;
-    }
+      ua = ( ua * ub + 0x8000U ) >> 16;
     else
     {
-      FT_ULong  al = ua & 0xFFFF;
+      FT_ULong  al = ua & 0xFFFFU;
 
 
       ua = ( ua >> 16 ) * ub +  al * ( ub >> 16 ) +
-           ( ( al * ( ub & 0xFFFF ) + 0x8000 ) >> 16 );
+           ( ( al * ( ub & 0xFFFFU ) + 0x8000U ) >> 16 );
     }
 
     sa ^= sb,
@@ -461,23 +462,21 @@
     if ( a == 0 || b == 0x10000L )
       return a;
 
-    s  = a; a = FT_ABS(a);
-    s ^= b; b = FT_ABS(b);
+    s  = a; a = FT_ABS( a );
+    s ^= b; b = FT_ABS( b );
 
     ua = (FT_ULong)a;
     ub = (FT_ULong)b;
 
     if ( ua <= 2048 && ub <= 1048576L )
-    {
-      ua = ( ua * ub + 0x8000L ) >> 16;
-    }
+      ua = ( ua * ub + 0x8000UL ) >> 16;
     else
     {
-      FT_ULong  al = ua & 0xFFFFL;
+      FT_ULong  al = ua & 0xFFFFUL;
 
 
       ua = ( ua >> 16 ) * ub +  al * ( ub >> 16 ) +
-           ( ( al * ( ub & 0xFFFFL ) + 0x8000L ) >> 16 );
+           ( ( al * ( ub & 0xFFFFUL ) + 0x8000UL ) >> 16 );
     }
 
     return ( s < 0 ? -(FT_Long)ua : (FT_Long)ua );
--- a/src/base/ftoutln.c
+++ b/src/base/ftoutln.c
@@ -1013,6 +1013,7 @@
     }
 
 #if 1
+
     {
       FT_Pos  dx1 = prev->x - xmin_point->x;
       FT_Pos  dy1 = prev->y - xmin_point->y;
@@ -1019,18 +1020,22 @@
       FT_Pos  dx2 = next->x - xmin_point->x;
       FT_Pos  dy2 = next->y - xmin_point->y;
 
-      if ( dy1*dx2 > dy2*dx1 )
+
+      if ( dy1 * dx2 > dy2 * dx1 )
         return FT_ORIENTATION_POSTSCRIPT;
       else
         return FT_ORIENTATION_TRUETYPE;
     }
-#else
+
+#else /* 0 */
+
     if ( FT_Atan2( prev->x - xmin_point->x, prev->y - xmin_point->y ) >
          FT_Atan2( next->x - xmin_point->x, next->y - xmin_point->y ) )
       return FT_ORIENTATION_POSTSCRIPT;
     else
       return FT_ORIENTATION_TRUETYPE;
-#endif
+
+#endif /* 0 */
   }
 
 
--- a/src/cache/ftccmap.c
+++ b/src/cache/ftccmap.c
@@ -307,9 +307,9 @@
      *  It is also very unlikely that a rogue client is interested
      *  in Unicode values 0 to 15.
      *
-     *  NOTE: The original threshold was 4, but we found a font
-     *        from the Adobe Acrobat Reader Pack, named
-     *        "KozMinProVI-Regular.otf" which contained more than 5 charmaps.
+     *  NOTE: The original threshold was 4, but we found a font from the
+     *        Adobe Acrobat Reader Pack, named `KozMinProVI-Regular.otf',
+     *        which contains more than 5 charmaps.
      */
     if ( cmap_index >= 16 )
     {
--- a/src/gzip/ftgzip.c
+++ b/src/gzip/ftgzip.c
@@ -561,6 +561,7 @@
     FT_ULong  old_pos;
     FT_ULong  result = 0;
 
+
     old_pos = stream->pos;
     if ( !FT_Stream_Seek( stream, stream->size - 4 ) )
     {
@@ -607,24 +608,28 @@
       stream->descriptor.pointer = zip;
     }
 
-   /* ok, here's a trick to try to dramatically improve the performance
-    * of dealing with small files. If the original stream size is less
-    * than a certain threshold, we try to load the whole font file in
-    * memory. this saves us from the 32KB buffer needed to inflate the
-    * file anyway, plus the two 4KB intermediate input/output buffers
-    * used in the FT_GZipFile structure.
-    */
+    /*
+     *  We use the following trick to try to dramatically improve the
+     *  performance while dealing with small files.  If the original stream
+     *  size is less than a certain threshold, we try to load the whole font
+     *  file into memory.  This saves us from using the 32KB buffer needed
+     *  to inflate the file, plus the two 4KB intermediate input/output
+     *  buffers used in the `FT_GZipFile' structure.
+     */
     {
-      FT_ULong    zip_size = ft_gzip_get_uncompressed_size( source );
+      FT_ULong  zip_size = ft_gzip_get_uncompressed_size( source );
 
-      if ( zip_size != 0 && zip_size < 40*1024 )
+
+      if ( zip_size != 0 && zip_size < 40 * 1024 )
       {
         FT_Byte*  zip_buff;
 
+
         if ( !FT_ALLOC( zip_buff, zip_size ) )
         {
           FT_ULong  count;
 
+
           count = ft_gzip_file_io( zip, 0, zip_buff, zip_size );
           if ( count == zip_size )
           {
@@ -641,6 +646,7 @@
 
             goto Exit;
           }
+
           ft_gzip_file_io( zip, 0, NULL, 0 );
           FT_FREE( zip_buff );
         }
--- a/src/psaux/psconv.c
+++ b/src/psaux/psconv.c
@@ -337,28 +337,30 @@
 
 
     n *= 2;
+
 #if 1
+
     p  = *cursor;
-    if ( n > (FT_UInt)(limit-p) )
-      n = (FT_UInt)(limit - p);
+    if ( n > (FT_UInt)( limit - p ) )
+      n = (FT_UInt)( limit - p );
 
-   /* we try to process two nibbles at a time to be as fast as possible
-    */
+    /* we try to process two nibbles at a time to be as fast as possible */
     for ( ; r < n; r++ )
     {
       FT_UInt  c = p[r];
 
-      if ( IS_PS_SPACE(c) )
+
+      if ( IS_PS_SPACE( c ) )
         continue;
 
       if ( c OP 0x80 )
         break;
 
-      c = ft_char_table[ c & 0x7F ];
+      c = ft_char_table[c & 0x7F];
       if ( (unsigned)c >= 16 )
         break;
 
-      pad = (pad << 4) | c;
+      pad = ( pad << 4 ) | c;
       if ( pad & 0x100 )
       {
         buffer[w++] = (FT_Byte)pad;
@@ -367,11 +369,14 @@
     }
 
     if ( pad != 0x01 )
-      buffer[w++] = (FT_Byte)(pad << 4);
+      buffer[w++] = (FT_Byte)( pad << 4 );
 
-    *cursor = p+r;
+    *cursor = p + r;
+
     return w;
-#else
+
+#else /* 0 */
+
     for ( r = 0; r < n; r++ )
     {
       FT_Char  c;
@@ -402,7 +407,9 @@
     *cursor = p;
 
     return ( r + 1 ) / 2;
-#endif
+
+#endif /* 0 */
+
   }
 
 
@@ -413,11 +420,13 @@
                        FT_UInt     n,
                        FT_UShort*  seed )
   {
-    FT_Byte*   p;
-    FT_UInt    r;
-    FT_UInt    s = *seed;
+    FT_Byte*  p;
+    FT_UInt   r;
+    FT_UInt   s = *seed;
 
+
 #if 1
+
     p = *cursor;
     if ( n > (FT_UInt)(limit - p) )
       n = (FT_UInt)(limit - p);
@@ -425,8 +434,9 @@
     for ( r = 0; r < n; r++ )
     {
       FT_UInt  val = p[r];
-      FT_UInt  b   = ( val ^ (s >> 8) );
+      FT_UInt  b   = ( val ^ ( s >> 8 ) );
 
+
       s         = ( (val + s)*52845U + 22719 ) & 0xFFFFU;
       buffer[r] = (FT_Byte) b;
     }
@@ -433,7 +443,9 @@
 
     *cursor = p + n;
     *seed   = (FT_UShort)s;
-#else
+
+#else /* 0 */
+
     for ( r = 0, p = *cursor; r < n && p < limit; r++, p++ )
     {
       FT_Byte  b = (FT_Byte)( *p ^ ( s >> 8 ) );
@@ -444,7 +456,8 @@
     }
     *cursor = p;
     *seed   = s;
-#endif
+
+#endif /* 0 */
 
     return r;
   }
--- a/src/truetype/ttgload.c
+++ b/src/truetype/ttgload.c
@@ -208,19 +208,19 @@
   FT_CALLBACK_DEF( FT_Error )
   TT_Load_Glyph_Header( TT_Loader  loader )
   {
-    FT_Byte*   p     = loader->cursor;
-    FT_Byte*   limit = loader->limit;
+    FT_Byte*  p     = loader->cursor;
+    FT_Byte*  limit = loader->limit;
 
 
     if ( p + 10 > limit )
       return TT_Err_Invalid_Outline;
 
-    loader->n_contours = FT_NEXT_SHORT(p);
+    loader->n_contours = FT_NEXT_SHORT( p );
 
-    loader->bbox.xMin = FT_NEXT_SHORT(p);
-    loader->bbox.yMin = FT_NEXT_SHORT(p);
-    loader->bbox.xMax = FT_NEXT_SHORT(p);
-    loader->bbox.yMax = FT_NEXT_SHORT(p);
+    loader->bbox.xMin = FT_NEXT_SHORT( p );
+    loader->bbox.yMin = FT_NEXT_SHORT( p );
+    loader->bbox.xMax = FT_NEXT_SHORT( p );
+    loader->bbox.yMax = FT_NEXT_SHORT( p );
 
     FT_TRACE5(( "  # of contours: %d\n", loader->n_contours ));
     FT_TRACE5(( "  xMin: %4d  xMax: %4d\n", loader->bbox.xMin,
@@ -263,11 +263,11 @@
     cont_limit = cont + n_contours;
 
     /* check space for contours array + instructions count */
-    if ( n_contours >= 0xFFF || p + (n_contours+1)*2 > limit )
+    if ( n_contours >= 0xFFF || p + (n_contours + 1) * 2 > limit )
       goto Invalid_Outline;
 
     for ( ; cont < cont_limit; cont++ )
-      cont[0] = FT_NEXT_USHORT(p);
+      cont[0] = FT_NEXT_USHORT( p );
 
     n_points = 0;
     if ( n_contours > 0 )
@@ -289,10 +289,10 @@
     load->glyph->control_len  = 0;
     load->glyph->control_data = 0;
 
-    if ( p+2 > limit )
+    if ( p + 2 > limit )
       goto Invalid_Outline;
 
-    n_ins = FT_NEXT_USHORT(p);
+    n_ins = FT_NEXT_USHORT( p );
 
     FT_TRACE5(( "  Instructions size: %u\n", n_ins ));
 
@@ -303,7 +303,7 @@
       goto Fail;
     }
 
-    if ( (limit - p) < n_ins )
+    if ( ( limit - p ) < n_ins )
     {
       FT_TRACE0(( "TT_Load_Simple_Glyph: Instruction count mismatch!\n" ));
       error = TT_Err_Too_Many_Hints;
@@ -332,16 +332,16 @@
 
     while ( flag < flag_limit )
     {
-      if ( p+1 > limit )
+      if ( p + 1 > limit )
         goto Invalid_Outline;
 
-      *flag++ = c = FT_NEXT_BYTE(p);
+      *flag++ = c = FT_NEXT_BYTE( p );
       if ( c & 8 )
       {
-        if ( p+1 > limit )
+        if ( p + 1 > limit )
           goto Invalid_Outline;
 
-        count = FT_NEXT_BYTE(p);
+        count = FT_NEXT_BYTE( p );
         if ( flag + (FT_Int)count > flag_limit )
           goto Invalid_Outline;
 
@@ -364,19 +364,19 @@
 
       if ( *flag & 2 )
       {
-        if ( p+1 > limit )
+        if ( p + 1 > limit )
           goto Invalid_Outline;
 
-        y = (FT_Pos)FT_NEXT_BYTE(p);
+        y = (FT_Pos)FT_NEXT_BYTE( p );
         if ( ( *flag & 16 ) == 0 )
           y = -y;
       }
       else if ( ( *flag & 16 ) == 0 )
       {
-        if ( p+2 > limit )
+        if ( p + 2 > limit )
           goto Invalid_Outline;
 
-        y = (FT_Pos)FT_NEXT_SHORT(p);
+        y = (FT_Pos)FT_NEXT_SHORT( p );
       }
 
       x     += y;
@@ -397,19 +397,19 @@
 
       if ( *flag & 4 )
       {
-        if ( p+1 > limit )
+        if ( p  +1 > limit )
           goto Invalid_Outline;
 
-        y = (FT_Pos)FT_NEXT_BYTE(p);
+        y = (FT_Pos)FT_NEXT_BYTE( p );
         if ( ( *flag & 32 ) == 0 )
           y = -y;
       }
       else if ( ( *flag & 32 ) == 0 )
       {
-        if ( p+2 > limit )
+        if ( p + 2 > limit )
           goto Invalid_Outline;
 
-        y = (FT_Pos)FT_NEXT_SHORT(p);
+        y = (FT_Pos)FT_NEXT_SHORT( p );
       }
 
       x     += y;
@@ -459,7 +459,7 @@
         goto Fail;
 
       /* check space */
-      if ( p+4 > limit )
+      if ( p + 4 > limit )
         goto Invalid_Composite;
 
       subglyph = gloader->current.subglyphs + num_subglyphs;
@@ -466,8 +466,8 @@
 
       subglyph->arg1 = subglyph->arg2 = 0;
 
-      subglyph->flags = FT_NEXT_USHORT(p);
-      subglyph->index = FT_NEXT_USHORT(p);
+      subglyph->flags = FT_NEXT_USHORT( p );
+      subglyph->index = FT_NEXT_USHORT( p );
 
       /* check space */
       count = 2;
@@ -486,13 +486,13 @@
       /* read arguments */
       if ( subglyph->flags & ARGS_ARE_WORDS )
       {
-        subglyph->arg1 = FT_NEXT_SHORT(p);
-        subglyph->arg2 = FT_NEXT_SHORT(p);
+        subglyph->arg1 = FT_NEXT_SHORT( p );
+        subglyph->arg2 = FT_NEXT_SHORT( p );
       }
       else
       {
-        subglyph->arg1 = FT_NEXT_CHAR(p);
-        subglyph->arg2 = FT_NEXT_CHAR(p);
+        subglyph->arg1 = FT_NEXT_CHAR( p );
+        subglyph->arg2 = FT_NEXT_CHAR( p );
       }
 
       /* read transform */
@@ -501,20 +501,20 @@
 
       if ( subglyph->flags & WE_HAVE_A_SCALE )
       {
-        xx = (FT_Fixed)FT_NEXT_SHORT(p) << 2;
+        xx = (FT_Fixed)FT_NEXT_SHORT( p ) << 2;
         yy = xx;
       }
       else if ( subglyph->flags & WE_HAVE_AN_XY_SCALE )
       {
-        xx = (FT_Fixed)FT_NEXT_SHORT(p) << 2;
-        yy = (FT_Fixed)FT_NEXT_SHORT(p) << 2;
+        xx = (FT_Fixed)FT_NEXT_SHORT( p ) << 2;
+        yy = (FT_Fixed)FT_NEXT_SHORT( p ) << 2;
       }
       else if ( subglyph->flags & WE_HAVE_A_2X2 )
       {
-        xx = (FT_Fixed)FT_NEXT_SHORT(p) << 2;
-        yx = (FT_Fixed)FT_NEXT_SHORT(p) << 2;
-        xy = (FT_Fixed)FT_NEXT_SHORT(p) << 2;
-        yy = (FT_Fixed)FT_NEXT_SHORT(p) << 2;
+        xx = (FT_Fixed)FT_NEXT_SHORT( p ) << 2;
+        yx = (FT_Fixed)FT_NEXT_SHORT( p ) << 2;
+        xy = (FT_Fixed)FT_NEXT_SHORT( p ) << 2;
+        yy = (FT_Fixed)FT_NEXT_SHORT( p ) << 2;
       }
 
       subglyph->transform.xx = xx;
@@ -531,6 +531,9 @@
 #ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
 
     {
+      FT_Stream  stream = loader->stream;
+
+
       /* we must undo the FT_FRAME_ENTER in order to point to the */
       /* composite instructions, if we find some.               */
       /* we will process them later...                          */