mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-08 16:01:42 +12:00
cellMsgDialog functions improved
Callback can return result now
This commit is contained in:
parent
e29a1ddef7
commit
abbbaa222b
9 changed files with 579 additions and 195 deletions
|
@ -10,11 +10,11 @@
|
|||
|
||||
#include "cellSysutil.h"
|
||||
#include "cellSysutil_SaveData.h"
|
||||
#include "cellMsgDialog.h"
|
||||
#include "cellGame.h"
|
||||
|
||||
#include "Loader/PSF.h"
|
||||
|
||||
typedef void (*CellMsgDialogCallback)(int buttonType, mem_ptr_t<void> userData);
|
||||
typedef void (*CellHddGameStatCallback)(mem_ptr_t<CellHddGameCBResult> cbResult, mem_ptr_t<CellHddGameStatGet> get, mem_ptr_t<CellHddGameStatSet> set);
|
||||
|
||||
|
||||
|
@ -381,160 +381,6 @@ int cellSysutilUnregisterCallback(int slot)
|
|||
return CELL_OK;
|
||||
}
|
||||
|
||||
int cellMsgDialogOpen2(u32 type, mem_list_ptr_t<u8> msgString, mem_func_ptr_t<CellMsgDialogCallback> callback, mem_ptr_t<void> userData, u32 extParam)
|
||||
{
|
||||
cellSysutil->Warning("cellMsgDialogOpen2(type=0x%x, msgString_addr=0x%x, callback_addr=0x%x, userData=0x%x, extParam=0x%x)",
|
||||
type, msgString.GetAddr(), callback.GetAddr(), userData.GetAddr(), extParam);
|
||||
|
||||
long style = 0;
|
||||
|
||||
if(type & CELL_MSGDIALOG_DIALOG_TYPE_NORMAL)
|
||||
{
|
||||
style |= rICON_EXCLAMATION;
|
||||
}
|
||||
else
|
||||
{
|
||||
style |= rICON_ERROR;
|
||||
}
|
||||
|
||||
if(type & CELL_MSGDIALOG_BUTTON_TYPE_YESNO)
|
||||
{
|
||||
style |= rYES_NO;
|
||||
}
|
||||
else
|
||||
{
|
||||
style |= rOK;
|
||||
}
|
||||
|
||||
int res = rMessageBox(std::string(msgString.GetString()), rGetApp().GetAppName(), style);
|
||||
|
||||
u64 status;
|
||||
|
||||
switch(res)
|
||||
{
|
||||
case rOK: status = CELL_MSGDIALOG_BUTTON_OK; break;
|
||||
case rYES: status = CELL_MSGDIALOG_BUTTON_YES; break;
|
||||
case rNO: status = CELL_MSGDIALOG_BUTTON_NO; break;
|
||||
|
||||
default:
|
||||
if(res)
|
||||
{
|
||||
status = CELL_MSGDIALOG_BUTTON_INVALID;
|
||||
break;
|
||||
}
|
||||
|
||||
status = CELL_MSGDIALOG_BUTTON_NONE;
|
||||
break;
|
||||
}
|
||||
|
||||
if(callback)
|
||||
callback(status, userData);
|
||||
|
||||
return CELL_OK;
|
||||
}
|
||||
|
||||
int cellMsgDialogOpenErrorCode(u32 errorCode, mem_func_ptr_t<CellMsgDialogCallback> callback, mem_ptr_t<void> userData, u32 extParam)
|
||||
{
|
||||
cellSysutil->Warning("cellMsgDialogOpenErrorCode(errorCode=0x%x, callback_addr=0x%x, userData=%d, extParam=%d)",
|
||||
errorCode, callback.GetAddr(), userData, extParam);
|
||||
|
||||
std::string errorMessage;
|
||||
switch(errorCode)
|
||||
{
|
||||
// Generic errors
|
||||
case 0x80010001: errorMessage = "The resource is temporarily unavailable."; break;
|
||||
case 0x80010002: errorMessage = "Invalid argument or flag."; break;
|
||||
case 0x80010003: errorMessage = "The feature is not yet implemented."; break;
|
||||
case 0x80010004: errorMessage = "Memory allocation failed."; break;
|
||||
case 0x80010005: errorMessage = "The resource with the specified identifier does not exist."; break;
|
||||
case 0x80010006: errorMessage = "The file does not exist."; break;
|
||||
case 0x80010007: errorMessage = "The file is in unrecognized format / The file is not a valid ELF file."; break;
|
||||
case 0x80010008: errorMessage = "Resource deadlock is avoided."; break;
|
||||
case 0x80010009: errorMessage = "Operation not permitted."; break;
|
||||
case 0x8001000A: errorMessage = "The device or resource is bus."; break;
|
||||
case 0x8001000B: errorMessage = "The operation is timed ou."; break;
|
||||
case 0x8001000C: errorMessage = "The operation is aborte."; break;
|
||||
case 0x8001000D: errorMessage = "Invalid memory access."; break;
|
||||
case 0x8001000F: errorMessage = "State of the target thread is invalid."; break;
|
||||
case 0x80010010: errorMessage = "Alignment is invalid."; break;
|
||||
case 0x80010011: errorMessage = "Shortage of the kernel resources."; break;
|
||||
case 0x80010012: errorMessage = "The file is a directory."; break;
|
||||
case 0x80010013: errorMessage = "Operation canceled."; break;
|
||||
case 0x80010014: errorMessage = "Entry already exists."; break;
|
||||
case 0x80010015: errorMessage = "Port is already connected."; break;
|
||||
case 0x80010016: errorMessage = "Port is not connected."; break;
|
||||
case 0x80010017: errorMessage = "Failure in authorizing SELF. Program authentication fail."; break;
|
||||
case 0x80010018: errorMessage = "The file is not MSELF."; break;
|
||||
case 0x80010019: errorMessage = "System version error."; break;
|
||||
case 0x8001001A: errorMessage = "Fatal system error occurred while authorizing SELF. SELF auth failure."; break;
|
||||
case 0x8001001B: errorMessage = "Math domain violation."; break;
|
||||
case 0x8001001C: errorMessage = "Math range violation."; break;
|
||||
case 0x8001001D: errorMessage = "Illegal multi-byte sequence in input."; break;
|
||||
case 0x8001001E: errorMessage = "File position error."; break;
|
||||
case 0x8001001F: errorMessage = "Syscall was interrupted."; break;
|
||||
case 0x80010020: errorMessage = "File too large."; break;
|
||||
case 0x80010021: errorMessage = "Too many links."; break;
|
||||
case 0x80010022: errorMessage = "File table overflow."; break;
|
||||
case 0x80010023: errorMessage = "No space left on device."; break;
|
||||
case 0x80010024: errorMessage = "Not a TTY."; break;
|
||||
case 0x80010025: errorMessage = "Broken pipe."; break;
|
||||
case 0x80010026: errorMessage = "Read-only filesystem."; break;
|
||||
case 0x80010027: errorMessage = "Illegal seek."; break;
|
||||
case 0x80010028: errorMessage = "Arg list too long."; break;
|
||||
case 0x80010029: errorMessage = "Access violation."; break;
|
||||
case 0x8001002A: errorMessage = "Invalid file descriptor."; break;
|
||||
case 0x8001002B: errorMessage = "Filesystem mounting failed."; break;
|
||||
case 0x8001002C: errorMessage = "Too many files open."; break;
|
||||
case 0x8001002D: errorMessage = "No device."; break;
|
||||
case 0x8001002E: errorMessage = "Not a directory."; break;
|
||||
case 0x8001002F: errorMessage = "No such device or IO."; break;
|
||||
case 0x80010030: errorMessage = "Cross-device link error."; break;
|
||||
case 0x80010031: errorMessage = "Bad Message."; break;
|
||||
case 0x80010032: errorMessage = "In progress."; break;
|
||||
case 0x80010033: errorMessage = "Message size error."; break;
|
||||
case 0x80010034: errorMessage = "Name too long."; break;
|
||||
case 0x80010035: errorMessage = "No lock."; break;
|
||||
case 0x80010036: errorMessage = "Not empty."; break;
|
||||
case 0x80010037: errorMessage = "Not supported."; break;
|
||||
case 0x80010038: errorMessage = "File-system specific error."; break;
|
||||
case 0x80010039: errorMessage = "Overflow occured."; break;
|
||||
case 0x8001003A: errorMessage = "Filesystem not mounted."; break;
|
||||
case 0x8001003B: errorMessage = "Not SData."; break;
|
||||
case 0x8001003C: errorMessage = "Incorrect version in sys_load_param."; break;
|
||||
case 0x8001003D: errorMessage = "Pointer is null."; break;
|
||||
case 0x8001003E: errorMessage = "Pointer is null."; break;
|
||||
default: errorMessage = "An error has occurred."; break;
|
||||
}
|
||||
|
||||
char errorCodeHex [9];
|
||||
sprintf(errorCodeHex, "%08x", errorCode);
|
||||
errorMessage.append("\n(");
|
||||
errorMessage.append(errorCodeHex);
|
||||
errorMessage.append(")\n");
|
||||
|
||||
u64 status;
|
||||
int res = rMessageBox(errorMessage, rGetApp().GetAppName(), rICON_ERROR | rOK);
|
||||
switch(res)
|
||||
{
|
||||
case rOK: status = CELL_MSGDIALOG_BUTTON_OK; break;
|
||||
default:
|
||||
if(res)
|
||||
{
|
||||
status = CELL_MSGDIALOG_BUTTON_INVALID;
|
||||
break;
|
||||
}
|
||||
|
||||
status = CELL_MSGDIALOG_BUTTON_NONE;
|
||||
break;
|
||||
}
|
||||
|
||||
if(callback)
|
||||
callback(status, userData);
|
||||
|
||||
return CELL_OK;
|
||||
}
|
||||
|
||||
|
||||
int cellAudioOutGetSoundAvailability(u32 audioOut, u32 type, u32 fs, u32 option)
|
||||
{
|
||||
cellSysutil->Warning("cellAudioOutGetSoundAvailability(audioOut=%d, type=%d, fs=0x%x, option=%d)",
|
||||
|
@ -1023,6 +869,11 @@ void cellSysutil_init()
|
|||
|
||||
cellSysutil->AddFunc(0x7603d3db, cellMsgDialogOpen2);
|
||||
cellSysutil->AddFunc(0x3e22cb4b, cellMsgDialogOpenErrorCode);
|
||||
cellSysutil->AddFunc(0x9d6af72a, cellMsgDialogProgressBarSetMsg);
|
||||
cellSysutil->AddFunc(0x7bc2c8a8, cellMsgDialogProgressBarReset);
|
||||
cellSysutil->AddFunc(0x94862702, cellMsgDialogProgressBarInc);
|
||||
cellSysutil->AddFunc(0x20543730, cellMsgDialogClose);
|
||||
cellSysutil->AddFunc(0x62b0f803, cellMsgDialogAbort);
|
||||
|
||||
cellSysutil->AddFunc(0xf4e3caa0, cellAudioOutGetState);
|
||||
cellSysutil->AddFunc(0x4692ab35, cellAudioOutConfigure);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue