/* ** Command & Conquer Renegade(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 . */ /*********************************************************************************************** *** Confidential - Westwood Studios *** *********************************************************************************************** * * * Project Name : Commando * * * * $Archive:: /Commando/Code/wwlib/mixfile.h $* * * * $Author:: Steve_t $* * * * $Modtime:: 9/07/01 5:29p $* * * * $Revision:: 4 $* * * *---------------------------------------------------------------------------------------------* * Functions: * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ #ifndef MIXFILE_H #define MIXFILE_H #ifndef ALWAYS_H #include "always.h" #endif #ifndef FFACTORY_H #include "ffactory.h" #endif #ifndef WWSTRING_H #include "wwstring.h" #endif #include "vector.h" class FileClass; /* ** */ class MixFileFactoryClass : public FileFactoryClass { public: MixFileFactoryClass( const char * mix_filename, FileFactoryClass * factory ); virtual ~MixFileFactoryClass( void ); // // Inherited // virtual FileClass * Get_File( char const *filename ); virtual void Return_File( FileClass *file ); // // Filename access // bool Build_Filename_List (DynamicVectorClass &list); bool Build_Internal_Filename_List (void) { return Build_Filename_List (FilenameList); } void Get_Filename_List (DynamicVectorClass **list) { *list = &FilenameList; } void Get_Filename_List (DynamicVectorClass &list) { list = FilenameList; } // // Content control // void Add_File (const char *full_path, const char *filename); void Delete_File (const char *filename); void Flush_Changes (void); // // Information // bool Is_Valid (void) const { return IsValid; } private: // // Utility functions // bool Get_Temp_Filename (const char *path, StringClass &full_path); struct FileInfoStruct { bool operator== (const FileInfoStruct &src) { return false; } bool operator!= (const FileInfoStruct &src) { return true; } unsigned long CRC; // CRC code for embedded file. unsigned long Offset; // Offset from start of data section. unsigned long Size; // Size of data subfile. }; struct AddInfoStruct { bool operator== (const AddInfoStruct &src) { return false; } bool operator!= (const AddInfoStruct &src) { return true; } StringClass FullPath; StringClass Filename; }; FileFactoryClass * Factory; DynamicVectorClass FileInfo; StringClass MixFilename; int BaseOffset; int FileCount; int NamesOffset; bool IsValid; DynamicVectorClass FilenameList; DynamicVectorClass PendingAddFileList; bool IsModified; }; /* ** */ class MixFileCreator { public: MixFileCreator( const char * filename ); ~MixFileCreator( void ); void Add_File( const char * source_filename, const char * saved_filename = NULL ); void Add_File( const char * filename, FileClass *file ); private: static int File_Info_Compare(const void * a, const void * b); struct FileInfoStruct { bool operator== (const FileInfoStruct &src) { return false; } bool operator!= (const FileInfoStruct &src) { return true; } unsigned long CRC; // CRC code for embedded file. unsigned long Offset; // Offset from start of data section. unsigned long Size; // Size of data subfile. StringClass Filename; }; DynamicVectorClass FileInfo; FileClass * MixFile; }; /* ** */ void Setup_Mix_File( void ); #endif