(Re) Wrote a tool to test NIF files in BSAs and on the filesystem.
Just give it a set of files, one file per argument, and it will make sure openmw can read them. On linux/mac you can use "xargs --arg-file=nifs.txt ./niftest" to give it a list of files to check.deque
parent
d024c1a93f
commit
cdfa24e15d
@ -1,5 +1 @@
|
|||||||
niftool
|
*.log
|
||||||
*_test
|
|
||||||
*.nif
|
|
||||||
*.kf
|
|
||||||
output.txt
|
|
||||||
|
@ -0,0 +1,19 @@
|
|||||||
|
set(NIFTEST
|
||||||
|
niftest.cpp
|
||||||
|
)
|
||||||
|
source_group(components\\nif\\tests FILES ${NIFTEST})
|
||||||
|
|
||||||
|
# Main executable
|
||||||
|
add_executable(niftest
|
||||||
|
${NIFTEST}
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(niftest
|
||||||
|
${Boost_LIBRARIES}
|
||||||
|
components
|
||||||
|
)
|
||||||
|
|
||||||
|
if (BUILD_WITH_CODE_COVERAGE)
|
||||||
|
add_definitions (--coverage)
|
||||||
|
target_link_libraries(niftest gcov)
|
||||||
|
endif()
|
@ -1,12 +0,0 @@
|
|||||||
GCC=g++
|
|
||||||
|
|
||||||
all: niftool nif_bsa_test
|
|
||||||
|
|
||||||
niftool: niftool.cpp ../nif_file.hpp ../nif_file.cpp ../record.hpp
|
|
||||||
$(GCC) $< ../nif_file.cpp ../../tools/stringops.cpp -o $@
|
|
||||||
|
|
||||||
nif_bsa_test: nif_bsa_test.cpp ../nif_file.cpp ../../bsa/bsa_file.cpp ../../tools/stringops.cpp
|
|
||||||
$(GCC) $^ -o $@
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm niftool *_test
|
|
@ -1,30 +0,0 @@
|
|||||||
/*
|
|
||||||
Runs NIFFile through all the NIFs in Morrowind.bsa.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "../nif_file.hpp"
|
|
||||||
#include "../../bsa/bsa_file.hpp"
|
|
||||||
#include "../../tools/stringops.hpp"
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
using namespace Mangle::Stream;
|
|
||||||
using namespace std;
|
|
||||||
using namespace Nif;
|
|
||||||
|
|
||||||
int main(int argc, char **args)
|
|
||||||
{
|
|
||||||
BSAFile bsa;
|
|
||||||
cout << "Reading Morrowind.bsa\n";
|
|
||||||
bsa.open("../../data/Morrowind.bsa");
|
|
||||||
|
|
||||||
const BSAFile::FileList &files = bsa.getList();
|
|
||||||
|
|
||||||
for(int i=0; i<files.size(); i++)
|
|
||||||
{
|
|
||||||
const char *n = files[i].name;
|
|
||||||
if(!ends(n, ".nif")) continue;
|
|
||||||
|
|
||||||
cout << "Decoding " << n << endl;
|
|
||||||
NIFFile nif(bsa.getFile(n), n);
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,96 @@
|
|||||||
|
///Program to test .nif files both on the FileSystem and in BSA archives.
|
||||||
|
|
||||||
|
#include "../niffile.hpp"
|
||||||
|
#include "../../bsa/bsa_file.hpp"
|
||||||
|
#include "../../bsa/bsa_archive.hpp"
|
||||||
|
#include <OgreRoot.h>
|
||||||
|
#include <OgreResourceGroupManager.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <exception>
|
||||||
|
|
||||||
|
///See if the file has the named extension
|
||||||
|
bool hasExtension(std::string filename, std::string extensionToFind)
|
||||||
|
{
|
||||||
|
std::string extension = filename.substr(filename.find_last_of(".")+1);
|
||||||
|
|
||||||
|
//Convert strings to lower case for comparison
|
||||||
|
std::transform(extension.begin(), extension.end(), extension.begin(), ::tolower);
|
||||||
|
std::transform(extensionToFind.begin(), extensionToFind.end(), extensionToFind.begin(), ::tolower);
|
||||||
|
|
||||||
|
if(extension == extensionToFind)
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
///See if the file has the "nif" extension.
|
||||||
|
bool isNIF(std::string filename)
|
||||||
|
{
|
||||||
|
return hasExtension(filename,"nif");
|
||||||
|
}
|
||||||
|
///See if the file has the "bsa" extension.
|
||||||
|
bool isBSA(std::string filename)
|
||||||
|
{
|
||||||
|
return hasExtension(filename,"bsa");
|
||||||
|
}
|
||||||
|
|
||||||
|
///Check all the nif files in the given BSA archive
|
||||||
|
void readBSA(std::string filename)
|
||||||
|
{
|
||||||
|
Bsa::BSAFile bsa;
|
||||||
|
bsa.open(filename.c_str());
|
||||||
|
|
||||||
|
const Bsa::BSAFile::FileList &files = bsa.getList();
|
||||||
|
Bsa::addBSA(filename,"Bsa Files");
|
||||||
|
|
||||||
|
for(unsigned int i=0; i<files.size(); i++)
|
||||||
|
{
|
||||||
|
std::string name = files[i].name;
|
||||||
|
if(isNIF(name))
|
||||||
|
{
|
||||||
|
//std::cout << "Decoding " << name << std::endl;
|
||||||
|
Nif::NIFFile temp_nif(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
|
||||||
|
//Need this for Ogre's getSingleton
|
||||||
|
new Ogre::Root("", "", "niftest.log");
|
||||||
|
Ogre::ResourceGroupManager::getSingleton ().createResourceGroup ("Bsa Files");
|
||||||
|
//Needed to read files from file system
|
||||||
|
Ogre::ResourceGroupManager::getSingleton().addResourceLocation("/", "FileSystem");
|
||||||
|
// Initialize the resource groups:
|
||||||
|
Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
|
||||||
|
|
||||||
|
std::cout << "Reading Files" << std::endl;
|
||||||
|
for(int i = 1; i<argc;i++)
|
||||||
|
{
|
||||||
|
std::string name = argv[i];
|
||||||
|
|
||||||
|
try{
|
||||||
|
if(isNIF(name))
|
||||||
|
{
|
||||||
|
//std::cout << "Decoding " << name << std::endl;
|
||||||
|
Nif::NIFFile temp_nif(name);
|
||||||
|
}
|
||||||
|
else if(isBSA(name))
|
||||||
|
{
|
||||||
|
std::cout << "Reading " << name << std::endl;
|
||||||
|
readBSA(name);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::cerr << "ERROR: \"" << name << "\" is not a nif or bsa file!" << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (std::exception& e)
|
||||||
|
{
|
||||||
|
std::cerr << "ERROR, an exception has occured" << e.what() << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
@ -1,18 +1,15 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
make || exit
|
#Script to test all nif files (both loose, and in BSA archives) in data files directory
|
||||||
|
|
||||||
mkdir -p output
|
DATAFILESDIR="$1"
|
||||||
|
|
||||||
PROGS=*_test
|
find "$DATAFILESDIR" -iname *bsa > nifs.txt
|
||||||
|
find "$DATAFILESDIR" -iname *nif >> nifs.txt
|
||||||
|
|
||||||
for a in $PROGS; do
|
sed -e 's/.*/\"&\"/' nifs.txt > quoted_nifs.txt
|
||||||
if [ -f "output/$a.out" ]; then
|
|
||||||
echo "Running $a:"
|
xargs --arg-file=quoted_nifs.txt ../../../niftest
|
||||||
./$a | diff output/$a.out -
|
|
||||||
else
|
rm nifs.txt
|
||||||
echo "Creating $a.out"
|
rm quoted_nifs.txt
|
||||||
./$a > "output/$a.out"
|
|
||||||
git add "output/$a.out"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
Loading…
Reference in New Issue