ref: 51179f0ae3a7bcb0d45c736df1189942e9fc99be
parent: 109fcf6086727f61f59a8ce9c569b85bb3d70ae8
author: David Turner <[email protected]>
date: Thu May 18 12:18:05 EDT 2000
some fixes for 64-bit systems. Mainly changed some FT_TRACE calls to use %p instead of %lx when dumping a pointer address
--- a/CHANGES
+++ b/CHANGES
@@ -1,5 +1,8 @@
LATEST_CHANGES
+ - some fixes for 64-bit systems (mainly changing some FT_TRACE calls
+ to use %p instead of %lx).. Thanks to Karl Robillard
+
- fixed some bugs in the sbit loader (src/base/sfnt/ttsbit.c) + added
a new flag, FT_LOAD_CROP_BITMAP to query that bitmaps be cropped when
loaded from a file (maybe I should move the bitmap cropper to the
--- a/include/freetype/internal/sfnt.h
+++ b/include/freetype/internal/sfnt.h
@@ -358,7 +358,7 @@
TT_Load_Table_Func load_kerning;
TT_Load_Table_Func load_gasp;
-
+ TT_Load_Table_Func load_pclt;
/* see `ttsbit.h' */
TT_Load_Table_Func load_sbits;
--- a/include/freetype/internal/tttypes.h
+++ b/include/freetype/internal/tttypes.h
@@ -1971,6 +1971,7 @@
TTC_Header ttc_header;
+ FT_ULong format_tag;
TT_UShort num_tables;
TT_Table* dir_tables;
@@ -2017,6 +2018,9 @@
/* grid-fitting and scaling table */
TT_Gasp gasp; /* the `gasp' table */
+
+ /* PCL 5 table */
+ TT_PCLT pclt;
/* embedded bitmaps support */
TT_Int num_sbit_strikes;
--- a/include/freetype/tttables.h
+++ b/include/freetype/tttables.h
@@ -392,6 +392,34 @@
} TT_Postscript;
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* TT_PCLT */
+ /* */
+ /* <Description> */
+ /* A structure used to model a TrueType PCLT table. All fields */
+ /* comply to the TrueType table. */
+ /* */
+ typedef struct TT_PCLT_
+ {
+ FT_Fixed Version;
+ FT_ULong FontNumber;
+ FT_UShort Pitch;
+ FT_UShort xHeight;
+ FT_UShort Style;
+ FT_UShort TypeFamily;
+ FT_UShort CapHeight;
+ FT_UShort SymbolSet;
+ FT_Char TypeFace[16];
+ FT_Char CharacterComplement[8];
+ FT_Char FileName[6];
+ FT_Char StrokeWeight[6];
+ FT_Char WidthType;
+ FT_Byte SerifStyle;
+ FT_Byte Reserved;
+
+ } TT_PCLT;
/*************************************************************************/
/* */
@@ -491,6 +519,7 @@
ft_sfnt_hhea = 3,
ft_sfnt_vhea = 4,
ft_sfnt_post = 5,
+ ft_sfnt_pclt = 6,
sfnt_max /* don't remove */
--- a/src/base/ftcalc.c
+++ b/src/base/ftcalc.c
@@ -204,8 +204,8 @@
/* 32 bits, then the division is computed directly. Otherwise, we */
/* use a specialized version of the old FT_MulDiv64(). */
/* */
- EXPORT_FUNC(FT_Int32) FT_DivFix( FT_Long a,
- FT_Long b )
+ EXPORT_FUNC(FT_Long) FT_DivFix( FT_Long a,
+ FT_Long b )
{
FT_Int32 s;
FT_Word32 q;
--- a/src/base/ftobjs.c
+++ b/src/base/ftobjs.c
@@ -89,8 +89,8 @@
*P = NULL;
FT_TRACE2(( "FT_Alloc:" ));
- FT_TRACE2(( " size = %ld, block = 0x%08lx, ref = 0x%08lx\n",
- size, (long)*P, (long)P ));
+ FT_TRACE2(( " size = %ld, block = 0x%08p, ref = 0x%08p\n",
+ size, *P, P ));
return FT_Err_Ok;
}
@@ -193,8 +193,8 @@
void** P )
{
FT_TRACE2(( "FT_Free:" ));
- FT_TRACE2(( " Freeing block 0x%08lx, ref 0x%08lx\n",
- (long)P, (P ? (long)*P : -1) ));
+ FT_TRACE2(( " Freeing block 0x%08p, ref 0x%08p\n",
+ P, (P ? *P : (void*)0) ));
FT_Assert( P != 0 );
--- a/src/sfnt/sfdriver.c
+++ b/src/sfnt/sfdriver.c
@@ -28,6 +28,7 @@
TT_Load_Kern,
TT_Load_Gasp,
+ TT_Load_PCLT,
#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
/* see `ttsbit.h' */
--- a/src/sfnt/ttload.c
+++ b/src/sfnt/ttload.c
@@ -57,8 +57,8 @@
TT_Table* entry;
TT_Table* limit;
- FT_TRACE4(( "TT_LookUp_Table( %08lx, %c%c%c%c )\n",
- (TT_Long)face,
+ FT_TRACE4(( "TT_LookUp_Table( %08p, %c%c%c%c )\n",
+ face,
(TT_Char)(tag >> 24),
(TT_Char)(tag >> 16),
(TT_Char)(tag >> 8),
@@ -156,8 +156,8 @@
FT_FRAME_END };
#endif
- FT_TRACE2(( "TT_Load_Format_Tag(%08lx, %ld )\n",
- (TT_Long)face, faceIndex ));
+ FT_TRACE2(( "TT_Load_Format_Tag(%08p, %ld )\n",
+ face, faceIndex ));
face->ttc_header.Tag = 0;
face->ttc_header.version = 0;
@@ -269,8 +269,8 @@
UNUSED(faceIndex);
- FT_TRACE2(( "TT_Load_Directory( %08lx, %ld )\n",
- (TT_Long)face, faceIndex ));
+ FT_TRACE2(( "TT_Load_Directory( %08p, %ld )\n",
+ face, faceIndex ));
#ifdef READ_FIELDS
if ( READ_Fields( table_dir_fields, &tableDir ) )
@@ -462,7 +462,7 @@
FT_FRAME_END };
#endif
- FT_TRACE2(( "Load_TT_Header( %08lx )\n", (TT_Long)face ));
+ FT_TRACE2(( "Load_TT_Header( %08p )\n", face ));
error = face->goto_table( face, TTAG_head, stream, 0 );
if ( error )
@@ -558,7 +558,7 @@
FT_FRAME_END };
#endif
- FT_TRACE2(( "Load_TT_MaxProfile( %08lx )\n", (TT_Long)face ));
+ FT_TRACE2(( "Load_TT_MaxProfile( %08p )\n", face ));
error = face->goto_table( face, TTAG_maxp, stream, 0 );
if (error) goto Exit;
@@ -658,8 +658,8 @@
TT_LongMetrics** longs;
TT_ShortMetrics** shorts;
- FT_TRACE2(( "TT_Load_%s_Metrics( %08lx )\n",
- vertical ? "Vertical" : "Horizontal", (TT_Long)face ));
+ FT_TRACE2(( "TT_Load_%s_Metrics( %08p )\n",
+ vertical ? "Vertical" : "Horizontal", face ));
if ( vertical )
{
@@ -1413,7 +1413,7 @@
TT_Error error;
TT_Postscript* post = &face->postscript;
#ifdef READ_FIELDS
- const FT_Frame_Field post_fields[] = {
+ static const FT_Frame_Field post_fields[] = {
FT_FRAME_START(32),
FT_FRAME_ULONG( TT_Postscript, FormatType ),
FT_FRAME_ULONG( TT_Postscript, italicAngle ),
@@ -1464,6 +1464,70 @@
/*************************************************************************/
/* */
/* <Function> */
+ /* TT_Load_PCLT */
+ /* */
+ /* <Description> */
+ /* Loads the PCL 5 Table. */
+ /* */
+ /* <Input> */
+ /* face :: A handle to the target face object. */
+ /* stream :: A handle to the input stream. */
+ /* */
+ /* <Return> */
+ /* TrueType error code. 0 means success. */
+ /* */
+ LOCAL_FUNC
+ TT_Error TT_Load_PCLT( TT_Face face,
+ FT_Stream stream )
+ {
+ static const FT_Frame_Field pclt_fields[] = {
+ FT_FRAME_START( 20 ),
+ FT_FRAME_ULONG ( TT_PCLT, Version ),
+ FT_FRAME_ULONG ( TT_PCLT, FontNumber ),
+ FT_FRAME_USHORT( TT_PCLT, Pitch ),
+ FT_FRAME_USHORT( TT_PCLT, xHeight ),
+ FT_FRAME_USHORT( TT_PCLT, Style ),
+ FT_FRAME_USHORT( TT_PCLT, TypeFamily ),
+ FT_FRAME_USHORT( TT_PCLT, CapHeight ),
+ FT_FRAME_END };
+
+ static const FT_Frame_Field pclt_fields2[] = {
+ FT_FRAME_START( 4 ),
+ FT_FRAME_CHAR( TT_PCLT, StrokeWeight ),
+ FT_FRAME_CHAR( TT_PCLT, WidthType ),
+ FT_FRAME_BYTE( TT_PCLT, SerifStyle ),
+ FT_FRAME_BYTE( TT_PCLT, Reserved ),
+ FT_FRAME_END };
+
+ TT_Error error;
+ TT_PCLT* pclt = &face->pclt;
+
+ FT_TRACE2(( "PCLT " ));
+
+ /* optional table */
+ error = face->goto_table( face, TTAG_PCLT, stream, 0 );
+ if (error)
+ {
+ FT_TRACE2(( "missing (optional)\n" ));
+ pclt->Version = 0;
+ return 0;
+ }
+
+ if ( READ_Fields( pclt_fields, pclt ) ||
+ FILE_Read ( pclt->TypeFace, 16 ) ||
+ FILE_Read ( pclt->CharacterComplement, 8 ) ||
+ FILE_Read ( pclt->FileName, 6 ) ||
+ READ_Fields( pclt_fields2, pclt ) )
+ goto Exit;
+
+ FT_TRACE2(( "loaded\n" ));
+ Exit:
+ return error;
+ }
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
/* TT_Load_Gasp */
/* */
/* <Description> */
@@ -1487,7 +1551,7 @@
TT_GaspRange* gaspranges;
- FT_TRACE2(( "TT_Load_Gasp( %08lx )\n", (TT_Long)face ));
+ FT_TRACE2(( "TT_Load_Gasp( %08p )\n", face ));
/* the gasp table is optional */
error = face->goto_table( face, TTAG_gasp, stream, 0 );
--- a/src/sfnt/ttload.h
+++ b/src/sfnt/ttload.h
@@ -103,6 +103,9 @@
TT_Error TT_Load_Hdmx( TT_Face face,
FT_Stream stream );
+ LOCAL_DEF
+ TT_Error TT_Load_PCLT( TT_Face face,
+ FT_Stream stream );
LOCAL_DEF
void TT_Free_Names( TT_Face face );
--- a/src/truetype/ttdriver.c
+++ b/src/truetype/ttdriver.c
@@ -651,6 +651,7 @@
case ft_sfnt_os2: table = (face->os2.version == 0xFFFF ? 0 : &face->os2 ); break;
case ft_sfnt_post: table = &face->postscript; break;
case ft_sfnt_maxp: table = &face->max_profile; break;
+ case ft_sfnt_pclt: table = face->pclt.Version ? &face->pclt : 0 ; break;
default:
table = 0;
--- a/src/truetype/ttinterp.c
+++ b/src/truetype/ttinterp.c
@@ -435,8 +435,8 @@
TT_Error error;
- FT_TRACE1(( "TT.Create_Create: new object at 0x%08lx, parent = 0x%08lx\n",
- (long)exec, (long)face ));
+ FT_TRACE1(( "TT.Create_Create: new object at 0x%08p, parent = 0x%08p\n",
+ exec, face ));
/* XXX: We don't reserve arrays anymore, this is done automatically */
/* during a call to Context_Load(). */
--- a/src/truetype/ttobjs.c
+++ b/src/truetype/ttobjs.c
@@ -215,6 +215,9 @@
goto Exit;
}
+ /* store format tag */
+ face->format_tag = format_tag;
+
/* Load font directory */
error = sfnt->load_directory( face, stream, face_index );
if ( error ) goto Exit;
@@ -254,6 +257,7 @@
if ( LOAD_( hdmx ) ||
LOAD_( gasp ) ||
LOAD_( kerning ) ||
+ LOAD_( pclt ) ||
(error = TT_Load_Locations( face, stream )) != TT_Err_Ok ||
(error = TT_Load_CVT ( face, stream )) != TT_Err_Ok ||