shithub: freetype+ttf2subf

Download patch

ref: 99aa14c226abb6ee6130cc7ef91cb97695dc49cc
parent: 4a7f0b1c7a1ec912911187b8090d197a4b887726
author: Werner Lemberg <[email protected]>
date: Mon Sep 5 15:31:27 EDT 2005

Fixes for `make multi' and using C++ compiler.

* gxvalid/gxvcommn.c (gxv_set_length_by_ushort_offset,
gxv_set_length_by_ulong_offset, gxv_array_getlimits_byte,
gxv_array_getlimits_ushort): Declare with FT_LOCAL_DEF.
(gxv_compare_ranges): Make it static.
(gxv_LookupTable_fmt0_validate, gxv_LookupTable_fmt2_validate,
gxv_LookupTable_fmt4_validate, gxv_LookupTable_fmt6_validate,
gxv_LookupTable_fmt8_validate, gxv_LookupTable_validate): Improve
trace messages.
(gxv_StateArray_validate, gxv_XStateArray_validate): s/class/clazz/.
(GXV_STATETABLE_HEADER_SIZE, GXV_STATEHEADER_SIZE,
GXV_XSTATETABLE_HEADER_SIZE, GXV_XSTATEHEADER_SIZE): Move to
gxvcommn.h.

* gxvalid/gxvcommn.h: Add prototypes for
gxv_StateTable_subtable_setup, gxv_XStateTable_subtable_setup,
gxv_XStateTable_validate, gxv_array_getlimits_byte,
gxv_array_getlimits_ushort, gxv_set_length_by_ushort_offset,
gxv_set_length_by_ulong_offset, gxv_odtect_add_range,
gxv_odtect_validate.
(GXV_STATETABLE_HEADER_SIZE, GXV_STATEHEADER_SIZE,
GXV_XSTATETABLE_HEADER_SIZE, GXV_XSTATEHEADER_SIZE): Moved from
gxvcommn.c.

* src/gxvalid/gxvbsln.c (gxv_bsln_LookupValue_validate,
gxv_bsln_parts_fmt1_validate): Improve trace messages.

* gxvalid/gxvfeat.c: Split off predefined registry stuff to...
* gxvalid/gxvfeat.h: New file.

* gxvalid/gxvjust.c (gxv_just_wdc_entry_validate): Improve trace
message.

* gxvalid/gxvkern.c (GXV_kern_Dialect): Add KERN_DIALECT_UNKNOWN.
(gxv_kern_subtable_fmt1_valueTable_load,
gxv_kern_subtable_fmt1_subtable_setup,
gxv_kern_subtable_fmt1_entry_validate): Fix C++ compiler errors.
(gxv_kern_coverage_validate): Use KERN_DIALECT_UNKWOWN.
Improve trace message.
(gxv_kern_validate_generic): Fix C++ compiler error.
Improve trace message.
(gxv_kern_validate_classic): Fix C++ compiler error.

* gxvalid/gxvmort0.c (gxv_mort_subtable_type0_validate): Declare
with FT_LOCAL_DEF.

* gxvalid/gxvmort1.c
(gxv_mort_subtable_type1_substitutionTable_load,
gxv_mort_subtable_type1_subtable_setup): Fix C++ compiler errors.
(gxv_mort_subtable_type1_substTable_validate): Improve trace
message.
(gxv_mort_subtable_type1_validate): Declare with FT_LOCAL_DEF.

* gxvalid/gxvmort2.c (gxv_mort_subtable_type2_opttable_load,
gxv_mort_subtable_type2_subtable_setup,
gxv_mort_subtable_type2_ligActionOffset_validate,
gxv_mort_subtable_type2_ligatureTable_validate): Fix C++ compiler
errors.
(gxv_mort_subtable_type2_validate): Declare with FT_LOCAL_DEF.

* gxvalid/gxvmort4.c (gxv_mort_subtable_type4_validate): Declare
with FT_LOCAL_DEF.

* gxvalid/gxvmort5.c (gxv_mort_subtable_type5_subtable_setup,
gxv_mort_subtable_type5_InsertList_validate): Fix C++ compiler
errors.
(gxv_mort_subtable_type5_validate): Declare with FT_LOCAL_DEF.

* gxvalid/gxvmort.c: Include gxvfeat.h.
(gxv_mort_featurearray_validate, gxv_mort_coverage_validate):
Declare with FT_LOCAL_DEF.
(gxv_mort_subtables_validate, gxv_mort_validate): Improve trace
messages.

* gxvalid/gxvmort.h (gxv_mort_feature_validate): Remove.

* gxvalid/gxvmorx0.c (gxv_morx_subtable_type0_validate): Declare
with FT_LOCAL_DEF.

* gxvalid/gxvmorx1.c
(gxv_morx_subtable_type1_substitutionTable_load,
gxv_morx_subtable_type1_subtable_setup,
gxv_morx_subtable_type1_entry_validate,
gxv_morx_subtable_type1_substitutionTable_validate): Fix C++
compiler errors.
(gxv_morx_subtable_type1_validate): Declare with FT_LOCAL_DEF.

* gxvalid/gxvmorx2.c (gxv_morx_subtable_type2_opttable_load,
gxv_morx_subtable_type2_subtable_setup,
gxv_morx_subtable_type2_ligActionIndex_validate,
gxv_morx_subtable_type2_ligatureTable_validate): Fix C++ compiler
errors.
(gxv_morx_subtable_type2_validate): Declare with FT_LOCAL_DEF.
Fix typo.

* gxvalid/gxvmorx4.c (gxv_morx_subtable_type4_validate): Declare
with FT_LOCAL_DEF.

* gxvalid/gxvmorx5.c (gxv_morx_subtable_type5_insertionGlyph_load,
gxv_morx_subtable_type5_subtable_setup): Fix C++ compiler error.
(gxv_morx_subtable_type5_validate): Declare with FT_LOCAL_DEF.

* gxvalid/gxvmorx.c (gxv_morx_subtables_validate,
gxv_morx_validate): Improve trace message.

* gxvalid/gxvopbd.c (gxv_opbd_LookupFmt4_transit): Fix compiler
warnings.
(gxv_opbd_validate): Improve trace message.

* gxvalid/gxvprop.c: Decorate constants with `U' and `L' where
appropriate.
(gxv_prop_zero_advance_validate, gxv_prop_validate): Improve trace
message.

* gxvalid/gxvtrak.c (gxv_trak_trackTable_validate): Remove unused
parameter.  Update all callers.
(gxv_trak_validate): Improve trace message.

* rules.mk (GXV_DRV_H): Add gxvfeat.h.

