Files
AnyPS5/core/libs/prx/libSceNpCommerce/Export.cpp
T
Celegans12andClaude Opus 5.5 05dc3e8982 feat(npcommerce): implement sceNpCommerceSetPsStoreIconLayout
Titles set the PS Store icon layout before they show the icon, and a
title that imports the call stops at startup on the unresolved import.
No PS Store icon is drawn, so like the show and hide calls it accepts
every layout and returns 0 without effect. The signature follows
shadPS4 (a PS4 reference), which also returns OK for every layout.

The libSceNpCommerce entry under "Silent stubs" in TechnicalDebt now
names the function.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 17:51:41 +02:00

83 lines
2.4 KiB
C++

#include <cstdint>
#include <cstddef>
#include <cstring>
#include "SceTypes.hpp"
#include "prx/libc/include/General.hpp"
namespace {
constexpr int COMMON_DIALOG_STATUS_NONE = 0;
constexpr int COMMON_DIALOG_STATUS_INITIALIZED = 1;
constexpr int COMMON_DIALOG_STATUS_FINISHED = 3;
constexpr int COMMON_DIALOG_RESULT_USER_CANCELED = 1;
constexpr int COMMON_DIALOG_ERROR_NOT_INITIALIZED = static_cast<int>(0x80B80003u);
constexpr int COMMON_DIALOG_ERROR_ALREADY_INITIALIZED = static_cast<int>(0x80B80004u);
constexpr int COMMON_DIALOG_ERROR_NOT_FINISHED = static_cast<int>(0x80B80006u);
constexpr int COMMON_DIALOG_ERROR_ARG_NULL = static_cast<int>(0x80B80009u);
int g_status = COMMON_DIALOG_STATUS_NONE;
}
extern "C" {
// The store dialog has nothing to show: every open finishes at once as cancelled by the user.
int APS5_VABI sceNpCommerceDialogInitialize() {
if (g_status != COMMON_DIALOG_STATUS_NONE) return COMMON_DIALOG_ERROR_ALREADY_INITIALIZED;
g_status = COMMON_DIALOG_STATUS_INITIALIZED;
return 0;
}
int APS5_VABI sceNpCommerceDialogOpen(const void* param) {
if (g_status == COMMON_DIALOG_STATUS_NONE) return COMMON_DIALOG_ERROR_NOT_INITIALIZED;
if (param == nullptr) return COMMON_DIALOG_ERROR_ARG_NULL;
g_status = COMMON_DIALOG_STATUS_FINISHED;
return 0;
}
int APS5_VABI sceNpCommerceDialogUpdateStatus(void) {
return g_status;
}
int APS5_VABI sceNpCommerceDialogGetStatus(void) {
return g_status;
}
int APS5_VABI sceNpCommerceDialogGetResult(void* result) {
if (result == nullptr) return COMMON_DIALOG_ERROR_ARG_NULL;
if (g_status != COMMON_DIALOG_STATUS_FINISHED) return COMMON_DIALOG_ERROR_NOT_FINISHED;
// SceNpCommerceDialogResult: int32 result, bool authorized, then reserved bytes.
std::int32_t value = COMMON_DIALOG_RESULT_USER_CANCELED;
std::memcpy(result, &value, sizeof(value));
std::uint8_t authorized = 0;
std::memcpy(static_cast<std::uint8_t*>(result) + sizeof(value), &authorized, sizeof(authorized));
return 0;
}
int APS5_VABI sceNpCommerceDialogClose(void) {
if (g_status == COMMON_DIALOG_STATUS_NONE) return COMMON_DIALOG_ERROR_NOT_INITIALIZED;
g_status = COMMON_DIALOG_STATUS_FINISHED;
return 0;
}
int APS5_VABI sceNpCommerceDialogTerminate() {
g_status = COMMON_DIALOG_STATUS_NONE;
return 0;
}
int APS5_VABI sceNpCommerceHidePsStoreIcon(void) {
return 0;
}
int APS5_VABI sceNpCommerceShowPsStoreIcon(int pos) {
(void)pos;
return 0;
}
int APS5_VABI sceNpCommerceSetPsStoreIconLayout(int layout) {
(void)layout;
return 0;
}
}