shithub: freetype+ttf2subf

Download patch

ref: 4bdf4350f258c1de66e4afccdc746c18f896ba16
parent: 032e23aab9cee8329554d30c0747549a4ca1e4ae
author: David Turner <[email protected]>
date: Thu Jan 30 18:24:18 EST 2003

various improvements for 2.1.4. see ChangeLog, I've got problems with
copy & paste on my desktop !!

git/fs: mount .git/fs: mount/attach disallowed
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,8 +1,28 @@
-2002-11-18  David Turner  <[email protected]>
+2002-01-31  David Turner  <[email protected]>
 
+    * src/gzip/adler32.c, src/gzip/ftgzip.c, src/gzip/infblock.c,
+    src/gzip/infcodes.c, src/gzip/inflate.c, src/gzip/inftrees.c,
+    src/gzip/infutil.c: removed old-style (K&R)function definitions. This
+    avoids warnings with Visual C++ at its most pedantic mode.
 
-	* Version 2.1.4 is released.
-	============================
+    * src/pfr/pfrsbit.c: removed compiler warnings
+
+    * src/cache/ftccmap.c: changed a FT_ERROR into a FT_TRACE1 since the
+    it caused "ftview" and others to dump too much junk when trying to
+    display a waterfall with a font without a Unicode charmap (e.g.
+    SYMBOL.TTF)
+
+    * src/autohint/ahtypes.h, src/autohint/ahhint.c, src/base/ftobjs.c,
+    src/truetype/ttobjs.c: implemented FT_CONFIG_CHESTER_BLUE_SCALE,
+    corresponding to the last patch from David Chester, but with a
+    much simpler (and saner) implementation.
+
+    * src/pshinter/pshalgo3.c: improved the Postscript hinter. Getting rid
+    of stem snapping seems to work well here (though the stems are still
+    slightly moved to increase contrast).
+
+    THIS IMPROVES ANTI-ALIASED RENDERING, BUT MONOCHROME AND LCD MODES
+    STILL SUCK... I need to work this a bit
 
 2003-01-22  David Chester  <[email protected]>
 
--- a/Jamfile.in
+++ b/Jamfile.in
@@ -65,7 +65,6 @@
                   base       # base component (public APIs)
                   bdf        # BDF font driver
                   cache      # cache sub-system
-                  ccg        # Chinese Character Generator font driver
                   cff        # CFF/CEF font driver
                   cid        # Postscript CID-keyed font driver
                   pcf        # PCF font driver
@@ -101,7 +100,10 @@
 # We need "freetype2/include" in the current include path in order to
 # compile any part of FreeType 2.
 #
-SubDirHdr += $(FT2_INCLUDE) ;
+HDRS += $(FT2_INCLUDE) ;
+
+
+#SubDirHdr += $(FT2_INCLUDE) ;
 
 # Uncomment the following line if you want to build individual source files
 # for each FreeType 2 module.
--- a/builds/win32/visualc/freetype.dsp
+++ b/builds/win32/visualc/freetype.dsp
@@ -54,7 +54,7 @@
 # ADD BSC32 /nologo
 LIB32=link.exe -lib
 # ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype211.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype214.lib"
 
 !ELSEIF  "$(CFG)" == "freetype - Win32 Debug"
 
@@ -78,7 +78,7 @@
 # ADD BSC32 /nologo
 LIB32=link.exe -lib
 # ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype211_D.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype214_D.lib"
 
 !ELSEIF  "$(CFG)" == "freetype - Win32 Debug Multithreaded"
 
@@ -103,7 +103,7 @@
 # ADD BSC32 /nologo
 LIB32=link.exe -lib
 # ADD BASE LIB32 /nologo /out:"lib\freetype200b8_D.lib"
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype211MT_D.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype214MT_D.lib"
 
 !ELSEIF  "$(CFG)" == "freetype - Win32 Release Multithreaded"
 
@@ -127,7 +127,7 @@
 # ADD BSC32 /nologo
 LIB32=link.exe -lib
 # ADD BASE LIB32 /nologo /out:"lib\freetype200b8.lib"
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype211MT.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype214MT.lib"
 
 !ELSEIF  "$(CFG)" == "freetype - Win32 Release Singlethreaded"
 
@@ -152,7 +152,7 @@
 # ADD BSC32 /nologo
 LIB32=link.exe -lib
 # ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype206.lib"
