WiiFlow_Lite/source/loader/gc_disc_dump.hpp

133 lines
3.1 KiB
C++
Raw Normal View History

/***************************************************************************
* Copyright (C) 2012
* by OverjoY and FIX94 for Wiiflow
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any
* damages arising from the use of this software.
*
* Permission is granted to anyone to use this software for any
* purpose, including commercial applications, and to alter it and
* redistribute it freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you
* must not claim that you wrote the original software. If you use
* this software in a product, an acknowledgment in the product
* documentation would be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and
* must not be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*
2012-07-06 02:36:45 +02:00
* gc_disc_dump.hpp
*
***************************************************************************/
2012-07-06 02:36:45 +02:00
#ifndef GC_DISC_DUMP_H_
#define GC_DISC_DUMP_H_
typedef void (*progress_callback_t)(int status,int total,void *user_data);
typedef void (*message_callback_t)(int message, int info, char *cinfo, void *user_data);
enum spcall
{
KB = 0,
BL,
MB,
GB,
};
2012-07-06 02:36:45 +02:00
struct FST
{
union
{
struct
{
u32 Type :8;
u32 NameOffset :24;
};
u32 TypeName;
};
union
{
struct
{
u32 FileOffset;
u32 FileLength;
};
struct
{
u32 ParentOffset;
u32 NextOffset;
};
u32 entry[2];
};
};
class GCDump
{
public:
void Init(bool skip, bool comp, bool wexf, bool align, u32 nretry, u32 rsize, const char* partition, const char* m_GCgamesDir)
{
skiponerror = skip;
compressed = comp;
writeexfiles = wexf;
force_32k_align = align;
gc_nbrretry = nretry;
gc_readsize = rsize;
gamepartition = partition;
gc_gamesDir = m_GCgamesDir;
gc_skipped = 0;
waitonerror = true;
}
s32 DumpGame( );
s32 CheckSpace(u32 *needed, bool comp);
u32 GetFreeSpace(char *path, u32 Value);
private:
void *u_data;
bool force_32k_align;
bool skiponerror;
bool compressed;
bool writeexfiles;
bool waitonerror;
bool gamedone;
bool multigamedisc;
const char *gamepartition;
const char *gc_gamesDir;
char minfo[74];
u8 Disc;
u8 Disc2;
u32 gc_nbrretry;
u32 gc_error;
u32 gc_retry;
u32 gc_skipped;
u32 gc_readsize;
u32 gc_done;
u32 ID;
u32 ID2;
u32 ApploaderSize;
u32 DOLOffset;
u32 DOLSize;
u32 FSTOffset;
u32 FSTSize;
u32 FSTTotal;
u32 FSTEnt;
u32 GamePartOffset;
u32 DataSize;
u32 DiscSize;
u32 DiscSizeCalculated;
u32 MultiGameCnt;
u32 MultiGameDump;
u32 Gamesize[10];
u64 NextOffset;
s32 __DiscReadRaw(void *outbuf, u64 offset, u32 length);
s32 __DiscWrite(char * path, u64 offset, u32 length, u8 *ReadBuffer);
s32 __DiscWriteFile(FILE *f, u64 offset, u32 length, u8 *ReadBuffer);
void __AnalizeMultiDisc();
bool __WaitForDisc(u8 dsc, u32 msg);
bool __CheckMDHack(u32 ID);
};
2012-07-06 02:36:45 +02:00
#endif