diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..8f1209b --- /dev/null +++ b/.gitattributes @@ -0,0 +1,172 @@ +* text=auto !eol +WiiQt/aes.c -text +WiiQt/aes.h -text +WiiQt/ash.cpp -text +WiiQt/ash.h -text +WiiQt/blocks0to7.cpp -text +WiiQt/blocks0to7.h -text +WiiQt/bn.cpp -text +WiiQt/bn.h -text +WiiQt/ec.cpp -text +WiiQt/ec.h -text +WiiQt/includes.h -text +WiiQt/keysbin.cpp -text +WiiQt/keysbin.h -text +WiiQt/lz77.cpp -text +WiiQt/lz77.h -text +WiiQt/md5.cpp -text +WiiQt/md5.h -text +WiiQt/nandbin.cpp -text +WiiQt/nandbin.h -text +WiiQt/nanddump.cpp -text +WiiQt/nanddump.h -text +WiiQt/nandspare.cpp -text +WiiQt/nandspare.h -text +WiiQt/nusdownloader.cpp -text +WiiQt/nusdownloader.h -text +WiiQt/savebanner.cpp -text +WiiQt/savebanner.h -text +WiiQt/savedatabin.cpp -text +WiiQt/savedatabin.h -text +WiiQt/settingtxtdialog.cpp -text +WiiQt/settingtxtdialog.h -text +WiiQt/settingtxtdialog.ui -text +WiiQt/sha1.c -text +WiiQt/sha1.h -text +WiiQt/sharedcontentmap.cpp -text +WiiQt/sharedcontentmap.h -text +WiiQt/tiktmd.cpp -text +WiiQt/tiktmd.h -text +WiiQt/tools.cpp -text +WiiQt/tools.h -text +WiiQt/u8.cpp -text +WiiQt/u8.h -text +WiiQt/uidmap.cpp -text +WiiQt/uidmap.h -text +WiiQt/wad.cpp -text +WiiQt/wad.h -text +breft_editor/breft.cpp -text +breft_editor/breft.h -text +breft_editor/breft.pro -text +breft_editor/main.cpp -text +breft_editor/mainwindow.cpp -text +breft_editor/mainwindow.h -text +breft_editor/texture.cpp -text +breft_editor/texture.h -text +nandBinCheck/main.cpp -text +nandBinCheck/nandBinCheck.pro -text +nandBinCheck/readmii.txt -text +nandExtract/black.png -text +nandExtract/blue.png -text +nandExtract/boot2infodialog.cpp -text +nandExtract/boot2infodialog.h -text +nandExtract/boot2infodialog.ui -text +nandExtract/green.png -text +nandExtract/grey.png -text +nandExtract/icon.png -text +nandExtract/main.cpp -text +nandExtract/nandExtract.pro -text +nandExtract/nandthread.cpp -text +nandExtract/nandthread.h -text +nandExtract/nandwindow.cpp -text +nandExtract/nandwindow.h -text +nandExtract/nandwindow.ui -text +nandExtract/pink.png -text +nandExtract/rc.qrc -text +nandExtract/readmii.txt -text +nandDump/icon.png -text +nandDump/main.cpp -text +nandDump/mainwindow.cpp -text +nandDump/mainwindow.h -text +nandDump/mainwindow.ui -text +nandDump/nand.pro -text +nandDump/rc.qrc -text +nandDump/readmii.txt -text +ohneschwanzenegger/icon.png -text +ohneschwanzenegger/main.cpp -text +ohneschwanzenegger/mainwindow.cpp -text +ohneschwanzenegger/mainwindow.h -text +ohneschwanzenegger/mainwindow.ui -text +ohneschwanzenegger/newnandbin.cpp -text +ohneschwanzenegger/newnandbin.h -text +ohneschwanzenegger/newnandbin.ui -text +ohneschwanzenegger/rc.qrc -text +ohneschwanzenegger/readmii.txt -text +ohneschwanzenegger/refleurii.pro -text +ohneschwanzenegger/testlog.txt -text +punetwiin/main.cpp -text +punetwiin/punetween.pro -text +saveToy/includes.h -text +saveToy/main.cpp -text +saveToy/mainwindow.cpp -text +saveToy/mainwindow.h -text +saveToy/mainwindow.ui -text +saveToy/ngdialog.cpp -text +saveToy/ngdialog.h -text +saveToy/ngdialog.ui -text +saveToy/noBanner.png -text +saveToy/noIcon.png -text +saveToy/quazip/include/JlCompress.h -text +saveToy/quazip/include/crypt.h -text +saveToy/quazip/include/ioapi.h -text +saveToy/quazip/include/quaadler32.h -text +saveToy/quazip/include/quachecksum32.h -text +saveToy/quazip/include/quacrc32.h -text +saveToy/quazip/include/quazip.h -text +saveToy/quazip/include/quazipfile.h -text +saveToy/quazip/include/quazipfileinfo.h -text +saveToy/quazip/include/quazipnewinfo.h -text +saveToy/quazip/include/unzip.h -text +saveToy/quazip/include/zconf.h -text +saveToy/quazip/include/zip.h -text +saveToy/quazip/include/zlib.h -text +saveToy/quazip/lib/linux_x64/libquazip.a -text +saveToy/quazip/lib/linux_x86/libquazip.a -text +saveToy/quazip/lib/mac/libquazip.a -text +saveToy/quazip/lib/win32/libquazip.a -text +saveToy/rc.qrc -text +saveToy/readmii.txt -text +saveToy/saveToy.pro -text +saveToy/savelistitem.cpp -text +saveToy/savelistitem.h -text +saveToy/saveloadthread.cpp -text +saveToy/saveloadthread.h -text +saveToy/textdialog.cpp -text +saveToy/textdialog.h -text +saveToy/textdialog.ui -text +symbolizer/be.cpp -text +symbolizer/be.h -text +symbolizer/dol.cpp -text +symbolizer/dol.h -text +symbolizer/elfparser.cpp -text +symbolizer/elfparser.h -text +symbolizer/main.cpp -text +symbolizer/ppc_disasm.c -text +symbolizer/ppc_disasm.h -text +symbolizer/symbolizer.pro -text +thp_player/ffw.png -text +thp_player/gcvid.cpp -text +thp_player/gcvid.h -text +thp_player/jpeg62.dll -text +thp_player/libpng/include/jconfig.h -text +thp_player/libpng/include/jerror.h -text +thp_player/libpng/include/jmorecfg.h -text +thp_player/libpng/include/jpeglib.h -text +thp_player/libpng/lib/libjpeg.dll.a -text +thp_player/main.cpp -text +thp_player/next.png -text +thp_player/pause.png -text +thp_player/play.png -text +thp_player/prev.png -text +thp_player/rc.qrc -text +thp_player/repeat.png -text +thp_player/rev.png -text +thp_player/star.png -text +thp_player/stop.png -text +thp_player/thp_player.pro -text +thp_player/thpwindow.cpp -text +thp_player/thpwindow.h -text +thp_player/thpwindow.ui -text +thp_player/vol_high.png -text +thp_player/vol_low.png -text +thp_player/vol_med.png -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3dc8db0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,54 @@ +# build folders +*/build/ +# C++ objects and libs +*.slo +*.lo +*.o +*.a +*.la +*.lai +*.so +*.so.* +*.dll +*.dylib + +# Qt-es +object_script.*.Release +object_script.*.Debug +*_plugin_import.cpp +/.qmake.cache +/.qmake.stash +*.pro.user +*.pro.user.* +*.qbs.user +*.qbs.user.* +*.moc +moc_*.cpp +moc_*.h +qrc_*.cpp +ui_*.h +*.qmlc +*.jsc +Makefile* +*build-* +*.qm +*.prl + +# Qt unit tests +target_wrapper.* + +# QtCreator +*.autosave + +# QtCreator Qml +*.qmlproject.user +*.qmlproject.user.* + +# QtCreator CMake +CMakeLists.txt.user* + +# QtCreator 4.8< compilation database +compile_commands.json + +# QtCreator local machine specific files for imported projects +*creator.user* diff --git a/WiiQt/blocks0to7.cpp b/WiiQt/blocks0to7.cpp index a29f2e3..30771fe 100644 --- a/WiiQt/blocks0to7.cpp +++ b/WiiQt/blocks0to7.cpp @@ -22,7 +22,7 @@ bool Blocks0to7::SetBlocks( const QList &blocks ) { if( blocks.at( i ).size() != 0x20000 ) { - qWarning() << "Blocks0to7::SetBlocks -> block" << i << "is" << hex << blocks.at( i ).size() << "bytes"; + qWarning() << "Blocks0to7::SetBlocks -> block" << i << "is" << Qt::hex << blocks.at( i ).size() << "bytes"; return false; } } diff --git a/WiiQt/includes.h b/WiiQt/includes.h index bc18f51..b539087 100644 --- a/WiiQt/includes.h +++ b/WiiQt/includes.h @@ -20,7 +20,6 @@ #include #include #include -#include #include #include #include diff --git a/WiiQt/nandbin.cpp b/WiiQt/nandbin.cpp index 8283c5a..653dd59 100755 --- a/WiiQt/nandbin.cpp +++ b/WiiQt/nandbin.cpp @@ -68,7 +68,7 @@ bool NandBin::CreateNew( const QString &path, const QByteArray &keys, const QByt #else if( keys.size() != 0x400 || first8.size() != 0x108000 ) { - qWarning() << "NandBin::CreateNew -> bad sizes" << hex << keys.size() << first8.size(); + qWarning() << "NandBin::CreateNew -> bad sizes" << Qt::hex << keys.size() << first8.size(); return false; } @@ -168,7 +168,7 @@ bool NandBin::Format( bool secure ) #else if( !f.isOpen() || fats.size() != 0x8000 ) { - qWarning() << "NandBin::Format -> error" << hex << fats.size() << f.isOpen(); + qWarning() << "NandBin::Format -> error" << Qt::hex << fats.size() << f.isOpen(); return false; } @@ -282,7 +282,7 @@ QTreeWidgetItem *NandBin::CreateItem( QTreeWidgetItem *parent, const QString &na bool NandBin::AddChildren( QTreeWidgetItem *parent, quint16 entry ) { - //qDebug() << "NandBin::AddChildren" << parent->text( 0 ) << hex << entry; + //qDebug() << "NandBin::AddChildren" << parent->text( 0 ) << Qt::hex << entry; if( entry >= 0x17ff ) { qDebug() << "NandBin::AddChildren: entry >= 0x17ff"; @@ -346,7 +346,7 @@ const QString NandBin::FstName( fst_t fst ) bool NandBin::ExtractFST( quint16 entry, const QString &path, bool singleFile ) { - //qDebug() << "NandBin::ExtractFST(" << hex << entry << "," << path << ")"; + //qDebug() << "NandBin::ExtractFST(" << Qt::hex << entry << "," << path << ")"; fst_t fst = GetFST( entry ); if( !fst.filename[ 0 ] )//something is amiss, better quit now @@ -506,11 +506,11 @@ void NandBin::ShowLostClusters() break; default: lost++; - qDebug() << hex << i << fats.at( i ); + qDebug() << Qt::hex << i << fats.at( i ); break; } } - qDebug() << "found" << lost << "lost clusters\nUNK ( 0xffff )" << hex << ffs.size() << ffs << + qDebug() << "found" << lost << "lost clusters\nUNK ( 0xffff )" << Qt::hex << ffs.size() << ffs << "\nfree " << frs.size(); } @@ -692,7 +692,7 @@ qint32 NandBin::FindSuperblock() f.read( (char*)&magic, 4 );//no need to switch endian here if( magic != 0x53464653 ) { - qWarning() << "oops, this isnt a supercluster" << hex << loc << magic << currentSuperCluster; + qWarning() << "oops, this isnt a supercluster" << Qt::hex << loc << magic << currentSuperCluster; rewind++; //hexdump( sss ); continue; @@ -701,13 +701,13 @@ qint32 NandBin::FindSuperblock() f.read( (char*)¤t, 4 ); current = qFromBigEndian( current ); - //qDebug() << "superblock" << hex << current << currentSuperCluster << loc; + //qDebug() << "superblock" << Qt::hex << current << currentSuperCluster << loc; if( current > superClusterVersion ) superClusterVersion = current; else { - //qDebug() << "using superblock" << hex << superClusterVersion << currentSuperCluster - 0x10 << f.pos() - n_len[ type ]; + //qDebug() << "using superblock" << Qt::hex << superClusterVersion << currentSuperCluster - 0x10 << f.pos() - n_len[ type ]; //currentSuperCluster -= ( 0x10 * rewind ); //loc -= ( n_len[ type ] * rewind ); rewind = 1; @@ -724,13 +724,13 @@ qint32 NandBin::FindSuperblock() currentSuperCluster -= ( 0x10 * rewind ); loc -= ( n_len[ type ] * rewind ); - //qDebug() << "using superblock" << hex << superClusterVersion << currentSuperCluster << "page:" << ( loc / 0x840 ); + //qDebug() << "using superblock" << Qt::hex << superClusterVersion << currentSuperCluster << "page:" << ( loc / 0x840 ); return loc; } fst_t NandBin::GetFST( quint16 entry ) { - //qDebug() << "NandBin::GetFST(" << hex << entry << ")"; + //qDebug() << "NandBin::GetFST(" << Qt::hex << entry << ")"; fst_t fst; if( entry >= 0x17FF ) { @@ -740,7 +740,7 @@ fst_t NandBin::GetFST( quint16 entry ) } if( fstInited )//we've already read this once, just give back the one we already know { - //qDebug() << "reading from cache" << hex << entry; + //qDebug() << "reading from cache" << Qt::hex << entry; return fsts[ entry ]; } // compensate for 64 bytes of ecc data every 64 fst entries @@ -748,7 +748,7 @@ fst_t NandBin::GetFST( quint16 entry ) int loc_entry = ( ( ( entry / 0x40 ) * n_fst[ type ] ) + entry ) * 0x20; if( (quint32)f.size() < loc_fst + loc_entry + sizeof( fst_t ) ) { - qDebug() << hex << (quint32)f.size() << loc_fst << loc_entry << type << n_fst[ type ]; + qDebug() << Qt::hex << (quint32)f.size() << loc_fst << loc_entry << type << n_fst[ type ]; emit SendError( tr( "Tried to read fst_t beyond size of nand.bin" ) ); fst.filename[ 0 ] = '\0'; return fst; @@ -810,7 +810,7 @@ quint16 NandBin::GetFAT( quint16 fat_entry ) const QByteArray NandBin::GetPage( quint32 pageNo, bool withEcc ) { - //qDebug() << "NandBin::GetPage( " << hex << pageNo << ", " << withEcc << " )"; + //qDebug() << "NandBin::GetPage( " << Qt::hex << pageNo << ", " << withEcc << " )"; quint32 n_pagelen[] = { 0x800, 0x840, 0x840 }; if( f.size() < ( pageNo + 1 ) * n_pagelen[ type ] ) @@ -819,14 +819,14 @@ const QByteArray NandBin::GetPage( quint32 pageNo, bool withEcc ) return QByteArray(); } f.seek( pageNo * n_pagelen[ type ] ); //seek to the beginning of the page to read - //qDebug() << "reading page from" << hex << (quint32)f.pos(); + //qDebug() << "reading page from" << Qt::hex << (quint32)f.pos(); QByteArray page = f.read( ( type && withEcc ) ? n_pagelen[ type ] : 0x800 ); return page; } const QByteArray NandBin::GetCluster( quint16 cluster_entry, bool decrypt ) { - //qDebug() << "NandBin::GetCluster" << hex << cluster_entry; + //qDebug() << "NandBin::GetCluster" << Qt::hex << cluster_entry; quint32 n_clusterlen[] = { 0x4000, 0x4200, 0x4200 }; quint32 n_pagelen[] = { 0x800, 0x840, 0x840 }; @@ -841,7 +841,7 @@ const QByteArray NandBin::GetCluster( quint16 cluster_entry, bool decrypt ) for( int i = 0; i < 8; i++ ) { f.seek( ( cluster_entry * n_clusterlen[ type ] ) + ( i * n_pagelen[ type ] ) ); //seek to the beginning of the page to read - //qDebug() << "reading page from" << hex << (quint32)f.pos(); + //qDebug() << "reading page from" << Qt::hex << (quint32)f.pos(); //QByteArray page = f.read( n_pagelen[ type ] ); //read the page, with ecc QByteArray page = f.read( 0x800 ); //read the page, skip the ecc //hexdump( page.mid( 0x800, 0x40 ) );//just here for debugging purposes @@ -851,7 +851,7 @@ const QByteArray NandBin::GetCluster( quint16 cluster_entry, bool decrypt ) } if( cluster.size() != 0x4000 ) { - qDebug() << "actual cluster size" << hex << cluster.size(); + qDebug() << "actual cluster size" << Qt::hex << cluster.size(); emit SendError( tr( "Error reading cluster" ) ); return QByteArray(); } @@ -900,26 +900,26 @@ const QByteArray NandBin::GetFile( fst_t fst_ ) //readFats << fat; fat = GetFAT( fat ); } - //qDebug() << "actually read data from fats\n" << hex << readFats; - //qDebug() << "stopped reading because of" << hex << fat; + //qDebug() << "actually read data from fats\n" << Qt::hex << readFats; + //qDebug() << "stopped reading because of" << Qt::hex << fat; //this check doesnt really seem to matter, it always appears to be 1 extra cluster added to the end //of the file and that extra bit is dropped in this function before the data is returned. /*if( data.size() != cluster_span * 0x4000 ) { qDebug() << "data.size() != cluster_span * 0x4000 :: " - << hex << data.size() + << Qt::hex << data.size() << cluster_span << ( cluster_span * 0x4000 ) - << "expected size:" << hex << fst.size; + << "expected size:" << Qt::hex << fst.size; emit SendError( tr( "Error reading file [ block size is not a as expected ] %1" ).arg( FstName( fst ) ) ); }*/ if( (quint32)data.size() < fst_.size ) { qWarning() << "NandBin::GetFile() -> (quint32)data.size() < fst.size : " - << hex << data.size() - << "expected size:" << hex << fst_.size; + << Qt::hex << data.size() + << "expected size:" << Qt::hex << fst_.size; emit SendError( tr( "Error reading file [ returned data size is less that the size in the fst ]" ) ); return QByteArray(); @@ -941,16 +941,16 @@ const QList NandBin::GetFatsForFile( quint16 i ) return ret; quint16 fat = fst.sub; - //qDebug() << hex << fat; + //qDebug() << Qt::hex << fat; quint16 j = 0;//just to make sure a broken nand doesnt lead to an endless loop while ( fat < 0x8000 && fat > 0 && ++j ) { ret << fat; fat = GetFAT( fat ); - //qDebug() << hex << fat; + //qDebug() << Qt::hex << fat; } - //qDebug() << hex << ret; + //qDebug() << Qt::hex << ret; return ret; } @@ -1138,7 +1138,7 @@ bool NandBin::WriteCluster( quint32 pageNo, const QByteArray &data, const QByteA { if( data.size() != 0x4000 ) { - qWarning() << "NandBin::WriteCluster -> size:" << hex << data.size(); + qWarning() << "NandBin::WriteCluster -> size:" << Qt::hex << data.size(); return false; } @@ -1188,11 +1188,11 @@ bool NandBin::WritePage( quint32 pageNo, const QByteArray &data ) qWarning() << __FILE__ << "was built without write support"; return false; #else - //qDebug() << "NandBin::WritePage(" << hex << pageNo << ")"; + //qDebug() << "NandBin::WritePage(" << Qt::hex << pageNo << ")"; quint32 n_pagelen[] = { 0x800, 0x840, 0x840 }; if( (quint32)data.size() != n_pagelen[ type ] ) { - qWarning() << "data is wrong size" << hex << data.size(); + qWarning() << "data is wrong size" << Qt::hex << data.size(); return false; } @@ -1202,7 +1202,7 @@ bool NandBin::WritePage( quint32 pageNo, const QByteArray &data ) return false; } f.seek( (quint64)pageNo * (quint64)n_pagelen[ type ] ); //seek to the beginning of the page to write - //qDebug() << "writing page at:" << f.pos() << hex << (quint32)f.pos(); + //qDebug() << "writing page at:" << f.pos() << Qt::hex << (quint32)f.pos(); //hexdump( data, 0, 0x20 ); return ( f.write( data ) == data.size() ); #endif @@ -1216,7 +1216,7 @@ quint16 NandBin::CreateNode( const QString &name, quint32 uid, quint16 gid, quin //qDebug() << "looking for first empty node"; for( i = 1; i < 0x17ff; i++ )//cant be entry 0 because that is the root { - //qDebug() << hex << i << FstName( fsts[ i ] ); + //qDebug() << Qt::hex << i << FstName( fsts[ i ] ); if( !fsts[ i ].filename[ 0 ] )//this one doesnt have a filename, it cant be used already break; } @@ -1226,8 +1226,8 @@ quint16 NandBin::CreateNode( const QString &name, quint32 uid, quint16 gid, quin } QByteArray n = name.toLatin1(); - n.resize( 12 ); - //qDebug() << "will add entry for" << n << "at" << hex << i; + n.resize( 12, 0x00 ); + //qDebug() << "will add entry for" << n << "at" << Qt::hex << i; memcpy( &fsts[ i ].filename, n.data(), 12 ); fsts[ i ].attr = attr; fsts[ i ].wtf = 0; @@ -1514,7 +1514,7 @@ bool NandBin::SetData( quint16 idx, const QByteArray &data ) //setup random number stuff to emulate wear leveling QTime midnight( 0, 0, 0 ); - qsrand( midnight.secsTo( QTime::currentTime() ) ); + QRandomGenerator rng(midnight.secsTo( QTime::currentTime() )); //now grab the clusters that will be used from the list //qDebug() << "trying to find" << ( clCnt - fts.size() ) << "free clusters"; @@ -1524,7 +1524,7 @@ bool NandBin::SetData( quint16 idx, const QByteArray &data ) return false; //grab a random cluster from the list - quint16 idx = qrand() % freeClusters.size(); + quint16 idx = rng.generate() % freeClusters.size(); quint16 cl = freeClusters.takeAt( idx ); //remove this number from the list fts << cl; //add this one to the clusters that will be used to hold the data @@ -1552,7 +1552,7 @@ bool NandBin::SetData( quint16 idx, const QByteArray &data ) QByteArray spr = page.right( 0x40 ); if( !spr.startsWith( 0xff ) ) { - qWarning() << "page" << hex << ( cl * 8 ) << "is bad??"; + qWarning() << "page" << Qt::hex << ( cl * 8 ) << "is bad??"; continue; } }*/ @@ -1560,9 +1560,9 @@ bool NandBin::SetData( quint16 idx, const QByteArray &data ) } } //sort clusters so file is written in order ( not like it matters on flash memory, though ) - qSort( fts.begin(), fts.end() ); + std::sort( fts.begin(), fts.end() ); //qDebug() << "about to writing shit" << clCnt << fts.size(); - //qDebug() << "file will be on clusters\n" << hex << fts; + //qDebug() << "file will be on clusters\n" << Qt::hex << fts; for( quint32 i = 0; i < clCnt; i++ ) { QByteArray cluster = pData.mid( i * 0x4000, 0x4000 ); @@ -1582,7 +1582,7 @@ bool NandBin::SetData( quint16 idx, const QByteArray &data ) //qDebug() << "1 followed the chain to" << num << "items. expected" << clCnt; fats.replace( fts.at( 0 ), 0xfffb );//last cluster in chain fts.takeFirst(); - //qDebug() << "fixed the last one" << hex << fts; + //qDebug() << "fixed the last one" << Qt::hex << fts; // if the new data uses less clusters than the previous data, mark the extra ones as free while( !fts.isEmpty() ) { @@ -1614,7 +1614,7 @@ bool NandBin::WriteMetaData() quint32 nextClusterVersion = superClusterVersion + 1; QByteArray scl( 0x4000 * 16, '\0' ); //this will hold all the data - //qDebug() << "created the meta block buffer" << hex << scl.size(); + //qDebug() << "created the meta block buffer" << Qt::hex << scl.size(); QBuffer b( &scl ); b.open( QIODevice::WriteOnly ); quint32 tmp; @@ -1626,7 +1626,7 @@ bool NandBin::WriteMetaData() tmp = qFromBigEndian( (quint32)0 ); //tmp = qFromBigEndian( (quint32)0x10 ); //wiibrew says its always 0x10. but mine is 0 b.write( (const char*)&tmp, 4 ); - //qDebug() << "writing the fats at" << hex << (quint32)b.pos(); + //qDebug() << "writing the fats at" << Qt::hex << (quint32)b.pos(); //write all the fats for( quint16 i = 0; i < 0x8000; i++ ) @@ -1635,7 +1635,7 @@ bool NandBin::WriteMetaData() b.write( (const char*)&t, 2 ); } - //qDebug() << "writing the fsts at" << hex << (quint32)b.pos(); + //qDebug() << "writing the fsts at" << Qt::hex << (quint32)b.pos(); //write all the fst entries for( quint16 i = 0; i < 0x17ff; i++ ) { @@ -1665,11 +1665,11 @@ bool NandBin::WriteMetaData() } - //qDebug() << "done adding shit" << hex << (quint32)b.pos(); + //qDebug() << "done adding shit" << Qt::hex << (quint32)b.pos(); b.close(); QByteArray hmR = spare.Get_hmac_meta( scl, nextSuperCluster ); - //qDebug() << "about to write the meta block" << hex << nextSuperCluster << nextClusterVersion << "to page" << (quint32)( nextSuperCluster * 8 ); + //qDebug() << "about to write the meta block" << Qt::hex << nextSuperCluster << nextClusterVersion << "to page" << (quint32)( nextSuperCluster * 8 ); for( quint8 i = 0; i < 0x10; i++ ) { @@ -1731,7 +1731,7 @@ bool NandBin::CheckHmacData( quint16 entry ) { if( entry > 0x17fe ) { - qDebug() << "bad entry #" << hex << entry; + qDebug() << "bad entry #" << Qt::hex << entry; return false; } @@ -1746,18 +1746,18 @@ bool NandBin::CheckHmacData( quint16 entry ) return true; quint16 clCnt = ( RU( fst.size, 0x4000 ) / 0x4000 ); - //qDebug() << FstName( fst ) << "is" << hex << fst.size << "bytes (" << clCnt << ") clusters"; + //qDebug() << FstName( fst ) << "is" << Qt::hex << fst.size << "bytes (" << clCnt << ") clusters"; quint16 fat = fst.sub; QByteArray sp1; QByteArray sp2; QByteArray hmac; - //qDebug() << "fat" << hex << fat; + //qDebug() << "fat" << Qt::hex << fat; for( quint32 i = 0; i < clCnt; i++ ) { if( fat > 0x7fff ) { - qDebug() << "fat is out of range" << hex << fat; + qDebug() << "fat is out of range" << Qt::hex << fat; return false; } QByteArray cluster = GetCluster( fat ); //hmac is calculated with the decrypted cluster data @@ -1803,7 +1803,7 @@ bool NandBin::CheckHmacData( quint16 entry ) return true; error: - qWarning() << FstName( fst ) << "is" << hex << fst.size << "bytes (" << clCnt << ") clusters"; + qWarning() << FstName( fst ) << "is" << Qt::hex << fst.size << "bytes (" << clCnt << ") clusters"; hexdump( sp1 ); hexdump( sp2 ); hexdump( hmac ); @@ -1823,7 +1823,7 @@ bool NandBin::CheckHmacMeta( quint16 clNo ) } QByteArray hmac = spare.Get_hmac_meta( data, clNo ); quint32 baseP = ( clNo + 15 ) * 8; - //qDebug() << "baseP" << hex << baseP << ( baseP + 6 ) << ( baseP + 7 ); + //qDebug() << "baseP" << Qt::hex << baseP << ( baseP + 6 ) << ( baseP + 7 ); QByteArray sp1 = GetPage( baseP + 6, true ); //the spare data of these 2 pages hold the hmac data for the supercluster QByteArray sp2 = GetPage( baseP + 7, true ); if( sp1.isEmpty() || sp2.isEmpty() ) @@ -1855,7 +1855,7 @@ bool NandBin::CheckHmacMeta( quint16 clNo ) return true; error: - qWarning() << "supercluster" << hex << clNo; + qWarning() << "supercluster" << Qt::hex << clNo; hexdump( sp1 ); hexdump( sp2 ); hexdump( hmac ); diff --git a/WiiQt/nandspare.cpp b/WiiQt/nandspare.cpp index 34ce17e..488b3df 100644 --- a/WiiQt/nandspare.cpp +++ b/WiiQt/nandspare.cpp @@ -185,7 +185,7 @@ void fs_hmac_data( const unsigned char *data, quint32 uid, const unsigned char * QByteArray NandSpare::Get_hmac_data( const QByteArray &cluster, quint32 uid, const unsigned char *name, quint32 entry_n, quint32 x3, quint16 blk ) { - //qDebug() << "NandSpare::Get_hmac_data" << hex << cluster.size() << uid << QString( QByteArray( (const char*)name, 12 ) ) << entry_n << x3 << blk; + //qDebug() << "NandSpare::Get_hmac_data" << Qt::hex << cluster.size() << uid << QString( QByteArray( (const char*)name, 12 ) ) << entry_n << x3 << blk; if( hmacKey.size() != 0x14 || cluster.size() != 0x4000 ) return QByteArray(); @@ -199,10 +199,10 @@ QByteArray NandSpare::Get_hmac_data( const QByteArray &cluster, quint32 uid, con QByteArray NandSpare::Get_hmac_meta( const QByteArray &cluster, quint16 super_blk ) { - //qDebug() << "NandSpare::Get_hmac_meta" << hex << super_blk; + //qDebug() << "NandSpare::Get_hmac_meta" << Qt::hex << super_blk; if( hmacKey.size() != 0x14 || cluster.size() != 0x40000 ) { - //qDebug() << "NandSpare::Get_hmac_meta" << hex << hmacKey.size() << cluster.size(); + //qDebug() << "NandSpare::Get_hmac_meta" << Qt::hex << hmacKey.size() << cluster.size(); return QByteArray(); } diff --git a/WiiQt/nusdownloader.cpp b/WiiQt/nusdownloader.cpp index 20834c5..94909a2 100644 --- a/WiiQt/nusdownloader.cpp +++ b/WiiQt/nusdownloader.cpp @@ -93,7 +93,7 @@ void NusDownloader::StartNextJob() //DbgJoB( currentJob ); if( !stuff.isEmpty() ) { - //qDebug() << "tmdJob.data size:" << hex << stuff.size(); + //qDebug() << "tmdJob.data size:" << Qt::hex << stuff.size(); //DbgJoB( currentJob ); ReadTmdAndGetTicket( stuff ); } @@ -147,14 +147,14 @@ QByteArray NusDownloader::GetDataFromCache( const downloadJob &job ) //qDebug() << "reading data from PC"; QByteArray ret = f.readAll(); f.close(); - //qDebug() << "read" << hex << ret.size() << "bytes of data from" << QFileInfo( f ).absoluteFilePath(); + //qDebug() << "read" << Qt::hex << ret.size() << "bytes of data from" << QFileInfo( f ).absoluteFilePath(); return ret; } //load the tmd and try to get the ticket void NusDownloader::ReadTmdAndGetTicket( const QByteArray &ba ) { - //qDebug() << "NusDownloader::ReadTmdAndGetTicket" << hex << ba.size(); + //qDebug() << "NusDownloader::ReadTmdAndGetTicket" << Qt::hex << ba.size(); curTmd = Tmd( ba ); if( curTmd.Tid() != currentJob.tid ) { @@ -247,7 +247,7 @@ bool NusDownloader::SaveDataToCache( const QString &path, const QByteArray &stuf } f.flush(); f.close(); - //qDebug() << "saved" << hex << stuff.size() << "bytes to" << path; + //qDebug() << "saved" << Qt::hex << stuff.size() << "bytes to" << path; return true; } @@ -291,7 +291,7 @@ void NusDownloader::GetNextItemForCurrentTitle() } //send progress about how much of this title we already have int prog = (int)( (float)( (float)TitleSizeDownloaded() / (float)totalTitleSize ) * 100.0f ); - //qDebug() << "titleProg:" << hex << TitleSizeDownloaded() << totalTitleSize << prog; + //qDebug() << "titleProg:" << Qt::hex << TitleSizeDownloaded() << totalTitleSize << prog; emit SendTitleProgress( prog ); downloadJob appJob = CreateJob( curTmd.Cid( alreadyHave ), alreadyHave ); @@ -379,14 +379,14 @@ bool NusDownloader::DecryptCheckHashAndAppendData( const QByteArray &encData, qu //so multiple objects can be decrypting titles at the same time by different objects AesSetKey( decKey ); - //qDebug() << "NusDownloader::DecryptCheckHashAndAppendData" << hex << encData.size() << idx; + //qDebug() << "NusDownloader::DecryptCheckHashAndAppendData" << Qt::hex << encData.size() << idx; QByteArray paddedEncrypted = PaddedByteArray( encData, 0x40 ); QByteArray decData = AesDecrypt( idx, paddedEncrypted ); decData.resize( curTmd.Size( idx ) ); QByteArray realHash = GetSha1( decData ); if( realHash != curTmd.Hash( idx ) ) { - qWarning() << "NusDownloader::DecryptCheckHashAndAppendData -> hash doesnt match for content" << hex << idx; + qWarning() << "NusDownloader::DecryptCheckHashAndAppendData -> hash doesnt match for content" << Qt::hex << idx; //CurrentJobErrored( tr( "Downloaded data has a different hash than expected." ) ); hexdump( realHash ); hexdump( curTmd.Hash( idx ) ); diff --git a/WiiQt/nusdownloader.h b/WiiQt/nusdownloader.h index ec96bb8..1e90f88 100644 --- a/WiiQt/nusdownloader.h +++ b/WiiQt/nusdownloader.h @@ -146,7 +146,7 @@ private: QNetworkAccessManager manager; QQueue< downloadJob > downloadQueue; QNetworkReply *currentDownload; - QTime downloadTime; + QElapsedTimer downloadTime; QString currentJobText; downloadJob dlJob; diff --git a/WiiQt/settingtxtdialog.cpp b/WiiQt/settingtxtdialog.cpp index 348a8ea..4ca1fd5 100644 --- a/WiiQt/settingtxtdialog.cpp +++ b/WiiQt/settingtxtdialog.cpp @@ -12,7 +12,7 @@ SettingTxtDialog::SettingTxtDialog( QWidget *parent, const QByteArray &old, qint QString str( copy ); str.replace( "\r\n", "\n" );//maybe not needed to do this in 2 steps, but there may be some reason the file only uses "\n", so do it this way to be safe - QStringList parts = str.split( "\n", QString::SkipEmptyParts ); + QStringList parts = str.split( "\n", Qt::SkipEmptyParts ); foreach( const QString &part, parts ) { QString p = part; diff --git a/WiiQt/sharedcontentmap.cpp b/WiiQt/sharedcontentmap.cpp index 4c2e5c0..f2bbf44 100644 --- a/WiiQt/sharedcontentmap.cpp +++ b/WiiQt/sharedcontentmap.cpp @@ -12,7 +12,7 @@ bool SharedContentMap::Check( const QString &path ) { if( !data.size() || data.size() % 28 ) { - qWarning() << "SharedContentMap::Check -> bad size" << hex << data.size(); + qWarning() << "SharedContentMap::Check -> bad size" << Qt::hex << data.size(); return false; } @@ -51,7 +51,7 @@ bool SharedContentMap::Check( const QString &path ) { cid = data.mid( ( i * 28 ), 8 ); QString appName( cid ); - QFileInfo fi = dir.absoluteFilePath( appName + ".app" ); + QFileInfo fi = QFileInfo(dir.absoluteFilePath( appName + ".app" )); if( !fi.exists() ) { qWarning() << "SharedContentMap::Check -> content in the map isnt found in" << path; @@ -110,7 +110,7 @@ QString SharedContentMap::GetNextEmptyCid() //find the lowest number cid that isnt used while( cids.contains( ret ) ) ret++; - //qDebug() << hex << ret; + //qDebug() << Qt::hex << ret; return QString( "%1" ).arg( ret, 8, 16, QChar( '0' ) ); } @@ -118,7 +118,7 @@ void SharedContentMap::AddEntry( const QString &app, const QByteArray &hash ) { if( app.size() != 8 || hash.size() != 20 ) { - qWarning() << "SharedContentMap::AddEntry -> bas size" << hex << app.size() << hash.size(); + qWarning() << "SharedContentMap::AddEntry -> bas size" << Qt::hex << app.size() << hash.size(); return; } data += app.toLatin1() + hash; diff --git a/WiiQt/tiktmd.cpp b/WiiQt/tiktmd.cpp index fb697f0..5e77a1e 100644 --- a/WiiQt/tiktmd.cpp +++ b/WiiQt/tiktmd.cpp @@ -54,8 +54,7 @@ bool Tmd::SetIOS( quint64 ios ) bool Tmd::SetAhb( bool remove ) { - if( !p_tmd ) - return false; + if( !p_tmd ) return false; quint32 access = qFromBigEndian( p_tmd->access_rights ); if( remove ) @@ -68,8 +67,7 @@ bool Tmd::SetAhb( bool remove ) bool Tmd::SetDiskAccess( bool allow ) { - if( !p_tmd ) - return false; + if( !p_tmd ) return false; quint32 access = qFromBigEndian( p_tmd->access_rights ); if( allow ) @@ -299,7 +297,7 @@ Ticket::Ticket( const QByteArray &stuff, bool fixKeyIndex ) qWarning() << "Ticket::Ticket -> ticket uses the korean key. Only titles encrypted with the common key are supported"; return; } - qWarning() << "Ticket::Ticket -> key index is" << hex << *keyindex << ". Setting it to 0 and fakesigning"; + qWarning() << "Ticket::Ticket -> key index is" << Qt::hex << *keyindex << ". Setting it to 0 and fakesigning"; *keyindex = 0;//anything other than 0 or 1 is probably an error. fix it FakeSign(); @@ -316,8 +314,7 @@ quint64 Ticket::Tid() bool Ticket::SetTid( quint64 tid ) { - if( !p_tik ) - return false; + if( !p_tik ) return false; p_tik->titleid = qFromBigEndian( tid ); diff --git a/WiiQt/tools.cpp b/WiiQt/tools.cpp index ba5de54..e661919 100644 --- a/WiiQt/tools.cpp +++ b/WiiQt/tools.cpp @@ -83,14 +83,14 @@ void hexdump12( const QByteArray &d, int from, int len ) QByteArray PaddedByteArray( const QByteArray &orig, quint32 padTo ) { - //qDebug() << "need to pad from" << hex << orig.size() << "to nearest" << padTo; + //qDebug() << "need to pad from" << Qt::hex << orig.size() << "to nearest" << padTo; QByteArray padding( RU( orig.size(), padTo ) - orig.size(), '\0' ); return orig + padding; } QByteArray AesDecrypt( quint16 index, const QByteArray &source ) { - //qDebug() << "AesDecrypt" << hex << index << source.size(); + //qDebug() << "AesDecrypt" << Qt::hex << index << source.size(); quint8 iv[ 16 ]; quint16 beidx = qFromBigEndian( index ); @@ -192,7 +192,7 @@ bool IsValidSave( const SaveGame &save ) } else //unknown attribute { - qWarning() << "IsValidSave :unknown attribute" << i << hex << attr << NAND_ATTR_TYPE( attr ); + qWarning() << "IsValidSave :unknown attribute" << i << Qt::hex << attr << NAND_ATTR_TYPE( attr ); return false; } @@ -249,21 +249,6 @@ quint8 AttrFromSave( const SaveGame &save, const QString &name ) return 0; } -QString CleanSvnStr( const QString &orig ) -{ - QString ret = orig; - - if( ret.isEmpty() ) - return ret; - - QRegExp notNum( "[^0-9]" ); - QStringList parts = ret.split( notNum, QString::SkipEmptyParts ); - if( parts.size() ) - return parts.at( parts.size() - 1 ); - - return ret; -} - #define CERTS_DAT_SIZE 2560 const quint8 certs_dat[ CERTS_DAT_SIZE ] = { 0x00, 0x01, 0x00, 0x01, 0x7D, 0x9D, 0x5E, 0xBA, 0x52, 0x81, 0xDC, 0xA7, 0x06, 0x5D, 0x2F, 0x08, diff --git a/WiiQt/tools.h b/WiiQt/tools.h index ba6de81..ce72dff 100644 --- a/WiiQt/tools.h +++ b/WiiQt/tools.h @@ -82,9 +82,6 @@ QByteArray ReadFile( const QString &path ); //save a file to disc bool WriteFile( const QString &path, const QByteArray &ba ); -//cleanup an svn revision string -QString CleanSvnStr( const QString &orig ); - #define CERTS_DAT_SIZE 2560 extern const quint8 certs_dat[ CERTS_DAT_SIZE ]; extern const quint8 root_dat[]; diff --git a/WiiQt/uidmap.cpp b/WiiQt/uidmap.cpp index a8feaf1..9a78007 100644 --- a/WiiQt/uidmap.cpp +++ b/WiiQt/uidmap.cpp @@ -16,7 +16,7 @@ bool UIDmap::Check() { if( !data.size() || data.size() % 12 ) { - qWarning() << "UIDmap::Check() bad size:" << hex << data.size(); + qWarning() << "UIDmap::Check() bad size:" << Qt::hex << data.size(); return false; } @@ -32,7 +32,7 @@ bool UIDmap::Check() uid = qFromBigEndian( uid ); if( tid != 0x100000002ull || uid != 0x1000 )//system menu should be the first entry { - qWarning() << "UIDmap::Check() system menu entry is messed up:" << hex << tid << uid; + qWarning() << "UIDmap::Check() system menu entry is messed up:" << Qt::hex << tid << uid; buf.close(); return false; } @@ -55,7 +55,7 @@ bool UIDmap::Check() } if( ( uid != 0x1000 + i ) || uids.contains( uid ) ) { - qWarning() << "UIDmap::Check() uid error:" << QString( "%1" ).arg( tid, 16, 16, QChar( '0' ) ) << hex << uid; + qWarning() << "UIDmap::Check() uid error:" << QString( "%1" ).arg( tid, 16, 16, QChar( '0' ) ) << Qt::hex << uid; buf.close(); return false; } @@ -70,7 +70,7 @@ bool UIDmap::Check() quint32 UIDmap::GetUid( quint64 id, bool autoCreate ) { - //qDebug() << "UIDmap::GetUid" << hex << id; + //qDebug() << "UIDmap::GetUid" << Qt::hex << id; quint64 tid; quint32 uid; QBuffer buf( &data ); @@ -152,7 +152,7 @@ void UIDmap::CreateNew( quint8 addFactorySetupDiscs ) case 0x12:tid = qFromBigEndian( (quint64)( 0x0001000848414b00ull | reg ) ); break; case 0x13:tid = qFromBigEndian( 0x0001000031323200ull ); break; default: - qWarning() << "oops" << hex << i; + qWarning() << "oops" << Qt::hex << i; return; break; } diff --git a/WiiQt/wad.cpp b/WiiQt/wad.cpp index d85dc7b..49c57f3 100644 --- a/WiiQt/wad.cpp +++ b/WiiQt/wad.cpp @@ -95,7 +95,7 @@ Wad::Wad( const QByteArray &stuff ) qWarning() << "wad contains 2 different TIDs"; quint32 cnt = t.Count(); - //qDebug() << "Wad contains" << hex << cnt << "contents"; + //qDebug() << "Wad contains" << Qt::hex << cnt << "contents"; //another quick sanity check quint32 totalSize = 0; @@ -112,7 +112,7 @@ Wad::Wad( const QByteArray &stuff ) { quint32 s = RU( t.Size( i ), 0x40 ); - //qDebug() << "content" << i << "is at" << hex << pos + //qDebug() << "content" << i << "is at" << Qt::hex << pos // << "with size" << s; QByteArray encData = stuff.mid( pos, s ); pos += s; @@ -338,7 +338,7 @@ void Wad::Err( const QString &str ) const QByteArray Wad::Data( quint32 magicWord, const QByteArray &footer ) { - //qDebug() << "Wad::Data" << hex << magicWord << footer.size(); + //qDebug() << "Wad::Data" << Qt::hex << magicWord << footer.size(); if( !partsEnc.size() || tmdData.isEmpty() || tikData.isEmpty() || ( certData.isEmpty() && globalCert.isEmpty() ) ) { Err( "Dont have all the parts to make a wad" ); diff --git a/nandBinCheck/main.cpp b/nandBinCheck/main.cpp index dab70cb..f392e6a 100644 --- a/nandBinCheck/main.cpp +++ b/nandBinCheck/main.cpp @@ -1,6 +1,4 @@ -#include "svnrev.h" - #include "../WiiQt/includes.h" #include "../WiiQt/nandbin.h" #include "../WiiQt/sharedcontentmap.h" @@ -1323,7 +1321,6 @@ int main( int argc, char *argv[] ) qCritical() << "** nandBinCheck : Wii nand info tool **"; qCritical() << " from giantpune"; - qCritical() << " svn r:" << qPrintable( CleanSvnStr( SVN_REV_STR ) ); qCritical() << " built:" << __DATE__ << __TIME__; if( args.contains( "-about", Qt::CaseInsensitive ) ) diff --git a/nandBinCheck/nandBinCheck.pro b/nandBinCheck/nandBinCheck.pro index 3849a2a..ee7a6cc 100644 --- a/nandBinCheck/nandBinCheck.pro +++ b/nandBinCheck/nandBinCheck.pro @@ -45,13 +45,3 @@ HEADERS += ../WiiQt/tiktmd.h \ FORMS += \ ../WiiQt/settingtxtdialog.ui - -# create new svnrev.h -unix { - system( chmod 755 ../tools/makesvnrev.sh ) - system( ../tools/makesvnrev.sh ) -} - -win32 { - system( "..\\tools\\SubWCRev.exe" "." "..\\tools\\svnrev_template.h" ".\\svnrev.h" ) -} diff --git a/nandExtract/nandExtract.pro b/nandExtract/nandExtract.pro index 46cbc50..f590f2f 100644 --- a/nandExtract/nandExtract.pro +++ b/nandExtract/nandExtract.pro @@ -30,13 +30,3 @@ FORMS += nandwindow.ui \ RESOURCES += \ rc.qrc - -# create new svnrev.h -unix { - system( chmod 755 ../tools/makesvnrev.sh ) - system( ../tools/makesvnrev.sh ) -} - -win32 { - system( "..\\tools\\SubWCRev.exe" "." "..\\tools\\svnrev_template.h" ".\\svnrev.h" ) -} diff --git a/nandExtract/nandwindow.cpp b/nandExtract/nandwindow.cpp index e5e88af..a882433 100644 --- a/nandExtract/nandwindow.cpp +++ b/nandExtract/nandwindow.cpp @@ -1,5 +1,4 @@ #include "nandwindow.h" -#include "svnrev.h" #include "ui_nandwindow.h" #include "boot2infodialog.h" #include "../WiiQt/tools.h" @@ -8,7 +7,7 @@ NandWindow::NandWindow( QWidget *parent ) : QMainWindow( parent ), ui( new Ui::N { ui->setupUi( this ); ui->mainToolBar->setVisible( false ); - this->setWindowTitle( "NAND Extract r" + CleanSvnStr( SVN_REV_STR ) ); + this->setWindowTitle( "NAND Extract r" ); //setup the block map SetUpBlockMap(); diff --git a/nand_dump/icon.png b/nand_dump/icon.png deleted file mode 100755 index 9103c50..0000000 Binary files a/nand_dump/icon.png and /dev/null differ diff --git a/nand_dump/main.cpp b/nand_dump/main.cpp deleted file mode 100644 index 1b39053..0000000 --- a/nand_dump/main.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include "mainwindow.h" - -int main(int argc, char *argv[]) -{ - Q_INIT_RESOURCE( rc ); - QApplication a(argc, argv); - QApplication::setWindowIcon( QIcon( ":/icon.png" ) ); - MainWindow w; - w.show(); - - return a.exec(); -} diff --git a/nand_dump/mainwindow.cpp b/nand_dump/mainwindow.cpp deleted file mode 100644 index a481b81..0000000 --- a/nand_dump/mainwindow.cpp +++ /dev/null @@ -1,571 +0,0 @@ -#include "mainwindow.h" -#include "ui_mainwindow.h" -#include "../WiiQt/settingtxtdialog.h" -#include "../WiiQt/tiktmd.h" -#include "../WiiQt/tools.h" -#include "../WiiQt/wad.h" - - -MainWindow::MainWindow( QWidget *parent ) : QMainWindow( parent ), ui( new Ui::MainWindow ), nus ( this ) -{ - ui->setupUi(this); - ui->mainToolBar->setVisible( false );//hide toolbar for now - - //resize buttons to be same size - QFontMetrics fm( fontMetrics() ); - int max = fm.width( ui->pushButton_CachePathBrowse->text() ); - max = MAX( max, fm.width( ui->pushButton_decFolder->text() ) ); - max = MAX( max, fm.width( ui->pushButton_GetTitle->text() ) ); - max = MAX( max, fm.width( ui->pushButton_nandPath->text() ) ); - max = MAX( max, fm.width( ui->pushButton_wad->text() ) ); - - max += 15; - ui->pushButton_CachePathBrowse->setMinimumWidth( max ); - ui->pushButton_decFolder->setMinimumWidth( max ); - ui->pushButton_GetTitle->setMinimumWidth( max ); - ui->pushButton_nandPath->setMinimumWidth( max ); - ui->pushButton_wad->setMinimumWidth( max ); - - Wad::SetGlobalCert( QByteArray( (const char*)&certs_dat, CERTS_DAT_SIZE ) ); - - //connect to the nus object so we can respond to what it is saying with pretty stuff in the gui - connect( &nus, SIGNAL( SendDownloadProgress( int ) ), ui->progressBar_dl, SLOT( setValue( int ) ) ); - connect( &nus, SIGNAL( SendTitleProgress( int ) ), ui->progressBar_title, SLOT( setValue( int ) ) ); - connect( &nus, SIGNAL( SendTotalProgress( int ) ), ui->progressBar_whole, SLOT( setValue( int ) ) ); - connect( &nus, SIGNAL( SendText( QString ) ), ui->statusBar, SLOT( showMessage( QString ) ) ); - connect( &nus, SIGNAL( SendError( const QString &, const NusJob & ) ), this, SLOT( GetError( const QString &, const NusJob & ) ) ); - connect( &nus, SIGNAL( SendDone() ), this, SLOT( NusIsDone() ) ); - connect( &nus, SIGNAL( SendData( const NusJob & ) ), this, SLOT( ReceiveTitleFromNus( const NusJob & ) ) ); - - LoadSettings(); -} - -MainWindow::~MainWindow() -{ - SaveSettings(); - delete ui; -} - -void MainWindow::SaveSettings() -{ - QSettings s( QSettings::IniFormat, QSettings::UserScope, "WiiQt", "examples", this ); - - //settings specific to this program - s.beginGroup( "nusDownloader" ); - //window geometry - s.setValue( "size", size() ); - s.setValue( "pos", pos() ); - - //which radio button is selected - quint8 val = 0; - if( ui->radioButton_folder->isChecked() ) - val = 1; - else if( ui->radioButton_wad->isChecked() ) - val = 2; - s.setValue( "radio", val ); - - s.setValue( "folder", ui->lineEdit_extractPath->text() ); - s.setValue( "nuswads", ui->lineEdit_wad->text() ); - - s.endGroup(); - - //settings shared in multiple programs - //paths - s.beginGroup( "paths" ); - s.setValue( "nusCache", ui->lineEdit_cachePath->text() ); - s.setValue( "sneek", ui->lineEdit_nandPath->text() ); - s.endGroup(); - -} -#ifdef Q_WS_WIN -#define PATH_PREFIX QString("../..") -#else -#define PATH_PREFIX QString("..") -#endif - -void MainWindow::LoadSettings() -{ - QSettings s( QSettings::IniFormat, QSettings::UserScope, "WiiQt", "examples", this ); - - //settings specific to this program - s.beginGroup( "nusDownloader" ); - resize( s.value("size", QSize( 585, 457 ) ).toSize() ); - move( s.value("pos", QPoint( 2, 72 ) ).toPoint() ); - - quint8 radio = s.value( "radio", 0 ).toInt(); - if( radio == 1 ) - ui->radioButton_folder->setChecked( true ); - else if( radio == 2 ) - ui->radioButton_wad->setChecked( true ); - - ui->lineEdit_extractPath->setText( s.value( "folder", PATH_PREFIX + "/downloaded" ).toString() ); - ui->lineEdit_wad->setText( s.value( "nuswads", PATH_PREFIX + "/wads" ).toString() ); - - s.endGroup(); - - //settings shared in multiple programs - s.beginGroup( "paths" ); - - QString cachePath = s.value( "nusCache", PATH_PREFIX + "/NUS_cache" ).toString(); - QString nandPath = s.value( "sneek" ).toString(); - ui->lineEdit_cachePath->setText( cachePath ); - ui->lineEdit_nandPath->setText( nandPath ); - - if( !nandPath.isEmpty() ) - nand.SetPath( QFileInfo( nandPath ).absoluteFilePath() ); - if( !cachePath.isEmpty() ) - nus.SetCachePath( QFileInfo( cachePath ).absoluteFilePath() ); - s.endGroup(); - -} - -//some slots to respond to the NUS downloader -void MainWindow::GetError( const QString &message, const NusJob &job ) -{ - QString dataStuff = QString( "%1 items:" ).arg( job.data.size() ); - for( int i = 0; i < job.data.size(); i++ ) - dataStuff += QString( " %1" ).arg( job.data.at( i ).size(), 0, 16, QChar( ' ' ) ); - - QString str = tr( "Error getting title from NUS: %1" ).arg( message ); - QString j = QString( "NusJob( %1, %2, %3, %4 )
" ) - .arg( job.tid, 16, 16, QChar( '0' ) ) - .arg( job.version ).arg( job.decrypt ? "decrypted" : "encrypted" ) - .arg( dataStuff ); - - - ui->plainTextEdit_log->appendHtml( str ); - ui->plainTextEdit_log->appendHtml( j ); -} - -void MainWindow::ShowMessage( const QString& mes ) -{ - QString str = mes + "
"; - ui->plainTextEdit_log->appendHtml( str ); -} - -void MainWindow::NusIsDone() -{ - QString str = tr( "NUS object is done working
" ); - ui->plainTextEdit_log->appendHtml( str ); - ui->statusBar->showMessage( tr( "Done" ), 5000 ); - if( ui->radioButton_folder->isChecked() ) - { - ui->lineEdit_extractPath->setEnabled( true ); - ui->pushButton_decFolder->setEnabled( true ); - } - else if( ui->radioButton_nand->isChecked() ) - { - //check if IOS35 is present in nand dump - needed for sneek - QByteArray tmdBA = nand.GetFile( "/title/00000001/00000023/content/title.tmd" ); - if( tmdBA.isEmpty() ) - { - ui->plainTextEdit_log->appendHtml( tr( "IOS35 not found on nand. Getting it now...") ); - nus.Get( 0x100000023ull, true ); - return; - } - ui->lineEdit_nandPath->setEnabled( true ); - ui->pushButton_nandPath->setEnabled( true ); - - //write the uid.sys and content.map to disc - ShowMessage( tr( "Flushing nand..." ) ); - nand.Flush(); - - //make sure there is a setting.txt - QByteArray set = nand.GetSettingTxt(); - if( set.isEmpty() ) - { - quint8 reg = SETTING_TXT_UNK; - if( ui->lineEdit_tid->text().endsWith( "e", Qt::CaseInsensitive ) && ui->lineEdit_tid->text().size() == 4 ) - reg = SETTING_TXT_PAL; - if( ui->lineEdit_tid->text().endsWith( "j", Qt::CaseInsensitive ) && ui->lineEdit_tid->text().size() == 4 ) - reg = SETTING_TXT_JAP; - if( ui->lineEdit_tid->text().endsWith( "k", Qt::CaseInsensitive ) && ui->lineEdit_tid->text().size() == 4 ) - reg = SETTING_TXT_KOR; - set = SettingTxtDialog::Edit( this, QByteArray(), reg ); - if( !set.isEmpty() ) - nand.SetSettingTxt( set ); - } - /*QMap< quint64, quint16 > t = nand.GetInstalledTitles(); - QMap< quint64, quint16 >::iterator i = t.begin(); - while( i != t.end() ) - { - QString title = QString( "%1v%2" ).arg( i.key(), 16, 16, QChar( '0' ) ).arg( i.value() ); - qDebug() << "title:" << title; - i++; - }*/ - } - else if( ui->radioButton_wad->isChecked() ) - { - ui->lineEdit_wad->setEnabled( true ); - ui->pushButton_wad->setEnabled( true ); - } - - ui->radioButton_folder->setEnabled( true ); - ui->radioButton_nand->setEnabled( true ); - ui->radioButton_wad->setEnabled( true ); -} - -void MainWindow::ReceiveTitleFromNus( const NusJob &job ) -{ - QString str = tr( "Received a completed download from NUS" ); - QString title = QString( "%1v%2" ).arg( job.tid, 16, 16, QChar( '0' ) ).arg( job.version ); - - ui->plainTextEdit_log->appendHtml( str ); - - //do something with the data we got - if( ui->radioButton_folder->isChecked() )//copy its decrypted contents to a folder - { - SaveJobToFolder( job ); - } - else if( ui->radioButton_nand->isChecked() )//install this title to a decrypted nand dump for sneek/dolphin - { - bool ok = nand.InstallNusItem( job ); - if( ok ) - ShowMessage( tr( "Installed %1 title to nand" ).arg( title ) ); - else - ShowMessage( tr( "Error installing %1 title to nand" ).arg( title ) ); - } - else if( ui->radioButton_wad->isChecked() ) - { - SaveJobToWad( job ); - } -} - -//clicked the button to get a title -void MainWindow::on_pushButton_GetTitle_clicked() -{ - bool ok = false; - bool wholeUpdate = false; - quint64 tid = 0; - quint32 ver = 0; - if( ui->lineEdit_tid->text().size() == 4 ) - { - wholeUpdate = true; - } - else - { - tid = ui->lineEdit_tid->text().toLongLong( &ok, 16 ); - if( !ok ) - { - ShowMessage( "Error converting \"" + ui->lineEdit_tid->text() + "\" to a hex number." ); - return; - } - ver = TITLE_LATEST_VERSION; - if( !ui->lineEdit_version->text().isEmpty() ) - { - ver = ui->lineEdit_version->text().toInt( &ok, 10 ); - if( !ok ) - { - ShowMessage( "Error converting \"" + ui->lineEdit_version->text() + "\" to a decimal number." ); - return; - } - if( ver > 0xffff ) - { - ShowMessage( tr( "Version %1 is too high. Max is 65535" ).arg( ver ) ); - return; - } - } - } - //decide how we want nus to give us the title - bool decrypt = true; - if( ui->radioButton_folder->isChecked() ) - { - if( ui->lineEdit_extractPath->text().isEmpty() ) - { - ShowMessage( tr( "No path given to save downloads in." ) ); - return; - } - ui->lineEdit_extractPath->setEnabled( false ); - ui->pushButton_decFolder->setEnabled( false ); - } - else if( ui->radioButton_nand->isChecked() ) - { - if( nand.GetPath() != ui->lineEdit_nandPath->text() && !nand.SetPath( ui->lineEdit_nandPath->text() ) ) - { - ShowMessage( tr( "Error setting the basepath of the nand to %1" ) - .arg( QFileInfo( ui->lineEdit_nandPath->text() ).absoluteFilePath() ) ); - return; - } - if( ui->lineEdit_nandPath->text().isEmpty() ) - { - ShowMessage( tr( "No path given for nand dump base." ) ); - return; - } - ui->lineEdit_nandPath->setEnabled( false ); - ui->pushButton_nandPath->setEnabled( false ); - } - else if( ui->radioButton_wad->isChecked() ) - { - if( ui->lineEdit_wad->text().isEmpty() ) - { - ShowMessage( tr( "No path given to save wads in." ) ); - return; - } - decrypt = false; - ui->lineEdit_wad->setEnabled( false ); - ui->pushButton_wad->setEnabled( false ); - - } - - ui->radioButton_folder->setEnabled( false ); - ui->radioButton_nand->setEnabled( false ); - ui->radioButton_wad->setEnabled( false ); - //dont set these to 0 in case the button is pressed while something else is already being downloaded - //ui->progressBar_dl->setValue( 0 ); - //ui->progressBar_title->setValue( 0 ); - //ui->progressBar_whole->setValue( 0 ); - nus.SetCachePath( QFileInfo( ui->lineEdit_cachePath->text() ).absoluteFilePath() ); - - if( wholeUpdate ) - { - if( !nus.GetUpdate( ui->lineEdit_tid->text(), decrypt ) ) - { - ShowMessage( tr( "I dont know the titles that were in the %1 update" ).arg( ui->lineEdit_tid->text() ) ); - return; - } - } - else - { - nus.Get( tid, decrypt, ver ); - } -} - -//ratio buttons toggled -void MainWindow::on_radioButton_nand_toggled( bool checked ) -{ - ui->lineEdit_nandPath->setEnabled( checked ); - ui->pushButton_nandPath->setEnabled( checked ); -} - -void MainWindow::on_radioButton_folder_toggled( bool checked ) -{ - ui->lineEdit_extractPath->setEnabled( checked ); - ui->pushButton_decFolder->setEnabled( checked ); -} - -void MainWindow::on_radioButton_wad_toggled( bool checked ) -{ - ui->lineEdit_wad->setEnabled( checked ); - ui->pushButton_wad->setEnabled( checked ); -} - -//search for a path to use as the nand basepath -void MainWindow::on_pushButton_nandPath_clicked() -{ - QString path = ui->lineEdit_nandPath->text().isEmpty() ? "/media" : ui->lineEdit_nandPath->text(); - QString f = QFileDialog::getExistingDirectory( this, tr( "Select Nand Base Folder" ), path ); - if( f.isEmpty() ) - return; - - ui->lineEdit_nandPath->setText( f ); - nus.SetCachePath( ui->lineEdit_cachePath->text() ); -} - -void MainWindow::on_pushButton_decFolder_clicked() -{ - QString path = ui->lineEdit_extractPath->text().isEmpty() ? QDir::currentPath() : ui->lineEdit_extractPath->text(); - QString f = QFileDialog::getExistingDirectory( this, tr( "Select folder to save decrypted titles" ), path ); - if( f.isEmpty() ) - return; - - ui->lineEdit_extractPath->setText( f ); -} - -void MainWindow::on_pushButton_wad_clicked() -{ - QString path = ui->lineEdit_wad->text().isEmpty() ? QDir::currentPath() : ui->lineEdit_wad->text(); - QString f = QFileDialog::getExistingDirectory( this, tr( "Select folder to save wads to" ), path ); - if( f.isEmpty() ) - return; - - ui->lineEdit_wad->setText( f ); -} - -//nand-dump -> setting.txt -void MainWindow::on_actionSetting_txt_triggered() -{ - if( nand.GetPath() != ui->lineEdit_nandPath->text() && !nand.SetPath( ui->lineEdit_nandPath->text() ) ) - { - ShowMessage( tr( "Error setting the basepath of the nand to %1" ) - .arg( QFileInfo( ui->lineEdit_nandPath->text() ).absoluteFilePath() ) ); - return; - } - QByteArray ba = nand.GetSettingTxt(); //read the current setting.txt - ba = SettingTxtDialog::Edit( this, ba ); //call a dialog to edit that existing file and store the result in the same bytearray - if( !ba.isEmpty() ) //if the dialog returned anything ( cancel wasnt pressed ) write that new setting.txt to the nand dump - nand.SetSettingTxt( ba ); -} - -//nand-dump -> flush -void MainWindow::on_actionFlush_triggered() -{ - if( !nand.GetPath().isEmpty() ) - nand.Flush(); -} - -//nand-dump -> ImportWad -void MainWindow::on_actionImportWad_triggered() -{ - if( nand.GetPath() != ui->lineEdit_nandPath->text() && - !nand.SetPath( ui->lineEdit_nandPath->text() ) ) - { - ShowMessage( tr( "Error setting the basepath of the nand to %1" ).arg( QFileInfo( ui->lineEdit_nandPath->text() ).absoluteFilePath() ) ); - return; - } - QString path = ui->lineEdit_wad->text().isEmpty() ? - QCoreApplication::applicationDirPath() : ui->lineEdit_wad->text(); - QString fn = QFileDialog::getOpenFileName( this, - tr("Wad files(*.wad)"), - path, - tr("WadFiles (*.wad)")); - if(fn == "") return; - - QByteArray data = ReadFile( fn ); - if( data.isEmpty() ) - return; - - Wad wad(data); - if( !wad.IsOk() ) { - ShowMessage( tr( "Wad data not ok" ) );; - return; - } - bool ok = nand.InstallWad( wad ); - if( ok ) - ShowMessage( tr( "Installed %1 title to nand" ).arg( wad.WadName() ) ); - else - ShowMessage( tr( "Error %1 title to nand" ).arg( wad.WadName() ) ); -} - -//save a NUS job to a folder -void MainWindow::SaveJobToFolder( NusJob job ) -{ - QString title = QString( "%1v%2" ).arg( job.tid, 16, 16, QChar( '0' ) ).arg( job.version ); - QFileInfo fi( ui->lineEdit_extractPath->text() ); - if( fi.isFile() ) - { - ShowMessage( "" + ui->lineEdit_extractPath->text() + " is a file. I need a folder<\b>" ); - return; - } - if( !fi.exists() ) - { - ShowMessage( "" + fi.absoluteFilePath() + " is not a folder!\nTrying to create it...<\b>" ); - if( !QDir().mkpath( fi.absoluteFilePath() ) ) - { - ShowMessage( "Failed to make the directory!<\b>" ); - return; - } - } - QString newFName = title; - int i = 1; - while( QFileInfo( fi.absoluteFilePath() + "/" + newFName ).exists() )//find a folder that doesnt exist and try to create it - { - newFName = QString( "%1 (copy%2)" ).arg( title ).arg( i++ ); - } - if( !QDir().mkpath( fi.absoluteFilePath() + "/" + newFName ) ) - { - ShowMessage( "Can't create" + fi.absoluteFilePath() + "/" + newFName + " to save this title into!<\b>" ); - return; - } - //start writing all this stuff to the HDD - QDir d( fi.absoluteFilePath() + "/" + newFName ); - QByteArray tmdDat = job.data.takeFirst(); //remember the tmd and use it for getting the names of the .app files - if( !WriteFile( d.absoluteFilePath( "title.tmd" ), tmdDat ) ) - { - ShowMessage( "Error writing " + d.absoluteFilePath( "title.tmd" ) + "!<\b>" ); - return; - } - if( !WriteFile( d.absoluteFilePath( "cetk" ), job.data.takeFirst() ) ) - { - ShowMessage( "Error writing " + d.absoluteFilePath( "cetk" ) + "!<\b>" ); - return; - } - Tmd t( tmdDat ); - quint16 cnt = t.Count(); - if( job.data.size() != cnt ) - { - ShowMessage( "Error! Number of contents in the TMD dont match the number received from NUS!<\b>" ); - return; - } - for( quint16 i = 0; i < cnt; i++ )//write all the contents in the new folder. if the job is decrypted, append ".app" to the end of their names - { - QString appName = t.Cid( i ); - QByteArray stuff = job.data.takeFirst(); - if( job.decrypt ) - { - appName += ".app"; - //qDebug() << "resizing from" << hex << stuff.size() << "to" << (quint32)t.Size( i ); - //stuff.resize( t.Size( i ) ); - } - if( !WriteFile( d.absoluteFilePath( appName ), stuff ) ) - { - ShowMessage( "Error writing " + d.absoluteFilePath( appName ) + "!<\b>" ); - return; - } - } - ShowMessage( tr( "Wrote title to %1" ).arg( fi.absoluteFilePath() + "/" + newFName ) ); -} - -//save a completed job to wad -void MainWindow::SaveJobToWad( NusJob job ) -{ - QString title = QString( "%1v%2" ).arg( job.tid, 16, 16, QChar( '0' ) ).arg( job.version ); - Wad wad( job.data ); - if( !wad.IsOk() ) - { - ShowMessage( "Error making a wad from " + title + "<\b>" ); - return; - } - QFileInfo fi( ui->lineEdit_wad->text() ); - if( fi.isFile() ) - { - ShowMessage( "" + ui->lineEdit_wad->text() + " is a file. I need a folder<\b>" ); - return; - } - if( !fi.exists() ) - { - ShowMessage( "" + fi.absoluteFilePath() + " is not a folder!\nTrying to create it...<\b>" ); - if( !QDir().mkpath( ui->lineEdit_wad->text() ) ) - { - ShowMessage( "Failed to make the directory!<\b>" ); - return; - } - } - QByteArray w = wad.Data(); - if( w.isEmpty() ) - { - ShowMessage( "Error creating wad
" + wad.LastError() + "<\b>" ); - return; - } - - QString name = wad.WadName( fi.absoluteFilePath() ); - if( name.isEmpty() ) - { - name = QFileDialog::getSaveFileName( this, tr( "Filename for %1" ).arg( title ), fi.absoluteFilePath() ); - if( name.isEmpty() ) - { - ShowMessage( "No save name given, aborting<\b>" ); - return; - } - } - QFile file( fi.absoluteFilePath() + "/" + name ); - if( !file.open( QIODevice::WriteOnly ) ) - { - ShowMessage( "Cant open " + fi.absoluteFilePath() + "/" + name + " for writing<\b>" ); - return; - } - file.write( w ); - file.close(); - ShowMessage( "Saved " + title + " to " + fi.absoluteFilePath() + "/" + name ); - - -} - -void MainWindow::on_pushButton_CachePathBrowse_clicked() -{ - QString f = QFileDialog::getExistingDirectory( this, tr( "Select NUS Cache base folder" ) ); - if( f.isEmpty() ) - return; - - ui->lineEdit_cachePath->setText( f ); - nus.SetCachePath( ui->lineEdit_cachePath->text() ); -} diff --git a/nand_dump/mainwindow.h b/nand_dump/mainwindow.h deleted file mode 100644 index 70448cd..0000000 --- a/nand_dump/mainwindow.h +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef MAINWINDOW_H -#define MAINWINDOW_H - -#include "../WiiQt/includes.h" -#include "../WiiQt/nusdownloader.h" -#include "../WiiQt/nanddump.h" - -namespace Ui { - class MainWindow; -} - -class MainWindow : public QMainWindow -{ - Q_OBJECT - -public: - explicit MainWindow( QWidget *parent = 0 ); - ~MainWindow(); - -private: - Ui::MainWindow *ui; - - NusDownloader nus; - NandDump nand; - - void ShowMessage( const QString& mes ); - - //do something with a completed download - void SaveJobToFolder( NusJob job ); - void SaveJobToWad( NusJob job ); - - //settings - void SaveSettings(); - void LoadSettings(); - - - -public slots: - //slots for getting info from the NUS downloader - void GetError( const QString &message, const NusJob &job ); - void NusIsDone(); - void ReceiveTitleFromNus( const NusJob &job ); - - -private slots: - void on_pushButton_CachePathBrowse_clicked(); - void on_actionFlush_triggered(); - void on_actionSetting_txt_triggered(); - void on_actionImportWad_triggered(); - void on_pushButton_wad_clicked(); - void on_pushButton_decFolder_clicked(); - void on_pushButton_nandPath_clicked(); - void on_radioButton_wad_toggled(bool checked); - void on_radioButton_folder_toggled(bool checked); - void on_radioButton_nand_toggled(bool checked); - void on_pushButton_GetTitle_clicked(); -}; - -#endif // MAINWINDOW_H diff --git a/nand_dump/mainwindow.ui b/nand_dump/mainwindow.ui deleted file mode 100644 index 197dab6..0000000 --- a/nand_dump/mainwindow.ui +++ /dev/null @@ -1,262 +0,0 @@ - - - MainWindow - - - - 0 - 0 - 585 - 457 - - - - QtShitGetter - - - - - - - - - - - - 16 - - - - - - - v - - - - - - - - 107 - 16777215 - - - - - - - 5 - - - - - - - Get It! - - - - - - - - - - - - - - Local Cache - - - - - - - - - - - - - Download - - - - - - - 0 - - - - - - - Title - - - - - - - 0 - - - - - - - Total - - - - - - - 0 - - - - - - - - - - - Nand - - - true - - - true - - - - - - - - - - Search... - - - - - - - Folder - - - - - - - false - - - - - - - false - - - Search... - - - - - - - Wad - - - - - - - false - - - - - - - false - - - Search... - - - - - - - - - - - - - - - - 0 - 0 - 585 - 27 - - - - - Nand Dump - - - - - - - - - - - TopToolBarArea - - - false - - - - - - Setting.txt... - - - - - Flush - - - - - Import Wad - - - Ctrl+I - - - - - Import Folder - - - - - - - diff --git a/nand_dump/nand.pro b/nand_dump/nand.pro deleted file mode 100644 index 98aa67a..0000000 --- a/nand_dump/nand.pro +++ /dev/null @@ -1,41 +0,0 @@ -#------------------------------------------------- -# -# Project created by QtCreator 2010-12-02T23:30:12 -# -#------------------------------------------------- - -QT += core gui network widgets - -TARGET = nand -TEMPLATE = app - - -SOURCES += main.cpp\ - mainwindow.cpp \ - ../WiiQt/tools.cpp \ - ../WiiQt/sharedcontentmap.cpp \ - ../WiiQt/tiktmd.cpp \ - ../WiiQt/nusdownloader.cpp \ - ../WiiQt/uidmap.cpp \ - ../WiiQt/nanddump.cpp \ - ../WiiQt/settingtxtdialog.cpp \ - ../WiiQt/wad.cpp \ - ../WiiQt/aes.c \ - ../WiiQt/sha1.c - -HEADERS += mainwindow.h \ - ../WiiQt/tools.h \ - ../WiiQt/uidmap.h \ - ../WiiQt/sharedcontentmap.h \ - ../WiiQt/tiktmd.h \ - ../WiiQt/nusdownloader.h \ - ../WiiQt/uidmap.h \ - ../WiiQt/nanddump.h \ - ../WiiQt/settingtxtdialog.h \ - ../WiiQt/wad.h - -FORMS += mainwindow.ui \ - ../WiiQt/settingtxtdialog.ui - -RESOURCES += \ - rc.qrc diff --git a/nand_dump/rc.qrc b/nand_dump/rc.qrc deleted file mode 100644 index 619648d..0000000 --- a/nand_dump/rc.qrc +++ /dev/null @@ -1,5 +0,0 @@ - - - icon.png - - diff --git a/nand_dump/readmii.txt b/nand_dump/readmii.txt deleted file mode 100644 index d68b99b..0000000 --- a/nand_dump/readmii.txt +++ /dev/null @@ -1,5 +0,0 @@ -this program downloads files from NUS. currently it supports installing them to an extracted nand dump for use in sneek/dolphin. -downloaded files can be cached to a local file so next time you try to download that title, you wont need to get it from NUS. - -TODO... -saving content to a seperate folder and packing wads is only partially done diff --git a/ohneschwanzenegger/mainwindow.cpp b/ohneschwanzenegger/mainwindow.cpp index 79253f9..f83b44e 100644 --- a/ohneschwanzenegger/mainwindow.cpp +++ b/ohneschwanzenegger/mainwindow.cpp @@ -1,6 +1,5 @@ #include "mainwindow.h" #include "newnandbin.h" -#include "svnrev.h" #include "ui_mainwindow.h" #include "../WiiQt/settingtxtdialog.h" @@ -30,10 +29,10 @@ MainWindow::MainWindow( QWidget *parent ) : QMainWindow( parent ), ui( new Ui::M //resize buttons to be same size QFontMetrics fm( fontMetrics() ); - int max = fm.width( ui->pushButton_CachePathBrowse->text() ); - max = MAX( max, fm.width( ui->pushButton_GetTitle->text() ) ); - max = MAX( max, fm.width( ui->pushButton_initNand->text() ) ); - max = MAX( max, fm.width( ui->pushButton_nandPath->text() ) ); + int max = fm.horizontalAdvance( ui->pushButton_CachePathBrowse->text() ); + max = MAX( max, fm.horizontalAdvance( ui->pushButton_GetTitle->text() ) ); + max = MAX( max, fm.horizontalAdvance( ui->pushButton_initNand->text() ) ); + max = MAX( max, fm.horizontalAdvance( ui->pushButton_nandPath->text() ) ); max += 20; ui->pushButton_CachePathBrowse->setFixedWidth( max ); @@ -628,7 +627,7 @@ bool MainWindow::InstallNUSItem( NusJob job ) quint16 cnt; bool deleted = false; QTreeWidgetItem *content; - if( !job.tid || !job.data.size() > 2 ) + if( !job.tid || !(job.data.size() > 2) ) { qWarning() << "bad sizes"; ShowMessage( "Error installing title " + title + " to nand" ); @@ -773,7 +772,7 @@ bool MainWindow::InstallNUSItem( NusJob job ) } else { - qWarning() << "type" << hex << t.Type( i ); + qWarning() << "type" << Qt::hex << t.Type( i ); goto error; } } @@ -795,7 +794,7 @@ void MainWindow::on_actionAbout_triggered() "

