mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-22 16:43:05 -05:00
libSceCdlgG2P and libSceVrSetupDialog threw from every export. They now run the common-dialog state machine libSceLoginDialog uses: Initialize, Open, the status calls, GetResult, Close and Terminate follow it, the dialog finishes at Open without showing anything, and GetResult reports that the user cancelled, writing only the leading int32 result. The signatures are assumed from the other common dialogs, as TechnicalDebt records. 13 exports move from stubs to implemented. Claude-Session: https://claude.ai/code/session_012SLQbhAiexxW6TtjYToW8a (cherry picked from commit 07992adf80bae9b2d7da4b751cd21c040fa1c5b8)
55 lines
1.8 KiB
C++
55 lines
1.8 KiB
C++
#include "prx/libc/include/general/VabiMacros.hpp"
|
|
#include <cstdint>
|
|
#include <cstdlib>
|
|
|
|
extern "C" {
|
|
int APS5_VABI sceG2PDialogInitialize(void);
|
|
int APS5_VABI sceG2PDialogOpen(const void* param);
|
|
int APS5_VABI sceG2PDialogUpdateStatus(void);
|
|
int APS5_VABI sceG2PDialogGetStatus(void);
|
|
int APS5_VABI sceG2PDialogGetResult(void* result);
|
|
int APS5_VABI sceG2PDialogClose(void);
|
|
int APS5_VABI sceG2PDialogTerminate(void);
|
|
}
|
|
|
|
namespace {
|
|
|
|
void Require(bool value) { if (!value) std::abort(); }
|
|
|
|
constexpr int kStatusFinished = 3;
|
|
constexpr int kErrNotInitialized = static_cast<int>(0x80B80003);
|
|
constexpr int kErrAlreadyInitialized = static_cast<int>(0x80B80004);
|
|
constexpr int kErrNotFinished = static_cast<int>(0x80B80005);
|
|
constexpr int kErrArgNull = static_cast<int>(0x80B8000D);
|
|
constexpr int kResultUserCanceled = 1;
|
|
|
|
}
|
|
|
|
int main() {
|
|
std::int64_t param = 0;
|
|
std::int32_t result[2] = {-1, -1};
|
|
|
|
Require(sceG2PDialogTerminate() == kErrNotInitialized);
|
|
Require(sceG2PDialogOpen(¶m) == kErrNotInitialized);
|
|
Require(sceG2PDialogGetResult(result) == kErrNotInitialized);
|
|
|
|
Require(sceG2PDialogInitialize() == 0);
|
|
Require(sceG2PDialogInitialize() == kErrAlreadyInitialized);
|
|
|
|
Require(sceG2PDialogOpen(nullptr) == kErrArgNull);
|
|
Require(sceG2PDialogGetResult(result) == kErrNotFinished);
|
|
|
|
Require(sceG2PDialogOpen(¶m) == 0);
|
|
Require(sceG2PDialogGetStatus() == kStatusFinished);
|
|
Require(sceG2PDialogUpdateStatus() == kStatusFinished);
|
|
|
|
Require(sceG2PDialogGetResult(nullptr) == kErrArgNull);
|
|
Require(sceG2PDialogGetResult(result) == 0);
|
|
Require(result[0] == kResultUserCanceled);
|
|
Require(result[1] == -1);
|
|
|
|
Require(sceG2PDialogClose() == 0);
|
|
Require(sceG2PDialogTerminate() == 0);
|
|
Require(sceG2PDialogTerminate() == kErrNotInitialized);
|
|
}
|