-# ADD LIB32 /out:"..\..\..\objs\freetype211ST.lib"
+# ADD LIB32 /out:"..\..\..\objs\freetype214ST.lib"
 # SUBTRACT LIB32 /nologo
 
 !ELSEIF  "$(CFG)" == "freetype - Win32 Debug Singlethreaded"
@@ -178,7 +178,7 @@
 # ADD BSC32 /nologo
 LIB32=link.exe -lib
 # ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype206_D.lib"
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype211ST_D.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype214ST_D.lib"
 
 !ENDIF 
 
@@ -228,6 +228,10 @@
 
 SOURCE=..\..\..\src\base\ftglyph.c
 # SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\gzip\ftgzip.c
 # End Source File
 # Begin Source File
 
--- a/include/freetype/config/ftoption.h
+++ b/include/freetype/config/ftoption.h
@@ -258,8 +258,8 @@
   /*                                                                       */
   /*   Don't define any of these macros to compile in `release' mode!      */
   /*                                                                       */
- #define  FT_DEBUG_LEVEL_ERROR
- #define  FT_DEBUG_LEVEL_TRACE
+/* #define  FT_DEBUG_LEVEL_ERROR */
+/* #define  FT_DEBUG_LEVEL_TRACE */
 
 
   /*************************************************************************/
@@ -469,6 +469,13 @@
 
  /* */
 
+/*
+ * the FT_CONFIG_OPTION_CHESTER_XXXX macros are used to toggle some recent
+ * improvements to the auto-hinter contributed by David Chester. They will
+ * most likely disappear completely in the next release. For now, you should
+ * always keep them defined
+ *
+ */
 #define  FT_CONFIG_OPTION_CHESTER_HINTS
 
 #ifdef   FT_CONFIG_OPTION_CHESTER_HINTS
@@ -477,6 +484,7 @@
 #  define  FT_CONFIG_CHESTER_ASCENDER
 #  define  FT_CONFIG_CHESTER_SERIF
 #  define  FT_CONFIG_CHESTER_STEM
+#  define  FT_CONFIG_CHESTER_BLUE_SCALE
 
 #endif /* FT_CONFIG_OPTION_CHESTER_HINTS */
 
--- a/src/autohint/ahhint.c
+++ b/src/autohint/ahhint.c
@@ -1310,8 +1310,8 @@
     FT_Face           face     = hinter->face;
     FT_GlyphSlot      slot     = face->glyph;
     FT_Slot_Internal  internal = slot->internal;
-    FT_Fixed          x_scale  = face->size->metrics.x_scale;
-    FT_Fixed          y_scale  = face->size->metrics.y_scale;
+    FT_Fixed          x_scale  = hinter->globals->x_scale;
+    FT_Fixed          y_scale  = hinter->globals->y_scale;
     FT_Error          error;
     AH_Outline        outline  = hinter->glyph;
     AH_Loader         gloader  = hinter->loader;
@@ -1659,6 +1659,36 @@
 
     }
 
