1 /*************************************************************************** 2 * Copyright (C) 2005-2019 by the FIFE team * 3 * http://www.fifengine.net * 4 * This file is part of FIFE. * 5 * * 6 * FIFE is free software; you can redistribute it and/or * 7 * modify it under the terms of the GNU Lesser General Public * 8 * License as published by the Free Software Foundation; either * 9 * version 2.1 of the License, or (at your option) any later version. * 10 * * 11 * This library is distributed in the hope that it will be useful, * 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * 14 * Lesser General Public License for more details. * 15 * * 16 * You should have received a copy of the GNU Lesser General Public * 17 * License along with this library; if not, write to the * 18 * Free Software Foundation, Inc., * 19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * 20 ***************************************************************************/ 21 22 #ifndef FIFE_MAP_LOADERS_FALLOUT_DAT1_H 23 #define FIFE_MAP_LOADERS_FALLOUT_DAT1_H 24 25 // Standard C++ library includes 26 #include <map> 27 #include <memory> 28 29 // 3rd party library includes 30 31 // FIFE includes 32 // These includes are split up in two parts, separated by one empty line 33 // First block: files included from the FIFE root src directory 34 // Second block: files included from the same folder 35 #include "vfs/vfs.h" 36 #include "vfs/vfssource.h" 37 38 #include "rawdatadat1.h" 39 40 namespace FIFE { 41 42 /** VFSource for the Fallout1 DAT file format. 43 */ 44 class DAT1 : public VFSSource { 45 public: 46 /** Constructor 47 * Create a VFSSource for a Fallout1 DAT file. 48 * @param vfs A pointer to the VFS. 49 * @param file A Fallout1 DAT file - e.g. master.DAT 50 */ 51 DAT1(VFS* vfs, const std::string& file); 52 53 bool fileExists(const std::string& name) const; 54 RawData* open(const std::string& file) const; 55 56 /** Get the needed information to unpack and extract a file from the 57 * DAT file. 58 * Retrieves the Information needed to extract a specific file, this 59 * is passed as argument to a mffalloutrawdatadat1 RawMemSource, 60 * which itself fills its memory content with the unpacked file. 61 * 62 * @throw NotFound 63 * @see MFFalloutRawDataDAT1, RawMemSource 64 */ 65 const RawDataDAT1::s_info& getInfo(const std::string& name) const; 66 67 std::set<std::string> listFiles(const std::string& pathstr) const; 68 std::set<std::string> listDirectories(const std::string& pathstr) const; 69 70 private: 71 std::string m_datpath; 72 std::unique_ptr<RawData> m_data; 73 typedef std::map<std::string, RawDataDAT1::s_info> type_filelist; 74 type_filelist m_filelist; 75 76 std::set<std::string> list(const std::string& pathstr, bool dirs) const; 77 std::string readString(); 78 79 void loadFileList(const std::string& dirname); 80 81 // Not copyable 82 DAT1(const DAT1&); 83 DAT1& operator=(const DAT1&); 84 }; 85 86 } // FIFE 87 88 #endif 89