IT SHOULD ONLY BE USED BY PEOPLE THAT KNOW HOW TO VERIFY THE FILES IT PRODUCES. AND HAVE A WAY TO FIX A BRICKED WII SHOULD THIS PROGRAM HAVE BUGS" "

YOU HAVE BEEN WARNED" "
giantpune" ); - QMessageBox::critical( this, tr( "svn r%1" ).arg( CleanSvnStr( SVN_REV_STR ) ), txt ); + QMessageBox::critical( this, tr( "NUS NAND Builder" ), txt ); } #if 0 @@ -1008,7 +1007,7 @@ void MainWindow::on_actionFormat_triggered() tid = qFromBigEndian( tid ); quint32 upper = ( ( tid >> 32 ) & 0xffffffff ); quint32 lower = ( tid & 0xffffffff ); - //qDebug() << hex << i << QString( "%1" ).arg( tid, 16, 16, QChar( '0' ) ) << upper << lower << QChar( ( lower >> 24 ) & 0xff ) << ( lower & 0xffffff00 ); + //qDebug() << Qt::hex << i << QString( "%1" ).arg( tid, 16, 16, QChar( '0' ) ) << upper << lower << QChar( ( lower >> 24 ) & 0xff ) << ( lower & 0xffffff00 ); if( ( upper == 0x10001 && ( ( lower >> 24 ) & 0xff ) != 0x48 ) || //a channel, not starting with 'H' lower == 0x48415858 || //original HBC tid == 0x100000000ull || //bannerbomb -> ATD ( or any other program that uses the SU tid ) diff --git a/ohneschwanzenegger/newnandbin.cpp b/ohneschwanzenegger/newnandbin.cpp index ebe98b5..50f2ed5 100644 --- a/ohneschwanzenegger/newnandbin.cpp +++ b/ohneschwanzenegger/newnandbin.cpp @@ -232,7 +232,7 @@ void NewNandBin::on_pushButton_badBlockFile_clicked() ui->listWidget_badBlocks->clear(); str.replace( "\r\n", "\n" ); - QStringList lines = str.split( "\n", QString::SkipEmptyParts ); + QStringList lines = str.split( "\n", Qt::SkipEmptyParts ); foreach( const QString &line, lines ) { if( line.size() > 5 ) @@ -307,7 +307,7 @@ void NewNandBin::on_pushButton_oldNand_clicked() } QList clusters = old.GetFats(); QList badBlacks; - if( !clusters.size() == 0x8000 ) + if( !(clusters.size() == 0x8000) ) { QMessageBox::warning( this, tr( "Error" ), \ tr( "Expected 0x8000 clusters from the nand, but got %1 instead!" ).arg( clusters.size(), 0, 16 ), QMessageBox::Ok ); @@ -317,13 +317,13 @@ void NewNandBin::on_pushButton_oldNand_clicked() } for( quint16 i = 0; i < 0x8000; i += 8 )//first cluster of each block. { - //qDebug() << hex << i << clusters.at( i ); + //qDebug() << Qt::hex << i << clusters.at( i ); if( clusters.at( i ) == 0xFFFD ) { quint16 block = ( i / 8 ); badBlacks << block; QString txt = QString( "%1" ).arg( block ); - //qDebug() << "bad cluster" << hex << i << block << txt; + //qDebug() << "bad cluster" << Qt::hex << i << block << txt; //if( ui->listWidget_badBlocks->findItems( txt, Qt::MatchExactly ).isEmpty() )//just in case, but this should always be true ui->listWidget_badBlocks->addItem( txt ); } @@ -355,7 +355,7 @@ QByteArray NewNandBin::GetCleanUid( QByteArray old ) tid = qFromBigEndian( tid ); quint32 upper = ( ( tid >> 32 ) & 0xffffffff ); quint32 lower = ( tid & 0xffffffff ); - //qDebug() << QString( "%1" ).arg( tid, 16, 16, QChar( '0' ) ) << hex << upper << lower << ( ( lower >> 24 ) & 0xff ) << ( lower & 0xffff00 ); + //qDebug() << QString( "%1" ).arg( tid, 16, 16, QChar( '0' ) ) << Qt::hex << upper << lower << ( ( lower >> 24 ) & 0xff ) << ( lower & 0xffff00 ); if( ( upper == 0x10001 && ( ( lower >> 24 ) & 0xff ) != 0x48 ) || //a channel, not starting with 'H' lower == 0x48415858 || //original HBC tid == 0x100000000ull || //bannerbomb -> ATD ( or any other program that uses the SU tid ) diff --git a/ohneschwanzenegger/refleurii.pro b/ohneschwanzenegger/refleurii.pro index bdf24fa..62eddfa 100644 --- a/ohneschwanzenegger/refleurii.pro +++ b/ohneschwanzenegger/refleurii.pro @@ -41,14 +41,3 @@ FORMS += mainwindow.ui \ ../WiiQt/settingtxtdialog.ui \ newnandbin.ui RESOURCES += rc.qrc - - -# create new svnrev.h -unix { - system( chmod 755 ../tools/makesvnrev.sh ) - system( ../tools/makesvnrev.sh ) -} - -win32 { - system( "..\\tools\\SubWCRev.exe" "." "..\\tools\\svnrev_template.h" ".\\svnrev.h" ) -} diff --git a/tools/SubWCRev.exe b/tools/SubWCRev.exe deleted file mode 100644 index 32a252b..0000000 Binary files a/tools/SubWCRev.exe and /dev/null differ diff --git a/tools/makesvnrev.sh b/tools/makesvnrev.sh deleted file mode 100755 index 6c71bbd..0000000 --- a/tools/makesvnrev.sh +++ /dev/null @@ -1,6 +0,0 @@ -REV=`svnversion -n .` -echo $REV -cat > ./svnrev.h <