#include #include #include #include #include "SceTypes.hpp" #include "prx/libSceSaveDataDialog.native/SaveDataDialog.hpp" #include "prx/libc/include/General.hpp" static int g_status = SAVE_DATA_DIALOG_STATUS_NONE; static int g_mode = 0; static void* g_user_data = nullptr; static char g_dir_name[32] = {}; extern "C" { int APS5_VABI sceSaveDataDialogInitialize(void) { if (g_status != SAVE_DATA_DIALOG_STATUS_NONE) { return SAVE_DATA_DIALOG_ERROR_ALREADY_INITIALIZED; } g_status = SAVE_DATA_DIALOG_STATUS_INITIALIZED; g_mode = 0; g_user_data = nullptr; g_dir_name[0] = '\0'; return SAVE_DATA_DIALOG_OK; } int APS5_VABI sceSaveDataDialogGetStatus(void) { return g_status; } int APS5_VABI sceSaveDataDialogUpdateStatus(void) { return g_status; } int APS5_VABI sceSaveDataDialogGetResult(void* result) { if (result == nullptr) { return SAVE_DATA_DIALOG_ERROR_ARG_NULL; } auto* r = static_cast(result); r->mode = g_mode; r->result = SAVE_DATA_DIALOG_RESULT_OK; r->button_id = SAVE_DATA_DIALOG_BUTTON_ID_OK; r->user_data = g_user_data; if (r->dir_name != nullptr && g_dir_name[0] != '\0') { std::snprintf(static_cast(r->dir_name)->data, sizeof(SaveDataDirName::data), "%s", g_dir_name); } return SAVE_DATA_DIALOG_OK; } int APS5_VABI sceSaveDataDialogOpen(const void* param) { if (g_status != SAVE_DATA_DIALOG_STATUS_INITIALIZED && g_status != SAVE_DATA_DIALOG_STATUS_FINISHED) { return SAVE_DATA_DIALOG_ERROR_INVALID_STATE; } if (param == nullptr) { return SAVE_DATA_DIALOG_ERROR_ARG_NULL; } const auto* p = static_cast(param); g_mode = p->mode; g_user_data = p->user_data; g_dir_name[0] = '\0'; const auto* items = static_cast(p->items); if (items != nullptr && items->dir_names != nullptr) { for (std::uint32_t i = 0; i < items->dir_names_num; i++) { const char* name = items->dir_names[i].data; if (name[0] != '\0') { std::snprintf(g_dir_name, sizeof(g_dir_name), "%s", name); break; } } } g_status = SAVE_DATA_DIALOG_STATUS_FINISHED; return SAVE_DATA_DIALOG_OK; } int APS5_VABI sceSaveDataDialogClose(const void* closeParam) { (void)closeParam; g_status = SAVE_DATA_DIALOG_STATUS_FINISHED; return SAVE_DATA_DIALOG_OK; } int APS5_VABI sceSaveDataDialogIsReadyToDisplay(void) { return 1; } int APS5_VABI sceSaveDataDialogTerminate(void) { g_status = SAVE_DATA_DIALOG_STATUS_NONE; g_mode = 0; g_user_data = nullptr; g_dir_name[0] = '\0'; return SAVE_DATA_DIALOG_OK; } int APS5_VABI sceSaveDataDialogProgressBarInc(int target, std::uint32_t delta) { (void)target; (void)delta; return SAVE_DATA_DIALOG_OK; } int APS5_VABI sceSaveDataDialogProgressBarSetValue(int target, std::uint32_t rate) { (void)target; (void)rate; return SAVE_DATA_DIALOG_OK; } }