1 // Copyright (c) 2013- PPSSPP Project. 2 3 // This program is free software: you can redistribute it and/or modify 4 // it under the terms of the GNU General Public License as published by 5 // the Free Software Foundation, version 2.0 or later versions. 6 7 // This program is distributed in the hope that it will be useful, 8 // but WITHOUT ANY WARRANTY; without even the implied warranty of 9 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 // GNU General Public License 2.0 for more details. 11 12 // A copy of the GPL 2.0 should have been included with the program. 13 // If not, see http://www.gnu.org/licenses/ 14 15 // Official git repository and contact information can be found at 16 // https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/. 17 18 19 #pragma once 20 21 #include "Common/Common.h" 22 #include "Common/Swap.h" 23 24 enum PBPSubFile { 25 PBP_PARAM_SFO, 26 PBP_ICON0_PNG, 27 PBP_ICON1_PMF, 28 PBP_PIC0_PNG, 29 PBP_PIC1_PNG, 30 PBP_SND0_AT3, 31 PBP_EXECUTABLE_PSP, 32 PBP_UNKNOWN_PSAR, 33 }; 34 35 struct PBPHeader { 36 char magic[4]; 37 u32_le version; 38 u32_le offsets[8]; 39 }; 40 41 class FileLoader; 42 43 class PBPReader { 44 public: 45 PBPReader(FileLoader *fileLoader); 46 ~PBPReader(); 47 IsValid()48 bool IsValid() const { return file_ != nullptr; } IsELF()49 bool IsELF() const { return file_ == nullptr && isELF_; } 50 51 bool GetSubFile(PBPSubFile file, std::vector<u8> *out); 52 void GetSubFileAsString(PBPSubFile file, std::string *out); 53 GetSubFileSize(PBPSubFile file)54 size_t GetSubFileSize(PBPSubFile file) { 55 int num = (int)file; 56 if (num < 7) { 57 return header_.offsets[file + 1] - header_.offsets[file]; 58 } else { 59 return fileSize_ - header_.offsets[file]; 60 } 61 } 62 63 private: 64 FileLoader *file_; 65 size_t fileSize_; 66 const PBPHeader header_; 67 bool isELF_; 68 }; 69