/** * @file RDI.hpp * @date 04/02/2023 * @author JackCarterSmith * @copyright GPL-v3.0 * @brief Rogue Data Interface library main entry file. * */ #include #include #include #ifndef RDI_HPP_ #define RDI_HPP_ #if defined(_MSC_VER) # define RDI_ABI_EXPORT __declspec(dllexport) # define RDI_ABI_IMPORT __declspec(dllimport) #elif __GNUC__ >= 4 # define RDI_ABI_EXPORT __attribute__ ((visibility("default"))) # define RDI_ABI_IMPORT __attribute__ ((visibility("default"))) #else # define RDI_ABI_EXPORT # define RDI_ABI_IMPORT #endif #if defined(RDI_DLL) # if defined(WIN32) # if defined(RDI_DLLBUILD) # define RDI_EXTERN RDI_ABI_EXPORT # else # define RDI_EXTERN RDI_ABI_IMPORT # endif # endif #endif #ifndef RDI_EXTERN # define RDI_EXTERN #endif namespace RDI { /** * @brief Errors flags who can be returned by this lib's interfaces. * //TODO: Should be removed and use c++ exceptions instead */ typedef enum e_rdi_result { RDI_OK, RDI_ERROR_GENERIC, RDI_ERROR_PROCESS, RDI_ERROR_MEMORY, RDI_ERROR_FILESYSTEM, RDI_ERROR_UNEXPECTED } RDI_RESULT; /** * @brief Get the current library version. * @return String of the version. */ RDI_EXTERN const std::string RDI_getLibVersion( void ) noexcept; /** * @brief Allocate memory and create default structure to access datas. * @details Try to open DATA.DAT file at location specified by roguePath. * If file can be opened, it's mapped in memory and process files list. * @param[in] roguePath Path to DATA.DAT and DATA.HDR location. */ RDI_EXTERN void RDI_Init( std::string roguePath ); /* -------------------------------------------------------------------------- */ /* Erso specific methods */ RDI_EXTERN const unsigned char RDI_getSectionCount( void ); RDI_EXTERN const std::string RDI_getSectionName( unsigned char id ); RDI_EXTERN const unsigned int RDI_getSectionOffset( unsigned char id ); RDI_EXTERN const unsigned int RDI_getDirectoryElementCount( std::string path ); RDI_EXTERN const std::vector RDI_getDirectoryElements( std::string path ); RDI_EXTERN const bool RDI_isElementDirectory( std::string path ); /* -------------------------------------------------------------------------- */ /* Krennic specific methods */ RDI_EXTERN const std::vector RDI_getLevelsName( void ) noexcept; RDI_EXTERN const std::vector RDI_getModelsName( void ) noexcept; RDI_EXTERN const std::vector RDI_getTexturesName( void ) noexcept; RDI_EXTERN const std::vector RDI_getMusicsName( void ) noexcept; RDI_EXTERN LVL* RDI_getLevel( std::string levelName ); RDI_EXTERN HOB* RDI_getModel( std::string modelName ); /** * @brief Clean up global resources. */ RDI_EXTERN void RDI_CleanUp( void ); } #endif /* RDI_HPP_ */