亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? pcfread.c

?? a very goog book
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*  pcfread.c    FreeType font driver for pcf fonts  Copyright 2000-2001, 2002 by  Francesco Zappa NardelliPermission is hereby granted, free of charge, to any person obtaining a copyof this software and associated documentation files (the "Software"), to dealin the Software without restriction, including without limitation the rightsto use, copy, modify, merge, publish, distribute, sublicense, and/or sellcopies of the Software, and to permit persons to whom the Software isfurnished to do so, subject to the following conditions:The above copyright notice and this permission notice shall be included inall copies or substantial portions of the Software.THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ORIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THEAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHERLIABILITY, 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 INTHE SOFTWARE.*/#include <ft2build.h>#include FT_INTERNAL_DEBUG_H#include FT_INTERNAL_STREAM_H#include FT_INTERNAL_OBJECTS_H#include "pcf.h"#include "pcfdriver.h"#include "pcferror.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_pcfread#if defined( FT_DEBUG_LEVEL_TRACE )  static const char*  tableNames[] =  {    "prop", "accl", "mtrcs", "bmps", "imtrcs",    "enc", "swidth", "names", "accel"  };#endif  static  const FT_Frame_Field  pcf_toc_header[] =  {#undef  FT_STRUCTURE#define FT_STRUCTURE  PCF_TocRec    FT_FRAME_START( 8 ),      FT_FRAME_ULONG_LE( version ),      FT_FRAME_ULONG_LE( count ),    FT_FRAME_END  };  static  const FT_Frame_Field  pcf_table_header[] =  {#undef  FT_STRUCTURE#define FT_STRUCTURE  PCF_TableRec    FT_FRAME_START( 16  ),      FT_FRAME_ULONG_LE( type ),      FT_FRAME_ULONG_LE( format ),      FT_FRAME_ULONG_LE( size ),      FT_FRAME_ULONG_LE( offset ),    FT_FRAME_END  };  static FT_Error  pcf_read_TOC( FT_Stream  stream,                PCF_Face   face )  {    FT_Error   error;    PCF_Toc    toc = &face->toc;    PCF_Table  tables;    FT_Memory  memory = FT_FACE(face)->memory;    FT_UInt    n;    if ( FT_STREAM_SEEK ( 0 )                          ||         FT_STREAM_READ_FIELDS ( pcf_toc_header, toc ) )      return PCF_Err_Cannot_Open_Resource;    if ( toc->version != PCF_FILE_VERSION )      return PCF_Err_Invalid_File_Format;    if ( FT_NEW_ARRAY( face->toc.tables, toc->count ) )      return PCF_Err_Out_Of_Memory;    tables = face->toc.tables;    for ( n = 0; n < toc->count; n++ )    {      if ( FT_STREAM_READ_FIELDS( pcf_table_header, tables ) )        goto Exit;      tables++;    }#if defined( FT_DEBUG_LEVEL_TRACE )    {      FT_UInt      i, j;      const char*  name = "?";      FT_TRACE4(( "Tables count: %ld\n", face->toc.count ));      tables = face->toc.tables;      for ( i = 0; i < toc->count; i++ )      {        for( j = 0; j < sizeof ( tableNames ) / sizeof ( tableNames[0] ); j++ )          if ( tables[i].type == (FT_UInt)( 1 << j ) )            name = tableNames[j];        FT_TRACE4(( "Table %d: type=%-6s format=0x%04lX "                    "size=0x%06lX (%8ld) offset=0x%04lX\n",                    i, name,                    tables[i].format,                    tables[i].size, tables[i].size,                    tables[i].offset ));      }    }#endif    return PCF_Err_Ok;  Exit:    FT_FREE( face->toc.tables );    return error;  }  static  const FT_Frame_Field  pcf_metric_header[] =  {#undef  FT_STRUCTURE#define FT_STRUCTURE  PCF_MetricRec    FT_FRAME_START( 12 ),      FT_FRAME_SHORT_LE( leftSideBearing ),      FT_FRAME_SHORT_LE( rightSideBearing ),      FT_FRAME_SHORT_LE( characterWidth ),      FT_FRAME_SHORT_LE( ascent ),      FT_FRAME_SHORT_LE( descent ),      FT_FRAME_SHORT_LE( attributes ),    FT_FRAME_END  };  static  const FT_Frame_Field  pcf_metric_msb_header[] =  {#undef  FT_STRUCTURE#define FT_STRUCTURE  PCF_MetricRec    FT_FRAME_START( 12 ),      FT_FRAME_SHORT( leftSideBearing ),      FT_FRAME_SHORT( rightSideBearing ),      FT_FRAME_SHORT( characterWidth ),      FT_FRAME_SHORT( ascent ),      FT_FRAME_SHORT( descent ),      FT_FRAME_SHORT( attributes ),    FT_FRAME_END  };  static  const FT_Frame_Field  pcf_compressed_metric_header[] =  {#undef  FT_STRUCTURE#define FT_STRUCTURE  PCF_Compressed_MetricRec    FT_FRAME_START( 5 ),      FT_FRAME_BYTE( leftSideBearing ),      FT_FRAME_BYTE( rightSideBearing ),      FT_FRAME_BYTE( characterWidth ),      FT_FRAME_BYTE( ascent ),      FT_FRAME_BYTE( descent ),    FT_FRAME_END  };  static FT_Error  pcf_get_metric( FT_Stream   stream,                  FT_ULong    format,                  PCF_Metric  metric )  {    FT_Error  error = PCF_Err_Ok;    if ( PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) )    {      const FT_Frame_Field*  fields;      /* parsing normal metrics */      fields = PCF_BYTE_ORDER( format ) == MSBFirst               ? pcf_metric_msb_header               : pcf_metric_header;      /* the following sets 'error' but doesn't return in case of failure */      (void)FT_STREAM_READ_FIELDS( fields, metric );    }    else    {      PCF_Compressed_MetricRec  compr;      /* parsing compressed metrics */      if ( FT_STREAM_READ_FIELDS( pcf_compressed_metric_header, &compr ) )        goto Exit;      metric->leftSideBearing  = (FT_Short)( compr.leftSideBearing  - 0x80 );      metric->rightSideBearing = (FT_Short)( compr.rightSideBearing - 0x80 );      metric->characterWidth   = (FT_Short)( compr.characterWidth   - 0x80 );      metric->ascent           = (FT_Short)( compr.ascent           - 0x80 );      metric->descent          = (FT_Short)( compr.descent          - 0x80 );      metric->attributes       = 0;    }  Exit:    return error;  }  static FT_Error  pcf_seek_to_table_type( FT_Stream  stream,                          PCF_Table  tables,                          FT_Int     ntables,                          FT_ULong   type,                          FT_ULong  *aformat,                          FT_ULong  *asize )  {    FT_Error  error = 0;    FT_Int    i;    for ( i = 0; i < ntables; i++ )      if ( tables[i].type == type )      {        if ( stream->pos > tables[i].offset )          return PCF_Err_Invalid_Stream_Skip;        if ( FT_STREAM_SKIP( tables[i].offset - stream->pos ) )          return PCF_Err_Invalid_Stream_Skip;        *asize   = tables[i].size;  /* unused - to be removed */        *aformat = tables[i].format;        return PCF_Err_Ok;      }    return PCF_Err_Invalid_File_Format;  }  static FT_Bool  pcf_has_table_type( PCF_Table  tables,                      FT_Int     ntables,                      FT_ULong   type )  {    FT_Int  i;    for ( i = 0; i < ntables; i++ )      if ( tables[i].type == type )        return TRUE;    return FALSE;  }  static  const FT_Frame_Field  pcf_property_header[] =  {#undef  FT_STRUCTURE#define FT_STRUCTURE  PCF_ParsePropertyRec    FT_FRAME_START( 9 ),      FT_FRAME_LONG_LE( name ),      FT_FRAME_BYTE   ( isString ),      FT_FRAME_LONG_LE( value ),    FT_FRAME_END  };  static  const FT_Frame_Field  pcf_property_msb_header[] =  {#undef  FT_STRUCTURE#define FT_STRUCTURE  PCF_ParsePropertyRec    FT_FRAME_START( 9 ),      FT_FRAME_LONG( name ),      FT_FRAME_BYTE( isString ),      FT_FRAME_LONG( value ),    FT_FRAME_END  };  static PCF_Property  pcf_find_property( PCF_Face          face,                     const FT_String*  prop )  {    PCF_Property  properties = face->properties;    FT_Bool       found      = 0;    int           i;    for ( i = 0 ; i < face->nprops && !found; i++ )    {      if ( !ft_strcmp( properties[i].name, prop ) )        found = 1;    }    if ( found )      return properties + i - 1;    else      return NULL;  }  static FT_Error  pcf_get_properties( FT_Stream  stream,                      PCF_Face   face )  {    PCF_ParseProperty  props      = 0;    PCF_Property       properties = 0;    FT_Int             nprops, i;    FT_ULong           format, size;    FT_Error           error;    FT_Memory          memory     = FT_FACE(face)->memory;    FT_ULong           string_size;    FT_String*         strings    = 0;    error = pcf_seek_to_table_type( stream,                                    face->toc.tables,                                    face->toc.count,                                    PCF_PROPERTIES,                                    &format,                                    &size );    if ( error )      goto Bail;    if ( FT_READ_ULONG_LE( format ) )      goto Bail;    FT_TRACE4(( "get_prop: format = %ld\n", format ));    if ( !PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) )      goto Bail;    if ( PCF_BYTE_ORDER( format ) == MSBFirst )      (void)FT_READ_ULONG( nprops );    else      (void)FT_READ_ULONG_LE( nprops );    if ( error )      goto Bail;    FT_TRACE4(( "get_prop: nprop = %d\n", nprops ));    if ( FT_NEW_ARRAY( props, nprops ) )      goto Bail;    for ( i = 0; i < nprops; i++ )    {      if ( PCF_BYTE_ORDER( format ) == MSBFirst )      {        if ( FT_STREAM_READ_FIELDS( pcf_property_msb_header, props + i ) )          goto Bail;      }      else      {        if ( FT_STREAM_READ_FIELDS( pcf_property_header, props + i ) )          goto Bail;      }    }    /* pad the property array                                            */    /*                                                                   */    /* clever here - nprops is the same as the number of odd-units read, */    /* as only isStringProp are odd length   (Keith Packard)             */    /*                                                                   */    if ( nprops & 3 )    {      i = 4 - ( nprops & 3 );      FT_Stream_Skip( stream, i );    }    if ( PCF_BYTE_ORDER( format ) == MSBFirst )      (void)FT_READ_ULONG( string_size );    else      (void)FT_READ_ULONG_LE( string_size );    if ( error )      goto Bail;    FT_TRACE4(( "get_prop: string_size = %ld\n", string_size ));    if ( FT_NEW_ARRAY( strings, string_size ) )      goto Bail;    error = FT_Stream_Read( stream, (FT_Byte*)strings, string_size );    if ( error )      goto Bail;    if ( FT_NEW_ARRAY( properties, nprops ) )      goto Bail;    for ( i = 0; i < nprops; i++ )    {      /* XXX: make atom */      if ( FT_NEW_ARRAY( properties[i].name,                         ft_strlen( strings + props[i].name ) + 1 ) )        goto Bail;      ft_strcpy( properties[i].name,strings + props[i].name );      properties[i].isString = props[i].isString;      if ( props[i].isString )      {        if ( FT_NEW_ARRAY( properties[i].value.atom,                           ft_strlen( strings + props[i].value ) + 1 ) )          goto Bail;        ft_strcpy( properties[i].value.atom, strings + props[i].value );      }      else        properties[i].value.integer = props[i].value;    }    face->properties = properties;    face->nprops = nprops;    FT_FREE( props );    FT_FREE( strings );    return PCF_Err_Ok;  Bail:    FT_FREE( props );    FT_FREE( strings );    return error;  }  static FT_Error  pcf_get_metrics( FT_Stream  stream,                   PCF_Face   face )  {    FT_Error    error    = PCF_Err_Ok;    FT_Memory   memory   = FT_FACE(face)->memory;    FT_ULong    format   = 0;    FT_ULong    size     = 0;    PCF_Metric  metrics  = 0;    int         i;    int         nmetrics = -1;    error = pcf_seek_to_table_type( stream,                                    face->toc.tables,                                    face->toc.count,                                    PCF_METRICS,                                    &format,                                    &size );    if ( error )      return error;    error = FT_READ_ULONG_LE( format );    if ( !PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT )     &&         !PCF_FORMAT_MATCH( format, PCF_COMPRESSED_METRICS ) )      return PCF_Err_Invalid_File_Format;    if ( PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) )    {      if ( PCF_BYTE_ORDER( format ) == MSBFirst )        (void)FT_READ_ULONG( nmetrics );      else        (void)FT_READ_ULONG_LE( nmetrics );    }    else    {      if ( PCF_BYTE_ORDER( format ) == MSBFirst )        (void)FT_READ_USHORT( nmetrics );      else        (void)FT_READ_USHORT_LE( nmetrics );    }    if ( error || nmetrics == -1 )      return PCF_Err_Invalid_File_Format;    face->nmetrics = nmetrics;    if ( FT_NEW_ARRAY( face->metrics, nmetrics ) )      return PCF_Err_Out_Of_Memory;    metrics = face->metrics;    for ( i = 0; i < nmetrics; i++ )    {      pcf_get_metric( stream, format, metrics + i );      metrics[i].bits = 0;      FT_TRACE4(( "%d : width=%d, "                  "lsb=%d, rsb=%d, ascent=%d, descent=%d, swidth=%d\n",                  i,                  ( metrics + i )->characterWidth,                  ( metrics + i )->leftSideBearing,                  ( metrics + i )->rightSideBearing,                  ( metrics + i )->ascent,                  ( metrics + i )->descent,

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲美女免费视频| 色天天综合久久久久综合片| 日韩一二三区不卡| 国产麻豆一精品一av一免费| 久久蜜桃av一区二区天堂| 丁香婷婷综合色啪| 午夜精品久久久久久久99水蜜桃| 日韩一区和二区| 91麻豆国产精品久久| 美国欧美日韩国产在线播放| 国产精品乱人伦| 亚洲精品一区二区三区影院| aaa亚洲精品一二三区| 日本中文字幕不卡| 亚洲国产成人av网| 亚洲精品精品亚洲| 自拍偷拍亚洲综合| 成人欧美一区二区三区| 国产三区在线成人av| 久久亚洲捆绑美女| 精品国产91乱码一区二区三区 | 91一区二区三区在线观看| 国产精品66部| 国产成a人无v码亚洲福利| 老司机免费视频一区二区三区| 日本女人一区二区三区| 蜜桃久久久久久久| 麻豆精品国产91久久久久久| 亚洲一二三四区不卡| 亚洲第一福利一区| 青青草97国产精品免费观看无弹窗版 | 日韩欧美在线123| 久久青草欧美一区二区三区| 亚洲精选视频免费看| 亚洲18影院在线观看| 日韩高清一区二区| 国产一区二区三区免费观看| 成人天堂资源www在线| 91豆麻精品91久久久久久| 欧美三级中文字幕在线观看| 日韩欧美在线123| 中文字幕在线一区二区三区| 亚洲国产精品一区二区尤物区| 日本中文在线一区| 色婷婷综合久久久中文一区二区| 91精品午夜视频| 最近日韩中文字幕| 精品一区二区三区欧美| 欧美综合在线视频| 亚洲一区二区欧美日韩| av电影天堂一区二区在线 | 91麻豆精品国产自产在线| 国产清纯美女被跳蛋高潮一区二区久久w | 久久精品视频网| 久久99精品久久久久久国产越南| 91国产丝袜在线播放| 国产视频一区二区三区在线观看| 天天综合网天天综合色| 91九色最新地址| 亚洲码国产岛国毛片在线| 国产99久久久国产精品免费看| 欧美精品第一页| 亚洲aⅴ怡春院| 91精品办公室少妇高潮对白| 自拍av一区二区三区| 国产成人精品一区二| 欧美韩国日本一区| 国产精品一二二区| 18成人在线观看| 日本乱人伦aⅴ精品| 一区二区成人在线观看| 色综合色综合色综合| 亚洲午夜激情网页| 日韩视频一区二区三区| 精品制服美女丁香| 亚洲国产精品黑人久久久| 国产精品538一区二区在线| 欧美高清在线精品一区| 色琪琪一区二区三区亚洲区| 亚洲电影激情视频网站| 久久久久久久久久久久久久久99| 国产精品888| 亚洲欧洲国产日韩| 欧美日韩免费在线视频| 国内精品视频666| 日韩毛片在线免费观看| 欧美日韩国产另类一区| 成人黄色一级视频| 日韩福利电影在线| 国产精品福利一区| 久久综合九色综合97婷婷女人| 色女孩综合影院| 成人网男人的天堂| 日本成人在线网站| 亚洲精品午夜久久久| 国产欧美一区二区精品忘忧草 | 国产成人精品1024| 首页国产欧美久久| 亚洲一区二区三区四区的| 国产精品久久久久久久久动漫| 91精品国产手机| 91.com在线观看| 欧美日韩国产一区| 日本韩国欧美在线| 91丨porny丨在线| 不卡的电视剧免费网站有什么| 久久99久久精品| 久久av资源网| 久久99久久久久久久久久久| 日日夜夜免费精品| 午夜视频在线观看一区二区| 亚洲一区二区三区在线看| 亚洲黄网站在线观看| 伊人性伊人情综合网| 午夜一区二区三区视频| 亚洲一区在线视频观看| 日韩电影在线一区二区| 国产综合色产在线精品| 国产精品一二三区在线| 色悠悠久久综合| 91精品久久久久久久久99蜜臂| 5858s免费视频成人| 久久女同精品一区二区| 一区在线中文字幕| 日韩专区中文字幕一区二区| 久久er精品视频| 欧美在线一区二区三区| 精品日韩一区二区三区免费视频| 国产欧美一区二区三区沐欲| 一区二区激情视频| 国产夫妻精品视频| 久久久99免费| 日日欢夜夜爽一区| 成人精品国产一区二区4080| 欧美精品aⅴ在线视频| 欧美国产一区在线| 紧缚奴在线一区二区三区| 在线观看欧美精品| 最新热久久免费视频| 激情综合一区二区三区| 欧美日韩激情一区| 亚洲一区二区在线观看视频 | 国产精品成人免费| 国产成人综合自拍| www国产成人免费观看视频 深夜成人网| 亚洲精品日日夜夜| 91蜜桃视频在线| 亚洲日本在线a| 色综合天天综合网天天狠天天| 久久免费国产精品| 国产黑丝在线一区二区三区| 国产日韩欧美综合一区| 精品亚洲国内自在自线福利| 日韩一区二区视频| 捆绑调教美女网站视频一区| 精品不卡在线视频| 国产成人丝袜美腿| 亚洲欧洲三级电影| 欧美性猛交xxxx黑人交| 图片区小说区国产精品视频| 欧美日韩一卡二卡| 国产一区二区剧情av在线| 久久久久久一二三区| 99久久国产综合精品色伊| 亚洲激情av在线| 精品国产伦一区二区三区观看方式| 久久精品国产一区二区三区免费看| 中文字幕精品在线不卡| 欧美性大战久久久久久久蜜臀| 日本一不卡视频| 亚洲欧美日本在线| 日韩一区二区在线观看视频播放| 丁香网亚洲国际| 日韩av电影天堂| 亚洲免费观看高清完整版在线观看熊| 在线综合亚洲欧美在线视频| 成人激情午夜影院| 精久久久久久久久久久| 亚洲福利一区二区| 日韩一区日韩二区| 久久一二三国产| 欧美日韩五月天| 欧美日本一区二区| 色婷婷久久久久swag精品| 精品中文字幕一区二区| 日本欧美在线观看| 天天综合天天综合色| 亚洲成av人片一区二区梦乃| 亚洲日本青草视频在线怡红院 | 欧美日韩另类一区| 在线精品视频免费观看| www.久久精品| 99精品视频一区| 91成人在线精品| 91麻豆精品国产91久久久资源速度| 色综合色狠狠天天综合色| 色国产综合视频| 欧美三级日韩三级国产三级| 欧美又粗又大又爽| 欧美视频中文一区二区三区在线观看|