mirror of
https://github.com/Fledge68/WiiFlow_Lite.git
synced 2024-12-25 03:11:58 +01:00
5aef0bed27
by default -updated and cleaned up gamecube disc dumper, in compressed mode it now shows the percentage of how much wrote in size instead of the files wrote, this avoids confusion why it freeze at some % and is more accurate
106 lines
2.9 KiB
C++
106 lines
2.9 KiB
C++
/***************************************************************************
|
|
* 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.
|
|
*
|
|
* gc_disc.hpp
|
|
*
|
|
***************************************************************************/
|
|
|
|
#ifndef GC_DISC_H_
|
|
#define GC_DISC_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);
|
|
|
|
class GCDump
|
|
{
|
|
public:
|
|
void Init(bool skip, bool comp, bool wexf, bool align, u32 nretry, u32 rsize, const char* partition)
|
|
{
|
|
skiponerror = skip;
|
|
compressed = comp;
|
|
writeexfiles = wexf;
|
|
force_32k_align = align;
|
|
gc_nbrretry = nretry;
|
|
gc_readsize = rsize;
|
|
gamepartition = partition;
|
|
gc_skipped = 0;
|
|
}
|
|
s32 DumpGame(progress_callback_t spinner, message_callback_t message, void *spinner_data);
|
|
s32 CheckSpace(u32 *needed, bool comp, message_callback_t message, void *message_data);
|
|
private:
|
|
bool force_32k_align;
|
|
bool skiponerror;
|
|
bool compressed;
|
|
bool writeexfiles;
|
|
const char* gamepartition;
|
|
u8 Disc;
|
|
u8 Disc2;
|
|
u32 gc_nbrretry;
|
|
u32 gc_error;
|
|
u32 gc_retry;
|
|
u32 gc_skipped;
|
|
u32 gc_readsize;
|
|
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;
|
|
typedef struct
|
|
{
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
u32 Type :8;
|
|
u32 NameOffset :24;
|
|
};
|
|
u32 TypeName;
|
|
};
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
u32 FileOffset;
|
|
u32 FileLength;
|
|
};
|
|
struct
|
|
{
|
|
u32 ParentOffset;
|
|
u32 NextOffset;
|
|
};
|
|
u32 entry[2];
|
|
};
|
|
} FST;
|
|
s32 __DiscReadRaw(void *outbuf, u32 offset, u32 length);
|
|
s32 __DiscWrite(char * path, u32 offset, u32 length, u32 already_done, u8 *ReadBuffer, progress_callback_t spinner, void *spinner_data);
|
|
s32 __DiscWriteFile(FILE *f, u32 offset, u32 length, u32 already_done, u8 *ReadBuffer, progress_callback_t spinner, void *spinner_data);
|
|
};
|
|
#endif |