Some review changes

This commit is contained in:
Lander Gallastegi 2024-10-10 15:37:33 +02:00
parent 6b65022bde
commit dfce461908
3 changed files with 48 additions and 51 deletions

View File

@ -152,21 +152,9 @@ public:
static_assert(sizeof(CString<13>) == sizeof(char[13])); // Ensure size still matches a simple array static_assert(sizeof(CString<13>) == sizeof(char[13])); // Ensure size still matches a simple array
static_assert(std::weakly_incrementable<CString<13>::Iterator>); static_assert(std::weakly_incrementable<CString<13>::Iterator>);
/**
* @brief A null-terminated wide string with a fixed maximum length
* This class is not meant to be used as a general-purpose string class
* It is meant to be used as `char[N]` where memory layout is fixed
* @tparam N Maximum length of the string
*/
template <size_t N> template <size_t N>
using CWString = CString<N, wchar_t>; using CWString = CString<N, wchar_t>;
/**
* @brief A null-terminated 16-bit char string with a fixed maximum length
* This class is not meant to be used as a general-purpose string class
* It is meant to be used as `char[N]` where memory layout is fixed
* @tparam N Maximum length of the string
*/
template <size_t N> template <size_t N>
using CU16String = CString<N, char16_t>; using CU16String = CString<N, char16_t>;

View File

