parent
6b76663625
commit
f28b7bfaea
10 changed files with 2203 additions and 0 deletions
@ -0,0 +1,32 @@ |
||||
#
|
||||
# FreeType 2 PCF module definition
|
||||
#
|
||||
|
||||
# Copyright 2000 by
|
||||
# Francesco Zappa Nardelli
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
|
||||
make_module_list: add_pcf_driver |
||||
|
||||
add_pcf_driver: |
||||
$(OPEN_DRIVER)pcf_driver_class$(CLOSE_DRIVER)
|
||||
$(ECHO_DRIVER)pcf $(ECHO_DRIVER_DESC)pcf bitmap fonts$(ECHO_DRIVER_DONE)
|
||||
|
||||
# EOF
|
@ -0,0 +1,36 @@ |
||||
/* pcf.c
|
||||
|
||||
FreeType font driver for pcf fonts |
||||
|
||||
Copyright 2000 by
|
||||
Francesco Zappa Nardelli
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
of this software and associated documentation files (the "Software"), to deal |
||||
in the Software without restriction, including without limitation the rights |
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
copies of the Software, and to permit persons to whom the Software is |
||||
furnished to do so, subject to the following conditions: |
||||
|
||||
The above copyright notice and this permission notice shall be included in |
||||
all copies or substantial portions of the Software. |
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
||||
THE SOFTWARE. |
||||
*/ |
||||
|
||||
|
||||
#define FT_MAKE_OPTION_SINGLE_OBJECT |
||||
|
||||
|
||||
#include <ft2build.h> |
||||
#include FT_SOURCE_FILE(pcf,pcfutil.c) |
||||
#include FT_SOURCE_FILE(pcf,pcfread.c) |
||||
#include FT_SOURCE_FILE(pcf,pcfdriver.c) |
||||
|
||||
/* END */ |
@ -0,0 +1,239 @@ |
||||
/* pcf.h
|
||||
|
||||
FreeType font driver for pcf fonts |
||||
|
||||
Copyright (C) 2000 by
|
||||
Francesco Zappa Nardelli
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
of this software and associated documentation files (the "Software"), to deal |
||||
in the Software without restriction, including without limitation the rights |
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
copies of the Software, and to permit persons to whom the Software is |
||||
furnished to do so, subject to the following conditions: |
||||
|
||||
The above copyright notice and this permission notice shall be included in |
||||
all copies or substantial portions of the Software. |
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
||||
THE SOFTWARE. |
||||
*/ |
||||
|
||||
|
||||
#ifndef __PCF_H__ |
||||
#define __PCF_H__ |
||||
|
||||
|
||||
#include <ft2build.h> |
||||
#include FT_INTERNAL_DRIVER_H |
||||
|
||||
|
||||
FT_BEGIN_HEADER |
||||
|
||||
typedef struct PCF_TableRec_ |
||||
{ |
||||
FT_ULong type; |
||||
FT_ULong format; |
||||
FT_ULong size; |
||||
FT_ULong offset; |
||||
|
||||
} PCF_TableRec, *PCF_Table; |
||||
|
||||
|
||||
typedef struct PCF_TocRec_
|
||||
{ |
||||
FT_ULong version; |
||||
FT_ULong count; |
||||
PCF_Table tables; |
||||
|
||||
} PCF_TocRec, *PCF_Toc; |
||||
|
||||
|
||||
typedef struct PCF_ParseProperty_
|
||||
{ |
||||
FT_Long name; |
||||
FT_Byte isString; |
||||
FT_Long value; |
||||
|
||||
} PCF_ParsePropertyRec, *PCF_ParseProperty; |
||||
|
||||
|
||||
typedef struct PCF_Property_ |
||||
{ |
||||
FT_String* name; |
||||
FT_Byte isString; |
||||
|
||||
union |
||||
{ |
||||
FT_String* atom; |
||||
FT_Long integer; |
||||
FT_ULong cardinal; |
||||
|
||||
} value; |
||||
|
||||
} PCF_PropertyRec, *PCF_Property;
|
||||
|
||||
|
||||
typedef struct PCF_Compressed_Metric_
|
||||
{ |
||||
FT_Byte leftSideBearing; |
||||
FT_Byte rightSideBearing; |
||||
FT_Byte characterWidth; |
||||
FT_Byte ascent; |
||||
FT_Byte descent; |
||||
|
||||
} PCF_Compressed_MetricRec, *PCF_Compressed_Metric; |
||||
|
||||
|
||||
typedef struct PCF_Metric_
|
||||
{ |
||||
FT_Short leftSideBearing; |
||||
FT_Short rightSideBearing; |
||||
FT_Short characterWidth; |
||||
FT_Short ascent; |
||||
FT_Short descent; |
||||
FT_Short attributes; |
||||
FT_ULong bits; |
||||
|
||||
} PCF_MetricRec, *PCF_Metric; |
||||
|
||||
|
||||
typedef struct PCF_AccelRec_ |
||||
{ |
||||
FT_Byte noOverlap; |
||||
FT_Byte constantMetrics; |
||||
FT_Byte terminalFont; |
||||
FT_Byte constantWidth; |
||||
FT_Byte inkInside; |
||||
FT_Byte inkMetrics; |
||||
FT_Byte drawDirection; |
||||
FT_Long fontAscent; |
||||
FT_Long fontDescent; |
||||
FT_Long maxOverlap; |
||||
PCF_MetricRec minbounds; |
||||
PCF_MetricRec maxbounds; |
||||
PCF_MetricRec ink_minbounds; |
||||
PCF_MetricRec ink_maxbounds; |
||||
|
||||
} PCF_AccelRec, *PCF_Accel; |
||||
|
||||
|
||||
typedef struct PCD_Encoding_ |
||||
{ |
||||
FT_Long enc; |
||||
FT_Short glyph; |
||||
|
||||
} PCF_EncodingRec, *PCF_Encoding; |
||||
|
||||
|
||||
typedef struct PCF_FaceRec_ |
||||
{ |
||||
FT_FaceRec root; |
||||
|
||||
char* charset_encoding; |
||||
char* charset_registry; |
||||
|
||||
PCF_TocRec toc; |
||||
PCF_AccelRec accel; |
||||
|
||||
int nprops; |
||||
PCF_Property properties; |
||||
|
||||
FT_Long nmetrics; |
||||
PCF_Metric metrics; |
||||
FT_Long nencodings; |
||||
PCF_Encoding encodings; |
||||
|
||||
FT_Short defaultChar; |
||||
|
||||
FT_ULong bitmapsFormat; |
||||
|
||||
FT_CharMap charmap_handle; |
||||
FT_CharMapRec charmap; /* a single charmap per face */ |
||||
|
||||
} PCF_FaceRec, *PCF_Face; |
||||
|
||||
|
||||
/* XXX hack */ |
||||
static |
||||
FT_Error PCF_Done_Face( PCF_Face face ); |
||||
|
||||
|
||||
/* macros for pcf font format */ |
||||
|
||||
#define LSBFirst 0 |
||||
#define MSBFirst 1 |
||||
|
||||
#define PCF_FILE_VERSION ( ( 'p' << 24 ) | \ |
||||
( 'c' << 16 ) | \
|
||||
( 'f' << 8 ) | 1 ) |
||||
#define PCF_FORMAT_MASK 0xFFFFFF00L |
||||
|
||||
#define PCF_DEFAULT_FORMAT 0x00000000L |
||||
#define PCF_INKBOUNDS 0x00000200L |
||||
#define PCF_ACCEL_W_INKBOUNDS 0x00000100L |
||||
#define PCF_COMPRESSED_METRICS 0x00000100L |
||||
|
||||
#define PCF_FORMAT_MATCH( a, b ) \ |
||||
( ( (a) & PCF_FORMAT_MASK ) == ( (b) & PCF_FORMAT_MASK ) ) |
||||
|
||||
#define PCF_GLYPH_PAD_MASK ( 3 << 0 ) |
||||
#define PCF_BYTE_MASK ( 1 << 2 ) |
||||
#define PCF_BIT_MASK ( 1 << 3 ) |
||||
#define PCF_SCAN_UNIT_MASK ( 3 << 4 ) |
||||
|
||||
#define PCF_BYTE_ORDER( f ) \ |
||||
( ( (f) & PCF_BYTE_MASK ) ? MSBFirst : LSBFirst ) |
||||
#define PCF_BIT_ORDER( f ) \ |
||||
( ( (f) & PCF_BIT_MASK ) ? MSBFirst : LSBFirst ) |
||||
#define PCF_GLYPH_PAD_INDEX( f ) \ |
||||
( (f) & PCF_GLYPH_PAD_MASK ) |
||||
#define PCF_GLYPH_PAD( f ) \ |
||||
( 1 << PCF_GLYPH_PAD_INDEX( f ) ) |
||||
#define PCF_SCAN_UNIT_INDEX( f ) \ |
||||
( ( (f) & PCF_SCAN_UNIT_MASK ) >> 4 ) |
||||
#define PCF_SCAN_UNIT( f ) \ |
||||
( 1 << PCF_SCAN_UNIT_INDEX( f ) ) |
||||
#define PCF_FORMAT_BITS( f ) \ |
||||
( (f) & ( PCF_GLYPH_PAD_MASK | \
|
||||
PCF_BYTE_MASK | \
|
||||
PCF_BIT_MASK | \
|
||||
PCF_SCAN_UNIT_MASK ) ) |
||||
|
||||
#define PCF_SIZE_TO_INDEX( s ) ( (s) == 4 ? 2 : (s) == 2 ? 1 : 0 ) |
||||
#define PCF_INDEX_TO_SIZE( b ) ( 1 << b ) |
||||
|
||||
#define PCF_FORMAT( bit, byte, glyph, scan ) \ |
||||
( ( PCF_SIZE_TO_INDEX( scan ) << 4 ) | \
|
||||
( ( (bit) == MSBFirst ? 1 : 0 ) << 3 ) | \
|
||||
( ( (byte) == MSBFirst ? 1 : 0 ) << 2 ) | \
|
||||
( PCF_SIZE_TO_INDEX( glyph ) << 0 ) ) |
||||
|
||||
#define PCF_PROPERTIES ( 1 << 0 ) |
||||
#define PCF_ACCELERATORS ( 1 << 1 ) |
||||
#define PCF_METRICS ( 1 << 2 ) |
||||
#define PCF_BITMAPS ( 1 << 3 ) |
||||
#define PCF_INK_METRICS ( 1 << 4 ) |
||||
#define PCF_BDF_ENCODINGS ( 1 << 5 ) |
||||
#define PCF_SWIDTHS ( 1 << 6 ) |
||||
#define PCF_GLYPH_NAMES ( 1 << 7 ) |
||||
#define PCF_BDF_ACCELERATORS ( 1 << 8 ) |
||||
|
||||
#define GLYPHPADOPTIONS 4 /* I'm not sure about this */ |
||||
|
||||
static
|
||||
FT_Error pcf_load_font( FT_Stream, |
||||
PCF_Face ); |
||||
|
||||
|
||||
FT_END_HEADER |
||||
|
||||
#endif /* __PCF_H__ */ |
||||
|
||||
|
||||
/* END */ |
@ -0,0 +1,343 @@ |
||||
/* pcfdriver.c
|
||||
|
||||
FreeType font driver for pcf files |
||||
|
||||
Copyright (C) 2000 by |
||||
Francesco Zappa Nardelli
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
of this software and associated documentation files (the "Software"), to deal |
||||
in the Software without restriction, including without limitation the rights |
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
copies of the Software, and to permit persons to whom the Software is |
||||
furnished to do so, subject to the following conditions: |
||||
|
||||
The above copyright notice and this permission notice shall be included in |
||||
all copies or substantial portions of the Software. |
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
||||
THE SOFTWARE. |
||||
*/ |
||||
|
||||
|
||||
#include <ft2build.h> |
||||
|
||||
#include FT_ERRORS_H |
||||
#include FT_INTERNAL_DEBUG_H |
||||
#include FT_INTERNAL_STREAM_H |
||||
#include FT_INTERNAL_OBJECTS_H |
||||
|
||||
#include FT_SOURCE_FILE(pcf,pcf.h) |
||||
#include FT_SOURCE_FILE(pcf,pcfdriver.h) |
||||
#include FT_SOURCE_FILE(pcf,pcfutil.h) |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* The macro FT_COMPONENT is used in trace mode. It is an implicit */ |
||||
/* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */ |
||||
/* messages during execution. */ |
||||
/* */ |
||||
#undef FT_COMPONENT |
||||
#define FT_COMPONENT trace_pcfdriver |
||||
|
||||
|
||||
static |
||||
FT_Error PCF_Done_Face( PCF_Face face ) |
||||
{
|
||||
FT_Memory memory = FT_FACE_MEMORY( face ); |
||||
PCF_Property tmp = face->properties; |
||||
int i; |
||||
|
||||
|
||||
FREE( face->encodings );
|
||||
FREE( face->metrics ); |
||||
|
||||
for ( i = 0; i < face->nprops; i++ ) |
||||
{ |
||||
FREE( tmp->name ); |
||||
if ( tmp->isString ) |
||||
FREE( tmp->value ); |
||||
} |
||||
FREE( face->properties ); |
||||
|
||||
FT_TRACE4(( "DONE_FACE!!!\n" )); |
||||
|
||||
return FT_Err_Ok; |
||||
} |
||||
|
||||
|
||||
static |
||||
FT_Error PCF_Init_Face( FT_Stream stream, |
||||
PCF_Face face, |
||||
FT_Int face_index, |
||||
FT_Int num_params, |
||||
FT_Parameter* params ) |
||||
{ |
||||
FT_Error error = FT_Err_Ok; |
||||
|
||||
FT_UNUSED( num_params ); |
||||
FT_UNUSED( params ); |
||||
FT_UNUSED( face_index ); |
||||
|
||||
|
||||
error = pcf_load_font( stream, face ); |
||||
if ( error ) |
||||
goto Fail; |
||||
|
||||
return FT_Err_Ok; |
||||
|
||||
Fail:
|
||||
FT_TRACE2(( "[not a valid PCF file]\n" )); |
||||
PCF_Done_Face( face ); |
||||
|
||||
return FT_Err_Unknown_File_Format; /* error */ |
||||
} |
||||
|
||||
|
||||
static |
||||
FT_Error PCF_Set_Pixel_Size( FT_Size size ) |
||||
{
|
||||
PCF_Face face = (PCF_Face)FT_SIZE_FACE( size ); |
||||
|
||||
|
||||
FT_TRACE4(( "rec %d - pres %d\n", size->metrics.y_ppem, |
||||
face->root.available_sizes->height )); |
||||
|
||||
if ( size->metrics.y_ppem == face->root.available_sizes->height ) |
||||
{ |
||||
size->metrics.ascender = face->accel.fontAscent << 6;
|
||||
size->metrics.descender = face->accel.fontDescent * (-64); |
||||
#if 0 |
||||
size->metrics.height = face->accel.maxbounds.ascent << 6; |
||||
#endif |
||||
size->metrics.height = size->metrics.ascender - |
||||
size->metrics.descender; |
||||
|
||||
return FT_Err_Ok; |
||||
} |
||||
else |
||||
{ |
||||
FT_TRACE4(( "size WRONG\n" )); |
||||
return FT_Err_Invalid_Pixel_Size; |
||||
} |
||||
} |
||||
|
||||
|
||||
static |
||||
FT_Error PCF_Load_Glyph( FT_GlyphSlot slot, |
||||
FT_Size size, |
||||
FT_UInt glyph_index, |
||||
FT_Int load_flags ) |
||||
{
|
||||
PCF_Face face = (PCF_Face)FT_SIZE_FACE( size ); |
||||
FT_Error error = FT_Err_Ok; |
||||
FT_Memory memory = FT_FACE(face)->memory; |
||||
FT_Bitmap* bitmap = &slot->bitmap; |
||||
PCF_Metric metric; |
||||
int bytes; |
||||
|
||||
FT_Stream stream = face->root.stream; |
||||
|
||||
FT_UNUSED( load_flags ); |
||||
|
||||
|
||||
FT_TRACE4(( "load_glyph %d ---", glyph_index )); |
||||
|
||||
if ( !face ) |
||||
{ |
||||
error = FT_Err_Invalid_Argument; |
||||
goto Exit; |
||||
} |
||||
|
||||
metric = face->metrics + glyph_index; |
||||
|
||||
bitmap->rows = metric->ascent + metric->descent; |
||||
bitmap->width = metric->characterWidth; |
||||
bitmap->num_grays = 1; |
||||
bitmap->pixel_mode = ft_pixel_mode_mono; |
||||
|
||||
FT_TRACE6(( "BIT_ORDER %d ; BYTE_ORDER %d ; GLYPH_PAD %d\n", |
||||
PCF_BIT_ORDER( face->bitmapsFormat ), |
||||
PCF_BYTE_ORDER( face->bitmapsFormat ), |
||||
PCF_GLYPH_PAD( face->bitmapsFormat ) )); |
||||
|
||||
switch ( PCF_GLYPH_PAD( face->bitmapsFormat ) ) |
||||
{ |
||||
case 1:
|
||||
bitmap->pitch = ( bitmap->width + 7 ) >> 3; |
||||
break; |
||||
|
||||
case 2: |
||||
bitmap->pitch = ( ( bitmap->width + 15 ) >> 4 ) << 1; |
||||
break; |
||||
|
||||
case 4:
|
||||
bitmap->pitch = ( ( bitmap->width + 31 ) >> 5 ) << 2; |
||||
break; |
||||
|
||||
case 8:
|
||||
bitmap->pitch = ( ( bitmap->width + 63 ) >> 6 ) << 3;
|
||||
break; |
||||
|
||||
default: |
||||
return FT_Err_Invalid_File_Format; |
||||
} |
||||
|
||||
/* XXX: to do: are there cases that need repadding the bitmap? */ |
||||
bytes = bitmap->pitch * bitmap->rows; |
||||
|
||||
if ( ALLOC( bitmap->buffer, bytes ) ) |
||||
goto Exit; |
||||
|
||||
if ( FILE_Seek( metric->bits ) || |
||||
FILE_Read( bitmap->buffer, bytes ) ) |
||||
goto Exit; |
||||
|
||||
if ( PCF_BIT_ORDER( face->bitmapsFormat ) != MSBFirst ) |
||||
BitOrderInvert( bitmap->buffer,bytes ); |
||||
|
||||
if ( ( PCF_BYTE_ORDER( face->bitmapsFormat ) !=
|
||||
PCF_BIT_ORDER( face->bitmapsFormat ) ) ) |
||||
{ |
||||
switch ( PCF_SCAN_UNIT( face->bitmapsFormat ) ) |
||||
{ |
||||
case 1: |
||||
break; |
||||
|
||||
case 2: |
||||
TwoByteSwap( bitmap->buffer, bytes ); |
||||
break; |
||||
|
||||
case 4: |
||||
FourByteSwap( bitmap->buffer, bytes ); |
||||
break; |
||||
} |
||||
} |
||||
|
||||
slot->bitmap_left = 0; |
||||
slot->bitmap_top = metric->ascent; |
||||
|
||||
slot->metrics.horiAdvance = metric->characterWidth << 6 ; |
||||
slot->metrics.horiBearingX = metric->rightSideBearing << 6 ; |
||||
slot->metrics.horiBearingY = metric->ascent << 6 ; |
||||
slot->metrics.width = metric->characterWidth << 6 ; |
||||
slot->metrics.height = bitmap->rows << 6; |
||||
|
||||
slot->linearHoriAdvance = (FT_Fixed)bitmap->width << 16; |
||||
slot->format = ft_glyph_format_bitmap; |
||||
slot->flags = ft_glyph_own_bitmap; |
||||
|
||||
FT_TRACE4(( " --- ok\n" )); |
||||
|
||||
Exit: |
||||
return error;
|
||||
} |
||||
|
||||
|
||||
static |
||||
FT_UInt PCF_Get_Char_Index( FT_CharMap charmap, |
||||
FT_Long char_code ) |
||||
{
|
||||
PCF_Face face = (PCF_Face)charmap->face; |
||||
PCF_Encoding en_table = face->encodings; |
||||
int low, high, mid; |
||||
|
||||
|
||||
FT_TRACE4(( "get_char_index %ld\n", char_code )); |
||||
|
||||
low = 0; |
||||
high = face->nencodings - 1; |
||||
while ( low <= high ) |
||||
{ |
||||
mid = ( low + high ) / 2; |
||||
if ( char_code < en_table[mid].enc ) |
||||
high = mid - 1; |
||||
else if ( char_code > en_table[mid].enc ) |
||||
low = mid + 1; |
||||
else |
||||
return en_table[mid].glyph; |
||||
} |
||||
|
||||
return face->defaultChar; |
||||
} |
||||
|
||||
|
||||
FT_CALLBACK_TABLE_DEF |
||||
const FT_Driver_Class pcf_driver_class = |
||||
{ |
||||
{ |
||||
ft_module_font_driver, |
||||
sizeof ( FT_DriverRec ), |
||||
|
||||
"pcf", |
||||
0x10000L, |
||||
0x20000L, |
||||
|
||||
0, |
||||
|
||||
(FT_Module_Constructor)0, |
||||
(FT_Module_Destructor) 0, |
||||
(FT_Module_Requester) 0 |
||||
}, |
||||
|
||||
sizeof( PCF_FaceRec ), |
||||
sizeof( FT_SizeRec ), |
||||
sizeof( FT_GlyphSlotRec ), |
||||
|
||||
(FTDriver_initFace) PCF_Init_Face, |
||||
(FTDriver_doneFace) PCF_Done_Face, |
||||
(FTDriver_initSize) 0, |
||||
(FTDriver_doneSize) 0, |
||||
(FTDriver_initGlyphSlot)0, |
||||
(FTDriver_doneGlyphSlot)0, |
||||
|
||||
(FTDriver_setCharSizes) PCF_Set_Pixel_Size, |
||||
(FTDriver_setPixelSizes)PCF_Set_Pixel_Size, |
||||
|
||||
(FTDriver_loadGlyph) PCF_Load_Glyph, |
||||
(FTDriver_getCharIndex) PCF_Get_Char_Index, |
||||
|
||||
(FTDriver_getKerning) 0, |
||||
(FTDriver_attachFile) 0, |
||||
(FTDriver_getAdvances) 0 |
||||
}; |
||||
|
||||
|
||||
#ifdef FT_CONFIG_OPTION_DYNAMIC_DRIVERS |
||||
|
||||
|
||||
/*************************************************************************/ |
||||
/* */ |
||||
/* <Function> */ |
||||
/* getDriverClass */ |
||||
/* */ |
||||
/* <Description> */ |
||||
/* This function is used when compiling the TrueType driver as a */ |
||||
/* shared library (`.DLL' or `.so'). It will be used by the */ |
||||
/* high-level library of FreeType to retrieve the address of the */ |
||||
/* driver's generic interface. */ |
||||
/* */ |
||||
/* It shouldn't be implemented in a static build, as each driver must */ |
||||
/* have the same function as an exported entry point. */ |
||||
/* */ |
||||
/* <Return> */ |
||||
/* The address of the TrueType's driver generic interface. The */ |
||||
/* format-specific interface can then be retrieved through the method */ |
||||
/* interface->get_format_interface. */ |
||||
/* */ |
||||
FT_EXPORT_DEF( const FT_Driver_Class* ) getDriverClass( void ) |
||||
{ |
||||
return &pcf_driver_class; |
||||
} |
||||
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_DYNAMIC_DRIVERS */ |
||||
|
||||
|
||||
/* END */ |
@ -0,0 +1,44 @@ |
||||
/* pcfdriver.h
|
||||
|
||||
FreeType font driver for pcf fonts |
||||
|
||||
Copyright 2000 by
|
||||
Francesco Zappa Nardelli
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
of this software and associated documentation files (the "Software"), to deal |
||||
in the Software without restriction, including without limitation the rights |
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
copies of the Software, and to permit persons to whom the Software is |
||||
furnished to do so, subject to the following conditions: |
||||
|
||||
The above copyright notice and this permission notice shall be included in |
||||
all copies or substantial portions of the Software. |
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
||||
THE SOFTWARE. |
||||
*/ |
||||
|
||||
|
||||
#ifndef __PCFDRIVER_H__ |
||||
#define __PCFDRIVER_H__ |
||||
|
||||
#include <ft2build.h> |
||||
#include FT_INTERNAL_DRIVER_H |
||||
|
||||
FT_BEGIN_HEADER |
||||
|
||||
FT_EXPORT_VAR( const FT_Driver_Class ) pcf_driver_class; |
||||
|
||||
FT_END_HEADER |
||||
|
||||
|
||||
#endif /* __PCFDRIVER_H__ */ |
||||
|
||||
|
||||
/* END */ |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,211 @@ |
||||
/*
|
||||
|
||||
Copyright 1990, 1994, 1998 The Open Group |
||||
|
||||
All Rights Reserved. |
||||
|
||||
The above copyright notice and this permission notice shall be included in |
||||
all copies or substantial portions of the Software. |
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN |
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
||||
|
||||
Except as contained in this notice, the name of The Open Group shall not be |
||||
used in advertising or otherwise to promote the sale, use or other dealings |
||||
in this Software without prior written authorization from The Open Group. |
||||
|
||||
*/ |
||||
/* $XFree86: xc/lib/font/util/utilbitmap.c,v 1.3 1999/08/22 08:58:58 dawes Exp $ */ |
||||
|
||||
/*
|
||||
* Author: Keith Packard, MIT X Consortium |
||||
*/ |
||||
|
||||
|
||||
#include <ft2build.h> |
||||
#include FT_SOURCE_FILE(pcf,pcfutil.h) |
||||
|
||||
|
||||
/* Utility functions for reformatting font bitmaps */ |
||||
|
||||
static unsigned char _reverse_byte[0x100] = |
||||
{ |
||||
0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0, |
||||
0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0, |
||||
0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8, |
||||
0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8, |
||||
0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4, |
||||
0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4, |
||||
0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec, |
||||
0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc, |
||||
0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2, |
||||
0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2, |
||||
0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea, |
||||
0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa, |
||||
0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6, |
||||
0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6, |
||||
0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee, |
||||
0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe, |
||||
0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1, |
||||
0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1, |
||||
0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9, |
||||
0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9, |
||||
0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5, |
||||
0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5, |
||||
0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed, |
||||
0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd, |
||||
0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3, |
||||
0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3, |
||||
0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb, |
||||
0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb, |
||||
0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7, |
||||
0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7, |
||||
0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef, |
||||
0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff |
||||
}; |
||||
|
||||
/*
|
||||
* Invert bit order within each BYTE of an array. |
||||
*/ |
||||
|
||||
void BitOrderInvert( unsigned char* buf, |
||||
int nbytes ) |
||||
{ |
||||
unsigned char* rev = _reverse_byte; |
||||
|
||||
|
||||
for ( ; --nbytes >= 0; buf++ ) |
||||
*buf = rev[*buf]; |
||||
} |
||||
|
||||
|
||||
/*
|
||||
* Invert byte order within each 16-bits of an array. |
||||
*/ |
||||
|
||||
void TwoByteSwap( unsigned char* buf, |
||||
int nbytes ) |
||||
{ |
||||
unsigned char c; |
||||
|
||||
|
||||
for ( ; nbytes > 0; nbytes -= 2, buf += 2 ) |
||||
{ |
||||
c = buf[0]; |
||||
buf[0] = buf[1]; |
||||
buf[1] = c; |
||||
} |
||||
} |
||||
|
||||
/*
|
||||
* Invert byte order within each 32-bits of an array. |
||||
*/ |
||||
|
||||
void FourByteSwap( unsigned char* buf, |
||||
int nbytes ) |
||||
{ |
||||
unsigned char c; |
||||
|
||||
|
||||
for ( ; nbytes > 0; nbytes -= 4, buf += 4 ) |
||||
{ |
||||
c = buf[0]; |
||||
buf[0] = buf[3]; |
||||
buf[3] = c; |
||||
|
||||
c = buf[1]; |
||||
buf[1] = buf[2]; |
||||
buf[2] = c; |
||||
} |
||||
} |
||||
|
||||
|
||||
/*
|
||||
* Repad a bitmap. |
||||
*/ |
||||
|
||||
int RepadBitmap( char* pSrc, |
||||
char* pDst,
|
||||
unsigned int srcPad, |
||||
unsigned int dstPad,
|
||||
int width, |
||||
int height ) |
||||
{ |
||||
int srcWidthBytes, dstWidthBytes; |
||||
int row, col; |
||||
char *pTmpSrc, *pTmpDst; |
||||
|
||||
|
||||
switch ( srcPad ) |
||||
{ |
||||
case 1:
|
||||
srcWidthBytes = ( width + 7 ) >> 3; |
||||
break; |
||||
|
||||
case 2: |
||||
srcWidthBytes = ( ( width + 15 ) >> 4 ) << 1; |
||||
break; |
||||
|
||||
case 4:
|
||||
srcWidthBytes = ( ( width + 31 ) >> 5 ) << 2; |
||||
break; |
||||
|
||||
case 8:
|
||||
srcWidthBytes = ( ( width + 63 ) >> 6 ) << 3;
|
||||
break; |
||||
|
||||
default: |
||||
return 0; |
||||
} |
||||
|
||||
switch ( dstPad ) |
||||
{ |
||||
case 1:
|
||||
dstWidthBytes = ( width + 7 ) >> 3; |
||||
break; |
||||
|
||||
case 2: |
||||
dstWidthBytes = ( ( width + 15 ) >> 4 ) << 1; |
||||
break; |
||||
|
||||
case 4:
|
||||
dstWidthBytes = ( ( width + 31 ) >> 5 ) << 2; |
||||
break; |
||||
|
||||
case 8:
|
||||
dstWidthBytes = ( ( width + 63 ) >> 6 ) << 3;
|
||||
break; |
||||
|
||||
default: |
||||
return 0; |
||||
} |
||||
|
||||
width = srcWidthBytes; |
||||
if ( width > dstWidthBytes ) |
||||
width = dstWidthBytes; |
||||
|
||||
pTmpSrc= pSrc; |
||||
pTmpDst= pDst; |
||||
|
||||
for ( row = 0; row < height; row++ ) |
||||
{ |
||||
for ( col = 0; col < width; col++ ) |
||||
*pTmpDst++ = *pTmpSrc++; |
||||
|
||||
while ( col < dstWidthBytes ) |
||||
{ |
||||
*pTmpDst++ = '\0'; |
||||
col++; |
||||
} |
||||
pTmpSrc += srcWidthBytes - width; |
||||
} |
||||
|
||||
return dstWidthBytes * height; |
||||
} |
||||
|
||||
|
||||
/* END */ |
@ -0,0 +1,54 @@ |
||||
/* pcfutil.h
|
||||
|
||||
FreeType font driver for pcf fonts |
||||
|
||||
Copyright 2000 by
|
||||
Francesco Zappa Nardelli
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
of this software and associated documentation files (the "Software"), to deal |
||||
in the Software without restriction, including without limitation the rights |
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
copies of the Software, and to permit persons to whom the Software is |
||||
furnished to do so, subject to the following conditions: |
||||
|
||||
The above copyright notice and this permission notice shall be included in |
||||
all copies or substantial portions of the Software. |
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
||||
THE SOFTWARE. |
||||
*/ |
||||
|
||||
|
||||
#ifndef __PCFUTIL_H__ |
||||
#define __PCFUTIL_H__ |
||||
|
||||
|
||||
#include <ft2build.h> |
||||
|
||||
|
||||
void BitOrderInvert( unsigned char* buf, |
||||
int nbytes); |
||||
|
||||
void TwoByteSwap ( unsigned char* buf, |
||||
int nbytes); |
||||
|
||||
void FourByteSwap ( unsigned char* buf, |
||||
int nbytes); |
||||
|
||||
int RepadBitmap ( char* pSrc, |
||||
char* pDst,
|
||||
unsigned int srcPad, |
||||
unsigned int dstPad,
|
||||
int width, |
||||
int height); |
||||
|
||||
#endif /* __PCFUTIL_H__ */ |
||||
|
||||
|
||||
/* END */ |
@ -0,0 +1,114 @@ |
||||
FreeType font driver for PCF fonts |
||||
|
||||
Francesco Zappa Nardelli |
||||
<francesco.zappa.nardelli@ens.fr> |
||||
|
||||
|
||||
Introduction |
||||
************ |
||||
|
||||
PCF (Portable Compiled Format) is a binary bitmap font format, largely used |
||||
in X world. This code implements a PCF driver for the FreeType library. |
||||
Glyph images are loaded into memory only on demand, thus leading to a small |
||||
memory footprint. |
||||
|
||||
Informations on the PCF font format can only be worked out from |
||||
``pcfread.c'', and ``pcfwrite.c'', to be found, for instance, in the XFree86 |
||||
(www.xfree86.org) source tree (xc/lib/font/bitmap/). |
||||
|
||||
Many good bitmap fonts in bdf format come with XFree86: they can be |
||||
compiled into the pcf format using the ``bdftopcf'' utility. |
||||
|
||||
|
||||
Supported hardware |
||||
****************** |
||||
|
||||
The driver has been tested on linux/x86 and sunos5.5/sparc. In both |
||||
cases the compiler was gcc. When back in Paris, I will test it also |
||||
on linux/alpha. |
||||
|
||||
|
||||
Encodings |
||||
********* |
||||
|
||||
The variety of encodings that accompanies pcf fonts appears to encompass the |
||||
small set defined in freetype.h. On the other hand, each pcf font defines |
||||
two properties that specify encoding and registry. |
||||
|
||||
I decided to make these two properties directly accessible, leaving to the |
||||
client application the work of interpreting them. For instance: |
||||
|
||||
#include "pcftypes.h" /* include/freetype/internal/pcftypes.h */ |
||||
|
||||
FT_Face face; |
||||
PCF_Public_Face pcfface; |
||||
|
||||
FT_New_Face( library,..., &face ); |
||||
|
||||
pcfface = (PCF_Public_Face)face; |
||||
|
||||
if ((pcfface->charset_registry == "ISO10646") && |
||||
(pcfface->charset_encoding) == "1")) [..] |
||||
|
||||
Thus the driver always export ``ft_encoding_none'' as |
||||
face->charmap.encoding. FT_Get_Char_Index() behavior is unmodified, that |
||||
is, it converts the ULong value given as argument into the corresponding |
||||
glyph number. |
||||
|
||||
|
||||
Known problems |
||||
************** |
||||
|
||||
- dealing explicitly with encodings breaks the uniformity of freetype2 |
||||
api. |
||||
|
||||
- except for encodings properties, client applications have no |
||||
visibility of the PCF_Face object. This means that applications |
||||
cannot directly access font tables and are obliged to trust |
||||
FreeType. |
||||
|
||||
- currently, glyph names and ink_metrics are ignored. |
||||
|
||||
I plan to give full visibility of the PCF_Face object in the next |
||||
release of the driver, thus implementing also glyph names and |
||||
ink_metrics. |
||||
|
||||
- height is defined as (ascent - descent). Is this correct? |
||||
|
||||
- if unable to read size informations from the font, PCF_Init_Face |
||||
sets available_size->width and available_size->height to 12. |
||||
|
||||
- too many english grammar errors in the readme file :-( |
||||
|
||||
|
||||
License |
||||
******* |
||||
|
||||
Copyright (C) 2000 by Francesco Zappa Nardelli |
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining |
||||
a copy of this software and associated documentation files (the |
||||
"Software"), to deal in the Software without restriction, including |
||||
without limitation the rights to use, copy, modify, merge, publish, |
||||
distribute, sublicense, and/or sell copies of the Software, and to |
||||
permit persons to whom the Software is furnished to do so, subject to |
||||
the following conditions: |
||||
|
||||
The above copyright notice and this permission notice shall be |
||||
included in all copies or substantial portions of the Software. |
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY |
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
||||
|
||||
|
||||
Credits |
||||
******* |
||||
|
||||
Keith Packard wrote the pcf driver found in XFree86. His work is at |
||||
the same time the specification and the sample implementation of the |
||||
PCF format. Undoubtedly, this driver is inspired from his work. |
@ -0,0 +1,79 @@ |
||||
#
|
||||
# FreeType 2 pcf driver configuration rules
|
||||
#
|
||||
|
||||
|
||||
# Copyright (C) 2000 by
|
||||
# Francesco Zappa Nardelli
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
|
||||
|
||||
# pcf driver directory
|
||||
#
|
||||
PCF_DIR := $(SRC_)pcf
|
||||
PCF_DIR_ := $(PCF_DIR)$(SEP)
|
||||
|
||||
|
||||
PCF_COMPILE := $(FT_COMPILE)
|
||||
|
||||
|
||||
# pcf driver sources (i.e., C files)
|
||||
#
|
||||
PCF_DRV_SRC := $(PCF_DIR_)pcfread.c \
|
||||
$(PCF_DIR_)pcfdriver.c \
|
||||
$(PCF_DIR_)pcfutil.c
|
||||
|
||||
# pcf driver headers
|
||||
#
|
||||
PCF_DRV_H := $(PCF_DIR_)pcf.h \
|
||||
$(PCF_DIR_)pcfdriver.h \
|
||||
$(PCF_DIR_)pcfutil.h
|
||||
|
||||
# pcf driver object(s)
|
||||
#
|
||||
# PCF_DRV_OBJ_M is used during `multi' builds
|
||||
# PCF_DRV_OBJ_S is used during `single' builds
|
||||
#
|
||||
PCF_DRV_OBJ_M := $(PCF_DRV_SRC:$(PCF_DIR_)%.c=$(OBJ_)%.$O)
|
||||
PCF_DRV_OBJ_S := $(OBJ_)pcf.$O
|
||||
|
||||
# Windows driver source file for single build
|
||||
#
|
||||
PCF_DRV_SRC_S := $(PCF_DIR_)pcf.c
|
||||
|
||||
|
||||
# pcf driver - single object
|
||||
#
|
||||
$(PCF_DRV_OBJ_S): $(PCF_DRV_SRC_S) $(PCF_DRV_SRC) $(FREETYPE_H) $(PCF_DRV_H) |
||||
$(PCF_COMPILE) $T$@ $(PCF_DRV_SRC_S)
|
||||
|
||||
|
||||
# pcf driver - multiple objects
|
||||
#
|
||||
$(OBJ_)%.$O: $(PCF_DIR_)%.c $(FREETYPE_H) $(PCF_DRV_H) |
||||
$(PCF_COMPILE) $T$@ $<
|
||||
|
||||
|
||||
# update main driver object lists
|
||||
#
|
||||
DRV_OBJS_S += $(PCF_DRV_OBJ_S)
|
||||
DRV_OBJS_M += $(PCF_DRV_OBJ_M)
|
||||
|
||||
# EOF
|
Loading…
Reference in new issue