#include "stdafx.h" #include "PSF.h" PSFLoader::PSFLoader(vfsStream& f) : psf_f(f) { } PSFEntry* PSFLoader::SearchEntry(const std::string& key) { for(auto& entry : m_entries) { if(entry.name == key) return &entry; } return nullptr; } bool PSFLoader::Load(bool show) { if(!psf_f.IsOpened()) return false; m_show_log = show; if(!LoadHeader()) return false; if(!LoadKeyTable()) return false; if(!LoadDataTable()) return false; return true; } bool PSFLoader::Close() { return psf_f.Close(); } bool PSFLoader::LoadHeader() { if(psf_f.Read(&m_header, sizeof(PSFHeader)) != sizeof(PSFHeader)) return false; if(!m_header.CheckMagic()) return false; if(m_show_log) ConLog.Write("PSF version: %x", m_header.psf_version); m_psfindxs.clear(); m_entries.clear(); m_psfindxs.resize(m_header.psf_entries_num); m_entries.resize(m_header.psf_entries_num); for(u32 i=0; i= sizeof(m_entries[i].name) || c == '\0') break; } } return true; } bool PSFLoader::LoadDataTable() { for(u32 i=0; iFormatString(); else return ""; } u32 PSFLoader::GetInteger(const std::string& key) { if(PSFEntry* entry = SearchEntry(key)) return entry->FormatInteger(); else return 0; }