git/fs: mount .git/fs: mount/attach disallowed
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,126 @@
+2005-09-05  Werner Lemberg  <[email protected]>
+
+	Fixes for `make multi' and using C++ compiler.
+
+	* gxvalid/gxvcommn.c (gxv_set_length_by_ushort_offset,
+	gxv_set_length_by_ulong_offset, gxv_array_getlimits_byte,
+	gxv_array_getlimits_ushort): Declare with FT_LOCAL_DEF.
+	(gxv_compare_ranges): Make it static.
+	(gxv_LookupTable_fmt0_validate, gxv_LookupTable_fmt2_validate,
+	gxv_LookupTable_fmt4_validate, gxv_LookupTable_fmt6_validate,
+	gxv_LookupTable_fmt8_validate, gxv_LookupTable_validate): Improve
+	trace messages.
+	(gxv_StateArray_validate, gxv_XStateArray_validate): s/class/clazz/.
+	(GXV_STATETABLE_HEADER_SIZE, GXV_STATEHEADER_SIZE,
+	GXV_XSTATETABLE_HEADER_SIZE, GXV_XSTATEHEADER_SIZE): Move to
+	gxvcommn.h.
+
+	* gxvalid/gxvcommn.h: Add prototypes for
+	gxv_StateTable_subtable_setup, gxv_XStateTable_subtable_setup,
+	gxv_XStateTable_validate, gxv_array_getlimits_byte,
+	gxv_array_getlimits_ushort, gxv_set_length_by_ushort_offset,
+	gxv_set_length_by_ulong_offset, gxv_odtect_add_range,
+	gxv_odtect_validate.
+	(GXV_STATETABLE_HEADER_SIZE, GXV_STATEHEADER_SIZE,
+	GXV_XSTATETABLE_HEADER_SIZE, GXV_XSTATEHEADER_SIZE): Moved from
+	gxvcommn.c.
+
+	* src/gxvalid/gxvbsln.c (gxv_bsln_LookupValue_validate,
+	gxv_bsln_parts_fmt1_validate): Improve trace messages.
+
+	* gxvalid/gxvfeat.c: Split off predefined registry stuff to...
+	* gxvalid/gxvfeat.h: New file.
+
+	* gxvalid/gxvjust.c (gxv_just_wdc_entry_validate): Improve trace
+	message.
+
+	* gxvalid/gxvkern.c (GXV_kern_Dialect): Add KERN_DIALECT_UNKNOWN.
+	(gxv_kern_subtable_fmt1_valueTable_load,
+	gxv_kern_subtable_fmt1_subtable_setup,
+	gxv_kern_subtable_fmt1_entry_validate): Fix C++ compiler errors.
+	(gxv_kern_coverage_validate): Use KERN_DIALECT_UNKWOWN.
+	Improve trace message.
+	(gxv_kern_validate_generic): Fix C++ compiler error.
+	Improve trace message.
+	(gxv_kern_validate_classic): Fix C++ compiler error.
+
+	* gxvalid/gxvmort0.c (gxv_mort_subtable_type0_validate): Declare
+	with FT_LOCAL_DEF.
+
+	* gxvalid/gxvmort1.c
+	(gxv_mort_subtable_type1_substitutionTable_load,
+	gxv_mort_subtable_type1_subtable_setup): Fix C++ compiler errors.
+	(gxv_mort_subtable_type1_substTable_validate): Improve trace
+	message.
+	(gxv_mort_subtable_type1_validate): Declare with FT_LOCAL_DEF.
+
+	* gxvalid/gxvmort2.c (gxv_mort_subtable_type2_opttable_load,
+	gxv_mort_subtable_type2_subtable_setup,
+	gxv_mort_subtable_type2_ligActionOffset_validate,
+	gxv_mort_subtable_type2_ligatureTable_validate): Fix C++ compiler
+	errors.
+	(gxv_mort_subtable_type2_validate): Declare with FT_LOCAL_DEF.
+
+	* gxvalid/gxvmort4.c (gxv_mort_subtable_type4_validate): Declare
+	with FT_LOCAL_DEF.
+
+	* gxvalid/gxvmort5.c (gxv_mort_subtable_type5_subtable_setup,
+	gxv_mort_subtable_type5_InsertList_validate): Fix C++ compiler
+	errors.
+	(gxv_mort_subtable_type5_validate): Declare with FT_LOCAL_DEF.
+
+	* gxvalid/gxvmort.c: Include gxvfeat.h.
+	(gxv_mort_featurearray_validate, gxv_mort_coverage_validate):
+	Declare with FT_LOCAL_DEF.
+	(gxv_mort_subtables_validate, gxv_mort_validate): Improve trace
+	messages.
+
+	* gxvalid/gxvmort.h (gxv_mort_feature_validate): Remove.
+
+	* gxvalid/gxvmorx0.c (gxv_morx_subtable_type0_validate): Declare
+	with FT_LOCAL_DEF.
+
+	* gxvalid/gxvmorx1.c
+	(gxv_morx_subtable_type1_substitutionTable_load,
+	gxv_morx_subtable_type1_subtable_setup,
+	gxv_morx_subtable_type1_entry_validate,
+	gxv_morx_subtable_type1_substitutionTable_validate): Fix C++
+	compiler errors.
+	(gxv_morx_subtable_type1_validate): Declare with FT_LOCAL_DEF.
+
+	* gxvalid/gxvmorx2.c (gxv_morx_subtable_type2_opttable_load,
+	gxv_morx_subtable_type2_subtable_setup,
+	gxv_morx_subtable_type2_ligActionIndex_validate,
+	gxv_morx_subtable_type2_ligatureTable_validate): Fix C++ compiler
+	errors.
+	(gxv_morx_subtable_type2_validate): Declare with FT_LOCAL_DEF.
+	Fix typo.
+
+	* gxvalid/gxvmorx4.c (gxv_morx_subtable_type4_validate): Declare
+	with FT_LOCAL_DEF.
+
+	* gxvalid/gxvmorx5.c (gxv_morx_subtable_type5_insertionGlyph_load,
+	gxv_morx_subtable_type5_subtable_setup): Fix C++ compiler error.
+	(gxv_morx_subtable_type5_validate): Declare with FT_LOCAL_DEF.
+
+	* gxvalid/gxvmorx.c (gxv_morx_subtables_validate,
+	gxv_morx_validate): Improve trace message.
+
+	* gxvalid/gxvopbd.c (gxv_opbd_LookupFmt4_transit): Fix compiler
+	warnings.
+	(gxv_opbd_validate): Improve trace message.
+
+	* gxvalid/gxvprop.c: Decorate constants with `U' and `L' where
+	appropriate.
+	(gxv_prop_zero_advance_validate, gxv_prop_validate): Improve trace
+	message.
+
+	* gxvalid/gxvtrak.c (gxv_trak_trackTable_validate): Remove unused
+	parameter.  Update all callers.
+	(gxv_trak_validate): Improve trace message.
+
+	* rules.mk (GXV_DRV_H): Add gxvfeat.h.
+
 2005-09-01  Werner Lemberg  <[email protected]>
 
 	* src/gxvalid/gxvbsln.c (GXV_BSLN_VALUE_EMPTY): Add `U'.
@@ -8,7 +131,7 @@
 
 	* src/gxvalid/gxvmorx0.c, src/gxvalid/gxvmorx1.c,
 	src/gxvalid/gxvmorx2.c, src/gxvalid/gxvmorx4.c,
-	src/gxvalid/gxvmorx5.c, src/gxvalid/gxvmort.c: Improve tracing
+	src/gxvalid/gxvmorx5.c, src/gxvalid/gxvmort.c: Improve trace
 	messages.
 	Decorate constants with `U' and `L' where appropriate.
 	Fix compiler warnings.
@@ -17,7 +140,7 @@
 
 	* src/truetype/ttgload.c (load_truetype_glyph): Fix typo.
 
-	* src/gxvalid/gxvbsln.c (gxv_bsln_validate): Fix tracing message.
+	* src/gxvalid/gxvbsln.c (gxv_bsln_validate): Fix trace message.
 
 	* src/gxvalid/gxvcommn.c (gxv_odtect_add_range): Use `const'.
 
@@ -25,7 +148,7 @@
 	src/gxvalid/gxvkern.c, src/gxvalid/gxvlcar.c, src/gxvalid/gxvmod.c,
 	src/gxvalid/gxvmort0.c, src/gxvalid/gxvmort1.c,
 	src/gxvalid/gxvmort2.c, src/gxvalid/gxvmort4.c,
-	src/gxvalid/gxvmort5.c, src/gxvalid/gxvmort.c: Improve tracing
+	src/gxvalid/gxvmort5.c, src/gxvalid/gxvmort.c: Improve trace
 	messages.
 	Decorate constants with `U' and `L' where appropriate.
 	Fix compiler warnings.
@@ -37,7 +160,7 @@
 	* src/gxvalid/gxvcommn.c: Fix compiler warnings.
 	(gxv_XEntryTable_validate, gxv_compare_ranges): Remove unused
 	parameter.  Update all callers.
-	Improve tracing messages.
+	Improve trace messages.
 	Some formatting.
 
 2005-08-29  Werner Lemberg  <[email protected]>
--- a/src/gxvalid/gxvbsln.c
+++ b/src/gxvalid/gxvbsln.c
@@ -80,7 +80,7 @@
     FT_UNUSED( glyph );
 
 
-    GXV_NAME_ENTER( " lookup value" );
+    GXV_NAME_ENTER( "lookup value" );
 
     if ( v >= GXV_BSLN_VALUE_COUNT )
       FT_INVALID_DATA;
@@ -171,7 +171,7 @@
     FT_Bytes  p = tables;
 
 
-    GXV_NAME_ENTER( " parts format 1" );
+    GXV_NAME_ENTER( "parts format 1" );
 
     /* deltas */
     gxv_bsln_parts_fmt0_validate( p, limit, valid );
--- a/src/gxvalid/gxvcommn.c
+++ b/src/gxvalid/gxvcommn.c
@@ -58,13 +58,13 @@
   }
 
 
-  static void
+  FT_LOCAL_DEF( void )
   gxv_set_length_by_ushort_offset( FT_UShort*     offset,
                                    FT_UShort**    length,
                                    FT_UShort*     buff,
                                    FT_UInt        nmemb,
                                    FT_UShort      limit,
-                                   GXV_Validator  valid)
+                                   GXV_Validator  valid )
   {
     FT_UInt  i;
 
@@ -123,7 +123,7 @@
   }
 
 
