マスタエディタ:マスタROM提出書類とSRLの一部分の情報をGUIで編集できるWindowsアプリ。未完成。ドキュメントも追加。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2128 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
nishikawa_takeshi 2008-08-08 02:16:49 +00:00
parent 2bdceeab46
commit 487a7ed4fd
41 changed files with 21225 additions and 0 deletions

Binary file not shown.

View File

@ -0,0 +1,24 @@

Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MasterEditorTWL", "MasterEditorTWL\MasterEditorTWL.vcproj", "{F8A4F8F7-A3BD-4DCA-B054-5FF8A09082F5}"
EndProject
Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "MasterEditorTWLSetup", "MasterEditorTWLSetup\MasterEditorTWLSetup.vdproj", "{D24711F8-41FF-4E3E-96BD-F4FFA6A2FB34}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{F8A4F8F7-A3BD-4DCA-B054-5FF8A09082F5}.Debug|Win32.ActiveCfg = Debug|Win32
{F8A4F8F7-A3BD-4DCA-B054-5FF8A09082F5}.Debug|Win32.Build.0 = Debug|Win32
{F8A4F8F7-A3BD-4DCA-B054-5FF8A09082F5}.Release|Win32.ActiveCfg = Release|Win32
{F8A4F8F7-A3BD-4DCA-B054-5FF8A09082F5}.Release|Win32.Build.0 = Release|Win32
{D24711F8-41FF-4E3E-96BD-F4FFA6A2FB34}.Debug|Win32.ActiveCfg = Debug
{D24711F8-41FF-4E3E-96BD-F4FFA6A2FB34}.Release|Win32.ActiveCfg = Release
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

Binary file not shown.

View File

@ -0,0 +1,40 @@
#include "stdafx.h"
using namespace System;
using namespace System::Reflection;
using namespace System::Runtime::CompilerServices;
using namespace System::Runtime::InteropServices;
using namespace System::Security::Permissions;
//
// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。
// アセンブリに関連付けられている情報を変更するには、
// これらの属性値を変更してください。
//
[assembly:AssemblyTitleAttribute("MasterEditorTWL")];
[assembly:AssemblyDescriptionAttribute("")];
[assembly:AssemblyConfigurationAttribute("")];
[assembly:AssemblyCompanyAttribute("任天堂株式会社")];
[assembly:AssemblyProductAttribute("MasterEditorTWL")];
[assembly:AssemblyCopyrightAttribute("Copyright (c) 任天堂株式会社 2008")];
[assembly:AssemblyTrademarkAttribute("")];
[assembly:AssemblyCultureAttribute("")];
//
// アセンブリのバージョン情報は、以下の 4 つの値で構成されています:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// すべての値を指定するか、下のように '*' を使ってリビジョンおよびビルド番号を
// 既定値にすることができます:
[assembly:AssemblyVersionAttribute("1.0.*")];
[assembly:ComVisible(false)];
[assembly:CLSCompliantAttribute(true)];
[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)];

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,18 @@
// MasterEditorTWL.cpp : メイン プロジェクト ファイルです。
#include "stdafx.h"
#include "Form1.h"
using namespace MasterEditorTWL;
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
// コントロールが作成される前に、Windows XP ビジュアル効果を有効にします
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
// メイン ウィンドウを作成して、実行します
Application::Run(gcnew Form1());
return 0;
}

View File

@ -0,0 +1,316 @@
<?xml version="1.0" encoding="shift_jis"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="9.00"
Name="MasterEditorTWL"
ProjectGUID="{F8A4F8F7-A3BD-4DCA-B054-5FF8A09082F5}"
RootNamespace="MasterEditorTWL"
Keyword="ManagedCProj"
TargetFrameworkVersion="196613"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="1"
ManagedExtensions="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="C:\twlsdk\build\tools\makerom.TWL;C:\twlsdk\include"
PreprocessorDefinitions="WIN32;_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="libacsign_X86.a libaes_X86.a libdigest_X86.a libflags_X86.a $(NOINHERIT)"
LinkIncremental="2"
AdditionalLibraryDirectories="..\flags\lib\X86;C:\twlsdk\build\tools\makerom.TWL\digest\lib\X86;C:\twlsdk\build\tools\makerom.TWL\aes\lib\X86;C:\twlsdk\build\tools\makerom.TWL\acsign\lib\X86"
GenerateDebugInformation="true"
AssemblyDebug="1"
SubSystem="2"
EntryPointSymbol="main"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="1"
ManagedExtensions="1"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories="C:\twlsdk\build\tools\makerom.TWL;C:\twlsdk\include"
PreprocessorDefinitions="WIN32;NDEBUG"
RuntimeLibrary="2"
UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="libacsign_X86.a libaes_X86.a libdigest_X86.a libflags_X86.a $(NoInherit)"
LinkIncremental="1"
AdditionalLibraryDirectories="..\flags\lib\X86;C:\twlsdk\build\tools\makerom.TWL\digest\lib\X86;C:\twlsdk\build\tools\makerom.TWL\aes\lib\X86;C:\twlsdk\build\tools\makerom.TWL\acsign\lib\X86"
GenerateDebugInformation="true"
SubSystem="2"
EntryPointSymbol="main"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
<AssemblyReference
RelativePath="System.dll"
AssemblyName="System, Version=2.0.0.0, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"
MinFrameworkVersion="131072"
/>
<AssemblyReference
RelativePath="System.Data.dll"
AssemblyName="System.Data, Version=2.0.0.0, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86"
MinFrameworkVersion="131072"
/>
<AssemblyReference
RelativePath="System.Drawing.dll"
AssemblyName="System.Drawing, Version=2.0.0.0, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
MinFrameworkVersion="131072"
/>
<AssemblyReference
RelativePath="System.Windows.Forms.dll"
AssemblyName="System.Windows.Forms, Version=2.0.0.0, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"
MinFrameworkVersion="131072"
/>
<AssemblyReference
RelativePath="System.XML.dll"
AssemblyName="System.Xml, Version=2.0.0.0, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"
MinFrameworkVersion="131072"
/>
</References>
<Files>
<Filter
Name="ソース ファイル"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath=".\AssemblyInfo.cpp"
>
</File>
<File
RelativePath=".\crc_whole.cpp"
>
</File>
<File
RelativePath=".\deliverable.cpp"
>
</File>
<File
RelativePath=".\keys.cpp"
>
</File>
<File
RelativePath=".\MasterEditorTWL.cpp"
>
</File>
<File
RelativePath=".\srl.cpp"
>
</File>
<File
RelativePath=".\stdafx.cpp"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="1"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="1"
/>
</FileConfiguration>
</File>
<File
RelativePath=".\utility.cpp"
>
</File>
</Filter>
<Filter
Name="ヘッダー ファイル"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath=".\crc_whole.h"
>
</File>
<File
RelativePath=".\deliverable.h"
>
</File>
<File
RelativePath=".\Form1.h"
FileType="3"
>
<File
RelativePath=".\Form1.resX"
SubType="Designer"
>
</File>
</File>
<File
RelativePath=".\keys.h"
>
</File>
<File
RelativePath=".\resource.h"
>
</File>
<File
RelativePath=".\srl.h"
>
</File>
<File
RelativePath=".\stdafx.h"
>
</File>
<File
RelativePath=".\utility.h"
>
</File>
</Filter>
<Filter
Name="リソース ファイル"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
<File
RelativePath=".\app.ico"
>
</File>
<File
RelativePath=".\app.rc"
>
</File>
</Filter>
<File
RelativePath=".\ReadMe.txt"
>
</File>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View File

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="shift_jis"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="9.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="PC2355"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="PC2355"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View File

@ -0,0 +1,34 @@
===============================================================================
アプリケーション : MasterEditorTWL プロジェクトの概要
===============================================================================
この MasterEditorTWL アプリケーションは、AppWizard によって作成されました。
このファイルには、MasterEditorTWL アプリケーションを構成する各ファイルの
内容の概略が記述されています。
MasterEditorTWL.vcproj
これは、アプリケーション ウィザードで生成される VC++ プロジェクトのメインの
プロジェクト ファイルです。
ファイルを生成した Visual C++ のバージョン情報と、アプリケーション ウィザー
ドで選択したプラットフォーム、構成、およびプロジェクトの機能に関する情報が
記述されています。
MasterEditorTWL.cpp
これは、メインのアプリケーション ソース ファイルです。
フォームを表示するコードが含まれています。
Form1.h
ユーザーのフォーム クラスの実装と、InitializeComponent() 関数が含まれています。
AssemblyInfo.cpp
アセンブリ メタデータを変更するためのカスタム属性が含まれています。
///////////////////////////////////////////////////////////////////////////////
その他の標準ファイル :
StdAfx.h, StdAfx.cpp
これらのファイルは、コンパイル済みヘッダー (PCH) ファイル MasterEditorTWL.pch
とプリコンパイル済み型ファイル StdAfx.obj をビルドするために使用します。
///////////////////////////////////////////////////////////////////////////////

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,63 @@
// Microsoft Visual C++ で生成されたリソース スクリプトです。
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// 英語 (米国) リソース
/////////////////////////////////////////////////////////////////////////////
//
// アイコン
//
// 最初に配置されたアイコン、または ID 値が最も低いアイコンが、アプリケーション アイコンになります。
LANGUAGE 17, 1
#pragma code_page(932)
1 ICON "app.ico"
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"resource.h\0"
"\0"
END
2 TEXTINCLUDE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE
BEGIN
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE 3 リソースから生成されました。
//
/////////////////////////////////////////////////////////////////////////////
#endif // APSTUDIO_INVOKED でない場合

View File

