--- src/ttfoutl.h.orig	2004-10-21 16:05:13.000000000 +0100
+++ src/ttfoutl.h	2005-05-19 20:32:07.000000000 +0100
@@ -52,7 +52,13 @@
     double x, y;
 } FloatPoint;
 
+#if   ARCH_LOG2_SIZEOF_LONG == 2
 typedef signed long F26Dot6;
+#elif ARCH_LOG2_SIZEOF_INT  == 2
+typedef signed int  F26Dot6;
+#else
+#error "No appropriate type for Fixed 26.6 Floats"
+#endif
 
 typedef struct { 
     F26Dot6 x;
--- src/tttype.h.orig	2003-11-21 20:01:22.000000000 +0000
+++ src/tttype.h	2005-05-19 20:59:31.000000000 +0100
@@ -62,7 +62,13 @@
   /*                                                                 */
   /*******************************************************************/
 
+#if   ARCH_LOG2_SIZEOF_LONG == 2
   typedef signed long     TT_Fixed;   /* Signed Fixed 16.16 Float */
+#elif ARCH_LOG2_SIZEOF_INT  == 2
+  typedef signed int      TT_Fixed;   /* Signed Fixed 16.16 Float */
+#else
+#error "No appropriate type for Fixed 16.16 Floats"
+#endif
 
   typedef signed short    TT_FWord;   /* Distance in FUnits */
   typedef unsigned short  TT_UFWord;  /* Unsigned distance */
@@ -85,10 +91,19 @@
                                       /*  added.                          */
                                       /*                                  */
 
+#if   ARCH_LOG2_SIZEOF_LONG == 2
   typedef signed long     TT_F26Dot6; /* 26.6 fixed float, used for       */
+#elif ARCH_LOG2_SIZEOF_INT  == 2
+  typedef signed int      TT_F26Dot6; /* 26.6 fixed float, used for       */
                                       /* glyph points pixel coordinates.  */
+#else
+#error "No appropriate type for Fixed 26.6 Floats"
+#endif
 
+#if   ARCH_LOG2_SIZEOF_LONG == 2
   typedef signed long     TT_Pos;     /* point position, expressed either */
+#elif ARCH_LOG2_SIZEOF_INT  == 2
+  typedef signed int     TT_Pos;      /* point position, expressed either */
                                       /* in fractional pixels or notional */
                                       /* units, depending on context. For */
                                       /* example, glyph coordinates       */
@@ -98,6 +113,9 @@
                                       /* in 26.6 fractional pixels if it  */
                                       /* was                              */
                                       /*                                  */
+#else
+#error "No appropriate type for point position"
+#endif
 
   struct  _TT_UnitVector      /* guess what...  */
   { 
--- src/tttypes.h.orig	2003-10-01 14:44:56.000000000 +0100
+++ src/tttypes.h	2005-05-19 21:34:10.000000000 +0100
@@ -67,11 +67,11 @@
 
 #if SIZEOF_INT == 4
 
-  typedef long int        Fixed;    /* signed fixed 16.16 float */
+  typedef signed int      Fixed;    /* signed fixed 16.16 float */
 
 #elif SIZEOF_LONG == 4
 
-  typedef long            Fixed;    /* signed fixed 16.16 float */
+  typedef signed long     Fixed;    /* signed fixed 16.16 float */
 
 #else
 
@@ -117,7 +117,13 @@
 #define NULL  (void*)0
 #endif
 
+#if   ARCH_SIZEOF_PTR == SIZEOF_LONG
   typedef long*  PStorage;
+#elif ARCH_SIZEOF_PTR == SIZEOF_INT
+  typedef int*   PStorage;
+#else
+#error "Size of pointer type is not equal to either long or int"
+#endif
 
 
 /* Rounding mode constants */
