mirror of
https://github.com/rvtr/TwlToolsRED.git
synced 2025-10-31 06:41:18 -04:00
提出確認書チェックツール:TADバージョン計算して10進で出力するオプションを追加。
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlToolsRED@48 7061adef-622a-194b-ae81-725974e89856
This commit is contained in:
parent
d363c0b967
commit
1d16d6132c
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -17,6 +17,8 @@ System::Int32 parseOption( array<System::String ^> ^args, SheetCheckerContext ^c
|
|||||||
System::Boolean readRomHeader( System::String ^srlfile, ROM_Header *rh );
|
System::Boolean readRomHeader( System::String ^srlfile, ROM_Header *rh );
|
||||||
System::Boolean readSheet( System::String ^sheetfile, SheetItem ^item );
|
System::Boolean readSheet( System::String ^sheetfile, SheetItem ^item );
|
||||||
System::String^ getXPathText( System::Xml::XmlElement ^root, System::String ^xpath );
|
System::String^ getXPathText( System::Xml::XmlElement ^root, System::String ^xpath );
|
||||||
|
void printResult( SheetCheckerContext ^context, ROM_Header *rh, SheetItem ^item,
|
||||||
|
System::String ^srlfile, System::String ^sheetfile, System::UInt16 srlcrc );
|
||||||
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
@ -26,6 +28,9 @@ System::String^ getXPathText( System::Xml::XmlElement ^root, System::String ^xpa
|
|||||||
int main(array<System::String ^> ^args)
|
int main(array<System::String ^> ^args)
|
||||||
{
|
{
|
||||||
SheetCheckerContext ^hContext = gcnew SheetCheckerContext;
|
SheetCheckerContext ^hContext = gcnew SheetCheckerContext;
|
||||||
|
ROM_Header rh;
|
||||||
|
memset( (void*)&rh, 0, sizeof(ROM_Header) );
|
||||||
|
SheetItem ^hItem = gcnew SheetItem;
|
||||||
|
|
||||||
// getopt
|
// getopt
|
||||||
int argc = parseOption( args, hContext );
|
int argc = parseOption( args, hContext );
|
||||||
@ -34,96 +39,127 @@ int main(array<System::String ^> ^args)
|
|||||||
if( argc != 2 )
|
if( argc != 2 )
|
||||||
{
|
{
|
||||||
hContext->ErrorCode = SheetCheckerError::ERROR_ARG;
|
hContext->ErrorCode = SheetCheckerError::ERROR_ARG;
|
||||||
Console::WriteLine( "error arguments" );
|
printResult( hContext, &rh, hItem, nullptr, nullptr, 0 );
|
||||||
return 0;
|
return -1;
|
||||||
}
|
}
|
||||||
System::String ^hSrlFile = args[0];
|
System::String ^hSrlFile = args[0];
|
||||||
System::String ^hSheetFile = args[1];
|
System::String ^hSheetFile = args[1];
|
||||||
|
|
||||||
// ROMヘッダの読み込み
|
// ROMヘッダの読み込み
|
||||||
ROM_Header rh;
|
|
||||||
memset( (void*)&rh, 0, sizeof(ROM_Header) );
|
|
||||||
if( !readRomHeader( hSrlFile, &rh ) )
|
if( !readRomHeader( hSrlFile, &rh ) )
|
||||||
{
|
{
|
||||||
hContext->ErrorCode = SheetCheckerError::ERROR_READ_SRL;
|
hContext->ErrorCode = SheetCheckerError::ERROR_READ_SRL;
|
||||||
|
printResult( hContext, &rh, hItem, hSrlFile, hSheetFile, 0 );
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
System::UInt16 crc;
|
System::UInt16 crc;
|
||||||
getWholeCRCInFile( hSrlFile, &crc );
|
getWholeCRCInFile( hSrlFile, &crc );
|
||||||
|
|
||||||
// 提出確認書の読み込み
|
// 提出確認書の読み込み
|
||||||
SheetItem ^hItem = gcnew SheetItem;
|
|
||||||
if( !readSheet( hSheetFile, hItem ) )
|
if( !readSheet( hSheetFile, hItem ) )
|
||||||
{
|
{
|
||||||
hContext->ErrorCode = SheetCheckerError::ERROR_READ_SHEET;
|
hContext->ErrorCode = SheetCheckerError::ERROR_READ_SHEET;
|
||||||
|
printResult( hContext, &rh, hItem, hSrlFile, hSheetFile, crc );
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 一致判定
|
// 一致判定
|
||||||
if( hContext->ErrorCode == SheetCheckerError::NOERROR )
|
if( memcmp( rh.s.game_code, hItem->GameCode, 4 ) != 0 )
|
||||||
{
|
{
|
||||||
if( memcmp( rh.s.game_code, hItem->GameCode, 4 ) != 0 )
|
hContext->ErrorCode = SheetCheckerError::ERROR_VERIFY_GAME_CODE;
|
||||||
{
|
}
|
||||||
hContext->ErrorCode = SheetCheckerError::ERROR_VERIFY_GAME_CODE;
|
else if( rh.s.rom_version != hItem->RomVersion )
|
||||||
}
|
{
|
||||||
else if( rh.s.rom_version != hItem->RomVersion )
|
hContext->ErrorCode = SheetCheckerError::ERROR_VERIFY_ROM_VERSION;
|
||||||
{
|
}
|
||||||
hContext->ErrorCode = SheetCheckerError::ERROR_VERIFY_ROM_VERSION;
|
else if( crc != hItem->FileCRC )
|
||||||
}
|
{
|
||||||
else if( crc != hItem->FileCRC )
|
hContext->ErrorCode = SheetCheckerError::ERROR_VERIFY_CRC;
|
||||||
{
|
|
||||||
hContext->ErrorCode = SheetCheckerError::ERROR_VERIFY_CRC;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 通常の表示
|
// 結果表示
|
||||||
if( !hContext->bSubmitVersion && !hContext->bResult )
|
printResult( hContext, &rh, hItem, hSrlFile, hSheetFile, crc );
|
||||||
{
|
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
// 結果表示
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
|
||||||
|
void printResult( SheetCheckerContext ^context, ROM_Header *rh, SheetItem ^item,
|
||||||
|
System::String ^srlfile, System::String ^sheetfile, System::UInt16 srlcrc )
|
||||||
|
{
|
||||||
|
System::UInt16 tadver = item->RomVersion;
|
||||||
|
tadver = (tadver << 8) | item->SubmitVersion;
|
||||||
|
|
||||||
|
// 通常の表示
|
||||||
|
if( !context->bSubmitVersion && !context->bResult && !context->bTadVersion )
|
||||||
|
{
|
||||||
Console::WriteLine( "" );
|
Console::WriteLine( "" );
|
||||||
Console::WriteLine( "SRL: " + hSrlFile );
|
Console::WriteLine( "SRL: " + srlfile );
|
||||||
Console::WriteLine( "Sheet: " + hSheetFile );
|
Console::WriteLine( "Sheet: " + sheetfile );
|
||||||
Console::WriteLine( "" );
|
Console::WriteLine( "" );
|
||||||
|
|
||||||
printf( " SRL Sheet\n" );
|
printf( " SRL Sheet\n" );
|
||||||
printf( "------------------------------------\n" );
|
printf( "------------------------------------\n" );
|
||||||
printf( "InitialCode: %c%c%c%c %c%c%c%c\n",
|
printf( "InitialCode: %c%c%c%c %c%c%c%c\n",
|
||||||
rh.s.game_code[0], rh.s.game_code[1], rh.s.game_code[2], rh.s.game_code[3],
|
rh->s.game_code[0], rh->s.game_code[1], rh->s.game_code[2], rh->s.game_code[3],
|
||||||
hItem->GameCode[0], hItem->GameCode[1], hItem->GameCode[2], hItem->GameCode[3] );
|
item->GameCode[0], item->GameCode[1], item->GameCode[2], item->GameCode[3] );
|
||||||
printf( "RemasterVersion: %02X %02X\n", rh.s.rom_version, hItem->RomVersion );
|
printf( "RemasterVersion: %02X %02X\n", rh->s.rom_version, item->RomVersion );
|
||||||
printf( "File CRC: %04X %04X\n", crc, hItem->FileCRC );
|
printf( "File CRC: %04X %04X\n", srlcrc, item->FileCRC );
|
||||||
printf( "------------------------------------\n" );
|
printf( "------------------------------------\n" );
|
||||||
printf( "SubmitVersion: - %d (%02X)\n", hItem->SubmitVersion, hItem->SubmitVersion );
|
printf( "SubmitVersion: - %d (%02X)\n", item->SubmitVersion, item->SubmitVersion );
|
||||||
|
if( item->Media->Equals("NAND") )
|
||||||
|
{
|
||||||
|
printf( "TAD Version: %d (%04X)\n", tadver, tadver );
|
||||||
|
}
|
||||||
printf( "------------------------------------\n" );
|
printf( "------------------------------------\n" );
|
||||||
printf( "Result: " );
|
printf( "Result: " );
|
||||||
if( hContext->ErrorCode == SheetCheckerError::NOERROR )
|
if( context->ErrorCode == SheetCheckerError::NOERROR )
|
||||||
{
|
{
|
||||||
printf( "OK\n" );
|
printf( "OK\n" );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
printf( "NG (%d)\n", hContext->ErrorCode );
|
printf( "NG (%d)\n", context->ErrorCode );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// オプションのときの表示
|
// オプションのときの表示
|
||||||
if( hContext->bSubmitVersion )
|
if( context->bSubmitVersion )
|
||||||
{
|
{
|
||||||
if( hContext->ErrorCode == SheetCheckerError::NOERROR )
|
if( context->ErrorCode == SheetCheckerError::NOERROR )
|
||||||
{
|
{
|
||||||
printf( "%d\n", hItem->SubmitVersion );
|
printf( "%d\n", item->SubmitVersion );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
printf( "%d\n", hContext->ErrorCode ); // エラーのときはエラーコード
|
printf( "%d\n", context->ErrorCode ); // エラーのときはエラーコード
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if( hContext->bResult )
|
if( context->bTadVersion )
|
||||||
{
|
{
|
||||||
printf( "%d\n", hContext->ErrorCode );
|
if( !item->Media->Equals("NAND") )
|
||||||
|
{
|
||||||
|
context->ErrorCode = SheetCheckerError::ERROR_ARG;
|
||||||
|
}
|
||||||
|
if( context->ErrorCode == SheetCheckerError::NOERROR )
|
||||||
|
{
|
||||||
|
printf( "%d\n", tadver );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf( "%d\n", context->ErrorCode );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if( context->bResult )
|
||||||
|
{
|
||||||
|
printf( "%d\n", context->ErrorCode );
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
// ROMヘッダの読み込み
|
// ROMヘッダの読み込み
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
@ -192,6 +228,8 @@ System::Boolean readSheet( System::String ^sheetfile, SheetItem ^item )
|
|||||||
System::String ^text;
|
System::String ^text;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
item->Media = getXPathText( root, "/Sheet/Media" );
|
||||||
|
|
||||||
text = getXPathText( root, "/Sheet/GameCode" );
|
text = getXPathText( root, "/Sheet/GameCode" );
|
||||||
char code[4];
|
char code[4];
|
||||||
int i;
|
int i;
|
||||||
@ -269,6 +307,11 @@ System::Int32 parseOption( array<System::String ^> ^args, SheetCheckerContext ^c
|
|||||||
context->bResult = true;
|
context->bResult = true;
|
||||||
numopt++;
|
numopt++;
|
||||||
}
|
}
|
||||||
|
else if( args[i]->StartsWith( "-t" ) )
|
||||||
|
{
|
||||||
|
context->bTadVersion = true;
|
||||||
|
numopt++;
|
||||||
|
}
|
||||||
else if( !args[i]->StartsWith( "-" ) ) // オプションでない引数のindexを記録
|
else if( !args[i]->StartsWith( "-" ) ) // オプションでない引数のindexを記録
|
||||||
{
|
{
|
||||||
indexList->Add(i);
|
indexList->Add(i);
|
||||||
|
|||||||
@ -16,7 +16,7 @@ enum class SheetCheckerError
|
|||||||
ERROR_VERIFY_ROM_VERSION = -3,
|
ERROR_VERIFY_ROM_VERSION = -3,
|
||||||
ERROR_READ_SRL = -8,
|
ERROR_READ_SRL = -8,
|
||||||
ERROR_READ_SHEET = -9,
|
ERROR_READ_SHEET = -9,
|
||||||
ERROR_ARG = -0xA,
|
ERROR_ARG = -10,
|
||||||
};
|
};
|
||||||
|
|
||||||
// 実行Context
|
// 実行Context
|
||||||
@ -25,12 +25,14 @@ ref class SheetCheckerContext
|
|||||||
private:
|
private:
|
||||||
System::Boolean ^hbSubmitVersion; // オプションフラグ
|
System::Boolean ^hbSubmitVersion; // オプションフラグ
|
||||||
System::Boolean ^hbResult;
|
System::Boolean ^hbResult;
|
||||||
|
System::Boolean ^hbTadVersion;
|
||||||
SheetCheckerError ^hErrorCode; // エラー情報
|
SheetCheckerError ^hErrorCode; // エラー情報
|
||||||
public:
|
public:
|
||||||
SheetCheckerContext()
|
SheetCheckerContext()
|
||||||
{
|
{
|
||||||
this->hbSubmitVersion = gcnew System::Boolean(false);
|
this->hbSubmitVersion = gcnew System::Boolean(false);
|
||||||
this->hbResult = gcnew System::Boolean(false);
|
this->hbResult = gcnew System::Boolean(false);
|
||||||
|
this->hbTadVersion = gcnew System::Boolean(false);
|
||||||
this->hErrorCode = gcnew SheetCheckerError( SheetCheckerError::NOERROR );
|
this->hErrorCode = gcnew SheetCheckerError( SheetCheckerError::NOERROR );
|
||||||
}
|
}
|
||||||
property System::Boolean bSubmitVersion
|
property System::Boolean bSubmitVersion
|
||||||
@ -43,6 +45,11 @@ public:
|
|||||||
void set( System::Boolean flg ){ this->hbResult = gcnew System::Boolean(flg); }
|
void set( System::Boolean flg ){ this->hbResult = gcnew System::Boolean(flg); }
|
||||||
System::Boolean get(){ return *this->hbResult; }
|
System::Boolean get(){ return *this->hbResult; }
|
||||||
};
|
};
|
||||||
|
property System::Boolean bTadVersion
|
||||||
|
{
|
||||||
|
void set( System::Boolean flg ){ this->hbTadVersion = gcnew System::Boolean(flg); }
|
||||||
|
System::Boolean get(){ return *this->hbTadVersion; }
|
||||||
|
};
|
||||||
property SheetCheckerError ErrorCode
|
property SheetCheckerError ErrorCode
|
||||||
{
|
{
|
||||||
void set( SheetCheckerError code ){ this->hErrorCode = gcnew SheetCheckerError(code); }
|
void set( SheetCheckerError code ){ this->hErrorCode = gcnew SheetCheckerError(code); }
|
||||||
@ -58,6 +65,8 @@ private:
|
|||||||
System::Byte ^hRomVersion;
|
System::Byte ^hRomVersion;
|
||||||
System::UInt16 ^hFileCRC;
|
System::UInt16 ^hFileCRC;
|
||||||
System::Byte ^hSubmitVersion;
|
System::Byte ^hSubmitVersion;
|
||||||
|
public:
|
||||||
|
System::String ^hMedia;
|
||||||
public:
|
public:
|
||||||
SheetItem()
|
SheetItem()
|
||||||
{
|
{
|
||||||
@ -66,6 +75,7 @@ public:
|
|||||||
this->hRomVersion = gcnew System::Byte(0xFF);
|
this->hRomVersion = gcnew System::Byte(0xFF);
|
||||||
this->hFileCRC = gcnew System::UInt16(0);
|
this->hFileCRC = gcnew System::UInt16(0);
|
||||||
this->hSubmitVersion = gcnew System::Byte(0xFF);
|
this->hSubmitVersion = gcnew System::Byte(0xFF);
|
||||||
|
this->hMedia = gcnew System::String("");
|
||||||
}
|
}
|
||||||
~SheetItem()
|
~SheetItem()
|
||||||
{
|
{
|
||||||
@ -91,4 +101,15 @@ public:
|
|||||||
void set( System::Byte v ){ *this->hSubmitVersion = v; }
|
void set( System::Byte v ){ *this->hSubmitVersion = v; }
|
||||||
System::Byte get(){ return *this->hSubmitVersion; }
|
System::Byte get(){ return *this->hSubmitVersion; }
|
||||||
}
|
}
|
||||||
|
property System::String ^Media
|
||||||
|
{
|
||||||
|
void set( System::String ^str )
|
||||||
|
{
|
||||||
|
if( str != nullptr )
|
||||||
|
this->hMedia = System::String::Copy(str);
|
||||||
|
else
|
||||||
|
this->hMedia = gcnew System::String("");
|
||||||
|
}
|
||||||
|
System::String^ get(){ return System::String::Copy( this->hMedia ); }
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@ -30,6 +30,9 @@
|
|||||||
<xsl:if test="$tag='CRC'">
|
<xsl:if test="$tag='CRC'">
|
||||||
<CRC><xsl:value-of select="ss:Data" /></CRC>
|
<CRC><xsl:value-of select="ss:Data" /></CRC>
|
||||||
</xsl:if>
|
</xsl:if>
|
||||||
|
<xsl:if test="$tag='Media'">
|
||||||
|
<Media><xsl:value-of select="ss:Data" /></Media>
|
||||||
|
</xsl:if>
|
||||||
</xsl:template>
|
</xsl:template>
|
||||||
|
|
||||||
<!-- NamedCellノードの名前(属性で指定されている)を取得 -->
|
<!-- NamedCellノードの名前(属性で指定されている)を取得 -->
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user