@ -0,0 +1,149 @@
// crc_whole.h の実装
#include "stdafx.h"
#include "crc_whole.h"
#include <cstring>
#include <cstdio>
#define CRCPOLY 0x1021
#define BUFLEN 0x1000
namespace MasterEditorTWL
{
u16 crc_table[0x100];
/*----------------------------------------------------------------------------
inittable - initialize table
static void inittable(unsigned short *table);
CRC算出を高速化するための参照テーブルを作成する
----------------------------------------------------------------------------*/
static void inittable(unsigned short *table)
{
unsigned short i, j, r;
for(i = 0; i < 0x100; i++) {
r = i << 8;
for(j = 0; j < 8; j++) {
if(r & 0x8000U)
r = (r << 1) ^ CRCPOLY;
else
r <<= 1;
}
*table++ = r;
}
}
/*============================================================================*
CRC計算
CRCテーブルを使ったCRC計算関数
*============================================================================*/
static u16 newGetCRC
(
u16 start, // CRC初期値累積値
u16 *datap, // データの先頭を指すポインタ、中島さんのと違い、u8
u32 size // バイト単位でのデータサイズ
)
{
u32 i;
u16 crc;
u8* byte;
crc = start;
byte = (u8 *)datap;
for (i=0; i<size; i+=2)
{
u8 byte0, byte1;
byte0 = *byte; byte++;
byte1 = *byte; byte++;
crc = (crc << 8) ^ crc_table[(crc >> 8) ^ byte1];
crc = (crc << 8) ^ crc_table[(crc >> 8) ^ byte0];
}
return crc;
}
/*---------------------------------------------------------------------------*
Name: getWholeCRCInFp
Description: srlファイル全体のCRCを算出
Arguments: [in] srlファイルのファイルポインタ
[out] CRC格納先
Return: TRUE.
*---------------------------------------------------------------------------*/
BOOL getWholeCRCInFp( FILE *fp, u16 *pCRC )
{
u32 file_size;
u16 crc;
u32 i;
u16 data[ 0x1000 / 2 ]; // 64Kバイト(512Kビット)
if( !fp )
{
return FALSE;
}
// ファイルサイズチェック
fseek( fp, 0, SEEK_END );
file_size = ftell( fp );
// CRCテーブル初期化製品技術部のコード
inittable(crc_table);
// ファイル全体のCRC をとる
fseek( fp, 0, SEEK_SET );
crc = 0;
for ( i=0; i<file_size; i+=sizeof(data) )
{
fread( (void*)data, sizeof(data), 1, fp );
crc = newGetCRC( crc, data, sizeof(data) );
}
*pCRC = crc;
return TRUE;
}
/*---------------------------------------------------------------------------*
Name: getWholeCRCInFile
Description: srlファイル全体のCRCを算出
Arguments: [in] srlファイル名()
[out] CRC格納先
Return: None.
*---------------------------------------------------------------------------*/
BOOL getWholeCRCInFile( System::String ^filename, u16 *pCRC )
{
FILE* fp;
const char *pchFilename =
(const char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi( filename ).ToPointer();
fopen_s( &fp, pchFilename, "rb" );
if ( fp == NULL )
{
return FALSE;
}
getWholeCRCInFp( fp, pCRC );
fclose( fp );
return TRUE;
}
} // end of namespace MasterEditorTWL

View File

@ -0,0 +1,38 @@
#pragma once
// 署名用の鍵データの宣言
#include <twl/types.h>
#include <cstdio>
namespace MasterEditorTWL
{
/*---------------------------------------------------------------------------*
Name: getWholeCRCInFp
Description: srlファイル全体のCRCを算出
Arguments: [in] srlファイルのファイルポインタ
[out] CRC格納先
Return: TRUE.
*---------------------------------------------------------------------------*/
BOOL getWholeCRCInFp( FILE *fp, u16 *pCRC );
/*---------------------------------------------------------------------------*
Name: getWholeCRCInFile
Description: srlファイル全体のCRCを算出
Arguments: [in] srlファイル名()
[out] CRC格納先
Return: None.
*---------------------------------------------------------------------------*/
BOOL getWholeCRCInFile( System::String ^filename, u16 *pCRC );
} // end of namespace MasterEditorTWL

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,153 @@
#include <twl/types.h>
#include <twl/os/common/format_rom.h>
#include "srl.h"
namespace MasterEditorTWL
{
// -------------------------------------------------------------------
// Type : enum class
// Name : ECDeliverableResult
//
// Description : RCDeliverable クラスの操作でのエラーを宣言
// -------------------------------------------------------------------
enum class ECDeliverableResult
{
NOERROR = 0,
// エラー特定しなくても原因がわかるときの返り値
// (エラーが生じる可能性のある箇所が1つ etc.)
ERROR,
// ファイル操作でのエラー
ERROR_FILE_OPEN,
ERROR_FILE_READ,
ERROR_FILE_WRITE,
};
// -------------------------------------------------------------------
// Type : ref class
// Name : RCDeliverable
//
// Description : 提出書類クラス
//
// Role : 提出情報の入出力
// -------------------------------------------------------------------
ref class RCDeliverable
{
// field
public:
// 提出情報
property System::String ^hProductName; // 製品名
property System::String ^hProductCode1; // 製品コード
property System::String ^hProductCode2; // 製品コード
property System::Int32 ^hReleaseYear; // 発売予定日
property System::Int32 ^hReleaseMonth;
property System::Int32 ^hReleaseDay;
property System::Int32 ^hSubmitYear; // 提出日
property System::Int32 ^hSubmitMonth;
property System::Int32 ^hSubmitDay;
property System::String ^hSubmitWay; // 提出方法
property System::String ^hUsage; // 用途
property System::String ^hUsageOther; // その他の用途
property System::Int32 ^hSubmitVersion; // 提出バージョン
property System::String ^hSDK; // SDKバージョン
property System::Boolean ^hReleaseForeign; // 海外版の予定
property System::String ^hProductNameForeign;
property System::String ^hProductCode1Foreign;
property System::String ^hProductCode2Foreign;
// 会社情報
// 担当者(1人目)
property System::String ^hCompany1; // 会社名
property System::String ^hDepart1; // 部署名
property System::String ^hPerson1; // 名前
property System::String ^hFurigana1; // ふりがな
property System::String ^hTel1; // 電話番号
property System::String ^hFax1; // FAX番号
property System::String ^hMail1; // メアド
property System::String ^hNTSC1; // NTSC User ID
// 担当者(2人目)
property System::Boolean ^hIsPerson2; // 2人目情報を入力したか
property System::String ^hCompany2;
property System::String ^hDepart2;
property System::String ^hPerson2;
property System::String ^hFurigana2;
property System::String ^hTel2;
property System::String ^hFax2;
property System::String ^hMail2;
property System::String ^hNTSC2;
// プログラム自己申告仕様
property System::Boolean ^hIsWireless; // ワイヤレス通信対応
property System::Boolean ^hIsTouch; // タッチスクリーン対応
property System::Boolean ^hIsMic; // マイク対応
property System::Boolean ^hIsWiFi; // Wi-Fi対応
property System::Boolean ^hIsGBACartridge; // GBAカートリッジ対応
property System::Boolean ^hIsDSCartridge; // DSカード対応
property System::Boolean ^hIsSoftReset; // ソフトリセット機能あり
property System::Boolean ^hIsPictoChatSearch; // ピクトチャットサーチあり
property System::Boolean ^hIsClock; // 時計機能使用
property System::Boolean ^hIsAutoBackLightOff; // 自動バックライトOFF機能使用
property System::Int32 ^hTimeAutoBackLightOff;// ...................する時間
property System::Boolean ^hIsAutoLcdOff; // 自動LCDOFF機能を使用
property System::Int32 ^hTimeAutoLcdOff; // ................する時間
property System::Boolean ^hIsSleepMode; // スリープモード対応
property System::Boolean ^hIsNotSleepClose; // 本体を閉じてもスリープモードに移行しない場合あり
property System::Int32 ^hTimeSleepClose; // ........................................時間
property System::Boolean ^hIsSleepAlarm; // RTCアラームで復帰する場合あり
property System::String ^hProcSleepAlarm; // .........................の処理内容
property System::Boolean ^hIsIPLUserComment; // IPLのユーザ名およびコメント使用
property System::String ^hSceneIPLUserComment; // 上記を使用している場面(文字列で入力)
property System::Boolean ^hIsAllIPLFonts; // IPLで設定可能なフォントをすべて表示できる
// プログラム自己申告仕様2
property System::Boolean ^hIsLangJ; // ゲーム内での使用言語
property System::Boolean ^hIsLangE;
property System::Boolean ^hIsLangF;
property System::Boolean ^hIsLangG;
property System::Boolean ^hIsLangI;
property System::Boolean ^hIsLangS;
property System::Boolean ^hIsLangC;
property System::Boolean ^hIsLangK;
property System::Boolean ^hIsLangOther;
property System::String ^hLangOther;
property System::Boolean ^hIsIPLLang; // IPLの言語設定
// 使用ライセンス
property System::Boolean ^hUseLcFont; // LCフォント(SHARP)
property System::Boolean ^hUseVx; // VX Middleware(Actimagine)
property System::Boolean ^hUseAtok; // ATOK(JUSTSYSTEM)
property System::Boolean ^hUseVoiceChat; // VoiceChat(Abiosso)
property System::Boolean ^hUseWiFiLib; // WiFiライブラリ(NINTENDO)
property System::Boolean ^hUseVoiceRecog; // 音声認識(松下)
property System::Boolean ^hUseCharRecog; // 文字認識(Zi)
property System::Boolean ^hUseVoiceCombine; // 音声合成(SHARP)
property System::Boolean ^hUseNetFront; // NetFront Browser(ACCESS)
property System::String ^hUseOthers; // その他(文字列で入力)
// 備考
property System::String ^hCaption;
// ROMヘッダ不記載のROMバイナリ(SRL)固有情報
property System::String ^hBackupMemory; // バックアップメモリの種別
// constructor and destructor
public:
// method
public:
//
// 書類出力
//
// @arg [out] 出力ファイル名
// @arg [in] ROMバイナリ(SRL)固有情報
// @arg [in] ファイル全体のCRC
// @arg [in] SRLのファイル名(書類に記述するために使用)
// @arg [in] 英語フラグ
//
ECDeliverableResult writeSpreadsheet(
System::String ^hFilename, RCSrl ^hSrl, System::UInt16 ^hCRC, System::String ^hSrlFilename, System::Boolean english );
}; // end of ref class RCDeliverable
} // end of namespace MasterEditorTWL

View File

@ -0,0 +1,69 @@
// 署名用の鍵データ from makerom.TWL
#include "stdafx.h"
#include <twl/types.h>
#include "keys.h"
namespace MasterEditorTWL
{
// ユーザアプリ用
// 開発アプリROMヘッダ署名用公開鍵
const u8 g_devPubKey_DER[ 0xa2 ] = {
0x30, 0x81, 0x9F, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01,
0x05, 0x00, 0x03, 0x81, 0x8D, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xAC, 0x93, 0xBB,
0x3C, 0x15, 0x5C, 0x5F, 0x25, 0xB0, 0x4C, 0x37, 0xA4, 0x2D, 0x85, 0x29, 0x1D, 0x7A, 0x9D, 0x2D,
0xD5, 0x79, 0xB5, 0x5D, 0xB1, 0x08, 0x20, 0x9C, 0xF0, 0x4C, 0x56, 0x27, 0x97, 0xF8, 0x7E, 0x3E,
0xCB, 0x94, 0x06, 0x05, 0x94, 0x00, 0x92, 0x9B, 0xB0, 0x5B, 0x06, 0xF6, 0xAF, 0xAA, 0x9C, 0xA5,
0xF0, 0x11, 0xA7, 0x8A, 0xCB, 0x0C, 0x11, 0xD6, 0x0C, 0x3D, 0x30, 0xAC, 0x51, 0x79, 0x5A, 0xB5,
0x7F, 0x11, 0x92, 0x74, 0x48, 0x82, 0x81, 0xBF, 0x3B, 0xFA, 0x93, 0xBF, 0x6B, 0x5B, 0x3F, 0x86,
0x96, 0x4F, 0xCC, 0x90, 0x12, 0xB2, 0x39, 0x8D, 0x68, 0x16, 0x7B, 0xC6, 0x87, 0xF1, 0xF5, 0x60,
0x62, 0x39, 0xFB, 0x10, 0x7E, 0x48, 0x7F, 0xDD, 0x82, 0x38, 0x38, 0x76, 0xB5, 0xCE, 0x21, 0x4B,
0xC9, 0x6F, 0x31, 0x8D, 0x23, 0x57, 0x3D, 0xB6, 0x6C, 0xEE, 0xC2, 0x0D, 0x11, 0x02, 0x03, 0x01,
0x00, 0x01,
};
// 開発アプリROMヘッダ署名用秘密鍵
const u8 g_devPrivKey_DER[ 0x263 ] = {
0x30, 0x82, 0x02, 0x5F, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 0x00, 0xAC, 0x93, 0xBB, 0x3C, 0x15,
0x5C, 0x5F, 0x25, 0xB0, 0x4C, 0x37, 0xA4, 0x2D, 0x85, 0x29, 0x1D, 0x7A, 0x9D, 0x2D, 0xD5, 0x79,
0xB5, 0x5D, 0xB1, 0x08, 0x20, 0x9C, 0xF0, 0x4C, 0x56, 0x27, 0x97, 0xF8, 0x7E, 0x3E, 0xCB, 0x94,
0x06, 0x05, 0x94, 0x00, 0x92, 0x9B, 0xB0, 0x5B, 0x06, 0xF6, 0xAF, 0xAA, 0x9C, 0xA5, 0xF0, 0x11,
0xA7, 0x8A, 0xCB, 0x0C, 0x11, 0xD6, 0x0C, 0x3D, 0x30, 0xAC, 0x51, 0x79, 0x5A, 0xB5, 0x7F, 0x11,
0x92, 0x74, 0x48, 0x82, 0x81, 0xBF, 0x3B, 0xFA, 0x93, 0xBF, 0x6B, 0x5B, 0x3F, 0x86, 0x96, 0x4F,
0xCC, 0x90, 0x12, 0xB2, 0x39, 0x8D, 0x68, 0x16, 0x7B, 0xC6, 0x87, 0xF1, 0xF5, 0x60, 0x62, 0x39,
0xFB, 0x10, 0x7E, 0x48, 0x7F, 0xDD, 0x82, 0x38, 0x38, 0x76, 0xB5, 0xCE, 0x21, 0x4B, 0xC9, 0x6F,
0x31, 0x8D, 0x23, 0x57, 0x3D, 0xB6, 0x6C, 0xEE, 0xC2, 0x0D, 0x11, 0x02, 0x03, 0x01, 0x00, 0x01,
0x02, 0x81, 0x81, 0x00, 0x95, 0xDC, 0xC8, 0x18, 0x19, 0xF8, 0x98, 0x0B, 0x73, 0x78, 0x0C, 0x4D,
0x7E, 0xD6, 0x06, 0xE9, 0x39, 0x83, 0xEA, 0xBC, 0x59, 0xAF, 0x7C, 0x87, 0xF2, 0x25, 0xD8, 0x02,
0xF8, 0x57, 0x4C, 0x94, 0xB4, 0xCE, 0x74, 0x9B, 0x76, 0x94, 0x70, 0x1D, 0xA1, 0x0D, 0xAF, 0x33,
0x4B, 0x28, 0xD5, 0xE9, 0xA0, 0x3F, 0xDD, 0xFD, 0x86, 0x67, 0x36, 0xA8, 0xB2, 0x77, 0x7E, 0xA8,
0x2C, 0x2E, 0xEB, 0x43, 0x7B, 0xE4, 0xA3, 0x66, 0x7C, 0x3A, 0x00, 0x90, 0xC5, 0xF5, 0xF8, 0x59,
0xF9, 0x95, 0x88, 0x2A, 0xA8, 0xF4, 0x94, 0x41, 0x05, 0x02, 0xA0, 0x47, 0xC0, 0xC1, 0xB9, 0x80,
0x1F, 0x49, 0xBB, 0x09, 0xBF, 0x42, 0xBA, 0xE6, 0xEE, 0x8D, 0x21, 0x1D, 0xFB, 0x8F, 0xC7, 0xB7,
0x71, 0x00, 0xFB, 0x35, 0x13, 0xD8, 0xBC, 0xA3, 0x3F, 0x3A, 0xCF, 0x96, 0xB0, 0x0B, 0x8A, 0x61,
0x9C, 0x70, 0xF8, 0x91, 0x02, 0x41, 0x00, 0xD8, 0xAA, 0x14, 0x21, 0x49, 0x7A, 0x2C, 0xC3, 0xAA,
0xDA, 0xFB, 0x17, 0xB0, 0xD7, 0xF5, 0x5A, 0x77, 0xEE, 0xF0, 0xA9, 0x09, 0x18, 0x85, 0x21, 0xD4,
0x12, 0x4F, 0x85, 0x35, 0x05, 0x20, 0x36, 0x22, 0x65, 0x2C, 0xDD, 0xFA, 0xF5, 0x8E, 0xA5, 0x2E,
0xC4, 0xFD, 0xD1, 0xFA, 0xC6, 0x8A, 0x0F, 0x98, 0x69, 0xD9, 0x82, 0x50, 0xDF, 0xFA, 0x80, 0xC3,
0xFE, 0x5E, 0x15, 0x59, 0xA8, 0xD4, 0x05, 0x02, 0x41, 0x00, 0xCB, 0xE8, 0x9A, 0xF2, 0x5F, 0xC1,
0x75, 0xA5, 0x1E, 0x95, 0xE4, 0x4F, 0x1A, 0x48, 0xA1, 0x75, 0x9A, 0x6E, 0xDB, 0xA2, 0x31, 0xD6,
0x66, 0x29, 0xEA, 0x19, 0x37, 0x0C, 0xB2, 0x89, 0xD3, 0x03, 0x15, 0xE6, 0x7A, 0x1A, 0xCB, 0xCE,
0xB9, 0x79, 0x11, 0x9B, 0x71, 0x78, 0xA5, 0xBB, 0x07, 0x6F, 0xA3, 0x05, 0x3B, 0x84, 0x23, 0x47,
0xAB, 0x20, 0x34, 0x39, 0xB0, 0x59, 0x87, 0xEC, 0xCE, 0x9D, 0x02, 0x41, 0x00, 0xB8, 0xE0, 0x98,
0x00, 0xB7, 0x64, 0x0B, 0x22, 0x83, 0x7E, 0x0B, 0xD7, 0xF1, 0x4C, 0xB5, 0xCD, 0x96, 0x9D, 0x4A,
0xB9, 0xD2, 0x4B, 0x1B, 0xFE, 0xFB, 0xA9, 0x0C, 0x35, 0xCC, 0x42, 0x2D, 0x74, 0x43, 0xF1, 0x35,
0x51, 0xCD, 0x3D, 0x0F, 0x95, 0x1F, 0xCD, 0x74, 0x10, 0x62, 0xFE, 0x5A, 0xFC, 0x67, 0xBF, 0x9A,
0x9C, 0x3A, 0x4A, 0x84, 0xC4, 0xAF, 0x79, 0x33, 0xEA, 0xDF, 0xF0, 0xD1, 0xC9, 0x02, 0x41, 0x00,
0xAA, 0x5B, 0x16, 0x00, 0xC2, 0xB1, 0x5D, 0x39, 0x6B, 0x59, 0x2D, 0x5A, 0x4D, 0x0A, 0x3B, 0x22,
0x86, 0xB8, 0x71, 0x74, 0x8B, 0x90, 0xA4, 0xE0, 0x05, 0xBD, 0xB5, 0x39, 0x3D, 0x7C, 0x5A, 0x37,
0xAC, 0xB7, 0x56, 0x72, 0x46, 0xAD, 0xDA, 0x54, 0xE4, 0xB9, 0xEA, 0x4E, 0x32, 0xA0, 0x13, 0xF1,
0x57, 0xD0, 0x4A, 0x4D, 0xF6, 0x2F, 0xAD, 0x2F, 0x85, 0x92, 0x60, 0xDC, 0x1B, 0xEC, 0x63, 0x1D,
0x02, 0x41, 0x00, 0xAC, 0x40, 0x43, 0xF2, 0x74, 0x2C, 0x56, 0xF4, 0xB9, 0x52, 0xB0, 0xCC, 0x89,
0xC7, 0x70, 0x33, 0xA9, 0xC0, 0xD3, 0x4E, 0x35, 0xFC, 0x49, 0x69, 0xCB, 0x22, 0x9C, 0x0D, 0xD0,
0xE1, 0x8F, 0xCC, 0xF4, 0xAD, 0x25, 0xC2, 0xE1, 0x84, 0xD6, 0x34, 0x35, 0x89, 0xFA, 0xC4, 0xBA,
0x43, 0x34, 0xF4, 0xD2, 0xB2, 0x36, 0x56, 0xB9, 0x96, 0x78, 0x4D, 0x7A, 0xE3, 0x4D, 0xA9, 0x5E,
0xF5, 0x3E, 0x88,
};
} // end of namespace MasterEditorTWL

View File

@ -0,0 +1,15 @@
#pragma once
// 署名用の鍵データの宣言
#include <twl/types.h>
namespace MasterEditorTWL
{
// 開発アプリROMヘッダ署名用秘密鍵
extern const u8 g_devPubKey_DER[ 0xa2 ];
extern const u8 g_devPrivKey_DER[ 0x263 ];
} // end of namespace MasterEditorTWL

View File

@ -0,0 +1,3 @@
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by app.rc

View File

@ -0,0 +1,460 @@
// srl.h のクラス実装
#include "stdafx.h"
#include "srl.h"
#include "utility.h"
#include "keys.h"
#include <acsign/include/acsign.h>
#include <format_rom_private.h>
#include <cstring>
#include <cstdio>
using namespace MasterEditorTWL;
//
// RCSrl クラス
//
// constructor
RCSrl::RCSrl()
{
this->pRomHeader = new (ROM_Header);
std::memset( pRomHeader, 0, sizeof(ROM_Header) );
}
// destructor
RCSrl::~RCSrl()
{
// ポインタは(たぶん) unmanaged なので自主的に解放する
delete (this->pRomHeader);
}
//
// ROMヘッダをファイルからリード
//
// @arg [in] 入力ファイル名
//
ECSrlResult RCSrl::readFromFile( System::String ^filename )
{
FILE *fp = NULL;
const char *pchFilename =
(const char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi( filename ).ToPointer();
// ファイルを開いてROMヘッダのみ読み出す
if( fopen_s( &fp, pchFilename, "rb" ) != NULL )
{
return (ECSrlResult::ERROR_FILE_OPEN);
}
(void)fseek( fp, 0, SEEK_SET ); // ROMヘッダはsrlの先頭から
// 1バイトをsizeof(~)だけリード (逆だと返り値がsizeof(~)にならないので注意)
if( fread( (void*)(this->pRomHeader), 1, sizeof(ROM_Header), fp ) != sizeof(ROM_Header) )
{
return (ECSrlResult::ERROR_FILE_READ);
}
// ファイルを閉じる前にROMヘッダ以外の領域から設定を取り出す
{
//ECSrlResult r;
(void)this->hasDSDLPlaySign( fp );
//if( r != ECSrlResult::NOERROR )
//{
// (void)fclose(fp);
// return r;
//}
}
(void)fclose( fp );
// ROMヘッダの値をROM固有情報フィールドに反映させる
(void)this->setRomInfo();
return (ECSrlResult::NOERROR);
}
//
// ROMヘッダをファイルにライト
//
// @arg [in] 出力ファイル名
//
ECSrlResult RCSrl::writeToFile( System::String ^filename )
{
FILE *fp = NULL;
const char *pchFilename =
(const char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi( filename ).ToPointer();
ECSrlResult result;
// ROMヘッダにROM固有情報を反映させる
result = this->setRomHeader();
if( result != ECSrlResult::NOERROR )
{
return result;
}
// ファイルにROMヘッダをライト
if( fopen_s( &fp, pchFilename, "r+b" ) != NULL ) // 上書き・バイナリ
{
return (ECSrlResult::ERROR_FILE_OPEN);
}
(void)fseek( fp, 0, SEEK_SET );
if( fwrite( (const void*)(this->pRomHeader), 1, sizeof(ROM_Header), fp ) != sizeof(ROM_Header) )
{
return (ECSrlResult::ERROR_FILE_WRITE);
}
(void)fclose( fp );
return (ECSrlResult::NOERROR);
}
//
// ROMヘッダから取得したROM固有情報をフィールドに反映させる
//
ECSrlResult RCSrl::setRomInfo(void)
{
System::Int32 i;
System::Text::UTF8Encoding^ utf8 = gcnew System::Text::UTF8Encoding( true ); // char->String変換に必要
// NTR互換情報
this->hTitleName = gcnew System::String( this->pRomHeader->s.title_name, 0, TITLE_NAME_MAX, utf8 );
this->hGameCode = gcnew System::String( this->pRomHeader->s.game_code, 0, GAME_CODE_MAX, utf8 );
this->hMakerCode = gcnew System::String( this->pRomHeader->s.maker_code, 0, MAKER_CODE_MAX, utf8 );
switch( this->pRomHeader->s.platform_code )
{
case PLATFORM_CODE_NTR: this->hPlatform = gcnew System::String( "NTR Limited" ); break;
case PLATFORM_CODE_TWL_HYBLID: this->hPlatform = gcnew System::String( "NTR/TWL Hybrid" ); break;
case PLATFORM_CODE_TWL_LIMITED: this->hPlatform = gcnew System::String( "TWL Limited" ); break;
default:
this->hPlatform = nullptr;
break;
}
this->hRomSize = MasterEditorTWL::transRomSizeToString( this->pRomHeader->s.rom_size );
//this->hForKorea = gcnew System::Byte( this->pRomHeader->s.for_korea );
//this->hForChina = gcnew System::Byte( this->pRomHeader->s.for_china );
this->hRomVersion = gcnew System::Byte( this->pRomHeader->s.rom_version );
this->hHeaderCRC = gcnew System::UInt16( this->pRomHeader->s.header_crc16 );
switch( this->pRomHeader->s.game_cmd_param & CARD_LATENCY_MASK )
{
case CARD_MROM_GAME_LATENCY:
this->hLatency = "MROM";
break;
case CARD_1TROM_GAME_LATENCY:
this->hLatency = "1TROM";
break;
default:
this->hLatency = "Illegal";
break;
}
// ペアレンタルコントロール
this->hArrayParentalRating = gcnew cli::array<System::Byte ^>(PARENTAL_CONTROL_INFO_SIZE);
this->hArrayParentalEffect = gcnew cli::array<System::Boolean ^>(PARENTAL_CONTROL_INFO_SIZE);
this->hArrayParentalAlways = gcnew cli::array<System::Boolean ^>(PARENTAL_CONTROL_INFO_SIZE);
for( i=0; i < PARENTAL_CONTROL_INFO_SIZE; i++ )
{
System::Byte rating = this->pRomHeader->s.parental_control_rating_info[i] & OS_TWL_PCTL_OGNINFO_AGE_MASK;
System::Boolean effect = ((this->pRomHeader->s.parental_control_rating_info[i] & OS_TWL_PCTL_OGNINFO_ENABLE_MASK) != 0)?true:false;
System::Boolean force = ((this->pRomHeader->s.parental_control_rating_info[i] & OS_TWL_PCTL_OGNINFO_ALWAYS_MASK) != 0)?true:false;
this->hArrayParentalRating[i] = gcnew System::Byte( rating );
this->hArrayParentalEffect[i] = gcnew System::Boolean( effect );
this->hArrayParentalAlways[i] = gcnew System::Boolean( force );
}
// TWL専用情報
this->hIsNormalJump = gcnew System::Boolean( (this->pRomHeader->s.permit_landing_normal_jump != 0)?true:false );
this->hIsTmpJump = gcnew System::Boolean( (this->pRomHeader->s.permit_landing_tmp_jump != 0)?true:false );
this->hNormalRomOffset = gcnew System::UInt32( (u32)(this->pRomHeader->s.twl_card_normal_area_rom_offset) * 0x80000 );
this->hKeyTableRomOffset = gcnew System::UInt32( (u32)(this->pRomHeader->s.twl_card_keytable_area_rom_offset) * 0x80000 );
this->hEULAVersion = gcnew System::Byte( this->pRomHeader->s.agree_EULA_version );
this->hPublicSize = gcnew System::UInt32( this->pRomHeader->s.public_save_data_size );
this->hPrivateSize = gcnew System::UInt32( this->pRomHeader->s.private_save_data_size );
u8 *idL = this->pRomHeader->s.titleID_Lo;
u32 idH = this->pRomHeader->s.titleID_Hi;
u32 val;
val = ((u32)(idL[0]) << 24) | ((u32)(idL[1]) << 16) | ((u32)(idL[2]) << 8) | ((u32)(idL[3])); // ビッグエンディアン
this->hTitleIDLo = gcnew System::UInt32( val );
this->hTitleIDHi = gcnew System::UInt32( idH );
// TitleIDからわかる情報
this->hIsAppLauncher = gcnew System::Boolean( false );
this->hIsAppUser = gcnew System::Boolean( false );
this->hIsAppSystem = gcnew System::Boolean( false );
this->hIsAppSecure = gcnew System::Boolean( false );
this->hIsLaunch = gcnew System::Boolean( false );
this->hIsMediaNand = gcnew System::Boolean( false );
this->hIsDataOnly = gcnew System::Boolean( false );
if( (idL[3]=='H') && (idL[2]=='N') && (idL[1]=='A') ) // ランチャアプリかどうかはTitleID_Loの値で決定
{
*(this->hIsAppLauncher) = true;
}
if( idH & TITLE_ID_HI_SECURE_FLAG_MASK ) // 各ビットは排他的とは限らないのでelse ifにはならない
{
*(this->hIsAppSecure) = true;
}
if( idH & TITLE_ID_HI_DATA_ONLY_FLAG_MASK )
{
*(this->hIsDataOnly) = true;
}
if( idH & TITLE_ID_HI_MEDIA_MASK )
{
*(this->hIsMediaNand) = true;
}
if( (idH & TITLE_ID_HI_NOT_LAUNCH_FLAG_MASK) == 0 ) // ビットが0のときLaunch
{
*(this->hIsLaunch) = true;
}
if( (idH & TITLE_ID_HI_APP_TYPE_MASK) == 1 )
{
*(this->hIsAppSystem) = true;
}
if( (idH & TITLE_ID_HI_APP_TYPE_MASK) == 0 )
{
*(this->hIsAppUser) = true;
}
u16 pub = (u16)((idH & TITLE_ID_HI_PUBLISHER_CODE_MASK) >> TITLE_ID_HI_PUBLISHER_CODE_SHIFT);
this->hPublisherCode = gcnew System::UInt16( pub );
// TWL拡張フラグ
this->hIsCodecTWL = gcnew System::Boolean( (this->pRomHeader->s.exFlags.codec_mode != 0)?true:false );
this->hIsEULA = gcnew System::Boolean( (this->pRomHeader->s.exFlags.agree_EULA != 0)?true:false );
this->hIsSubBanner = gcnew System::Boolean( (this->pRomHeader->s.exFlags.availableSubBannerFile != 0)?true:false );
this->hIsWiFiIcon = gcnew System::Boolean( (this->pRomHeader->s.exFlags.WiFiConnectionIcon != 0)?true:false );
this->hIsWirelessIcon = gcnew System::Boolean( (this->pRomHeader->s.exFlags.DSWirelessIcon != 0)?true:false );
this->hIsWL = gcnew System::Boolean( (this->pRomHeader->s.exFlags.enable_nitro_whitelist_signature != 0)?true:false );
// TWLアクセスコントロール
this->hIsCommonClientKey = gcnew System::Boolean( (this->pRomHeader->s.access_control.common_client_key != 0)?true:false );
this->hIsAesSlotBForES = gcnew System::Boolean( (this->pRomHeader->s.access_control.hw_aes_slot_B != 0)?true:false );
this->hIsAesSlotCForNAM = gcnew System::Boolean( (this->pRomHeader->s.access_control.hw_aes_slot_C != 0)?true:false );
this->hIsSD = gcnew System::Boolean( (this->pRomHeader->s.access_control.sd_card_access != 0)?true:false );
this->hIsNAND = gcnew System::Boolean( (this->pRomHeader->s.access_control.nand_access != 0)?true:false );
this->hIsGameCardOn = gcnew System::Boolean( (this->pRomHeader->s.access_control.game_card_on != 0)?true:false );
this->hIsShared2 = gcnew System::Boolean( (this->pRomHeader->s.access_control.shared2_file != 0)?true:false );
this->hIsAesSlotBForJpegEnc = gcnew System::Boolean( (this->pRomHeader->s.access_control.hw_aes_slot_B_SignJPEGForLauncher != 0)?true:false );
this->hIsGameCardNitro = gcnew System::Boolean( (this->pRomHeader->s.access_control.game_card_nitro_mode != 0)?true:false );
this->hIsAesSlotAForSSL = gcnew System::Boolean( (this->pRomHeader->s.access_control.hw_aes_slot_A_SSLClientCert != 0)?true:false );
this->hIsCommonClientKeyForDebugger
= gcnew System::Boolean( (this->pRomHeader->s.access_control.common_client_key_for_debugger_sysmenu != 0)?true:false );
// Shared2ファイルサイズ
this->hShared2Size0 = gcnew System::UInt32( 0 );
this->hShared2Size1 = gcnew System::UInt32( 0 );
this->hShared2Size2 = gcnew System::UInt32( 0 );
this->hShared2Size3 = gcnew System::UInt32( 0 );
this->hShared2Size4 = gcnew System::UInt32( 0 );
this->hShared2Size5 = gcnew System::UInt32( 0 );
u32 unit = 16 * 1024; // 16KBの乗数が格納されている
if( this->pRomHeader->s.shared2_file0_size != 0 )
{
*(this->hShared2Size0) = (this->pRomHeader->s.shared2_file0_size * unit) + unit;
}
if( this->pRomHeader->s.shared2_file1_size != 0 )
{
*(this->hShared2Size1) = (this->pRomHeader->s.shared2_file1_size * unit) + unit;
}
if( this->pRomHeader->s.shared2_file2_size != 0 )
{
*(this->hShared2Size2) = (this->pRomHeader->s.shared2_file2_size * unit) + unit;
}
if( this->pRomHeader->s.shared2_file3_size != 0 )
{
*(this->hShared2Size3) = (this->pRomHeader->s.shared2_file3_size * unit) + unit;
}
if( this->pRomHeader->s.shared2_file4_size != 0 )
{
*(this->hShared2Size4) = (this->pRomHeader->s.shared2_file4_size * unit) + unit;
}
if( this->pRomHeader->s.shared2_file5_size != 0 )
{
*(this->hShared2Size5) = (this->pRomHeader->s.shared2_file5_size * unit) + unit;
}
// カードリージョン
const u32 maskJapan = 0x00000001;
const u32 maskAmerica = 0x00000002;
const u32 maskEurope = 0x00000004;
const u32 maskAustralia = 0x00000008;
const u32 maskChina = 0x00000010;
const u32 maskKorea = 0x00000020;
const u32 map = this->pRomHeader->s.card_region_bitmap;
this->hIsRegionJapan = gcnew System::Boolean( ((map & maskJapan) != 0)?true:false );
this->hIsRegionAmerica = gcnew System::Boolean( ((map & maskAmerica) != 0)?true:false );
this->hIsRegionEurope = gcnew System::Boolean( ((map & maskEurope) != 0)?true:false );
this->hIsRegionAustralia = gcnew System::Boolean( ((map & maskAustralia) != 0)?true:false );
//this->hIsRegionChina = gcnew System::Boolean( ((map & maskChina) != 0)?true:false );
//this->hIsRegionKorea = gcnew System::Boolean( ((map & maskKorea) != 0)?true:false );
return ECSrlResult::NOERROR;
} // ECSrlResult RCSrl::setRomInfo(void)
//
// ROMヘッダにROM固有情報フィールドの値を反映させる
//
ECSrlResult RCSrl::setRomHeader(void)
{
System::Int32 i;
ECSrlResult result;
// ROMヘッダの[0,0x160)の領域はRead Onlyで変更しない
// いくつかのフラグをROMヘッダに反映
this->pRomHeader->s.exFlags.agree_EULA = (*(this->hIsEULA) == true)?1:0;
this->pRomHeader->s.agree_EULA_version = *(this->hEULAVersion);
this->pRomHeader->s.exFlags.WiFiConnectionIcon = (*(this->hIsWiFiIcon) == true)?1:0;
this->pRomHeader->s.exFlags.DSWirelessIcon = (*(this->hIsWirelessIcon) == true)?1:0;
// ペアレンタルコントロール
for( i=0; i < PARENTAL_CONTROL_INFO_SIZE; i++ )
{
System::Byte effect = 0;
System::Byte force = 0;
if( this->hArrayParentalEffect[i]->Equals(true) )
{
effect = OS_TWL_PCTL_OGNINFO_ENABLE_MASK;
}
if( this->hArrayParentalAlways[i]->Equals(true) )
{
force = OS_TWL_PCTL_OGNINFO_ALWAYS_MASK;
}
this->pRomHeader->s.parental_control_rating_info[i] = effect | force | *(this->hArrayParentalRating[i]);
}
// ROMヘッダのCRCと署名を更新する
result = this->calcRomHeaderCRC();
if( result != ECSrlResult::NOERROR )
{
return result;
}
result = this->signRomHeader();
if( result != ECSrlResult::NOERROR )
{
return result;
}
return ECSrlResult::NOERROR;
} // ECSrlResult RCSrl::setRomHeader(void)
//
// ヘッダのCRCを算出
//
#define HEADER_CRC16_INIT_VALUE (0xffff)
#define HEADER_CALC_CRC16_SIZE (0x15e)
ECSrlResult RCSrl::calcRomHeaderCRC(void)
{
u16 r1;
u16 total = HEADER_CRC16_INIT_VALUE;
int size = HEADER_CALC_CRC16_SIZE;
const u8 *data = (u8*)this->pRomHeader;
// CRCテーブルは固定
const u16 CRC16Table[16] =
{
0x0000, 0xCC01, 0xD801, 0x1400,
0xF001, 0x3C00, 0x2800, 0xE401,
0xA001, 0x6C00, 0x7800, 0xB401,
0x5000, 0x9C01, 0x8801, 0x4400
};
// CRC計算
while (size-- > 0)
{
// 下位4bit
r1 = CRC16Table[total & 0xf];
total = (total >> 4) & 0x0fff;
total = total ^ r1 ^ CRC16Table[*data & 0xf];
// 上位4bit
r1 = CRC16Table[total & 0xf];
total = (total >> 4) & 0x0fff;
total = total ^ r1 ^ CRC16Table[(*data >> 4) & 0xf];
data++;
}
// ROMヘッダのCRC領域を上書き
this->pRomHeader->s.header_crc16 = total;
return (ECSrlResult::NOERROR);
} // ECSrlResult RCSrl::calcRomHeaderCRC(void)
//
// ROMヘッダを再署名
//
ECSrlResult RCSrl::signRomHeader(void)
{
SignatureData signSrc; // 署名のもととなるダイジェスト値
u8 signDst[ RSA_KEY_LENGTH ]; // 署名の格納先Tmpバッファ
u8 decryptBlock[ RSA_KEY_LENGTH ]; // 署名を解除後ブロックバッファ
BOOL result;
ROM_Header rh;
int pos;
// ROMヘッダのダイジェストを算出(先頭から証明書領域の直前までが対象)
ACSign_DigestUnit(
signSrc.digest,
this->pRomHeader,
(u32)&(rh.certificate) - (u32)&(rh) // this->pRomHeader はマネージヒープ上にあるので実アドレスを取得できない
);
// ダイジェストに署名をかける
result = ACSign_Encrypto( signDst, g_devPrivKey_DER, &signSrc, sizeof(SignatureData) );
if( !result )
{
return (ECSrlResult::ERROR_SIGN_ENCRYPT);
}
// 署名を解除してダイジェストと一致するかベリファイする
result = ACSign_Decrypto( decryptBlock, g_devPubKey_DER, signDst, RSA_KEY_LENGTH );
for( pos=0; pos < RSA_KEY_LENGTH; pos++ )
{
if( decryptBlock[pos] == 0x0 ) // 解除後ブロックから実データをサーチ
break;
}
if( !result || (memcmp( &signSrc, &(decryptBlock[pos+1]), sizeof(SignatureData) ) != 0) )
{
return (ECSrlResult::ERROR_SIGN_DECRYPT);
}
// ROMヘッダに署名を上書き
memcpy( this->pRomHeader->signature, signDst, RSA_KEY_LENGTH );
return (ECSrlResult::NOERROR);
} // ECSrlResult RCSrl::signRomHeader(void)
//
// DSダウンロード署名がSRLに格納されているか調べる
//
ECSrlResult RCSrl::hasDSDLPlaySign( FILE *fp )
{
const s32 DSDLPLAY_SIZE = 0x88;
u8 buf[ DSDLPLAY_SIZE ];
u32 offset;
// 署名領域をSRLから読み込む
offset = this->pRomHeader->s.rom_valid_size;
if( fseek( fp, offset, SEEK_SET ) != 0 )
{
this->hHasDSDLPlaySign = gcnew System::Boolean( false ); // 署名はNTRのROM領域の最後に入るので
return ECSrlResult::ERROR_FILE_READ; // NTRのSRLに署名が格納されていない場合はシークもリードもできない
}
if( DSDLPLAY_SIZE != fread( buf, 1, DSDLPLAY_SIZE, fp ) )
{
this->hHasDSDLPlaySign = gcnew System::Boolean( false );
return ECSrlResult::ERROR_FILE_READ;
}
// 最初の2バイトが固定の値となることが保証されているのでその値かどうかで判定
if( (buf[0] == 'a') && (buf[1] == 'c') )
{
this->hHasDSDLPlaySign = gcnew System::Boolean( true );
}
else
{
this->hHasDSDLPlaySign = gcnew System::Boolean( false );
}
return (ECSrlResult::NOERROR);
}

View File

@ -0,0 +1,159 @@
#pragma once
// ROMデータ(SRL)クラスと関連クラスの宣言
#include <twl/types.h>
#include <twl/os/common/format_rom.h>
#include <twl/os/common/ownerInfoEx.h>
namespace MasterEditorTWL
{
// -------------------------------------------------------------------
// Type : enum class
// Name : ECSrlResult
//
// Description : RCSrlクラスの操作でのエラーを宣言
// -------------------------------------------------------------------
enum class ECSrlResult
{
NOERROR = 0,
// エラー特定しなくても原因がわかるときの返り値
// (エラーが生じる可能性のある箇所が1つ etc.)
ERROR,
// ファイル操作でのエラー
ERROR_FILE_OPEN,
ERROR_FILE_READ,
ERROR_FILE_WRITE,
// 署名でのエラー
ERROR_SIGN_ENCRYPT,
ERROR_SIGN_DECRYPT,
// CRC算出でのエラー
ERROR_SIGN_CRC,
};
// -------------------------------------------------------------------
// Type : ref class
// Name : RCSrl
//
// Description : ROMデータ(SRL)の設定情報クラス
//
// Role : ROMデータのファイル入出力・内部情報の更新
// -------------------------------------------------------------------
ref class RCSrl
{
// field
private:
// ROMヘッダ
ROM_Header *pRomHeader;
public:
// (GUIに表示される)ROMヘッダ固有情報
// NTR互換情報 ReadOnly
property System::String ^hTitleName;
property System::String ^hGameCode;
property System::String ^hMakerCode;
property System::String ^hPlatform;
property System::String ^hRomSize;
//property System::Byte ^hForKorea;
//property System::Byte ^hForChina;
property System::Byte ^hRomVersion;
property System::UInt16 ^hHeaderCRC;
property System::String ^hLatency; // MROM/1TROM/Illegal
// ペアレンタルコントロール
property cli::array<System::Byte^> ^hArrayParentalRating; // 各団体での制限年齢
property cli::array<System::Boolean^> ^hArrayParentalEffect; // 制限有効フラグ
property cli::array<System::Boolean^> ^hArrayParentalAlways; // 制限強制有効フラグ
// TWL専用情報 一部編集可能
property System::UInt32 ^hNormalRomOffset;
property System::UInt32 ^hKeyTableRomOffset;
property System::Byte ^hEULAVersion; // 編集可能
property System::UInt32 ^hTitleIDLo;
property System::UInt32 ^hTitleIDHi;
property System::Boolean ^hIsAppLauncher; // TitleIDLoからわかるアプリ種別
property System::Boolean ^hIsAppUser; // TitleIDHiからわかるアプリ種別
property System::Boolean ^hIsAppSystem; //
property System::Boolean ^hIsAppSecure; //
property System::Boolean ^hIsLaunch; //
property System::Boolean ^hIsMediaNand; //
property System::Boolean ^hIsDataOnly; //
property System::UInt16 ^hPublisherCode; //
property System::UInt32 ^hPublicSize;
property System::UInt32 ^hPrivateSize;
property System::Boolean ^hIsNormalJump;
property System::Boolean ^hIsTmpJump;
property System::Boolean ^hHasDSDLPlaySign; // ROMヘッダ外のSRLからわかる署名の有無
// TWL拡張フラグ 一部編集可能
property System::Boolean ^hIsCodecTWL;
property System::Boolean ^hIsEULA; // 編集可能
property System::Boolean ^hIsSubBanner;
property System::Boolean ^hIsWiFiIcon; // 編集可能
property System::Boolean ^hIsWirelessIcon; // 編集可能
property System::Boolean ^hIsWL;
// TWLアクセスコントロール Read Only
property System::Boolean ^hIsCommonClientKey;
property System::Boolean ^hIsAesSlotBForES;
property System::Boolean ^hIsAesSlotCForNAM;
property System::Boolean ^hIsSD;
property System::Boolean ^hIsNAND;
property System::Boolean ^hIsGameCardOn;
property System::Boolean ^hIsShared2;
property System::Boolean ^hIsAesSlotBForJpegEnc;
property System::Boolean ^hIsGameCardNitro;
property System::Boolean ^hIsAesSlotAForSSL;
property System::Boolean ^hIsCommonClientKeyForDebugger;
// Shared2ファイルサイズ Read Only
property System::UInt32 ^hShared2Size0;
property System::UInt32 ^hShared2Size1;
property System::UInt32 ^hShared2Size2;
property System::UInt32 ^hShared2Size3;
property System::UInt32 ^hShared2Size4;
property System::UInt32 ^hShared2Size5;
// カードリージョン Read Only
property System::Boolean ^hIsRegionJapan;
property System::Boolean ^hIsRegionAmerica;
property System::Boolean ^hIsRegionEurope;
property System::Boolean ^hIsRegionAustralia;
//property System::Boolean ^hRegionChina;
//property System::Boolean ^hRegionKorea;
// constructor and destructor
public:
RCSrl();
~RCSrl();
// method
public:
//
// ROMヘッダのファイル入出力
//
// @arg [in/out] 入出力ファイル名
//
ECSrlResult readFromFile ( System::String ^filename );
ECSrlResult writeToFile( System::String ^filename );
// internal method
private:
// ROM固有情報とROMヘッダの設定
ECSrlResult setRomInfo(void); // ROMヘッダから取得したROM固有情報をフィールドに反映させる
ECSrlResult setRomHeader(void); // ROMヘッダにROM固有情報フィールドの値を反映させる
// ROMヘッダの更新
ECSrlResult calcRomHeaderCRC(void); // ROMヘッダのCRCを再計算
ECSrlResult signRomHeader(void); // ROMヘッダ更新後の再署名
// SRLバイナリから特殊な設定を調べる
ECSrlResult hasDSDLPlaySign( FILE *fp );
// DSダウンロード署名がSRLに格納されているか調べる
// @arg [in] 入力ファイルのFP (->SRL読み込み時に実行されるべき)
}; // end of ref class RCSrl
} // end of namespace MasterEditorTWL

View File

@ -0,0 +1,7 @@
// stdafx.cpp : 標準インクルード MasterEditorTWL.pch のみを
// 含むソース ファイルは、プリコンパイル済みヘッダーになります。
// stdafx.obj にはプリコンパイル済み型情報が含まれます。
#include "stdafx.h"

View File

@ -0,0 +1,6 @@
// stdafx.h : 標準のシステム インクルード ファイルのインクルード ファイル、または
// 参照回数が多く、かつあまり変更されない、プロジェクト専用のインクルード ファイル
// を記述します。
#pragma once
// TODO: プログラムに必要な追加ヘッダーをここで参照してください。

View File

@ -0,0 +1,282 @@
// utility.h の実装
#include "stdafx.h"
#include "utility.h"
#include <cstring>
#include <cstdio>
#include <twl/types.h>
#include <twl/os/common/format_rom.h>
#include <twl/os/common/ownerInfoEx.h>
//
// String を char 配列に格納
//
// @arg [out] 格納先
// @arg [in] 格納元
// @arg [in] 文字列長
// @arg [in] 余りを埋める padding
//
void MasterEditorTWL::setStringToChars( char *pDst, System::String ^hSrc,
const System::Int32 nMax, const System::SByte pad )
{
System::Int32 i;
memset( pDst, pad, nMax );
for( i=0; (i < hSrc->Length) && (i < nMax); i++ )
{
pDst[i] = (char)hSrc[i];
}
}
//
// ROMヘッダ中のROM容量設定バイトからROM容量を表す文字列を取得
//
// @arg [in] ROM容量設定バイト
//
// @ret 文字列(単位つき)
//
System::String^ MasterEditorTWL::transRomSizeToString( System::Byte ^byte )
{
System::UInt32 size;
System::String ^unit;
// RomSize = 2^(byte) [Mbit]
size = 1 << *(byte);
if(size >= 1024)
{
unit = gcnew System::String("Gbit");
size = size / 1024;
}
else
{
unit = gcnew System::String("Mbit");
}
return (size.ToString() + unit);
}
//
// ペアレンタルコントロールのレーティング値から文字列を取得
//
// @arg [in] 団体
// @arg [in] 有効フラグ(0歳以上か未審査かを判定するために使用する)
// @arg [in] レーティング値
// @arg [in] 英語フラグ
//
// @ret レーティングの文字列(団体がおかしいときnullptr)
//
System::String^ MasterEditorTWL::transRatingToString( System::Byte ogn, System::Boolean enable, System::Byte rating, System::Boolean english )
{
cli::array< System::String^ > ^list;
System::Int32 index;
System::String ^str;
if( ogn == OS_TWL_PCTL_OGN_CERO )
{
if( english )
{
list = gcnew cli::array< System::String^ >{ L"A (All ages)", L"B (aged 12 or older)", L"C (aged 15 or older)",
L"D (aged 17 or older)", L"Z (aged 18 or older)", L"Unexamined"};
}
else
{
list = gcnew cli::array< System::String^ >{L"A (全年齢)", L"B (12歳以上)", L"C (15歳以上)", L"D (17歳以上)", L"Z (18歳以上)", L"未審査"};
}
switch( rating )
{
case 0:
if( enable ) // 全年齢か未審査か判定
index = 0;
else
index = 5;
break;
case 12: index = 1; break;
case 15: index = 2; break;
case 17: index = 3; break;
case 18: index = 4; break;
default:
index = 5;
break;
}
str = list[ index ];
}
else if( ogn == OS_TWL_PCTL_OGN_ESRB )
{
if( english )
{
list = gcnew cli::array< System::String^ >{L"EC (aged 3 or older)", L"E (aged 6 or older)", L"E10+ (aged 10 or older)",
L"T (aged 13 or older)", L"M (aged 17 or older)", L"Unexamined"};
}
else
{
list = gcnew cli::array< System::String^ >{L"EC (3歳以上)", L"E (6歳以上)", L"E10+ (10歳以上)", L"T (13歳以上)", L"M (17歳以上)", L"未審査"};
}
switch( rating )
{
case 3: index = 0; break;
case 6: index = 1; break;
case 10: index = 2; break;
case 13: index = 3; break;
case 17: index = 4; break;
case 0: index = 5; break; // 0はデフォルト値なのでエラーメッセージを出さない(自動的に未審査扱い)
default:
index = 5;
break;
}
str = list[ index ];
}
else if( ogn == OS_TWL_PCTL_OGN_USK )
{
if( english )
{
list = gcnew cli::array< System::String^ >{L"All ages", L"aged 6 or older", L"aged 12 or older", L"aged 16 or older",
L"Inadequent for young", L"Unexamined"};
}
else
{
list = gcnew cli::array< System::String^ >{L"年齢制限なし", L"6歳以上", L"12歳以上", L"16歳以上", L"青少年には不適切", L"未審査"};
}
switch( rating )
{
case 0:
if( enable )
index = 0;
else
index = 5;
break;
case 6: index = 1; break;
case 12: index = 2; break;
case 16: index = 3; break;
case 18: index = 4; break;
default:
index = 5;
break;
}
str = list[ index ];
}
else if( ogn == OS_TWL_PCTL_OGN_PEGI_GEN )
{
if( english )
{
list = gcnew cli::array< System::String^ >{L"aged 3 or older", L"aged 7 or older", L"aged 12 or older", L"aged 16 or older",
L"aged 18 or older", L"Unexamined"};
}
else
{
list = gcnew cli::array< System::String^ >{L"3歳以上", L"7歳以上", L"12歳以上", L"16歳以上", L"18歳以上", L"未審査"};
}
switch( rating )
{
case 3: index = 0; break;
case 7: index = 1; break;
case 12: index = 2; break;
case 16: index = 3; break;
case 18: index = 4; break;
case 0: index = 5; break;
default:
index = 5;
break;
}
str = list[ index ];
}
else if( ogn == OS_TWL_PCTL_OGN_PEGI_PRT )
{
if( english )
{
list = gcnew cli::array< System::String^ >{L"aged 4 or older", L"aged 6 or older", L"aged 12 or older", L"aged 16 or older",
L"aged 18 or older", L"Unexamined"};
}
else
{
list = gcnew cli::array< System::String^ >{L"4歳以上", L"6歳以上", L"12歳以上", L"16歳以上", L"18歳以上", L"未審査"};
}
switch( rating )
{
case 4: index = 0; break;
case 6: index = 1; break;
case 12: index = 2; break;
case 16: index = 3; break;
case 18: index = 4; break;
case 0: index = 5; break;
default:
index = 5;
break;
}
str = list[ index ];
}
else if( ogn == OS_TWL_PCTL_OGN_PEGI_BBFC )
{
if( english )
{
list = gcnew cli::array< System::String^ >{L"aged 3 or older", L"aged 4 or older recommended", L"aged 7 or older", L"aged 8 or older recommended",
L"aged 12 or older", L"aged 15 or older", L"aged 16 or older", L"aged 18 or older", L"Unexamined"};
}
else
{
list = gcnew cli::array< System::String^ >{L"3歳以上", L"4歳以上推奨", L"7歳以上", L"8歳以上推奨",
L"12歳以上", L"15歳以上", L"16歳以上", L"18歳以上", L"未審査"};
}
switch( rating )
{
case 3: index = 0; break;
case 4: index = 1; break;
case 7: index = 2; break;
case 8: index = 3; break;
case 12: index = 4; break;
case 15: index = 5; break;
case 16: index = 6; break;
case 18: index = 7; break;
case 0: index = 8; break;
default:
index = 8;
break;
}
str = list[ index ];
}
else if( ogn == OS_TWL_PCTL_OGN_OFLC )
{
if( english )
{
list = gcnew cli::array< System::String^ >{L"G", L"PG", L"M", L"MA15+", L"Unexamined"};
}
else
{
list = gcnew cli::array< System::String^ >{L"G", L"PG", L"M", L"MA15+", L"未審査"};
}
switch( rating )
{
case 0:
if( enable )
index = 0;
else
index = 4;
break;
case 7: index = 1; break;
case 14: index = 2; break;
case 15: index = 3; break;
default:
index = 4; break;
break;
}
str = list[ index ];
}
else
{
str = nullptr;
}
return str;
}

View File

@ -0,0 +1,45 @@
#pragma once
// 共用ライブラリ・クラスの宣言
#include <twl/types.h>
namespace MasterEditorTWL
{
// -------------------------------------------------------------------
// functions
// -------------------------------------------------------------------
//
// String を char 配列に格納
//
// @arg [out] 格納先
// @arg [in] 格納元
// @arg [in] 文字列長
// @arg [in] 余りを埋める padding
//
void setStringToChars( char *pDst, System::String ^hSrc, const System::Int32 nMax, const System::SByte pad );
//
// ROMヘッダ中のROM容量設定バイトからROM容量を表す文字列を取得
//
// @arg [in] ROM容量設定バイト
//
// @ret 文字列(単位つき)
//
System::String^ transRomSizeToString( System::Byte ^byte );
//
// ペアレンタルコントロールのレーティング値から文字列を取得
//
// @arg [in] 団体
// @arg [in] 有効フラグ(0歳以上か未審査かを判定するために使用する)
// @arg [in] レーティング値
// @arg [in] 英語フラグ
//
// @ret レーティングの文字列(団体がおかしいときnullptr)
//
System::String^ transRatingToString( System::Byte ogn, System::Boolean enable, System::Byte rating, System::Boolean english );
} // end of namespace MasterEditorTWL

View File

@ -0,0 +1,820 @@
"DeployProject"
{
"VSVersion" = "3:800"
"ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}"
"IsWebType" = "8:FALSE"
"ProjectName" = "8:MasterEditorTWLSetup"
"LanguageId" = "3:1041"
"CodePage" = "3:932"
"UILanguageId" = "3:1041"
"SccProjectName" = "8:"
"SccLocalPath" = "8:"
"SccAuxPath" = "8:"
"SccProvider" = "8:"
"Hierarchy"
{
"Entry"
{
"MsmKey" = "8:_23206E985D4D45889DEAA959C37C4BC9"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_7746D2D347F0423FB46FA2300F6158A4"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_A3417E9C9F294832AE49B5BDAF95E373"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
}
"Configurations"
{
"Debug"
{
"DisplayName" = "8:Debug"
"IsDebugOnly" = "11:TRUE"
"IsReleaseOnly" = "11:FALSE"
"OutputFilename" = "8:Debug\\MasterEditorTWLSetup.msi"
"PackageFilesAs" = "3:2"
"PackageFileSize" = "3:-2147483648"
"CabType" = "3:1"
"Compression" = "3:2"
"SignOutput" = "11:FALSE"
"CertificateFile" = "8:"
"PrivateKeyFile" = "8:"
"TimeStampServer" = "8:"
"InstallerBootstrapper" = "3:2"
"BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}"
{
"Enabled" = "11:TRUE"
"PromptEnabled" = "11:TRUE"
"PrerequisitesLocation" = "2:1"
"Url" = "8:"
"ComponentsUrl" = "8:"
"Items"
{
"{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Net.Framework.3.5"
{
"Name" = "8:.NET Framework 3.5"
"ProductCode" = "8:Microsoft.Net.Framework.3.5"
}
"{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Windows.Installer.3.1"
{
"Name" = "8:Windows Installer 3.1"
"ProductCode" = "8:Microsoft.Windows.Installer.3.1"
}
}
}
}
"Release"
{
"DisplayName" = "8:Release"
"IsDebugOnly" = "11:FALSE"
"IsReleaseOnly" = "11:TRUE"
"OutputFilename" = "8:Release\\MasterEditorTWLSetup.msi"
"PackageFilesAs" = "3:2"
"PackageFileSize" = "3:-2147483648"
"CabType" = "3:1"
"Compression" = "3:2"
"SignOutput" = "11:FALSE"
"CertificateFile" = "8:"
"PrivateKeyFile" = "8:"
"TimeStampServer" = "8:"
"InstallerBootstrapper" = "3:2"
"BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}"
{
"Enabled" = "11:TRUE"
"PromptEnabled" = "11:TRUE"
"PrerequisitesLocation" = "2:1"
"Url" = "8:"
"ComponentsUrl" = "8:"
"Items"
{
"{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Net.Framework.3.5"
{
"Name" = "8:.NET Framework 3.5"
"ProductCode" = "8:Microsoft.Net.Framework.3.5"
}
"{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Windows.Installer.3.1"
{
"Name" = "8:Windows Installer 3.1"
"ProductCode" = "8:Microsoft.Windows.Installer.3.1"
}
}
}
}
}
"Deployable"
{
"CustomAction"
{
}
"DefaultFeature"
{
"Name" = "8:DefaultFeature"
"Title" = "8:"
"Description" = "8:"
}
"ExternalPersistence"
{
"LaunchCondition"
{
"{A06ECF26-33A3-4562-8140-9B0E340D4F24}:_6924DDEBAA3847838D980F2E7456B5FF"
{
"Name" = "8:.NET Framework"
"Message" = "8:[VSDNETMSG]"
"Version" = "8:3.5.21022"
"AllowLaterVersions" = "11:FALSE"
"InstallUrl" = "8:http://go.microsoft.com/fwlink/?LinkId=76617"
}
}
}
"File"
{
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_23206E985D4D45889DEAA959C37C4BC9"
{
"SourcePath" = "8:..\\resource\\sheet_templete.xml"
"TargetName" = "8:sheet_templete.xml"
"Tag" = "8:"
"Folder" = "8:_99EFE6B595C5432FB4712560C9D29AE5"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A3417E9C9F294832AE49B5BDAF95E373"
{
"SourcePath" = "8:..\\resource\\ini.xml"
"TargetName" = "8:ini.xml"
"Tag" = "8:"
"Folder" = "8:_99EFE6B595C5432FB4712560C9D29AE5"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
}
"FileType"
{
}
"Folder"
{
"{1525181F-901A-416C-8A58-119130FE478E}:_511CA14EE892474E9A4F78537CA4FD5F"
{
"Name" = "8:#1916"
"AlwaysCreate" = "11:TRUE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Property" = "8:DesktopFolder"
"Folders"
{
}
}
"{3C67513D-01DD-4637-8A68-80971EB9504F}:_DB36135A1FB84606BA18105F8B898FB2"
{
"DefaultLocation" = "8:[ProgramFilesFolder][Manufacturer]\\[ProductName]"
"Name" = "8:#1925"
"AlwaysCreate" = "11:FALSE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Property" = "8:TARGETDIR"
"Folders"
{
"{9EF0B969-E518-4E46-987F-47570745A589}:_1494B8B199184797B9C812877A4DFB7F"
{
"Name" = "8:bin"
"AlwaysCreate" = "11:FALSE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Property" = "8:_B23854B2049F4A97BCD9477AFCDBE7EB"
"Folders"
{
}
}
"{9EF0B969-E518-4E46-987F-47570745A589}:_99EFE6B595C5432FB4712560C9D29AE5"
{
"Name" = "8:resource"
"AlwaysCreate" = "11:FALSE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Property" = "8:_640331DE98B247AD89E624136F7BF429"
"Folders"
{
}
}
}
}
"{1525181F-901A-416C-8A58-119130FE478E}:_F871EA43D66E4C2C868D277F17AE8F52"
{
"Name" = "8:#1919"
"AlwaysCreate" = "11:FALSE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Property" = "8:ProgramMenuFolder"
"Folders"
{
}
}
}
"LaunchCondition"
{
}
"Locator"
{
}
"MsiBootstrapper"
{
"LangId" = "3:1041"
"RequiresElevation" = "11:FALSE"
}
"Product"
{
"Name" = "8:Microsoft Visual Studio"
"ProductName" = "8:MasterEditorTWL"
"ProductCode" = "8:{B12B5AFF-26D1-47B5-85B6-1E2A7B5106F5}"
"PackageCode" = "8:{2C68262E-3FD3-4145-BBE0-34E59802EF7F}"
"UpgradeCode" = "8:{CE22C209-7AE1-4F58-8F6B-6D044BA2A118}"
"RestartWWWService" = "11:FALSE"
"RemovePreviousVersions" = "11:FALSE"
"DetectNewerInstalledVersion" = "11:TRUE"
"InstallAllUsers" = "11:FALSE"
"ProductVersion" = "8:1.0.0"
"Manufacturer" = "8:nintendo"
"ARPHELPTELEPHONE" = "8:"
"ARPHELPLINK" = "8:"
"Title" = "8:MasterEditorTWLSetup"
"Subject" = "8:"
"ARPCONTACT" = "8:nintendo"
"Keywords" = "8:"
"ARPCOMMENTS" = "8:"
"ARPURLINFOABOUT" = "8:"
"ARPPRODUCTICON" = "8:"
"ARPIconIndex" = "3:0"
"SearchPath" = "8:"
"UseSystemSearchPath" = "11:TRUE"
"TargetPlatform" = "3:0"
"PreBuildEvent" = "8:"
"PostBuildEvent" = "8:"
"RunPostBuildEvent" = "3:0"
}
"Registry"
{
"HKLM"
{
"Keys"
{
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_DE3525327D5741C8B8F00223FB033E80"
{
"Name" = "8:Software"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:FALSE"
"Transitive" = "11:FALSE"
"Keys"
{
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_064E90E490674DEEA974094B5467A386"
{
"Name" = "8:[Manufacturer]"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:FALSE"
"Transitive" = "11:FALSE"
"Keys"
{
}
"Values"
{
}
}
}
"Values"
{
}
}
}
}
"HKCU"
{
"Keys"
{
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_E41443B9DF754797AA265044ED843A52"
{
"Name" = "8:Software"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:FALSE"
"Transitive" = "11:FALSE"
"Keys"
{
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_2BC1D936E6DC45A7A1BD166F48CE31C3"
{
"Name" = "8:[Manufacturer]"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:FALSE"
"Transitive" = "11:FALSE"
"Keys"
{
}
"Values"
{
}
}
}
"Values"
{
}
}
}
}
"HKCR"
{
"Keys"
{
}
}
"HKU"
{
"Keys"
{
}
}
"HKPU"
{
"Keys"
{
}
}
}
"Sequences"
{
}
"Shortcut"
{
"{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_1E9C816FBE5C44DC8A2649DF40760892"
{
"Name" = "8:MasterEditorTWL"
"Arguments" = "8:"
"Description" = "8:"
"ShowCmd" = "3:1"
"IconIndex" = "3:0"
"Transitive" = "11:FALSE"
"Target" = "8:_7746D2D347F0423FB46FA2300F6158A4"
"Folder" = "8:_511CA14EE892474E9A4F78537CA4FD5F"
"WorkingFolder" = "8:_1494B8B199184797B9C812877A4DFB7F"
"Icon" = "8:"
"Feature" = "8:"
}
}
"UserInterface"
{
"{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_4CCE54AD98074A3BBD623BDEC20B9752"
{
"UseDynamicProperties" = "11:FALSE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:<VsdDialogDir>\\VsdUserInterface.wim"
}
"{DF760B10-853B-4699-99F2-AFF7185B4A62}:_75F92E28CF004D259861A9FED348A478"
{
"Name" = "8:#1900"
"Sequence" = "3:1"
"Attributes" = "3:1"
"Dialogs"
{
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_03D0563E96ED4290A1F39B1089754E46"
{
"Sequence" = "3:200"
"DisplayName" = "8:インストール フォルダ"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:<VsdDialogDir>\\VsdFolderDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
"InstallAllUsersVisible"
{
"Name" = "8:InstallAllUsersVisible"
"DisplayName" = "8:#1059"
"Description" = "8:#1159"
"Type" = "3:5"
"ContextData" = "8:1;True=1;False=0"
"Attributes" = "3:0"
"Setting" = "3:0"
"Value" = "3:1"
"DefaultValue" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
}
}
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_15934606B52D491287A665833C86963C"
{
"Sequence" = "3:100"
"DisplayName" = "8:ようこそ"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:<VsdDialogDir>\\VsdWelcomeDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
"CopyrightWarning"
{
"Name" = "8:CopyrightWarning"
"DisplayName" = "8:#1002"
"Description" = "8:#1102"
"Type" = "3:3"
"ContextData" = "8:"
"Attributes" = "3:0"
"Setting" = "3:1"
"Value" = "8:#1202"
"DefaultValue" = "8:#1202"
"UsePlugInResources" = "11:TRUE"
}
"Welcome"
{
"Name" = "8:Welcome"
"DisplayName" = "8:#1003"
"Description" = "8:#1103"
"Type" = "3:3"
"ContextData" = "8:"
"Attributes" = "3:0"
"Setting" = "3:1"
"Value" = "8:#1203"
"DefaultValue" = "8:#1203"
"UsePlugInResources" = "11:TRUE"
}
}
}
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_C16356A19FD541E68225C5E34F2ACBD1"
{
"Sequence" = "3:300"
"DisplayName" = "8:インストールの確認"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:<VsdDialogDir>\\VsdConfirmDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
}
}
}
}
"{DF760B10-853B-4699-99F2-AFF7185B4A62}:_84553AE7657346C0BEFFACC6DEE8BA3E"
{
"Name" = "8:#1901"
"Sequence" = "3:2"
"Attributes" = "3:2"
"Dialogs"
{
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_46AE50DF1B9A458FA932AB9BDEB8C097"
{
"Sequence" = "3:100"
"DisplayName" = "8:進行状況"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:<VsdDialogDir>\\VsdAdminProgressDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
"ShowProgress"
{
"Name" = "8:ShowProgress"
"DisplayName" = "8:#1009"
"Description" = "8:#1109"
"Type" = "3:5"
"ContextData" = "8:1;True=1;False=0"
"Attributes" = "3:0"
"Setting" = "3:0"
"Value" = "3:1"
"DefaultValue" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
}
}
}
}
"{DF760B10-853B-4699-99F2-AFF7185B4A62}:_856D1D3282D44811B9EEF57A521CB8A0"
{
"Name" = "8:#1900"
"Sequence" = "3:2"
"Attributes" = "3:1"
"Dialogs"
{
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_0E61C8F6C89747558C33BD69BACE7158"
{
"Sequence" = "3:300"
"DisplayName" = "8:インストールの確認"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:<VsdDialogDir>\\VsdAdminConfirmDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
}
}
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_43EBFD558AA44619A26A25D5AE33C315"
{
"Sequence" = "3:100"
"DisplayName" = "8:ようこそ"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:<VsdDialogDir>\\VsdAdminWelcomeDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
"CopyrightWarning"
{
"Name" = "8:CopyrightWarning"
"DisplayName" = "8:#1002"
"Description" = "8:#1102"
"Type" = "3:3"
"ContextData" = "8:"
"Attributes" = "3:0"
"Setting" = "3:1"
"Value" = "8:#1202"
"DefaultValue" = "8:#1202"
"UsePlugInResources" = "11:TRUE"
}
"Welcome"
{
"Name" = "8:Welcome"
"DisplayName" = "8:#1003"
"Description" = "8:#1103"
"Type" = "3:3"
"ContextData" = "8:"
"Attributes" = "3:0"
"Setting" = "3:1"
"Value" = "8:#1203"
"DefaultValue" = "8:#1203"
"UsePlugInResources" = "11:TRUE"
}
}
}
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_D4B799BD07FD4AE5890E6319153B8CCF"
{
"Sequence" = "3:200"
"DisplayName" = "8:インストール フォルダ"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:<VsdDialogDir>\\VsdAdminFolderDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
}
}
}
}
"{DF760B10-853B-4699-99F2-AFF7185B4A62}:_95CC2394B4924E52BEF9CC6A51AA8BBF"
{
"Name" = "8:#1902"
"Sequence" = "3:1"
"Attributes" = "3:3"
"Dialogs"
{
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_F7EC3CF49FA04B88A1CBE0B6963F0875"
{
"Sequence" = "3:100"
"DisplayName" = "8:完了"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:<VsdDialogDir>\\VsdFinishedDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
"UpdateText"
{
"Name" = "8:UpdateText"
"DisplayName" = "8:#1058"
"Description" = "8:#1158"
"Type" = "3:15"
"ContextData" = "8:"
"Attributes" = "3:0"
"Setting" = "3:1"
"Value" = "8:#1258"
"DefaultValue" = "8:#1258"
"UsePlugInResources" = "11:TRUE"
}
}
}
}
}
"{DF760B10-853B-4699-99F2-AFF7185B4A62}:_A8FC0955E1E54111A186CB9467EF1132"
{
"Name" = "8:#1902"
"Sequence" = "3:2"
"Attributes" = "3:3"
"Dialogs"
{
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_28866486C3004ECAAF88E207A435EF0D"
{
"Sequence" = "3:100"
"DisplayName" = "8:完了"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:<VsdDialogDir>\\VsdAdminFinishedDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
}
}
}
}
"{DF760B10-853B-4699-99F2-AFF7185B4A62}:_DAB148986A654428A42E413FD4B68E8F"
{
"Name" = "8:#1901"
"Sequence" = "3:1"
"Attributes" = "3:2"
"Dialogs"
{
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_61716D98ACBB4CBCB78E425A1C6A4E53"
{
"Sequence" = "3:100"
"DisplayName" = "8:進行状況"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:<VsdDialogDir>\\VsdProgressDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
"ShowProgress"
{
"Name" = "8:ShowProgress"
"DisplayName" = "8:#1009"
"Description" = "8:#1109"
"Type" = "3:5"
"ContextData" = "8:1;True=1;False=0"
"Attributes" = "3:0"
"Setting" = "3:0"
"Value" = "3:1"
"DefaultValue" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
}
}
}
}
"{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_E0E8980863E24B64A2A4D12136B5027B"
{
"UseDynamicProperties" = "11:FALSE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:<VsdDialogDir>\\VsdBasicDialogs.wim"
}
}
"MergeModule"
{
}
"ProjectOutput"
{
"{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_7746D2D347F0423FB46FA2300F6158A4"
{
"SourcePath" = "8:..\\Release\\MasterEditorTWL.exe"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_1494B8B199184797B9C812877A4DFB7F"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
"ProjectOutputGroupRegister" = "3:1"
"OutputConfiguration" = "8:"
"OutputGroupCanonicalName" = "8:Built"
"OutputProjectGuid" = "8:{F8A4F8F7-A3BD-4DCA-B054-5FF8A09082F5}"
"ShowKeyOutput" = "11:TRUE"
"ExcludeFilters"
{
}
}
}
}
}

