⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ftsystem.c

📁 microwindows中文字体freetype-2.1.4.tar.gz
💻 C
📖 第 1 页 / 共 2 页
字号:
//  free( block );    FreeVecPooled( memory->user, block );  }  /*************************************************************************/  /*                                                                       */  /*                     RESOURCE MANAGEMENT INTERFACE                     */  /*                                                                       */  /*************************************************************************/  /*************************************************************************/  /*                                                                       */  /* 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_io  /* We use the macro STREAM_FILE for convenience to extract the       */  /* system-specific stream handle from a given FreeType stream object */// #define STREAM_FILE( stream )  ( (FILE*)stream->descriptor.pointer )#define STREAM_FILE( stream )  ( (BPTR)stream->descriptor.pointer )     // TetiSoft  /*************************************************************************/  /*                                                                       */  /* <Function>                                                            */  /*    ft_close_stream                                                    */  /*                                                                       */  /* <Description>                                                         */  /*    The function to close a stream.                                    */  /*                                                                       */  /* <Input>                                                               */  /*    stream :: A pointer to the stream object.                          */  /*                                                                       */  FT_CALLBACK_DEF( void )  ft_close_stream( FT_Stream  stream )  {//  fclose( STREAM_FILE( stream ) );    Close( STREAM_FILE( stream ) );     // TetiSoft    stream->descriptor.pointer = NULL;    stream->size               = 0;    stream->base               = 0;  }  /*************************************************************************/  /*                                                                       */  /* <Function>                                                            */  /*    ft_io_stream                                                       */  /*                                                                       */  /* <Description>                                                         */  /*    The function to open a stream.                                     */  /*                                                                       */  /* <Input>                                                               */  /*    stream :: A pointer to the stream object.                          */  /*                                                                       */  /*    offset :: The position in the data stream to start reading.        */  /*                                                                       */  /*    buffer :: The address of buffer to store the read data.            */  /*                                                                       */  /*    count  :: The number of bytes to read from the stream.             */  /*                                                                       */  /* <Return>                                                              */  /*    The number of bytes actually read.                                 */  /*                                                                       */  FT_CALLBACK_DEF( unsigned long )  ft_io_stream( FT_Stream       stream,                unsigned long   offset,                unsigned char*  buffer,                unsigned long   count )  {//  FILE*  file;    BPTR   file;        // TetiSoft    file = STREAM_FILE( stream );//  fseek( file, offset, SEEK_SET );    Seek( file, offset, OFFSET_BEGINNING );     // TetiSoft//  return (unsigned long)fread( buffer, 1, count, file );    return (unsigned long)FRead( file, buffer, 1, count);  }  /* documentation is in ftobjs.h */  FT_EXPORT_DEF( FT_Error )  FT_Stream_Open( FT_Stream    stream,                  const char*  filepathname )  {//  FILE*                  file;    BPTR                   file; // TetiSoft    struct FileInfoBlock*  fib;  // TetiSoft    if ( !stream )      return FT_Err_Invalid_Stream_Handle;//  file = fopen( filepathname, "rb" );    file = Open( filepathname, MODE_OLDFILE );  // TetiSoft    if ( !file )    {      FT_ERROR(( "FT_Stream_Open:" ));      FT_ERROR(( " could not open `%s'\n", filepathname ));      return FT_Err_Cannot_Open_Resource;    }//  fseek( file, 0, SEEK_END );//  astream->size = ftell( file );//  fseek( file, 0, SEEK_SET );    fib = AllocDosObject( DOS_FIB, NULL );    if ( !fib )    {      Close ( file );      FT_ERROR(( "FT_Stream_Open:" ));      FT_ERROR(( " could not open `%s'\n", filepathname ));      return FT_Err_Cannot_Open_Resource;    }    if ( !( ExamineFH( file, fib ) ) )    {      FreeDosObject( DOS_FIB, fib );      Close ( file );      FT_ERROR(( "FT_Stream_Open:" ));      FT_ERROR(( " could not open `%s'\n", filepathname ));      return FT_Err_Cannot_Open_Resource;    }    stream->size = fib->fib_Size;    FreeDosObject( DOS_FIB, fib );//  stream->descriptor.pointer = file;    stream->descriptor.pointer = (void *)file;    stream->pathname.pointer   = (char*)filepathname;    stream->pos                = 0;    stream->read  = ft_io_stream;    stream->close = ft_close_stream;    FT_TRACE1(( "FT_Stream_Open:" ));    FT_TRACE1(( " opened `%s' (%d bytes) successfully\n",                filepathname, stream->size ));    return FT_Err_Ok;  }#ifdef FT_DEBUG_MEMORY  extern FT_Int  ft_mem_debug_init( FT_Memory  memory );  extern void  ft_mem_debug_done( FT_Memory  memory );#endif  /* documentation is in ftobjs.h */  FT_EXPORT_DEF( FT_Memory )  FT_New_Memory( void )  {    FT_Memory  memory;//  memory = (FT_Memory)malloc( sizeof ( *memory ) );    memory = (FT_Memory)AllocVec( sizeof ( *memory ), MEMF_PUBLIC );    if ( memory )    {//    memory->user = 0;#ifdef __GNUC__      memory->user = CreatePool( MEMF_PUBLIC, 2048, 2048 );#else      memory->user = AsmCreatePool( MEMF_PUBLIC, 2048, 2048, SysBase );#endif      if ( memory->user == NULL )      {        FreeVec( memory );        memory = NULL;      }      else      {        memory->alloc   = ft_alloc;        memory->realloc = ft_realloc;        memory->free    = ft_free;#ifdef FT_DEBUG_MEMORY        ft_mem_debug_init( memory );#endif      }    }    return memory;  }  /* documentation is in ftobjs.h */  FT_EXPORT_DEF( void )  FT_Done_Memory( FT_Memory  memory )  {#ifdef FT_DEBUG_MEMORY    ft_mem_debug_done( memory );#endif#ifdef __GNUC__    DeletePool( memory->user );#else    AsmDeletePool( memory->user, SysBase );#endif    FreeVec( memory );  }/* END */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -