diff options
| author | Jasper St. Pierre <jstpierre@mecheye.net> | 2021-05-10 08:54:07 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-05-10 11:54:07 -0400 |
| commit | 462d71cbef02ef119fc2aa480b98cfeedde46441 (patch) | |
| tree | 923ed9f6f939c3e4b64dba0070e1539d05910089 /libs/JSystem/JUtility | |
| parent | 9799fadfe84344fa3ea78835365570d832a476c7 (diff) | |
Makefile fixes / JUTNameTab (#129)
* Makefile: Fix issues with iconv causing it to break under devkitPro / msys
The version of iconv included in devkitPro does not have a -o option,
so replace it with normal shell redirection. Also, SHIFT-JIS does not
have a mapping for ~, so output the Windows CP932 variant instead,
which does. See:
https://en.wikipedia.org/wiki/Tilde#Unicode_and_Shift_JIS_encoding_of_wave_dash
https://en.wikipedia.org/wiki/Code_page_932_(Microsoft_Windows)#Single-byte_character_differences
* Update diff configuration
-Bbinary doesn't seem to work with my copy of
bjdump (it says it can't decode unknown architecture)
Cheese things by using expected/ instead of having
the user place things manually.
* JUTNameTab
* J3DPacket / J3DDrawBuffer
* format
Co-authored-by: lepelog <lepelog@users.noreply.github.com>
Diffstat (limited to 'libs/JSystem/JUtility')
| -rw-r--r-- | libs/JSystem/JUtility/JUTNameTab.cpp | 119 | ||||
| -rw-r--r-- | libs/JSystem/JUtility/Makefile | 2 |
2 files changed, 34 insertions, 87 deletions
diff --git a/libs/JSystem/JUtility/JUTNameTab.cpp b/libs/JSystem/JUtility/JUTNameTab.cpp index 2aca981c22..5cc29e9a90 100644 --- a/libs/JSystem/JUtility/JUTNameTab.cpp +++ b/libs/JSystem/JUtility/JUTNameTab.cpp @@ -6,102 +6,49 @@ #include "JSystem/JUtility/JUTNameTab.h" #include "dol2asm.h" #include "dolphin/types.h" +#include "msl_c/string.h" -// -// Types: -// - -struct ResNTAB {}; - -struct JUTNameTab { - /* 802DE9A0 */ JUTNameTab(); - /* 802DE9E0 */ JUTNameTab(ResNTAB const*); - /* 802DEA1C */ void setResource(ResNTAB const*); - /* 802DEA58 */ void getIndex(char const*) const; - /* 802DEAF8 */ void getName(u16) const; - /* 802DEB28 */ void calcKeyCode(char const*) const; -}; - -// -// Forward References: -// - -extern "C" void __ct__10JUTNameTabFv(); -extern "C" void __ct__10JUTNameTabFPC7ResNTAB(); -extern "C" void setResource__10JUTNameTabFPC7ResNTAB(); -extern "C" void getIndex__10JUTNameTabCFPCc(); -extern "C" void getName__10JUTNameTabCFUs(); -extern "C" void calcKeyCode__10JUTNameTabCFPCc(); - -// -// External References: -// +JUTNameTab::JUTNameTab() { + setResource(NULL); +} -extern "C" void _savegpr_26(); -extern "C" void _restgpr_26(); -extern "C" void strcmp(); -extern "C" extern void* __vt__10JUTNameTab[3]; +JUTNameTab::JUTNameTab(const ResNTAB* pNameTable) { + setResource(pNameTable); +} -// -// Declarations: -// +void JUTNameTab::setResource(const ResNTAB* pNameTable) { + mpNameTable = pNameTable; -/* 802DE9A0-802DE9E0 2D92E0 0040+00 0/0 5/5 0/0 .text __ct__10JUTNameTabFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JUTNameTab::JUTNameTab() { - nofralloc -#include "asm/JSystem/JUtility/JUTNameTab/__ct__10JUTNameTabFv.s" + if (pNameTable != NULL) { + mNameNum = pNameTable->mEntryNum; + mpStrData = (const char*)(pNameTable->mEntries + mNameNum); + } else { + mNameNum = 0; + mpStrData = 0; + } } -#pragma pop -/* 802DE9E0-802DEA1C 2D9320 003C+00 0/0 12/12 0/0 .text __ct__10JUTNameTabFPC7ResNTAB */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JUTNameTab::JUTNameTab(ResNTAB const* param_0) { - nofralloc -#include "asm/JSystem/JUtility/JUTNameTab/__ct__10JUTNameTabFPC7ResNTAB.s" -} -#pragma pop +s32 JUTNameTab::getIndex(const char* pName) const { + const ResNTAB::Entry* pEntry = mpNameTable->mEntries; + u16 keyCode = calcKeyCode(pName); -/* 802DEA1C-802DEA58 2D935C 003C+00 2/2 10/10 0/0 .text setResource__10JUTNameTabFPC7ResNTAB */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JUTNameTab::setResource(ResNTAB const* param_0) { - nofralloc -#include "asm/JSystem/JUtility/JUTNameTab/setResource__10JUTNameTabFPC7ResNTAB.s" -} -#pragma pop + for (u16 i = 0; i < mNameNum; pEntry++, i++) + if (pEntry->mKeyCode == keyCode && + strcmp((mpNameTable->mEntries[i].mOffs + ((const char*)mpNameTable)), pName) == 0) + return i; -/* 802DEA58-802DEAF8 2D9398 00A0+00 0/0 9/9 2/2 .text getIndex__10JUTNameTabCFPCc */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JUTNameTab::getIndex(char const* param_0) const { - nofralloc -#include "asm/JSystem/JUtility/JUTNameTab/getIndex__10JUTNameTabCFPCc.s" + return -1; } -#pragma pop -/* 802DEAF8-802DEB28 2D9438 0030+00 0/0 14/14 23/23 .text getName__10JUTNameTabCFUs */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JUTNameTab::getName(u16 param_0) const { - nofralloc -#include "asm/JSystem/JUtility/JUTNameTab/getName__10JUTNameTabCFUs.s" +const char* JUTNameTab::getName(u16 index) const { + if (index < mNameNum) + return mpNameTable->getName(index); + return NULL; } -#pragma pop -/* 802DEB28-802DEB58 2D9468 0030+00 1/1 0/0 0/0 .text calcKeyCode__10JUTNameTabCFPCc */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JUTNameTab::calcKeyCode(char const* param_0) const { - nofralloc -#include "asm/JSystem/JUtility/JUTNameTab/calcKeyCode__10JUTNameTabCFPCc.s" +u16 JUTNameTab::calcKeyCode(const char* pName) const { + u32 keyCode = 0; + while (*pName) + keyCode = (keyCode * 3) + *pName++; + return keyCode; } -#pragma pop diff --git a/libs/JSystem/JUtility/Makefile b/libs/JSystem/JUtility/Makefile index 03fee1d7de..e1b97dfd47 100644 --- a/libs/JSystem/JUtility/Makefile +++ b/libs/JSystem/JUtility/Makefile @@ -62,6 +62,6 @@ $(BUILD_DIR)/libJUtility.a: $(LIBJUTILITY_A_O_FILES) $(BUILD_DIR)/libs/JSystem/JUtility/%.o: libs/JSystem/JUtility/%.cpp @mkdir -p $(@D) @echo building... $< - @iconv -f UTF-8 -t SHIFT-JIS -o $@.iconv.cpp $< + @iconv -f UTF-8 -t CP932 < $< > $@.iconv.cpp @$(CC) $(CFLAGS) $(LIBJUTILITY_A_CFLAGS) -c -o $@ $@.iconv.cpp |