+#ifdef FT_CONFIG_CHESTER_BLUE_SCALE
+   /* try to optimize the y_scale so that the top of non-capital letters
+    * is aligned on a pixel boundary whenever possible
+    */
+    {
+      AH_Globals  design = &face_globals->design;
+      FT_Pos      shoot  = design->blue_shoots[ AH_BLUE_SMALL_TOP ];
+
+     /* the value of 'shoot' will be -1000 if the font doesn't have */
+     /* small latin letters; we simply check the sign here...       */
+      if ( shoot > 0 )
+      {
+        FT_Pos  scaled = FT_MulFix( shoot, y_scale );
+        FT_Pos  fitted = ( scaled + 32 ) & -64;
+
+        if ( scaled != fitted )
+        {
+         /* adjust y_scale
+          */
+          y_scale = FT_MulDiv( y_scale, fitted, scaled );
+
+         /* adust x_scale
+          */
+          if ( fitted < scaled )
+            x_scale -= x_scale/50;  /* x_scale*0.98 with integers */
+        }
+      }
+    }
+#endif /* FT_CONFIG_CHESTER_BLUE_SCALE */
+
     /* now, we must check the current character pixel size to see if we */
     /* need to rescale the global metrics                               */
     if ( face_globals->x_scale != x_scale ||
@@ -1668,8 +1698,8 @@
     ah_loader_rewind( hinter->loader );
 
     /* reset hinting flags according to load flags and current render target */
-    hinter->do_horz_hints = !FT_BOOL( load_flags & FT_LOAD_NO_AUTOHINT );
-    hinter->do_vert_hints = !FT_BOOL( load_flags & FT_LOAD_NO_AUTOHINT );
+    hinter->do_horz_hints = FT_BOOL( !(load_flags & FT_LOAD_NO_AUTOHINT) );
+    hinter->do_vert_hints = FT_BOOL( !(load_flags & FT_LOAD_NO_AUTOHINT) );
 
 #ifdef DEBUG_HINTER
     hinter->do_horz_hints = !ah_debug_disable_vert;  /* not a bug, the meaning */
--- a/src/autohint/ahtypes.h
+++ b/src/autohint/ahtypes.h
@@ -476,12 +476,12 @@
   /*                                                                       */
   typedef struct  AH_Face_GlobalsRec_
   {
-    FT_Face     face;
+    FT_Face        face;
     AH_GlobalsRec  design;
     AH_GlobalsRec  scaled;
-    FT_Fixed    x_scale;
-    FT_Fixed    y_scale;
-    FT_Bool     control_overshoot;
+    FT_Fixed       x_scale;
+    FT_Fixed       y_scale;
+    FT_Bool        control_overshoot;
 
   } AH_Face_GlobalsRec, *AH_Face_Globals;
 
--- a/src/base/ftobjs.c
+++ b/src/base/ftobjs.c
@@ -1387,11 +1387,19 @@
       char_height = 1 * 64;
 
     /* Compute pixel sizes in 26.6 units */
+#ifdef FT_CONFIG_CHESTER_BLUE_SCALE
+    dim_x = ( char_width  * horz_resolution ) / 72;
+    dim_y = ( char_height * vert_resolution ) / 72;
+
+    metrics->x_ppem = (FT_UShort)( (dim_x+32) >> 6 );
+    metrics->y_ppem = (FT_UShort)( (dim_y+32) >> 6 );
+#else
     dim_x = ( ( ( char_width  * horz_resolution ) / 72 ) + 32 ) & -64;
     dim_y = ( ( ( char_height * vert_resolution ) / 72 ) + 32 ) & -64;
 
     metrics->x_ppem  = (FT_UShort)( dim_x >> 6 );
     metrics->y_ppem  = (FT_UShort)( dim_y >> 6 );
+#endif
 
     metrics->x_scale = 0x10000L;
     metrics->y_scale = 0x10000L;
--- a/src/cache/ftccmap.c
+++ b/src/cache/ftccmap.c
@@ -131,7 +131,7 @@
   ftc_cmap_node_weight( FTC_CMapNode  cnode )
   {
     FT_UNUSED( cnode );
-    
+
     return sizeof ( *cnode );
   }
 
@@ -227,7 +227,7 @@
     return error;
 
   Bad_Descriptor:
-    FT_ERROR(( "ftp_cmap_family_init: invalid charmap descriptor\n" ));
+    FT_TRACE1(( "ftp_cmap_family_init: invalid charmap descriptor\n" ));
     return FTC_Err_Invalid_Argument;
   }
 
--- a/src/cff/cffload.c
+++ b/src/cff/cffload.c
@@ -1538,10 +1538,10 @@
         {
           if ( FT_FRAME_ENTER( ( num_glyphs - 1 ) * 2 ) )
             goto Exit;
-            
+
           for ( j = 1; j < num_glyphs; j++ )
             charset->sids[j] = FT_GET_USHORT();
-          
+
           FT_FRAME_EXIT();
         }
         break;
@@ -1748,7 +1748,7 @@
       case 0:
         {
           FT_Byte*  p;
-          
+
           /* by convention, GID 0 is always ".notdef" and is never */
           /* coded in the font. Hence, the number of codes found   */
           /* in the table is 'count+1'                             */
@@ -1759,7 +1759,7 @@
             goto Exit;
 
           p = (FT_Byte*)stream->cursor;
-          
+
           for ( j = 1; j <= count; j++ )
           {
             glyph_code = *p++;
@@ -1774,7 +1774,7 @@
               encoding->sids[glyph_code] = charset->sids[j];
             }
           }
-          
+
           FT_FRAME_EXIT();
         }
         break;
@@ -1801,11 +1801,11 @@
 
             /* Increment nleft, so we read `nleft + 1' codes/sids. */
             nleft++;
