mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-22 00:22:57 -05:00
71 lines
2.4 KiB
C++
71 lines
2.4 KiB
C++
#include "SceTypes.hpp"
|
|
#include "prx/libSceCommonDialog/CommonDialog.hpp"
|
|
|
|
#include <cstdint>
|
|
#include <cstdlib>
|
|
#include <cstring>
|
|
|
|
extern "C" {
|
|
int APS5_VABI sceNpCommerceDialogInitialize();
|
|
int APS5_VABI sceNpCommerceDialogOpen(const void* param);
|
|
int APS5_VABI sceNpCommerceDialogOpen2(const NpCommerceDialogParam2* param);
|
|
int APS5_VABI sceNpCommerceDialogUpdateStatus(void);
|
|
int APS5_VABI sceNpCommerceDialogGetStatus(void);
|
|
int APS5_VABI sceNpCommerceDialogGetResult(void* result);
|
|
int APS5_VABI sceNpCommerceDialogClose(void);
|
|
int APS5_VABI sceNpCommerceDialogTerminate();
|
|
}
|
|
|
|
namespace {
|
|
|
|
void Require(bool value) { if (!value) std::abort(); }
|
|
|
|
constexpr int statusNone = 0;
|
|
constexpr int statusInitialized = 1;
|
|
constexpr int statusFinished = 3;
|
|
constexpr std::int32_t resultUserCanceled = 1;
|
|
|
|
void RequireCanceledResult() {
|
|
std::uint8_t result[0x20];
|
|
std::memset(result, 0x33, sizeof(result));
|
|
Require(sceNpCommerceDialogGetResult(result) == 0);
|
|
std::int32_t value = 0;
|
|
std::memcpy(&value, result, sizeof(value));
|
|
Require(value == resultUserCanceled);
|
|
Require(result[4] == 0);
|
|
Require(result[5] == 0x33);
|
|
}
|
|
|
|
}
|
|
|
|
int main() {
|
|
NpCommerceDialogParam2 param2{};
|
|
param2.base.size = sizeof(param2.base);
|
|
param2.base.magic = static_cast<std::uint32_t>(reinterpret_cast<std::uintptr_t>(¶m2)) - 1060003575u;
|
|
param2.size = sizeof(param2);
|
|
param2.userId = 1;
|
|
Require(sceNpCommerceDialogGetStatus() == statusNone);
|
|
Require(sceNpCommerceDialogInitialize() == 0);
|
|
Require(sceNpCommerceDialogGetStatus() == statusInitialized);
|
|
|
|
Require(sceNpCommerceDialogOpen2(¶m2) == 0);
|
|
Require(sceNpCommerceDialogUpdateStatus() == statusFinished);
|
|
Require(sceNpCommerceDialogGetStatus() == statusFinished);
|
|
RequireCanceledResult();
|
|
|
|
Require(sceNpCommerceDialogClose() == 0);
|
|
Require(sceNpCommerceDialogGetStatus() == statusFinished);
|
|
Require(sceNpCommerceDialogTerminate() == 0);
|
|
Require(sceNpCommerceDialogGetStatus() == statusNone);
|
|
|
|
alignas(8) std::uint8_t param[0x40] = {};
|
|
Require(sceNpCommerceDialogInitialize() == 0);
|
|
Require(sceNpCommerceDialogOpen(param) == 0);
|
|
Require(sceNpCommerceDialogOpen2(¶m2) == 0);
|
|
Require(sceNpCommerceDialogUpdateStatus() == statusFinished);
|
|
RequireCanceledResult();
|
|
Require(sceNpCommerceDialogTerminate() == 0);
|
|
Require(sceNpCommerceDialogGetStatus() == statusNone);
|
|
return 0;
|
|
}
|