diff --git a/src/ps4_libscesystemservice.pas b/src/ps4_libscesystemservice.pas index c0dfc006..0af3ec68 100644 --- a/src/ps4_libscesystemservice.pas +++ b/src/ps4_libscesystemservice.pas @@ -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; diff --git a/src/ps4_libsceuserservice.pas b/src/ps4_libsceuserservice.pas index cab6e18a..20cf1cf4 100644 --- a/src/ps4_libsceuserservice.pas +++ b/src/ps4_libsceuserservice.pas @@ -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;