summaryrefslogtreecommitdiff
path: root/libs/JSystem/JUtility
diff options
context:
space:
mode:
authorJasper St. Pierre <jstpierre@mecheye.net>2021-05-10 08:54:07 -0700
committerGitHub <noreply@github.com>2021-05-10 11:54:07 -0400
commit462d71cbef02ef119fc2aa480b98cfeedde46441 (patch)
tree923ed9f6f939c3e4b64dba0070e1539d05910089 /libs/JSystem/JUtility
parent9799fadfe84344fa3ea78835365570d832a476c7 (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.cpp119
-rw-r--r--libs/JSystem/JUtility/Makefile2
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