@ -1,7 +1,7 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project // SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-License-Identifier: GPL-2.0-or-later
#include <algorithm> #include <array>
#include <magic_enum.hpp> #include <magic_enum.hpp>
#include "common/logging/log.h" #include "common/logging/log.h"
#include "core/libraries/error_codes.h" #include "core/libraries/error_codes.h"
@ -9,8 +9,8 @@
#include "ime_dialog.h" #include "ime_dialog.h"
#include "ime_dialog_ui.h" #include "ime_dialog_ui.h"
static constexpr float MAX_X_POSITIONS[] = {3840.0f, 1920.0f}; static constexpr std::array<float, 2> MAX_X_POSITIONS = {3840.0f, 1920.0f};
static constexpr float MAX_Y_POSITIONS[] = {2160.0f, 1080.0f}; static constexpr std::array<float, 2> MAX_Y_POSITIONS = {2160.0f, 1080.0f};
namespace Libraries::ImeDialog { namespace Libraries::ImeDialog {
@ -38,11 +38,6 @@ static bool IsValidOption(OrbisImeDialogOption option, OrbisImeType type) {
return true; return true;
} }
static bool IsMemZero(const void* ptr, size_t size) {
return std::all_of(static_cast<const u8*>(ptr), static_cast<const u8*>(ptr) + size,
[](u8 c) { return c == 0; });
}
Error PS4_SYSV_ABI sceImeDialogAbort() { Error PS4_SYSV_ABI sceImeDialogAbort() {
if (g_ime_dlg_status == OrbisImeDialogStatus::NONE) { if (g_ime_dlg_status == OrbisImeDialogStatus::NONE) {
LOG_INFO(Lib_ImeDialog, "IME dialog not in use"); LOG_INFO(Lib_ImeDialog, "IME dialog not in use");
@ -108,11 +103,6 @@ Error PS4_SYSV_ABI sceImeDialogGetResult(OrbisImeDialogResult* result) {
return Error::INVALID_ADDRESS; return Error::INVALID_ADDRESS;
} }
if (!IsMemZero(result->reserved, 12)) {
LOG_INFO(Lib_ImeDialog, "Invalid result->reserved");
return Error::INVALID_RESERVED;
}
result->endstatus = g_ime_dlg_result.endstatus; result->endstatus = g_ime_dlg_result.endstatus;
if (g_ime_dlg_status == OrbisImeDialogStatus::RUNNING) { if (g_ime_dlg_status == OrbisImeDialogStatus::RUNNING) {
@ -179,16 +169,6 @@ Error PS4_SYSV_ABI sceImeDialogInit(OrbisImeDialogParam* param, OrbisImeParamExt
return Error::INVALID_PARAM; return Error::INVALID_PARAM;
} }
if (param->userId != 1) { // We only support user 1 for now
LOG_INFO(Lib_ImeDialog, "Invalid param->userId");
return Error::INVALID_USER_ID;
}
if (!IsMemZero(param->reserved, 16)) {
LOG_INFO(Lib_ImeDialog, "Invalid param->reserved");
return Error::INVALID_RESERVED;
}
if (param->inputTextBuffer == nullptr) { if (param->inputTextBuffer == nullptr) {
LOG_INFO(Lib_ImeDialog, "Invalid param->inputTextBuffer"); LOG_INFO(Lib_ImeDialog, "Invalid param->inputTextBuffer");
return Error::INVALID_INPUT_TEXT_BUFFER; return Error::INVALID_INPUT_TEXT_BUFFER;
@ -202,11 +182,6 @@ Error PS4_SYSV_ABI sceImeDialogInit(OrbisImeDialogParam* param, OrbisImeParamExt
// TODO: do correct extended->option validation // TODO: do correct extended->option validation
if (!IsMemZero(extended->reserved, 60)) {
LOG_INFO(Lib_ImeDialog, "Invalid extended->reserved");
return Error::INVALID_EXTENDED;
}
if ((extended->extKeyboardMode & 0xe3fffffc) != 0) { if ((extended->extKeyboardMode & 0xe3fffffc) != 0) {
LOG_INFO(Lib_ImeDialog, "Invalid extended->extKeyboardMode"); LOG_INFO(Lib_ImeDialog, "Invalid extended->extKeyboardMode");
return Error::INVALID_EXTENDED; return Error::INVALID_EXTENDED;

View File

@ -53,16 +53,35 @@ enum class Error : u32 {
DIALOG_INVALID_TITLE = 0x80bc0101, DIALOG_INVALID_TITLE = 0x80bc0101,
DIALOG_NOT_RUNNING = 0x80bc0105, DIALOG_NOT_RUNNING = 0x80bc0105,
DIALOG_NOT_FINISHED = 0x80bc0106, DIALOG_NOT_FINISHED = 0x80bc0106,
DIALOG_NOT_IN_USE = 0x80bc0107 DIALOG_NOT_IN_USE = 0x80bc0107,
}; };
enum class OrbisImeDialogStatus : u32 { NONE = 0, RUNNING = 1, FINISHED = 2 }; enum class OrbisImeDialogStatus : u32 {
NONE = 0,
RUNNING = 1,
FINISHED = 2,
};
enum class OrbisImeDialogEndStatus : u32 { OK = 0, USER_CANCELED = 1, ABORTED = 2 }; enum class OrbisImeDialogEndStatus : u32 {
OK = 0,
USER_CANCELED = 1,
ABORTED = 2,
};
enum class OrbisImeType : u32 { DEFAULT = 0, BASIC_LATIN = 1, URL = 2, MAIL = 3, NUMBER = 4 }; enum class OrbisImeType : u32 {
DEFAULT = 0,
BASIC_LATIN = 1,
URL = 2,
MAIL = 3,
NUMBER = 4,
};
enum class OrbisImeEnterLabel : u32 { DEFAULT = 0, SEND = 1, SEARCH = 2, GO = 3 }; enum class OrbisImeEnterLabel : u32 {
DEFAULT = 0,
SEND = 1,
SEARCH = 2,
GO = 3,
};
enum class OrbisImeDialogOption : u32 { enum class OrbisImeDialogOption : u32 {
DEFAULT = 0, DEFAULT = 0,
@ -70,18 +89,33 @@ enum class OrbisImeDialogOption : u32 {
NO_AUTO_CORRECTION = 2, NO_AUTO_CORRECTION = 2,
NO_AUTO_COMPLETION = 4, NO_AUTO_COMPLETION = 4,
// TODO: Document missing options // TODO: Document missing options
LARGE_RESOLUTION = 1024 LARGE_RESOLUTION = 1024,
}; };
DECLARE_ENUM_FLAG_OPERATORS(OrbisImeDialogOption) DECLARE_ENUM_FLAG_OPERATORS(OrbisImeDialogOption)
enum class OrbisImeInputMethod : u32 { DEFAULT = 0 }; enum class OrbisImeInputMethod : u32 {
DEFAULT = 0,
};
enum class OrbisImeHorizontalAlignment : u32 { LEFT = 0, CENTER = 1, RIGHT = 2 }; enum class OrbisImeHorizontalAlignment : u32 {
LEFT = 0,
CENTER = 1,
RIGHT = 2,
};
enum class OrbisImeVerticalAlignment : u32 { TOP = 0, CENTER = 1, BOTTOM = 2 }; enum class OrbisImeVerticalAlignment : u32 {
TOP = 0,
CENTER = 1,
BOTTOM = 2,
};
enum class OrbisImePanelPriority : u32 { DEFAULT = 0, ALPHABET = 1, SYMBOL = 2, ACCENT = 3 }; enum class OrbisImePanelPriority : u32 {
DEFAULT = 0,
ALPHABET = 1,
SYMBOL = 2,
ACCENT = 3,
};
enum class OrbisImeKeyboardType : u32 { enum class OrbisImeKeyboardType : u32 {
NONE = 0, NONE = 0,
@ -121,7 +155,7 @@ enum class OrbisImeKeyboardType : u32 {
INDONESIAN = 34, INDONESIAN = 34,
VIETNAMESE = 35, VIETNAMESE = 35,
ROMANIAN = 36, ROMANIAN = 36,
HUNGARIAN = 37 HUNGARIAN = 37,
}; };
struct OrbisImeColor { struct OrbisImeColor {