View File

@ -0,0 +1,73 @@
#! make -f
#---------------------------------------------------------------------------
# Project: TwlSDK - tools - makerom.TWL
# File: Makefile
#
# Copyright 2007 Nintendo. All rights reserved.
#
# These coded instructions, statements, and computer programs contain
# proprietary information of Nintendo of America Inc. and/or Nintendo
# Company Ltd., and are protected by Federal copyright law. They may
# not be disclosed to third parties or copied or duplicated in any form,
# in whole or in part, without the prior written consent of Nintendo.
#
# $Date:: $
# $Rev$
# $Author$
#---------------------------------------------------------------------------
TARGET_PLATFORM = TWL
#----------------------------------------------------------------------------
SUBDIRS =
include $(TWLSDK_ROOT)/build/buildtools/commondefs
#----------------------------------------------------------------------------
TARGET_LIB = libflags_x86.a
TARGETS = $(LIBDIR)/$(TARGET_LIB)
SRCS = flags.c
INCDIR = include \
../
OBJDIR = obj/X86
LIBDIR = lib/X86
MACROS += $(addprefix -I,$(INCDIR)) \
-DSTANDALONE \
-DOPT_32_BIT \
-DNO_SPLIT \
-DNO_FP_API \
-DNO_R_DIAG \
-DNO_STDIO_H \
-DNO_STDLIB_H
VPATH = $(SRCDIR) $(INCDIR)
OBJS = $(addprefix $(OBJDIR)/,$(SRCS:.c=.o))
#INSTALL_TARGETS = $(TARGETS)
#INSTALL_DIR = .
NEWDIRS = $(OBJDIR) $(LIBDIR)
LDIRT_CLEAN = $(OBJDIR) $(LIBDIR)
include $(TWLSDK_ROOT)/build/buildtools/modulerules.x86
#----------------------------------------------------------------------------
# build
#----------------------------------------------------------------------------
do-build: $(TARGETS)
$(TARGETS): $(OBJS)
$(AR_X86) $@ $(OBJS)
$(OBJS):%.o:
$(COMPILE_C)
$(OBJDIR)/flags.o: flags.c
#===== End of Makefile =====

