This commit is contained in:
Pavel 2024-10-11 15:32:17 +03:00
parent 07c1e533d4
commit 5f0bc7b204
2 changed files with 128 additions and 101 deletions

View File

@ -198,10 +198,117 @@ type
end;
end;
function ps4_sceSystemServiceParamGetInt(paramId:Integer;value:Pinteger):Integer;
function GetHostSystemLang:Integer;
var
info:DWORD;
begin
Result:=SCE_SYSTEM_PARAM_LANG_ENGLISH_US;
sig_lock;
info:=GetThreadLocale;
sig_unlock;
info:=info and $FFFF;
Case (info and $3FF) of //LANG_*
LANG_JAPANESE :Result:=SCE_SYSTEM_PARAM_LANG_JAPANESE;
LANG_ENGLISH :
Case (info shr 10) of //SUBLANG_*
SUBLANG_ENGLISH_UK:Result:=SCE_SYSTEM_PARAM_LANG_ENGLISH_GB;
else Result:=SCE_SYSTEM_PARAM_LANG_ENGLISH_US;
end;
LANG_FRENCH :
Case (info shr 10) of //SUBLANG_*
SUBLANG_FRENCH_CANADIAN:Result:=SCE_SYSTEM_PARAM_LANG_FRENCH_CA;
else Result:=SCE_SYSTEM_PARAM_LANG_FRENCH;
end;
LANG_SPANISH :
Case (info shr 10) of //SUBLANG_*
SUBLANG_SPANISH,
SUBLANG_SPANISH_MEXICAN,
SUBLANG_SPANISH_MODERN:Result:=SCE_SYSTEM_PARAM_LANG_SPANISH;
else
Result:=SCE_SYSTEM_PARAM_LANG_SPANISH_LA;
end;
LANG_GERMAN :Result:=SCE_SYSTEM_PARAM_LANG_GERMAN;
LANG_ITALIAN :Result:=SCE_SYSTEM_PARAM_LANG_ITALIAN;
LANG_DUTCH :Result:=SCE_SYSTEM_PARAM_LANG_DUTCH;
LANG_PORTUGUESE:
Case (info shr 10) of //SUBLANG_*
SUBLANG_PORTUGUESE:Result:=SCE_SYSTEM_PARAM_LANG_PORTUGUESE_PT;
else Result:=SCE_SYSTEM_PARAM_LANG_PORTUGUESE_BR;
end;
LANG_RUSSIAN :Result:=SCE_SYSTEM_PARAM_LANG_RUSSIAN;
LANG_KOREAN :Result:=SCE_SYSTEM_PARAM_LANG_KOREAN;
LANG_CHINESE :
Case (info shr 10) of //SUBLANG_*
SUBLANG_CHINESE_SIMPLIFIED:Result:=SCE_SYSTEM_PARAM_LANG_CHINESE_S;
else Result:=SCE_SYSTEM_PARAM_LANG_CHINESE_T;
end;
LANG_FINNISH :Result:=SCE_SYSTEM_PARAM_LANG_FINNISH;
LANG_SWEDISH :Result:=SCE_SYSTEM_PARAM_LANG_SWEDISH;
LANG_DANISH :Result:=SCE_SYSTEM_PARAM_LANG_DANISH;
LANG_NORWEGIAN :Result:=SCE_SYSTEM_PARAM_LANG_NORWEGIAN;
LANG_POLISH :Result:=SCE_SYSTEM_PARAM_LANG_POLISH;
LANG_TURKISH :Result:=SCE_SYSTEM_PARAM_LANG_TURKISH;
LANG_ARABIC :Result:=SCE_SYSTEM_PARAM_LANG_ARABIC;
LANG_CZECH :Result:=SCE_SYSTEM_PARAM_LANG_CZECH;
LANG_HUNGARIAN :Result:=SCE_SYSTEM_PARAM_LANG_HUNGARIAN;
LANG_GREEK :Result:=SCE_SYSTEM_PARAM_LANG_GREEK;
LANG_ROMANIAN :Result:=SCE_SYSTEM_PARAM_LANG_ROMANIAN;
LANG_THAI :Result:=SCE_SYSTEM_PARAM_LANG_THAI;
LANG_VIETNAMESE:Result:=SCE_SYSTEM_PARAM_LANG_VIETNAMESE;
LANG_INDONESIAN:Result:=SCE_SYSTEM_PARAM_LANG_INDONESIAN;
else;
end;
end;
function GetHostSystemDateFormat:Integer;
var
Format:array[0..0] of AnsiChar;
begin
Result:=0;
Format[0]:=#0;
sig_lock;
GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_ILDATE,@Format,1);
sig_unlock;
Case Format[0] of
'0':Result:=SCE_SYSTEM_PARAM_DATE_FORMAT_MMDDYYYY;
'1':Result:=SCE_SYSTEM_PARAM_DATE_FORMAT_DDMMYYYY;
'2':Result:=SCE_SYSTEM_PARAM_DATE_FORMAT_YYYYMMDD;
end;
end;
function GetHostSystemTimeFormat:Integer;
var
Format:array[0..0] of AnsiChar;
begin
Result:=0;
Format[0]:=#0;
sig_lock;
GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_ILDATE,@Format,1);
sig_unlock;
Case Format[0] of
'0':Result:=SCE_SYSTEM_PARAM_TIME_FORMAT_12HOUR;
'1':Result:=SCE_SYSTEM_PARAM_TIME_FORMAT_24HOUR;
end;
end;
function ps4_sceSystemServiceParamGetInt(paramId:Integer;value:Pinteger):Integer;
var
z:timezone;
begin
Result:=0;
@ -212,100 +319,17 @@ begin
Case paramId of
SCE_SYSTEM_SERVICE_PARAM_ID_LANG:
begin
sig_lock;
info:=GetThreadLocale;
sig_unlock;
info:=info and $FFFF;
Case (info and $3FF) of //LANG_*
LANG_JAPANESE :value^:=SCE_SYSTEM_PARAM_LANG_JAPANESE;
LANG_ENGLISH :
Case (info shr 10) of //SUBLANG_*
SUBLANG_ENGLISH_UK:value^:=SCE_SYSTEM_PARAM_LANG_ENGLISH_GB;
else value^:=SCE_SYSTEM_PARAM_LANG_ENGLISH_US;
end;
LANG_FRENCH :
Case (info shr 10) of //SUBLANG_*
SUBLANG_FRENCH_CANADIAN:value^:=SCE_SYSTEM_PARAM_LANG_FRENCH_CA;
else value^:=SCE_SYSTEM_PARAM_LANG_FRENCH;
end;
LANG_SPANISH :
Case (info shr 10) of //SUBLANG_*
SUBLANG_SPANISH,
SUBLANG_SPANISH_MEXICAN,
SUBLANG_SPANISH_MODERN:value^:=SCE_SYSTEM_PARAM_LANG_SPANISH;
else
value^:=SCE_SYSTEM_PARAM_LANG_SPANISH_LA;
end;
LANG_GERMAN :value^:=SCE_SYSTEM_PARAM_LANG_GERMAN;
LANG_ITALIAN :value^:=SCE_SYSTEM_PARAM_LANG_ITALIAN;
LANG_DUTCH :value^:=SCE_SYSTEM_PARAM_LANG_DUTCH;
LANG_PORTUGUESE:
Case (info shr 10) of //SUBLANG_*
SUBLANG_PORTUGUESE:value^:=SCE_SYSTEM_PARAM_LANG_PORTUGUESE_PT;
else value^:=SCE_SYSTEM_PARAM_LANG_PORTUGUESE_BR;
end;
LANG_RUSSIAN :value^:=SCE_SYSTEM_PARAM_LANG_RUSSIAN;
LANG_KOREAN :value^:=SCE_SYSTEM_PARAM_LANG_KOREAN;
LANG_CHINESE :
Case (info shr 10) of //SUBLANG_*
SUBLANG_CHINESE_SIMPLIFIED:value^:=SCE_SYSTEM_PARAM_LANG_CHINESE_S;
else value^:=SCE_SYSTEM_PARAM_LANG_CHINESE_T;
end;
LANG_FINNISH :value^:=SCE_SYSTEM_PARAM_LANG_FINNISH;
LANG_SWEDISH :value^:=SCE_SYSTEM_PARAM_LANG_SWEDISH;
LANG_DANISH :value^:=SCE_SYSTEM_PARAM_LANG_DANISH;
LANG_NORWEGIAN :value^:=SCE_SYSTEM_PARAM_LANG_NORWEGIAN;
LANG_POLISH :value^:=SCE_SYSTEM_PARAM_LANG_POLISH;
LANG_TURKISH :value^:=SCE_SYSTEM_PARAM_LANG_TURKISH;
LANG_ARABIC :value^:=SCE_SYSTEM_PARAM_LANG_ARABIC;
LANG_CZECH :value^:=SCE_SYSTEM_PARAM_LANG_CZECH;
LANG_HUNGARIAN :value^:=SCE_SYSTEM_PARAM_LANG_HUNGARIAN;
LANG_GREEK :value^:=SCE_SYSTEM_PARAM_LANG_GREEK;
LANG_ROMANIAN :value^:=SCE_SYSTEM_PARAM_LANG_ROMANIAN;
LANG_THAI :value^:=SCE_SYSTEM_PARAM_LANG_THAI;
LANG_VIETNAMESE:value^:=SCE_SYSTEM_PARAM_LANG_VIETNAMESE;
LANG_INDONESIAN:value^:=SCE_SYSTEM_PARAM_LANG_INDONESIAN;
else
value^:=SCE_SYSTEM_PARAM_LANG_ENGLISH_US;
end;
value^:=GetHostSystemLang;
end;
SCE_SYSTEM_SERVICE_PARAM_ID_DATE_FORMAT:
begin
Format[0]:=#0;
sig_lock;
GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_ILDATE,@Format,1);
sig_unlock;
Case Format[0] of
'0':value^:=SCE_SYSTEM_PARAM_DATE_FORMAT_MMDDYYYY;
'1':value^:=SCE_SYSTEM_PARAM_DATE_FORMAT_DDMMYYYY;
'2':value^:=SCE_SYSTEM_PARAM_DATE_FORMAT_YYYYMMDD;
end;
value^:=GetHostSystemDateFormat;
end;
SCE_SYSTEM_SERVICE_PARAM_ID_TIME_FORMAT:
begin
Format[0]:=#0;
sig_lock;
GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_ILDATE,@Format,1);
sig_unlock;
Case Format[0] of
'0':value^:=SCE_SYSTEM_PARAM_TIME_FORMAT_12HOUR;
'1':value^:=SCE_SYSTEM_PARAM_TIME_FORMAT_24HOUR;
end;
value^:=GetHostSystemTimeFormat;
end;
SCE_SYSTEM_SERVICE_PARAM_ID_TIME_ZONE:
@ -396,7 +420,7 @@ end;
function ps4_sceSystemServiceGetStatus(status:PSceSystemServiceStatus):Integer;
begin
if (status=nil) then Exit(SCE_SYSTEM_SERVICE_ERROR_PARAMETER);
status^.eventNum:=0;
status^.eventNum :=0;
status^.isSystemUiOverlaid :=false;
status^.isInBackgroundExecution :=false;
status^.isCpuMode7CpuNormal :=true;

