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

📄 ttfile.c

📁 神龙卡开发原代码
💻 C
📖 第 1 页 / 共 3 页
字号:
 *            filepathname   pathname of the file to open *            stream         address of target TT_Stream structure * *  Output :  SUCCESS on sucess, FAILURE on error. *            The target stream is set to -1 in case of failure. * ******************************************************************/  LOCAL_FUNC  TT_Error  TT_Open_Stream( const TT_Text*  filepathname,                            TT_Stream*      stream )  {    Int          len;    TT_Error     error;    PStream_Rec  stream_rec;    if ( ALLOC( *stream, sizeof ( TStream_Rec ) ) )      return error;    stream_rec = STREAM2REC( *stream );    stream_rec->file     = NULL;    stream_rec->size     = -1L;    stream_rec->base     = 0;    stream_rec->opened   = FALSE;    stream_rec->position = 0;    len = strlen( filepathname ) + 1;    if ( ALLOC( stream_rec->name, len ) )      goto Fail;    strncpy( stream_rec->name, filepathname, len );    error = Stream_Activate( stream_rec );    if ( error )      goto Fail_Activate;#ifndef TT_CONFIG_OPTION_THREAD_SAFE    CUR_Stream = stream_rec;#endif    return TT_Err_Ok;  Fail_Activate:    FREE( stream_rec->name );  Fail:    FREE( stream_rec );    return error;  }/******************************************************************* * *  Function    : TT_Close_Stream * *  Description : Closes a stream. * *  Input  :  stream         address of target TT_Stream structure * *  Output :  SUCCESS (always). * ******************************************************************/  LOCAL_FUNC  TT_Error  TT_Close_Stream( TT_Stream*  stream )  {    PStream_Rec  rec = STREAM2REC( *stream );    Stream_Deactivate( rec );    FREE( rec->name );    FREE( rec );    HANDLE_Set( *stream, NULL );    return TT_Err_Ok;  }/******************************************************************* * *  Function    : TT_Flush_Stream * *  Description : Flushes a stream, i.e., closes its file handle. * *  Input  :  stream         address of target TT_Stream structure * *  Output :  Error code * *  NOTE : Never flush the current opened stream.  This means that *         you should _never_ call this function between a *         TT_Use_Stream() and a TT_Done_Stream()! * ******************************************************************/  EXPORT_FUNC  TT_Error  TT_Flush_Stream( TT_Stream*  stream )  {    PStream_Rec  rec = STREAM2REC( *stream );    if ( rec )    {      Stream_Deactivate( rec );      return TT_Err_Ok;    }    else      return TT_Err_Invalid_Argument;  }/******************************************************************* * *  Function    : TT_Seek_File * *  Description : Seeks the file cursor to a different position. * *  Input  :  position     new position in file * *  Output :  SUCCESS on success.  FAILURE if out of range. * ******************************************************************/  EXPORT_FUNC  TT_Error  TT_Seek_File( STREAM_ARGS Long  position )  {    position += CUR_Stream->base;    if ( fseek( CUR_Stream->file, position, SEEK_SET ) )      return TT_Err_Invalid_File_Offset;    return TT_Err_Ok;  }/******************************************************************* * *  Function    : TT_Skip_File * *  Description : Skips forward the file cursor. * *  Input  :  distance    number of bytes to skip * *  Output :  see TT_Seek_File() * ******************************************************************/  EXPORT_FUNC  TT_Error  TT_Skip_File( STREAM_ARGS Long  distance )  {    return TT_Seek_File( STREAM_VARS ftell( CUR_Stream->file ) -                                     CUR_Stream->base + distance );  }/******************************************************************* * *  Function    : TT_Read_File * *  Description : Reads a chunk of the file and copies it to memory. * *  Input  :  buffer    target buffer *            count     length in bytes to read * *  Output :  SUCCESS on success.  FAILURE if out of range. * ******************************************************************/  EXPORT_FUNC  TT_Error  TT_Read_File( STREAM_ARGS void*  buffer, Long  count )  {    if ( fread( buffer, 1, count, CUR_Stream->file ) != (ULong)count )      return TT_Err_Invalid_File_Read;    return TT_Err_Ok;  }/******************************************************************* * *  Function    : TT_Read_At_File * *  Description : Reads file at a specified position. * *  Input  :  position  position to seek to before read *            buffer    target buffer *            count     number of bytes to read * *  Output :  SUCCESS on success.  FAILURE if error. * ******************************************************************/  EXPORT_FUNC  TT_Error  TT_Read_At_File( STREAM_ARGS Long   position,                                         void*  buffer,                                         Long   count )  {    TT_Error  error;    if ( (error = TT_Seek_File( STREAM_VARS position ))      != TT_Err_Ok ||         (error = TT_Read_File( STREAM_VARS buffer, count )) != TT_Err_Ok )      return error;    return TT_Err_Ok;  }/******************************************************************* * *  Function    :  TT_File_Pos * *  Description :  Returns current file seek pointer. * *  Input  :  none * *  Output :  Current file position. * ******************************************************************/  EXPORT_FUNC  Long  TT_File_Pos( STREAM_ARG )  {    return ftell( CUR_Stream->file ) - CUR_Stream->base;  }/******************************************************************* * *  Function    :  GET_Byte * *  Description :  Extracts a byte from the current file frame. * *  Input  :  None or current frame * *  Output :  Extracted Byte. * ******************************************************************/#if 0  EXPORT_FUNC  Byte  TT_Get_Byte( FRAME_ARG )  {    CHECK_FRAME( CUR_Frame, 1 );    return (Byte)(*CUR_Frame.cursor++);  }#endif/******************************************************************* * *  Function    :  GET_Char * *  Description :  Extracts a signed byte from the current file frame. * *  Input  :  None or current frame * *  Output :  Extracted char. * ******************************************************************/  EXPORT_FUNC  Char  TT_Get_Char( FRAME_ARG )  {    CHECK_FRAME( CUR_Frame, 1 );    return (Char)(*CUR_Frame.cursor++);  }/******************************************************************* * *  Function    :  GET_Short * *  Description :  Extracts a short from the current file frame. * *  Input  :  None or current frame * *  Output :  Extracted short. * ******************************************************************/  EXPORT_FUNC  Short  TT_Get_Short( FRAME_ARG )  {    Short  getshort;    CHECK_FRAME( CUR_Frame, 2 );    getshort = (Short)((CUR_Frame.cursor[0] << 8) |                        CUR_Frame.cursor[1]);    CUR_Frame.cursor += 2;    return getshort;  }/******************************************************************* * *  Function    :  GET_UShort * *  Description :  Extracts an unsigned short from the frame. * *  Input  :  None or current frame * *  Output :  Extracted ushort. * ******************************************************************/#if 0  EXPORT_FUNC  UShort  TT_Get_UShort( FRAME_ARG )  {    UShort  getshort;    CHECK_FRAME( CUR_Frame, 2 );    getshort = (UShort)((CUR_Frame.cursor[0] << 8) |                         CUR_Frame.cursor[1]);    CUR_Frame.cursor += 2;    return getshort;  }#endif/******************************************************************* * *  Function    :  GET_Long * *  Description :  Extracts a long from the frame. * *  Input  :  None or current frame * *  Output :  Extracted long. * ******************************************************************/  EXPORT_FUNC  Long  TT_Get_Long( FRAME_ARG )  {    Long  getlong;    CHECK_FRAME( CUR_Frame, 4 );    getlong = ((Long)CUR_Frame.cursor[0] << 24) |              ((Long)CUR_Frame.cursor[1] << 16) |              ((Long)CUR_Frame.cursor[2] << 8 ) |               (Long)CUR_Frame.cursor[3];    CUR_Frame.cursor += 4;    return getlong;  }/******************************************************************* * *  Function    :  GET_ULong * *  Description :  Extracts an unsigned long from the frame. * *  Input  :  None or current frame * *  Output :  Extracted ulong. * ******************************************************************/#if 0  EXPORT_FUNC  ULong  TT_Get_ULong( FRAME_ARG )  {    ULong  getlong;    CHECK_FRAME( CUR_Frame, 4 );    getlong = ( ((ULong)CUR_Frame.cursor[0] << 24) |                ((ULong)CUR_Frame.cursor[1] << 16) |                ((ULong)CUR_Frame.cursor[2] << 8 ) |                 (ULong)CUR_Frame.cursor[3] );    CUR_Frame.cursor += 4;    return getlong;  }#endif/* END */

⌨️ 快捷键说明

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