?? ftsystem.c
字號:
// 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 + -