-  static void
+  FT_LOCAL_DEF( void )
   gxv_set_length_by_ulong_offset( FT_ULong*      offset,
                                   FT_ULong**     length,
                                   FT_ULong*      buff,
@@ -176,7 +176,7 @@
   /*************************************************************************/
 
 
-  static void
+  FT_LOCAL_DEF( void )
   gxv_array_getlimits_byte( FT_Bytes       table,
                             FT_Bytes       limit,
                             FT_Byte*       min,
@@ -205,7 +205,7 @@
   }
 
 
-  static void
+  FT_LOCAL_DEF( void )
   gxv_array_getlimits_ushort( FT_Bytes       table,
                               FT_Bytes       limit,
                               FT_UShort*     min,
@@ -430,7 +430,7 @@
     GXV_LookupValueDesc  value;
 
 
-    GXV_NAME_ENTER( " LookupTable format 0" );
+    GXV_NAME_ENTER( "LookupTable format 0" );
 
     GXV_LIMIT_CHECK( 2 * valid->face->num_glyphs );
 
@@ -507,7 +507,7 @@
     GXV_LookupValueDesc  value;
 
 
-    GXV_NAME_ENTER( " LookupTable format 2" );
+    GXV_NAME_ENTER( "LookupTable format 2" );
 
     unitSize = nUnits = 0;
     gxv_BinSrchHeader_validate( p, limit, &unitSize, &nUnits, valid );
@@ -581,7 +581,7 @@
     GXV_LookupValueDesc  value;
 
 
-    GXV_NAME_ENTER( " LookupTable format 4" );
+    GXV_NAME_ENTER( "LookupTable format 4" );
 
     unitSize = nUnits = 0;
     gxv_BinSrchHeader_validate( p, limit, &unitSize, &nUnits, valid );
@@ -678,7 +678,7 @@
     GXV_LookupValueDesc  value;
 
 
-    GXV_NAME_ENTER( " LookupTable format 6" );
+    GXV_NAME_ENTER( "LookupTable format 6" );
 
     unitSize = nUnits = 0;
     gxv_BinSrchHeader_validate( p, limit, &unitSize, &nUnits, valid );
@@ -731,7 +731,7 @@
     FT_UShort             glyphCount;
 
 
-    GXV_NAME_ENTER( " LookupTable format 8" );
+    GXV_NAME_ENTER( "LookupTable format 8" );
 
     /* firstGlyph + glyphCount */
     GXV_LIMIT_CHECK( 2 + 2 );
@@ -778,7 +778,7 @@
     GXV_Validate_Func  func;
 
 
-    GXV_NAME_ENTER(" LookupTable" );
+    GXV_NAME_ENTER( "LookupTable" );
 
     /* lookuptbl_head may be used in fmt4 transit function. */
     valid->lookuptbl_head = table;
@@ -1028,7 +1028,7 @@
   {
     FT_Bytes  p = table;
     FT_Bytes  limit = table + *length_p;
-    FT_Byte   class;
+    FT_Byte   clazz;
     FT_Byte   entry;
 
 
@@ -1050,7 +1050,7 @@
     while ( p + ( 1 + maxClassID ) <= limit )
     {
       (*maxState_p)++;
-      for ( class = 0; class <= maxClassID; class++ )
+      for ( clazz = 0; clazz <= maxClassID; clazz++ )
       {
         entry = FT_NEXT_BYTE( p );
         *maxEntry_p = FT_MAX( *maxEntry_p, entry );
@@ -1220,9 +1220,6 @@
     FT_UShort   stateArray;     /* offset to StateArray */
     FT_UShort   entryTable;     /* offset to EntryTable */
 
-#define GXV_STATETABLE_HEADER_SIZE  ( 2 + 2 + 2 + 2 )
-#define GXV_STATEHEADER_SIZE        GXV_STATETABLE_HEADER_SIZE
-
     FT_UShort   classTable_length;
     FT_UShort   stateArray_length;
     FT_UShort   entryTable_length;
@@ -1416,7 +1413,7 @@
   {
     FT_Bytes   p = table;
     FT_Bytes   limit = table + *length_p;
-    FT_UShort  class;
+    FT_UShort  clazz;
     FT_UShort  entry;
 
 
@@ -1438,7 +1435,7 @@
     while ( p + ( ( 1 + maxClassID ) * 2 ) <= limit )
     {
       (*maxState_p)++;
-      for ( class = 0; class <= maxClassID; class++ )
+      for ( clazz = 0; clazz <= maxClassID; clazz++ )
       {
         entry = FT_NEXT_USHORT( p );
         *maxEntry_p = FT_MAX( *maxEntry_p, entry );
@@ -1564,9 +1561,6 @@
     FT_ULong   stateArray;      /* offset to StateArray */
     FT_ULong   entryTable;      /* offset to EntryTable */
 
-#define GXV_XSTATETABLE_HEADER_SIZE  ( 4 + 4 + 4 + 4 )
-#define GXV_XSTATEHEADER_SIZE        GXV_XSTATETABLE_HEADER_SIZE
-
     FT_ULong   classTable_length;
     FT_ULong   stateArray_length;
     FT_ULong   entryTable_length;
@@ -1669,7 +1663,7 @@
   /*************************************************************************/
   /*************************************************************************/
 
-  FT_LOCAL_DEF( int )
+  static int
   gxv_compare_ranges( FT_Bytes  table1_start,
                       FT_ULong  table1_length,
                       FT_Bytes  table2_start,
@@ -1712,7 +1706,7 @@
 
   FT_LOCAL_DEF( void )
   gxv_odtect_validate( GXV_odtect_Range  odtect,
-                       GXV_Validator     valid   )
+                       GXV_Validator     valid )
   {
     FT_UInt  i, j;
 
--- a/src/gxvalid/gxvcommn.h
+++ b/src/gxvalid/gxvcommn.h
@@ -410,19 +410,75 @@
   /*************************************************************************/
 
   FT_LOCAL( void )
+  gxv_StateTable_subtable_setup( FT_UShort      table_size,
+                                 FT_UShort      classTable,
+                                 FT_UShort      stateArray,
+                                 FT_UShort      entryTable,
+                                 FT_UShort*     classTable_length_p,
+                                 FT_UShort*     stateArray_length_p,
+                                 FT_UShort*     entryTable_length_p,
+                                 GXV_Validator  valid );
+
+  FT_LOCAL( void )
+  gxv_XStateTable_subtable_setup( FT_ULong       table_size,
+                                  FT_ULong       classTable,
+                                  FT_ULong       stateArray,
+                                  FT_ULong       entryTable,
+                                  FT_ULong*      classTable_length_p,
+                                  FT_ULong*      stateArray_length_p,
+                                  FT_ULong*      entryTable_length_p,
+                                  GXV_Validator  valid );
+
+  FT_LOCAL( void )
   gxv_StateTable_validate( FT_Bytes       table,
                            FT_Bytes       limit,
                            GXV_Validator  valid );
 
+  FT_LOCAL( void )
+  gxv_XStateTable_validate( FT_Bytes       table,
+                            FT_Bytes       limit,
+                            GXV_Validator  valid );
 
+
   /*************************************************************************/
   /*************************************************************************/
   /*****                                                               *****/
-  /*****                         UTILITY MACRO                         *****/
+  /*****                 UTILITY MACROS AND FUNCTIONS                  *****/
   /*****                                                               *****/
   /*************************************************************************/
   /*************************************************************************/
 
+  FT_LOCAL( void )
+  gxv_array_getlimits_byte( FT_Bytes       table,
+                            FT_Bytes       limit,
+                            FT_Byte*       min,
+                            FT_Byte*       max,
+                            GXV_Validator  valid );
+
+  FT_LOCAL( void )
+  gxv_array_getlimits_ushort( FT_Bytes       table,
+                              FT_Bytes       limit,
+                              FT_UShort*     min,
+                              FT_UShort*     max,
+                              GXV_Validator  valid );
+
+  FT_LOCAL( void )
+  gxv_set_length_by_ushort_offset( FT_UShort*     offset,
+                                   FT_UShort**    length,
+                                   FT_UShort*     buff,
+                                   FT_UInt        nmemb,
+                                   FT_UShort      limit,
+                                   GXV_Validator  valid );
+
+  FT_LOCAL( void )
+  gxv_set_length_by_ulong_offset( FT_ULong*      offset,
+                                  FT_ULong**     length,
+                                  FT_ULong*      buff,
+                                  FT_UInt        nmemb,
+                                  FT_ULong       limit,
+                                  GXV_Validator  valid);
+
+
 #define GXV_SUBTABLE_OFFSET_CHECK( _offset )          \
           FT_BEGIN_STMNT                              \
             if ( (_offset) > valid->subtable_length ) \
@@ -439,7 +495,13 @@
 #define GXV_USHORT_TO_SHORT( _us )                                    \
           ( ( 0x8000U < ( _us ) ) ? ( ( _us ) - 0x8000U ) : ( _us ) )
 
+#define GXV_STATETABLE_HEADER_SIZE  ( 2 + 2 + 2 + 2 )
+#define GXV_STATEHEADER_SIZE        GXV_STATETABLE_HEADER_SIZE
 
+#define GXV_XSTATETABLE_HEADER_SIZE  ( 4 + 4 + 4 + 4 )
+#define GXV_XSTATEHEADER_SIZE        GXV_XSTATETABLE_HEADER_SIZE
+
+
   /*************************************************************************/
   /*************************************************************************/
   /*****                                                               *****/
@@ -462,6 +524,17 @@
     GXV_odtect_Data  range;
 
   } GXV_odtect_RangeRec, *GXV_odtect_Range;
+
+
+  FT_LOCAL( void )
+  gxv_odtect_add_range( FT_Bytes          start,
+                        FT_ULong          length,
+                        const FT_String*  name,
+                        GXV_odtect_Range  odtect );
+
+  FT_LOCAL( void )
+  gxv_odtect_validate( GXV_odtect_Range  odtect,
+                       GXV_Validator     valid );
 
 
 #define GXV_ODTECT( n, odtect )                              \
--- a/src/gxvalid/gxvfeat.c
+++ b/src/gxvalid/gxvfeat.c
@@ -26,6 +26,7 @@
 
 #include "gxvalid.h"
 #include "gxvcommn.h"
+#include "gxvfeat.h"
 
 
   /*************************************************************************/
@@ -36,140 +37,6 @@
   /*                                                                       */
 #undef  FT_COMPONENT
 #define FT_COMPONENT  trace_gxvfeat
-
-
-  /*************************************************************************/
-  /*************************************************************************/
-  /*****                                                               *****/
-  /*****                Registry predefined by Apple                   *****/
-  /*****                                                               *****/
-  /*************************************************************************/
-  /*************************************************************************/
-
-  /* TODO: More compact format */
-  typedef struct  GXV_Feature_RegistryRec_
-  {
-    FT_Bool  existence;
-    FT_Bool  apple_reserved;
-    FT_Bool  exclusive;
-    FT_Byte  nSettings;
-
-  } GX_Feature_RegistryRec;
-
-
-#define gxv_feat_registry_length                  \
-          ( sizeof ( gxv_feat_registry ) /        \
-              sizeof ( GX_Feature_RegistryRec ) )
-
-
-  static GX_Feature_RegistryRec  gxv_feat_registry[] =
-  {
-    /* Generated from gxvfgen.c */
-    {1, 0, 0,  1},   /* All Typographic Features */
-    {1, 0, 0,  8},   /* Ligatures */
-    {1, 0, 1,  3},   /* Cursive Connection */
-    {1, 0, 1,  6},   /* Letter Case */
-    {1, 0, 0,  1},   /* Vertical Substitution */
-    {1, 0, 0,  1},   /* Linguistic Rearrangement */
-    {1, 0, 1,  2},   /* Number Spacing */
-    {1, 1, 0,  0},   /* Apple Reserved 1 */
-    {1, 0, 0,  5},   /* Smart Swashes */
-    {1, 0, 1,  3},   /* Diacritics */
-    {1, 0, 1,  4},   /* Vertical Position */
-    {1, 0, 1,  3},   /* Fractions */
-    {1, 1, 0,  0},   /* Apple Reserved 2 */
-    {1, 0, 0,  1},   /* Overlapping Characters */
-    {1, 0, 0,  6},   /* Typographic Extras */
-    {1, 0, 0,  5},   /* Mathematical Extras */
-    {1, 0, 1,  7},   /* Ornament Sets */
-    {1, 0, 1,  1},   /* Character Alternatives */
-    {1, 0, 1,  5},   /* Design Complexity */
-    {1, 0, 1,  6},   /* Style Options */
-    {1, 0, 1, 11},   /* Character Shape */
-    {1, 0, 1,  2},   /* Number Case */
-    {1, 0, 1,  4},   /* Text Spacing */
-    {1, 0, 1, 10},   /* Transliteration */
-    {1, 0, 1,  9},   /* Annotation */
-    {1, 0, 1,  2},   /* Kana Spacing */
-    {1, 0, 1,  2},   /* Ideographic Spacing */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {0, 0, 0,  0},   /* __EMPTY__ */
-    {1, 0, 1,  4},   /* Text Spacing */
-    {1, 0, 1,  2},   /* Kana Spacing */
-    {1, 0, 1,  2},   /* Ideographic Spacing */
-    {1, 0, 1,  4},   /* CJK Roman Spacing */
-  };
 
 
   /*************************************************************************/
--- /dev/null
+++ b/src/gxvalid/gxvfeat.h
@@ -1,0 +1,172 @@
+/***************************************************************************/
+/*                                                                         */
+/*  gxvfeat.h                                                              */
+/*                                                                         */
+/*    TrueTypeGX/AAT feat table validation (specification).                */
+/*                                                                         */
+/*  Copyright 2004, 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
+/*  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.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+/***************************************************************************/
+/*                                                                         */
+/* gxvalid is derived from both gxlayout module and otvalid module.        */
+/* Development of gxlayout is supported by the Information-technology      */
+/* Promotion Agency(IPA), Japan.                                           */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __GXVFEAT_H__
+#define __GXVFEAT_H__
+
+
+#include "gxvalid.h"
+#include "gxvcommn.h"
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                Registry predefined by Apple                   *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
+
+  /* TODO: More compact format */
+  typedef struct  GXV_Feature_RegistryRec_
+  {
+    FT_Bool  existence;
+    FT_Bool  apple_reserved;
+    FT_Bool  exclusive;
+    FT_Byte  nSettings;
+
+  } GX_Feature_RegistryRec;
+
+
+#define gxv_feat_registry_length                  \
+          ( sizeof ( gxv_feat_registry ) /        \
+              sizeof ( GX_Feature_RegistryRec ) )
+
+
+  static GX_Feature_RegistryRec  gxv_feat_registry[] =
+  {
+    /* Generated from gxvfgen.c */
+    {1, 0, 0,  1},   /* All Typographic Features */
+    {1, 0, 0,  8},   /* Ligatures */
+    {1, 0, 1,  3},   /* Cursive Connection */
+    {1, 0, 1,  6},   /* Letter Case */
+    {1, 0, 0,  1},   /* Vertical Substitution */
+    {1, 0, 0,  1},   /* Linguistic Rearrangement */
+    {1, 0, 1,  2},   /* Number Spacing */
+    {1, 1, 0,  0},   /* Apple Reserved 1 */
+    {1, 0, 0,  5},   /* Smart Swashes */
+    {1, 0, 1,  3},   /* Diacritics */
+    {1, 0, 1,  4},   /* Vertical Position */
+    {1, 0, 1,  3},   /* Fractions */
+    {1, 1, 0,  0},   /* Apple Reserved 2 */
+    {1, 0, 0,  1},   /* Overlapping Characters */
+    {1, 0, 0,  6},   /* Typographic Extras */
+    {1, 0, 0,  5},   /* Mathematical Extras */
+    {1, 0, 1,  7},   /* Ornament Sets */
+    {1, 0, 1,  1},   /* Character Alternatives */
+    {1, 0, 1,  5},   /* Design Complexity */
+    {1, 0, 1,  6},   /* Style Options */
+    {1, 0, 1, 11},   /* Character Shape */
+    {1, 0, 1,  2},   /* Number Case */
+    {1, 0, 1,  4},   /* Text Spacing */
+    {1, 0, 1, 10},   /* Transliteration */
+    {1, 0, 1,  9},   /* Annotation */
+    {1, 0, 1,  2},   /* Kana Spacing */
+    {1, 0, 1,  2},   /* Ideographic Spacing */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {0, 0, 0,  0},   /* __EMPTY__ */
+    {1, 0, 1,  4},   /* Text Spacing */
+    {1, 0, 1,  2},   /* Kana Spacing */
+    {1, 0, 1,  2},   /* Ideographic Spacing */
+    {1, 0, 1,  4},   /* CJK Roman Spacing */
+  };
+
+
+#endif /* __GXVFEAT_H__ */
+
+
+/* END */
--- a/src/gxvalid/gxvjust.c
+++ b/src/gxvalid/gxvjust.c
@@ -108,7 +108,7 @@
     count = FT_NEXT_ULONG( p );
     for ( i = 0; i < count; i++ )
     {
-      GXV_TRACE(( "validate wdc pair %d/%d\n", i + 1, count ));
+      GXV_TRACE(( "validating wdc pair %d/%d\n", i + 1, count ));
       gxv_just_wdp_entry_validate( p, limit, valid );
       p += valid->subtable_length;
     }
--- a/src/gxvalid/gxvkern.c
+++ b/src/gxvalid/gxvkern.c
@@ -59,9 +59,10 @@
 
   typedef enum GXV_kern_Dialect_
   {
-    KERN_DIALECT_MS    = FT_VALIDATE_MS,
-    KERN_DIALECT_APPLE = FT_VALIDATE_APPLE,
-    KERN_DIALECT_ANY   = FT_VALIDATE_CKERN
+    KERN_DIALECT_UNKNOWN = 0,
+    KERN_DIALECT_MS      = FT_VALIDATE_MS,
+    KERN_DIALECT_APPLE   = FT_VALIDATE_APPLE,
+    KERN_DIALECT_ANY     = FT_VALIDATE_CKERN
 
   } GXV_kern_Dialect;
 
@@ -168,7 +169,8 @@
                                           GXV_Validator  valid )
   {
     FT_Bytes                       p = table;
-    GXV_kern_fmt1_StateOptRecData  optdata = valid->statetable.optdata;
+    GXV_kern_fmt1_StateOptRecData  optdata =
+      (GXV_kern_fmt1_StateOptRecData)valid->statetable.optdata;
 
 
     GXV_LIMIT_CHECK( 2 );
@@ -193,7 +195,8 @@
     FT_UShort  *l[4];
     FT_UShort  buff[5];
 
-    GXV_kern_fmt1_StateOptRecData  optdata = valid->statetable.optdata;
+    GXV_kern_fmt1_StateOptRecData  optdata =
+      (GXV_kern_fmt1_StateOptRecData)valid->statetable.optdata;
 
 
     o[0] = classTable;
@@ -236,7 +239,8 @@
     valueOffset =   flags & 0x3FFF;
 
     {
-      GXV_kern_fmt1_StateOptRecData vt_rec = valid->statetable.optdata;
+      GXV_kern_fmt1_StateOptRecData  vt_rec =
+        (GXV_kern_fmt1_StateOptRecData)valid->statetable.optdata;
       FT_Bytes  p;
 
 
@@ -612,10 +616,10 @@
                               FT_UShort*     format,
                               GXV_Validator  valid )
   {
-    FT_Int  result = 0;
+    GXV_kern_Dialect  result = KERN_DIALECT_UNKNOWN;
 
 
-    GXV_NAME_ENTER( "validate coverage" );
+    GXV_NAME_ENTER( "validating coverage" );
 
     GXV_TRACE(( "interprete coverage 0x%04x by Apple style\n", coverage ));
 
@@ -767,7 +771,7 @@
     KERN_DIALECT( valid ) = dialect_request;
 
     GXV_LIMIT_CHECK( 2 );
-    GXV_KERN_DATA( version ) = FT_NEXT_USHORT( p );
+    GXV_KERN_DATA( version ) = (GXV_kern_Version)FT_NEXT_USHORT( p );
     GXV_TRACE(( "version 0x%04x (higher 16bit)\n",
                 GXV_KERN_DATA( version ) ));
 
@@ -792,7 +796,7 @@
 
     for ( i = 0; i < nTables; i++ )
     {
-      GXV_TRACE(( "validate subtable %d/%d\n", i, nTables ));
+      GXV_TRACE(( "validating subtable %d/%d\n", i, nTables ));
       /* p should be 32bit-aligned? */
       gxv_kern_subtable_validate( p, 0, valid );
       p += valid->subtable_length;
@@ -820,7 +824,7 @@
     GXV_kern_Dialect  dialect_request;
 
 
-    dialect_request = dialect_flags;
+    dialect_request = (GXV_kern_Dialect)dialect_flags;
     gxv_kern_validate_generic( table, face, 1, dialect_request, ftvalid );
   }
 
--- a/src/gxvalid/gxvmort.c
+++ b/src/gxvalid/gxvmort.c
@@ -25,6 +25,7 @@
 
 
 #include "gxvmort.h"
+#include "gxvfeat.h"
 
 
   /*************************************************************************/
@@ -88,7 +89,7 @@
    * nFeatureFlags is typed to FT_UInt to accept that in
    * mort (typed FT_UShort) and morx (typed FT_ULong).
    */
-  static void
+  FT_LOCAL_DEF( void )
   gxv_mort_featurearray_validate( FT_Bytes       table,
                                   FT_Bytes       limit,
                                   FT_UInt        nFeatureFlags,
@@ -120,7 +121,7 @@
   }
 
 
-  static void
+  FT_LOCAL_DEF( void )
   gxv_mort_coverage_validate( FT_UShort      coverage,
                               GXV_Validator  valid )
   {
@@ -184,7 +185,7 @@
       coverage        = FT_NEXT_USHORT( p );
       subFeatureFlags = FT_NEXT_ULONG( p );
 
-      GXV_TRACE(( "validate chain subtable %d/%d (%d bytes)\n",
+      GXV_TRACE(( "validating chain subtable %d/%d (%d bytes)\n",
                   i + 1, nSubtables, length ));
       type = coverage & 0x0007;
       rest = length - ( 2 + 2 + 4 );
@@ -258,7 +259,7 @@
     valid->face = face;
     limit       = valid->root->limit;
 
-    FT_TRACE3(( "validation mort table\n" ));
+    FT_TRACE3(( "validating `mort' table\n" ));
     GXV_INIT;
 
     GXV_LIMIT_CHECK( 4 + 4 );
@@ -270,7 +271,7 @@
 
     for ( i = 0; i < nChains; i++ )
     {
-      GXV_TRACE(( "validate chain %d/%d\n", i + 1, nChains ));
+      GXV_TRACE(( "validating chain %d/%d\n", i + 1, nChains ));
       GXV_32BIT_ALIGNMENT_VALIDATE( p - table );
       gxv_mort_chain_validate( p, limit, valid );
       p += valid->subtable_length;
--- a/src/gxvalid/gxvmort.h
+++ b/src/gxvalid/gxvmort.h
@@ -52,10 +52,6 @@
 
 
   FT_LOCAL( void )
-  gxv_mort_feature_validate( GXV_mort_feature  f,
-                             GXV_Validator     valid );
-
-  FT_LOCAL( void )
   gxv_mort_featurearray_validate( FT_Bytes       table,
                                   FT_Bytes       limit,
                                   FT_UInt        nFeatureFlags,
--- a/src/gxvalid/gxvmort0.c
+++ b/src/gxvalid/gxvmort0.c
@@ -106,7 +106,7 @@
   }
 
 
-  static void
+  FT_LOCAL_DEF( void )
   gxv_mort_subtable_type0_validate( FT_Bytes       table,
                                     FT_Bytes       limit,
                                     GXV_Validator  valid )
--- a/src/gxvalid/gxvmort1.c
+++ b/src/gxvalid/gxvmort1.c
@@ -58,7 +58,7 @@
     FT_Bytes  p = table;
 
     GXV_mort_subtable_type1_StateOptRecData  optdata =
-                                               valid->statetable.optdata;
+      (GXV_mort_subtable_type1_StateOptRecData)valid->statetable.optdata;
 
 
     GXV_LIMIT_CHECK( 2 );
@@ -81,7 +81,7 @@
     FT_UShort  buff[5];
 
     GXV_mort_subtable_type1_StateOptRecData  optdata =
-                                               valid->statetable.optdata;
+      (GXV_mort_subtable_type1_StateOptRecData)valid->statetable.optdata;
 
 
     o[0] = classTable;
@@ -183,7 +183,7 @@
     FT_UShort  i;
 
 
-    GXV_NAME_ENTER( "validate contents in substitionTable" );
+    GXV_NAME_ENTER( "validating contents of substitionTable" );
     for ( i = 0; i < num_gids ; i ++ )
     {
       FT_UShort  dst_gid;
@@ -214,7 +214,7 @@
    * In addition to classTable, stateArray, and entryTable, the field
    * `substitutionTable' is added.
    */
-  static void
+  FT_LOCAL_DEF( void )
   gxv_mort_subtable_type1_validate( FT_Bytes       table,
                                     FT_Bytes       limit,
                                     GXV_Validator  valid )
--- a/src/gxvalid/gxvmort2.c
+++ b/src/gxvalid/gxvmort2.c
@@ -61,7 +61,7 @@
   {
     FT_Bytes p = table;
     GXV_mort_subtable_type2_StateOptRecData  optdata =
-                                               valid->statetable.optdata;
+      (GXV_mort_subtable_type2_StateOptRecData)valid->statetable.optdata;
 
 
     GXV_LIMIT_CHECK( 2 + 2 + 2 );
@@ -93,7 +93,7 @@
     FT_UShort  buff[7];
 
     GXV_mort_subtable_type2_StateOptRecData  optdata =
-                                               valid->statetable.optdata;
+      (GXV_mort_subtable_type2_StateOptRecData)valid->statetable.optdata;
 
 
     GXV_NAME_ENTER( "subtable boundaries setup" );
@@ -141,7 +141,7 @@
   {
     /* access ligActionTable */
     GXV_mort_subtable_type2_StateOptRecData  optdata =
-                                               valid->statetable.optdata;
+      (GXV_mort_subtable_type2_StateOptRecData)valid->statetable.optdata;
 
     FT_Bytes lat_base  = table + optdata->ligActionTable;
     FT_Bytes p         = table + ligActionOffset;
@@ -217,7 +217,7 @@
                                                   GXV_Validator  valid )
   {
     GXV_mort_subtable_type2_StateOptRecData  optdata =
-                                               valid->statetable.optdata;
+      (GXV_mort_subtable_type2_StateOptRecData)valid->statetable.optdata;
 
     FT_Bytes p     = table + optdata->ligatureTable;
     FT_Bytes limit = table + optdata->ligatureTable
@@ -241,7 +241,7 @@
   }
 
 
-  static void
+  FT_LOCAL_DEF( void )
   gxv_mort_subtable_type2_validate( FT_Bytes       table,
                                     FT_Bytes       limit,
                                     GXV_Validator  valid )
--- a/src/gxvalid/gxvmort4.c
+++ b/src/gxvalid/gxvmort4.c
@@ -100,7 +100,7 @@
   }
 
 
-  static void
+  FT_LOCAL_DEF( void )
   gxv_mort_subtable_type4_validate( FT_Bytes       table,
                                     FT_Bytes       limit,
                                     GXV_Validator  valid )
--- a/src/gxvalid/gxvmort5.c
+++ b/src/gxvalid/gxvmort5.c
@@ -73,7 +73,7 @@
                                           GXV_Validator  valid )
   {
     GXV_mort_subtable_type5_StateOptRecData  optdata =
-                                               valid->statetable.optdata;
+      (GXV_mort_subtable_type5_StateOptRecData)valid->statetable.optdata;
 
 
     gxv_StateTable_subtable_setup( table_size,
@@ -109,7 +109,7 @@
     FT_Bytes  p = table + offset;
 
     GXV_mort_subtable_type5_StateOptRecData  optdata =
-                                               valid->statetable.optdata;
+      (GXV_mort_subtable_type5_StateOptRecData)valid->statetable.optdata;
 
     if ( optdata->classTable < offset                                   &&
          offset < optdata->classTable + *(optdata->classTable_length_p) )
@@ -189,7 +189,7 @@
   }
 
 
-  static void
+  FT_LOCAL_DEF( void )
   gxv_mort_subtable_type5_validate( FT_Bytes       table,
                                     FT_Bytes       limit,
                                     GXV_Validator  valid )
--- a/src/gxvalid/gxvmorx.c
+++ b/src/gxvalid/gxvmorx.c
@@ -77,7 +77,7 @@
       coverage        = FT_NEXT_ULONG( p );
       subFeatureFlags = FT_NEXT_ULONG( p );
 
-      GXV_TRACE(( "validate chain subtable %d/%d (%d bytes)\n",
+      GXV_TRACE(( "validating chain subtable %d/%d (%d bytes)\n",
                   i + 1, nSubtables, length ));
 
       type = coverage & 0x0007;
@@ -152,7 +152,7 @@
     valid->root = ftvalid;
     valid->face = face;
 
-    FT_TRACE3(( "validation morx table\n" ));
+    FT_TRACE3(( "validating `morx' table\n" ));
     GXV_INIT;
 
     GXV_LIMIT_CHECK( 4 + 4 );
@@ -164,7 +164,7 @@
 
     for ( i = 0; i < nChains; i++ )
     {
-      GXV_TRACE(( "validate chain %d/%d\n", i + 1, nChains ));
+      GXV_TRACE(( "validating chain %d/%d\n", i + 1, nChains ));
       GXV_32BIT_ALIGNMENT_VALIDATE( p - table );
       gxv_morx_chain_validate( p, limit, valid );
       p += valid->subtable_length;
--- a/src/gxvalid/gxvmorx.h
+++ b/src/gxvalid/gxvmorx.h
@@ -24,8 +24,8 @@
 /***************************************************************************/
 
 
-#ifndef __GXVMORX_H_
-#define __GXVMORX_H_
+#ifndef __GXVMORX_H__
+#define __GXVMORX_H__
 
 
 #include "gxvalid.h"
--- a/src/gxvalid/gxvmorx0.c
+++ b/src/gxvalid/gxvmorx0.c
@@ -73,7 +73,7 @@
   }
 
 
-  static void
+  FT_LOCAL_DEF( void )
   gxv_morx_subtable_type0_validate( FT_Bytes       table,
                                     FT_Bytes       limit,
                                     GXV_Validator  valid )
--- a/src/gxvalid/gxvmorx1.c
+++ b/src/gxvalid/gxvmorx1.c
@@ -60,7 +60,7 @@
     FT_Bytes  p = table;
 
     GXV_morx_subtable_type1_StateOptRecData  optdata =
-                                               valid->xstatetable.optdata;
+      (GXV_morx_subtable_type1_StateOptRecData)valid->xstatetable.optdata;
 
 
     GXV_LIMIT_CHECK( 2 );
@@ -83,7 +83,7 @@
     FT_ULong  buff[5];
 
     GXV_morx_subtable_type1_StateOptRecData  optdata =
-                                               valid->xstatetable.optdata;
+      (GXV_morx_subtable_type1_StateOptRecData)valid->xstatetable.optdata;
 
 
     o[0] = classTable;
@@ -115,7 +115,7 @@
     FT_Short   currentIndex;
 
     GXV_morx_subtable_type1_StateOptRecData  optdata =
-                                               valid->xstatetable.optdata;
+      (GXV_morx_subtable_type1_StateOptRecData)valid->xstatetable.optdata;
 
     FT_UNUSED( state );
     FT_UNUSED( table );
@@ -197,7 +197,7 @@
     FT_UShort  i;
 
     GXV_morx_subtable_type1_StateOptRecData  optdata =
-                                               valid->xstatetable.optdata;
+      (GXV_morx_subtable_type1_StateOptRecData)valid->xstatetable.optdata;
 
 
     /* TODO: calculate offset/length for each lookupTables */
@@ -225,7 +225,7 @@
    * In addition to classTable, stateArray, entryTable, the field
    * `substitutionTable' is added.
    */
-  static void
+  FT_LOCAL_DEF( void )
   gxv_morx_subtable_type1_validate( FT_Bytes       table,
                                     FT_Bytes       limit,
                                     GXV_Validator  valid )
--- a/src/gxvalid/gxvmorx2.c
+++ b/src/gxvalid/gxvmorx2.c
@@ -63,7 +63,7 @@
     FT_Bytes  p = table;
 
     GXV_morx_subtable_type2_StateOptRecData  optdata =
-                                               valid->xstatetable.optdata;
+      (GXV_morx_subtable_type2_StateOptRecData)valid->xstatetable.optdata;
 
 
     GXV_LIMIT_CHECK( 4 + 4 + 4 );
@@ -95,7 +95,7 @@
     FT_ULong   buff[7];
 
     GXV_morx_subtable_type2_StateOptRecData  optdata =
-                                               valid->xstatetable.optdata;
+      (GXV_morx_subtable_type2_StateOptRecData)valid->xstatetable.optdata;
 
 
     GXV_NAME_ENTER( "subtable boundaries setup" );
@@ -146,7 +146,7 @@
   {
     /* access ligActionTable */
     GXV_morx_subtable_type2_StateOptRecData optdata =
-                                              valid->xstatetable.optdata;
+      (GXV_morx_subtable_type2_StateOptRecData)valid->xstatetable.optdata;
 
     FT_Bytes lat_base  = table + optdata->ligActionTable;
     FT_Bytes p         = lat_base +
@@ -220,7 +220,7 @@
                                                   GXV_Validator  valid )
   {
     GXV_morx_subtable_type2_StateOptRecData  optdata =
-                                               valid->xstatetable.optdata;
+      (GXV_morx_subtable_type2_StateOptRecData)valid->xstatetable.optdata;
 
     FT_Bytes p     = table + optdata->ligatureTable;
     FT_Bytes limit = table + optdata->ligatureTable
@@ -246,7 +246,7 @@
   }
 
 
-  static void
+  FT_LOCAL_DEF( void )
   gxv_morx_subtable_type2_validate( FT_Bytes       table,
                                     FT_Bytes       limit,
                                     GXV_Validator  valid )
@@ -258,7 +258,7 @@
 
     GXV_NAME_ENTER( "morx chain subtable type2 (Ligature Substitution)" );
 
-    GXV_LIMIT_CHECK( GXV_MORT_SUBTABLE_TYPE2_HEADER_SIZE );
+    GXV_LIMIT_CHECK( GXV_MORX_SUBTABLE_TYPE2_HEADER_SIZE );
 
     valid->xstatetable.optdata =
       &lig_rec;
--- a/src/gxvalid/gxvmorx4.c
+++ b/src/gxvalid/gxvmorx4.c
@@ -38,7 +38,7 @@
 #define FT_COMPONENT  trace_gxvmorx
 
 
-  static void
+  FT_LOCAL_DEF( void )
   gxv_morx_subtable_type4_validate( FT_Bytes       table,
                                     FT_Bytes       limit,
                                     GXV_Validator  valid )
--- a/src/gxvalid/gxvmorx5.c
+++ b/src/gxvalid/gxvmorx5.c
@@ -69,7 +69,7 @@
     FT_Bytes  p = table;
 
     GXV_morx_subtable_type5_StateOptRecData  optdata =
-                                               valid->xstatetable.optdata;
+      (GXV_morx_subtable_type5_StateOptRecData)valid->xstatetable.optdata;
 
 
     GXV_LIMIT_CHECK( 4 );
@@ -92,7 +92,7 @@
     FT_ULong   buff[5];
 
     GXV_morx_subtable_type5_StateOptRecData  optdata =
-                                               valid->xstatetable.optdata;
+      (GXV_morx_subtable_type5_StateOptRecData)valid->xstatetable.optdata;
 
 
     o[0] = classTable;
@@ -180,7 +180,7 @@
   }
 
 
-  static void
+  FT_LOCAL_DEF( void )
   gxv_morx_subtable_type5_validate( FT_Bytes       table,
                                     FT_Bytes       limit,
                                     GXV_Validator  valid )
--- a/src/gxvalid/gxvopbd.c
+++ b/src/gxvalid/gxvopbd.c
@@ -15,6 +15,15 @@
 /*                                                                         */
 /***************************************************************************/
 
+/***************************************************************************/
+/*                                                                         */
+/* gxvalid is derived from both gxlayout module and otvalid module.        */
+/* Development of gxlayout is supported by the Information-technology      */
+/* Promotion Agency(IPA), Japan.                                           */
+/*                                                                         */
+/***************************************************************************/
+
+
 #include "gxvalid.h"
 #include "gxvcommn.h"
 
@@ -29,7 +38,6 @@
 #define FT_COMPONENT  trace_gxvopbd
 
 
-
   /*************************************************************************/
   /*************************************************************************/
   /*****                                                               *****/
@@ -45,9 +53,10 @@
 
   } GXV_opbd_DataRec, *GXV_opbd_Data;
 
-#define  GXV_OPBD_DATA(FIELD)  GXV_TABLE_DATA( opbd, FIELD )
 
+#define GXV_OPBD_DATA( FIELD )  GXV_TABLE_DATA( opbd, FIELD )
 
+
   /*************************************************************************/
   /*************************************************************************/
   /*****                                                               *****/
@@ -71,13 +80,12 @@
     if ( value.u < GXV_OPBD_DATA( valueOffset_min ) )
       GXV_OPBD_DATA( valueOffset_min ) = value.u;
 
-
     for ( i = 0; i < 4; i++ )
     {
       GXV_LIMIT_CHECK( 2 );
       delta_value = FT_NEXT_SHORT( p );
 
-      if ( GXV_OPBD_DATA( format ) ) /* format 1, value is ctrl pt. */
+      if ( GXV_OPBD_DATA( format ) )    /* format 1, value is ctrl pt. */
       {
         if ( delta_value == -1 )
           continue;
@@ -84,7 +92,7 @@
 
         gxv_ctlPoint_validate( glyph, delta_value, valid );
       }
-      else /* format 0, value is distance */
+      else                              /* format 0, value is distance */
         continue;
     }
   }
@@ -130,12 +138,16 @@
   {
     GXV_LookupValueDesc  value;
 
+    FT_UNUSED( lookuptbl_limit );
+    FT_UNUSED( valid );
 
-    value.u = base_value.u + ( relative_gindex * 4 * sizeof ( FT_Short ) );
 
+    value.u = base_value.u + relative_gindex * 4 * sizeof ( FT_Short );
+
     return value;
   }
 
+
   /*************************************************************************/
   /*************************************************************************/
   /*****                                                               *****/
@@ -163,9 +175,9 @@
     valid->table_data = opbd;
     valid->face       = face;
 
-    FT_TRACE3(( "validation opbd table\n" ));
+    FT_TRACE3(( "validating `opbd' table\n" ));
     GXV_INIT;
-    GXV_OPBD_DATA( valueOffset_min ) = 0xFFFF;
+    GXV_OPBD_DATA( valueOffset_min ) = 0xFFFFU;
 
 
     GXV_LIMIT_CHECK( 4 + 2 );
@@ -173,30 +185,29 @@
     GXV_OPBD_DATA( format ) = FT_NEXT_USHORT( p );
 
 
-    /* 0x00010000 is only defined (1996) */
+    /* only 0x00010000 is defined (1996) */
     GXV_TRACE(( "(version=0x%08x)\n", version ));
     if ( 0x00010000UL != version )
       FT_INVALID_FORMAT;
 
-    /* 0, 1 are only defined (1996) */
+    /* only values 0 and 1 are defined (1996) */
     GXV_TRACE(( "(format=0x%04x)\n", GXV_OPBD_DATA( format ) ));
     if ( 0x0001 < GXV_OPBD_DATA( format ) )
       FT_INVALID_FORMAT;
 
-
     valid->lookupval_sign   = GXV_LOOKUPVALUE_UNSIGNED;
     valid->lookupval_func   = gxv_opbd_LookupValue_validate;
     valid->lookupfmt4_trans = gxv_opbd_LookupFmt4_transit;
+
     gxv_LookupTable_validate( p, limit, valid );
     p += valid->subtable_length;
 
-
     if ( p > table + GXV_OPBD_DATA( valueOffset_min ) )
     {
-      GXV_TRACE(( "found overlap between LookupTable and opbd_value array\n" ));
+      GXV_TRACE((
+        "found overlap between LookupTable and opbd_value array\n" ));
       FT_INVALID_OFFSET;
     }
-
 
     FT_TRACE4(( "\n" ));
   }
--- a/src/gxvalid/gxvprop.c
+++ b/src/gxvalid/gxvprop.c
@@ -16,9 +16,11 @@
 /***************************************************************************/
 
 /***************************************************************************/
+/*                                                                         */
 /* gxvalid is derived from both gxlayout module and otvalid module.        */
-/* Development of gxlayout was support of Information-technology Promotion */
-/* Agency(IPA), Japan.                                                     */
+/* Development of gxlayout is supported by the Information-technology      */
+/* Promotion Agency(IPA), Japan.                                           */
+/*                                                                         */
 /***************************************************************************/
 
 
@@ -25,6 +27,7 @@
 #include "gxvalid.h"
 #include "gxvcommn.h"
 
+
   /*************************************************************************/
   /*                                                                       */
   /* The macro FT_COMPONENT is used in trace mode.  It is an implicit      */
@@ -35,7 +38,6 @@
 #define FT_COMPONENT  trace_gxvprop
 
 
-
   /*************************************************************************/
   /*************************************************************************/
   /*****                                                               *****/
@@ -52,16 +54,17 @@
     FT_Fixed  version;
 
   } GXV_prop_DataRec, *GXV_prop_Data;
-#define GXV_PROP_DATA(field)  GXV_TABLE_DATA( prop, field )
 
-#define GXV_PROP_FLOATER                      0x8000
-#define GXV_PROP_USE_COMPLEMENTARY_BRACKET    0x1000
-#define GXV_PROP_COMPLEMENTARY_BRACKET_OFFSET 0x0F00
-#define GXV_PROP_ATTACHING_TO_RIGHT           0x0080
-#define GXV_PROP_RESERVED                     0x0060
-#define GXV_PROP_DIRECTIONALITY_CLASS         0x001F
+#define GXV_PROP_DATA( field )  GXV_TABLE_DATA( prop, field )
 
+#define GXV_PROP_FLOATER                      0x8000U
+#define GXV_PROP_USE_COMPLEMENTARY_BRACKET    0x1000U
+#define GXV_PROP_COMPLEMENTARY_BRACKET_OFFSET 0x0F00U
+#define GXV_PROP_ATTACHING_TO_RIGHT           0x0080U
+#define GXV_PROP_RESERVED                     0x0060U
+#define GXV_PROP_DIRECTIONALITY_CLASS         0x001FU
 
+
   /*************************************************************************/
   /*************************************************************************/
   /*****                                                               *****/
@@ -79,7 +82,7 @@
     FT_GlyphSlot  glyph;
 
 
-    GXV_NAME_ENTER(" zero advance " );
+    GXV_NAME_ENTER( "zero advance" );
 
     face = valid->face;
 
@@ -98,6 +101,7 @@
     GXV_EXIT;
   }
 
+
   /* Pass 0 as GLYPH to check the default property */
   static void
   gxv_prop_property_validate( FT_UShort      property,
@@ -105,16 +109,14 @@
                               GXV_Validator  valid )
   {
     if ( glyph != 0 && ( property & GXV_PROP_FLOATER ) )
-    {
       gxv_prop_zero_advance_validate( glyph, valid );
-    }
 
-
     if ( property & GXV_PROP_USE_COMPLEMENTARY_BRACKET )
     {
-      FT_UShort offset;
-      char complement;
+      FT_UShort  offset;
+      char       complement;
 
+
       offset = property & GXV_PROP_COMPLEMENTARY_BRACKET_OFFSET;
       if ( offset == 0 )
         FT_INVALID_DATA;
@@ -122,9 +124,9 @@
       complement = offset >> 8;
       if ( complement & 0x08 )
       {
-        /* Top bit is set: nagative */
+        /* Top bit is set: negative */
 
-        /* Calculated the absolute offset */
+        /* Calculate the absolute offset */
         complement = ( complement & 0x07 ) + 1;
 
         /* The gid for complement must be greater than 0 */
@@ -136,38 +138,34 @@
         /* The gid for complement must be the face. */
         gxv_glyphid_validate( glyph + complement, valid );
       }
-
     }
     else
     {
-      if ( ( property & GXV_PROP_COMPLEMENTARY_BRACKET_OFFSET ) )
+      if ( property & GXV_PROP_COMPLEMENTARY_BRACKET_OFFSET )
         GXV_TRACE(( "glyph %d cannot have complementary bracketing\n",
-                     glyph ));
+                    glyph ));
     }
 
-
-    /* this is introduced in ver 2.0 */
+    /* this is introduced in version 2.0 */
     if ( property & GXV_PROP_ATTACHING_TO_RIGHT )
     {
-      if ( GXV_PROP_DATA( version ) == 0x00010000 )
+      if ( GXV_PROP_DATA( version ) == 0x00010000UL )
         FT_INVALID_DATA;
     }
 
-
     if ( property & GXV_PROP_RESERVED )
-    {
       FT_INVALID_DATA;
-    }
 
     if ( ( property & GXV_PROP_DIRECTIONALITY_CLASS ) > 11 )
     {
       /* TODO: Too restricted. Use the validation level. */
-      if ( GXV_PROP_DATA( version ) == 0x00010000 ||
-           GXV_PROP_DATA( version ) == 0x00020000 )
+      if ( GXV_PROP_DATA( version ) == 0x00010000UL ||
+           GXV_PROP_DATA( version ) == 0x00020000UL )
         FT_INVALID_DATA;
     }
   }
 
+
   static void
   gxv_prop_LookupValue_validate( FT_UShort            glyph,
                                  GXV_LookupValueDesc  value,
@@ -216,7 +214,7 @@
     GXV_LookupValueDesc  value;
 
 
-    offset = base_value.u + ( relative_gindex * sizeof( FT_UShort ) );
+    offset = base_value.u + relative_gindex * sizeof( FT_UShort );
     p      = valid->lookuptbl_head + offset;
     limit  = lookuptbl_limit;
 
@@ -253,11 +251,11 @@
     FT_UShort         defaultProp;
 
 
-    valid->root = ftvalid;
+    valid->root       = ftvalid;
     valid->table_data = prop;
-    valid->face = face;
+    valid->face       = face;
 
-    FT_TRACE3(( "validation prop table\n" ));
+    FT_TRACE3(( "validating `prop' table\n" ));
     GXV_INIT;
 
     GXV_LIMIT_CHECK( 4 + 2 + 2 );
@@ -265,15 +263,14 @@
     format      = FT_NEXT_USHORT( p );
     defaultProp = FT_NEXT_USHORT( p );
 
-
-    /* version 1.0, 2.0, 3.0 are only defined (1996) */
-    if ( version != 0x00010000 &&
-         version != 0x00020000 &&
-         version != 0x00030000 )
+    /* only versions 1.0, 2.0, 3.0 are defined (1996) */
+    if ( version != 0x00010000UL &&
+         version != 0x00020000UL &&
+         version != 0x00030000UL )
       FT_INVALID_FORMAT;
 
 
-    /* format 0x0000, 0x0001 are only defined (1996) */
+    /* only formats 0x0000, 0x0001 are defined (1996) */
     if ( format > 1 )
       FT_INVALID_FORMAT;
 
@@ -282,7 +279,7 @@
     if ( format == 0 )
     {
       FT_TRACE3(( "(format 0, no per-glyph properties, "
-                  "rest %d bytes are skipped)", limit - p ));
+                  "remaining %d bytes are skipped)", limit - p ));
       goto Exit;
     }
 
@@ -292,6 +289,7 @@
     valid->lookupval_sign   = GXV_LOOKUPVALUE_UNSIGNED;
     valid->lookupval_func   = gxv_prop_LookupValue_validate;
     valid->lookupfmt4_trans = gxv_prop_LookupFmt4_transit;
+
     gxv_LookupTable_validate( p, limit, valid );
 
   Exit:
--- a/src/gxvalid/gxvtrak.c
+++ b/src/gxvalid/gxvtrak.c
@@ -16,9 +16,11 @@
 /***************************************************************************/
 
 /***************************************************************************/
+/*                                                                         */
 /* gxvalid is derived from both gxlayout module and otvalid module.        */
-/* Development of gxlayout was support of Information-technology Promotion */
-/* Agency(IPA), Japan.                                                     */
+/* Development of gxlayout is supported by the Information-technology      */
+/* Promotion Agency(IPA), Japan.                                           */
+/*                                                                         */
 /***************************************************************************/
 
 
@@ -45,9 +47,9 @@
   /*************************************************************************/
 
     /*
-     * refered track table format specification:
+     * referred track table format specification:
      * http://developer.apple.com/fonts/TTRefMan/RM06/Chap6trak.html
-     * last update is 1996.
+     * last update was 1996.
      * ----------------------------------------------
      * [MINIMUM HEADER]: GXV_TRAK_SIZE_MIN
      * version          (fixed:  32bit) = 0x00010000
@@ -75,8 +77,10 @@
 
   } GXV_trak_DataRec, *GXV_trak_Data;
 
-#define  GXV_TRAK_DATA(FIELD)       GXV_TABLE_DATA( trak, FIELD )
 
+#define GXV_TRAK_DATA( FIELD )  GXV_TABLE_DATA( trak, FIELD )
+
+
   /*************************************************************************/
   /*************************************************************************/
   /*****                                                               *****/
@@ -89,7 +93,6 @@
   gxv_trak_trackTable_validate( FT_Bytes       table,
                                 FT_Bytes       limit,
                                 FT_UShort      nTracks,
-                                FT_UShort      nSizes,
                                 GXV_Validator  valid )
   {
     FT_Bytes   p = table;
@@ -102,7 +105,7 @@
 
     GXV_NAME_ENTER( "trackTable" );
 
-    GXV_TRAK_DATA( trackValueOffset_min ) = 0xFFFF;
+    GXV_TRAK_DATA( trackValueOffset_min ) = 0xFFFFU;
     GXV_TRAK_DATA( trackValueOffset_max ) = 0x0000;
 
     for ( i = 0; i < nTracks; i ++ )
@@ -120,7 +123,7 @@
       gxv_sfntName_validate( nameIndex, 256, 32767, valid );
     }
 
-    valid->subtable_length = ( p - table );
+    valid->subtable_length = p - table;
     GXV_EXIT;
   }
 
@@ -149,22 +152,19 @@
 
     gxv_odtect_add_range( table, p - table, "trackData header", odtect );
 
-
     /* validate trackTable */
-    gxv_trak_trackTable_validate( p, limit, nTracks, nSizes, valid );
+    gxv_trak_trackTable_validate( p, limit, nTracks, valid );
     gxv_odtect_add_range( p, valid->subtable_length,
                           "trackTable", odtect );
 
-
     /* sizeTable is array of FT_Fixed, don't check contents */
     p = valid->root->base + sizeTableOffset;
     GXV_LIMIT_CHECK( nSizes * 4 );
-    gxv_odtect_add_range( p, ( nSizes * 4 ), "sizeTable", odtect );
+    gxv_odtect_add_range( p, nSizes * 4, "sizeTable", odtect );
 
-
     /* validate trackValueOffet */
     p = valid->root->base + GXV_TRAK_DATA( trackValueOffset_min );
-    if ( ( limit - p ) < ( nTracks * nSizes * 2 ) )
+    if ( limit - p < nTracks * nSizes * 2 )
       GXV_TRACE(( "too short trackValue array\n" ));
 
     p = valid->root->base + GXV_TRAK_DATA( trackValueOffset_max );
@@ -174,10 +174,9 @@
                             + GXV_TRAK_DATA( trackValueOffset_min ),
                           GXV_TRAK_DATA( trackValueOffset_max )
                             - GXV_TRAK_DATA( trackValueOffset_min )
-                            + ( nSizes * 2 ),
+                            + nSizes * 2,
                           "trackValue array", odtect );
 
-
     gxv_odtect_validate( odtect, valid );
 
     GXV_EXIT;
@@ -215,17 +214,15 @@
 
     GXV_ODTECT( 3, odtect );
 
-
     GXV_ODTECT_INIT( odtect );
     valid->root       = ftvalid;
     valid->table_data = trak;
     valid->face       = face;
 
-
     limit      = valid->root->limit;
     table_size = limit - table;
 
-    FT_TRACE3(( "validation trak table\n" ));
+    FT_TRACE3(( "validating `trak' table\n" ));
     GXV_INIT;
 
     GXV_LIMIT_CHECK( 4 + 2 + 2 + 2 + 2 );
@@ -256,7 +253,6 @@
     if ( reserved != 0x0000 )
       FT_INVALID_DATA;
 
-
     /* validate trackData */
     if ( 0 < horizOffset )
     {
@@ -273,7 +269,6 @@
     }
 
     gxv_odtect_validate( odtect, valid );
-
 
     FT_TRACE4(( "\n" ));
   }
--- a/src/gxvalid/rules.mk
+++ b/src/gxvalid/rules.mk
@@ -33,17 +33,17 @@
                $(GXV_DIR)/gxvprop.c  \
                $(GXV_DIR)/gxvjust.c  \
                $(GXV_DIR)/gxvmort.c  \
-               $(GXV_DIR)/gxvmort0.c  \
-               $(GXV_DIR)/gxvmort1.c  \
-               $(GXV_DIR)/gxvmort2.c  \
-               $(GXV_DIR)/gxvmort4.c  \
-               $(GXV_DIR)/gxvmort5.c  \
+               $(GXV_DIR)/gxvmort0.c \
+               $(GXV_DIR)/gxvmort1.c \
+               $(GXV_DIR)/gxvmort2.c \
+               $(GXV_DIR)/gxvmort4.c \
+               $(GXV_DIR)/gxvmort5.c \
                $(GXV_DIR)/gxvmorx.c  \
-               $(GXV_DIR)/gxvmorx0.c  \
-               $(GXV_DIR)/gxvmorx1.c  \
-               $(GXV_DIR)/gxvmorx2.c  \
-               $(GXV_DIR)/gxvmorx4.c  \
-               $(GXV_DIR)/gxvmorx5.c  \
+               $(GXV_DIR)/gxvmorx0.c \
+               $(GXV_DIR)/gxvmorx1.c \
+               $(GXV_DIR)/gxvmorx2.c \
+               $(GXV_DIR)/gxvmorx4.c \
+               $(GXV_DIR)/gxvmorx5.c \
                $(GXV_DIR)/gxvlcar.c  \
                $(GXV_DIR)/gxvkern.c  \
                $(GXV_DIR)/gxvmod.c
@@ -50,11 +50,12 @@
 
 # GXV driver headers
 #
-GXV_DRV_H := $(GXV_DIR)/gxvalid.h \
-             $(GXV_DIR)/gxverror.h  \
+GXV_DRV_H := $(GXV_DIR)/gxvalid.h  \
+             $(GXV_DIR)/gxverror.h \
              $(GXV_DIR)/gxvcommn.h \
-             $(GXV_DIR)/gxvmod.h \
-             $(GXV_DIR)/gxvmort.h \
+             $(GXV_DIR)/gxvfeat.h  \
+             $(GXV_DIR)/gxvmod.h   \
+             $(GXV_DIR)/gxvmort.h  \
              $(GXV_DIR)/gxvmorx.h