/* ** Command & Conquer Generals(tm) ** Copyright 2025 Electronic Arts Inc. ** ** This program is free software: you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program. If not, see . */ //----------------------------------------------------------------------------= // // Westwood Studios Pacific. // // Confidential Information // Copyright(C) 2001 - All Rights Reserved // //---------------------------------------------------------------------------- // // Project: WSYS Library // // Module: IO // // File name: wsys/File.h // // Created: 4/23/01 // //---------------------------------------------------------------------------- #pragma once #ifndef __WSYS_FILE_H #define __WSYS_FILE_H //---------------------------------------------------------------------------- // Includes //---------------------------------------------------------------------------- #include "lib/basetype.h" //---------------------------------------------------------------------------- // Forward References //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- // Type Defines //---------------------------------------------------------------------------- #define IO_MAX_PATH (2*1024) ///< Maximum allowable path legnth //=============================== // File //=============================== /** * File is an interface class for basic file operations. * * All code should use the File class and not its derivatives, unless * absolutely necessary. Also FS::Open should be used to create File objects and open files. */ //=============================== class File { friend class FileSystem; public: enum access { NONE = 0x00000000, READ = 0x00000001, ///< Access file for reading WRITE = 0x00000002, ///< Access file for writing APPEND = 0x00000004, ///< Seek to end of file on open CREATE = 0x00000008, ///< Create file if it does not exist TRUNCATE = 0x00000010, ///< Delete all data in file when opened TEXT = 0x00000020, ///< Access file as text data BINARY = 0x00000040, ///< Access file as binary data READWRITE = (READ | WRITE), NEW = 0x00000080 ///< Only create file if it does not exist }; enum seekMode { START, ///< Seek position is relative to start of file CURRENT, ///< Seek position is relative to current file position END ///< Seek position is relative from the end of the file }; protected: Char m_name[IO_MAX_PATH+1]; ///< Stores file name Bool m_open; ///< Has the file been opened Bool m_deleteOnClose; ///< delete File object on close() Int m_access; ///< How the file was opened File(); ///< This class can only used as a base class virtual ~File(); public: virtual Bool open( const Char *filename, Int access = 0 ); ///< Open a file for access virtual void close( void ); ///< Close the file !!! File object no longer valid after this call !!! virtual Int read( void *buffer, Int bytes ) = NULL ; /**< Read the specified number of bytes from the file in to the * memory pointed at by buffer. Returns the number of bytes read. * Returns -1 if an error occured. */ virtual Int write( void *buffer, Int bytes ) = NULL ; /**< Write the specified number of bytes from the * memory pointed at by buffer to the file. Returns the number of bytes written. * Returns -1 if an error occured. */ virtual Int seek( Int bytes, seekMode mode = CURRENT ) = NULL; /**< Sets the file position of the next read/write operation. Returns the new file * position as the number of bytes from the start of the file. * Returns -1 if an error occured. * * seekMode determines how the seek is done: * * START : means seek to the specified number of bytes from the start of the file * CURRENT: means seek the specified the number of bytes from the current file position * END: means seek the specified number of bytes back from the end of the file */ virtual Bool printf ( const Char *format, ...); ///< Prints formated string to text file virtual Int size( void ); ///< Returns the size of the file virtual Int position( void ); ///< Returns the current read/write position void setName( const Char *name ); ///< Set the name of the file Char* getName( void ); ///< Returns a pointer to the name of the file Bool getName( Char *buffer, Int max ); ///< Copies the name of the file to the buffer Int getAccess( void ); ///< Returns file's access flags void deleteOnClose ( void ); ///< Causes the File object to delete itself when it closes }; //---------------------------------------------------------------------------- // Inlining //---------------------------------------------------------------------------- inline Char* File::getName( void ) { return m_name;}; inline Int File::getAccess( void ) { return m_access;}; inline void File::deleteOnClose( void ) { m_deleteOnClose = TRUE;}; // include FileSystem.h as it will be used alot with File.h //#include "wsys/FileSystem.h" #endif // __WSYS_FILE_H