// // Generated by dtk // Translation Unit: JASWaveArcLoader.cpp // #include "JSystem/JAudio/JASWaveArcLoader.h" #include "JSystem/JAudio/JASDvdThread.h" #include "JSystem/JAudio/JASSystemHeap.h" #include "JSystem/JKernel/JKRDvdAramRipper.h" #include "JSystem/JUtility/JUTAssert.h" #include "MSL_C/string.h" const u32 DIR_MAX = 64; JASystem::Kernel::THeap JASystem::WaveArcLoader::sAramHeap(NULL); /* 80287BD8-80287C24 .text init__Q28JASystem13WaveArcLoaderFv */ bool JASystem::WaveArcLoader::init() { u32 local_8; void* var1 = Kernel::allocFromSysAramFull(&local_8); if (!var1) { return false; } sAramHeap.initRootHeap(var1, local_8, Kernel::THeap::Type0); return true; } /* 80287C24-80287C30 .text getRootHeap__Q28JASystem13WaveArcLoaderFv */ JASystem::Kernel::THeap* JASystem::WaveArcLoader::getRootHeap() { return &sAramHeap; } char JASystem::WaveArcLoader::sCurrentDir[DIR_MAX] = "/Banks/"; /* 80287C30-80287D24 .text setCurrentDir__Q28JASystem13WaveArcLoaderFPCc */ void JASystem::WaveArcLoader::setCurrentDir(const char* dir) { /* Nonmatching */ //JUT_ASSERT(60, std::strlen(dir) < DIR_MAX); strcpy(sCurrentDir, dir); int len = strlen(sCurrentDir); if (sCurrentDir[len - 1] == '/') { return; } JUT_ASSERT(65, len+1 < DIR_MAX); sCurrentDir[len] = '/'; sCurrentDir[len+1] = 0; } /* 80287D24-80287D30 .text getCurrentDir__Q28JASystem13WaveArcLoaderFv */ char* JASystem::WaveArcLoader::getCurrentDir() { return sCurrentDir; } /* 80287D30-80287DA4 .text __ct__Q28JASystem8TWaveArcFv */ JASystem::TWaveArc::TWaveArc() : field_0x4(this) { field_0x4c = 0; field_0x68 = 0; field_0x6c = -1; field_0x70 = 0; field_0x74 = 0; OSInitMutex(&mMutex); } /* 80287DA4-80287E34 .text loadSetup__Q28JASystem8TWaveArcFUl */ bool JASystem::TWaveArc::loadSetup(u32 param_1) { OSLockMutex(&mMutex); if (field_0x74 != param_1) { OSUnlockMutex(&mMutex); return false; } if (field_0x68 != 1) { OSUnlockMutex(&mMutex); return false; } field_0x4c = 1; field_0x68 = 2; OSUnlockMutex(&mMutex); return true; } /* 80287E34-80287EB8 .text eraseSetup__Q28JASystem8TWaveArcFv */ bool JASystem::TWaveArc::eraseSetup() { OSLockMutex(&mMutex); if (field_0x68 == 0) { OSUnlockMutex(&mMutex); return false; } if (field_0x68 == 1) { field_0x68 = 0; OSUnlockMutex(&mMutex); return false; } field_0x4c = 0; field_0x68 = 0; OSUnlockMutex(&mMutex); return true; } struct unk_message { JASystem::TWaveArc* field_0x0; int field_0x4; void* field_0x8; u32 field_0xc; }; /* 80287EB8-80287F48 .text loadToAramCallback__Q28JASystem8TWaveArcFPv */ s32 JASystem::TWaveArc::loadToAramCallback(void* param_1) { /* Nonmatching */ unk_message* msg = (unk_message*)param_1; if (JKRDvdAramRipper::loadToAram(msg->field_0x4, u32(msg->field_0x8), EXPAND_SWITCH_UNKNOWN0, 0, 0) == 0) { return -1; } TWaveArc* waveArc = msg->field_0x0; if (!waveArc->loadSetup(msg->field_0xc)) { return 0; } waveArc->onLoadDone(); return 0; } /* 80287F48-80287FE4 .text sendLoadCmd__Q28JASystem8TWaveArcFv */ bool JASystem::TWaveArc::sendLoadCmd() { /* Nonmatching */ OSLockMutex(&mMutex); field_0x4c = 0; field_0x68 = 1; unk_message msg; msg.field_0x0 = this; msg.field_0x4 = field_0x6c; msg.field_0x8 = field_0x4.mBase; msg.field_0xc = ++field_0x74; OSUnlockMutex(&mMutex); if (!Dvd::sendCmdMsg(loadToAramCallback, &msg, sizeof(msg))) { field_0x4.free(); return false; } return true; } /* 80287FE4-802880A0 .text load__Q28JASystem8TWaveArcFPQ38JASystem6Kernel5THeap */ bool JASystem::TWaveArc::load(Kernel::THeap*) { /* Nonmatching */ } /* 802880A0-802880C4 .text erase__Q28JASystem8TWaveArcFv */ bool JASystem::TWaveArc::erase() { return field_0x4.free(); } /* 802880C4-8028810C .text onDispose__Q28JASystem8TWaveArcFv */ void JASystem::TWaveArc::onDispose() { if (eraseSetup()) { onEraseDone(); } } /* 8028810C-8028816C .text setEntryNum__Q28JASystem8TWaveArcFl */ void JASystem::TWaveArc::setEntryNum(s32) { /* Nonmatching */ } /* 8028816C-80288214 .text setFileName__Q28JASystem8TWaveArcFPCc */ void JASystem::TWaveArc::setFileName(const char* param_1) { char* currentDir = WaveArcLoader::getCurrentDir(); size_t size = strlen(currentDir); size += strlen(param_1); char* str = new (JKRGetSystemHeap(), -4) char[size + 1]; strcpy(str, currentDir); strcat(str, param_1); str[size] = 0; s32 entry = DVDConvertPathToEntrynum(str); delete[] str; if (entry >= 0) { setEntryNum(entry); } }