From d98efd5cde2a2cda0b141342df078e7d0c0c221a Mon Sep 17 00:00:00 2001 From: nishikawa_takeshi Date: Mon, 8 Dec 2008 07:30:42 +0000 Subject: [PATCH] =?UTF-8?q?=E3=83=9E=E3=82=B9=E3=82=BF=E3=82=A8=E3=83=87?= =?UTF-8?q?=E3=82=A3=E3=82=BF:tad=E8=AA=AD=E3=81=BF=E8=BE=BC=E3=81=BF?= =?UTF-8?q?=E6=A9=9F=E8=83=BD=E3=82=92=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@62 7061adef-622a-194b-ae81-725974e89856 --- .../MasterEditorTWL/MasterEditorTWL.ncb | Bin 11283456 -> 11340800 bytes .../MasterEditorTWL/MasterEditorTWL.suo | Bin 57856 -> 59392 bytes .../MasterEditorTWL/Debug/BuildLog.htm | Bin 11742 -> 12432 bytes .../MasterEditorTWL/MasterEditorTWL/Form1.h | 70 ++-- .../MasterEditorTWL/Form_file.cpp | 315 ++++++++++-------- .../MasterEditorTWL/Form_tmp.cpp | 2 +- .../MasterEditorTWL/Release/BuildLog.htm | Bin 19796 -> 11920 bytes .../MasterEditorTWL/MasterEditorTWL/common.h | 1 + .../MasterEditorTWL/MasterEditorTWL/srl.cpp | 21 +- 9 files changed, 248 insertions(+), 161 deletions(-) diff --git a/build/tools/MasterEditor/MasterEditorTWL/MasterEditorTWL.ncb b/build/tools/MasterEditor/MasterEditorTWL/MasterEditorTWL.ncb index eb9c7c8a119e1d92939d2eb02033dfd9108fd42f..28f9f25acd42136263b83c9727a6a23c8f5b4950 100644 GIT binary patch delta 56232 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 ISf%Pe0UHgdy8r+H diff --git a/build/tools/MasterEditor/MasterEditorTWL/MasterEditorTWL.suo b/build/tools/MasterEditor/MasterEditorTWL/MasterEditorTWL.suo index 7670b4f977f403d55d4c685a11b8daf20bf4d1f0..4324638828ac22ca5cb409e249539daa054d6e7c 100644 GIT binary patch delta 7327 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 SIm?+sv@NclH5%J%#K delta 3880 zcmb7{dr;KZ6~}+~w-0%R;JPR%5Ef)$0@Z~85}|fg3Zk(Bq9#fO(Wo_Qd{84e%@QX= zOoAdD>u6$B`bTCO4aB|F$+R?DK}W4oh);r}CMKO^ib5bhYutX%?xkIwI@LRzJ>UEJ zo%_DOdw*258>-q2pM0tt$7z~IEqX@Wbch^SDr`J#0_+7?HY^u56;?puhQ#puZnwJ_ zIrj75OJTEMFVe3K&t%6!@sl$6`LKK#vj0hok^c>B3G5ZvQrI%sa@eb|v9P)VN4;@r zu)QYs+U*&~gaJrPcKRcays`36=+AHU*x$%ia8yVw5##x0N4O093+$2a6M$ zCVK}>A4ILjWGa6;pRz|}xk3(!%%?PgXYGj5;ltoR-;-+Txqscwyb!hohQ9~+8sxXp zPlIz!!BBxTXLKCdjb`&qg(Fu?6+_-ij)C%R zawPKOVGr|UFrMBhnQX1~rx2^%KMvWKVZ-H}$aT7yNWYDCnim1A4wZMKbv>wez2Q2t zo~4j}u^Gb1D6&IjbhEC}S79H^?)dNgJq74OaxYzo zOz<0+7I`}*OBi{QWk%{+rJB=L7-;sM2&&15Fr;XivgG;j06joZ<;2%@vygY;bPKXM z_r+|g$lX9G=~g*)?pQ(hH-*u`4Q7hmUznh2Lo|okZp3`K-C4S4>Uj(sGSmEaXQlb^ zQfT*rLda&cn!Xn6v>e*kkwi(8hk6H>GZ`Jq+I7CWKHe&Z$@5bhjAA%d}ln%4_*T=ApWtHt4uY}hq3-|QJM6%{+ec;xZuNCGSk_AHDU?JfSM zu4qNzL*1mVyg0eLc|NxjOjGlwkdPPTh0+Y2wk+)Z!vdYwE{vd%`MtEFtemPAMUx}; zwlGk^Ww#hamm6$!Ff4~+O83)_l~#FtNuxpdQN{98;@N@yMCGs6(E8eX+Pc_^XAO&P z$Q>&e==%zqL|titsmY$KjiKJIepK#9wIybMp2UyP>%nAu%__}n@^$JvGmcJn1&9;0 zt24X4a;-j8$jZuU1LdEx4SsO$@v_kIymXA|6@lu0M#&uxa#Xc@SHSv4xye|5SRTg; z(C%u#VZ+f_1hfw2OY|Stm>`yAs z>=?`lJE_&|%PJ5kp4xSmGkmnVF9ekW2bw$Fr!1 zEKacmAC?IH9O9A`<4H<^9tEGO*bL|~(4598#+Q#H$mwBPu1{c|3Y@RlEQGwQ*dE2E zgMF+RE=A9>afLsJ=9KHh@)Vn{*c?2cq1Xbag8Z?tP{B2d@km~S4uxN*7++woL-X{% zsn`POYG_Vd6)T0_uHsyZy#&^**k2SI!xfo5x4QNn>nFHR_$a6qbgnc6r*z?{8e|z3}0DHiU-nFW|FcijyfwxqkTd`>xT^Qgb@VP_OO zs~AsQ6EvsmigC6VKRA7zTAzaaP2CU8ox7tLoMr^zW7-VQ9pvN>Js7?Rg_yDZ0L`ar zzhYeW1~iwwqgWzzsM_`3uFL8pmBMLLZv~f$h2~GHcpo+fnkOMsF&=alG^c5b@eNU+ z*eu1kz89hS4V|qRe>}~B=5fyRGNvKzolBk?l&d=$E0FqJ+3BQ!m5)B&T1A61rQb)n9ES zNBd@BrjGU)ioRO%h{Iy1zB_9t{|BaNMf1#jT#~zGyX(w0qezpzT_$02;E_olSsNzA z3Aw8?LWs|0%a?Gyva<`WPu{$UrvGn8WJf!~0^}#(Mv2frqD5Y8-J+edx7wTRm+bfK F{|5bsQGoye diff --git a/build/tools/MasterEditor/MasterEditorTWL/MasterEditorTWL/Debug/BuildLog.htm b/build/tools/MasterEditor/MasterEditorTWL/MasterEditorTWL/Debug/BuildLog.htm index b274d4cf8ae4e9b9fc13df7d76e4d83e9d712124..aa567066b85c0b3412b49e26b4e54d4c49b4f2e4 100644 GIT binary patch delta 504 zcmcZ?Jt1*}8Jn;vgDZm(gBgQ45F0aC0%@bkiUOvaYuI+MO*WBHU`=KyU?`X@$g9g= z%22|P$&kaK#{d`OEn&z7$|H$P){*8w(o+CbTY{=*@*F8HxC-yd3cPZYxukfQfo4vg zud2Jbf>(?YtE(m|OK;xA7Y34aLwE9KMS)m;tP=h5g^a>x3@&-P+%{=@@j9AnJ3KW8b zEl{;i_GB~N%q673k14g;RS~Si5>?0MlS=taK-Fl%lLG~$H>auUF^U^7IHKxc&|^qq wNSr)TKyq>ho6zPPYC9NZaVTOaVNhaFnjFX`zWJDj2-DhSrl = gcnew (RCSrl); this->hDeliv = gcnew (RCDeliverable); + this->hIsLoadTad = gcnew System::Boolean(false); this->hErrorList = gcnew System::Collections::Generic::List(); this->hErrorList->Clear(); this->hWarnList = gcnew System::Collections::Generic::List(); @@ -705,6 +709,16 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colWarnCause; System::Reflection::Assembly ^ass = System::Reflection::Assembly::GetEntryAssembly(); this->labAssemblyVersion->Text = "ver." + this->getVersion(); + // TAD読み込みの際に作成される一時ファイルと同名ファイルがあった場合には削除してよいか確認 + System::Diagnostics::Debug::WriteLine( this->getSplitTadTmpFilename() ); + if( System::IO::File::Exists( this->getSplitTadTmpFilename() ) ) + { + this->sucMsg( "本プログラムで作成する一時ファイルと同名のファイルが存在します。このファイルを削除します。", + "There is the file which has same name as temporary file made by this program. That file is deleted." ); + System::IO::File::Delete( this->getSplitTadTmpFilename() ); + } + + // デフォルト値 this->hIsSpreadSheet = gcnew System::Boolean( true ); this->hIsReadOnly = gcnew System::Boolean( false ); @@ -755,6 +769,13 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colWarnCause; /// ~Form1() { + // TAD読み出しの際に作成される一時SRLファイルを削除(書き出しをせずに終了したときに起こりうる) + System::String ^srlfile = this->getSplitTadTmpFilename(); + if( System::IO::File::Exists( srlfile ) ) + { + System::IO::File::Delete( srlfile ); // すでに存在する場合は削除 + } + if (components) { delete components; @@ -2810,14 +2831,35 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colWarnCause; // 設定ファイルの読み込み void loadInit(void); - // SRLのオープン - System::Void loadSrl( System::String ^filename ); + // ファイルの読み込み (TAD/SRL読み込みをラップ) + void loadRom( System::String ^infile ); - // SRLの保存と再読み出し - System::Boolean saveSrl( System::String ^filename ); + // ファイルの書き出し (SRL書き出しをラップ) + System::Boolean saveRom( System::String ^outname ); + + // SRLの読み込み + System::Void loadSrl( System::String ^srlfile ); + + // SRLの保存と再読み込み + System::Boolean saveSrl( System::String ^infile, System::String ^outfile ); // SRLの保存のみ @ret 成否 - System::Boolean saveSrlCore( System::String ^filename ); + System::Boolean saveSrlCore( System::String ^infile, System::String ^outfile ); + + // tadの読み込み + System::Void loadTad( System::String ^tadfile ); + + // tadの読み込みで生成する一時SRLファイル名を返す + System::String ^getSplitTadTmpFilename(void) + { + System::String ^dir = System::IO::Path::GetDirectoryName( System::Reflection::Assembly::GetEntryAssembly()->Location ); + if( !dir->EndsWith("\\") ) + { + dir = dir + "\\"; + } + System::String ^tmpfile = dir + METWL_TAD_TMP_FILENAME; + return tmpfile; + } // ミドルウェアリストの作成(XML形式) System::Void makeMiddlewareListXml(System::Xml::XmlDocument^ doc); @@ -2831,9 +2873,6 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colWarnCause; // ミドルウェアリストの保存(XSL埋め込み) System::Boolean saveMiddlewareListXmlEmbeddedXsl( System::String ^filename ); - // tadの読み出し - System::Void loadTad( System::String ^tadfile ); - // 提出ファイル名をゲームコードなどから決定 System::String^ getSubmitFilePrefix(void) { @@ -3156,14 +3195,7 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colWarnCause; } // 拡張子で tad 読み込みにするかを判定 - if( System::IO::Path::GetExtension( filename )->ToLower()->Equals( ".tad" ) ) - { - this->loadTad( filename ); - } - else - { - this->loadSrl( filename ); - } + this->loadRom( filename ); this->tboxFile->Text = filename; this->clearOtherForms(); @@ -3224,7 +3256,7 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colWarnCause; try { - if( !this->saveSrl( srlfile ) ) + if( !this->saveRom( srlfile ) ) { this->errMsg( "マスターROMの作成に失敗しました。", "Making a master ROM failed." ); @@ -3323,7 +3355,7 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colWarnCause; // 更新後のSRLを別ファイルに作成 try { - if( !this->saveSrl( srlfile ) ) + if( !this->saveRom( srlfile ) ) { this->errMsg( "マスターROMの作成に失敗しました。作成を中止するため一部のファイルは作成されません。", "Making a master ROM failed. Therefore, a part of files can't be made." ); @@ -3471,7 +3503,7 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colWarnCause; "The ROM data file is not found. Therefore the file can not be opened." ); return; } - this->loadSrl( filename ); // ドラッグアンドドロップの時点でボタンを押さなくてもファイルを開く + this->loadRom( filename ); this->tboxFile->Text = filename; this->clearOtherForms(); //this->sucMsg( "ROMデータファイルのオープンに成功しました。", "The ROM data file is opened successfully." ); diff --git a/build/tools/MasterEditor/MasterEditorTWL/MasterEditorTWL/Form_file.cpp b/build/tools/MasterEditor/MasterEditorTWL/MasterEditorTWL/Form_file.cpp index 6815e8d..eceab51 100644 --- a/build/tools/MasterEditor/MasterEditorTWL/MasterEditorTWL/Form_file.cpp +++ b/build/tools/MasterEditor/MasterEditorTWL/MasterEditorTWL/Form_file.cpp @@ -23,131 +23,72 @@ using namespace System::Drawing; using namespace MasterEditorTWL; // ---------------------------------------------- -// 設定ファイルの読み込み +// ファイルの読み込み (TAD/SRL読み込みをラップ) // ---------------------------------------------- -void Form1::loadInit(void) +void Form1::loadRom( System::String ^infile ) { - System::Xml::XmlDocument ^doc = gcnew System::Xml::XmlDocument(); - - // xmlファイルの読み込み - try + this->hIsLoadTad = gcnew System::Boolean(false); + if( System::IO::Path::GetExtension( infile )->ToUpper()->Equals( ".TAD" ) ) // 拡張子で判別 { - doc->Load( "../resource/ini.xml" ); + *this->hIsLoadTad = true; + this->loadTad( infile ); } - catch( System::IO::FileNotFoundException ^s ) + else { - (void)s; - this->errMsg( "設定ファイルが見つかりません。", "Setting file is not found." ); + this->loadSrl( infile ); + } +} + +// ---------------------------------------------- +// ファイルの書き出し (TAD/SRL書き出しをラップ) +// ---------------------------------------------- + +System::Boolean Form1::saveRom( System::String ^outfile ) +{ + System::Boolean result = false; + if( *this->hIsLoadTad ) + { + // 一時ファイルにSRLを書き出しているのでその一時ファイルから出力ファイルを作成 + System::String ^tmpsrl = this->getSplitTadTmpFilename(); + result = this->saveSrl( tmpsrl, outfile ); + System::IO::File::Delete( tmpsrl ); + } + else + { + result = this->saveSrl( this->tboxFile->Text, outfile ); + } + return result; +} + +// ---------------------------------------------- +// tadの読み込み +// ---------------------------------------------- + +System::Void Form1::loadTad( System::String ^tadfile ) +{ + // tadファイルを変換したSRLを一時ファイルに保存 + System::String ^srlfile = this->getSplitTadTmpFilename(); + if( System::IO::File::Exists( srlfile ) ) + { + System::IO::File::Delete( srlfile ); // すでに存在する場合は削除(連続に読み込んだ場合に起こりうる) + } + if( splitTad( tadfile, srlfile ) != 0 ) + { + this->errMsg( "TADファイルの読み出しに失敗しました。", "Reading TAD file failed." ); + System::IO::File::Delete( srlfile ); return; } - catch( System::Exception ^s ) - { - (void)s; - this->errMsg( "設定ファイルを開くことができませんでした。", "Setting file can't be opened." ); - return; - } - - // タグ : ルート - System::Xml::XmlElement ^root = doc->DocumentElement; - - // タグ - System::Boolean bReadOnly = MasterEditorTWL::isXmlEqual( root, "rw", "r" ); - this->hIsReadOnly = System::Boolean( bReadOnly ); - if( bReadOnly ) - { - this->readOnly(); - } - - // タグ - if( MasterEditorTWL::isXmlEqual( root, "lang", "E" ) ) - { - this->stripItemEnglish->Checked = true; - this->stripItemJapanese->Checked = false; - this->changeEnglish(); - } - - // タグ - System::Boolean bXML = MasterEditorTWL::isXmlEqual( root, "output", "XML" ); - - // タグ - System::Boolean bCheck = MasterEditorTWL::isXmlEqual( root, "spcheck", "ON" ); - - if( bCheck ) // チェックするときのみ追加チェック項目を設定 - { - // チェックするかどうか - this->hSrl->hMrcSpecialList->hIsCheck = gcnew System::Boolean( true ); - - // SDK - try - { - u32 major = System::UInt32::Parse( MasterEditorTWL::getXPathText( root, "/init/sdk/major" ) ); - u32 minor = System::UInt32::Parse( MasterEditorTWL::getXPathText( root, "/init/sdk/minor" ) ); - u32 relstep = System::UInt32::Parse( MasterEditorTWL::getXPathText( root, "/init/sdk/relstep" ) ); - u32 sdkver = (major << 24) | (minor << 16) | (relstep & 0xFFFF); - this->hSrl->hMrcSpecialList->hSDKVer = gcnew System::UInt32( sdkver ); - } - catch ( System::Exception ^ex ) - { - (void)ex; - this->errMsg( "設定ファイル中のSDKバージョンが読み込めませんでした。バージョンは0とみなされます。", - "SDK ver. can't be read from setting file. Therefore it is set by 0." ); - this->hSrl->hMrcSpecialList->hSDKVer = gcnew System::UInt32( 0 ); - } - - // Shared2File - try - { - System::Int32 i; - for( i=0; i < METWL_NUMOF_SHARED2FILES; i++ ) - { - u32 size = System::UInt32::Parse( MasterEditorTWL::getXPathText( root, "/init/shared2/size" + i.ToString() ) ); - this->hSrl->hMrcSpecialList->hShared2SizeArray[i] = gcnew System::UInt32( size ); - } - } - catch ( System::Exception ^ex ) - { - (void)ex; - this->errMsg( "設定ファイル中のShared2ファイルサイズが読み込めませんでした。サイズはすべて0とみなされます。", - "One of shared2 file sizes can't be read from setting file. Therefore they are set by 0." ); - System::Int32 i; - for( i=0; i < METWL_NUMOF_SHARED2FILES; i++ ) - { - this->hSrl->hMrcSpecialList->hShared2SizeArray[i] = gcnew System::UInt32( 0 ); - } - } - } //if( bCheck ) - - if( bReadOnly || bXML | bCheck ) - { - System::String ^msgJ = gcnew System::String("[動作モード]"); - System::String ^msgE = gcnew System::String("[Processing Mode]"); - if( bReadOnly ) - { - msgJ += "\nリードオンリーモード"; - msgE += "\nRead Only Mode"; - } - if( bXML ) - { - msgJ += "\nXML出力モード"; - msgE += "\nXML Output Mode"; - } - if( bCheck ) - { - msgJ += "\n追加チェックモード"; - msgE += "\nExtra Check Mode"; - } - this->sucMsg( msgJ, msgE ); - } -} // loadInit() + this->loadSrl( srlfile ); // 一時保存したSRLを読み込み +} // ---------------------------------------------- -// SRLのオープン +// SRLの読み込み // ---------------------------------------------- -System::Void Form1::loadSrl( System::String ^filename ) +System::Void Form1::loadSrl( System::String ^srlfile ) { - ECSrlResult result = this->hSrl->readFromFile( filename ); + ECSrlResult result = this->hSrl->readFromFile( srlfile ); if( result != ECSrlResult::NOERROR ) { switch( result ) @@ -184,7 +125,7 @@ System::Void Form1::loadSrl( System::String ^filename ) // 全体のCRCを算出 u16 crc; - if( !getWholeCRCInFile( filename, &crc ) ) + if( !getWholeCRCInFile( srlfile, &crc ) ) { this->errMsg( "ROMデータのCRC計算に失敗しました。ROMデータの読み込みはキャンセルされました。", "Calculating CRC of the ROM data failed. Therefore reading ROM data is canceled." ); @@ -213,49 +154,43 @@ System::Void Form1::loadSrl( System::String ^filename ) // SRLの保存 // ---------------------------------------------- -System::Boolean Form1::saveSrl( System::String ^filename ) +System::Boolean Form1::saveSrl( System::String ^infile, System::String ^outfile ) { + if( !System::IO::File::Exists( infile ) ) + { + return false; + } + // コピーしたファイルにROMヘッダを上書き - if( !this->saveSrlCore( filename ) ) + if( !this->saveSrlCore( infile, outfile ) ) { return false; } // 再リード - this->loadSrl( filename ); + this->loadSrl( outfile ); return true; } // saveSrl() -System::Boolean Form1::saveSrlCore( System::String ^filename ) +System::Boolean Form1::saveSrlCore( System::String ^infile, System::String ^outfile ) { // ROM情報をフォームから取得してSRLバイナリに反映させる this->setSrlProperties(); // ファイルをコピー - if( !(filename->Equals( this->tboxFile->Text )) ) + if( !(outfile->Equals( infile )) ) { - System::IO::File::Copy( this->tboxFile->Text, filename, true ); + System::IO::File::Copy( infile, outfile, true ); } // コピーしたファイルにROMヘッダを上書き - if( this->hSrl->writeToFile( filename ) != ECSrlResult::NOERROR ) + if( this->hSrl->writeToFile( outfile ) != ECSrlResult::NOERROR ) { return false; } return true; } -// ---------------------------------------------- -// tadのオープン -// ---------------------------------------------- - -System::Void Form1::loadTad( System::String ^tadfile ) -{ - System::String ^srlfile = System::IO::Path::GetDirectoryName( System::Reflection::Assembly::GetEntryAssembly()->Location ) - + "\\tmp.srl"; - splitTad( tadfile, srlfile ); -} - // ---------------------------------------------- // ミドルウェアリストの作成 // ---------------------------------------------- @@ -393,3 +328,121 @@ System::Boolean Form1::saveMiddlewareListHtml( System::String ^filename ) return true; } +// ---------------------------------------------- +// 設定ファイルの読み込み +// ---------------------------------------------- + +void Form1::loadInit(void) +{ + System::Xml::XmlDocument ^doc = gcnew System::Xml::XmlDocument(); + + // xmlファイルの読み込み + try + { + doc->Load( "../resource/ini.xml" ); + } + catch( System::IO::FileNotFoundException ^s ) + { + (void)s; + this->errMsg( "設定ファイルが見つかりません。", "Setting file is not found." ); + return; + } + catch( System::Exception ^s ) + { + (void)s; + this->errMsg( "設定ファイルを開くことができませんでした。", "Setting file can't be opened." ); + return; + } + + // タグ : ルート + System::Xml::XmlElement ^root = doc->DocumentElement; + + // タグ + System::Boolean bReadOnly = MasterEditorTWL::isXmlEqual( root, "rw", "r" ); + this->hIsReadOnly = System::Boolean( bReadOnly ); + if( bReadOnly ) + { + this->readOnly(); + } + + // タグ + if( MasterEditorTWL::isXmlEqual( root, "lang", "E" ) ) + { + this->stripItemEnglish->Checked = true; + this->stripItemJapanese->Checked = false; + this->changeEnglish(); + } + + // タグ + System::Boolean bXML = MasterEditorTWL::isXmlEqual( root, "output", "XML" ); + + // タグ + System::Boolean bCheck = MasterEditorTWL::isXmlEqual( root, "spcheck", "ON" ); + + if( bCheck ) // チェックするときのみ追加チェック項目を設定 + { + // チェックするかどうか + this->hSrl->hMrcSpecialList->hIsCheck = gcnew System::Boolean( true ); + + // SDK + try + { + u32 major = System::UInt32::Parse( MasterEditorTWL::getXPathText( root, "/init/sdk/major" ) ); + u32 minor = System::UInt32::Parse( MasterEditorTWL::getXPathText( root, "/init/sdk/minor" ) ); + u32 relstep = System::UInt32::Parse( MasterEditorTWL::getXPathText( root, "/init/sdk/relstep" ) ); + u32 sdkver = (major << 24) | (minor << 16) | (relstep & 0xFFFF); + this->hSrl->hMrcSpecialList->hSDKVer = gcnew System::UInt32( sdkver ); + } + catch ( System::Exception ^ex ) + { + (void)ex; + this->errMsg( "設定ファイル中のSDKバージョンが読み込めませんでした。バージョンは0とみなされます。", + "SDK ver. can't be read from setting file. Therefore it is set by 0." ); + this->hSrl->hMrcSpecialList->hSDKVer = gcnew System::UInt32( 0 ); + } + + // Shared2File + try + { + System::Int32 i; + for( i=0; i < METWL_NUMOF_SHARED2FILES; i++ ) + { + u32 size = System::UInt32::Parse( MasterEditorTWL::getXPathText( root, "/init/shared2/size" + i.ToString() ) ); + this->hSrl->hMrcSpecialList->hShared2SizeArray[i] = gcnew System::UInt32( size ); + } + } + catch ( System::Exception ^ex ) + { + (void)ex; + this->errMsg( "設定ファイル中のShared2ファイルサイズが読み込めませんでした。サイズはすべて0とみなされます。", + "One of shared2 file sizes can't be read from setting file. Therefore they are set by 0." ); + System::Int32 i; + for( i=0; i < METWL_NUMOF_SHARED2FILES; i++ ) + { + this->hSrl->hMrcSpecialList->hShared2SizeArray[i] = gcnew System::UInt32( 0 ); + } + } + } //if( bCheck ) + + if( bReadOnly || bXML | bCheck ) + { + System::String ^msgJ = gcnew System::String("[動作モード]"); + System::String ^msgE = gcnew System::String("[Processing Mode]"); + if( bReadOnly ) + { + msgJ += "\nリードオンリーモード"; + msgE += "\nRead Only Mode"; + } + if( bXML ) + { + msgJ += "\nXML出力モード"; + msgE += "\nXML Output Mode"; + } + if( bCheck ) + { + msgJ += "\n追加チェックモード"; + msgE += "\nExtra Check Mode"; + } + this->sucMsg( msgJ, msgE ); + } +} // loadInit() diff --git a/build/tools/MasterEditor/MasterEditorTWL/MasterEditorTWL/Form_tmp.cpp b/build/tools/MasterEditor/MasterEditorTWL/MasterEditorTWL/Form_tmp.cpp index 6a6d830..5c7713d 100644 --- a/build/tools/MasterEditor/MasterEditorTWL/MasterEditorTWL/Form_tmp.cpp +++ b/build/tools/MasterEditor/MasterEditorTWL/MasterEditorTWL/Form_tmp.cpp @@ -115,7 +115,7 @@ System::Void Form1::saveTmp( System::String ^filename ) } } //saveTmp() -// 一時ファイルの読み出し +// 一時ファイルの読み込み void Form1::loadTmp( System::String ^filename ) { System::Xml::XmlDocument ^doc = gcnew System::Xml::XmlDocument; diff --git a/build/tools/MasterEditor/MasterEditorTWL/MasterEditorTWL/Release/BuildLog.htm b/build/tools/MasterEditor/MasterEditorTWL/MasterEditorTWL/Release/BuildLog.htm index 280c2d911c45ef098da663d1d84d12354d102cc9..7649dd4420c2249bd3e9cbcd56709568b6709341 100644 GIT binary patch delta 313 zcmcaIi*Z8i20J!EGX_@%BL*`Db09WmFl8{>9LV;aZSo#onay*g%os7{Ckt9jPm*!k z93dnDl66DXJvorgc=IzQH`d8<+-#FyI31a+z$P%cK}>10hNb}DPc*jNyvM?c2~%pb qptUbZhaswt&4o4}u?d&jSu$}K0bQ%dkPLKR!DL5|@Xg0O`d9#^!b83Q delta 2293 zcmcImO>7%Q6n-|%1`;-{94B$?#$KC1FshP?(*(6eNN&=Ks!9_TfkC81iGM;NaU6RS zk_#pmBoGoPPvXFdA}$f4AXb$?0#R|Gz4U_MihAJyNFb0991!r$IO`q%^jNLd_PqDK zH{bi2H-7ulcklW>dEDp~G)@zgqT_fb=utXBQ_h_6m%*o_!Hz7IsKn{;1AUuh(`8!4 zYts&mQeDGm&7(XY4)RQAv{REGeu?rxR&?y(Sz4zutQb^g2e+@bqy%7IIPwp~9haNh5^#Ggik zGi7XEp%r`|cr6-3!X>RIL3vXJkf(XLv=M~VW+7igv1N(##Lrv5%KDo%XWNvZ zW0c^H{&Bt?ddQzpfO;{;rQVVad>zR2s(cjn1w!kvXH4+b zxWV5Bg3=9_`U5Hv>CQO+5ejmuJIKN`VzNdjRr*XasS6?72uIdz6{Kyx5ufGL;ea`& zq|5ls(MjHo#94%n9i(=|XYryL^DQ}5b5M3&E1mtGh?5u|c4MAw$JeO5y6b{ax7P02Z z8%?_2leQUHDyFsrE3NupHqsp?mY#O{LEIAmh|h#YKZ`H%>vORu_|;_86gW6_5s!EL zCaZ&kD`${A-WHt~uZxe~sERM%s)|>{v%)Xrrml@e--|2a1Mv$S{#}>_ip7eUQOHqH z7=;Im-hA%03mM2VV)4K}MM6E=?jV;?XJmm-b^KU$E6_Nd?jE1xXk?9z%tZr-=D~Nj zn7EnU6Atethq&Aws9N+e24E8WGU%`(Cc`?euL{<#T#muiND=ka7`pZDB;C`{Y)JD^i0B>~no~b!610??q$V;f^vR3Rg z2HGkt>gI}Qt)(P^Ej8Lk`NL%95jR+iu8D8NPiUl@XrzU?Bg+|4XlNtn-{jt*{{e2j B_GkbA diff --git a/build/tools/MasterEditor/MasterEditorTWL/MasterEditorTWL/common.h b/build/tools/MasterEditor/MasterEditorTWL/MasterEditorTWL/common.h index 11755e6..5629400 100644 --- a/build/tools/MasterEditor/MasterEditorTWL/MasterEditorTWL/common.h +++ b/build/tools/MasterEditor/MasterEditorTWL/MasterEditorTWL/common.h @@ -21,3 +21,4 @@ #define METWL_MASK_REGION_ALL 0xffffffff #define METWL_NUMOF_SHARED2FILES 6 #define METWL_SEG3_CRC 0x0254 +#define METWL_TAD_TMP_FILENAME "tmp.srl" // TAD読み込みの際に split_tad で一時的に作成するファイル名 diff --git a/build/tools/MasterEditor/MasterEditorTWL/MasterEditorTWL/srl.cpp b/build/tools/MasterEditor/MasterEditorTWL/MasterEditorTWL/srl.cpp index da4b878..17b4f54 100644 --- a/build/tools/MasterEditor/MasterEditorTWL/MasterEditorTWL/srl.cpp +++ b/build/tools/MasterEditor/MasterEditorTWL/MasterEditorTWL/srl.cpp @@ -60,6 +60,17 @@ ECSrlResult RCSrl::readFromFile( System::String ^filename ) { return (ECSrlResult::ERROR_FILE_READ); } + +#ifdef METWL_WHETHER_SIGN_DECRYPT + // まず署名チェック + r = this->decryptRomHeader(); + if( r != ECSrlResult::NOERROR ) + { + (void)fclose(fp); + return r; + } +#endif //#ifdef METWL_WHETHER_SIGN_DECRYPT + { // ファイルを閉じる前にROMヘッダ以外の領域から設定を取り出す (void)this->hasDSDLPlaySign( fp ); @@ -77,16 +88,6 @@ ECSrlResult RCSrl::readFromFile( System::String ^filename ) } } -#ifdef METWL_WHETHER_SIGN_DECRYPT - // まず署名チェック - r = this->decryptRomHeader(); - if( r != ECSrlResult::NOERROR ) - { - (void)fclose(fp); - return r; - } -#endif //#ifdef METWL_WHETHER_SIGN_DECRYPT - // エラーリストをクリア this->hErrorList = gcnew System::Collections::Generic::List; this->hWarnList = gcnew System::Collections::Generic::List;