From 390853e509b67bd495fd88693f3367293a5518b3 Mon Sep 17 00:00:00 2001 From: PoloNX Date: Mon, 19 Jun 2023 16:46:38 +0200 Subject: [PATCH] add nacpGetLanguageEntrySpecialLanguage --- nx/include/switch/nacp.h | 4 ++++ nx/source/runtime/nacp.c | 43 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/nx/include/switch/nacp.h b/nx/include/switch/nacp.h index 0a03c4d5..d6c732ac 100644 --- a/nx/include/switch/nacp.h +++ b/nx/include/switch/nacp.h @@ -92,3 +92,7 @@ typedef struct { /// If you're using ns you may want to use \ref nsGetApplicationDesiredLanguage instead. Result nacpGetLanguageEntry(NacpStruct* nacp, NacpLanguageEntry** langentry); + +//Same thank nacpGetLanguageEntry, except this uses the input languageChoosen instead of the system language. +Result nacpGetLanguageEntrySpecialLanguage(NacpStruct* nacp, NacpLanguageEntry** langentry, const u32 languageChoosen); + diff --git a/nx/source/runtime/nacp.c b/nx/source/runtime/nacp.c index 6d31c529..dae65a8f 100644 --- a/nx/source/runtime/nacp.c +++ b/nx/source/runtime/nacp.c @@ -74,3 +74,46 @@ Result nacpGetLanguageEntry(NacpStruct* nacp, NacpLanguageEntry** langentry) { return rc; } +Result nacpGetLanguageEntrySpecialLanguage(NacpStruct* nacp, NacpLanguageEntry** langentry, const u32 languageChoosen) { + Result rc=0; + SetLanguage Language= languageChoosen; + NacpLanguageEntry *entry = NULL; + u32 i=0; + + if (nacp==NULL || langentry==NULL) + return MAKERESULT(Module_Libnx, LibnxError_BadInput); + + *langentry = NULL; + + rc = setInitialize(); + if (R_FAILED(rc)) + return rc; + + if (Language < 0) + rc = MAKERESULT(Module_Libnx, LibnxError_BadInput); + + if (R_SUCCEEDED(rc) && Language >= 15) + Language = SetLanguage_ENUS;//Use ENUS for unsupported system languages. + + setExit(); + + if (R_FAILED(rc)) + return rc; + + entry = &nacp->lang[g_nacpLanguageTable[Language]]; + + if (entry->name[0]==0 && entry->author[0]==0) { + for(i=0; i<16; i++) { + entry = &nacp->lang[i]; + if (entry->name[0] || entry->author[0]) break; + } + } + + if (entry->name[0]==0 && entry->author[0]==0) + return rc; + + *langentry = entry; + + return rc; +} +