diff --git a/config/SOUE01/splits.txt b/config/SOUE01/splits.txt index bb76869b..cd67bf1a 100644 --- a/config/SOUE01/splits.txt +++ b/config/SOUE01/splits.txt @@ -222,6 +222,9 @@ nw4r/ut/ut_TextWriterBase.cpp: .text start:0x8042EF20 end:0x80434294 .ctors start:0x804DB950 end:0x804DB954 +nw4r/ut/ut_binaryFileFormat.cpp: + .text start:0x8042A9E0 end:0x8042AA54 + nw4r/db/db_directPrint.cpp: .text start:0x804342A0 end:0x80434E9C .rodata start:0x804F5D28 end:0x804F5FDC diff --git a/configure.py b/configure.py index 5336a084..39cc4ffe 100644 --- a/configure.py +++ b/configure.py @@ -333,6 +333,7 @@ config.libs = [ Object(NonMatching, "nw4r/ut/ut_ResFont.cpp"), Object(NonMatching, "nw4r/ut/ut_CharWriter.cpp"), Object(NonMatching, "nw4r/ut/ut_TextWriterBase.cpp"), + Object(Matching, "nw4r/ut/ut_binaryFileFormat.cpp"), ], ), # EGG diff --git a/include/nw4r/ut/ut_binaryFileFormat.h b/include/nw4r/ut/ut_binaryFileFormat.h index eeb5faca..8185fc24 100644 --- a/include/nw4r/ut/ut_binaryFileFormat.h +++ b/include/nw4r/ut/ut_binaryFileFormat.h @@ -19,8 +19,7 @@ struct BinaryFileHeader { u16 numBlocks; // at 0xE }; -bool IsValidBinaryFile(const BinaryFileHeader* header, u32 magic, u16 version, - u16 numBlocks); +bool IsValidBinaryFile(const BinaryFileHeader *header, unsigned long magic, u16 version, u16 numBlocks); } // namespace ut } // namespace nw4r diff --git a/src/nw4r/ut/ut_binaryFileFormat.cpp b/src/nw4r/ut/ut_binaryFileFormat.cpp new file mode 100644 index 00000000..1b62b51c --- /dev/null +++ b/src/nw4r/ut/ut_binaryFileFormat.cpp @@ -0,0 +1,28 @@ +#include + +namespace nw4r { +namespace ut { + +/* 8042a9e0 */ +bool IsValidBinaryFile(const BinaryFileHeader *header, unsigned long magic, u16 version, u16 numBlocks) { + if (header->magic != magic) { + return false; + } + if (header->byteOrder != 0xFEFF) { + return false; + } + if (header->version != version) { + return false; + } + if (header->fileSize < (numBlocks * sizeof(BinaryBlockHeader) + sizeof(BinaryFileHeader))) { + return false; + } + + if (header->numBlocks < numBlocks) { + return false; + } + return true; +} + +} // namespace ut +} // namespace nw4r