View File

@ -0,0 +1,21 @@
/*---------------------------------------------------------------------------*
Project: TwlSDK - tools - makerom.TWL
File: acsign.c
Copyright 2007 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
Company Ltd., and are protected by Federal copyright law. They may
not be disclosed to third parties or copied or duplicated in any form,
in whole or in part, without the prior written consent of Nintendo.
$Date:: $
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#include "types.h"
BOOL DebugMode = TRUE;

View File

@ -0,0 +1,35 @@
/*---------------------------------------------------------------------------*
Project: TwlSDK - tools - makerom.TWL
File: types.h
Copyright 2007 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
Company Ltd., and are protected by Federal copyright law. They may
not be disclosed to third parties or copied or duplicated in any form,
in whole or in part, without the prior written consent of Nintendo.
$Date:: $
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef TYPES_H_
#define TYPES_H_
typedef enum
{
FALSE = 0,
TRUE = 1
}
BOOL;
typedef unsigned char u8;
typedef unsigned short int u16;
typedef unsigned long int u32;
typedef signed char s8;
typedef signed short int s16;
typedef signed long int s32;
#endif //TYPES_H_

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?>
<init>
<rw>w</rw>
<output>Sheet</output>
<sdk>RC</sdk>
</init>

File diff suppressed because it is too large Load Diff

Binary file not shown.