mirror of https://github.com/zeldaret/tp.git
120 lines
3.5 KiB
C++
120 lines
3.5 KiB
C++
//
|
|
// Generated By: dol2asm
|
|
// Translation Unit: JKRFileFinder
|
|
//
|
|
|
|
#include "JSystem/JKernel/JKRFileFinder.h"
|
|
#include "JSystem/JKernel/JKRArchive.h"
|
|
#include "dol2asm.h"
|
|
#include "dolphin/types.h"
|
|
|
|
//
|
|
// Forward References:
|
|
//
|
|
|
|
extern "C" void __ct__12JKRArcFinderFP10JKRArchivell();
|
|
extern "C" void findNextFile__12JKRArcFinderFv();
|
|
extern "C" void __ct__12JKRDvdFinderFPCc();
|
|
extern "C" void __dt__12JKRDvdFinderFv();
|
|
extern "C" void findNextFile__12JKRDvdFinderFv();
|
|
extern "C" void __dt__13JKRFileFinderFv();
|
|
extern "C" void __dt__12JKRArcFinderFv();
|
|
extern "C" void* __vt__12JKRDvdFinder;
|
|
extern "C" void* __vt__13JKRFileFinder;
|
|
|
|
//
|
|
// External References:
|
|
//
|
|
|
|
extern "C" void __dl__FPv();
|
|
extern "C" void getDirEntry__10JKRArchiveCFPQ210JKRArchive9SDirEntryUl();
|
|
|
|
//
|
|
// Declarations:
|
|
//
|
|
|
|
/* 802D4638-802D46C4 2CEF78 008C+00 0/0 1/1 0/0 .text __ct__12JKRArcFinderFP10JKRArchivell */
|
|
JKRArcFinder::JKRArcFinder(JKRArchive* archive, s32 startIndex, s32 numEntries) : JKRFileFinder() {
|
|
mArchive = archive;
|
|
mIsAvailable = numEntries > 0;
|
|
mStartIndex = startIndex;
|
|
mEndIndex = startIndex + numEntries - 1;
|
|
mNextIndex = mStartIndex;
|
|
findNextFile();
|
|
}
|
|
|
|
/* 802D46C4-802D4770 2CF004 00AC+00 1/0 0/0 0/0 .text findNextFile__12JKRArcFinderFv */
|
|
bool JKRArcFinder::findNextFile(void) {
|
|
JKRArchive::SDirEntry entry;
|
|
|
|
if (mIsAvailable) {
|
|
mIsAvailable = !(mNextIndex > mEndIndex);
|
|
if (mIsAvailable) {
|
|
mIsAvailable = mArchive->getDirEntry(&entry, mNextIndex);
|
|
mEntryName = entry.name;
|
|
mEntryFileIndex = mNextIndex;
|
|
mEntryId = entry.other.id;
|
|
mEntryTypeFlags = entry.other.flags;
|
|
mIsFileOrDirectory = (mEntryTypeFlags >> 1) & 1;
|
|
mNextIndex++;
|
|
}
|
|
}
|
|
return mIsAvailable;
|
|
}
|
|
|
|
/* 802D4770-802D47F4 2CF0B0 0084+00 0/0 1/1 0/0 .text __ct__12JKRDvdFinderFPCc */
|
|
JKRDvdFinder::JKRDvdFinder(const char* directory) : JKRFileFinder() {
|
|
mDvdIsOpen = DVDOpenDir(directory, &mDvdDirectory);
|
|
mIsAvailable = mDvdIsOpen;
|
|
findNextFile();
|
|
}
|
|
|
|
/* 802D47F4-802D4874 2CF134 0080+00 1/0 0/0 0/0 .text __dt__12JKRDvdFinderFv */
|
|
// JKRFileFinder::~JKRFileFinder is not inlined
|
|
#ifdef NONMATCHING
|
|
JKRDvdFinder::~JKRDvdFinder() {
|
|
if (mDvdIsOpen) {
|
|
DVDCloseDir(&mDvdDirectory);
|
|
}
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm JKRDvdFinder::~JKRDvdFinder() {
|
|
nofralloc
|
|
#include "asm/JSystem/JKernel/JKRFileFinder/__dt__12JKRDvdFinderFv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 802D4874-802D4910 2CF1B4 009C+00 1/0 0/0 0/0 .text findNextFile__12JKRDvdFinderFv */
|
|
bool JKRDvdFinder::findNextFile(void) {
|
|
if (mIsAvailable) {
|
|
DVDDirectoryEntry directoryEntry;
|
|
mIsAvailable = DVDReadDir(&mDvdDirectory, &directoryEntry);
|
|
|
|
if (mIsAvailable) {
|
|
mIsFileOrDirectory = directoryEntry.is_directory != 0;
|
|
mEntryName = directoryEntry.name;
|
|
mEntryFileIndex = directoryEntry.entry_number;
|
|
mEntryId = 0;
|
|
|
|
// only matches with enum
|
|
// TODO: placeholder
|
|
enum EntryTypeFlags {
|
|
EntryTypeFlags1 = 1,
|
|
EntryTypeFlags2 = 2,
|
|
};
|
|
mEntryTypeFlags = mIsFileOrDirectory ? EntryTypeFlags2 : EntryTypeFlags1;
|
|
}
|
|
}
|
|
|
|
return mIsAvailable;
|
|
}
|
|
|
|
inline JKRFileFinder::~JKRFileFinder() {}
|
|
|
|
/* 802D4958-802D49B4 2CF298 005C+00 1/0 0/0 0/0 .text __dt__12JKRArcFinderFv */
|
|
inline JKRArcFinder::~JKRArcFinder() {}
|