mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-22 00:22:57 -05:00
113 lines
4.9 KiB
C++
113 lines
4.9 KiB
C++
#include "prx/libc/include/general/VabiMacros.hpp"
|
|
#include <cstdint>
|
|
#include <cstdlib>
|
|
#include <stdexcept>
|
|
#include "prx/libSceCommonDialog/CommonDialog.hpp"
|
|
#include "prx/libSceUserService/UserService.hpp"
|
|
|
|
extern "C" {
|
|
int APS5_VABI sceUserServiceInitialize(const UserServiceInitParam* param);
|
|
int APS5_VABI sceUserServiceTerminate();
|
|
int APS5_VABI scePlayerSelectionDialogInitialize(void);
|
|
int APS5_VABI scePlayerSelectionDialogOpen(const PlayerSelectionDialogParam* param);
|
|
int APS5_VABI scePlayerSelectionDialogUpdateStatus(void);
|
|
int APS5_VABI scePlayerSelectionDialogGetStatus(void);
|
|
int APS5_VABI scePlayerSelectionDialogGetResult(PlayerSelectionDialogResult* result);
|
|
int APS5_VABI scePlayerSelectionDialogParamInitialize(void* param);
|
|
int APS5_VABI scePlayerSelectionDialogClose(void);
|
|
int APS5_VABI scePlayerSelectionDialogTerminate(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() {
|
|
Require(sceUserServiceInitialize(nullptr) == 0);
|
|
PlayerSelectionDialogParam param{};
|
|
param.base.size = sizeof(param.base);
|
|
param.base.magic = static_cast<std::uint32_t>(reinterpret_cast<std::uintptr_t>(¶m)) - 1060003575u;
|
|
param.size = sizeof(param);
|
|
param.userId = USER_SERVICE_INITIAL_USER_ID;
|
|
PlayerSelectionDialogResult result{-1, 99, nullptr, 77, 55};
|
|
|
|
Require(scePlayerSelectionDialogTerminate() == kErrNotInitialized);
|
|
Require(scePlayerSelectionDialogOpen(¶m) == kErrNotInitialized);
|
|
Require(scePlayerSelectionDialogClose() == kErrNotInitialized);
|
|
Require(scePlayerSelectionDialogParamInitialize(nullptr) == kErrArgNull);
|
|
bool threw = false;
|
|
try {
|
|
scePlayerSelectionDialogParamInitialize(¶m);
|
|
} catch (const std::runtime_error&) {
|
|
threw = true;
|
|
}
|
|
Require(threw);
|
|
Require(param.size == sizeof(param));
|
|
Require(scePlayerSelectionDialogGetResult(&result) == kErrNotInitialized);
|
|
Require(scePlayerSelectionDialogGetStatus() == 0);
|
|
Require(scePlayerSelectionDialogUpdateStatus() == 0);
|
|
|
|
Require(scePlayerSelectionDialogInitialize() == 0);
|
|
Require(scePlayerSelectionDialogInitialize() == kErrAlreadyInitialized);
|
|
Require(scePlayerSelectionDialogGetStatus() == 1);
|
|
Require(scePlayerSelectionDialogUpdateStatus() == 1);
|
|
|
|
Require(scePlayerSelectionDialogOpen(nullptr) == kErrArgNull);
|
|
Require(scePlayerSelectionDialogGetResult(&result) == kErrNotFinished);
|
|
|
|
param.size = 0;
|
|
Require(scePlayerSelectionDialogOpen(¶m) == static_cast<int>(0x80B8000Au));
|
|
param.size = sizeof(param);
|
|
param.maxPlayers = 257;
|
|
Require(scePlayerSelectionDialogOpen(¶m) == static_cast<int>(0x80B8000Au));
|
|
param.maxPlayers = 1;
|
|
param.mode = 4;
|
|
Require(scePlayerSelectionDialogOpen(¶m) == static_cast<int>(0x80B8000Au));
|
|
param.mode = 0;
|
|
param.playerCount = 1;
|
|
Require(scePlayerSelectionDialogOpen(¶m) == static_cast<int>(0x80B8000Au));
|
|
PlayerSelectionDialogPlayer player{};
|
|
param.players = &player;
|
|
Require(scePlayerSelectionDialogOpen(¶m) == static_cast<int>(0x80B8000Au));
|
|
player.accountId = 1;
|
|
player.option0 = 1;
|
|
Require(scePlayerSelectionDialogOpen(¶m) == static_cast<int>(0x80B8000Au));
|
|
param.maxPlayers = 2;
|
|
player.option1 = 2;
|
|
Require(scePlayerSelectionDialogOpen(¶m) == static_cast<int>(0x80B8000Au));
|
|
player.option1 = 1;
|
|
player.mode = 3;
|
|
Require(scePlayerSelectionDialogOpen(¶m) == static_cast<int>(0x80B8000Au));
|
|
player.mode = 2;
|
|
player.reserved[63] = 1;
|
|
Require(scePlayerSelectionDialogOpen(¶m) == static_cast<int>(0x80B8000Au));
|
|
player.reserved[63] = 0;
|
|
param.reserved[63] = 1;
|
|
Require(scePlayerSelectionDialogOpen(¶m) == static_cast<int>(0x80B8000Au));
|
|
param.reserved[63] = 0;
|
|
Require(scePlayerSelectionDialogOpen(¶m) == 0);
|
|
Require(scePlayerSelectionDialogGetStatus() == kStatusFinished);
|
|
Require(scePlayerSelectionDialogUpdateStatus() == kStatusFinished);
|
|
|
|
Require(scePlayerSelectionDialogGetResult(nullptr) == kErrArgNull);
|
|
Require(scePlayerSelectionDialogGetResult(&result) == kResultUserCanceled);
|
|
Require(result.result == kResultUserCanceled);
|
|
Require(result.option == 99 && result.accountIds == nullptr && result.count == 77 && result.padding == 55);
|
|
|
|
Require(scePlayerSelectionDialogClose() == static_cast<int>(0x80B8000Bu));
|
|
Require(scePlayerSelectionDialogTerminate() == 0);
|
|
Require(scePlayerSelectionDialogTerminate() == kErrNotInitialized);
|
|
Require(scePlayerSelectionDialogGetStatus() == 0);
|
|
Require(scePlayerSelectionDialogClose() == kErrNotInitialized);
|
|
Require(sceUserServiceTerminate() == 0);
|
|
}
|