View File

@ -35,12 +35,17 @@ type
pSceUserServiceEvent=^SceUserServiceEvent;
SceUserServiceEvent=packed record
eventType:Integer; //SceUserServiceEventType
userId:Integer; //SceUserServiceUserId
userId :Integer; //SceUserServiceUserId
end;
TUserServiceEventCallback=procedure(event:pSceUserServiceEvent;arg:Pointer);
implementation
const
//SceUserServiceUserColor
SCE_USER_SERVICE_USER_COLOR_BLUE =0;
SCE_USER_SERVICE_USER_COLOR_RED =1;
SCE_USER_SERVICE_USER_COLOR_GREEN=2;
SCE_USER_SERVICE_USER_COLOR_PINK =3;
const
SCE_USER_SERVICE_ERROR_NOT_INITIALIZED =-2137653246; //0x80960002
@ -48,6 +53,11 @@ const
SCE_USER_SERVICE_ERROR_NO_EVENT =-2137653241; //0x80960007
SCE_USER_SERVICE_ERROR_BUFFER_TOO_SHORT=-2137653238; //0x8096000A
implementation
const
base_user_id=$167a1a93;
function ps4_sceUserServiceInitialize(params:PUserServiceInitializeParams):Integer;
begin
Result:=0;
@ -69,7 +79,7 @@ var
begin
Result:=-1;
if (List=nil) then Exit;
List^.userId[0]:=$167a1a93;
List^.userId[0]:=base_user_id;
For i:=1 to SCE_USER_SERVICE_MAX_LOGIN_USERS-1 do
List^.userId[i]:=SCE_USER_SERVICE_USER_ID_INVALID;
Result:=0;
@ -78,7 +88,7 @@ end;
function ps4_sceUserServiceGetInitialUser(pUserId:PInteger):Integer;
begin
if (pUserId=nil) then Exit(SCE_USER_SERVICE_ERROR_INVALID_ARGUMENT);
pUserId^:=$167a1a93;
pUserId^:=base_user_id;
Result:=0;
end;
@ -94,7 +104,7 @@ end;
function ps4_sceUserServiceRegisterEventCallback(func:TUserServiceEventCallback;arg:Pointer):Integer;
begin
Writeln('sceUserServiceRegisterEventCallback:',HexStr(func));
//Writeln('sceUserServiceRegisterEventCallback:',HexStr(func));
Result:=0;
end;
@ -113,19 +123,12 @@ begin
event^:=Default(SceUserServiceEvent);
event^.eventType:=SCE_USER_SERVICE_EVENT_TYPE_LOGIN;
event^.userId :=$167a1a93;
event^.userId :=base_user_id;
Result:=0;
end;
end;
const
//SceUserServiceUserColor
SCE_USER_SERVICE_USER_COLOR_BLUE =0;
SCE_USER_SERVICE_USER_COLOR_RED =1;
SCE_USER_SERVICE_USER_COLOR_GREEN=2;
SCE_USER_SERVICE_USER_COLOR_PINK =3;
function ps4_sceUserServiceGetUserColor(userId:Integer;
color:pInteger //SceUserServiceUserColor
):Integer;