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

📄 os2file.c

📁 字体缩放显示
💻 C
📖 第 1 页 / 共 3 页
字号:
    int          len;    TT_Error     error;    PStream_Rec  stream_rec;    if ( ALLOC( *stream, sizeof ( TStream_Rec ) ) )      return error;    stream_rec = STREAM2REC( *stream );    stream_rec->file     = NULLHANDLE;  /* !Mike! */    stream_rec->size     = -1;    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( (String*)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). * ******************************************************************/  FT_INTERNAL_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()! * ******************************************************************/  FT_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. * ******************************************************************/  FT_EXPORT_FUNC( TT_Error )  TT_Seek_File( STREAM_ARGS long  position )  {    ULONG  ibActual;            /* !Mike! */    position += CUR_Stream->base;#if 0    if ( fseek( CUR_Stream->file, position, SEEK_SET ) )    /* !Mike! */#endif    if ( DosSetFilePtr( CUR_Stream->file, position, FILE_BEGIN , &ibActual ) )      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() * ******************************************************************/  FT_EXPORT_FUNC( TT_Error )  TT_Skip_File( STREAM_ARGS long  distance )  {    ULONG ibActual;             /* !Mike! */#if 0    return TT_Seek_File( STREAM_VARS ftell( CUR_Stream->file ) -                         CUR_Stream->base + distance ); /* !Mike! */#endif    DosSetFilePtr( CUR_Stream->file, 0, FILE_CURRENT, &ibActual );    return TT_Seek_File( STREAM_VARS ibActual - 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. * ******************************************************************/  FT_EXPORT_FUNC( TT_Error )  TT_Read_File( STREAM_ARGS void*  buffer, long  count )  {    ULONG cbActual;         /* !Mike! */#if 0               /* !Mike! */    if ( fread( buffer, 1, count, CUR_Stream->file ) != (unsigned long)count )#endif    DosRead( CUR_Stream->file, buffer, count, &cbActual );    if ( cbActual  != (unsigned long)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. * ******************************************************************/  FT_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 ) )      ||         ( error = TT_Read_File( STREAM_VARS buffer, count ) ) )      return error;    return TT_Err_Ok;  }/******************************************************************* * *  Function    :  TT_File_Pos * *  Description :  Returns current file seek pointer. * *  Input  :  none * *  Output :  current file position * ******************************************************************/  FT_EXPORT_FUNC( Long )  TT_File_Pos( STREAM_ARG )  {    ULONG ibActual;  /* !Mike! */#if 0    return ftell( CUR_Stream->file ) - CUR_Stream->base;    /* !Mike! */#endif    DosSetFilePtr( CUR_Stream->file, 0, FILE_CURRENT, &ibActual );    return ibActual - 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  FT_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. * ******************************************************************/  FT_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. * ******************************************************************/  FT_EXPORT_FUNC( short )  TT_Get_Short( FRAME_ARG )  {    short  getshort;    CHECK_FRAME( CUR_Frame, 2 );    getshort = ((short)CUR_Frame.cursor[0] << 8) |                (short)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  FT_EXPORT_FUNC( unsigned )  short  TT_Get_UShort( FRAME_ARG )  {    unsigned short  getshort;    CHECK_FRAME( CUR_Frame, 2 );    getshort = ((unsigned short)CUR_Frame.cursor[0] << 8) |                (unsigned short)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. * ******************************************************************/  FT_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 * *  Output :  Extracted ulong. * ******************************************************************/#if 0  FT_EXPORT_FUNC( unsigned )  long  TT_Get_ULong( FRAME_ARG )  {    unsigned long  getlong;    CHECK_FRAME( CUR_Frame, 4 );    getlong = ( ((unsigned long)CUR_Frame.cursor[0] << 24) |                ((unsigned long)CUR_Frame.cursor[1] << 16) |                ((unsigned long)CUR_Frame.cursor[2] << 8 ) |                 (unsigned long)CUR_Frame.cursor[3] );    CUR_Frame.cursor += 4;    return getlong;  }#endif/* END */

⌨️ 快捷键说明

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