Clone of Akilla's ac2d @ https://github.com/deregtd/AC2D

cTurbineFile.h 1.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #pragma once
  2. #include <map>
  3. const long FILEHEADERLOC = 0x140;
  4. struct stTFMap
  5. {
  6. stTFMap()
  7. {
  8. Data = NULL;
  9. }
  10. stTFMap(DWORD NPos, DWORD NLen, cPortalFile *NData = NULL)
  11. {
  12. Position = NPos;
  13. Length = NLen;
  14. Data = NData;
  15. }
  16. ~stTFMap()
  17. {
  18. delete Data;
  19. }
  20. DWORD Position;
  21. DWORD Length;
  22. cPortalFile * Data;
  23. };
  24. typedef std::map< DWORD, QWORD > InfoMap;
  25. typedef std::map< DWORD, cPortalFile * > FileMap;
  26. typedef std::map<DWORD, stTFMap *> TFMapType;
  27. struct TODDatFileHeader
  28. {
  29. DWORD dwMagicNumber;
  30. DWORD dwBlockSize;
  31. DWORD dwFileSize;
  32. DWORD dwFileVersion;
  33. DWORD dwUnknown1;
  34. DWORD dwFirstFreeBlock;
  35. DWORD dwLastFreeBlock;
  36. DWORD dwFreeBlockCount;
  37. DWORD dwRootOffset;
  38. DWORD dwUnknown2;
  39. DWORD dwUnknown3;
  40. DWORD dwUnknown4;
  41. DWORD dwUnknown5;
  42. DWORD dwUnknown6;
  43. DWORD dwUnknown7;
  44. DWORD dwUnknown8;
  45. };
  46. struct TODFileEntry
  47. {
  48. DWORD dwUnknown1;
  49. DWORD dwID;
  50. DWORD dwFileOffset;
  51. DWORD dwFileSize;
  52. float fTimeStamp;
  53. DWORD dwUnknown6;
  54. };
  55. struct TODDirectory
  56. {
  57. DWORD dwSubdirs[62];
  58. DWORD dwEntryCount;
  59. struct TODFileEntry feEntries[62];
  60. };
  61. class cTurbineFile
  62. {
  63. public:
  64. cTurbineFile();
  65. ~cTurbineFile();
  66. cPortalFile * OpenEntry( DWORD dwID );
  67. void InsertEntry(cPortalFile * pfNew);
  68. void LoadFile( std::string Filename );
  69. DWORD GetPoolSize()
  70. {
  71. CalcPoolSize();
  72. return m_dwPoolSize;
  73. }
  74. protected:
  75. void CloseFile();
  76. private:
  77. void FindFiles( DWORD dirPos, std::unordered_set<DWORD> *LoadSet );
  78. void LoadSection( DWORD offset, DWORD length, void * PlaceIn );
  79. void CalcPoolSize();
  80. std::string m_szACPath;
  81. std::string m_szFilename;
  82. HANDLE m_hFile,
  83. m_hMapping;
  84. BYTE *m_pData;
  85. TODDatFileHeader m_FileHeader;
  86. InfoMap m_mFileInfo;
  87. FileMap m_mPool;
  88. TFMapType m_TFMap;
  89. DWORD m_dwPoolSize;
  90. };