usbloadergx/source/wad/nandtitle.h
giantpune bb234a9a51 * use more c++
* use less memory
2010-09-19 13:03:16 +00:00

113 lines
2.6 KiB
C++

#ifndef NANDTITLE_H
#define NANDTITLE_H
#include <gccore.h>
#include <ogcsys.h>
#include <string.h>
#include <stdio.h>
#include <malloc.h>
#include <sys/stat.h>
#include <vector>
#include <map>
#include "wstring.hpp"
using namespace std;
#define TITLE_ID(x,y) (((u64)(x) << 32) | (y))
#define TITLE_UPPER(x) ((u32)((x) >> 32))
#define TITLE_LOWER(x) ((u32)(x))
#define TITLE_1(x) ((u8)((x) >> 8))
#define TITLE_2(x) ((u8)((x) >> 16))
#define TITLE_3(x) ((u8)((x) >> 24))
#define TITLE_4(x) ((u8)((x) >> 32))
#define TITLE_5(x) ((u8)((x) >> 40))
#define TITLE_6(x) ((u8)((x) >> 48))
#define TITLE_7(x) ((u8)((x) >> 56))
#define IMET_MAX_NAME_LEN 0x2a
#define IMET_OFFSET 0x40
#define IMET_SIGNATURE 0x494d4554
#define DOWNLOADED_CHANNELS 0x00010001
#define SYSTEM_CHANNELS 0x00010002
#define RF_NEWS_CHANNEL 0x48414741
#define RF_FORECAST_CHANNEL 0x48414641
typedef struct
{
u8 zeroes1[0x40];
u32 sig; // "IMET"
u32 unk1;
u32 unk2;
u32 filesizes[3];
u32 unk3;
u16 name_japanese[IMET_MAX_NAME_LEN];
u16 name_english[IMET_MAX_NAME_LEN];
u16 name_german[IMET_MAX_NAME_LEN];
u16 name_french[IMET_MAX_NAME_LEN];
u16 name_spanish[IMET_MAX_NAME_LEN];
u16 name_italian[IMET_MAX_NAME_LEN];
u16 name_dutch[IMET_MAX_NAME_LEN];
u16 name_simp_chinese[IMET_MAX_NAME_LEN];
u16 name_trad_chinese[IMET_MAX_NAME_LEN];
u16 name_korean[IMET_MAX_NAME_LEN];
u8 zeroes2[0x24c];
u8 md5[0x10];
} IMET;
class NandTitle
{
public:
NandTitle();
~NandTitle();
s32 Get();
u64 At( u32 i );
int IndexOf( u64 tid );
u32 Count() { return titleIds.size(); }
const char* NameOf( u64 tid );
const char* NameFromIndex( u32 i );
u16 VersionOf( u64 tid );
u16 VersionFromIndex( u32 i );
u32 CountType( u32 type );
u32 SetType( u32 upper );
u64 Next();
void ResetCounter();
void AsciiTID( u64 tid, char* out );
void AsciiFromIndex( u32 i, char* out );
bool Exists( u64 tid );
bool ExistsFromIndex( u32 i );
int FindU64( const char *s );
int FindU32( const char *s );
s32 GetTicketViews( u64 tid, tikview **outbuf, u32 *outlen );
u64 operator[]( u32 i ) { return At( i ); }
private:
std::vector<u64> titleIds;
std::map<u64, string> NameList;
bool GetName( u64 tid, int language, wchar_t* name );
tmd* GetTMD( u64 tid );
u32 currentIndex;
u32 currentType;
};
extern NandTitle titles;
#endif // NANDTITLE_H