#pragma once #include "types.h" #include #include #include namespace ctrtool { class ExeFsProcess { public: ExeFsProcess(); void setInputStream(const std::shared_ptr& input_stream); void setCliOutputMode(bool show_header_info, bool show_fs); void setVerboseMode(bool verbose); void setVerifyMode(bool verify); void setRawMode(bool raw); void setDecompressCode(bool decompress_code); void setExtractPath(const tc::io::Path& extract_path); void process(); private: std::string mModuleLabel; std::shared_ptr mInputStream; bool mShowHeaderInfo; bool mShowFs; bool mVerbose; bool mVerify; bool mRaw; bool mDecompressCode; tc::Optional mExtractPath; ntd::n3ds::ExeFsHeader mHeader; std::shared_ptr mFsReader; std::array mSectionValidation; void importHeader(); void verifyFs(); void printHeader(); void printFs(); void extractFs(); // string utils std::string getValidString(byte_t validstate); }; }