home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2006 March / Gamestar_82_2006-03_dvd.iso / DVDStar / Editace / quake4_sdkv10.exe / source / framework / File.h < prev    next >
C/C++ Source or Header  |  2005-11-14  |  14KB  |  363 lines

  1. // Copyright (C) 2004 Id Software, Inc.
  2. //
  3.  
  4. #ifndef __FILE_H__
  5. #define __FILE_H__
  6.  
  7. /*
  8. ==============================================================
  9.  
  10.   File Streams.
  11.  
  12. ==============================================================
  13. */
  14.  
  15. // mode parm for Seek
  16. typedef enum {
  17.     FS_SEEK_CUR,
  18.     FS_SEEK_END,
  19.     FS_SEEK_SET
  20. } fsOrigin_t;
  21.  
  22. class idFileSystemLocal;
  23.  
  24. // RAVEN BEGIN
  25. // jscott: made idFile a pure virtual interface
  26. class idFile {
  27. public:
  28.     virtual                    ~idFile( void ) {}
  29.                             // Get the name of the file.
  30.     virtual const char *    GetName( void ) = 0;
  31.                             // Get the full file path.
  32.     virtual const char *    GetFullPath( void ) = 0;
  33.                             // Read data from the file to the buffer.
  34.     virtual int                Read( void *buffer, int len ) = 0;
  35.                             // Write data from the buffer to the file.
  36.     virtual int                Write( const void *buffer, int len ) = 0;
  37.                             // Returns the length of the file.
  38.     virtual int                Length( void ) = 0;
  39.                             // Return a time value for reload operations.
  40.     virtual unsigned int    Timestamp( void ) = 0;
  41.                             // Returns offset in file.
  42.     virtual int                Tell( void ) = 0;
  43.                             // Forces flush on files being writting to.
  44.     virtual void            ForceFlush( void ) = 0;
  45.                             // Causes any buffered data to be written to the file.
  46.     virtual void            Flush( void ) = 0;
  47.                             // Seek on a file.
  48.     virtual int                Seek( long offset, fsOrigin_t origin ) = 0;
  49.                             // Go back to the beginning of the file.
  50.     virtual void            Rewind( void ) = 0;
  51.                             // Like fprintf.
  52.     virtual int                Printf( const char *fmt, ... ) id_attribute((format(printf,2,3))) = 0;
  53.                             // Like fprintf but with argument pointer
  54.     virtual int                VPrintf( const char *fmt, va_list arg ) = 0;
  55.                             // Write a string with high precision floating point numbers to the file.
  56.     virtual int                WriteFloatString( const char *fmt, ... ) id_attribute((format(printf,2,3))) = 0;
  57.     
  58.     // Endian portable alternatives to Read(...)
  59.     virtual int                ReadInt( int &value ) = 0;
  60.     virtual int                ReadUnsignedInt( unsigned int &value ) = 0;
  61.     virtual int                ReadShort( short &value ) = 0;
  62.     virtual int                ReadUnsignedShort( unsigned short &value ) = 0;
  63.     virtual int                ReadChar( char &value ) = 0;
  64.     virtual int                ReadUnsignedChar( unsigned char &value ) = 0;
  65.     virtual int                ReadFloat( float &value ) = 0;
  66.     virtual int                ReadBool( bool &value ) = 0;
  67.     virtual int                ReadString( idStr &string ) = 0;
  68.     virtual int                ReadVec2( idVec2 &vec ) = 0;
  69.     virtual int                ReadVec3( idVec3 &vec ) = 0;
  70.     virtual int                ReadVec4( idVec4 &vec ) = 0;
  71.     virtual int                ReadVec5( idVec5 &vec ) = 0;
  72.     virtual int                ReadVec6( idVec6 &vec ) = 0;
  73.     virtual int                ReadMat3( idMat3 &mat ) = 0;
  74.     
  75.     // Endian portable alternatives to Write(...)
  76.     virtual int                WriteInt( const int value ) = 0;
  77.     virtual int                WriteUnsignedInt( const unsigned int value ) = 0;
  78.     virtual int                WriteShort( const short value ) = 0;
  79.     virtual int                WriteUnsignedShort( unsigned short value ) = 0;
  80.     virtual int                WriteChar( const char value ) = 0;
  81.     virtual int                WriteUnsignedChar( const unsigned char value ) = 0;
  82.     virtual int                WriteFloat( const float value ) = 0;
  83.     virtual int                WriteBool( const bool value ) = 0;
  84.     virtual int                WriteString( const char *string ) = 0;
  85.     virtual int                WriteVec2( const idVec2 &vec ) = 0;
  86.     virtual int                WriteVec3( const idVec3 &vec ) = 0;
  87.     virtual int                WriteVec4( const idVec4 &vec ) = 0;
  88.     virtual int                WriteVec5( const idVec5 &vec ) = 0;
  89.     virtual int                WriteVec6( const idVec6 &vec ) = 0;
  90.     virtual int                WriteMat3( const idMat3 &mat ) = 0;
  91.  
  92.     // dluetscher: added method to write a structure array that is made up of numerics (floats, ints) from the given storage
  93.     virtual void            WriteNumericStructArray( int numStructElements, int tokenSubTypeStructElements[], int arrayCount, byte *arrayStorage, const char *prepend ) = 0;
  94.  
  95.     // jscott: for savegame and demo file syncing
  96.     virtual void            WriteSyncId( void ) = 0;
  97.     virtual void            ReadSyncId( const char *detail = "unspecified", const char *classname = NULL ) = 0;
  98. };
  99.  
  100. class idFile_Common : public idFile
  101. {
  102. public:
  103.     virtual                    ~idFile_Common( void ) {}
  104.                             // Get the name of the file.
  105.     virtual const char *    GetName( void ) { return( "" ); }
  106.                             // Get the full file path.
  107.     virtual const char *    GetFullPath( void ) { return( "" ); }
  108.                             // Read data from the file to the buffer.
  109.     virtual int                Read( void *buffer, int len );
  110.                             // Write data from the buffer to the file.
  111.     virtual int                Write( const void *buffer, int len );
  112.                             // Returns the length of the file.
  113.     virtual int                Length( void ) { return( 0 ); }
  114.                             // Return a time value for reload operations.
  115.     virtual unsigned int    Timestamp( void ) { return( 0 ); }
  116.                             // Returns offset in file.
  117.     virtual int                Tell( void ) { return( 0 ); }
  118.                             // Forces flush on files being writting to.
  119.     virtual void            ForceFlush( void ) {}
  120.                             // Causes any buffered data to be written to the file.
  121.     virtual void            Flush( void ) {}
  122.                             // Seek on a file.
  123.     virtual int                Seek( long offset, fsOrigin_t origin ) { return( -1 ); }
  124.                             // Go back to the beginning of the file.
  125.     virtual void            Rewind( void );
  126.                             // Like fprintf.
  127.     virtual int                Printf( const char *fmt, ... ) id_attribute((format(printf,2,3)));
  128.                             // Like fprintf but with argument pointer
  129.     virtual int                VPrintf( const char *fmt, va_list arg );
  130.                             // Write a string with high precision floating point numbers to the file.
  131.     virtual int                WriteFloatString( const char *fmt, ... ) id_attribute((format(printf,2,3)));
  132.     
  133.     // Endian portable alternatives to Read(...)
  134.     virtual int                ReadInt( int &value );
  135.     virtual int                ReadUnsignedInt( unsigned int &value );
  136.     virtual int                ReadShort( short &value );
  137.     virtual int                ReadUnsignedShort( unsigned short &value );
  138.     virtual int                ReadChar( char &value );
  139.     virtual int                ReadUnsignedChar( unsigned char &value );
  140.     virtual int                ReadFloat( float &value );
  141.     virtual int                ReadBool( bool &value );
  142.     virtual int                ReadString( idStr &string );
  143.     virtual int                ReadVec2( idVec2 &vec );
  144.     virtual int                ReadVec3( idVec3 &vec );
  145.     virtual int                ReadVec4( idVec4 &vec );
  146.     virtual int                ReadVec5( idVec5 &vec );
  147.     virtual int                ReadVec6( idVec6 &vec );
  148.     virtual int                ReadMat3( idMat3 &mat );
  149.     
  150.     // Endian portable alternatives to Write(...)
  151.     virtual int                WriteInt( const int value );
  152.     virtual int                WriteUnsignedInt( const unsigned int value );
  153.     virtual int                WriteShort( const short value );
  154.     virtual int                WriteUnsignedShort( unsigned short value );
  155.     virtual int                WriteChar( const char value );
  156.     virtual int                WriteUnsignedChar( const unsigned char value );
  157.     virtual int                WriteFloat( const float value );
  158.     virtual int                WriteBool( const bool value );
  159.     virtual int                WriteString( const char *string );
  160.     virtual int                WriteVec2( const idVec2 &vec );
  161.     virtual int                WriteVec3( const idVec3 &vec );
  162.     virtual int                WriteVec4( const idVec4 &vec );
  163.     virtual int                WriteVec5( const idVec5 &vec );
  164.     virtual int                WriteVec6( const idVec6 &vec );
  165.     virtual int                WriteMat3( const idMat3 &mat );
  166.  
  167.     // dluetscher: added method to write a structure array that is made up of numerics (floats, ints) from the given storage
  168.     virtual void            WriteNumericStructArray( int numStructElements, int tokenSubTypeStructElements[], int arrayCount, byte *arrayStorage, const char *prepend );
  169.  
  170.     // jscott: for savegame and demo file syncing
  171.     virtual void            WriteSyncId( void );
  172.     virtual void            ReadSyncId( const char *detail = "unspecific", const char *classname = NULL );
  173. };
  174.  
  175. class idFile_Memory : public idFile_Common {
  176. // RAVEN END
  177.     friend class            idFileSystemLocal;
  178.  
  179. public:
  180.                             idFile_Memory( void );    // file for writing without name
  181.                             idFile_Memory( const char *name );    // file for writing
  182.                             idFile_Memory( const char *name, char *data, int length );    // file for writing
  183.                             idFile_Memory( const char *name, const char *data, int length );    // file for reading
  184.     virtual                    ~idFile_Memory( void );
  185.  
  186.     virtual const char *    GetName( void ) { return name.c_str(); }
  187.     virtual const char *    GetFullPath( void ) { return name.c_str(); }
  188.     virtual int                Read( void *buffer, int len );
  189.     virtual int                Write( const void *buffer, int len );
  190.     virtual int                Length( void );
  191.     virtual unsigned int    Timestamp( void );
  192.     virtual int                Tell( void );
  193.     virtual void            ForceFlush( void );
  194.     virtual void            Flush( void );
  195.     virtual int                Seek( long offset, fsOrigin_t origin );
  196.     virtual void            Rewind( void );
  197.  
  198.                             // changes memory file to read only
  199.     virtual void            MakeReadOnly( void );
  200.                             // clear the file
  201.     virtual void            Clear( bool freeMemory = true );
  202.                             // set data for reading
  203.     void                    SetData( const char *data, int length );
  204.                             // returns const pointer to the memory buffer
  205.     const char *            GetDataPtr( void ) const { return filePtr; }
  206.                             // set the file granularity
  207.     void                    SetGranularity( int g ) { assert( g > 0 ); granularity = g; }
  208.  
  209. private:
  210.     idStr                    name;            // name of the file
  211.     int                        mode;            // open mode
  212.     int                        maxSize;        // maximum size of file
  213.     int                        fileSize;        // size of the file
  214.     int                        allocated;        // allocated size
  215.     int                        granularity;    // file granularity
  216.     char *                    filePtr;        // buffer holding the file data
  217.     char *                    curPtr;            // current read/write pointer
  218. };
  219.  
  220.  
  221. // RAVEN BEGIN
  222. class idFile_BitMsg : public idFile_Common {
  223. // RAVEN END
  224.     friend class            idFileSystemLocal;
  225.  
  226. public:
  227.                             idFile_BitMsg( idBitMsg &msg );
  228.                             idFile_BitMsg( const idBitMsg &msg );
  229.     virtual                    ~idFile_BitMsg( void );
  230.  
  231.     virtual const char *    GetName( void ) { return name.c_str(); }
  232.     virtual const char *    GetFullPath( void ) { return name.c_str(); }
  233.     virtual int                Read( void *buffer, int len );
  234.     virtual int                Write( const void *buffer, int len );
  235.     virtual int                Length( void );
  236.     virtual unsigned int    Timestamp( void );
  237.     virtual int                Tell( void );
  238.     virtual void            ForceFlush( void );
  239.     virtual void            Flush( void );
  240.     virtual int                Seek( long offset, fsOrigin_t origin );
  241.  
  242. private:
  243.     idStr                    name;            // name of the file
  244.     int                        mode;            // open mode
  245.     idBitMsg *                msg;
  246. };
  247.  
  248.  
  249. // RAVEN BEGIN
  250. class idFile_Permanent : public idFile_Common {
  251. // RAVEN END
  252.     friend class            idFileSystemLocal;
  253.  
  254. public:
  255.                             idFile_Permanent( void );
  256.     virtual                    ~idFile_Permanent( void );
  257.  
  258.     virtual const char *    GetName( void ) { return name.c_str(); }
  259.     virtual const char *    GetFullPath( void ) { return fullPath.c_str(); }
  260.     virtual int                Read( void *buffer, int len );
  261.     virtual int                Write( const void *buffer, int len );
  262.     virtual int                Length( void );
  263.     virtual unsigned int    Timestamp( void );
  264.     virtual int                Tell( void );
  265.     virtual void            ForceFlush( void );
  266.     virtual void            Flush( void );
  267.     virtual int                Seek( long offset, fsOrigin_t origin );
  268.  
  269.     // returns file pointer
  270.     FILE *                    GetFilePtr( void ) { return o; }
  271.  
  272. private:
  273.     idStr                    name;            // relative path of the file - relative path
  274.     idStr                    fullPath;        // full file path - OS path
  275.     int                        mode;            // open mode
  276.     int                        fileSize;        // size of the file
  277.     FILE *                    o;                // file handle
  278.     bool                    handleSync;        // true if written data is immediately flushed
  279. };
  280.  
  281. class idFile_ASCII : public idFile_Permanent
  282. {
  283.     int                        inside;
  284.  
  285. public:
  286.                             idFile_ASCII( void );
  287.  
  288.     virtual int                Read( void *buffer, int len );
  289.                             // Write data from the buffer to the file.
  290.     virtual int                Write( const void *buffer, int len );
  291.     
  292.     // Endian portable alternatives to Read(...)
  293.     virtual int                ReadInt( int &value );
  294.     virtual int                ReadUnsignedInt( unsigned int &value );
  295.     virtual int                ReadShort( short &value );
  296.     virtual int                ReadUnsignedShort( unsigned short &value );
  297.     virtual int                ReadChar( char &value );
  298.     virtual int                ReadUnsignedChar( unsigned char &value );
  299.     virtual int                ReadFloat( float &value );
  300.     virtual int                ReadBool( bool &value );
  301.     virtual int                ReadString( idStr &string );
  302.     virtual int                ReadVec2( idVec2 &vec );
  303.     virtual int                ReadVec3( idVec3 &vec );
  304.     virtual int                ReadVec4( idVec4 &vec );
  305.     virtual int                ReadVec5( idVec5 &vec );
  306.     virtual int                ReadVec6( idVec6 &vec );
  307.     virtual int                ReadMat3( idMat3 &mat );
  308.     
  309.     // Endian portable alternatives to Write(...)
  310.     virtual int                WriteInt( const int value );
  311.     virtual int                WriteUnsignedInt( const unsigned int value );
  312.     virtual int                WriteShort( const short value );
  313.     virtual int                WriteUnsignedShort( unsigned short value );
  314.     virtual int                WriteChar( const char value );
  315.     virtual int                WriteUnsignedChar( const unsigned char value );
  316.     virtual int                WriteFloat( const float value );
  317.     virtual int                WriteBool( const bool value );
  318.     virtual int                WriteString( const char *string );
  319.     virtual int                WriteVec2( const idVec2 &vec );
  320.     virtual int                WriteVec3( const idVec3 &vec );
  321.     virtual int                WriteVec4( const idVec4 &vec );
  322.     virtual int                WriteVec5( const idVec5 &vec );
  323.     virtual int                WriteVec6( const idVec6 &vec );
  324.     virtual int                WriteMat3( const idMat3 &mat );
  325.  
  326.     // dluetscher: added method to write a structure array that is made up of numerics (floats, ints) from the given storage
  327.     virtual void            WriteNumericStructArray( int numStructElements, int tokenSubTypeStructElements[], int arrayCount, byte *arrayStorage, const char *prepend );
  328.  
  329.     // jscott: for savegame and demo file syncing
  330.     virtual void            WriteSyncId( void );
  331.     virtual void            ReadSyncId( const char *detail = "unspecific", const char *classname = NULL );
  332. };
  333.  
  334. // RAVEN BEGIN
  335. class idFile_InZip : public idFile_Common {
  336. // RAVEN END
  337.     friend class            idFileSystemLocal;
  338.  
  339. public:
  340.                             idFile_InZip( void );
  341.     virtual                    ~idFile_InZip( void );
  342.  
  343.     virtual const char *    GetName( void ) { return name.c_str(); }
  344.     virtual const char *    GetFullPath( void ) { return fullPath.c_str(); }
  345.     virtual int                Read( void *buffer, int len );
  346.     virtual int                Write( const void *buffer, int len );
  347.     virtual int                Length( void );
  348.     virtual unsigned int    Timestamp( void );
  349.     virtual int                Tell( void );
  350.     virtual void            ForceFlush( void );
  351.     virtual void            Flush( void );
  352.     virtual int                Seek( long offset, fsOrigin_t origin );
  353.  
  354. private:
  355.     idStr                    name;            // name of the file in the pak
  356.     idStr                    fullPath;        // full file path including pak file name
  357.     int                        zipFilePos;        // zip file info position in pak
  358.     int                        fileSize;        // size of the file
  359.     void *                    z;                // unzip info
  360. };
  361.  
  362. #endif /* !__FILE_H__ */
  363.