-            
+
             /* compute max number of character codes */
-            if ( nleft > encoding->count )
+            if ( (FT_UInt)nleft > encoding->count )
               encoding->count = nleft;
-            
+
             /* Fill in the range of codes/sids. */
             for ( k = i; k < nleft + i; k++, glyph_code++ )
             {
@@ -1820,7 +1820,7 @@
               }
             }
           }
-          
+
           /* simple check, one never knows what can be found in a font */
           if ( encoding->count > 256 )
             encoding->count = 256;
@@ -1896,7 +1896,7 @@
       Populate:
         /* Construct code to GID mapping from code to SID mapping */
         /* and charset.                                           */
-        
+
         encoding->count = 0;
 
 
@@ -1921,7 +1921,7 @@
             else
             {
               encoding->codes[j] = (FT_UShort)i;
-              
+
               /* update encoding count */
               if ( encoding->count < j+1 )
                 encoding->count = j+1;
--- a/src/gzip/adler32.c
+++ b/src/gzip/adler32.c
@@ -18,10 +18,10 @@
 #define DO16(buf)   DO8(buf,0); DO8(buf,8);
 
 /* ========================================================================= */
-ZEXPORT(uLong) adler32(adler, buf, len)
-    uLong adler;
-    const Bytef *buf;
-    uInt len;
+ZEXPORT(uLong) adler32( /* adler, buf, len) */
+    uLong adler,
+    const Bytef *buf,
+    uInt len )
 {
     unsigned long s1 = adler & 0xffff;
     unsigned long s2 = (adler >> 16) & 0xffff;
--- a/src/gzip/ftgzip.c
+++ b/src/gzip/ftgzip.c
@@ -96,10 +96,10 @@
 #ifndef FT_CONFIG_OPTION_SYSTEM_ZLIB
 
  local voidpf
- zcalloc (opaque, items, size)
-    voidpf opaque;
-    unsigned items;
-    unsigned size;
+ zcalloc ( /* opaque, items, size) */
+    voidpf opaque,
+    unsigned items,
+    unsigned size )
  {
    return ft_gzip_alloc( opaque, items, size );
  }
--- a/src/gzip/infblock.c
+++ b/src/gzip/infblock.c
@@ -64,10 +64,10 @@
  */
 
 
-local void inflate_blocks_reset(s, z, c)
-inflate_blocks_statef *s;
-z_streamp z;
-uLongf *c;
+local void inflate_blocks_reset( /* s, z, c) */
+inflate_blocks_statef *s,
+z_streamp z,
+uLongf *c )
 {
   if (c != Z_NULL)
     *c = s->check;
@@ -85,10 +85,10 @@
 }
 
 
-local inflate_blocks_statef *inflate_blocks_new(z, c, w)
-z_streamp z;
-check_func c;
-uInt w;
+local inflate_blocks_statef *inflate_blocks_new( /* z, c, w) */
+z_streamp z,
+check_func c,
+uInt w )
 {
   inflate_blocks_statef *s;
 
@@ -116,10 +116,10 @@
 }
 
 
-local int inflate_blocks(s, z, r)
-inflate_blocks_statef *s;
-z_streamp z;
-int r;
+local int inflate_blocks( /* s, z, r) */
+inflate_blocks_statef *s,
+z_streamp z,
+int r )
 {
   uInt t;               /* temporary storage */
   uLong b;              /* bit buffer */
@@ -371,9 +371,9 @@
 }
 
 
-local int inflate_blocks_free(s, z)
-inflate_blocks_statef *s;
-z_streamp z;
+local int inflate_blocks_free( /* s, z) */
+inflate_blocks_statef *s,
+z_streamp z )
 {
   inflate_blocks_reset(s, z, Z_NULL);
   ZFREE(z, s->window);
--- a/src/gzip/infcodes.c
+++ b/src/gzip/infcodes.c
@@ -55,11 +55,11 @@
 };
 
 
-local inflate_codes_statef *inflate_codes_new(bl, bd, tl, td, z)
-uInt bl, bd;
-inflate_huft *tl;
-inflate_huft *td; /* need separate declaration for Borland C++ */
-z_streamp z;
+local inflate_codes_statef *inflate_codes_new( /* bl, bd, tl, td, z) */
+uInt bl, uInt bd,
+inflate_huft *tl,
+inflate_huft *td, /* need separate declaration for Borland C++ */
+z_streamp z )
 {
   inflate_codes_statef *c;
 
@@ -77,10 +77,10 @@
 }
 
 
-local int inflate_codes(s, z, r)
-inflate_blocks_statef *s;
-z_streamp z;
-int r;
+local int inflate_codes( /* s, z, r) */
+inflate_blocks_statef *s,
+z_streamp z,
+int r )
 {
   uInt j;               /* temporary storage */
   inflate_huft *t;      /* temporary pointer */
@@ -241,9 +241,9 @@
 }
 
 
-local void inflate_codes_free(c, z)
-inflate_codes_statef *c;
-z_streamp z;
+local void inflate_codes_free( /* c, z) */
+inflate_codes_statef *c,
+z_streamp z )
 {
   ZFREE(z, c);
   Tracev((stderr, "inflate:       codes free\n"));
--- a/src/gzip/inflate.c
+++ b/src/gzip/inflate.c
@@ -51,8 +51,8 @@
 };
 
 
-ZEXPORT(int) inflateReset(z)
-z_streamp z;
+ZEXPORT(int) inflateReset( /* z) */
+z_streamp z )
 {
   if (z == Z_NULL || z->state == Z_NULL)
     return Z_STREAM_ERROR;
@@ -65,8 +65,8 @@
 }
 
 
-ZEXPORT(int) inflateEnd(z)
-z_streamp z;
+ZEXPORT(int) inflateEnd( /* z) */
+z_streamp z )
 {
   if (z == Z_NULL || z->state == Z_NULL || z->zfree == Z_NULL)
     return Z_STREAM_ERROR;
@@ -79,11 +79,11 @@
 }
 
 
-ZEXPORT(int) inflateInit2_(z, w, version, stream_size)
-z_streamp z;
-int w;
-const char *version;
-int stream_size;
+ZEXPORT(int) inflateInit2_( /* z, w, version, stream_size) */
+z_streamp z,
+int w,
+const char *version,
+int stream_size )
 {
   if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
       stream_size != sizeof(z_stream))
@@ -144,9 +144,9 @@
 #define NEXTBYTE (z->avail_in--,z->total_in++,*z->next_in++)
 
 
-ZEXPORT(int) inflate(z, f)
-z_streamp z;
-int f;
+ZEXPORT(int) inflate( /* z, f) */
+z_streamp z,
+int f )
 {
   int r;
   uInt b;
--- a/src/gzip/inftrees.c
+++ b/src/gzip/inftrees.c
@@ -92,21 +92,22 @@
 /* If BMAX needs to be larger than 16, then h and x[] should be uLong. */
 #define BMAX 15         /* maximum bit length of any code */
 
-local int huft_build(b, n, s, d, e, t, m, hp, hn, v)
-uIntf *b;               /* code lengths in bits (all assumed <= BMAX) */
-uInt n;                 /* number of codes (assumed <= 288) */
-uInt s;                 /* number of simple-valued codes (0..s-1) */
-const uIntf *d;         /* list of base values for non-simple codes */
-const uIntf *e;         /* list of extra bits for non-simple codes */
-inflate_huft * FAR *t;  /* result: starting table */
-uIntf *m;               /* maximum lookup bits, returns actual */
-inflate_huft *hp;       /* space for trees */
-uInt *hn;               /* hufts used in space */
-uIntf *v;               /* working area: values in order of bit length */
+local int huft_build( /* b, n, s, d, e, t, m, hp, hn, v) */
+uIntf *b,               /* code lengths in bits (all assumed <= BMAX) */
+uInt n,                 /* number of codes (assumed <= 288) */
+uInt s,                 /* number of simple-valued codes (0..s-1) */
+const uIntf *d,         /* list of base values for non-simple codes */
+const uIntf *e,         /* list of extra bits for non-simple codes */
+inflate_huft * FAR *t,  /* result: starting table */
+uIntf *m,               /* maximum lookup bits, returns actual */
+inflate_huft *hp,       /* space for trees */
+uInt *hn,               /* hufts used in space */
+uIntf *v                /* working area: values in order of bit length */
 /* Given a list of code lengths and a maximum table size, make a set of
    tables to decode that set of codes.  Return Z_OK on success, Z_BUF_ERROR
    if the given code set is incomplete (the tables are still built in this
    case), or Z_DATA_ERROR if the input is invalid. */
+)
 {
 
   uInt a;                       /* counter for codes of length k */
@@ -292,12 +293,13 @@
 }
 
 
-local int inflate_trees_bits(c, bb, tb, hp, z)
-uIntf *c;               /* 19 code lengths */
-uIntf *bb;              /* bits tree desired/actual depth */
-inflate_huft * FAR *tb; /* bits tree result */
-inflate_huft *hp;       /* space for trees */
-z_streamp z;            /* for messages */
+local int inflate_trees_bits( /* c, bb, tb, hp, z) */
+uIntf *c,               /* 19 code lengths */
+uIntf *bb,              /* bits tree desired/actual depth */
+inflate_huft * FAR *tb, /* bits tree result */
+inflate_huft *hp,       /* space for trees */
+z_streamp z             /* for messages */
+)
 {
   int r;
   uInt hn = 0;          /* hufts used in space */
@@ -319,16 +321,17 @@
 }
 
 
-local int inflate_trees_dynamic(nl, nd, c, bl, bd, tl, td, hp, z)
-uInt nl;                /* number of literal/length codes */
-uInt nd;                /* number of distance codes */
-uIntf *c;               /* that many (total) code lengths */
-uIntf *bl;              /* literal desired/actual bit depth */
-uIntf *bd;              /* distance desired/actual bit depth */
-inflate_huft * FAR *tl; /* literal/length tree result */
-inflate_huft * FAR *td; /* distance tree result */
-inflate_huft *hp;       /* space for trees */
-z_streamp z;            /* for messages */
+local int inflate_trees_dynamic( /* nl, nd, c, bl, bd, tl, td, hp, z) */
+uInt nl,                /* number of literal/length codes */
+uInt nd,                /* number of distance codes */
+uIntf *c,               /* that many (total) code lengths */
+uIntf *bl,              /* literal desired/actual bit depth */
+uIntf *bd,              /* distance desired/actual bit depth */
+inflate_huft * FAR *tl, /* literal/length tree result */
+inflate_huft * FAR *td, /* distance tree result */
+inflate_huft *hp,       /* space for trees */
+z_streamp z             /* for messages */
+)
 {
   int r;
   uInt hn = 0;          /* hufts used in space */
@@ -397,12 +400,13 @@
 #endif
 
 
-local int inflate_trees_fixed(bl, bd, tl, td, z)
-uIntf *bl;               /* literal desired/actual bit depth */
-uIntf *bd;               /* distance desired/actual bit depth */
-inflate_huft * FAR *tl;  /* literal/length tree result */
-inflate_huft * FAR *td;  /* distance tree result */
-z_streamp z;             /* for memory allocation */
+local int inflate_trees_fixed( /* bl, bd, tl, td, z) */
+uIntf *bl,               /* literal desired/actual bit depth */
+uIntf *bd,               /* distance desired/actual bit depth */
+inflate_huft * FAR *tl,  /* literal/length tree result */
+inflate_huft * FAR *td,  /* distance tree result */
+z_streamp z              /* for memory allocation */
+)
 {
 #ifdef BUILDFIXED
   /* build fixed tables if not already */
--- a/src/gzip/infutil.c
+++ b/src/gzip/infutil.c
@@ -19,10 +19,10 @@
 
 
 /* copy as much as possible from the sliding window to the output area */
-local int inflate_flush(s, z, r)
-inflate_blocks_statef *s;
-z_streamp z;
-int r;
+local int inflate_flush( /* s, z, r) */
+inflate_blocks_statef *s,
+z_streamp z,
+int r )
 {
   uInt n;
   Bytef *p;
--- a/src/pfr/pfrsbit.c
+++ b/src/pfr/pfrsbit.c
@@ -49,7 +49,7 @@
   static void
   pfr_bitwriter_init( PFR_BitWriter  writer,
                       FT_Bitmap*     target,
-                      FT_Bool        decreasing )
+                      FT_UInt        decreasing )
   {
     writer->line   = target->buffer;
     writer->pitch  = target->pitch;
@@ -107,7 +107,7 @@
       }
       else if ( mask == 0 )
       {
-        cur[0] = c;
+        cur[0] = (FT_Byte)c;
         mask   = 0x80;
         c      = 0;
         cur ++;
@@ -115,7 +115,7 @@
     }
 
     if ( mask != 0x80 )
-      cur[0] = c;
+      cur[0] = (FT_Byte) c;
   }
 
 
@@ -185,7 +185,7 @@
       }
       else if ( mask == 0 )
       {
-        cur[0] = c;
+        cur[0] = (FT_Byte) c;
         mask   = 0x80;
         c      = 0;
         cur ++;
@@ -249,7 +249,7 @@
       }
       else if ( mask == 0 )
       {
-        cur[0] = c;
+        cur[0] = (FT_Byte) c;
         c      = 0;
         mask   = 0x80;
         cur ++;
@@ -281,7 +281,7 @@
                           FT_ULong*  found_size )
   {
     FT_UInt   left, right, char_len;
-    FT_Bool   two = flags & 1;
+    FT_Bool   two = FT_BOOL( flags & 1 );
     FT_Byte*  buff;
 
 
@@ -583,7 +583,7 @@
       pfr_lookup_bitmap_data( stream->cursor,
                               stream->limit,
                               strike->num_bitmaps,
-                              strike->flags,
+                              (FT_Byte) strike->flags,
                               character->char_code,
                               &gps_offset,
                               &gps_size );
@@ -624,7 +624,7 @@
       if ( !error )
       {
         glyph->root.format = FT_GLYPH_FORMAT_BITMAP;
-      
+
         /* Set up glyph bitmap and metrics */
         glyph->root.bitmap.width      = (FT_Int)xsize;
         glyph->root.bitmap.rows       = (FT_Int)ysize;
--- a/src/pshinter/pshalgo3.c
+++ b/src/pshinter/pshalgo3.c
@@ -332,6 +332,7 @@
   /*************************************************************************/
   /*************************************************************************/
 
+#if 0
   static FT_Pos
   psh3_dimension_quantize_len( PSH_Dimension  dim,
                                FT_Pos         len,
@@ -380,6 +381,7 @@
 
     return  len;
   }
+#endif /* 0 */
 
 
 #ifdef DEBUG_HINTER
@@ -518,7 +520,7 @@
           hint->cur_pos = pos;
           hint->cur_len = fit_len;
 
-#if 0          
+#if 0
          /* stem adjustment tries to snap stem widths to standard
           * ones. this is important to prevent unpleasant rounding
           * artefacts...
@@ -535,7 +537,7 @@
 #else
              /* this seems to be a bug !! */
               pos = ( pos + ( (len >> 1) & -64 ) );
-#endif        
+#endif
               len = 64;
             }
             else
@@ -554,7 +556,7 @@
 
       if ( do_snapping )
       {
-        pos = hint->cur_pos;                   
+        pos = hint->cur_pos;
         len = hint->cur_len;
 
         if ( len < 64 )
@@ -620,7 +622,6 @@
       FT_Pos  pos = FT_MulFix( hint->org_pos, scale ) + delta;
       FT_Pos  len = FT_MulFix( hint->org_len, scale );
 
-      FT_Pos  fit_center;
       FT_Pos  fit_len;
 
       PSH_AlignmentRec  align;
--- a/src/truetype/ttdriver.c
+++ b/src/truetype/ttdriver.c
@@ -192,7 +192,6 @@
   {
     FT_Size_Metrics*  metrics = &size->root.metrics;
     TT_Face           face    = (TT_Face)size->root.face;
-    FT_Long           dim_x, dim_y;
 
 
     /* This bit flag, when set, indicates that the pixel size must be */
@@ -204,9 +203,12 @@
     /* really don't know whether this is useful, but hey, that's the  */
     /* spec :-)                                                       */
     /*                                                                */
+#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
     if ( ( face->header.Flags & 8 ) == 0 )
     {
       /* Compute pixel sizes in 26.6 units */
+      FT_Long  dim_x, dim_y;
+
       dim_x = ( char_width  * horz_resolution + 36 ) / 72;
       dim_y = ( char_height * vert_resolution + 36 ) / 72;
 
@@ -216,6 +218,15 @@
       metrics->x_ppem  = (FT_UShort)( dim_x >> 6 );
       metrics->y_ppem  = (FT_UShort)( dim_y >> 6 );
     }
+#else
+	FT_UNUSED( vert_resolution );
+	FT_UNUSED( horz_resolution );
+	FT_UNUSED( char_height );
+	FT_UNUSED( char_width );
+
+	FT_UNUSED( face );
+	FT_UNUSED( metrics );
+#endif
 
     size->ttmetrics.valid = FALSE;
 #ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS