From fb2b916fcbd80422fd6965859e039067e7d546fa Mon Sep 17 00:00:00 2001 From: nishikawa_takeshi Date: Fri, 20 Feb 2009 06:23:53 +0000 Subject: [PATCH] =?UTF-8?q?=E5=87=BA=E5=8A=9B=E3=83=95=E3=82=A1=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E3=83=81=E3=82=A7=E3=83=83=E3=82=AB:=E5=85=A8?= =?UTF-8?q?=E9=A0=98=E5=9F=9F=E3=83=99=E3=83=AA=E3=83=95=E3=82=A1=E3=82=A4?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlToolsRED@167 7061adef-622a-194b-ae81-725974e89856 --- .../MasterEditorTWLChecker.ncb | Bin 7007232 -> 7007232 bytes .../MasterEditorTWLChecker.suo | Bin 32768 -> 33280 bytes .../MasterEditorTWLChecker/Debug/BuildLog.htm | Bin 11054 -> 10986 bytes .../MasterEditorTWLChecker.cpp | 92 +++++++++++++++-- .../MasterEditorTWLChecker/check.cpp | 29 +++++- .../MasterEditorTWLChecker/check.h | 2 +- .../MasterEditorTWLChecker/check_rom.cpp | 95 ++++++++++++++++-- 7 files changed, 199 insertions(+), 19 deletions(-) diff --git a/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker.ncb b/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker.ncb index 54ac40a5c06c5877a0ed98bf0ab5c18693462f50..220890f5047d87d4e3c91e1fd887ef683a8702a1 100644 GIT binary patch delta 9445 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 OR3iBJ!^f)TSpOGZKs{{$ delta 18151 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 CLkKwl delta 2198 zcmai#ZBSHI7{|}Kd+#pn3hpApmVm5+;Hc{&sAPh?i3-ZXXoznqW}!`rA|YVq(%?(> zNuKIMI-?(&aVC3Fj+SLACeD;IjapMPnWarQ)ii?EYGMifpSzbC#xFfHzdir+KhHh) z-gBOFH`K0$LfX-jT2#IeA^@mM%Q4IMZyvO`}e6Ue8Jjdd^G+5K|Im(qqIQB1A+ zMPmY#ovM~hqOK@iH5)zBt4kr4!CnqlfR(@rj~X2X`U7<6q$Abqg42vn3upz~!N)+| zcGPI{adXN>XON2HvncGWG*U6xW0kjL5caJ z(a#2pAMyF=>Hx>^d@uR|wR2>?v z@px7zo;5ybmr1Zku&o+LUoxoJokyWD-6~X=DQ$MVmx+W^43Ez-M;$r;X6)aDAk6eZpZ|N5KPW zqqd2CG^gH;t%{|->3OPa@_ZSchp9N`lE*(LW-inyvoFL(s`4jNrQb`bBXxrpLQ`A( z`!(|xsdH06x2ve>FKJnukXs5i1FX3TZ)`f?jUDn1LT7+ObYkWf zOyO1exv$EN3t({(aauXx6pmSdJ&q><=M@6>f}jX+@IDV%Tm{um{Uznp ztp|)P=H6rzQ|nb`X^Od8s(N0gre`OJ*Xc%G{6v(1 z`5wIMF<>n4SRTK>18|I0XBWgsK2JhjF54>Yatvf#q!tzi`Mwm6v_=g^Le#P-C}Yj> z@S-F`!u~yWI zXT(;hIb)#S8Xc?@hMqeP6x^+kRxp*6|5|v(9>PfcJpY6-)vOdlwls@d25p-xf+H(8}CSb zAYS7Ux?b`%jdX{Er&MG3EEOg7uU_$!3XKMHOzll zm!bK?f5r0BpudOaGkeYQwnLwQ=IF6J);FQ~5pG%D^U%Fk-u+>D{Z^jT#18XWn~iUN~VWAP1{W4 zU{kH^Y}_U3t>jknWM)xdqMuebziAG-T5>e2%zWzi`esR$lg80|WeF(HYH~EBnhbsG>3l^>S`)R#V$Oei>ISy} diff --git a/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker/Debug/BuildLog.htm b/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker/Debug/BuildLog.htm index 6f066d2c5111e6f5553bab8a236b237c8dfdfd46..02b73c90de30f6ee5a744ea824c30891bcb61493 100644 GIT binary patch delta 275 zcmZ1%_9}Ek9Gj>CgDHa}gE5045Ssz95rYMT!Q?^#)6FZ`+SoXg88R4B8Il>YH%Ia& zGh$c0`66F8M9K->pv{E>joe^em{ROAP+iXGx`5UjZ@wj4#01ufA-y?KA(>GcPY@8=%%yY*;xG(_n?EX>Ga>mdSnW0o01{0x&j0`b delta 273 zcmaDAx-M)(9Gj>igE@m4gE0^rG8i$KFc>hHGMG*F7ckwtf~}2h@)ub>)?|hPhJwk3 zQrerdcnuh_>)5=WuNxv|j&9gye}P7Bur5rgr_xYe7U;TwPB7lQL$-(stP?|ev%Nwx xqcq6zmgqVe^ca#D5+}dslboCisVerbose = false; + } +}; +System::Int32 parseOption( array ^args, RCContext ^context ); + +// ------------------------------------------------------------------ +// main +// ------------------------------------------------------------------ + int main(array ^args) { + RCContext ^context = gcnew RCContext(); + int argc = parseOption( args, context ); + try { - setDebugPrint( true ); + if( context->isVerbose ) + { + setDebugPrint( true ); + } + if( argc <= 0 ) + { + throw (gcnew System::Exception("Argc is 0.")); + } + else if( argc == 1 ) + { + System::String ^sheet = args[0]; + DebugPrint( "Sheet file : " + sheet ); - //FilenameItem ^fItem = gcnew FilenameItem; - //fItem->parseFilename( args[0] ); - //SheetItem ^sItem = gcnew SheetItem; - //sItem->readSheet( args[0] ); - //checkSheet( fItem, sItem ); + FilenameItem ^fItem = gcnew FilenameItem; + fItem->parseFilename( sheet ); + SheetItem ^sItem = gcnew SheetItem; + sItem->readSheet( sheet ); + checkSheet( fItem, sItem ); + } + else + { + System::String ^original = args[0]; + System::String ^target = args[1]; + DebugPrint( "Original file : " + original ); + DebugPrint( "Target file : " + target ); - FilenameItem ^fItem = gcnew FilenameItem; - fItem->parseFilename( args[0] ); - checkRom( fItem, args[0] ); + FilenameItem ^fItem = gcnew FilenameItem; + fItem->parseFilename( target ); + checkRom( fItem, original, target ); + } } catch( System::Exception ^ex ) { @@ -29,3 +70,36 @@ int main(array ^args) Console::WriteLine( "OK" ); return 0; } + +// ------------------------------------------------------------------ +// getopt +// ------------------------------------------------------------------ + +// @ret オプションを除いたときのargc +System::Int32 parseOption( array ^args, RCContext ^context ) +{ + System::Collections::Generic::List ^indexList + = gcnew System::Collections::Generic::List; + + int numopt = 0; + int i; + for( i=0; i < args->Length; i++ ) + { + if( args[i]->StartsWith( "-v" ) ) + { + context->isVerbose = true; + numopt++; + } + else if( !args[i]->StartsWith( "-" ) ) // オプションでない引数のindexを記録 + { + indexList->Add(i); + } + } + i=0; + for each( System::Int32 index in indexList ) // オプションでない引数を前につめていく + { + args[i] = args[index]; + i++; + } + return (args->Length - numopt); +} diff --git a/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker/check.cpp b/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker/check.cpp index 5ad8ddb..b69fa33 100644 --- a/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker/check.cpp +++ b/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker/check.cpp @@ -58,6 +58,11 @@ System::Void FilenameItem::parseFilename( System::String ^filepath ) System::String ^filename = System::IO::Path::GetFileNameWithoutExtension(filepath); cli::array ^list = filename->Split( '_' ); + if( list->Length < 4 ) + { + throw (gcnew System::Exception("Illegal filename format. REGION_OGN_AGE_LANG.[SRL/XML]")); + return; + } this->region = System::String::Copy(list[0]); this->ogn = System::String::Copy(list[1]); this->rating = System::String::Copy(list[2]); @@ -70,6 +75,24 @@ System::Void FilenameItem::parseFilename( System::String ^filepath ) DebugPrint( "{0,-10} {1,-20}", "Rating", this->rating ); DebugPrint( "{0,-10} {1,-20}", "Language",this->lang ); DebugPrint( "--------------------------------------------------------" ); + + // ファイル名の検査 + if( this->getRegionBitmap() == 0 ) + { + throw (gcnew System::Exception("Illegal filename format. (Region.) REGION_OGN_RATING_LANG.[SRL/XML]")); + return; + } + if( this->getOgnNumber() < -1 ) + { + throw (gcnew System::Exception("Illegal filename format. (Ogn.) REGION_OGN_RATING_LANG.[SRL/XML]")); + return; + } + if( this->getRatingValue() == 0 ) + { + throw (gcnew System::Exception("Illegal filename format. (Rating.) REGION_OGN_RATING_LANG.[SRL/XML]")); + return; + } + return; } @@ -125,7 +148,7 @@ u32 FilenameItem::getRegionBitmap() int FilenameItem::getOgnNumber() { - int num = -1; + int num = -2; if( this->ogn == "CERO" ) { num = OS_TWL_PCTL_OGN_CERO; @@ -158,6 +181,10 @@ int FilenameItem::getOgnNumber() //{ // num = OS_TWL_PCTL_OGN_GRB; //} + else if( this->ogn == "UN" ) + { + num = -1; + } return num; } diff --git a/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker/check.h b/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker/check.h index 435afe2..2ee3c61 100644 --- a/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker/check.h +++ b/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker/check.h @@ -40,7 +40,7 @@ public: }; // ROMヘッダの値と真値(ファイル名)を比較 -System::Void checkRom( FilenameItem ^fItem, System::String ^srlpath ); +System::Void checkRom( FilenameItem ^fItem, System::String ^orgSrl, System::String ^targetSrl ); // 提出確認書の文字列と真値を比較 System::Void checkSheet( FilenameItem ^fItem, SheetItem ^sItem ); diff --git a/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker/check_rom.cpp b/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker/check_rom.cpp index e3efc8d..c363ca5 100644 --- a/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker/check_rom.cpp +++ b/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker/check_rom.cpp @@ -12,20 +12,22 @@ #include System::Void checkRomHeaderSign( ROM_Header *prh ); - +System::Void verifyArea( FILE *fp1, FILE *fp2, const int offset, const int size ); // ------------------------------------------------------------------- // 出力SRLのチェック // ------------------------------------------------------------------- -System::Void checkRom( FilenameItem ^fItem, System::String ^srlpath ) +System::Void checkRom( FilenameItem ^fItem, System::String ^orgSrl, System::String ^targetSrl ) { - const char *chpath = - (const char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi( srlpath ).ToPointer(); + const char *chorg = + (const char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi( orgSrl ).ToPointer(); + const char *chtarget = + (const char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi( targetSrl ).ToPointer(); // ROMヘッダの読み込み ROM_Header rh; FILE *fp = NULL; - if( fopen_s( &fp, chpath, "rb" ) != NULL ) + if( fopen_s( &fp, chtarget, "rb" ) != NULL ) { throw (gcnew System::Exception("Fail to Open SRL File.")); return; @@ -73,9 +75,7 @@ System::Void checkRom( FilenameItem ^fItem, System::String ^srlpath ) u8 rating = fItem->getRatingValue(); if( rh.s.parental_control_rating_info[ ogn ] != rating ) { - throw (gcnew System::Exception("Mismatch Rating Ogn " + ogn.ToString() + ". " - + "filename = " + rating.ToString("2X") - + "srl = " + rh.s.parental_control_rating_info[ ogn ].ToString("2X") + ".")); + throw (gcnew System::Exception("Mismatch Rating Ogn " + ogn.ToString() + ".")); return; } @@ -106,6 +106,38 @@ System::Void checkRom( FilenameItem ^fItem, System::String ^srlpath ) } } DebugPrint( "--------------------------------------------------------" ); + + // 全領域ベリファイ + FILE *fp1 = NULL; + if( fopen_s( &fp1, chorg, "rb" ) != NULL ) + { + throw (gcnew System::Exception("Fail to Open SRL File.")); + return; + } + FILE *fp2 = NULL; + if( fopen_s( &fp2, chtarget, "rb" ) != NULL ) + { + throw (gcnew System::Exception("Fail to Open SRL File.")); + return; + } + // ファイルサイズをまずチェック + fseek(fp1, 0, SEEK_END); + u32 filesize1 = ftell( fp1 ); + fseek(fp2, 0, SEEK_END); + u32 filesize2 = ftell( fp2 ); + DebugPrint( "{0,-10} {1,-20} {2,-20}", nullptr, "Original File", "Target File" ); + DebugPrint( "{0,-10} {1,-20:X08} {2,-20:X08}", "Filesize", filesize1, filesize2 ); + DebugPrint( "--------------------------------------------------------" ); + if( filesize1 != filesize2 ) + { + throw (gcnew System::Exception("Incorrect filesize")); + return; + } + // マスタエディタで書き換えられていない領域をチェック + verifyArea( fp1, fp2, 0, 0x1b0 ); + verifyArea( fp1, fp2, 0x1b4, 0x2f0 - 0x1b4 ); + verifyArea( fp1, fp2, 0x300, filesize1 - 0x300 ); + DebugPrint( "--------------------------------------------------------" ); } // ------------------------------------------------------------------- @@ -168,3 +200,50 @@ System::Void checkRomHeaderSign( ROM_Header *prh ) } return; } + +// ------------------------------------------------------------------- +// 書き換えた箇所以外の全領域をベリファイしたいので +// 指定領域をベリファイする関数をつくる +// ------------------------------------------------------------------- +#define VERIFY_AREA_BUFSIZE (10*1024*1024) +System::Void verifyArea( FILE *fp1, FILE *fp2, const int offset, const int size ) +{ + if( !fp1 || !fp2 ) + { + throw (gcnew System::Exception("File pointer is NULL.")); + return; + } + + DebugPrint( "{0,-10} {1:X08} - {2:X08}", "Verify", offset, offset+size-1 ); + + cli::array ^mbuf1 = gcnew cli::array(VERIFY_AREA_BUFSIZE); // 解放の必要なし + pin_ptr buf1 = &mbuf1[0]; + cli::array ^mbuf2 = gcnew cli::array(VERIFY_AREA_BUFSIZE); + pin_ptr buf2 = &mbuf2[0]; + + fseek( fp1, offset, SEEK_SET ); + fseek( fp2, offset, SEEK_SET ); + + // バッファよりも大きい場合は細切れにリードしてベリファイする + int rest = size; + while( rest > 0 ) + { + int len = (rest > VERIFY_AREA_BUFSIZE)?(VERIFY_AREA_BUFSIZE):(rest); + if( fread(buf1, 1, len, fp1) != len ) + { + throw (gcnew System::Exception("In Verify, fail to fread")); + return; + } + if( fread(buf2, 1, len, fp2) != len ) + { + throw (gcnew System::Exception("In Verify, fail to fread")); + return; + } + if( memcmp(buf1, buf2, len) != 0 ) + { + throw (gcnew System::Exception("In Verify, incorrect area.")); + } + rest = rest - len; + } + return; +}