中国を除く全マルチリージョンに対応した特別版を追加。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlToolsRED@522 7061adef-622a-194b-ae81-725974e89856
This commit is contained in:
nishikawa_takeshi 2010-10-15 11:02:23 +00:00
parent bc6cd94f64
commit 5854ea91cd
104 changed files with 67861 additions and 0 deletions

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

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.9.*")];
[assembly:ComVisible(false)];
[assembly:CLSCompliantAttribute(true)];
[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)];

View File

@ -0,0 +1,556 @@
<?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>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="labRomSize.Location" type="System.Drawing.Point, System.Drawing">
<value>21, 165</value>
</data>
<data name="labRomSize.Size" type="System.Drawing.Size, System.Drawing">
<value>84, 15</value>
</data>
<data name="labRomSize.Text" xml:space="preserve">
<value>ROM Capacity</value>
</data>
<data name="cboxRemasterVerE.Size" type="System.Drawing.Size, System.Drawing">
<value>103, 19</value>
</data>
<data name="cboxRemasterVerE.Text" xml:space="preserve">
<value>E (Pre-Check)</value>
</data>
<data name="labRemasterVer.Location" type="System.Drawing.Point, System.Drawing">
<value>10, 193</value>
</data>
<data name="labBackup.Location" type="System.Drawing.Point, System.Drawing">
<value>9, 20</value>
</data>
<data name="labRomCRC.Location" type="System.Drawing.Point, System.Drawing">
<value>34, 54</value>
</data>
<data name="labHeaderCRC.Location" type="System.Drawing.Point, System.Drawing">
<value>26, 24</value>
</data>
<data name="labCaption.Size" type="System.Drawing.Size, System.Drawing">
<value>259, 15</value>
</data>
<data name="labCaption.Text" xml:space="preserve">
<value>Remarks - Enter any other related information.</value>
</data>
<data name="labPEGI_BBFC.Location" type="System.Drawing.Point, System.Drawing">
<value>2, 235</value>
</data>
<data name="labPEGI_BBFC.Size" type="System.Drawing.Size, System.Drawing">
<value>149, 15</value>
</data>
<data name="labPEGI_BBFC.Text" xml:space="preserve">
<value>PEGI (General) and BBFC</value>
</data>
<data name="labPEGI_PRT.Location" type="System.Drawing.Point, System.Drawing">
<value>67, 206</value>
</data>
<data name="labPEGI.Location" type="System.Drawing.Point, System.Drawing">
<value>61, 177</value>
</data>
<data name="labPEGI.Size" type="System.Drawing.Size, System.Drawing">
<value>90, 15</value>
</data>
<data name="labPEGI.Text" xml:space="preserve">
<value>PEGI (General)</value>
</data>
<data name="labUSK.Location" type="System.Drawing.Point, System.Drawing">
<value>101, 148</value>
</data>
<data name="labESRB.Location" type="System.Drawing.Point, System.Drawing">
<value>101, 119</value>
</data>
<data name="combPEGI_BBFC.Items1" xml:space="preserve">
<value>Ages 3 and up</value>
</data>
<data name="combPEGI_BBFC.Items2" xml:space="preserve">
<value>Ages 4 and up</value>
</data>
<data name="combPEGI_BBFC.Items3" xml:space="preserve">
<value>Ages 7 and up</value>
</data>
<data name="combPEGI_BBFC.Items4" xml:space="preserve">
<value>Ages 8 and up</value>
</data>
<data name="combPEGI_BBFC.Items5" xml:space="preserve">
<value>Ages 12 and up</value>
</data>
<data name="combPEGI_BBFC.Items6" xml:space="preserve">
<value>Ages 15 and up</value>
</data>
<data name="combPEGI_BBFC.Items7" xml:space="preserve">
<value>Ages 16 and up</value>
</data>
<data name="combPEGI_BBFC.Items8" xml:space="preserve">
<value>Ages 18 and up</value>
</data>
<data name="combPEGI_PRT.Items1" xml:space="preserve">
<value>Ages 4 and up</value>
</data>
<data name="combPEGI_PRT.Items2" xml:space="preserve">
<value>Ages 6 and up</value>
</data>
<data name="combPEGI_PRT.Items3" xml:space="preserve">
<value>Ages 12 and up</value>
</data>
<data name="combPEGI_PRT.Items4" xml:space="preserve">
<value>Ages 16 and up</value>
</data>
<data name="combPEGI_PRT.Items5" xml:space="preserve">
<value>Ages 18 and up</value>
</data>
<data name="combPEGI.Items1" xml:space="preserve">
<value>Ages 3 and up</value>
</data>
<data name="combPEGI.Items2" xml:space="preserve">
<value>Ages 7 and up</value>
</data>
<data name="combPEGI.Items3" xml:space="preserve">
<value>Ages 12 and up</value>
</data>
<data name="combPEGI.Items4" xml:space="preserve">
<value>Ages 16 and up</value>
</data>
<data name="combPEGI.Items5" xml:space="preserve">
<value>Ages 18 and up</value>
</data>
<data name="combUSK.Items1" xml:space="preserve">
<value>Ages 6 and up</value>
</data>
<data name="combUSK.Items2" xml:space="preserve">
<value>Ages 12 and up</value>
</data>
<data name="combUSK.Items3" xml:space="preserve">
<value>Ages 16 and up</value>
</data>
<data name="combUSK.Items4" xml:space="preserve">
<value>Not appropriate for children</value>
</data>
<data name="combESRB.Items1" xml:space="preserve">
<value>EC (Ages 3 and up)</value>
</data>
<data name="combESRB.Items2" xml:space="preserve">
<value>E (Ages 6 and up)</value>
</data>
<data name="combESRB.Items3" xml:space="preserve">
<value>E10+ (Ages 10 and up)</value>
</data>
<data name="combESRB.Items4" xml:space="preserve">
<value>T (Ages 13 and up)</value>
</data>
<data name="combESRB.Items5" xml:space="preserve">
<value>M (Ages 17 and up)</value>
</data>
<data name="combCERO.Items1" xml:space="preserve">
<value>B (Ages 12 and up)</value>
</data>
<data name="combCERO.Items2" xml:space="preserve">
<value>C (Ages 15 and up)</value>
</data>
<data name="combCERO.Items3" xml:space="preserve">
<value>D (Ages 17 and up)</value>
</data>
<data name="combCERO.Items4" xml:space="preserve">
<value>Z (Ages 18 and up)</value>
</data>
<data name="labRegion.Location" type="System.Drawing.Point, System.Drawing">
<value>102, 24</value>
</data>
<data name="combRegion.Items" xml:space="preserve">
<value>Japan only</value>
</data>
<data name="combRegion.Items1" xml:space="preserve">
<value>USA only</value>
</data>
<data name="combRegion.Items2" xml:space="preserve">
<value>Europe only</value>
</data>
<data name="combRegion.Items3" xml:space="preserve">
<value>Australia only</value>
</data>
<data name="combRegion.Items5" xml:space="preserve">
<value>USA and Australia</value>
</data>
<data name="combRegion.Items6" xml:space="preserve">
<value>USA, Europe, and Australia</value>
</data>
<data name="cboxIsInputPerson2.Size" type="System.Drawing.Size, System.Drawing">
<value>165, 19</value>
</data>
<data name="cboxIsInputPerson2.Text" xml:space="preserve">
<value>Enter Contact 2 (optional)</value>
</data>
<data name="labArbit4.Size" type="System.Drawing.Size, System.Drawing">
<value>61, 15</value>
</data>
<data name="labArbit4.Text" xml:space="preserve">
<value>(Optional)</value>
</data>
<data name="labArbit3.Size" type="System.Drawing.Size, System.Drawing">
<value>61, 15</value>
</data>
<data name="labArbit3.Text" xml:space="preserve">
<value>(Optional)</value>
</data>
<data name="gboxPerson2.Text" xml:space="preserve">
<value>Contact 2</value>
</data>
<data name="labArbit2.Size" type="System.Drawing.Size, System.Drawing">
<value>61, 15</value>
</data>
<data name="labArbit2.Text" xml:space="preserve">
<value>(Optional)</value>
</data>
<data name="labArbit1.Size" type="System.Drawing.Size, System.Drawing">
<value>61, 15</value>
</data>
<data name="labArbit1.Text" xml:space="preserve">
<value>(Optional)</value>
</data>
<data name="gboxPerson1.Text" xml:space="preserve">
<value>Contact 1</value>
</data>
<data name="rSubmitHand.Size" type="System.Drawing.Size, System.Drawing">
<value>71, 19</value>
</data>
<data name="rSubmitHand.Text" xml:space="preserve">
<value>By Hand</value>
</data>
<data name="gboxSubmitWay.Text" xml:space="preserve">
<value>Submission Method</value>
</data>
<data name="labCapSubmitVer.Size" type="System.Drawing.Size, System.Drawing">
<value>241, 14</value>
</data>
<data name="labCapSubmitVer.Text" xml:space="preserve">
<value>* Reset to 0 when a new master ROM is created</value>
</data>
<data name="labSubmitVer.Location" type="System.Drawing.Point, System.Drawing">
<value>13, 177</value>
</data>
<data name="labMultiForeign1.Size" type="System.Drawing.Size, System.Drawing">
<value>122, 15</value>
</data>
<data name="labMultiForeign1.Text" xml:space="preserve">
<value>(When for &gt;1 market)</value>
</data>
<data name="cboxReleaseForeign.Size" type="System.Drawing.Size, System.Drawing">
<value>229, 19</value>
</data>
<data name="cboxReleaseForeign.Text" xml:space="preserve">
<value>Foreign version is scheduled for sale</value>
</data>
<data name="labProductNameForeign.Location" type="System.Drawing.Point, System.Drawing">
<value>9, 48</value>
</data>
<data name="labProductCodeForeign.Location" type="System.Drawing.Point, System.Drawing">
<value>9, 83</value>
</data>
<data name="cboxIsShared2.Size" type="System.Drawing.Size, System.Drawing">
<value>138, 19</value>
</data>
<data name="cboxIsShared2.Text" xml:space="preserve">
<value>Use of Shared 2 File</value>
</data>
<data name="gboxShared2Size.Text" xml:space="preserve">
<value>Shared 2 File Size</value>
</data>
<data name="labIsCodec.Location" type="System.Drawing.Point, System.Drawing">
<value>98, 26</value>
</data>
<data name="labKeyTableRomOffset.Location" type="System.Drawing.Point, System.Drawing">
<value>13, 58</value>
</data>
<data name="labPrivateSize.Location" type="System.Drawing.Point, System.Drawing">
<value>41, 100</value>
</data>
<data name="labPublicSize.Location" type="System.Drawing.Point, System.Drawing">
<value>41, 73</value>
</data>
<data name="labAccessOther.Size" type="System.Drawing.Size, System.Drawing">
<value>37, 15</value>
</data>
<data name="labAccessOther.Text" xml:space="preserve">
<value>Other</value>
</data>
<data name="labTitleIDHi.Location" type="System.Drawing.Point, System.Drawing">
<value>37, 56</value>
</data>
<data name="gboxProd.Text" xml:space="preserve">
<value>ROM Submission Information</value>
</data>
<data name="stripItemOpenRom.Size" type="System.Drawing.Size, System.Drawing">
<value>260, 22</value>
</data>
<data name="stripItemSepFile1.Size" type="System.Drawing.Size, System.Drawing">
<value>257, 6</value>
</data>
<data name="stripItemSaveTemp.Size" type="System.Drawing.Size, System.Drawing">
<value>260, 22</value>
</data>
<data name="stripItemSaveTemp.Text" xml:space="preserve">
<value>Save submission data to temp file</value>
</data>
<data name="stripItemLoadTemp.Size" type="System.Drawing.Size, System.Drawing">
<value>260, 22</value>
</data>
<data name="stripItemLoadTemp.Text" xml:space="preserve">
<value>Load saved submission data</value>
</data>
<data name="stripItemSheet.Size" type="System.Drawing.Size, System.Drawing">
<value>304, 22</value>
</data>
<data name="stripItemSheet.Text" xml:space="preserve">
<value>Create submission data set</value>
</data>
<data name="stripItemSepMaster1.Size" type="System.Drawing.Size, System.Drawing">
<value>301, 6</value>
</data>
<data name="stripItemMasterRom.Size" type="System.Drawing.Size, System.Drawing">
<value>304, 22</value>
</data>
<data name="stripItemMasterRom.Text" xml:space="preserve">
<value>Create master ROM only</value>
</data>
<data name="stripItemMiddlewareXml.Size" type="System.Drawing.Size, System.Drawing">
<value>304, 22</value>
</data>
<data name="stripItemMiddlewareXml.Text" xml:space="preserve">
<value>Create middleware list only (XML format)</value>
</data>
<data name="stripItemMiddlewareHtml.Size" type="System.Drawing.Size, System.Drawing">
<value>304, 22</value>
</data>
<data name="stripItemMiddlewareHtml.Text" xml:space="preserve">
<value>Create middleware list only (HTML format)</value>
</data>
<data name="labConnectIcon.Size" type="System.Drawing.Size, System.Drawing">
<value>213, 15</value>
</data>
<data name="labConnectIcon.Text" xml:space="preserve">
<value>Display Connection Icon on DSi Menu</value>
</data>
<data name="gboxLaunch.Text" xml:space="preserve">
<value>Launch Control on DSi Menu</value>
</data>
<data name="tboxGuideNandSizeInfo.Text" xml:space="preserve">
<value>Information on this tab is required to confirm the amount of space a given Nintendo DSiWare title (NAND application) uses in the system memory. &lt;newline&gt;If the media of the application is a Game Card, there is no need to check the amount of system memory used.</value>
</data>
<data name="labNandSize.Location" type="System.Drawing.Point, System.Drawing">
<value>174, 23</value>
</data>
<data name="labNandSize.Size" type="System.Drawing.Size, System.Drawing">
<value>119, 15</value>
</data>
<data name="labNandSize.Text" xml:space="preserve">
<value>Original Size in ROM</value>
</data>
<data name="labNandSizeFS.Location" type="System.Drawing.Point, System.Drawing">
<value>308, 23</value>
</data>
<data name="labSrlSize.Location" type="System.Drawing.Point, System.Drawing">
<value>45, 46</value>
</data>
<data name="labSumSize2.Location" type="System.Drawing.Point, System.Drawing">
<value>161, 228</value>
</data>
<data name="labSumSize.Location" type="System.Drawing.Point, System.Drawing">
<value>214, 211</value>
</data>
<data name="labSubBannerSize.Location" type="System.Drawing.Point, System.Drawing">
<value>42, 127</value>
</data>
<data name="gboxNandSize.Text" xml:space="preserve">
<value>Amount of System NAND Memory Used by DSiWare Application</value>
</data>
<data name="cboxIsUGC.Size" type="System.Drawing.Size, System.Drawing">
<value>244, 19</value>
</data>
<data name="cboxIsUGC.Text" xml:space="preserve">
<value>UGC (User Generated Content) Support</value>
</data>
<data name="gboxOtherSpec.Text" xml:space="preserve">
<value>Other ROM Specifications</value>
</data>
<data name="butSetBack.Text" xml:space="preserve">
<value>Restore Initial Settings</value>
</data>
<data name="tboxGuideRomEditInfo.Text" xml:space="preserve">
<value>You must complete all items on this tab to create a submission checklist and Master ROM. &lt;newline&gt;This information is used as ROM registration data when the Master ROM is created (excluding "Other ROM Specifications").</value>
</data>
<data name="combGRB.Items" xml:space="preserve">
<value>All</value>
</data>
<data name="combGRB.Items1" xml:space="preserve">
<value>12-year+</value>
</data>
<data name="combGRB.Items2" xml:space="preserve">
<value>15-year+</value>
</data>
<data name="combGRB.Items3" xml:space="preserve">
<value>Teenager restricted</value>
</data>
<data name="cboxIsUnnecessaryRating.Size" type="System.Drawing.Size, System.Drawing">
<value>207, 19</value>
</data>
<data name="cboxIsUnnecessaryRating.Text" xml:space="preserve">
<value>Rating Not Required (Tools Only)</value>
</data>
<data name="gboxParental.Text" xml:space="preserve">
<value>Market and Rating Information</value>
</data>
<data name="labMultiForeign2.Size" type="System.Drawing.Size, System.Drawing">
<value>122, 15</value>
</data>
<data name="labMultiForeign2.Text" xml:space="preserve">
<value>(When for &gt;1 market)</value>
</data>
<data name="gboxForeign.Text" xml:space="preserve">
<value>Foreign Version</value>
</data>
<data name="tboxGuideCompanyInfo.Text" xml:space="preserve">
<value>You must complete all items on this tab to create a submission checklist. Enter all information.</value>
</data>
<data name="tboxGuideErrorInfo.Text" xml:space="preserve">
<value>This tab lists problems in the ROM data file and editing mistakes made when using this program. &lt;newline&gt;Items in red cannot be corrected using this program. You must modify the ROM build settings. &lt;newline&gt;Items in blue indicate problems with the ROM data that can be can corrected using this program. &lt;newline&gt;Items in black indicate errors or omissions in the Submission Info and Company Info tabs.</value>
</data>
<data name="gboxErrorTiming.Text" xml:space="preserve">
<value>Display Information From</value>
</data>
<data name="labError.Size" type="System.Drawing.Size, System.Drawing">
<value>175, 15</value>
</data>
<data name="labError.Text" xml:space="preserve">
<value>Error (Modification is required.)</value>
</data>
<data name="colWarnName.HeaderText" xml:space="preserve">
<value>Item Name</value>
</data>
<data name="colWarnBegin.HeaderText" xml:space="preserve">
<value>Start</value>
</data>
<data name="colErrorName.HeaderText" xml:space="preserve">
<value>Item Name</value>
</data>
<data name="colErrorBegin.HeaderText" xml:space="preserve">
<value>Start</value>
</data>
</root>

View File

@ -0,0 +1,26 @@
#pragma once
namespace MasterEditorTWL {
// -------------------------------------------------------------------
// Type : enum class
// Name : ECFormResult
//
// Description : フォーム上のエラーを宣言
// -------------------------------------------------------------------
enum class ECFormResult
{
NOERROR = 0,
// 特定の必要がない雑多なエラー
ERROR,
// ファイル操作
ERROR_FILE_OPEN,
ERROR_FILE_READ,
ERROR_FILE_WRITE,
ERROR_FILE_COPY,
ERROR_FILE_EXIST,
ERROR_FILE_SIGN, // ファイルに署名がつけられなかった
}; //enum class ECFormResult
} // end of namespace MasterEditorTWL

View File

@ -0,0 +1,3 @@
#include "StdAfx.h"
#include "FormError.h"

View File

@ -0,0 +1,377 @@
#pragma once
#include <apptype.h>
#include "common.h"
#include "srl.h"
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
namespace MasterEditorTWL {
/// <summary>
/// FormError の概要
///
/// 警告: このクラスの名前を変更する場合、このクラスが依存するすべての .resx ファイルに関連付けられた
/// マネージ リソース コンパイラ ツールに対して 'Resource File Name' プロパティを
/// 変更する必要があります。この変更を行わないと、
/// デザイナと、このフォームに関連付けられたローカライズ済みリソースとが、
/// 正しく相互に利用できなくなります。
/// </summary>
public ref class FormError : public System::Windows::Forms::Form
{
public:
FormError(void)
{
InitializeComponent();
//
//TODO: ここにコンストラクタ コードを追加します
//
}
protected:
/// <summary>
/// 使用中のリソースをすべてクリーンアップします。
/// </summary>
~FormError()
{
if (components)
{
delete components;
}
}
public: System::Windows::Forms::DataGridView^ gridError;
protected:
protected:
private: System::Windows::Forms::Label^ labError;
public: System::Windows::Forms::DataGridView^ gridWarn;
private:
public:
private: System::Windows::Forms::DataGridViewTextBoxColumn^ colWarnName;
private: System::Windows::Forms::DataGridViewTextBoxColumn^ colWarnBegin;
private: System::Windows::Forms::DataGridViewTextBoxColumn^ colWarnEnd;
private: System::Windows::Forms::DataGridViewTextBoxColumn^ colWarnCause;
private: System::Windows::Forms::Label^ labWarn;
private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorName;
private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorBegin;
private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorEnd;
private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause;
private: System::Windows::Forms::Button^ butClose;
private:
public:
protected:
private:
/// <summary>
/// 必要なデザイナ変数です。
/// </summary>
System::ComponentModel::Container ^components;
#pragma region Windows Form Designer generated code
/// <summary>
/// デザイナ サポートに必要なメソッドです。このメソッドの内容を
/// コード エディタで変更しないでください。
/// </summary>
void InitializeComponent(void)
{
this->gridError = (gcnew System::Windows::Forms::DataGridView());
this->colErrorName = (gcnew System::Windows::Forms::DataGridViewTextBoxColumn());
this->colErrorBegin = (gcnew System::Windows::Forms::DataGridViewTextBoxColumn());
this->colErrorEnd = (gcnew System::Windows::Forms::DataGridViewTextBoxColumn());
this->colErrorCause = (gcnew System::Windows::Forms::DataGridViewTextBoxColumn());
this->labError = (gcnew System::Windows::Forms::Label());
this->gridWarn = (gcnew System::Windows::Forms::DataGridView());
this->colWarnName = (gcnew System::Windows::Forms::DataGridViewTextBoxColumn());
this->colWarnBegin = (gcnew System::Windows::Forms::DataGridViewTextBoxColumn());
this->colWarnEnd = (gcnew System::Windows::Forms::DataGridViewTextBoxColumn());
this->colWarnCause = (gcnew System::Windows::Forms::DataGridViewTextBoxColumn());
this->labWarn = (gcnew System::Windows::Forms::Label());
this->butClose = (gcnew System::Windows::Forms::Button());
(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->gridError))->BeginInit();
(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->gridWarn))->BeginInit();
this->SuspendLayout();
//
// gridError
//
this->gridError->BackgroundColor = System::Drawing::SystemColors::Control;
this->gridError->ColumnHeadersHeightSizeMode = System::Windows::Forms::DataGridViewColumnHeadersHeightSizeMode::AutoSize;
this->gridError->Columns->AddRange(gcnew cli::array< System::Windows::Forms::DataGridViewColumn^ >(4) {this->colErrorName,
this->colErrorBegin, this->colErrorEnd, this->colErrorCause});
this->gridError->GridColor = System::Drawing::SystemColors::Control;
this->gridError->Location = System::Drawing::Point(28, 36);
this->gridError->Name = L"gridError";
this->gridError->ReadOnly = true;
this->gridError->RowHeadersVisible = false;
this->gridError->RowTemplate->Height = 21;
this->gridError->Size = System::Drawing::Size(661, 172);
this->gridError->TabIndex = 0;
//
// colErrorName
//
this->colErrorName->HeaderText = L"項目名";
this->colErrorName->Name = L"colErrorName";
this->colErrorName->ReadOnly = true;
this->colErrorName->Width = 150;
//
// colErrorBegin
//
this->colErrorBegin->HeaderText = L"開始";
this->colErrorBegin->Name = L"colErrorBegin";
this->colErrorBegin->ReadOnly = true;
this->colErrorBegin->Width = 60;
//
// colErrorEnd
//
this->colErrorEnd->HeaderText = L"終了";
this->colErrorEnd->Name = L"colErrorEnd";
this->colErrorEnd->ReadOnly = true;
this->colErrorEnd->Width = 60;
//
// colErrorCause
//
this->colErrorCause->AutoSizeMode = System::Windows::Forms::DataGridViewAutoSizeColumnMode::Fill;
this->colErrorCause->HeaderText = L"要因";
this->colErrorCause->Name = L"colErrorCause";
this->colErrorCause->ReadOnly = true;
//
// labError
//
this->labError->AutoSize = true;
this->labError->ForeColor = System::Drawing::SystemColors::ActiveCaption;
this->labError->Location = System::Drawing::Point(26, 21);
this->labError->Name = L"labError";
this->labError->Size = System::Drawing::Size(137, 12);
this->labError->TabIndex = 1;
this->labError->Text = L"エラー(必ず修正してください)";
//
// gridWarn
//
this->gridWarn->BackgroundColor = System::Drawing::SystemColors::Control;
this->gridWarn->ColumnHeadersHeightSizeMode = System::Windows::Forms::DataGridViewColumnHeadersHeightSizeMode::AutoSize;
this->gridWarn->Columns->AddRange(gcnew cli::array< System::Windows::Forms::DataGridViewColumn^ >(4) {this->colWarnName,
this->colWarnBegin, this->colWarnEnd, this->colWarnCause});
this->gridWarn->GridColor = System::Drawing::SystemColors::Control;
this->gridWarn->Location = System::Drawing::Point(28, 245);
this->gridWarn->Name = L"gridWarn";
this->gridWarn->ReadOnly = true;
this->gridWarn->RowHeadersVisible = false;
this->gridWarn->RowTemplate->Height = 21;
this->gridWarn->Size = System::Drawing::Size(661, 172);
this->gridWarn->TabIndex = 2;
//
// colWarnName
//
this->colWarnName->HeaderText = L"項目名";
this->colWarnName->Name = L"colWarnName";
this->colWarnName->ReadOnly = true;
this->colWarnName->Width = 150;
//
// colWarnBegin
//
this->colWarnBegin->HeaderText = L"開始";
this->colWarnBegin->Name = L"colWarnBegin";
this->colWarnBegin->ReadOnly = true;
this->colWarnBegin->Width = 60;
//
// colWarnEnd
//
this->colWarnEnd->HeaderText = L"終了";
this->colWarnEnd->Name = L"colWarnEnd";
this->colWarnEnd->ReadOnly = true;
this->colWarnEnd->Width = 60;
//
// colWarnCause
//
this->colWarnCause->AutoSizeMode = System::Windows::Forms::DataGridViewAutoSizeColumnMode::Fill;
this->colWarnCause->HeaderText = L"要因";
this->colWarnCause->Name = L"colWarnCause";
this->colWarnCause->ReadOnly = true;
//
// labWarn
//
this->labWarn->AutoSize = true;
this->labWarn->ForeColor = System::Drawing::SystemColors::ActiveCaption;
this->labWarn->Location = System::Drawing::Point(26, 230);
this->labWarn->Name = L"labWarn";
this->labWarn->Size = System::Drawing::Size(331, 12);
this->labWarn->TabIndex = 3;
this->labWarn->Text = L"警告(修正は必須ではありませんが情報に誤りがないかご確認ください)";
//
// butClose
//
this->butClose->Location = System::Drawing::Point(557, 429);
this->butClose->Name = L"butClose";
this->butClose->Size = System::Drawing::Size(132, 23);
this->butClose->TabIndex = 4;
this->butClose->Text = L"閉じる";
this->butClose->UseVisualStyleBackColor = true;
this->butClose->Click += gcnew System::EventHandler(this, &FormError::butClose_Click);
//
// FormError
//
this->AutoScaleDimensions = System::Drawing::SizeF(6, 12);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(722, 464);
this->Controls->Add(this->butClose);
this->Controls->Add(this->labWarn);
this->Controls->Add(this->gridWarn);
this->Controls->Add(this->labError);
this->Controls->Add(this->gridError);
this->Name = L"FormError";
this->Text = L"Error Information";
(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->gridError))->EndInit();
(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->gridWarn))->EndInit();
this->ResumeLayout(false);
this->PerformLayout();
}
#pragma endregion
// --------------------------------------------------------
// エラー情報の登録
// --------------------------------------------------------
public:
void setGridError( System::Collections::Generic::List<RCMrcError ^> ^list, System::Boolean isJapanese )
{
this->gridError->Rows->Clear();
if( list != nullptr )
{
for each( RCMrcError ^err in list )
{
this->gridError->Rows->Add( err->getAll( isJapanese ) );
}
}
}
void setGridWarn( System::Collections::Generic::List<RCMrcError ^> ^list, System::Boolean isJapanese )
{
this->gridWarn->Rows->Clear();
if( list != nullptr )
{
for each( RCMrcError ^err in list )
{
this->gridWarn->Rows->Add( err->getAll( isJapanese ) );
}
}
}
// --------------------------------------------------------
// エラー情報の重ね合わせ
// --------------------------------------------------------
public:
void overloadGridError(
System::Collections::Generic::List<RCMrcError ^> ^listLo,
System::Collections::Generic::List<RCMrcError ^> ^listHi, System::Boolean isJapanese )
{
// listLoの修正可能な情報をlistHiで上書きする(listHiは修正可能な情報のみであることが前提)
this->gridError->Rows->Clear();
if( listLo != nullptr )
{
for each( RCMrcError ^err in listLo )
{
if( !err->IsEnableModify ) // 修正可能な情報は表示しない
this->gridError->Rows->Add( err->getAll( isJapanese ) );
}
}
if( listHi != nullptr )
{
for each( RCMrcError ^err in listHi )
{
this->gridError->Rows->Add( err->getAll( isJapanese ) );
}
}
}
void overloadGridWarn(
System::Collections::Generic::List<RCMrcError ^> ^listLo,
System::Collections::Generic::List<RCMrcError ^> ^listHi, System::Boolean isJapanese )
{
// listLoの修正可能な情報をlistHiで上書きする(listHiは修正可能な情報のみであることが前提)
this->gridWarn->Rows->Clear();
if( listLo != nullptr )
{
for each( RCMrcError ^err in listLo )
{
if( !err->IsEnableModify ) // 修正可能な情報は表示しない
this->gridWarn->Rows->Add( err->getAll( isJapanese ) );
}
}
if( listHi != nullptr )
{
for each( RCMrcError ^err in listHi )
{
this->gridWarn->Rows->Add( err->getAll( isJapanese ) );
}
}
}
// --------------------------------------------------------
// 言語対応
// --------------------------------------------------------
public:
void changeJapanese(void)
{
this->labError->Text = gcnew System::String( "エラー(必ず修正してください。)" );
this->colErrorName->HeaderText = gcnew System::String( "項目名" );
this->colErrorBegin->HeaderText = gcnew System::String( "開始" );
this->colErrorEnd->HeaderText = gcnew System::String( "終了" );
this->colErrorCause->HeaderText = gcnew System::String( "要因" );
this->labWarn->Text = gcnew System::String( "警告(修正は必須ではありませんが情報に誤りがないかご確認ください。)" );
this->colWarnName->HeaderText = gcnew System::String( "項目名" );
this->colWarnBegin->HeaderText = gcnew System::String( "開始" );
this->colWarnEnd->HeaderText = gcnew System::String( "終了" );
this->colWarnCause->HeaderText = gcnew System::String( "要因" );
this->butClose->Text = gcnew System::String( "閉じる" );
}
public:
void changeEnglish(void)
{
this->labError->Text = gcnew System::String( "Error Information(Modification is necessary.)" );
this->colErrorName->HeaderText = gcnew System::String( "Name" );
this->colErrorBegin->HeaderText = gcnew System::String( "Begin" );
this->colErrorEnd->HeaderText = gcnew System::String( "End" );
this->colErrorCause->HeaderText = gcnew System::String( "Reason" );
this->labWarn->Text = gcnew System::String( "Warning(Modification is not necessary. Please check validity of these information.)" );
this->colWarnName->HeaderText = gcnew System::String( "Name" );
this->colWarnBegin->HeaderText = gcnew System::String( "Begin" );
this->colWarnEnd->HeaderText = gcnew System::String( "End" );
this->colWarnCause->HeaderText = gcnew System::String( "Reason" );
this->butClose->Text = gcnew System::String( "Close window" );
}
private:
System::Void butClose_Click(System::Object^ sender, System::EventArgs^ e)
{
this->Close();
}
};
}

View File

@ -0,0 +1,144 @@
<?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>
<metadata name="colErrorName.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colErrorBegin.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colErrorEnd.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colErrorCause.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colWarnName.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colWarnBegin.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colWarnEnd.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colWarnCause.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>

View File

@ -0,0 +1,180 @@
// ----------------------------------------------
// 初期処理 / 終了処理
// ----------------------------------------------
#include "stdafx.h"
#include <apptype.h>
#include "common.h"
#include "srl.h"
#include "deliverable.h"
#include "crc_whole.h"
#include "utility.h"
#include "lang.h"
#include "FormError.h"
#include "Form1.h"
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace MasterEditorTWL;
// ----------------------------------------------
// コンストラクタから呼ばれる初期処理
// ----------------------------------------------
void Form1::construct(void)
{
// 言語切り替えで一時的にカルチャを変更するのでデフォルトのカルチャを取得して戻せるようにしておく
// これを取得しておかないとエラーメッセージを出せないので一番最初に取得しておく
this->hDefaultCultureName = System::Threading::Thread::CurrentThread->CurrentUICulture->Name;
// フィールド初期化
this->hSrl = gcnew RCSrl( this->getMrcMessageFileJ(), this->getMrcMessageFileE() );
this->hDeliv = gcnew RCDeliverable;
this->IsLoadTad = false;
this->hErrorList = gcnew System::Collections::Generic::List<RCMrcError^>();
this->hErrorList->Clear();
this->hWarnList = gcnew System::Collections::Generic::List<RCMrcError^>();
this->hWarnList->Clear();
this->IsCheckedUGC = false;
this->IsCheckedPhotoEx = false;
this->IsSpreadSheet = true;
this->IsReadOnly = false;
this->SizeGboxExFlags = this->gboxExFlags->Size;
this->hMsg = gcnew RCMessageBank( this->getGuiMessageFileJ(), this->getGuiMessageFileE() );
this->hMiddlewareNameList = gcnew RCMiddlewareNameList( this->getMiddlewareNameListFile() );
// バージョン情報を表示
//this->labAssemblyVersion->Text = System::Windows::Forms::Application::ProductVersion;
System::Reflection::Assembly ^ass = System::Reflection::Assembly::GetEntryAssembly();
this->labAssemblyVersion->Text = "ver." + this->getVersion();
// TAD読み込みの際に作成される一時ファイルと同名ファイルがあった場合には削除してよいか確認
//System::Diagnostics::Debug::WriteLine( this->getSplitTadTmpFile() );
if( System::IO::File::Exists( this->getSplitTadTmpFile() ) )
{
this->sucMsg( "E_Start_TmpExist" );
System::IO::File::Delete( this->getSplitTadTmpFile() );
}
// 日付フォームの初期設定を現在の時刻にする
this->dateRelease->Value = System::DateTime::Now;
this->dateSubmit->Value = System::DateTime::Now;
// システム版のときにはリージョンに全リージョンの項目を追加
#if defined(METWL_VER_APPTYPE_SYSTEM) || defined(METWL_VER_APPTYPE_SECURE) || defined(METWL_VER_APPTYPE_LAUNCHER)
this->combRegion->Items->Add( gcnew System::String( L"全リージョン" ) );
#endif
// アプリ種別をつける
System::String ^appstr = nullptr;
#ifdef METWL_VER_APPTYPE_LAUNCHER
appstr += "Launcher/";
#endif
#ifdef METWL_VER_APPTYPE_SECURE
appstr += "Secure/";
#endif
#ifdef METWL_VER_APPTYPE_SYSTEM
appstr += "System/";
#endif
if( appstr != nullptr)
{
this->Text += " [ Supported App: " + appstr + "User ]";
}
// 複数行表示の改行を挿入
this->tboxGuideRomEditInfo->Text = this->tboxGuideRomEditInfo->Text->Replace( "<newline>", "\r\n" );
this->tboxGuideNandSizeInfo->Text = this->tboxGuideNandSizeInfo->Text->Replace( "<newline>", "\r\n" );
this->tboxGuideErrorInfo->Text = this->tboxGuideErrorInfo->Text->Replace( "<newline>", "\r\n" );
// システムの言語バージョンにあわせて言語切り替え
if( this->hDefaultCultureName->StartsWith( "ja" ) )
{
this->stripItemJapanese->Checked = true;
this->stripItemEnglish->Checked = false;
this->changeFormInput("ja");
// 用途の"Internet"を選択不可にする
this->rSubmitInternet->Enabled = false;
this->rSubmitInternet->Visible = false;
}
else
{
this->stripItemJapanese->Checked = false;
//this->stripItemJapanese->Enabled = false; // 日本語を選択できなくする
this->stripItemEnglish->Checked = true;
this->changeEnglish();
}
// 非公開情報を非表示にする
this->changeVisibleForms( false );
// 設定ファイルの読み込み
this->loadInit();
this->loadAppendInit(); // 追加設定ファイル
// 引数処理
this->handleArgs();
//System::Diagnostics::Debug::WriteLine( "constructed" );
// 会社情報の自動読み出し
this->loadCompany( this->getCompanyInfoFile() );
}
// ----------------------------------------------
// デストラクタから呼ばれる終了処理
// ----------------------------------------------
void Form1::destruct(void)
{
// 会社情報の自動保存
this->saveCompany( this->getCompanyInfoFile() );
// TAD読み出しの際に作成される一時SRLファイルを削除(書き出しをせずに終了したときに起こりうる)
System::String ^srlfile = this->getSplitTadTmpFile();
if( System::IO::File::Exists( srlfile ) )
{
System::IO::File::Delete( srlfile ); // すでに存在する場合は削除
}
}
// ----------------------------------------------
// コマンドライン引数処理
// ----------------------------------------------
void Form1::handleArgs(void)
{
cli::array<System::String^> ^args = System::Environment::GetCommandLineArgs();
if( args->Length < 2 )
{
return;
}
// 引数でsrlが指定されているときは読み込む
System::String ^romfile = args[1];
if( !this->loadRom( romfile ) )
{
return;
}
System::String ^rompath;
if( System::IO::Path::IsPathRooted( romfile ) ) // 絶対パスのときはそのまま表示
{
rompath = romfile;
}
else
{
// 表示のために絶対パスに変換
System::String ^currdir = System::Environment::CurrentDirectory;
if( !currdir->EndsWith( "\\" ) )
{
currdir = currdir + "\\";
}
rompath = romfile->Replace( '/', '\\' );
rompath = currdir + rompath;
}
this->tboxFile->Text = rompath;
this->clearOtherForms();
}

View File

@ -0,0 +1,404 @@
// ----------------------------------------------
// マスタ書類情報(SRL影響なし)をフォームから取得
// ----------------------------------------------
#include "stdafx.h"
#include <apptype.h>
#include "common.h"
#include "srl.h"
#include "deliverable.h"
#include "crc_whole.h"
#include "utility.h"
#include "lang.h"
#include "FormError.h"
#include "Form1.h"
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace MasterEditorTWL;
// ----------------------------------------------
// [sheet <= Form]
// 提出確認書にフォームを反映
// ----------------------------------------------
void Form1::setDeliverableProperties(void)
{
// プログラムのバージョン
this->hDeliv->hMasterEditorVersion = this->getVersion();
// 提出情報
this->hDeliv->hProductName = this->tboxProductName->Text;
this->hDeliv->hProductCode1 = this->tboxProductCode1->Text;
this->hDeliv->hProductCode2 = this->tboxProductCode2->Text;
this->hDeliv->IsReleaseForeign = this->cboxReleaseForeign->Checked;
if( this->cboxReleaseForeign->Checked == true )
{
this->hDeliv->hProductNameForeign = this->tboxProductNameForeign->Text;
this->hDeliv->hProductCode1Foreign = this->tboxProductCode1Foreign->Text;
this->hDeliv->hProductCode2Foreign = gcnew System::String("");
this->hDeliv->hProductCode2Foreign = this->tboxProductCode2Foreign1->Text;
if( !System::String::IsNullOrEmpty( this->tboxProductCode2Foreign2->Text ) )
{
this->hDeliv->hProductCode2Foreign += ("/" + this->tboxProductCode2Foreign2->Text);
}
if( !System::String::IsNullOrEmpty( this->tboxProductCode2Foreign3->Text ) )
{
this->hDeliv->hProductCode2Foreign += ("/" + this->tboxProductCode2Foreign3->Text);
}
}
else
{
this->hDeliv->hProductNameForeign = nullptr;
this->hDeliv->hProductCode1Foreign = nullptr;
this->hDeliv->hProductCode2Foreign = nullptr;
}
this->hDeliv->ReleaseYear = this->dateRelease->Value.Year;
this->hDeliv->ReleaseMonth = this->dateRelease->Value.Month;
this->hDeliv->ReleaseDay = this->dateRelease->Value.Day;
this->hDeliv->SubmitYear = this->dateSubmit->Value.Year;
this->hDeliv->SubmitMonth = this->dateSubmit->Value.Month;
this->hDeliv->SubmitDay = this->dateSubmit->Value.Day;
this->hDeliv->SubmitVersion = System::Decimal::ToInt32( this->numSubmitVersion->Value );
// SDK
this->hDeliv->hSDK = nullptr;
if( this->hSrl->hSDKList )
{
for each( RCSDKVersion ^sdk in this->hSrl->hSDKList ) // 書類には ARM9 static のバージョン情報を記入する
{
if( sdk->IsStatic )
this->hDeliv->hSDK = sdk->Version;
}
}
if( this->hDeliv->hSDK == nullptr )
{
this->hDeliv->hSDK = gcnew System::String( "" );
}
// 提出方法
if( this->rSubmitInternet->Checked == true )
{
this->hDeliv->hSubmitWay = this->rSubmitInternet->Text;
}
else if( this->rSubmitPost->Checked == true )
{
this->hDeliv->hSubmitWay = this->rSubmitPost->Text;
}
else
{
this->hDeliv->hSubmitWay = this->rSubmitHand->Text;
}
// 用途
cli::array<System::Windows::Forms::RadioButton ^> ^rbuts = gcnew cli::array<System::Windows::Forms::RadioButton ^>
{
this->rPurposeCardProduction,
this->rPurposeCardTouchTryDS,
this->rPurposeCardDistribution,
this->rPurposeCardKiosk,
this->rPurposeDSiWare,
this->rPurposeOther,
};
for each( System::Windows::Forms::RadioButton ^r in rbuts )
{
if( r->Checked )
{
this->hDeliv->hUsage = r->Text;
}
}
if( this->rPurposeOther->Checked )
{
this->hDeliv->hUsageDetail = this->tboxPurposeOther->Text;
}
else
{
this->hDeliv->hUsageDetail = "";
}
// 会社情報
this->hDeliv->hCompany1 = this->tboxCompany1->Text + " " + this->tboxDepart1->Text;
this->hDeliv->hPerson1 = this->tboxPerson1->Text;
if( this->isJapanese() == true )
{
this->hDeliv->hFurigana1 = this->tboxFurigana1->Text;
}
else
{
this->hDeliv->hFurigana1 = nullptr;
}
this->hDeliv->hTel1 = this->tboxTel1->Text;
this->hDeliv->hFax1 = this->tboxFax1->Text;
this->hDeliv->hMail1 = this->tboxMail1->Text;
if( this->isJapanese() == true )
{
this->hDeliv->hNTSC1 = this->tboxNTSC1->Text;
}
else
{
this->hDeliv->hNTSC1 = nullptr;
}
if( this->cboxIsInputPerson2->Checked == true )
{
this->hDeliv->hCompany2 = this->tboxCompany2->Text + " " + this->tboxDepart2->Text;
this->hDeliv->hPerson2 = this->tboxPerson2->Text;
if( this->isJapanese() == true )
{
this->hDeliv->hFurigana2 = this->tboxFurigana2->Text;
}
else
{
this->hDeliv->hFurigana2 = nullptr;
}
this->hDeliv->hTel2 = this->tboxTel2->Text;
this->hDeliv->hFax2 = this->tboxFax2->Text;
this->hDeliv->hMail2 = this->tboxMail2->Text;
if( this->isJapanese() == true )
{
this->hDeliv->hNTSC2 = this->tboxNTSC2->Text;
}
else
{
this->hDeliv->hNTSC2 = nullptr;
}
}
else
{
this->hDeliv->hCompany2 = nullptr;
this->hDeliv->hPerson2 = nullptr;
this->hDeliv->hFurigana2 = nullptr;
this->hDeliv->hTel2 = nullptr;
this->hDeliv->hFax2 = nullptr;
this->hDeliv->hMail2 = nullptr;
this->hDeliv->hNTSC2 = nullptr;
}
// 備考
System::String ^tmp = this->tboxCaption->Text->Replace( " ", "" );
if( this->tboxCaption->Text->Equals("") || tmp->Equals("") ) // スペースのみの文字列は含めない
{
this->hDeliv->hCaption = nullptr;
}
else
{
this->hDeliv->hCaption = this->tboxCaption->Text;
}
// 特殊なアプリ種別
this->hDeliv->hAppTypeOther = this->tboxAppTypeOther->Text;
if( this->hDeliv->hAppTypeOther != nullptr )
{
this->hDeliv->hAppTypeOther->Replace("\r\n","");
}
// バックアップメモリはROMヘッダには記述されないので提出確認書にのみ記載
if( this->combBackup->SelectedIndex != (this->combBackup->Items->Count - 1) )
{
this->hDeliv->hBackupMemory = this->combBackup->SelectedItem->ToString();
}
else
{
this->hDeliv->hBackupMemory = this->tboxBackupOther->Text;
}
//// DSi Wareの販売カテゴリ
//if( this->combDLCategory->SelectedIndex != (this->combDLCategory->Items->Count - 1) )
//{
// if( this->combDLCategory->SelectedIndex > 0 )
// {
// this->hDeliv->hDLCategory = this->combDLCategory->SelectedItem->ToString();
// }
// else
// {
// this->hDeliv->hDLCategory = gcnew System::String("");
// }
//}
//else
//{
// this->hDeliv->hDLCategory = this->tboxDLCategoryOther->Text;
//}
// SRL情報を文字列で登録
// リージョン
if( this->combRegion->DropDownStyle == System::Windows::Forms::ComboBoxStyle::DropDown )
{
// 中韓のときはリストで選択不可のテキストがコンボボックスに書かれているのでそれを登録
this->hDeliv->hRegion = this->combRegion->Text;
}
else
{
// WorldWide のときはリストで選択可能な文字列を登録
if( this->combRegion->SelectedIndex < 0 )
{
this->hDeliv->hRegion = this->isJapanese()?METWL_STRING_UNDEFINED_REGION_J:METWL_STRING_UNDEFINED_REGION_E; // 起こり得ない
}
else
{
// リストで選択されているテキストを登録
this->hDeliv->hRegion = dynamic_cast<System::String^>(this->combRegion->SelectedItem);
}
}
this->hDeliv->hCERO = this->setDeliverableRatingOgnProperties( this->combCERO );
this->hDeliv->hESRB = this->setDeliverableRatingOgnProperties( this->combESRB );
this->hDeliv->hUSK = this->setDeliverableRatingOgnProperties( this->combUSK );
this->hDeliv->hPEGI = this->setDeliverableRatingOgnProperties( this->combPEGI );
this->hDeliv->hPEGI_PRT = this->setDeliverableRatingOgnProperties( this->combPEGI_PRT );
this->hDeliv->hPEGI_BBFC = this->setDeliverableRatingOgnProperties( this->combPEGI_BBFC );
this->hDeliv->hOFLC = this->setDeliverableRatingOgnProperties( this->combOFLC );
this->hDeliv->hGRB = this->setDeliverableRatingOgnProperties( this->combGRB );
// SRLには登録されないROM仕様
this->hDeliv->IsUGC = this->cboxIsUGC->Checked;
this->hDeliv->IsPhotoEx = this->cboxIsPhotoEx->Checked;
if( !this->tboxPrivateSaveDataPurpose->Enabled )
{
if( this->isJapanese() )
{
this->hDeliv->hPrivateSaveDataPurpose = "なし";
}
else
{
this->hDeliv->hPrivateSaveDataPurpose = "None";
}
}
else
{
this->hDeliv->hPrivateSaveDataPurpose = this->tboxPrivateSaveDataPurpose->Text;
}
}
// ----------------------------------------------
// 提出確認書にレーティング(1団体)のフォームを反映
// ----------------------------------------------
System::String^ Form1::setDeliverableRatingOgnProperties( System::Windows::Forms::ComboBox ^box )
{
System::String ^str;
// 中国リージョン特別対応
if( (this->combRegion->DropDownStyle == System::Windows::Forms::ComboBoxStyle::DropDown) // コンボボックスが中韓リージョン用になっているとき
&& this->hSrl->IsRegionChina ) // SRLが読み込まれていることは保証される
{
if( this->cboxIsUnnecessaryRating->Checked )
{
// レーティング表示不要が選択されているときには団体が中国リージョンに含まれていなくても「レーティング表示不要」となる
str = this->isJapanese()?METWL_STRING_UNNECESSARY_RATING_J:METWL_STRING_UNNECESSARY_RATING_E;
}
else
{
// 中国リージョンに含まれていなくても「全年齢」
str = this->isJapanese()?METWL_STRING_CHINA_RATING_FREE_J:METWL_STRING_CHINA_RATING_FREE_E;
}
return str;
}
// リージョンに含まれる団体のみレーティングが設定される それ以外は「不可」となる
if( this->cboxIsUnnecessaryRating->Checked ) // レーティング表示不要が選択されているとき
{
if( box->FlatStyle == System::Windows::Forms::FlatStyle::Standard ) // リージョンに含まれているときの判定
{
// リージョンに含まれている団体のみ「レーティング表示不要」とする
str = this->isJapanese()?METWL_STRING_UNNECESSARY_RATING_J:METWL_STRING_UNNECESSARY_RATING_E;
}
else
{
// リージョンに含まれていない(コンボボックスが表示されていない)ときには「不可」とする
str = this->isJapanese()?METWL_STRING_UNDEFINED_RATING_J:METWL_STRING_UNDEFINED_RATING_E;
}
}
else
{
if( box->SelectedIndex < 0 )
{
// リージョンに含まれていない(コンボボックスが表示されていない)ときには「不可」とする
str = this->isJapanese()?METWL_STRING_UNDEFINED_RATING_J:METWL_STRING_UNDEFINED_RATING_E;
}
else
{
// リージョンに含まれている団体にはリストで選択されているテキストを代入
str = dynamic_cast<System::String^>(box->SelectedItem);
}
}
return str;
}
// ----------------------------------------------
// マスタ書類情報(SRL影響なし)のフォームチェック
// ----------------------------------------------
System::Boolean Form1::checkDeliverableForms(void)
{
// 不正な場合はダイアログで注意してreturn
// 提出情報
this->checkTextForm( this->tboxProductName->Text, "LabelProductName" ); // SRL作成には問題のないエラー
this->checkTextForm( this->tboxProductCode1->Text, "LabelProductCode" );
this->checkTextForm( this->tboxProductCode2->Text, "LabelProductCode" );
if( this->cboxReleaseForeign->Checked == true )
{
this->checkTextForm( this->tboxProductNameForeign->Text, "LabelProductNameForeign" );
this->checkTextForm( this->tboxProductCode1Foreign->Text, "LabelProductCodeForeign" );
this->checkTextForm( this->tboxProductCode2Foreign1->Text,"LabelProductCodeForeign" );
}
if( this->rPurposeOther->Checked )
{
this->checkTextForm( this->tboxPurposeOther->Text, "LabelUsage" );
}
//「用途」の項目はグループボックスの機能を使っておらず
// もしかしたらチェック漏れが発生するかもしれないのでチェックが入っているかを調べておく
cli::array<System::Windows::Forms::RadioButton^> ^rbuts = gcnew cli::array<System::Windows::Forms::RadioButton ^>
{
this->rPurposeCardProduction,
this->rPurposeCardTouchTryDS,
this->rPurposeCardDistribution,
this->rPurposeCardKiosk,
this->rPurposeDSiWare,
this->rPurposeOther,
};
this->checkRadioButton( rbuts, "LabelUsage" );
// 会社情報
this->checkTextForm( this->tboxPerson1->Text, "LabelPerson1" );
this->checkTextForm( this->tboxCompany1->Text, "LabelCompany1" );
this->checkTextForm( this->tboxDepart1->Text, "LabelDepart2" );
if( this->isJapanese() == true )
{
this->checkTextForm( this->tboxFurigana1->Text, "LabelFurigana1" );
}
this->checkTextForm( this->tboxTel1->Text, "LabelTel1" );
this->checkTextForm( this->tboxMail1->Text, "LabelMail1" );
if( this->cboxIsInputPerson2->Checked == true )
{
this->checkTextForm( this->tboxPerson2->Text, "LabelPerson2" );
this->checkTextForm( this->tboxCompany2->Text, "LabelCompany2" );
this->checkTextForm( this->tboxDepart2->Text, "LabelDepart2" );
if( this->isJapanese() == true )
{
this->checkTextForm( this->tboxFurigana2->Text, "LabelFurigana2" );
}
this->checkTextForm( this->tboxTel2->Text, "LabelTel2" );
this->checkTextForm( this->tboxMail2->Text, "LabelMail2" );
}
// 一部のROM情報(SRLバイナリに反映されない情報)をここでチェックする
this->checkComboBoxIndex( this->combBackup, "LabelBackup", false );
if( this->combBackup->SelectedIndex == (this->combBackup->Items->Count - 1) )
{
this->checkTextForm( this->tboxBackupOther->Text, "LabelBackup" );
}
if( this->tboxPrivateSaveDataPurpose->Enabled )
{
this->checkTextForm( this->tboxPrivateSaveDataPurpose->Text, "PrivateSaveDataPurposeTitle", "PrivateSaveDataPurposeMsg" );
}
// ひととおりエラー登録をした後で
// 書類上のエラー(SRLバイナリには影響しない)が存在するかチェック
return this->isValidOnlyDeliverable();
}
// end of file

View File

@ -0,0 +1,369 @@
// ----------------------------------------------
// エラーリストの書き出し
// ----------------------------------------------
#include "stdafx.h"
#include "Form1.h"
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace MasterEditorTWL;
static int s_NodeCount = 0;
// ======================================================
// XMLの一要素を作成
// ======================================================
static System::Xml::XmlElement^ CreateErrorListElement(System::Xml::XmlDocument ^doc, RCMrcError ^err, int errtype,
System::String ^tagname, System::Boolean isJapanese)
{
System::Xml::XmlElement ^tag = doc->CreateElement(tagname);
tag->SetAttribute( "num", ( s_NodeCount++ ).ToString() );
MasterEditorTWL::appendXmlTag( doc, tag, "errname", (isJapanese)?err->Name:err->NameE );
MasterEditorTWL::appendXmlTag( doc, tag, "errtype", errtype.ToString() );
MasterEditorTWL::appendXmlTag( doc, tag, "errbegin", err->Begin.ToString("X04")+"h" );
MasterEditorTWL::appendXmlTag( doc, tag, "errend", err->End.ToString("X04")+"h" );
MasterEditorTWL::appendXmlTag( doc, tag, "errmsg", (isJapanese)?err->Msg:err->MsgE );
return tag;
}
// ======================================================
// XML形式のリストの本体となるエラーリストの作成(他でも使うので独立させる)
// ======================================================
System::Xml::XmlElement^ Form1::makeErrorListXmlElement(System::Xml::XmlDocument ^doc, System::Boolean isCurrent)
{
s_NodeCount = 0;
// エラーリスト
System::Xml::XmlElement ^list = doc->CreateElement( "error-list" );
if( isCurrent ) // 現在の入力を反映
{
if( this->hSrl->hErrorList != nullptr ) // ROM読み込み時に発見されたエラー
{
for each( RCMrcError ^err in this->hSrl->hErrorList )
{
if( !err->IsEnableModify && this->isDisplayOneGridErrorForPurpose( err ) ) // 修正可能な情報は出力しない
{
list->AppendChild( CreateErrorListElement(doc, err, 0, "error", this->isJapanese()) );
}
}
}
if( this->hErrorList != nullptr ) // 現在のフォーム入力から発見されたエラー
{
for each( RCMrcError ^err in this->hErrorList )
{
if( err->IsAffectRom && this->isDisplayOneGridErrorForPurpose( err ) ) // 書類上のエラーは出力しない
{
list->AppendChild( CreateErrorListElement(doc, err, 1, "error", this->isJapanese()) );
}
}
}
}
else // ROM読み込み時の情報
{
if( this->hSrl->hErrorList )
{
for each( RCMrcError ^err in this->hSrl->hErrorList )
{
int errtype = 0; // 修正可能な情報と不可能な情報とでタイプを分ける
if( err->IsEnableModify )
{
errtype = 1;
}
if( this->isDisplayOneGridErrorForPurpose( err ) )
{
list->AppendChild( CreateErrorListElement(doc, err, errtype, "error", this->isJapanese()) );
}
}
}
}
return list;
}//System::Xml::XmlElement^ Form1::makeErrorListXmlElement
System::Xml::XmlElement^ Form1::makeWarningListXmlElement(System::Xml::XmlDocument ^doc, System::Boolean isCurrent)
{
s_NodeCount = 0;
// 警告リスト
System::Xml::XmlElement ^list = doc->CreateElement( "warning-list" );
if( isCurrent ) // 現在の入力を反映
{
if( this->hSrl->hWarnList != nullptr ) // ROM読み込み時に発見されたエラー
{
for each( RCMrcError ^err in this->hSrl->hWarnList )
{
if( !err->IsEnableModify && this->isDisplayOneGridErrorForPurpose( err ) ) // 修正可能な情報は出力しない
{
list->AppendChild( CreateErrorListElement(doc, err, 0, "warning", this->isJapanese()) );
}
}
}
if( this->hWarnList != nullptr ) // 現在のフォーム入力から発見されたエラー
{
for each( RCMrcError ^err in this->hWarnList )
{
if( err->IsAffectRom && this->isDisplayOneGridErrorForPurpose( err ) ) // 書類上のエラーは出力しない
{
list->AppendChild( CreateErrorListElement(doc, err, 1, "warning", this->isJapanese()) );
}
}
}
}
else // ROM読み込み時の情報
{
if( this->hSrl->hWarnList )
{
for each( RCMrcError ^err in this->hSrl->hWarnList )
{
int errtype = 0; // 修正可能な情報と不可能な情報とでタイプを分ける
if( err->IsEnableModify )
{
errtype = 1;
}
if( this->isDisplayOneGridErrorForPurpose( err ) )
{
list->AppendChild( CreateErrorListElement(doc, err, errtype, "warning", this->isJapanese()) );
}
}
}
}
return list;
} //System::Xml::XmlElement^ Form1::makeWarningListXmlElement
System::Xml::XmlElement^ Form1::makeErrorListCaptionXmlElement(System::Xml::XmlDocument ^doc)
{
// 警告リスト
System::Xml::XmlElement ^list = doc->CreateElement( "error-caption-list" );
{
System::Xml::XmlElement ^tag = doc->CreateElement( "error-caption" );
System::String ^msg = "* Type 0 indicates problems with the ROM data that cannot be corrected using MasterEditorTWL.";
if(this->isJapanese())
{
msg = "* Type 0 の項目はマスターエディタで修正できません。";
}
MasterEditorTWL::appendXmlTag( doc, tag, "text", msg );
list->AppendChild(tag);
}
{
System::Xml::XmlElement ^tag = doc->CreateElement( "error-caption" );
System::String ^msg = "* Type 1 indicates problems with the ROM data that can be corrected using MasterEditorTWL.";
if(this->isJapanese())
{
msg = "* Type 1 の項目はマスターエディタで修正可能です。";
}
MasterEditorTWL::appendXmlTag( doc, tag, "text", msg );
list->AppendChild(tag);
}
return list;
} //System::Xml::XmlElement^ Form1::makeErrorListCaptionXmlElement
// ======================================================
// XML形式のリストに載せるエラー数のカウント
// ======================================================
int Form1::countErrorListXmlElement(System::Boolean isCurrent)
{
s_NodeCount = 0;
int count = 0;
// エラーリスト
if( isCurrent ) // 現在の入力を反映
{
if( this->hSrl->hErrorList != nullptr ) // ROM読み込み時に発見されたエラー
{
for each( RCMrcError ^err in this->hSrl->hErrorList )
{
if( !err->IsEnableModify && this->isDisplayOneGridErrorForPurpose( err ) ) // 修正可能な情報は出力しない
{
count++;
}
}
}
if( this->hErrorList != nullptr ) // 現在のフォーム入力から発見されたエラー
{
for each( RCMrcError ^err in this->hErrorList )
{
if( err->IsAffectRom && this->isDisplayOneGridErrorForPurpose( err ) ) // 書類上のエラーは出力しない
{
count++;
}
}
}
}
else // ROM読み込み時の情報
{
if( this->hSrl->hErrorList )
{
for each( RCMrcError ^err in this->hSrl->hErrorList )
{
int errtype = 0; // 修正可能な情報と不可能な情報とでタイプを分ける
if( err->IsEnableModify )
{
errtype = 1;
}
if( this->isDisplayOneGridErrorForPurpose( err ) )
{
count++;
}
}
}
}
return count;
}//int Form1::countErrorListXmlElement
int Form1::countWarningListXmlElement(System::Boolean isCurrent)
{
s_NodeCount = 0;
int count = 0;
// 警告リスト
if( isCurrent ) // 現在の入力を反映
{
if( this->hSrl->hWarnList != nullptr ) // ROM読み込み時に発見されたエラー
{
for each( RCMrcError ^err in this->hSrl->hWarnList )
{
if( !err->IsEnableModify && this->isDisplayOneGridErrorForPurpose( err ) ) // 修正可能な情報は出力しない
{
count++;
}
}
}
if( this->hWarnList != nullptr ) // 現在のフォーム入力から発見されたエラー
{
for each( RCMrcError ^err in this->hWarnList )
{
if( err->IsAffectRom && this->isDisplayOneGridErrorForPurpose( err ) ) // 書類上のエラーは出力しない
{
count++;
}
}
}
}
else // ROM読み込み時の情報
{
if( this->hSrl->hWarnList )
{
for each( RCMrcError ^err in this->hSrl->hWarnList )
{
int errtype = 0; // 修正可能な情報と不可能な情報とでタイプを分ける
if( err->IsEnableModify )
{
errtype = 1;
}
if( this->isDisplayOneGridErrorForPurpose( err ) )
{
count++;
}
}
}
}
return count;
} //int Form1::countWarningListXmlElement
// ======================================================
// XML形式でリストを作成
// ======================================================
System::Void Form1::makeErrorListXml(System::Xml::XmlDocument ^doc, System::Boolean isCurrent)
{
// 情報を最新に更新
this->hErrorList->Clear();
this->hWarnList->Clear();
this->checkSrlForms();
this->checkDeliverableForms();
System::Xml::XmlElement ^root = doc->CreateElement( "twl-master-editor" );
System::Reflection::Assembly ^ass = System::Reflection::Assembly::GetEntryAssembly();
root->SetAttribute( "version", this->getVersion() );
doc->AppendChild( root );
// ゲーム情報
root->AppendChild( this->makeGameInfoXmlElement(doc) );
// ファイルパス
MasterEditorTWL::appendXmlTag( doc, root, "path", this->tboxFile->Text );
// 作成日時
System::Xml::XmlElement ^time = doc->CreateElement( "time-info" );
System::DateTime ^ datetime = System::DateTime::Now;
time->SetAttribute( "year", datetime->Year.ToString() );
switch( datetime->Month )
{
case 1: time->SetAttribute( "month", "January" ); break;
case 2: time->SetAttribute( "month", "February" ); break;
case 3: time->SetAttribute( "month", "March" ); break;
case 4: time->SetAttribute( "month", "April" ); break;
case 5: time->SetAttribute( "month", "May" ); break;
case 6: time->SetAttribute( "month", "June" ); break;
case 7: time->SetAttribute( "month", "July" ); break;
case 8: time->SetAttribute( "month", "August" ); break;
case 9: time->SetAttribute( "month", "September" ); break;
case 10: time->SetAttribute( "month", "October" ); break;
case 11: time->SetAttribute( "month", "November" ); break;
case 12: time->SetAttribute( "month", "December" ); break;
default: time->SetAttribute( "month", datetime->Month.ToString() ); break;
}
time->SetAttribute( "day", datetime->Day.ToString() );
time->SetAttribute( "time", datetime->Hour.ToString("D2") + ":" + datetime->Minute.ToString("D2") );
root->AppendChild( time );
System::Xml::XmlElement ^section;
// エラー情報
section = doc->CreateElement("error-info");
MasterEditorTWL::appendXmlTag( doc, section, "index", this->isJapanese()?"エラー":"Error" );
section->AppendChild( this->makeErrorListXmlElement(doc, isCurrent) );
root->AppendChild(section);
// 警告情報
section = doc->CreateElement("warning-info");
MasterEditorTWL::appendXmlTag( doc, section, "index", this->isJapanese()?"警告":"Warning" );
section->AppendChild( this->makeWarningListXmlElement(doc, isCurrent) );
root->AppendChild(section);
// エラー数
section = doc->CreateElement("error-num-info");
section->SetAttribute( "error-title", this->isJapanese()?"エラー":"Error" );
section->SetAttribute( "error-num", this->countErrorListXmlElement( isCurrent ).ToString() );
section->SetAttribute( "warning-title", this->isJapanese()?"警告":"Warning" );
section->SetAttribute( "warning-num", this->countWarningListXmlElement( isCurrent ).ToString() );
root->AppendChild(section);
// 追記
root->AppendChild( this->makeErrorListCaptionXmlElement(doc) );
} //System::Void Form1::makeErrorListXml
// ======================================================
// HTML形式でファイルを出力
// ======================================================
System::Void Form1::makeErrorListHtml(System::String ^filepath, System::Boolean isCurrent)
{
System::String ^tmpxml = gcnew System::String( this->getXmlToHtmlTmpFile() );
try
{
// TMPファイルにXML版作成
System::Xml::XmlDocument ^doc = gcnew System::Xml::XmlDocument();
doc->AppendChild( doc->CreateXmlDeclaration("1.0","UTF-8",nullptr) );
this->makeErrorListXml( doc, isCurrent );
doc->Save( tmpxml );
// XML=>HTML変換
System::Xml::Xsl::XslCompiledTransform ^xslt = gcnew System::Xml::Xsl::XslCompiledTransform;
xslt->Load( this->getErrorListXsl() );
xslt->Transform( tmpxml, filepath );
}
catch (System::Exception ^s)
{
System::IO::File::Delete( tmpxml ); // 次のためにTMPファイルを削除しておく
throw s; // 呼び出し元に例外を再throw
return;
}
System::IO::File::Delete( tmpxml );
} //System::Void Form1::makeErrorListHtml

View File

@ -0,0 +1,298 @@
// ----------------------------------------------
// ROMファイルのR/W
// ----------------------------------------------
#include "stdafx.h"
#include <apptype.h>
#include "common.h"
#include "srl.h"
#include "deliverable.h"
#include "crc_whole.h"
#include "utility.h"
#include "lang.h"
#include "split_tad.h"
#include "FormError.h"
#include "Form1.h"
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace MasterEditorTWL;
// ----------------------------------------------
// ファイルの読み込み (TAD/SRL読み込みをラップ)
// ----------------------------------------------
System::Boolean Form1::loadRom( System::String ^infile )
{
System::Boolean result = false;
if( System::IO::Path::GetExtension( infile )->ToUpper()->Equals( ".TAD" ) ) // 拡張子で判別
{
result = this->loadTad( infile );
if( result )
{
this->IsLoadTad = true; // 成功したときのみでないと次のTADの読み込みに失敗したときに
// リードフラグの情報が初期化されて失われてしまう
}
}
else
{
result = this->loadSrl( infile );
if( result )
{
this->IsLoadTad = false;
System::String ^tmpsrl = this->getSplitTadTmpFile();
if( System::IO::File::Exists( tmpsrl ) )
{
System::IO::File::Delete( tmpsrl ); // SRLの読み込みが成功したら以前のTAD読み込みで使用した一時ファイルは不要
}
}
}
return result;
}
// ----------------------------------------------
// ファイルの書き出し (TAD/SRL書き出しをラップ)
// ----------------------------------------------
ECFormResult Form1::saveRom( System::String ^outfile )
{
ECFormResult result = ECFormResult::NOERROR;
if( this->IsLoadTad )
{
// 一時ファイルにSRLを書き出しているのでその一時ファイルから出力ファイルを作成
System::String ^tmpsrl = this->getSplitTadTmpFile();
result = this->saveSrl( tmpsrl, outfile );
if( result != ECFormResult::NOERROR )
{
System::IO::File::Delete( tmpsrl );
this->IsLoadTad = false; // 出力したSRLが次のソースとなる
}
}
else
{
result = this->saveSrl( this->tboxFile->Text, outfile );
}
return result;
}
// ----------------------------------------------
// tadの読み込み
// ----------------------------------------------
System::Boolean Form1::loadTad( System::String ^tadfile )
{
// tadファイルを変換したSRLを一時ファイルに保存
System::String ^srlfile = this->getSplitTadTmpFile();
if( splitTad( tadfile, srlfile ) != 0 ) // 上書きで保存
{
this->errMsg( "E_LoadRom_Tad" );
return false;
}
System::Boolean result = this->loadSrl( srlfile ); // 一時保存したSRLを読み込み
return result;
}
// ----------------------------------------------
// SRLの読み込み
// ----------------------------------------------
System::Boolean Form1::loadSrl( System::String ^srlfile )
{
ECSrlResult result = this->hSrl->readFromFile( srlfile );
if( result != ECSrlResult::NOERROR )
{
switch( result )
{
case ECSrlResult::ERROR_PLATFORM:
this->errMsg( "E_LoadRom_Platform" );
break;
case ECSrlResult::ERROR_SIGN_DECRYPT:
case ECSrlResult::ERROR_SIGN_VERIFY:
this->errMsg( "E_LoadRom_Sign" );
break;
default:
this->errMsg( "E_LoadRom_Default" );
break;
}
return false;
}
// GUIにROM情報を格納
this->setSrlForms();
if( this->IsReadOnly )
{
this->readOnly(); // リードオンリーモードのときフォームをEnableにする
}
// SRLに登録されないROM仕様のフォーム情報も戻るボタンで読み込み時の状態に戻したいが
// 読み込み時の状態をSRLに保存しておけないので退避しておく
this->saveOtherForms();
// 全体のCRCを算出
u16 crc;
if( !getWholeCRCInFile( srlfile, &crc ) )
{
this->errMsg( "E_LoadRom_CRC" );
return false;
}
System::UInt16 ^hcrc = gcnew System::UInt16( crc );
this->tboxWholeCRC->Clear();
this->tboxWholeCRC->AppendText( "0x" );
this->tboxWholeCRC->AppendText( hcrc->ToString("X") );
// 読み込み時エラーを登録する
this->rErrorReading->Checked = true;
this->setGridError();
this->setGridWarn();
// 提出情報の用途を更新する
cli::array<System::Windows::Forms::RadioButton ^> ^rbuts = gcnew cli::array<System::Windows::Forms::RadioButton ^>
{
this->rPurposeCardProduction,
this->rPurposeCardTouchTryDS,
this->rPurposeCardDistribution,
this->rPurposeCardKiosk,
this->rPurposeDSiWare,
this->rPurposeOther
};
this->tboxPurposeInError->Text = "";
for each( System::Windows::Forms::RadioButton ^r in rbuts )
{
if( r->Checked )
{
this->tboxPurposeInError->Text = System::String::Copy( r->Text );
}
}
return true;
} // loadSrl()
// ----------------------------------------------
// SRLの保存
// ----------------------------------------------
ECFormResult Form1::saveSrl( System::String ^infile, System::String ^outfile )
{
if( !System::IO::File::Exists( infile ) )
{
return ECFormResult::ERROR_FILE_EXIST;
}
// コピーしたファイルにROMヘッダを上書き
ECFormResult result = this->saveSrlCore( infile, outfile );
if( result != ECFormResult::NOERROR )
{
return result;
}
// 再リード
this->loadSrl( outfile );
return ECFormResult::NOERROR;
} // saveSrl()
ECFormResult Form1::saveSrlCore( System::String ^infile, System::String ^outfile )
{
// ROM情報をフォームから取得してSRLバイナリに反映させる
this->setSrlProperties();
// ファイルをコピー
if( !(outfile->Equals( infile )) )
{
//try
//{
// System::IO::File::Copy( infile, outfile, true );
//}
//catch( System::Exception ^ex )
//{
// (void)ex;
// return ECFormResult::ERROR_FILE_COPY;
//}
ECFormResult formRes = this->copyFile( infile, outfile );
if( formRes != ECFormResult::NOERROR )
{
return ECFormResult::ERROR_FILE_COPY;
}
}
// コピーしたファイルにROMヘッダを上書き
ECSrlResult srlRes = this->hSrl->writeToFile( outfile );
if( srlRes != ECSrlResult::NOERROR )
{
ECFormResult formRes = ECFormResult::NOERROR;
switch( srlRes )
{
case ECSrlResult::ERROR_FILE_OPEN: formRes = ECFormResult::ERROR_FILE_OPEN; break;
case ECSrlResult::ERROR_FILE_WRITE: formRes = ECFormResult::ERROR_FILE_WRITE; break;
case ECSrlResult::ERROR_FILE_READ: formRes = ECFormResult::ERROR_FILE_READ; break;
case ECSrlResult::ERROR_SIGN_ENCRYPT:
case ECSrlResult::ERROR_SIGN_DECRYPT:
case ECSrlResult::ERROR_SIGN_VERIFY:
formRes = ECFormResult::ERROR_FILE_SIGN;
break;
default:
formRes = ECFormResult::ERROR;
break;
}
return formRes;
}
return ECFormResult::NOERROR;
}
// ----------------------------------------------
// ファイルのコピー
// ----------------------------------------------
#define METWL_COPY_FILE_BUFSIZE (10*1024*1024)
ECFormResult Form1::copyFile( System::String ^infile, System::String ^outfile )
{
const char *pchInfile =
(const char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi( infile ).ToPointer();
const char *pchOutfile =
(const char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi( outfile ).ToPointer();
FILE *ifp = NULL;
if( fopen_s( &ifp, pchInfile, "rb" ) != NULL )
{
//this->errMsgCore( "ファイルコピーにおいて入力ファイルのオープンに失敗しました。" );
return (ECFormResult::ERROR_FILE_OPEN);
}
FILE *ofp = NULL;
if( fopen_s( &ofp, pchOutfile, "wb" ) != NULL ) // 同名ファイルを削除して新規にライト・バイナリ
{
//this->errMsg( "ファイルコピーにおいて出力ファイルのオープンに失敗しました。" );
fclose(ifp);
return (ECFormResult::ERROR_FILE_OPEN);
}
// 入力ファイルのサイズ取得
fseek( ifp, 0, SEEK_END );
System::Int32 size = ftell(ifp);
cli::array<System::Byte> ^mbuf = gcnew cli::array<System::Byte>(METWL_COPY_FILE_BUFSIZE); // 解放の必要なし
pin_ptr<unsigned char> buf = &mbuf[0];
fseek( ifp, 0, SEEK_SET );
fseek( ofp, 0, SEEK_SET );
while( size > 0 )
{
System::Int32 datasize = (METWL_COPY_FILE_BUFSIZE < size)?METWL_COPY_FILE_BUFSIZE:size;
if( datasize != fread(buf, 1, datasize, ifp) )
{
//this->errMsg( "ファイルコピーにおいて入力ファイルからのデータリードに失敗しました。" );
fclose(ofp);
fclose(ifp);
return ECFormResult::ERROR_FILE_READ;
}
if( datasize != fwrite(buf, 1, datasize, ofp) )
{
//this->errMsg( "ファイルコピーにおいて出力ファイルからのデータライトに失敗しました。" );
fclose(ofp);
fclose(ifp);
return ECFormResult::ERROR_FILE_READ;
}
size -= datasize;
}
fclose(ofp);
fclose(ifp);
return ECFormResult::NOERROR;
}

View File

@ -0,0 +1,239 @@
// ----------------------------------------------
// 設定ファイルの読み込み
// ----------------------------------------------
#include "stdafx.h"
#include <apptype.h>
#include "common.h"
#include "srl.h"
#include "deliverable.h"
#include "crc_whole.h"
#include "utility.h"
#include "lang.h"
#include "split_tad.h"
#include "FormError.h"
#include "Form1.h"
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace MasterEditorTWL;
// ----------------------------------------------
// 通常設定ファイルの読み込み
// ----------------------------------------------
void Form1::loadInit(void)
{
System::Xml::XmlDocument ^doc = gcnew System::Xml::XmlDocument();
// xmlファイルの読み込み
try
{
doc->Load( this->getIniFile() );
}
catch( System::IO::FileNotFoundException ^s )
{
(void)s;
this->errMsg( "E_Start_InitExist" );
return;
}
catch( System::Exception ^s )
{
(void)s;
this->errMsg( "E_Start_InitOpen" );
return;
}
// <init>タグ : ルート
System::Xml::XmlElement ^root = doc->DocumentElement;
// <rw>タグ
System::Boolean bReadOnly = MasterEditorTWL::isXmlEqual( root, "rw", "r" );
this->IsReadOnly = bReadOnly;
if( bReadOnly )
{
this->readOnly();
}
// <access>タグ
{
// Shared2ファイルのアクセス許可(ファイルごとに指定)
System::String ^shared2 = MasterEditorTWL::getXPathText( root, "/init/access/shared2" );
if( shared2 != nullptr )
{
// コンマ区切りでアクセス許可ファイルNo.が指定されている
cli::array<System::String^> ^list = shared2->Split( ',' );
if( list )
{
for each( System::String ^item in list )
{
//System::Diagnostics::Debug::WriteLine( "access permit shared2 file: " + item );
System::Int32 number = System::Int32::Parse( item );
this->hSrl->hMrcExternalCheckItems->hIsPermitShared2Array[ number ] = true; // 設定ファイルで指定されている番号のみ許可
}
}
}
// ノーマルジャンプのアクセス許可
System::String ^isNJ = MasterEditorTWL::getXPathText( root, "/init/access/normalJump" );
if( isNJ && isNJ->Equals( "Permit" ) )
{
this->hSrl->hMrcExternalCheckItems->IsPermitNormalJump = true;
}
}
// <access>タグに付随して非表示項目を表示するかどうかを決める
{
// Shared2ファイル
System::Boolean bVisible = false;
for each( System::Boolean permit in this->hSrl->hMrcExternalCheckItems->hIsPermitShared2Array )
{
if( permit && !this->gboxShared2Size->Visible )
{
bVisible = true; // どれかひとつでもtrueならグループボックスを表示する
}
}
this->gboxShared2Size->Visible = bVisible;
this->cboxIsShared2->Visible = bVisible;
if( bVisible )
{
int i;
for( i=0; i < METWL_NUMOF_SHARED2FILES; i++ )
{
// アクセス許可されているファイルのみ表示にする
if( this->hSrl->hMrcExternalCheckItems->hIsPermitShared2Array[i] )
{
switch(i)
{
case 0: this->tboxShared2Size0->Visible = true; this->labShared2Size0->Visible = true; break;
case 1: this->tboxShared2Size1->Visible = true; this->labShared2Size1->Visible = true; break;
case 2: this->tboxShared2Size2->Visible = true; this->labShared2Size2->Visible = true; break;
case 3: this->tboxShared2Size3->Visible = true; this->labShared2Size3->Visible = true; break;
case 4: this->tboxShared2Size4->Visible = true; this->labShared2Size4->Visible = true; break;
case 5: this->tboxShared2Size5->Visible = true; this->labShared2Size5->Visible = true; break;
default: break;
}
}
}
}
// ノーマルジャンプ
this->changeVisibleGboxExFlags( this->hSrl->hMrcExternalCheckItems->IsPermitNormalJump );
}
// <shared2>タグ : Shared2ファイルサイズの真値(アクセス許可されているファイルのみ記載)
System::Int32 i;
for( i=0; i < METWL_NUMOF_SHARED2FILES; i++ )
{
System::String ^str = MasterEditorTWL::getXPathText( root, "/init/shared2/size" + i.ToString() );
if( str )
{
this->hSrl->hMrcExternalCheckItems->hShared2SizeArray[i] = System::UInt32::Parse( str );
}
else // アクセス許可されていないファイルは非公開なのでサイズが設定ファイルに記載されない
{
this->hSrl->hMrcExternalCheckItems->hShared2SizeArray[i] = 0;
}
}
// <reserved-area>タグ : 予約領域の範囲を記載
System::Xml::XmlNodeList ^list = root->SelectNodes( "/init/reserved-list/reserved" );
System::Collections::IEnumerator^ iter = list->GetEnumerator();
while( iter->MoveNext() )
{
System::Xml::XmlNode ^area = safe_cast<System::Xml::XmlNode^>(iter->Current);
System::Xml::XmlNode ^begin = area->SelectSingleNode( "begin" ); // 相対パス
System::Xml::XmlNode ^end = area->SelectSingleNode( "end" );
if( begin && begin->FirstChild && begin->FirstChild->Value &&
end && end->FirstChild && end->FirstChild->Value )
{
System::UInt32 ibeg = System::UInt32::Parse( begin->FirstChild->Value, System::Globalization::NumberStyles::AllowHexSpecifier );
System::UInt32 iend = System::UInt32::Parse( end->FirstChild->Value, System::Globalization::NumberStyles::AllowHexSpecifier );
MasterEditorTWL::VCReservedArea iarea(ibeg, iend);
this->hSrl->hMrcExternalCheckItems->hReservedAreaList->Add( iarea );
}
}
} // loadInit()
// ----------------------------------------------
// 追加設定ファイルの読み込み
// ----------------------------------------------
void Form1::loadAppendInit(void)
{
System::String ^initfile = this->getAppendIniFile();
// 通常は存在しない
if( !System::IO::File::Exists( initfile ) )
{
return;
}
System::Xml::XmlDocument ^doc = gcnew System::Xml::XmlDocument();
try
{
doc->Load( initfile );
}
catch( System::IO::FileNotFoundException ^s )
{
(void)s;
this->errMsg( "E_Start_AppendExist" );
return;
}
catch( System::Exception ^s )
{
(void)s;
this->errMsg( "E_Start_AppendOpen" );
return;
}
System::Xml::XmlElement ^root = doc->DocumentElement;
// <visible>タグ
System::Boolean bVisible = MasterEditorTWL::isXmlEqual( root, "visible", "ON" );
this->changeVisibleForms( bVisible );
this->changeVisibleGboxExFlags( bVisible );
// <spcheck>タグ
System::Boolean bCheck = MasterEditorTWL::isXmlEqual( root, "spcheck", "ON" );
if( bCheck ) // チェックするときのみ追加チェック項目を設定
{
// チェックするかどうか
this->hSrl->hMrcExternalCheckItems->IsAppendCheck = true;
// SDK
try
{
u32 major = System::UInt32::Parse( MasterEditorTWL::getXPathText( root, "/init/sdk/major" ) );
u32 minor = System::UInt32::Parse( MasterEditorTWL::getXPathText( root, "/init/sdk/minor" ) );
u32 relstep = System::UInt32::Parse( MasterEditorTWL::getXPathText( root, "/init/sdk/relstep" ) );
u32 sdkver = (major << 24) | (minor << 16) | (relstep & 0xFFFF);
this->hSrl->hMrcExternalCheckItems->SDKVer = sdkver;
major = System::UInt32::Parse( MasterEditorTWL::getXPathText( root, "/init/sdkNotStaticTWL/major" ) );
minor = System::UInt32::Parse( MasterEditorTWL::getXPathText( root, "/init/sdkNotStaticTWL/minor" ) );
relstep = System::UInt32::Parse( MasterEditorTWL::getXPathText( root, "/init/sdkNotStaticTWL/relstep" ) );
sdkver = (major << 24) | (minor << 16) | (relstep & 0xFFFF);
this->hSrl->hMrcExternalCheckItems->SDKVerNotStaticTWL = sdkver;
major = System::UInt32::Parse( MasterEditorTWL::getXPathText( root, "/init/sdkNotStaticNTR/major" ) );
minor = System::UInt32::Parse( MasterEditorTWL::getXPathText( root, "/init/sdkNotStaticNTR/minor" ) );
relstep = System::UInt32::Parse( MasterEditorTWL::getXPathText( root, "/init/sdkNotStaticNTR/relstep" ) );
sdkver = (major << 24) | (minor << 16) | (relstep & 0xFFFF);
this->hSrl->hMrcExternalCheckItems->SDKVerNotStaticNTR = sdkver;
}
catch ( System::Exception ^ex )
{
(void)ex;
this->errMsg( "E_Start_SDK" );
this->hSrl->hMrcExternalCheckItems->SDKVer = 0;
}
} //if( bCheck )
} // loadAppendInit()

View File

@ -0,0 +1,578 @@
// ----------------------------------------------
// 日英両対応
// ----------------------------------------------
#include "stdafx.h"
#include <apptype.h>
#include "common.h"
#include "srl.h"
#include "deliverable.h"
#include "crc_whole.h"
#include "utility.h"
#include "lang.h"
#include "FormError.h"
#include "Form1.h"
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace MasterEditorTWL;
// ----------------------------------------------
// テキストボックスの文字列制限を変える
// (日本語版と英語版で文字列制限を変えたい)
// ----------------------------------------------
void Form1::changeMaxLength( System::Windows::Forms::TextBox ^tbox, System::Int32 maxlen )
{
if( tbox->Text->Length > maxlen )
tbox->Text = "";
tbox->MaxLength = maxlen;
}
// ----------------------------------------------
// フォームのEnableやVisibleを変える
// ----------------------------------------------
void Form1::changeFormInput( System::String ^langname )
{
// 日本語のみの入力項目
if( langname->StartsWith("ja") )
{
// ふりがなは日本のみ
this->tboxFurigana1->Enabled = true;
this->tboxNTSC1->Enabled = true;
this->tboxFurigana2->Enabled = true;
this->tboxNTSC2->Enabled = true;
this->tboxFurigana1->Visible = true;
this->tboxNTSC1->Visible = true;
this->tboxFurigana2->Visible = true;
this->tboxNTSC2->Visible = true;
this->labFurigana1->Visible = true;
this->labNTSC1Pre->Visible = true;
this->labNTSC1Sur->Visible = true;
this->labFurigana2->Visible = true;
this->labNTSC2Pre->Visible = true;
this->labNTSC2Sur->Visible = true;
this->labArbit2->Visible = true;
this->labArbit4->Visible = true;
// 日本ではInternet提出を認めないので表示を消す
//if( this->rSubmitInternet->Checked )
//{
// this->rSubmitInternet->Checked = false; // Internetが選択されているときに表示を消すとどれも選択されていない状況になるので
// this->rSubmitPost->Checked = true; // 必ずどれか1つが選択されているようにしておく
//}
//this->rSubmitInternet->Enabled = false;
//this->rSubmitInternet->Visible = false;
}
else
{
this->tboxFurigana1->Enabled = false;
this->tboxNTSC1->Enabled = false;
this->tboxFurigana2->Enabled = false;
this->tboxNTSC2->Enabled = false;
this->tboxFurigana1->Visible = false;
this->tboxNTSC1->Visible = false;
this->tboxFurigana2->Visible = false;
this->tboxNTSC2->Visible = false;
this->tboxFurigana1->Clear();
this->tboxNTSC1->Clear();
this->tboxFurigana2->Clear();
this->tboxNTSC2->Clear();
this->labFurigana1->Visible = false;
this->labNTSC1Pre->Visible = false;
this->labNTSC1Sur->Visible = false;
this->labFurigana2->Visible = false;
this->labNTSC2Pre->Visible = false;
this->labNTSC2Sur->Visible = false;
this->labArbit2->Visible = false;
this->labArbit4->Visible = false;
//this->rSubmitInternet->Enabled = true;
//this->rSubmitInternet->Visible = true;
}
}
// ----------------------------------------------
// 日本語版への切り替え
// ----------------------------------------------
void Form1::changeJapanese(void)
{
this->changeLanguage( "ja" );
}
// ----------------------------------------------
// 英語版への切り替え
// ----------------------------------------------
void Form1::changeEnglish(void)
{
this->changeLanguage( "en" );
}
// ----------------------------------------------
// 言語リソース切り替え
// ----------------------------------------------
void MasterEditorTWL::Form1::changeLanguage( System::String ^langname )
{
//int index;
// リソース切り替えのために一時的にカルチャを切り替え
System::Threading::Thread::CurrentThread->CurrentUICulture = gcnew System::Globalization::CultureInfo(langname,true);
System::ComponentModel::ComponentResourceManager^ resources = (gcnew System::ComponentModel::ComponentResourceManager(Form1::typeid));
resources->ApplyResources(this->tboxFile, L"tboxFile");
resources->ApplyResources(this->gboxSrl, L"gboxSrl");
resources->ApplyResources(this->tboxRemasterVer, L"tboxRemasterVer");
resources->ApplyResources(this->tboxRomSize, L"tboxRomSize");
resources->ApplyResources(this->tboxPlatform, L"tboxPlatform");
resources->ApplyResources(this->labPlatform, L"labPlatform");
resources->ApplyResources(this->tboxRomLatency, L"tboxRomLatency");
resources->ApplyResources(this->labRomSize, L"labRomSize");
resources->ApplyResources(this->labRomType, L"labRomType");
resources->ApplyResources(this->tboxMakerCode, L"tboxMakerCode");
resources->ApplyResources(this->cboxRemasterVerE, L"cboxRemasterVerE");
resources->ApplyResources(this->labMakerCode, L"labMakerCode");
resources->ApplyResources(this->labGameCode, L"labGameCode");
resources->ApplyResources(this->tboxGameCode, L"tboxGameCode");
resources->ApplyResources(this->labTitleName, L"labTitleName");
resources->ApplyResources(this->labRemasterVer, L"labRemasterVer");
resources->ApplyResources(this->tboxTitleName, L"tboxTitleName");
resources->ApplyResources(this->labBackup, L"labBackup");
int indexBackup = this->combBackup->SelectedIndex;
this->combBackup->Items->Clear();
this->combBackup->Items->AddRange(gcnew cli::array< System::Object^ >(10) {resources->GetString(L"combBackup.Items"), resources->GetString(L"combBackup.Items1"),
resources->GetString(L"combBackup.Items2"), resources->GetString(L"combBackup.Items3"), resources->GetString(L"combBackup.Items4"),
resources->GetString(L"combBackup.Items5"), resources->GetString(L"combBackup.Items6"), resources->GetString(L"combBackup.Items7"),
resources->GetString(L"combBackup.Items8"), resources->GetString(L"combBackup.Items9")});
resources->ApplyResources(this->combBackup, L"combBackup");
this->combBackup->SelectedIndex = indexBackup;
resources->ApplyResources(this->tboxBackupOther, L"tboxBackupOther");
resources->ApplyResources(this->gboxCRC, L"gboxCRC");
resources->ApplyResources(this->labRomCRC, L"labRomCRC");
resources->ApplyResources(this->labHeaderCRC, L"labHeaderCRC");
resources->ApplyResources(this->tboxHeaderCRC, L"tboxHeaderCRC");
resources->ApplyResources(this->tboxWholeCRC, L"tboxWholeCRC");
resources->ApplyResources(this->labCaption, L"labCaption");
resources->ApplyResources(this->tboxCaption, L"tboxCaption");
resources->ApplyResources(this->labGRB, L"labGRB");
resources->ApplyResources(this->labOFLC, L"labOFLC");
resources->ApplyResources(this->labPEGI_BBFC, L"labPEGI_BBFC");
resources->ApplyResources(this->labPEGI_PRT, L"labPEGI_PRT");
resources->ApplyResources(this->labPEGI, L"labPEGI");
resources->ApplyResources(this->labUSK, L"labUSK");
resources->ApplyResources(this->labESRB, L"labESRB");
resources->ApplyResources(this->labCERO, L"labCERO");
int indexGRB = this->combGRB->SelectedIndex;
this->combGRB->Items->Clear();
this->combGRB->Items->AddRange(gcnew cli::array< System::Object^ >(5) {resources->GetString(L"combGRB.Items"), resources->GetString(L"combGRB.Items1"),
resources->GetString(L"combGRB.Items2"), resources->GetString(L"combGRB.Items3"), resources->GetString(L"combGRB.Items4")});
resources->ApplyResources(this->combOFLC, L"combOFLC");
int indexOFLC = this->combOFLC->SelectedIndex;
this->combOFLC->Items->Clear();
this->combOFLC->Items->AddRange(gcnew cli::array< System::Object^ >(5) {resources->GetString(L"combOFLC.Items"), resources->GetString(L"combOFLC.Items1"),
resources->GetString(L"combOFLC.Items2"), resources->GetString(L"combOFLC.Items3"), resources->GetString(L"combOFLC.Items4")});
resources->ApplyResources(this->combPEGI_BBFC, L"combPEGI_BBFC");
int indexPEGI_BBFC = this->combPEGI_BBFC->SelectedIndex;
this->combPEGI_BBFC->Items->Clear();
this->combPEGI_BBFC->Items->AddRange(gcnew cli::array< System::Object^ >(10) {resources->GetString(L"combPEGI_BBFC.Items"),
resources->GetString(L"combPEGI_BBFC.Items1"), resources->GetString(L"combPEGI_BBFC.Items2"), resources->GetString(L"combPEGI_BBFC.Items3"),
resources->GetString(L"combPEGI_BBFC.Items4"), resources->GetString(L"combPEGI_BBFC.Items5"), resources->GetString(L"combPEGI_BBFC.Items6"),
resources->GetString(L"combPEGI_BBFC.Items7"), resources->GetString(L"combPEGI_BBFC.Items8"), resources->GetString(L"combPEGI_BBFC.Items9")});
resources->ApplyResources(this->combPEGI_PRT, L"combPEGI_PRT");
int indexPEGI_PRT = this->combPEGI_PRT->SelectedIndex;
this->combPEGI_PRT->Items->Clear();
this->combPEGI_PRT->Items->AddRange(gcnew cli::array< System::Object^ >(7) {resources->GetString(L"combPEGI_PRT.Items"),
resources->GetString(L"combPEGI_PRT.Items1"), resources->GetString(L"combPEGI_PRT.Items2"), resources->GetString(L"combPEGI_PRT.Items3"),
resources->GetString(L"combPEGI_PRT.Items4"), resources->GetString(L"combPEGI_PRT.Items5"), resources->GetString(L"combPEGI_PRT.Items6")});
resources->ApplyResources(this->combPEGI, L"combPEGI");
int indexPEGI = this->combPEGI->SelectedIndex;
this->combPEGI->Items->Clear();
this->combPEGI->Items->AddRange(gcnew cli::array< System::Object^ >(7) {resources->GetString(L"combPEGI.Items"), resources->GetString(L"combPEGI.Items1"),
resources->GetString(L"combPEGI.Items2"), resources->GetString(L"combPEGI.Items3"), resources->GetString(L"combPEGI.Items4"),
resources->GetString(L"combPEGI.Items5"), resources->GetString(L"combPEGI.Items6")});
resources->ApplyResources(this->combUSK, L"combUSK");
int indexUSK = this->combUSK->SelectedIndex;
this->combUSK->Items->Clear();
this->combUSK->Items->AddRange(gcnew cli::array< System::Object^ >(6) {resources->GetString(L"combUSK.Items"), resources->GetString(L"combUSK.Items1"),
resources->GetString(L"combUSK.Items2"), resources->GetString(L"combUSK.Items3"), resources->GetString(L"combUSK.Items4"), resources->GetString(L"combUSK.Items5")});
resources->ApplyResources(this->combESRB, L"combESRB");
int indexESRB = this->combESRB->SelectedIndex;
this->combESRB->Items->Clear();
this->combESRB->Items->AddRange(gcnew cli::array< System::Object^ >(7) {resources->GetString(L"combESRB.Items"), resources->GetString(L"combESRB.Items1"),
resources->GetString(L"combESRB.Items2"), resources->GetString(L"combESRB.Items3"), resources->GetString(L"combESRB.Items4"),
resources->GetString(L"combESRB.Items5"), resources->GetString(L"combESRB.Items6")});
resources->ApplyResources(this->combCERO, L"combCERO");
int indexCERO = this->combCERO->SelectedIndex;
this->combCERO->Items->Clear();
this->combCERO->Items->AddRange(gcnew cli::array< System::Object^ >(6) {resources->GetString(L"combCERO.Items"), resources->GetString(L"combCERO.Items1"),
resources->GetString(L"combCERO.Items2"), resources->GetString(L"combCERO.Items3"), resources->GetString(L"combCERO.Items4"),
resources->GetString(L"combCERO.Items5")});
resources->ApplyResources(this->labRegion, L"labRegion");
resources->ApplyResources(this->cboxIsEULA, L"cboxIsEULA");
resources->ApplyResources(this->combRegion, L"combRegion");
int indexRegion = this->combRegion->SelectedIndex;
this->combRegion->Items->Clear();
this->combRegion->Items->AddRange(gcnew cli::array< System::Object^ >(8) {resources->GetString(L"combRegion.Items"), resources->GetString(L"combRegion.Items1"),
resources->GetString(L"combRegion.Items2"), resources->GetString(L"combRegion.Items3"), resources->GetString(L"combRegion.Items4"),
resources->GetString(L"combRegion.Items5"), resources->GetString(L"combRegion.Items6"), resources->GetString(L"combRegion.Items7")});
#if defined(METWL_VER_APPTYPE_SYSTEM) || defined(METWL_VER_APPTYPE_SECURE) || defined(METWL_VER_APPTYPE_LAUNCHER)
if( langname->Equals( "ja" ) )
{
this->combRegion->Items->Add( gcnew System::String( L"全リージョン" ) );
}
else
{
this->combRegion->Items->Add( gcnew System::String( L"All Region" ) );
}
#endif
this->combRegion->SelectedIndex = indexRegion;
// 中韓のときの特別対応
if( this->combRegion->DropDownStyle == System::Windows::Forms::ComboBoxStyle::DropDown )
{
if( this->hSrl->IsRegionChina ) // このパスになるとき必ずSRLは読み込まれている
{
this->combRegion->Text = (langname == "ja")?"中国のみ":"China only";
}
else
{
this->combRegion->Text = (langname == "ja")?"韓国のみ":"Korea only";
}
}
// Region が変わったときのイベントが勝手に呼ばれて index が -1 にされるので Region 変更後に index を設定
this->combCERO->SelectedIndex = indexCERO;
this->combESRB->SelectedIndex = indexESRB;
this->combUSK->SelectedIndex = indexUSK;
this->combPEGI->SelectedIndex = indexPEGI;
this->combPEGI_PRT->SelectedIndex = indexPEGI_PRT;
this->combPEGI_BBFC->SelectedIndex = indexPEGI_BBFC;
this->combOFLC->SelectedIndex = indexOFLC;
this->combGRB->SelectedIndex = indexGRB;
//resources->ApplyResources(this->combDLCategory, L"combDLCategory");
//index = this->combDLCategory->SelectedIndex;
//this->combDLCategory->Items->Clear();
//this->combDLCategory->Items->AddRange(gcnew cli::array< System::Object^ >(6) {resources->GetString(L"combDLCategory.Items"),
// resources->GetString(L"combDLCategory.Items1"), resources->GetString(L"combDLCategory.Items2"), resources->GetString(L"combDLCategory.Items3"),
// resources->GetString(L"combDLCategory.Items4"), resources->GetString(L"combDLCategory.Items5")});
//this->combDLCategory->SelectedIndex = index;
resources->ApplyResources(this->cboxIsInputPerson2, L"cboxIsInputPerson2");
resources->ApplyResources(this->gboxPerson2, L"gboxPerson2");
resources->ApplyResources(this->labArbit4, L"labArbit4");
resources->ApplyResources(this->labArbit3, L"labArbit3");
resources->ApplyResources(this->labNTSC2Sur, L"labNTSC2Sur");
resources->ApplyResources(this->tboxNTSC2, L"tboxNTSC2");
resources->ApplyResources(this->labFax2, L"labFax2");
resources->ApplyResources(this->labNTSC2Pre, L"labNTSC2Pre");
resources->ApplyResources(this->tboxFax2, L"tboxFax2");
resources->ApplyResources(this->tboxMail2, L"tboxMail2");
resources->ApplyResources(this->tboxTel2, L"tboxTel2");
resources->ApplyResources(this->tboxFurigana2, L"tboxFurigana2");
resources->ApplyResources(this->tboxPerson2, L"tboxPerson2");
resources->ApplyResources(this->tboxDepart2, L"tboxDepart2");
resources->ApplyResources(this->labDepart2, L"labDepart2");
resources->ApplyResources(this->tboxCompany2, L"tboxCompany2");
resources->ApplyResources(this->labMail2, L"labMail2");
resources->ApplyResources(this->labTel2, L"labTel2");
resources->ApplyResources(this->labFurigana2, L"labFurigana2");
resources->ApplyResources(this->labPerson2, L"labPerson2");
resources->ApplyResources(this->labCompany2, L"labCompany2");
resources->ApplyResources(this->gboxPerson1, L"gboxPerson1");
resources->ApplyResources(this->labArbit2, L"labArbit2");
resources->ApplyResources(this->labArbit1, L"labArbit1");
resources->ApplyResources(this->labNTSC1Sur, L"labNTSC1Sur");
resources->ApplyResources(this->labFax1, L"labFax1");
resources->ApplyResources(this->labNTSC1Pre, L"labNTSC1Pre");
resources->ApplyResources(this->tboxNTSC1, L"tboxNTSC1");
resources->ApplyResources(this->tboxFax1, L"tboxFax1");
resources->ApplyResources(this->tboxMail1, L"tboxMail1");
resources->ApplyResources(this->tboxTel1, L"tboxTel1");
resources->ApplyResources(this->tboxFurigana1, L"tboxFurigana1");
resources->ApplyResources(this->tboxPerson1, L"tboxPerson1");
resources->ApplyResources(this->tboxDepart1, L"tboxDepart1");
resources->ApplyResources(this->labDepart1, L"labDepart1");
resources->ApplyResources(this->tboxCompany1, L"tboxCompany1");
resources->ApplyResources(this->labMail1, L"labMail1");
resources->ApplyResources(this->labTel1, L"labTel1");
resources->ApplyResources(this->labFurigana1, L"labFurigana1");
resources->ApplyResources(this->labPerson1, L"labPerson1");
resources->ApplyResources(this->labCompany1, L"labCompany1");
resources->ApplyResources(this->tboxProductCode2, L"tboxProductCode2");
resources->ApplyResources(this->tboxProductCode1, L"tboxProductCode1");
resources->ApplyResources(this->tboxProductName, L"tboxProductName");
resources->ApplyResources(this->labProductCode2, L"labProductCode2");
resources->ApplyResources(this->labProductCode1, L"labProductCode1");
resources->ApplyResources(this->dateSubmit, L"dateSubmit");
resources->ApplyResources(this->dateRelease, L"dateRelease");
resources->ApplyResources(this->gboxSubmitWay, L"gboxSubmitWay");
resources->ApplyResources(this->rSubmitHand, L"rSubmitHand");
resources->ApplyResources(this->rSubmitPost, L"rSubmitPost");
resources->ApplyResources(this->labSubmiteDate, L"labSubmiteDate");
resources->ApplyResources(this->labReleaseDate, L"labReleaseDate");
resources->ApplyResources(this->labProductCode, L"labProductCode");
resources->ApplyResources(this->labProductName, L"labProductName");
resources->ApplyResources(this->labCapSubmitVer, L"labCapSubmitVer");
resources->ApplyResources(this->numSubmitVersion, L"numSubmitVersion");
resources->ApplyResources(this->labSubmitVer, L"labSubmitVer");
resources->ApplyResources(this->labMultiForeign1, L"labMultiForeign1");
resources->ApplyResources(this->tboxProductCode2Foreign3, L"tboxProductCode2Foreign3");
resources->ApplyResources(this->tboxProductCode2Foreign2, L"tboxProductCode2Foreign2");
resources->ApplyResources(this->labProductCode2Foreign, L"labProductCode2Foreign");
resources->ApplyResources(this->cboxReleaseForeign, L"cboxReleaseForeign");
resources->ApplyResources(this->labProductNameForeign, L"labProductNameForeign");
resources->ApplyResources(this->tboxProductNameForeign, L"tboxProductNameForeign");
resources->ApplyResources(this->labProductCode1Foreign, L"labProductCode1Foreign");
resources->ApplyResources(this->tboxProductCode1Foreign, L"tboxProductCode1Foreign");
resources->ApplyResources(this->labProductCodeForeign, L"labProductCodeForeign");
resources->ApplyResources(this->tboxProductCode2Foreign1, L"tboxProductCode2Foreign1");
resources->ApplyResources(this->gboxShared2Size, L"gboxShared2Size");
resources->ApplyResources(this->labShared2Size5, L"labShared2Size5");
resources->ApplyResources(this->labShared2Size4, L"labShared2Size4");
resources->ApplyResources(this->labShared2Size3, L"labShared2Size3");
resources->ApplyResources(this->labShared2Size2, L"labShared2Size2");
resources->ApplyResources(this->labShared2Size1, L"labShared2Size1");
resources->ApplyResources(this->labShared2Size0, L"labShared2Size0");
resources->ApplyResources(this->tboxShared2Size5, L"tboxShared2Size5");
resources->ApplyResources(this->tboxShared2Size4, L"tboxShared2Size4");
resources->ApplyResources(this->tboxShared2Size3, L"tboxShared2Size3");
resources->ApplyResources(this->tboxShared2Size2, L"tboxShared2Size2");
resources->ApplyResources(this->tboxShared2Size1, L"tboxShared2Size1");
resources->ApplyResources(this->tboxShared2Size0, L"tboxShared2Size0");
resources->ApplyResources(this->cboxIsShared2, L"cboxIsShared2");
resources->ApplyResources(this->labLib, L"labLib");
resources->ApplyResources(this->gridSDK, L"gridSDK");
resources->ApplyResources(this->labSDK, L"labSDK");
resources->ApplyResources(this->gboxTWLExInfo, L"gboxTWLExInfo");
resources->ApplyResources(this->labByte1, L"labByte1");
resources->ApplyResources(this->labHex4, L"labHex4");
resources->ApplyResources(this->labHex3, L"labHex3");
resources->ApplyResources(this->tboxIsCodec, L"tboxIsCodec");
resources->ApplyResources(this->labIsCodec, L"labIsCodec");
resources->ApplyResources(this->labNormalRomOffset, L"labNormalRomOffset");
resources->ApplyResources(this->tboxNormalRomOffset, L"tboxNormalRomOffset");
resources->ApplyResources(this->labKeyTableRomOffset, L"labKeyTableRomOffset");
resources->ApplyResources(this->tboxPrivateSize, L"tboxPrivateSize");
resources->ApplyResources(this->labPrivateSize, L"labPrivateSize");
resources->ApplyResources(this->tboxKeyTableRomOffset, L"tboxKeyTableRomOffset");
resources->ApplyResources(this->labPublicSize, L"labPublicSize");
resources->ApplyResources(this->tboxPublicSize, L"tboxPublicSize");
resources->ApplyResources(this->cboxIsSubBanner, L"cboxIsSubBanner");
resources->ApplyResources(this->cboxIsNormalJump, L"cboxIsNormalJump");
resources->ApplyResources(this->cboxIsTmpJump, L"cboxIsTmpJump");
resources->ApplyResources(this->gboxAccess, L"gboxAccess");
resources->ApplyResources(this->labSDAccessRight, L"labSDAccessRight");
resources->ApplyResources(this->labPhotoAccess, L"labPhotoAccess");
resources->ApplyResources(this->labAccessOther, L"labAccessOther");
resources->ApplyResources(this->tboxAccessOther, L"tboxAccessOther");
resources->ApplyResources(this->tboxIsGameCardOn, L"tboxIsGameCardOn");
resources->ApplyResources(this->labIsGameCardOn, L"labIsGameCardOn");
resources->ApplyResources(this->labIsGameCardOn2, L"labIsGameCardOn2");
resources->ApplyResources(this->cboxIsNAND, L"cboxIsNAND");
resources->ApplyResources(this->cboxIsSD, L"cboxIsSD");
resources->ApplyResources(this->gboxTitleID, L"gboxTitleID");
resources->ApplyResources(this->labAppType, L"labAppType");
resources->ApplyResources(this->labMedia, L"labMedia");
resources->ApplyResources(this->tboxAppType, L"tboxAppType");
resources->ApplyResources(this->tboxMedia, L"tboxMedia");
resources->ApplyResources(this->labHex2, L"labHex2");
resources->ApplyResources(this->tboxTitleIDLo, L"tboxTitleIDLo");
resources->ApplyResources(this->labTitleIDLo, L"labTitleIDLo");
resources->ApplyResources(this->labTitleIDHi, L"labTitleIDHi");
resources->ApplyResources(this->tboxTitleIDHi, L"tboxTitleIDHi");
resources->ApplyResources(this->tboxAppTypeOther, L"tboxAppTypeOther");
resources->ApplyResources(this->labAppTypeOther, L"labAppTypeOther");
resources->ApplyResources(this->labCaptionEx, L"labCaptionEx");
resources->ApplyResources(this->tboxCaptionEx, L"tboxCaptionEx");
resources->ApplyResources(this->gboxProd, L"gboxProd");
resources->ApplyResources(this->menuStripAbove, L"menuStripAbove");
resources->ApplyResources(this->stripFile, L"stripFile");
resources->ApplyResources(this->stripItemOpenRom, L"stripItemOpenRom");
resources->ApplyResources(this->stripItemSepFile1, L"stripItemSepFile1");
resources->ApplyResources(this->stripItemSaveTemp, L"stripItemSaveTemp");
resources->ApplyResources(this->stripItemLoadTemp, L"stripItemLoadTemp");
resources->ApplyResources(this->exportToolStripMenuItem, L"exportToolStripMenuItem");
resources->ApplyResources(this->stripItemRomInfoList, L"stripItemRomInfoList");
resources->ApplyResources(this->stripItemErrorListRead, L"stripItemErrorListRead");
resources->ApplyResources(this->stripItemErrorListCurrent, L"stripItemErrorListCurrent");
resources->ApplyResources(this->stripItemRomInfoAndErrorListRead, L"stripItemRomInfoAndErrorListRead");
resources->ApplyResources(this->stripItemRomInfoAndErrorListCurrent, L"stripItemRomInfoAndErrorListCurrent");
resources->ApplyResources(this->stripMaster, L"stripMaster");
resources->ApplyResources(this->stripItemSheet, L"stripItemSheet");
resources->ApplyResources(this->stripItemSepMaster1, L"stripItemSepMaster1");
resources->ApplyResources(this->stripItemMasterRom, L"stripItemMasterRom");
resources->ApplyResources(this->stripItemMiddlewareXml, L"stripItemMiddlewareXml");
resources->ApplyResources(this->stripItemMiddlewareHtml, L"stripItemMiddlewareHtml");
resources->ApplyResources(this->stripLang, L"stripLang");
resources->ApplyResources(this->stripItemEnglish, L"stripItemEnglish");
resources->ApplyResources(this->stripItemJapanese, L"stripItemJapanese");
resources->ApplyResources(this->tabMain, L"tabMain");
resources->ApplyResources(this->tabRomInfo, L"tabRomInfo");
resources->ApplyResources(this->gridLibrary, L"gridLibrary");
resources->ApplyResources(this->colLibPublisher, L"colLibPublisher");
resources->ApplyResources(this->colLibName, L"colLibName");
resources->ApplyResources(this->tboxGuideRomInfo, L"tboxGuideRomInfo");
resources->ApplyResources(this->tabTWLInfo, L"tabTWLInfo");
resources->ApplyResources(this->gboxLaunch, L"gboxLaunch");
resources->ApplyResources(this->labConnectIcon, L"labConnectIcon");
resources->ApplyResources(this->tboxGuideTWLInfo, L"tboxGuideTWLInfo");
resources->ApplyResources(this->gboxExFlags, L"gboxExFlags");
resources->ApplyResources(this->tabNandSizeInfo, L"tabNandSizeInfo");
//resources->ApplyResources(this->tboxGuideDLCategory, L"tboxGuideDLCategory");
//resources->ApplyResources(this->gboxDLCategory, L"gboxDLCategory");
resources->ApplyResources(this->tboxGuideNandSizeInfo, L"tboxGuideNandSizeInfo");
resources->ApplyResources(this->gboxNandSize, L"gboxNandSize");
resources->ApplyResources(this->labNandSize, L"labNandSize");
resources->ApplyResources(this->labNandSizeFS, L"labNandSizeFS");
resources->ApplyResources(this->labSrlSize, L"labSrlSize");
resources->ApplyResources(this->labSumSize2, L"labSumSize2");
resources->ApplyResources(this->labSumSize, L"labSumSize");
resources->ApplyResources(this->labSubBannerSize, L"labSubBannerSize");
resources->ApplyResources(this->labTmdSize, L"labTmdSize");
resources->ApplyResources(this->tabRomEditInfo, L"tabRomEditInfo");
resources->ApplyResources(this->gboxOtherSpec, L"gboxOtherSpec");
resources->ApplyResources(this->cboxIsUGC, L"cboxIsUGC");
resources->ApplyResources(this->cboxIsPhotoEx, L"cboxIsPhotoEx");
resources->ApplyResources(this->butSetBack, L"butSetBack");
resources->ApplyResources(this->tboxGuideRomEditInfo, L"tboxGuideRomEditInfo");
resources->ApplyResources(this->gboxParental, L"gboxParental");
resources->ApplyResources(this->cboxIsUnnecessaryRating, L"cboxIsUnnecessaryRating");
resources->ApplyResources(this->tabSubmitInfo, L"tabSubmitInfo");
resources->ApplyResources(this->labProductNameLimit, L"labProductNameLimit");
resources->ApplyResources(this->tboxGuideSubmitInfo, L"tboxGuideSubmitInfo");
resources->ApplyResources(this->gboxForeign, L"gboxForeign");
resources->ApplyResources(this->labProductNameLimitForeign, L"labProductNameLimitForeign");
resources->ApplyResources(this->labMultiForeign2, L"labMultiForeign2");
resources->ApplyResources(this->tabCompanyInfo, L"tabCompanyInfo");
resources->ApplyResources(this->tboxGuideCompanyInfo, L"tboxGuideCompanyInfo");
resources->ApplyResources(this->tabErrorInfo, L"tabErrorInfo");
resources->ApplyResources(this->tboxGuideErrorInfo, L"tboxGuideErrorInfo");
resources->ApplyResources(this->gboxErrorTiming, L"gboxErrorTiming");
resources->ApplyResources(this->rErrorCurrent, L"rErrorCurrent");
resources->ApplyResources(this->rErrorReading, L"rErrorReading");
resources->ApplyResources(this->labWarn, L"labWarn");
resources->ApplyResources(this->labError, L"labError");
resources->ApplyResources(this->gridWarn, L"gridWarn");
resources->ApplyResources(this->gridError, L"gridError");
resources->ApplyResources(this->labFile, L"labFile");
resources->ApplyResources(this->labAssemblyVersion, L"labAssemblyVersion");
resources->ApplyResources(this->colErrorName, L"colErrorName");
resources->ApplyResources(this->colErrorBegin, L"colErrorBegin");
resources->ApplyResources(this->colErrorEnd, L"colErrorEnd");
resources->ApplyResources(this->colErrorCause, L"colErrorCause");
resources->ApplyResources(this->colWarnName, L"colWarnName");
resources->ApplyResources(this->colWarnBegin, L"colWarnBegin");
resources->ApplyResources(this->colWarnEnd, L"colWarnEnd");
resources->ApplyResources(this->colWarnCause, L"colWarnCause");
resources->ApplyResources(this->rPurposeCardProduction, L"rPurposeCardProduction");
resources->ApplyResources(this->rPurposeCardTouchTryDS, L"rPurposeCardTouchTryDS");
resources->ApplyResources(this->rPurposeCardDistribution, L"rPurposeCardDistribution");
resources->ApplyResources(this->rPurposeCardKiosk, L"rPurposeCardKiosk");
resources->ApplyResources(this->rPurposeDSiWare, L"rPurposeDSiWare");
resources->ApplyResources(this->rPurposeOther, L"rPurposeOther");
resources->ApplyResources(this->gboxPurposeCard, L"gboxPurposeCard");
resources->ApplyResources(this->gboxPurposeNand, L"gboxPurposeNand");
resources->ApplyResources(this->gboxPurpose, L"gboxPurpose");
resources->ApplyResources(this->labPurposeInError, L"labPurposeInError");
resources->ApplyResources(this->labPrivateSaveDataPurpose, L"labPrivateSaveDataPurpose");
resources->ApplyResources(this->tboxWarningPrivateSaveDataPurpose, L"tboxWarningPrivateSaveDataPurpose");
resources->ApplyResources(this, L"$this");
// テキストボックスの表記を変更
if( !System::String::IsNullOrEmpty( this->tboxFile->Text ) )
{
this->setSrlFormsTextBox();
}
// 中国用特別メッセージ
// デフォルトでVisible=falseなのでリソースを読み込みなおすと表示されていてもVisible=falseに初期化されてしまうため
// いったん退避しておく必要がある
bool visible = this->tboxWarningChinaRating->Visible;
resources->ApplyResources(this->tboxWarningChinaRating, L"tboxWarningChinaRating");
this->tboxWarningChinaRating->Visible = visible;
// コンボボックスやテキストボックスの中身の表示を更新する
this->combBackup_SelectedIndexChanged( nullptr, nullptr );
this->cboxReleaseForeign_CheckedChanged( nullptr, nullptr );
this->cboxIsInputPerson2_CheckedChanged( nullptr, nullptr );
//this->rUsageOther_CheckedChanged( nullptr, nullptr );
this->tabMain_SelectedIndexChanged( nullptr, nullptr );
// 「レーティング表示不要」にチェックが入っているときのみレーティングのコンボボックスのテキストを変更
// (それ以外のときにはApplyResourcesで自動的に切り替わる)
if( this->cboxIsUnnecessaryRating->Checked )
{
this->unnecessaryRating( this->combCERO );
this->unnecessaryRating( this->combESRB );
this->unnecessaryRating( this->combUSK );
this->unnecessaryRating( this->combPEGI );
this->unnecessaryRating( this->combPEGI_PRT );
this->unnecessaryRating( this->combPEGI_BBFC );
this->unnecessaryRating( this->combOFLC );
this->unnecessaryRating( this->combGRB );
}
// 「Privateセーブデータの用途」欄の表示切り替え
if( !this->tboxPrivateSaveDataPurpose->Enabled )
{
if( this->isJapanese() )
{
this->tboxPrivateSaveDataPurpose->Text = "なし";
}
else
{
this->tboxPrivateSaveDataPurpose->Text = "None";
}
}
// フォームのEnableやVisibleを切り替え
this->changeFormInput( langname );
// 複数行表示の改行を挿入
this->tboxGuideRomEditInfo->Text = this->tboxGuideRomEditInfo->Text->Replace( "<newline>", "\r\n" );
this->tboxGuideNandSizeInfo->Text = this->tboxGuideNandSizeInfo->Text->Replace( "<newline>", "\r\n" );
this->tboxGuideErrorInfo->Text = this->tboxGuideErrorInfo->Text->Replace( "<newline>", "\r\n" );
// バージョンがなくなるので再設定
System::Reflection::Assembly ^ass = System::Reflection::Assembly::GetEntryAssembly();
this->labAssemblyVersion->Text = "ver." + this->getVersion();
// アプリ種別をつける
System::String ^appstr = nullptr;
#ifdef METWL_VER_APPTYPE_LAUNCHER
appstr += "Launcher/";
#endif
#ifdef METWL_VER_APPTYPE_SECURE
appstr += "Secure/";
#endif
#ifdef METWL_VER_APPTYPE_SYSTEM
appstr += "System/";
#endif
if( appstr != nullptr)
{
this->Text += " [ Supported App: " + appstr + "User ]";
}
// カルチャを戻す
System::Threading::Thread::CurrentThread->CurrentUICulture = gcnew System::Globalization::CultureInfo(this->hDefaultCultureName,true);
}
// end of file

View File

@ -0,0 +1,192 @@
// ----------------------------------------------
// ミドルウェアリストの書き出し
// ----------------------------------------------
#include "stdafx.h"
#include <apptype.h>
#include "common.h"
#include "srl.h"
#include "deliverable.h"
#include "crc_whole.h"
#include "utility.h"
#include "lang.h"
#include "split_tad.h"
#include "FormError.h"
#include "Form1.h"
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace MasterEditorTWL;
// ----------------------------------------------
// XML形式のリストに付属させるタイトル情報の作成
// ----------------------------------------------
System::Xml::XmlElement^ Form1::makeGameInfoXmlElement(System::Xml::XmlDocument ^doc)
{
System::Xml::XmlElement ^game = doc->CreateElement( "game" );
if( System::String::IsNullOrEmpty( this->tboxProductName->Text ) )
{
MasterEditorTWL::appendXmlTag( doc, game, "product-name", this->tboxTitleName->Text ); // 製品名が未入力のときはソフトタイトルで代用
}
else
{
MasterEditorTWL::appendXmlTag( doc, game, "product-name", this->tboxProductName->Text );
}
MasterEditorTWL::appendXmlTag( doc, game, "title-name", this->tboxTitleName->Text );
MasterEditorTWL::appendXmlTag( doc, game, "game-code", this->tboxGameCode->Text );
MasterEditorTWL::appendXmlTag( doc, game, "rom-version", this->tboxRemasterVer->Text );
MasterEditorTWL::appendXmlTag( doc, game, "submit-version", System::Decimal::ToByte(this->numSubmitVersion->Value).ToString("X") );
return game;
}
// ----------------------------------------------
// XML形式のリストの本体となるミドルウェアリストの作成(他でも使うので独立させる)
// ----------------------------------------------
System::Xml::XmlElement^ Form1::makeMiddlewareListXmlElement(System::Xml::XmlDocument ^doc, bool isCount)
{
int NodeCount = 0;
System::Xml::XmlElement ^midlist = doc->CreateElement( "middleware-list" );
if( this->hSrl->hLicenseList != nullptr )
{
for each( RCLicense ^lic in this->hSrl->hLicenseList )
{
System::Xml::XmlElement ^mid = doc->CreateElement( "middleware" );
if( isCount )
{
mid->SetAttribute( "num", ( NodeCount++ ).ToString() );
}
MasterEditorTWL::appendXmlTag( doc, mid, "publisher", lic->Publisher );
MasterEditorTWL::appendXmlTag( doc, mid, "name", lic->Name );
System::String ^note = "";
if( this->isJapanese() )
{
note = this->hMiddlewareNameList->search(lic->Publisher, lic->Name, true );
}
else
{
note = this->hMiddlewareNameList->search(lic->Publisher, lic->Name, false );
}
if( note == nullptr )
{
note = "";
}
MasterEditorTWL::appendXmlTag( doc, mid, "note", note );
midlist->AppendChild( mid );
}
}
return midlist;
}
// ----------------------------------------------
// XML形式のリストを作成
// ----------------------------------------------
System::Void Form1::makeMiddlewareListXml(System::Xml::XmlDocument^ doc)
{
System::Xml::XmlElement ^root = doc->CreateElement( "twl-master-editor" );
System::Reflection::Assembly ^ass = System::Reflection::Assembly::GetEntryAssembly();
root->SetAttribute( "version", this->getVersion() );
doc->AppendChild( root );
// ゲーム情報
root->AppendChild( this->makeGameInfoXmlElement(doc) );
// ミドルウェアリスト
root->AppendChild( this->makeMiddlewareListXmlElement(doc, false) );
}
// ----------------------------------------------
// XML形式で書き出し
// ----------------------------------------------
System::Boolean Form1::saveMiddlewareListXml( System::String ^filename )
{
System::Xml::XmlDocument ^doc = gcnew System::Xml::XmlDocument();
doc->AppendChild( doc->CreateXmlDeclaration("1.0","UTF-8",nullptr) );
this->makeMiddlewareListXml( doc );
try
{
doc->Save( filename );
}
catch ( System::Exception ^ex )
{
(void)ex;
return false;
}
return true;
}
// ----------------------------------------------
// XSL埋め込みXML形式で書き出し
// ----------------------------------------------
System::Boolean Form1::saveMiddlewareListXmlEmbeddedXsl( System::String ^filename )
{
System::Xml::XmlDocument ^doc = gcnew System::Xml::XmlDocument();
doc->AppendChild( doc->CreateXmlDeclaration("1.0","UTF-8",nullptr) );
// XSLを埋め込むための宣言たち
System::Xml::XmlProcessingInstruction ^proc = doc->CreateProcessingInstruction( "xml-stylesheet", "type='text/xml' href='#stylesheet'" );
doc->AppendChild( proc );
System::Xml::XmlDocumentType ^doctype = doc->CreateDocumentType( "twl-master-editor", nullptr, nullptr, "<!ATTLIST xsl:stylesheet id ID #REQUIRED>" );
doc->AppendChild( doctype );
this->makeMiddlewareListXml( doc );
// 埋め込みスタイルシート
System::Xml::XmlDocument ^xsl = gcnew System::Xml::XmlDocument();
System::Xml::XmlElement ^root = doc->DocumentElement;
try
{
xsl->Load( this->getMiddlewareListStyleFileEmbedded() );
root->AppendChild( doc->ImportNode(xsl->DocumentElement, true) );
}
catch ( System::Exception ^ex )
{
(void)ex;
return false;
}
try
{
doc->Save( filename );
}
catch ( System::Exception ^ex )
{
(void)ex;
return false;
}
return true;
}
// ----------------------------------------------
// HTML形式で書き出し(XML->HTML変換)
// ----------------------------------------------
System::Boolean Form1::saveMiddlewareListHtml( System::String ^filename )
{
System::Xml::Xsl::XslCompiledTransform ^xslt = gcnew System::Xml::Xsl::XslCompiledTransform;
System::String ^tmpxml = gcnew System::String( this->getMiddlewareListTmpFile() );
if( !saveMiddlewareListXml(tmpxml) )
{
return false;
}
try
{
xslt->Load( this->getMiddlewareListStyleFile() );
xslt->Transform( tmpxml, filename );
}
catch (System::Exception ^s)
{
(void)s;
System::IO::File::Delete( tmpxml );
return false;
}
System::IO::File::Delete( tmpxml );
return true;
}

View File

@ -0,0 +1,506 @@
// ---------------------------------------------------------------------
// リージョンとレーティング設定
// ---------------------------------------------------------------------
#include "stdafx.h"
#include <apptype.h>
#include "common.h"
#include "srl.h"
#include "deliverable.h"
#include "crc_whole.h"
#include "utility.h"
#include "lang.h"
#include "FormError.h"
#include "Form1.h"
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace MasterEditorTWL;
// =====================================================================
// リージョン
// =====================================================================
// ---------------------------------------------------------------------
// GUIのコンボボックスからROMヘッダのリージョンコードを決定する
// ---------------------------------------------------------------------
void Form1::setRegionSrlPropaties(void)
{
this->hSrl->IsRegionJapan = false;
this->hSrl->IsRegionAmerica = false;
this->hSrl->IsRegionEurope = false;
this->hSrl->IsRegionAustralia = false;
// 中国版と韓国版はリージョン変更させない
if( this->combRegion->DropDownStyle == System::Windows::Forms::ComboBoxStyle::DropDown ) // コンボボックスが中韓設定用になっているとき
{
return;
}
// ALLリージョンのとき中韓ビットも立っているので中韓ビットを落としておく必要がある
this->hSrl->IsRegionChina = false;
this->hSrl->IsRegionKorea = false;
switch( this->combRegion->SelectedIndex )
{
case 0:
this->hSrl->IsRegionJapan = true;
break;
case 1:
this->hSrl->IsRegionAmerica = true;
break;
case 2:
this->hSrl->IsRegionEurope = true;
break;
case 3:
this->hSrl->IsRegionAustralia = true;
break;
case 4:
this->hSrl->IsRegionEurope = true;
this->hSrl->IsRegionAustralia = true;
break;
case 5:
this->hSrl->IsRegionAmerica = true;
this->hSrl->IsRegionAustralia = true;
break;
case 6:
this->hSrl->IsRegionAmerica = true;
this->hSrl->IsRegionEurope = true;
this->hSrl->IsRegionAustralia = true;
break;
case 7:
this->hSrl->IsRegionJapan = true;
this->hSrl->IsRegionAmerica = true;
this->hSrl->IsRegionEurope = true;
this->hSrl->IsRegionAustralia = true;
this->hSrl->IsRegionKorea = true;
break;
// 中韓は設定不可
#if defined(METWL_VER_APPTYPE_SYSTEM) || defined(METWL_VER_APPTYPE_SECURE) || defined(METWL_VER_APPTYPE_LAUNCHER)
case 8:
this->hSrl->IsRegionJapan = true;
this->hSrl->IsRegionAmerica = true;
this->hSrl->IsRegionEurope = true;
this->hSrl->IsRegionAustralia = true;
this->hSrl->IsRegionKorea = true;
this->hSrl->IsRegionChina = true;
break;
#endif //defined(METWL_VER_APPTYPE_SYSTEM) || defined(METWL_VER_APPTYPE_SECURE) || defined(METWL_VER_APPTYPE_LAUNCHER)
default:
break;
}
}
// ---------------------------------------------------------------------
// ROMヘッダのリージョンコードからGUIのコンボボックスの値を決定する
// ---------------------------------------------------------------------
void Form1::setRegionForms(void)
{
System::Boolean isJapan = this->hSrl->IsRegionJapan; // リージョン
System::Boolean isAmerica = this->hSrl->IsRegionAmerica;
System::Boolean isEurope = this->hSrl->IsRegionEurope;
System::Boolean isAustralia = this->hSrl->IsRegionAustralia;
System::Boolean isKorea = this->hSrl->IsRegionKorea;
System::Boolean isChina = this->hSrl->IsRegionChina;
// 中韓のときコンボボックスを編集不可にする
if( !isJapan && !isAmerica && !isEurope && !isAustralia && !isKorea && isChina ) // 中国
{
this->combRegion->DropDownStyle = System::Windows::Forms::ComboBoxStyle::DropDown; // 自由にテキストを入力できる
this->combRegion->SelectedIndex = -1; // 設定の順序に注意: テキストの設定よりも前に入れておかないとテキスト入力が反映されないことがある
this->combRegion->Text = this->isJapanese()?METWL_STRING_CHINA_REGION_J:METWL_STRING_CHINA_REGION_E;
this->combRegion->Enabled = false; // 編集不可
}
else if( !isJapan && !isAmerica && !isEurope && !isAustralia && isKorea && !isChina ) // 韓国
{
this->combRegion->DropDownStyle = System::Windows::Forms::ComboBoxStyle::DropDown;
this->combRegion->SelectedIndex = -1;
this->combRegion->Text = this->isJapanese()?METWL_STRING_KOREA_REGION_J:METWL_STRING_KOREA_REGION_E;
this->combRegion->Enabled = false;
}
else // WorldWide
{
// 選択可能にする
this->combRegion->Enabled = true;
this->combRegion->DropDownStyle = System::Windows::Forms::ComboBoxStyle::DropDownList; // リストの中から選択しかできない
// コンボボックスのデフォルトの選択値を決定
System::Int32 index = -1;
if( isJapan && !isAmerica && !isEurope && !isAustralia && !isKorea && !isChina )
index = 0;
else if( !isJapan && isAmerica && !isEurope && !isAustralia && !isKorea && !isChina )
index = 1;
else if( !isJapan && !isAmerica && isEurope && !isAustralia && !isKorea && !isChina )
index = 2;
else if( !isJapan && !isAmerica && !isEurope && isAustralia && !isKorea && !isChina )
index = 3;
else if( !isJapan && !isAmerica && isEurope && isAustralia && !isKorea && !isChina )
index = 4;
else if( !isJapan && isAmerica && !isEurope && isAustralia && !isKorea && !isChina )
index = 5;
else if( !isJapan && isAmerica && isEurope && isAustralia && !isKorea && !isChina )
index = 6;
else if( isJapan && isAmerica && isEurope && isAustralia && isKorea && !isChina )
index = 7;
#if defined(METWL_VER_APPTYPE_SYSTEM) || defined(METWL_VER_APPTYPE_SECURE) || defined(METWL_VER_APPTYPE_LAUNCHER)
if( isJapan && isAmerica && isEurope && isAustralia && isKorea && isChina )
index = 8;
#endif
this->combRegion->SelectedIndex = index;
}
this->maskRatingForms(); // ペアレンタルコントロール用フォームの表示/非表示切り替え
}
// ---------------------------------------------------------------------
// リージョンのフォームに問題がないかをチェックする
// ---------------------------------------------------------------------
void Form1::checkRegionForms(void)
{
// 中韓のときにはリージョン選択できないのでコンボボックスが選択されているかのチェックは必要なし
if( this->combRegion->DropDownStyle == System::Windows::Forms::ComboBoxStyle::DropDownList )
{
this->checkComboBoxIndex( this->combRegion, "LabelRegion", true );
}
}
// =====================================================================
// レーティング
// =====================================================================
// ---------------------------------------------------------------------
// ROMヘッダのレーティング情報からGUIのコンボボックスを設定する
// ---------------------------------------------------------------------
void Form1::setRatingSrlProperties(void)
{
// 各団体のフォーム入力を反映
this->hSrl->hArrayParentalIndex[ OS_TWL_PCTL_OGN_CERO ] = this->combCERO->SelectedIndex;
this->hSrl->hArrayParentalIndex[ OS_TWL_PCTL_OGN_ESRB ] = this->combESRB->SelectedIndex;
this->hSrl->hArrayParentalIndex[ OS_TWL_PCTL_OGN_USK ] = this->combUSK->SelectedIndex;
this->hSrl->hArrayParentalIndex[ OS_TWL_PCTL_OGN_PEGI_GEN ] = this->combPEGI->SelectedIndex;
this->hSrl->hArrayParentalIndex[ OS_TWL_PCTL_OGN_PEGI_PRT ] = this->combPEGI_PRT->SelectedIndex;
this->hSrl->hArrayParentalIndex[ OS_TWL_PCTL_OGN_PEGI_BBFC ] = this->combPEGI_BBFC->SelectedIndex;
this->hSrl->hArrayParentalIndex[ OS_TWL_PCTL_OGN_AGCB ] = this->combOFLC->SelectedIndex;
this->hSrl->hArrayParentalIndex[ OS_TWL_PCTL_OGN_GRB] = this->combGRB->SelectedIndex;
// レーティング表示不要かどうかを設定
this->hSrl->IsUnnecessaryRating = this->cboxIsUnnecessaryRating->Checked;
} //setRatingSrlProperties()
// ---------------------------------------------------------------------
// GUIのコンボボックスの選択をROMヘッダに反映させる
// ---------------------------------------------------------------------
void Form1::setRatingForms(void)
{
// レーティング表示不要かどうかを判断
this->cboxIsUnnecessaryRating->Checked = this->hSrl->IsUnnecessaryRating;
this->changeUnnecessaryRatingForms( true ); // 不要かどうかに応じてフォームを設定
// 各団体のコンボボックスのインデックスを設定
this->combCERO->SelectedIndex = this->hSrl->hArrayParentalIndex[ OS_TWL_PCTL_OGN_CERO ];
this->combESRB->SelectedIndex = this->hSrl->hArrayParentalIndex[ OS_TWL_PCTL_OGN_ESRB ];
this->combUSK->SelectedIndex = this->hSrl->hArrayParentalIndex[ OS_TWL_PCTL_OGN_USK ];
this->combPEGI->SelectedIndex = this->hSrl->hArrayParentalIndex[ OS_TWL_PCTL_OGN_PEGI_GEN ];
this->combPEGI_PRT->SelectedIndex = this->hSrl->hArrayParentalIndex[ OS_TWL_PCTL_OGN_PEGI_PRT ];
this->combPEGI_BBFC->SelectedIndex = this->hSrl->hArrayParentalIndex[ OS_TWL_PCTL_OGN_PEGI_BBFC ];
this->combOFLC->SelectedIndex = this->hSrl->hArrayParentalIndex[ OS_TWL_PCTL_OGN_AGCB ];
this->combGRB->SelectedIndex = this->hSrl->hArrayParentalIndex[ OS_TWL_PCTL_OGN_GRB ];
} //setRatingForms()
// ---------------------------------------------------------------------
// GUIで表示するレーティング団体をリージョンによって変える
// ---------------------------------------------------------------------
void Form1::maskRatingForms(void)
{
this->enableRating( this->combCERO, this->labCERO, nullptr );
this->enableRating( this->combESRB, this->labESRB, nullptr );
this->enableRating( this->combUSK, this->labUSK, nullptr );
this->enableRating( this->combPEGI, this->labPEGI, nullptr );
this->enableRating( this->combPEGI_PRT, this->labPEGI_PRT, nullptr );
this->enableRating( this->combPEGI_BBFC, this->labPEGI_BBFC, nullptr );
this->enableRating( this->combOFLC, this->labOFLC, nullptr );
this->enableRating( this->combGRB, this->labGRB, nullptr );
// 中韓リージョンは設定不可なので特別処理
this->tboxWarningChinaRating->Visible = false;
if( (this->combRegion->DropDownStyle == System::Windows::Forms::ComboBoxStyle::DropDown) // コンボボックスが中韓リージョン用になっているとき
&& this->hSrl->IsRegionChina ) // SRLが読み込まれていることは保証される
{
this->tboxWarningChinaRating->Visible = true; // 中国用の特別メッセージを表示する
// 中国にレーティング団体なし
this->disableRating( this->combCERO, this->labCERO, nullptr );
this->disableRating( this->combESRB, this->labESRB, nullptr );
this->disableRating( this->combUSK, this->labUSK, nullptr );
this->disableRating( this->combPEGI, this->labPEGI, nullptr );
this->disableRating( this->combPEGI_PRT, this->labPEGI_PRT, nullptr );
this->disableRating( this->combPEGI_BBFC, this->labPEGI_BBFC, nullptr );
this->disableRating( this->combOFLC, this->labOFLC, nullptr );
this->disableRating( this->combGRB, this->labGRB, nullptr );
}
else if( (this->combRegion->DropDownStyle == System::Windows::Forms::ComboBoxStyle::DropDown)
&& this->hSrl->IsRegionKorea )
{
// 韓国はGRBのみ
this->disableRating( this->combCERO, this->labCERO, nullptr );
this->disableRating( this->combESRB, this->labESRB, nullptr );
this->disableRating( this->combUSK, this->labUSK, nullptr );
this->disableRating( this->combPEGI, this->labPEGI, nullptr );
this->disableRating( this->combPEGI_PRT, this->labPEGI_PRT, nullptr );
this->disableRating( this->combPEGI_BBFC, this->labPEGI_BBFC, nullptr );
this->disableRating( this->combOFLC, this->labOFLC, nullptr );
this->enableRating( this->combGRB, this->labGRB, nullptr );
}
else
{
switch( this->combRegion->SelectedIndex )
{
case 0:
// 日本
this->enableRating( this->combCERO, this->labCERO, nullptr );
this->disableRating( this->combESRB, this->labESRB, nullptr );
this->disableRating( this->combUSK, this->labUSK, nullptr );
this->disableRating( this->combPEGI, this->labPEGI, nullptr );
this->disableRating( this->combPEGI_PRT, this->labPEGI_PRT, nullptr );
this->disableRating( this->combPEGI_BBFC, this->labPEGI_BBFC, nullptr );
this->disableRating( this->combOFLC, this->labOFLC, nullptr );
this->disableRating( this->combGRB, this->labGRB, nullptr );
break;
case 1:
// 北米
this->disableRating( this->combCERO, this->labCERO, nullptr );
this->enableRating( this->combESRB, this->labESRB, nullptr );
this->disableRating( this->combUSK, this->labUSK, nullptr );
this->disableRating( this->combPEGI, this->labPEGI, nullptr );
this->disableRating( this->combPEGI_PRT, this->labPEGI_PRT, nullptr );
this->disableRating( this->combPEGI_BBFC, this->labPEGI_BBFC, nullptr );
this->disableRating( this->combOFLC, this->labOFLC, nullptr );
this->disableRating( this->combGRB, this->labGRB, nullptr );
break;
case 2:
// 欧州
this->disableRating( this->combCERO, this->labCERO, nullptr );
this->disableRating( this->combESRB, this->labESRB, nullptr );
this->enableRating( this->combUSK, this->labUSK, nullptr );
this->enableRating( this->combPEGI, this->labPEGI, nullptr );
this->enableRating( this->combPEGI_PRT, this->labPEGI_PRT, nullptr );
this->enableRating( this->combPEGI_BBFC, this->labPEGI_BBFC, nullptr );
this->disableRating( this->combOFLC, this->labOFLC, nullptr );
this->disableRating( this->combGRB, this->labGRB, nullptr );
break;
case 3:
// 豪州
this->disableRating( this->combCERO, this->labCERO, nullptr );
this->disableRating( this->combESRB, this->labESRB, nullptr );
this->disableRating( this->combUSK, this->labUSK, nullptr );
this->disableRating( this->combPEGI, this->labPEGI, nullptr );
this->disableRating( this->combPEGI_PRT, this->labPEGI_PRT, nullptr );
this->disableRating( this->combPEGI_BBFC, this->labPEGI_BBFC, nullptr );
this->enableRating( this->combOFLC, this->labOFLC, nullptr );
this->disableRating( this->combGRB, this->labGRB, nullptr );
break;
case 4:
// 欧州と豪州
this->disableRating( this->combCERO, this->labCERO, nullptr );
this->disableRating( this->combESRB, this->labESRB, nullptr );
this->enableRating( this->combUSK, this->labUSK, nullptr );
this->enableRating( this->combPEGI, this->labPEGI, nullptr );
this->enableRating( this->combPEGI_PRT, this->labPEGI_PRT, nullptr );
this->enableRating( this->combPEGI_BBFC, this->labPEGI_BBFC, nullptr );
this->enableRating( this->combOFLC, this->labOFLC, nullptr );
this->disableRating( this->combGRB, this->labGRB, nullptr );
break;
case 5:
// 北米と豪州
this->disableRating( this->combCERO, this->labCERO, nullptr );
this->enableRating( this->combESRB, this->labESRB, nullptr );
this->disableRating( this->combUSK, this->labUSK, nullptr );
this->disableRating( this->combPEGI, this->labPEGI, nullptr );
this->disableRating( this->combPEGI_PRT, this->labPEGI_PRT, nullptr );
this->disableRating( this->combPEGI_BBFC, this->labPEGI_BBFC, nullptr );
this->enableRating( this->combOFLC, this->labOFLC, nullptr );
this->disableRating( this->combGRB, this->labGRB, nullptr );
break;
case 6:
// 北米と欧州と豪州
this->disableRating( this->combCERO, this->labCERO, nullptr );
this->enableRating( this->combESRB, this->labESRB, nullptr );
this->enableRating( this->combUSK, this->labUSK, nullptr );
this->enableRating( this->combPEGI, this->labPEGI, nullptr );
this->enableRating( this->combPEGI_PRT, this->labPEGI_PRT, nullptr );
this->enableRating( this->combPEGI_BBFC, this->labPEGI_BBFC, nullptr );
this->enableRating( this->combOFLC, this->labOFLC, nullptr );
this->disableRating( this->combGRB, this->labGRB, nullptr );
break;
// 全リージョンのときは何もdisableにしない
default:
break;
}// switch
}
} //maskRatingForms()
// ---------------------------------------------------------------------
// GUIのレーティング設定に問題がないかチェックする
// ---------------------------------------------------------------------
void Form1::checkRatingForms( System::Boolean inRegion, System::Windows::Forms::ComboBox ^comb, System::String ^ogn )
{
// リージョンに含まれていないとき: 0クリアが保証されるのでチェック必要なし
if( !inRegion )
return;
// 設定されていないときエラー
if( (comb->SelectedIndex < 0) || (comb->SelectedIndex >= comb->Items->Count) )
{
this->hErrorList->Add( this->makeErrorMsg(true, "LabelRating", "RatingInput", ogn) );
}
// 審査中のとき警告
if( comb->SelectedIndex == (comb->Items->Count - 1) )
{
this->hWarnList->Add( this->makeErrorMsg(true, "LabelRating", "RatingPendingSelect", ogn) );
}
} //checkRatingForms()
// ---------------------------------------------------------------------
// 「レーティング表示不要」が選択されたかどうかでコンボボックスの内容を変える
// ROM読み込み時および「レーティング表示不要」チェックボックスに変化があったときに呼び出される
// ---------------------------------------------------------------------
void Form1::changeUnnecessaryRatingForms( System::Boolean bInitial )
{
if( this->cboxIsUnnecessaryRating->Checked )
{
this->unnecessaryRating( this->combCERO ); // 表示/非表示の選択は別のところでするのでここでは全団体を不要にしてもかまわない
this->unnecessaryRating( this->combESRB );
this->unnecessaryRating( this->combUSK );
this->unnecessaryRating( this->combPEGI );
this->unnecessaryRating( this->combPEGI_PRT );
this->unnecessaryRating( this->combPEGI_BBFC );
this->unnecessaryRating( this->combOFLC );
this->unnecessaryRating( this->combGRB );
}
else
{
this->necessaryRating( this->combCERO, bInitial );
this->necessaryRating( this->combESRB, bInitial );
this->necessaryRating( this->combUSK, bInitial );
this->necessaryRating( this->combPEGI, bInitial );
this->necessaryRating( this->combPEGI_PRT, bInitial );
this->necessaryRating( this->combPEGI_BBFC, bInitial );
this->necessaryRating( this->combOFLC, bInitial );
this->necessaryRating( this->combGRB, bInitial );
}
}
// ---------------------------------------------------------------------
// レーティングのコンボボックスをクリアする
// ---------------------------------------------------------------------
void Form1::clearRating( System::Windows::Forms::ComboBox ^comb )
{
comb->SelectedIndex = -1; // 空白にする
}
// ---------------------------------------------------------------------
// レーティングのコンボボックスを編集可能な状態にする
// ---------------------------------------------------------------------
void Form1::enableRating( System::Windows::Forms::ComboBox ^comb,
System::Windows::Forms::Label ^lab1,
System::Windows::Forms::Label ^lab2 )
{
comb->Enabled = true;
comb->Visible = true;
lab1->Visible = true;
if( lab2 != nullptr )
{
lab2->Visible = true;
}
// 提出確認書にレーティングを記述する際に「団体がリージョンに含まれているかどうか」の情報が必要となる
// comb->Enableは編集可能かどうかを表すので
// リージョンに含まれているかどうかの情報として使えるように思えるが
//「レーティング表示不要」でcomb->Enabledをfalseにしなければならないので
// リージョンに含まれているのかをcomb->Enabledを使って判定できない
// (comb->Visibleが使えそうだが残念ながら別のタブに移動すると勝手にfalseになってしまう)
// そのため無関係な設定を変えることでリージョンに含まれていることを表現する
comb->FlatStyle = System::Windows::Forms::FlatStyle::Standard;
}
// ---------------------------------------------------------------------
// レーティングのコンボボックスを編集不可状態にする
// ---------------------------------------------------------------------
void Form1::disableRating( System::Windows::Forms::ComboBox ^comb,
System::Windows::Forms::Label ^lab1,
System::Windows::Forms::Label ^lab2 )
{
this->clearRating( comb );
comb->Enabled = false;
comb->Visible = false;
lab1->Visible = false;
if( lab2 != nullptr )
{
lab2->Visible = false;
}
// リージョンに含まれないことを表現 (表示が消えるのでこの値が変わっても問題ない)
comb->FlatStyle = System::Windows::Forms::FlatStyle::Popup;
}
// ---------------------------------------------------------------------
// レーティングのコンボボックスに「レーティング表示不要」と表示し
// 編集不可状態にする
// ---------------------------------------------------------------------
void Form1::unnecessaryRating( System::Windows::Forms::ComboBox ^comb )
{
comb->DropDownStyle = System::Windows::Forms::ComboBoxStyle::DropDown; // 自由なテキストを表示可能にする
comb->SelectedIndex = -1; // 何も選択されていないとみなす
System::String ^msg = this->isJapanese()?METWL_STRING_UNNECESSARY_RATING_J:METWL_STRING_UNNECESSARY_RATING_E;
comb->Text = msg;
comb->Enabled = false; // 編集不可能にする
}
// ---------------------------------------------------------------------
// レーティングのコンボボックスの「レーティング表示不要」の表示をクリアし
// 編集可能状態にする
// ---------------------------------------------------------------------
void Form1::necessaryRating( System::Windows::Forms::ComboBox ^comb, System::Boolean bInitial )
{
comb->DropDownStyle = System::Windows::Forms::ComboBoxStyle::DropDownList; // リストの中からしか選択できないようにする
if( !bInitial )
{
comb->SelectedIndex = -1; // ROM読み込み時の場合にはコンボボックスを初期化しない(せっかく読み込んだ情報を消してしまうため)
// GUI上で変更したときには空白に初期化する(再度設定させる)
}
comb->Enabled = true; // 編集可能にする
}
// end of file

View File

@ -0,0 +1,338 @@
// ----------------------------------------------
// ROM情報リストの書き出し
// ----------------------------------------------
#include "stdafx.h"
#include "Form1.h"
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace MasterEditorTWL;
static int s_NodeCount = 0;
// ======================================================
// XMLの一要素を作成
// ======================================================
static System::Xml::XmlElement^ CreateRomInfoListElement(System::Xml::XmlDocument ^doc,
System::String ^label, System::String ^val, System::String ^type)
{
System::Xml::XmlElement ^tag = doc->CreateElement("info");
tag->SetAttribute( "num", ( s_NodeCount++ ).ToString() );
MasterEditorTWL::appendXmlTag( doc, tag, "label", label );
MasterEditorTWL::appendXmlTag( doc, tag, "value", val );
if( type )
{
MasterEditorTWL::appendXmlTag( doc, tag, "type", type );
}
return tag;
}
static System::Xml::XmlElement^ CreateRomInfoListElement(System::Xml::XmlDocument ^doc,
System::String ^label, System::Boolean isCheck, System::String ^type)
{
System::Xml::XmlElement ^tag = doc->CreateElement("info");
tag->SetAttribute( "num", ( s_NodeCount++ ).ToString() );
MasterEditorTWL::appendXmlTag( doc, tag, "label", label );
MasterEditorTWL::appendXmlTag( doc, tag, "value", (isCheck)?"Yes":"No" );
if( type )
{
MasterEditorTWL::appendXmlTag( doc, tag, "type", type );
}
return tag;
}
static System::Xml::XmlElement^ CreateSpecialRomInfoListElement(System::Xml::XmlDocument ^doc,
System::String ^label, System::String ^val, System::String ^type)
{
System::Xml::XmlElement ^tag = doc->CreateElement("sp-info"); // 特別な値
tag->SetAttribute( "num", ( s_NodeCount++ ).ToString() );
MasterEditorTWL::appendXmlTag( doc, tag, "label", label );
MasterEditorTWL::appendXmlTag( doc, tag, "value", val );
if( type )
{
MasterEditorTWL::appendXmlTag( doc, tag, "type", type );
}
return tag;
}
static System::Xml::XmlElement^ CreateSDKVersionListElement(System::Xml::XmlDocument ^doc,
System::String ^version, System::Boolean isStatic)
{
System::Xml::XmlElement ^tag = doc->CreateElement("sdk-version");
tag->SetAttribute( "num", ( s_NodeCount++ ).ToString() );
MasterEditorTWL::appendXmlTag( doc, tag, "version", version );
MasterEditorTWL::appendXmlTag( doc, tag, "is-static", (isStatic)?"Main SDK":"" );
return tag;
}
// ======================================================
// XML形式でリストを作成
// ======================================================
void Form1::makeRomInfoListXml(System::Xml::XmlDocument ^doc, System::Boolean withError, System::Boolean isCurrent)
{
if( withError )
{
// エラー情報を最新に更新
this->hErrorList->Clear();
this->hWarnList->Clear();
this->checkSrlForms();
this->checkDeliverableForms();
}
System::Xml::XmlElement ^root = doc->CreateElement( "twl-master-editor" );
System::Reflection::Assembly ^ass = System::Reflection::Assembly::GetEntryAssembly();
root->SetAttribute( "version", this->getVersion() );
doc->AppendChild( root );
// ゲーム情報
root->AppendChild( this->makeGameInfoXmlElement(doc) );
// ファイルパス
MasterEditorTWL::appendXmlTag( doc, root, "path", this->tboxFile->Text );
// 作成日時
System::Xml::XmlElement ^time = doc->CreateElement( "time-info" );
System::DateTime ^ datetime = System::DateTime::Now;
time->SetAttribute( "year", datetime->Year.ToString() );
switch( datetime->Month )
{
case 1: time->SetAttribute( "month", "January" ); break;
case 2: time->SetAttribute( "month", "February" ); break;
case 3: time->SetAttribute( "month", "March" ); break;
case 4: time->SetAttribute( "month", "April" ); break;
case 5: time->SetAttribute( "month", "May" ); break;
case 6: time->SetAttribute( "month", "June" ); break;
case 7: time->SetAttribute( "month", "July" ); break;
case 8: time->SetAttribute( "month", "August" ); break;
case 9: time->SetAttribute( "month", "September" ); break;
case 10: time->SetAttribute( "month", "October" ); break;
case 11: time->SetAttribute( "month", "November" ); break;
case 12: time->SetAttribute( "month", "December" ); break;
default: time->SetAttribute( "month", datetime->Month.ToString() ); break;
}
time->SetAttribute( "day", datetime->Day.ToString() );
time->SetAttribute( "time", datetime->Hour.ToString("D2") + ":" + datetime->Minute.ToString("D2") );
root->AppendChild( time );
//
// 各タブごとに情報をまとめる
//
System::Xml::XmlElement ^section;
// ROM基本情報
section = doc->CreateElement("basic-rom-info");
MasterEditorTWL::appendXmlTag( doc, section, "index", this->isJapanese()?"ROM基本情報":"Basic ROM Info" );
{
s_NodeCount = 0;
System::Xml::XmlElement ^tag = doc->CreateElement("info-list");
tag->AppendChild( CreateRomInfoListElement(doc, this->labTitleName->Text, this->tboxTitleName->Text, nullptr) );
tag->AppendChild( CreateRomInfoListElement(doc, this->labGameCode->Text, this->tboxGameCode->Text, nullptr) );
tag->AppendChild( CreateRomInfoListElement(doc, this->labMakerCode->Text, this->tboxMakerCode->Text, nullptr) );
tag->AppendChild( CreateRomInfoListElement(doc, this->labPlatform->Text, this->tboxPlatform->Text, nullptr) );
tag->AppendChild( CreateRomInfoListElement(doc, this->labRomType->Text, this->tboxRomLatency->Text, nullptr) );
tag->AppendChild( CreateRomInfoListElement(doc, this->labRomSize->Text, this->tboxRomSize->Text, nullptr) );
tag->AppendChild( CreateRomInfoListElement(doc, this->labRemasterVer->Text, this->tboxRemasterVer->Text, nullptr) );
if( withError && !isCurrent ) // ver.1.8A で対応 (ROM読み込み時のときCRCを出力)
{
tag->AppendChild( CreateRomInfoListElement(doc, this->labHeaderCRC->Text, this->tboxHeaderCRC->Text, nullptr) );
tag->AppendChild( CreateRomInfoListElement(doc, this->labRomCRC->Text, this->tboxWholeCRC->Text, nullptr) );
}
tag->AppendChild( CreateSpecialRomInfoListElement(doc, this->labCaptionEx->Text, this->tboxCaptionEx->Text, nullptr) );
section->AppendChild(tag);
}
root->AppendChild(section);
// TWL拡張情報タブ
section = doc->CreateElement("twl-extended-info");
MasterEditorTWL::appendXmlTag( doc, section, "index", this->isJapanese()?"TWL拡張情報":"TWL Extended Info" );
{
s_NodeCount = 0;
System::Xml::XmlElement ^tag = doc->CreateElement("info-list");
tag->AppendChild( CreateRomInfoListElement(doc, this->labTitleIDLo->Text, this->tboxTitleIDLo->Text, nullptr) );
tag->AppendChild( CreateRomInfoListElement(doc, this->labTitleIDHi->Text, this->tboxTitleIDHi->Text, nullptr) );
tag->AppendChild( CreateRomInfoListElement(doc, this->labAppType->Text, this->tboxAppType->Text, nullptr) );
tag->AppendChild( CreateRomInfoListElement(doc, this->labAppTypeOther->Text, this->tboxAppTypeOther->Text, nullptr) );
tag->AppendChild( CreateRomInfoListElement(doc, this->labIsCodec->Text, this->tboxIsCodec->Text, nullptr) );
tag->AppendChild( CreateRomInfoListElement(doc, this->labKeyTableRomOffset->Text, this->tboxKeyTableRomOffset->Text, nullptr) );
//tag->AppendChild( CreateRomInfoListElement(doc, this->labNormalRomOffset->Text, this->tboxNormalRomOffset->Text, nullptr) );
tag->AppendChild( CreateRomInfoListElement(doc, this->cboxIsSubBanner->Text, this->cboxIsSubBanner->Checked, nullptr) );
tag->AppendChild( CreateRomInfoListElement(doc, this->cboxIsTmpJump->Text, this->cboxIsTmpJump->Checked, nullptr) );
tag->AppendChild( CreateRomInfoListElement(doc, this->cboxIsNormalJump->Text, this->cboxIsNormalJump->Checked, nullptr) );
tag->AppendChild( CreateRomInfoListElement(doc, this->cboxIsEULA->Text, this->cboxIsEULA->Checked, nullptr) );
tag->AppendChild( CreateRomInfoListElement(doc, this->labConnectIcon->Text, this->tboxConnectIcon->Text, nullptr) );
section->AppendChild(tag);
}
root->AppendChild(section);
// アクセス情報
section = doc->CreateElement("access-control-info");
MasterEditorTWL::appendXmlTag( doc, section, "index", this->isJapanese()?"アクセスコントロール情報":"Access Control" );
{
s_NodeCount = 0;
System::Xml::XmlElement ^tag = doc->CreateElement("info-list");
tag->AppendChild( CreateRomInfoListElement(doc, this->cboxIsSD->Text, this->cboxIsSD->Checked, nullptr) );
tag->AppendChild( CreateRomInfoListElement(doc, this->cboxIsNAND->Text, this->cboxIsNAND->Checked, nullptr) );
tag->AppendChild( CreateRomInfoListElement(doc, this->labSDAccessRight->Text, this->tboxSDAccessRight->Text, nullptr) );
tag->AppendChild( CreateRomInfoListElement(doc, this->labPhotoAccess->Text, this->tboxPhotoAccess->Text, nullptr) );
tag->AppendChild( CreateRomInfoListElement(doc, this->labAccessOther->Text, this->tboxAccessOther->Text, nullptr) );
section->AppendChild(tag);
}
root->AppendChild(section);
// DSiウェア情報
section = doc->CreateElement("dsi-ware-info");
MasterEditorTWL::appendXmlTag( doc, section, "index", this->isJapanese()?"DSiウェア情報":"DSiWare Info" );
{
s_NodeCount = 0;
System::Xml::XmlElement ^tag = doc->CreateElement("info-list");
tag->AppendChild( CreateRomInfoListElement(doc, this->labMedia->Text, this->tboxMedia->Text, nullptr) );
if( this->hSrl->IsNAND ) // カードアプリでは不要な情報
{
tag->AppendChild( CreateRomInfoListElement(doc, this->labSrlSize->Text, this->tboxSrlSizeFS->Text, nullptr) );
tag->AppendChild( CreateRomInfoListElement(doc, this->labPublicSize->Text, this->tboxPublicSizeFS->Text, nullptr) );
tag->AppendChild( CreateRomInfoListElement(doc, this->labPrivateSize->Text, this->tboxPrivateSizeFS->Text, nullptr) );
tag->AppendChild( CreateRomInfoListElement(doc, this->labSubBannerSize->Text, this->tboxSubBannerSizeFS->Text, nullptr) );
tag->AppendChild( CreateRomInfoListElement(doc, this->labTmdSize->Text, this->tboxTmdSizeFS->Text, nullptr) );
tag->AppendChild( CreateRomInfoListElement(doc, this->labSumSize->Text + " " + this->labSumSize2->Text,
this->tboxSumSize->Text + " (" + this->tboxSumSizeMB->Text->Replace( ',', '.' ) + ")", nullptr) );
}
section->AppendChild(tag);
}
root->AppendChild(section);
// リージョンとレーティング
section = doc->CreateElement("market-and-rating-info");
MasterEditorTWL::appendXmlTag( doc, section, "index", this->isJapanese()?"リージョンとレーティング":"Market and Rating" );
{
System::Xml::XmlElement ^tag = doc->CreateElement("info-list");
s_NodeCount = 0;
// リージョン
System::String ^region = "";
if( this->combRegion->DropDownStyle == System::Windows::Forms::ComboBoxStyle::DropDown )
{
// 中韓のときはリストで選択不可のテキストがコンボボックスに書かれているのでそれを登録
region = this->combRegion->Text;
}
else
{
// WorldWide のときはリストで選択可能な文字列を登録
if( this->combRegion->SelectedIndex < 0 )
{
region = this->isJapanese()?METWL_STRING_UNDEFINED_REGION_J:METWL_STRING_UNDEFINED_REGION_E; // 起こり得ない
}
else
{
// リストで選択されているテキストを登録
region = dynamic_cast<System::String^>(this->combRegion->SelectedItem);
}
}
tag->AppendChild( CreateRomInfoListElement(doc, this->labRegion->Text, region, nullptr) );
section->AppendChild(tag);
// レーティング
tag->AppendChild( CreateRomInfoListElement(doc, this->labCERO->Text,
this->setDeliverableRatingOgnProperties(this->combCERO), nullptr) );
tag->AppendChild( CreateRomInfoListElement(doc, this->labESRB->Text,
this->setDeliverableRatingOgnProperties(this->combESRB), nullptr) );
tag->AppendChild( CreateRomInfoListElement(doc, this->labUSK->Text,
this->setDeliverableRatingOgnProperties(this->combUSK), nullptr) );
tag->AppendChild( CreateRomInfoListElement(doc, this->labPEGI->Text,
this->setDeliverableRatingOgnProperties(this->combPEGI), nullptr) );
tag->AppendChild( CreateRomInfoListElement(doc, this->labPEGI_PRT->Text,
this->setDeliverableRatingOgnProperties(this->combPEGI_PRT), nullptr) );
tag->AppendChild( CreateRomInfoListElement(doc, this->labPEGI_BBFC->Text,
this->setDeliverableRatingOgnProperties(this->combPEGI_BBFC), nullptr) );
tag->AppendChild( CreateRomInfoListElement(doc, this->labOFLC->Text,
this->setDeliverableRatingOgnProperties(this->combOFLC), nullptr) );
tag->AppendChild( CreateRomInfoListElement(doc, this->labGRB->Text,
this->setDeliverableRatingOgnProperties(this->combGRB), nullptr) );
section->AppendChild(tag);
}
root->AppendChild(section);
//
// SDKバージョンは独立した表
//
section = doc->CreateElement("sdk-version-info");
MasterEditorTWL::appendXmlTag( doc, section, "index", this->isJapanese()?"SDKバージョン":"SDK Version" );
{
s_NodeCount = 0;
System::Xml::XmlElement ^tag = doc->CreateElement("sdk-version-list");
for each( RCSDKVersion ^sdk in this->hSrl->hSDKList )
{
tag->AppendChild( CreateSDKVersionListElement(doc, sdk->Version, sdk->IsStatic) );
}
section->AppendChild(tag);
}
root->AppendChild(section);
//
// ミドルウェアリストも独立した表
//
section = doc->CreateElement("middleware-info");
MasterEditorTWL::appendXmlTag( doc, section, "index", this->isJapanese()?"使用ライブラリ":"Libraries" );
section->AppendChild( this->makeMiddlewareListXmlElement(doc, true) );
root->AppendChild(section);
//
// エラー情報も独立した表
//
if( withError )
{
section = doc->CreateElement("error-info");
MasterEditorTWL::appendXmlTag( doc, section, "index", this->isJapanese()?"エラー":"Error" );
section->AppendChild( this->makeErrorListXmlElement(doc, isCurrent) );
section->AppendChild( this->makeErrorListCaptionXmlElement(doc) );
root->AppendChild(section);
section = doc->CreateElement("warning-info");
MasterEditorTWL::appendXmlTag( doc, section, "index", this->isJapanese()?"警告":"Warning" );
section->AppendChild( this->makeWarningListXmlElement(doc, isCurrent) );
section->AppendChild( this->makeErrorListCaptionXmlElement(doc) );
root->AppendChild(section);
section = doc->CreateElement("error-num-info");
section->SetAttribute( "error-title", this->isJapanese()?"エラー":"Error" );
section->SetAttribute( "error-num", this->countErrorListXmlElement( isCurrent ).ToString() );
section->SetAttribute( "warning-title", this->isJapanese()?"警告":"Warning" );
section->SetAttribute( "warning-num", this->countWarningListXmlElement( isCurrent ).ToString() );
root->AppendChild(section);
}
} //Form1::makeRomInfoListXml
// ======================================================
// HTML形式でファイルを出力
// ======================================================
void Form1::makeRomInfoListHtml(System::String ^filepath, System::Boolean withError, System::Boolean isCurrent)
{
System::String ^tmpxml = gcnew System::String( this->getXmlToHtmlTmpFile() );
try
{
// TMPファイルにXML版作成
System::Xml::XmlDocument ^doc = gcnew System::Xml::XmlDocument();
doc->AppendChild( doc->CreateXmlDeclaration("1.0","UTF-8",nullptr) );
this->makeRomInfoListXml( doc, withError, isCurrent );
doc->Save( tmpxml );
// XML=>HTML変換
System::Xml::Xsl::XslCompiledTransform ^xslt = gcnew System::Xml::Xsl::XslCompiledTransform;
xslt->Load( this->getRomInfoListXsl() );
xslt->Transform( tmpxml, filepath );
}
catch (System::Exception ^s)
{
System::IO::File::Delete( tmpxml ); // 次のためにTMPファイルを削除しておく
throw s; // 呼び出し元に例外を再throw
return;
}
System::IO::File::Delete( tmpxml );
} //Form1::makeRomInfoListHtml(System::String ^filepath)

View File

@ -0,0 +1,471 @@
// ----------------------------------------------
// フォームとSRL内情報とのデータのやりとり
// ----------------------------------------------
#include "stdafx.h"
#include <apptype.h>
#include "common.h"
#include "srl.h"
#include "deliverable.h"
#include "crc_whole.h"
#include "utility.h"
#include "lang.h"
#include "FormError.h"
#include "Form1.h"
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace MasterEditorTWL;
// ----------------------------------------------
// [SRL <= Form]
// ROM情報をフォームから取得して
// SRLクラスのプロパティに反映させる
// (ROMヘッダへの反映やCRCと署名の再計算をしない)
// ----------------------------------------------
void Form1::setSrlProperties(void)
{
// ROMヘッダの[0,0x160)の領域はRead Onlyで変更しない
// リージョン
this->setRegionSrlPropaties();
// ペアレンタルコントロール
this->setRatingSrlProperties();
} //setSrlProperties()
// ----------------------------------------------
// [SRL => Form]
// SRLのROM情報をフォームに反映させる
// (ファイルが読み込まれていることが前提)
// ----------------------------------------------
void Form1::setSrlForms(void)
{
// NTR互換情報
this->tboxTitleName->Text = this->hSrl->hTitleName;
this->tboxGameCode->Text = this->hSrl->hGameCode;
this->tboxMakerCode->Text = this->hSrl->hMakerCode;
this->tboxPlatform->Text = this->hSrl->hPlatform;
this->tboxRomSize->Text = this->hSrl->hRomSize;
this->tboxRomLatency->Text = this->hSrl->hLatency;
this->tboxRemasterVer->Text = this->hSrl->RomVersion.ToString("X2");
if( this->hSrl->RomVersion == 0xE0 )
{
this->cboxRemasterVerE->Checked = true;
}
else
{
this->cboxRemasterVerE->Checked = false;
}
this->tboxHeaderCRC->Clear();
this->tboxHeaderCRC->AppendText( "0x" );
this->tboxHeaderCRC->AppendText( this->hSrl->HeaderCRC.ToString("X4") );
// TWL拡張情報
this->tboxTitleIDLo->Text = this->hSrl->hTitleIDLo;
this->tboxTitleIDHi->Text = this->hSrl->TitleIDHi.ToString("X8");
this->tboxNormalRomOffset->Text = this->hSrl->NormalRomOffset.ToString("X8");
this->tboxKeyTableRomOffset->Text = this->hSrl->KeyTableRomOffset.ToString("X8");
this->cboxIsNormalJump->Checked = this->hSrl->IsNormalJump;
this->cboxIsTmpJump->Checked = this->hSrl->IsTmpJump;
this->cboxIsSubBanner->Checked = this->hSrl->IsSubBanner;
if( this->hSrl->IsCodecTWL == true )
{
this->tboxIsCodec->Text = gcnew System::String( "TWL" );
}
else
{
this->tboxIsCodec->Text = gcnew System::String( "DS" );
}
this->cboxIsSD->Checked = this->hSrl->IsSD;
this->tboxSDAccessRight->Text = ""; // 2回連続してROMを読み込むときのために初期化しておく
if( this->hSrl->IsSD && !this->hSrl->IsOldSDK52Release ) // SDアクセスしない場合には空白
{
System::String ^sdright = "";
if( this->hSrl->IsSDRead && this->hSrl->IsSDWrite )
{
sdright = "Read/Write";
}
else if( this->hSrl->IsSDRead )
{
sdright = "Read";
}
else if( this->hSrl->IsSDWrite )
{
sdright = "Write";
}
else
{
sdright = "None";
}
this->tboxSDAccessRight->Text = sdright;
}
this->cboxIsNAND->Checked = this->hSrl->IsNAND;
if( this->hSrl->IsGameCardNitro )
{
this->tboxIsGameCardOn->Text = gcnew System::String( "ON(NTR)" );
}
else if( this->hSrl->IsGameCardOn == true )
{
this->tboxIsGameCardOn->Text = gcnew System::String( "ON(normal)" );
}
else
{
this->tboxIsGameCardOn->Text = gcnew System::String( "OFF" );
}
this->cboxIsShared2->Checked = this->hSrl->IsShared2;
this->tboxShared2Size0->Text = MasterEditorTWL::transSizeToString( this->hSrl->hShared2SizeArray[0] );
this->tboxShared2Size1->Text = MasterEditorTWL::transSizeToString( this->hSrl->hShared2SizeArray[1] );
this->tboxShared2Size2->Text = MasterEditorTWL::transSizeToString( this->hSrl->hShared2SizeArray[2] );
this->tboxShared2Size3->Text = MasterEditorTWL::transSizeToString( this->hSrl->hShared2SizeArray[3] );
this->tboxShared2Size4->Text = MasterEditorTWL::transSizeToString( this->hSrl->hShared2SizeArray[4] );
this->tboxShared2Size5->Text = MasterEditorTWL::transSizeToString( this->hSrl->hShared2SizeArray[5] );
if( this->hSrl->IsPhotoRead && this->hSrl->IsPhotoWrite )
{
this->tboxPhotoAccess->Text = gcnew System::String("Read/Write");
}
else if( this->hSrl->IsPhotoRead )
{
this->tboxPhotoAccess->Text = gcnew System::String("Read Only");
}
else if( this->hSrl->IsPhotoWrite )
{
this->tboxPhotoAccess->Text = gcnew System::String("Write Only");
}
else
{
this->tboxPhotoAccess->Text = gcnew System::String("None");
}
// NAND消費サイズ
//this->tboxPublicSize->Text = MasterEditorTWL::transSizeToString( this->hSrl->PublicSize );
//this->tboxPrivateSize->Text = MasterEditorTWL::transSizeToString( this->hSrl->PrivateSize );
this->tboxSrlSize->Text = MasterEditorTWL::transSizeToString( this->hSrl->hNandUsedSize->SrlSize );
this->tboxPublicSize->Text = MasterEditorTWL::transSizeToString( this->hSrl->hNandUsedSize->PublicSaveSize );
this->tboxPrivateSize->Text = MasterEditorTWL::transSizeToString( this->hSrl->hNandUsedSize->PrivateSaveSize );
this->tboxSubBannerSize->Text = MasterEditorTWL::transSizeToString( this->hSrl->hNandUsedSize->SubBannerSize );
this->tboxTmdSize->Text = MasterEditorTWL::transSizeToString( this->hSrl->hNandUsedSize->TmdSize );
// NANDのクラスタサイズに切り上げた値
this->tboxSrlSizeFS->Text = MasterEditorTWL::transSizeToStringKB( this->hSrl->hNandUsedSize->SrlSizeRoundUp );
this->tboxPublicSizeFS->Text = MasterEditorTWL::transSizeToStringKB( this->hSrl->hNandUsedSize->PublicSaveSizeRoundUp );
this->tboxPrivateSizeFS->Text = MasterEditorTWL::transSizeToStringKB( this->hSrl->hNandUsedSize->PrivateSaveSizeRoundUp );
this->tboxSubBannerSizeFS->Text = MasterEditorTWL::transSizeToStringKB( this->hSrl->hNandUsedSize->SubBannerSizeRoundUp );
this->tboxTmdSizeFS->Text = MasterEditorTWL::transSizeToStringKB( this->hSrl->hNandUsedSize->TmdSizeRoundUp );
// 総和
this->tboxSumSize->Text = MasterEditorTWL::transSizeToStringKB( this->hSrl->hNandUsedSize->NandUsedSize );
//this->tboxSumSizeMB->Text = MasterEditorTWL::transSizeToStringMB( this->hSrl->hNandUsedSize->NandUsedSize, 2 );
this->tboxSumSizeMB->Text = MasterEditorTWL::transSizeToStringMB( this->hSrl->hNandUsedSize->NandUsedSize );
// Privateセーブデータの用途
if( this->hSrl->IsMediaNand && (this->hSrl->hNandUsedSize->PrivateSaveSize != 0) )
{
this->tboxPrivateSaveDataPurpose->Enabled = true;
}
else
{
this->tboxPrivateSaveDataPurpose->Enabled = false;
if( this->isJapanese() )
{
this->tboxPrivateSaveDataPurpose->Text = "なし";
}
else
{
this->tboxPrivateSaveDataPurpose->Text = "None";
}
}
// アプリ種別
if( this->hSrl->IsMediaNand )
{
this->tboxMedia->Text = gcnew System::String( "NAND" );
}
else
{
this->tboxMedia->Text = gcnew System::String( "Game Card" );
}
if( this->hSrl->IsAppLauncher == true )
{
this->tboxAppType->Text = gcnew System::String( "Launcher" );
}
else if( this->hSrl->IsAppSecure == true )
{
this->tboxAppType->Text = gcnew System::String( "Secure" );
}
else if( this->hSrl->IsAppSystem == true )
{
this->tboxAppType->Text = gcnew System::String( "System" );
}
else if( this->hSrl->IsAppUser == true )
{
this->tboxAppType->Text = gcnew System::String( "User" );
}
else
{
this->tboxAppType->Text = gcnew System::String( "UNKNOWN" );
}
// アクセスコントロール その他
System::String ^acc = gcnew System::String("");
if( this->hSrl->IsCommonClientKey == true )
{
acc += "CommonClientKey.\r\n";
}
if( this->hSrl->IsAesSlotBForES == true )
{
acc += "AES-SlotB(ES).\r\n";
}
if( this->hSrl->IsAesSlotCForNAM == true )
{
acc += "AES-SlotC(NAM).\r\n";
}
if( this->hSrl->IsAesSlotBForJpegEnc == true )
{
acc += "Jpeg Signature for the Launcher.\r\n";
}
if( this->hSrl->IsAesSlotBForJpegEncUser == true )
{
acc += "Jpeg Signature.\r\n";
}
if( this->hSrl->IsAesSlotAForSSL == true )
{
acc += "AES-SlotA(SSL Client Cert).\r\n";
}
if( this->hSrl->IsCommonClientKeyForDebugger == true )
{
acc += "CommonClientKey(Debugger System Menu).\r\n";
}
this->tboxAccessOther->Text = acc;
// 起動制限
this->cboxIsEULA->Checked = this->hSrl->IsEULA;
// 特殊な設定をテキストボックスに反映
this->setSrlFormsTextBox();
// SDKバージョンとライブラリ
this->gridSDK->Rows->Clear();
if( this->hSrl->hSDKList != nullptr )
{
for each( RCSDKVersion ^ver in this->hSrl->hSDKList )
{
this->gridSDK->Rows->Add( gcnew cli::array<System::Object^>{ ver->Version } );
if( ver->IsStatic )
{
System::Int32 last = this->gridSDK->Rows->Count - 2; // 追加直後の行
this->gridSDK->Rows[ last ]->DefaultCellStyle->ForeColor = System::Drawing::Color::Blue;
}
}
}
this->gridSDK->CurrentCell = nullptr; // セルが選択(ハイライト)されていない状態にする
this->gridLibrary->Rows->Clear();
if( this->hSrl->hLicenseList != nullptr )
{
for each( RCLicense ^lic in this->hSrl->hLicenseList )
{
this->gridLibrary->Rows->Add( gcnew cli::array<System::Object^>{lic->Publisher, lic->Name} );
if( lic->Publisher->Equals( "NINTENDO" ) && lic->Name->Equals( "DEBUG" ) )
{
System::Int32 last = this->gridLibrary->Rows->Count - 2;
this->gridLibrary->Rows[ last ]->DefaultCellStyle->ForeColor = System::Drawing::Color::Red;
}
if( lic->Publisher->Equals( "NINTENDO" ) && lic->Name->StartsWith( "DEBUG DWC" ) )
{
System::Int32 last = this->gridLibrary->Rows->Count - 2;
this->gridLibrary->Rows[ last ]->DefaultCellStyle->ForeColor = System::Drawing::Color::Red;
}
}
}
this->gridLibrary->CurrentCell = nullptr;
// 編集可能情報
this->setRegionForms();
this->setRatingForms(); // ペアレンタルコントロール関連
// ROMヘッダには関係ないが
// NANDアプリのときにバックアップメモリを自動的に「なし」にしておく
this->maskBackupMemoryForms();
//// カードアプリのときにDSi Wareの販売カテゴリを自動的に「なし」にしておく
//this->maskDLCategoryForms();
// "用途"を絞る
this->maskPurposeForms();
} // setSrlForms()
// ----------------------------------------------
// [SRL => Form]
// SRLの特殊な設定をフォームにセットする
// (言語切り替えで表示を変えたいので独立させる)
// ----------------------------------------------
void Form1::setSrlFormsTextBox()
{
if( !this->hSrl->IsWiFiIcon && !this->hSrl->IsWirelessIcon )
{
if( this->isJapanese() )
this->tboxConnectIcon->Text = "アイコンを表示しない";
else
this->tboxConnectIcon->Text = "No Icon";
}
else if( this->hSrl->IsWiFiIcon && !this->hSrl->IsWirelessIcon )
{
if( this->isJapanese() )
this->tboxConnectIcon->Text = "Wi-Fiコネクションアイコン";
else
this->tboxConnectIcon->Text = "Wi-Fi Connection Icon";
}
else if( !this->hSrl->IsWiFiIcon && this->hSrl->IsWirelessIcon )
{
if( this->isJapanese() )
this->tboxConnectIcon->Text = "ワイヤレス通信アイコン";
else
this->tboxConnectIcon->Text = "Wireless Icon";
}
else
{
if( this->isJapanese() )
this->tboxConnectIcon->Text = "不正な設定";
else
this->tboxConnectIcon->Text = "Illegal Setting";
}
System::String ^appother = gcnew System::String("");
if( !this->hSrl->IsLaunch )
{
if( this->isJapanese() == true )
appother += "ランチャー非表示.\r\n";
else
appother += "Not Display On the Launcher.\r\n";
}
if( this->hSrl->IsDataOnly )
{
if( this->isJapanese() == true )
appother += "データ専用.\r\n";
else
appother += "Data Only.\r\n";
}
this->tboxAppTypeOther->Text = appother;
this->tboxCaptionEx->Clear();
if( this->hSrl->HasDSDLPlaySign )
{
if( this->isJapanese() == true )
this->tboxCaptionEx->Text += gcnew System::String( "DSクローンブート対応.\r\n" );
else
this->tboxCaptionEx->Text += gcnew System::String( "DS Clone Boot.\r\n" );
}
if( this->hSrl->IsSCFGAccess )
{
if( this->isJapanese() == true )
this->tboxCaptionEx->Text += gcnew System::String( "SCFGレジスタアクセス可能.\r\n" );
else
this->tboxCaptionEx->Text += gcnew System::String( "SDFC Register Accessible.\r\n" );
}
} // setSrlFormsTextBox()
// ----------------------------------------------
// フォームの入力をチェックする
// ----------------------------------------------
System::Boolean Form1::checkSrlForms(void)
{
// リージョン
this->checkRegionForms();
// レーティングのチェックをするためにリージョンを決める
System::Boolean bJapan = false;
System::Boolean bAmerica = false;
System::Boolean bEurope = false;
System::Boolean bAustralia = false;
System::Boolean bKorea = false;
switch( this->combRegion->SelectedIndex )
{
case 0:
bJapan = true;
break;
case 1:
bAmerica = true;
break;
case 2:
bEurope = true;
break;
case 3:
bAustralia = true;
break;
case 4:
bEurope = true;
bAustralia = true;
break;
case 5:
bAmerica = true;
bAustralia = true;
break;
case 6:
bAmerica = true;
bEurope = true;
bAustralia = true;
break;
case 7:
bJapan = true;
bAmerica = true;
bEurope = true;
bAustralia = true;
bKorea = true;
break;
#if defined(METWL_VER_APPTYPE_SYSTEM) || defined(METWL_VER_APPTYPE_SECURE) || defined(METWL_VER_APPTYPE_LAUNCHER)
case 8:
bJapan = true;
bAmerica = true;
bEurope = true;
bAustralia = true;
bKorea = true;
this->hWarnList->Add( gcnew RCMrcError(
"リージョン", 0x1b0, 0x1b3, "全リージョンが設定されています。仕向地別に設定する必要がないかご確認ください。",
"Region", "All Region is set. Please check necessity for setting each region individually.", true, true,
RCMrcError::PurposeType::Common ) );
break;
#endif
default:
break;
}
// 韓国は選択できないので特殊な条件となる
if( (this->combRegion->DropDownStyle == System::Windows::Forms::ComboBoxStyle::DropDown)
&& this->hSrl->IsRegionKorea )
{
bKorea = true;
}
// ペアレンタルコントロール
if( this->cboxIsUnnecessaryRating->Checked )
{
this->hWarnList->Add( this->makeErrorMsg(true, "LabelRating", "RatingUnnecessarySelect") );
}
else
{
this->checkRatingForms( bJapan, this->combCERO, this->labCERO->Text );
this->checkRatingForms( bAmerica, this->combESRB, this->labESRB->Text );
this->checkRatingForms( bEurope, this->combUSK, this->labUSK->Text );
this->checkRatingForms( bEurope, this->combPEGI, this->labPEGI->Text );
this->checkRatingForms( bEurope, this->combPEGI_PRT, this->labPEGI_PRT->Text );
this->checkRatingForms( bEurope, this->combPEGI_BBFC, this->labPEGI_BBFC->Text );
this->checkRatingForms( bAustralia, this->combOFLC, this->labOFLC->Text );
this->checkRatingForms( bKorea, this->combGRB, this->labGRB->Text );
}
// ひととおりエラー登録をした後で
// SRLバイナリに影響を与えるエラーが存在するかチェック
#ifdef METWL_LIGHT_CHECK
return this->isValidAffectRomModified();
#else
return this->isValidAffectRom();
#endif
} // checkSrlForms()
// end of file

View File

@ -0,0 +1,579 @@
// ----------------------------------------------
// 一時ファイルの取り扱い
// ----------------------------------------------
#include "stdafx.h"
#include <apptype.h>
#include "common.h"
#include "srl.h"
#include "deliverable.h"
#include "crc_whole.h"
#include "utility.h"
#include "lang.h"
#include "FormError.h"
#include "Form1.h"
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace MasterEditorTWL;
// ----------------------------------------------
// 一時保存
// ----------------------------------------------
System::Void Form1::saveTmp( System::String ^filename )
{
System::Xml::XmlDocument ^doc = gcnew System::Xml::XmlDocument();
doc->AppendChild( doc->CreateXmlDeclaration("1.0","UTF-8",nullptr) );
System::Xml::XmlElement ^root = doc->CreateElement( "MasterEditorTWL" );
doc->AppendChild( root );
// SRLのパス
MasterEditorTWL::appendXmlTag( doc, root, "Srl", this->tboxFile->Text );
// 言語
MasterEditorTWL::appendXmlTag( doc, root, "Lang", (this->isJapanese())?"J":"E" );
// フォーム
System::Xml::XmlElement ^form = doc->CreateElement( "Form" );
root->AppendChild( form );
MasterEditorTWL::appendXmlTag( doc, form, "MasterEditorVersion", this->getVersion() );
MasterEditorTWL::appendXmlTag( doc, form, "ProductName", this->tboxProductName->Text );
MasterEditorTWL::appendXmlTag( doc, form, "ProductCode1", this->tboxProductCode1->Text );
MasterEditorTWL::appendXmlTag( doc, form, "ProductCode2", this->tboxProductCode2->Text );
MasterEditorTWL::appendXmlTag( doc, form, "ProductNameForeign", this->tboxProductNameForeign->Text );
MasterEditorTWL::appendXmlTag( doc, form, "ProductCode1Foreign", this->tboxProductCode1Foreign->Text );
MasterEditorTWL::appendXmlTag( doc, form, "ProductCode2Foreign1", this->tboxProductCode2Foreign1->Text );
MasterEditorTWL::appendXmlTag( doc, form, "ProductCode2Foreign2", this->tboxProductCode2Foreign2->Text );
MasterEditorTWL::appendXmlTag( doc, form, "ProductCode2Foreign3", this->tboxProductCode2Foreign3->Text );
MasterEditorTWL::appendXmlTag( doc, form, "SubmitVersion", this->numSubmitVersion->Value.ToString() );
MasterEditorTWL::appendXmlTag( doc, form, "Backup", this->combBackup->SelectedIndex.ToString() );
MasterEditorTWL::appendXmlTag( doc, form, "BackupOther", this->tboxBackupOther->Text );
MasterEditorTWL::appendXmlTag( doc, form, "ReleaseForeign", (this->cboxReleaseForeign->Checked)?"Y":"N" );
MasterEditorTWL::appendXmlTag( doc, form, "Remarks", this->tboxCaption->Text );
if( this->rSubmitInternet->Checked )
{
MasterEditorTWL::appendXmlTag( doc, form, "SubmitWay", "Internet" );
}
else if( this->rSubmitHand->Checked )
{
MasterEditorTWL::appendXmlTag( doc, form, "SubmitWay", "Hand" );
}
else
{
MasterEditorTWL::appendXmlTag( doc, form, "SubmitWay", "Mail" );
}
// 用途
cli::array<System::Windows::Forms::RadioButton^> ^rbuts = gcnew cli::array<System::Windows::Forms::RadioButton ^>
{
this->rPurposeCardProduction,
this->rPurposeCardTouchTryDS,
this->rPurposeCardDistribution,
this->rPurposeCardKiosk,
this->rPurposeDSiWare,
this->rPurposeOther
};
cli::array<System::String^> ^strs = gcnew cli::array<System::String^>
{
"CardProduction",
"CardTouchTryDS",
"CardDistribution",
"CardKiosk",
"DSiWare",
"Other"
};
int i;
for(i=0; i < rbuts->Length; i++ )
{
if( rbuts[i]->Checked )
{
MasterEditorTWL::appendXmlTag( doc, form, "Purpose", strs[i] );
}
}
MasterEditorTWL::appendXmlTag( doc, form, "PurposeOther", this->tboxPurposeOther->Text );
MasterEditorTWL::appendXmlTag( doc, form, "ReleaseDate", this->dateRelease->Value.ToString() );
MasterEditorTWL::appendXmlTag( doc, form, "SubmitDate", this->dateSubmit->Value.ToString() );
//MasterEditorTWL::appendXmlTag( doc, form, "DLCategory", this->combDLCategory->SelectedIndex.ToString() );
//MasterEditorTWL::appendXmlTag( doc, form, "DLCategoryOther", this->tboxDLCategoryOther->Text );
MasterEditorTWL::appendXmlTag( doc, form, "Company1", this->tboxCompany1->Text );
MasterEditorTWL::appendXmlTag( doc, form, "Depart1", this->tboxDepart1->Text );
MasterEditorTWL::appendXmlTag( doc, form, "Name1", this->tboxPerson1->Text );
MasterEditorTWL::appendXmlTag( doc, form, "Furigana1", this->tboxFurigana1->Text );
MasterEditorTWL::appendXmlTag( doc, form, "Tel1", this->tboxTel1->Text );
MasterEditorTWL::appendXmlTag( doc, form, "Fax1", this->tboxFax1->Text );
MasterEditorTWL::appendXmlTag( doc, form, "Mail1", this->tboxMail1->Text );
MasterEditorTWL::appendXmlTag( doc, form, "NTSC1", this->tboxNTSC1->Text );
MasterEditorTWL::appendXmlTag( doc, form, "InputPerson2", (this->cboxIsInputPerson2->Checked)?"Y":"N" );
MasterEditorTWL::appendXmlTag( doc, form, "Company2", this->tboxCompany2->Text );
MasterEditorTWL::appendXmlTag( doc, form, "Depart2", this->tboxDepart2->Text );
MasterEditorTWL::appendXmlTag( doc, form, "Name2", this->tboxPerson2->Text );
MasterEditorTWL::appendXmlTag( doc, form, "Furigana2", this->tboxFurigana2->Text );
MasterEditorTWL::appendXmlTag( doc, form, "Tel2", this->tboxTel2->Text );
MasterEditorTWL::appendXmlTag( doc, form, "Fax2", this->tboxFax2->Text );
MasterEditorTWL::appendXmlTag( doc, form, "Mail2", this->tboxMail2->Text );
MasterEditorTWL::appendXmlTag( doc, form, "NTSC2", this->tboxNTSC2->Text );
MasterEditorTWL::appendXmlTag( doc, form, "Region", this->combRegion->SelectedIndex.ToString() );
MasterEditorTWL::appendXmlTag( doc, form, "IsUnnecessaryRating", (this->cboxIsUnnecessaryRating->Checked)?"Y":"N" );
MasterEditorTWL::appendXmlTag( doc, form, "RatingCERO", this->combCERO->SelectedIndex.ToString() );
MasterEditorTWL::appendXmlTag( doc, form, "RatingESRB", this->combESRB->SelectedIndex.ToString() );
MasterEditorTWL::appendXmlTag( doc, form, "RatingUSK", this->combUSK->SelectedIndex.ToString() );
MasterEditorTWL::appendXmlTag( doc, form, "RatingPEGI", this->combPEGI->SelectedIndex.ToString() );
MasterEditorTWL::appendXmlTag( doc, form, "RatingPEGI_PRT", this->combPEGI_PRT->SelectedIndex.ToString() );
MasterEditorTWL::appendXmlTag( doc, form, "RatingPEGI_BBFC", this->combPEGI_BBFC->SelectedIndex.ToString() );
MasterEditorTWL::appendXmlTag( doc, form, "RatingOFLC", this->combOFLC->SelectedIndex.ToString() );
MasterEditorTWL::appendXmlTag( doc, form, "RatingGRB", this->combGRB->SelectedIndex.ToString() );
MasterEditorTWL::appendXmlTag( doc, form, "IsUGC", (this->cboxIsUGC->Checked)?"Y":"N" );
MasterEditorTWL::appendXmlTag( doc, form, "IsPhotoEx", (this->cboxIsPhotoEx->Checked)?"Y":"N" );
MasterEditorTWL::appendXmlTag( doc, form, "PrivateSaveDataPurpose", this->tboxPrivateSaveDataPurpose->Text );
try
{
doc->Save( filename );
}
catch( System::Exception ^ex )
{
(void)ex;
this->errMsg( "E_SaveTemp" );
}
} //saveTmp()
// ----------------------------------------------
// 一時ファイルの読み込み
// ----------------------------------------------
void Form1::loadTmp( System::String ^filename )
{
System::Xml::XmlDocument ^doc = gcnew System::Xml::XmlDocument;
try
{
doc->Load( filename );
}
catch( System::Exception ^ex )
{
(void)ex;
this->errMsg( "E_LoadTemp" );
return;
}
System::Xml::XmlElement ^root = doc->DocumentElement;
System::String ^text;
// SRL
text = MasterEditorTWL::getXPathText( root, "/MasterEditorTWL/Srl" );
if( !System::String::IsNullOrEmpty(text) ) // SRLファイル名がないときはスルー
{
if( this->loadRom(text) )
{
this->tboxFile->Text = text;
this->clearOtherForms();
}
}
// フォーム
this->parseTmp( root, "/MasterEditorTWL/Form/ProductName", this->tboxProductName );
this->parseTmp( root, "/MasterEditorTWL/Form/ProductCode1", this->tboxProductCode1 );
this->parseTmp( root, "/MasterEditorTWL/Form/ProductCode2", this->tboxProductCode2 );
this->parseTmp( root, "/MasterEditorTWL/Form/SubmitVersion", this->numSubmitVersion );
this->parseTmp( root, "/MasterEditorTWL/Form/ReleaseDate", this->dateRelease );
this->parseTmp( root, "/MasterEditorTWL/Form/SubmitDate", this->dateSubmit );
this->parseTmp( root, "/MasterEditorTWL/Form/Backup", this->combBackup );
this->combBackup->Enabled = true; // あとでマスクする
this->tboxBackupOther->Enabled = false;
this->tboxBackupOther->Clear();
if( this->combBackup->SelectedIndex == (this->combBackup->Items->Count - 1) )
{
this->parseTmp( root, "/MasterEditorTWL/Form/BackupOther", this->tboxBackupOther );
this->tboxBackupOther->Enabled = true;
}
//// DSi Ware
//this->parseTmp( root, "/MasterEditorTWL/Form/DLCategory", this->combDLCategory );
//this->combDLCategory->Enabled = true; // あとでマスクする
//this->tboxDLCategoryOther->Enabled = false;
//this->tboxDLCategoryOther->Clear();
//if( this->combDLCategory->SelectedIndex == (this->combDLCategory->Items->Count - 1) )
//{
// this->parseTmp( root, "/MasterEditorTWL/Form/DLCategoryOther", this->tboxDLCategoryOther );
// this->tboxDLCategoryOther->Enabled = true;
//}
cli::array<System::Windows::Forms::RadioButton^> ^rbuts;
cli::array<System::String^> ^strs;
rbuts = gcnew cli::array<System::Windows::Forms::RadioButton^>{this->rSubmitHand, this->rSubmitPost, this->rSubmitInternet};
strs = gcnew cli::array<System::String^>{"Hand","Mail","Internet"};
this->parseTmp( root, "/MasterEditorTWL/Form/SubmitWay", rbuts, strs );
// 用途
rbuts = gcnew cli::array<System::Windows::Forms::RadioButton ^>
{
this->rPurposeCardProduction,
this->rPurposeCardTouchTryDS,
this->rPurposeCardDistribution,
this->rPurposeCardKiosk,
this->rPurposeDSiWare,
this->rPurposeOther
};
strs = gcnew cli::array<System::String^>
{
"CardProduction",
"CardTouchTryDS",
"CardDistribution",
"CardKiosk",
"DSiWare",
"Other"
};
this->parseTmp( root, "/MasterEditorTWL/Form/Purpose", rbuts, strs );
if( this->rPurposeOther->Checked )
{
this->tboxPurposeOther->Enabled = true;
this->parseTmp( root, "/MasterEditorTWL/Form/PurposeOther", this->tboxPurposeOther );
}
this->parseTmp( root, "/MasterEditorTWL/Form/ReleaseForeign", this->cboxReleaseForeign );
this->tboxProductNameForeign->Enabled = false;
this->tboxProductCode1Foreign->Enabled = false;
this->tboxProductCode2Foreign1->Enabled = false;
this->tboxProductCode2Foreign2->Enabled = false;
this->tboxProductCode2Foreign3->Enabled = false;
this->tboxProductNameForeign->Clear();
this->tboxProductCode1Foreign->Clear();
this->tboxProductCode2Foreign1->Clear();
this->tboxProductCode2Foreign2->Clear();
this->tboxProductCode2Foreign3->Clear();
if( this->cboxReleaseForeign->Checked )
{
this->tboxProductNameForeign->Enabled = true;
this->tboxProductCode1Foreign->Enabled = true;
this->tboxProductCode2Foreign1->Enabled = true;
this->tboxProductCode2Foreign2->Enabled = true;
this->tboxProductCode2Foreign3->Enabled = true;
this->parseTmp( root, "/MasterEditorTWL/Form/ProductNameForeign", this->tboxProductNameForeign );
this->parseTmp( root, "/MasterEditorTWL/Form/ProductCode1Foreign", this->tboxProductCode1Foreign );
this->parseTmp( root, "/MasterEditorTWL/Form/ProductCode2Foreign1", this->tboxProductCode2Foreign1 );
this->parseTmp( root, "/MasterEditorTWL/Form/ProductCode2Foreign2", this->tboxProductCode2Foreign2 );
this->parseTmp( root, "/MasterEditorTWL/Form/ProductCode2Foreign3", this->tboxProductCode2Foreign3 );
}
this->parseTmp( root, "/MasterEditorTWL/Form/Remarks", this->tboxCaption );
this->parseTmp( root, "/MasterEditorTWL/Form/Company1", this->tboxCompany1 );
this->parseTmp( root, "/MasterEditorTWL/Form/Depart1", this->tboxDepart1 );
this->parseTmp( root, "/MasterEditorTWL/Form/Name1", this->tboxPerson1 );
this->parseTmp( root, "/MasterEditorTWL/Form/Furigana1", this->tboxFurigana1 );
this->parseTmp( root, "/MasterEditorTWL/Form/Tel1", this->tboxTel1 );
this->parseTmp( root, "/MasterEditorTWL/Form/Fax1", this->tboxFax1 );
this->parseTmp( root, "/MasterEditorTWL/Form/Mail1", this->tboxMail1 );
this->parseTmp( root, "/MasterEditorTWL/Form/NTSC1", this->tboxNTSC1 );
this->parseTmp( root, "/MasterEditorTWL/Form/InputPerson2", this->cboxIsInputPerson2 );
this->gboxPerson2->Enabled = false;
this->tboxCompany2->Clear();
this->tboxDepart2->Clear();
this->tboxPerson2->Clear();
this->tboxFurigana2->Clear();
this->tboxTel2->Clear();
this->tboxFax2->Clear();
this->tboxMail2->Clear();
this->tboxNTSC2->Clear();
if( this->cboxIsInputPerson2->Checked )
{
this->gboxPerson2->Enabled = true;
this->parseTmp( root, "/MasterEditorTWL/Form/Company2", this->tboxCompany2 );
this->parseTmp( root, "/MasterEditorTWL/Form/Depart2", this->tboxDepart2 );
this->parseTmp( root, "/MasterEditorTWL/Form/Name2", this->tboxPerson2 );
this->parseTmp( root, "/MasterEditorTWL/Form/Furigana2", this->tboxFurigana2 );
this->parseTmp( root, "/MasterEditorTWL/Form/Tel2", this->tboxTel2 );
this->parseTmp( root, "/MasterEditorTWL/Form/Fax2", this->tboxFax2 );
this->parseTmp( root, "/MasterEditorTWL/Form/Mail2", this->tboxMail2 );
this->parseTmp( root, "/MasterEditorTWL/Form/NTSC2", this->tboxNTSC2 );
}
this->parseTmp( root, "/MasterEditorTWL/Form/Region", this->combRegion );
this->parseTmp( root, "/MasterEditorTWL/Form/IsUnnecessaryRating", this->cboxIsUnnecessaryRating );
this->parseTmp( root, "/MasterEditorTWL/Form/RatingCERO", this->combCERO );
this->parseTmp( root, "/MasterEditorTWL/Form/RatingESRB", this->combESRB );
this->parseTmp( root, "/MasterEditorTWL/Form/RatingUSK", this->combUSK );
this->parseTmp( root, "/MasterEditorTWL/Form/RatingPEGI", this->combPEGI );
this->parseTmp( root, "/MasterEditorTWL/Form/RatingPEGI_PRT", this->combPEGI_PRT );
this->parseTmp( root, "/MasterEditorTWL/Form/RatingPEGI_BBFC", this->combPEGI_BBFC );
this->parseTmp( root, "/MasterEditorTWL/Form/RatingOFLC", this->combOFLC );
this->parseTmp( root, "/MasterEditorTWL/Form/RatingGRB", this->combGRB );
this->parseTmp( root, "/MasterEditorTWL/Form/IsUGC", this->cboxIsUGC );
this->parseTmp( root, "/MasterEditorTWL/Form/IsPhotoEx", this->cboxIsPhotoEx );
this->parseTmp( root, "/MasterEditorTWL/Form/PrivateSaveDataPurpose", this->tboxPrivateSaveDataPurpose );
// 言語
text = MasterEditorTWL::getXPathText( root, "/MasterEditorTWL/Lang" );
if( !System::String::IsNullOrEmpty(text) && text->Equals("J") && this->stripItemJapanese->Enabled ) // 日本語が選択可能なときのみ
{
this->stripItemEnglish->Checked = false;
this->stripItemJapanese->Checked = true;
this->changeJapanese();
}
else
{
this->stripItemEnglish->Checked = true;
this->stripItemJapanese->Checked = false;
this->changeEnglish();
}
this->maskRatingForms(); // ペアレンタルコントロール情報をリージョンに合わせる
this->changeUnnecessaryRatingForms(true); // 一度コンボボックスがenableになるので再設定
this->maskBackupMemoryForms(); // NANDアプリのときのバックアップメモリの自動設定
this->maskPurposeForms();
//this->maskDLCategoryForms();
} //loadTmp()
// ----------------------------------------------
// 会社情報の保存
// ----------------------------------------------
System::Void Form1::saveCompany( System::String ^filename )
{
System::Xml::XmlDocument ^doc = gcnew System::Xml::XmlDocument();
doc->AppendChild( doc->CreateXmlDeclaration("1.0","UTF-8",nullptr) );
System::Xml::XmlElement ^root = doc->CreateElement( "MasterEditorTWL" );
doc->AppendChild( root );
// フォーム
System::Xml::XmlElement ^form = doc->CreateElement( "CompanyInfo" );
root->AppendChild( form );
MasterEditorTWL::appendXmlTag( doc, form, "Company1", this->tboxCompany1->Text );
MasterEditorTWL::appendXmlTag( doc, form, "Depart1", this->tboxDepart1->Text );
MasterEditorTWL::appendXmlTag( doc, form, "Name1", this->tboxPerson1->Text );
MasterEditorTWL::appendXmlTag( doc, form, "Furigana1", this->tboxFurigana1->Text );
MasterEditorTWL::appendXmlTag( doc, form, "Tel1", this->tboxTel1->Text );
MasterEditorTWL::appendXmlTag( doc, form, "Fax1", this->tboxFax1->Text );
MasterEditorTWL::appendXmlTag( doc, form, "Mail1", this->tboxMail1->Text );
MasterEditorTWL::appendXmlTag( doc, form, "NTSC1", this->tboxNTSC1->Text );
MasterEditorTWL::appendXmlTag( doc, form, "InputPerson2", (this->cboxIsInputPerson2->Checked)?"Y":"N" );
MasterEditorTWL::appendXmlTag( doc, form, "Company2", this->tboxCompany2->Text );
MasterEditorTWL::appendXmlTag( doc, form, "Depart2", this->tboxDepart2->Text );
MasterEditorTWL::appendXmlTag( doc, form, "Name2", this->tboxPerson2->Text );
MasterEditorTWL::appendXmlTag( doc, form, "Furigana2", this->tboxFurigana2->Text );
MasterEditorTWL::appendXmlTag( doc, form, "Tel2", this->tboxTel2->Text );
MasterEditorTWL::appendXmlTag( doc, form, "Fax2", this->tboxFax2->Text );
MasterEditorTWL::appendXmlTag( doc, form, "Mail2", this->tboxMail2->Text );
MasterEditorTWL::appendXmlTag( doc, form, "NTSC2", this->tboxNTSC2->Text );
// バージョン
MasterEditorTWL::appendXmlTag( doc, root, "MasterEditorVersion", this->getVersion() );
try
{
doc->Save( filename );
}
catch( System::Exception ^ex )
{
(void)ex;
return; // ファイルがないとき何もしない
}
} //saveTmp()
// ----------------------------------------------
// 会社情報の読み込み
// ----------------------------------------------
void Form1::loadCompany( System::String ^filename )
{
System::Xml::XmlDocument ^doc = gcnew System::Xml::XmlDocument;
try
{
doc->Load( filename );
}
catch( System::Exception ^ex )
{
(void)ex;
return; // ファイルがないとき何もしない
}
System::Xml::XmlElement ^root = doc->DocumentElement;
this->parseTmp( root, "/MasterEditorTWL/CompanyInfo/Company1", this->tboxCompany1 );
this->parseTmp( root, "/MasterEditorTWL/CompanyInfo/Depart1", this->tboxDepart1 );
this->parseTmp( root, "/MasterEditorTWL/CompanyInfo/Name1", this->tboxPerson1 );
this->parseTmp( root, "/MasterEditorTWL/CompanyInfo/Tel1", this->tboxTel1 );
this->parseTmp( root, "/MasterEditorTWL/CompanyInfo/Fax1", this->tboxFax1 );
this->parseTmp( root, "/MasterEditorTWL/CompanyInfo/Mail1", this->tboxMail1 );
this->parseTmp( root, "/MasterEditorTWL/CompanyInfo/InputPerson2", this->cboxIsInputPerson2 );
if( this->isJapanese() )
{
this->parseTmp( root, "/MasterEditorTWL/CompanyInfo/Furigana1", this->tboxFurigana1 );
this->parseTmp( root, "/MasterEditorTWL/CompanyInfo/NTSC1", this->tboxNTSC1 );
}
this->gboxPerson2->Enabled = false;
this->tboxCompany2->Clear();
this->tboxDepart2->Clear();
this->tboxPerson2->Clear();
this->tboxFurigana2->Clear();
this->tboxTel2->Clear();
this->tboxFax2->Clear();
this->tboxMail2->Clear();
this->tboxNTSC2->Clear();
if( this->cboxIsInputPerson2->Checked )
{
this->gboxPerson2->Enabled = true;
this->parseTmp( root, "/MasterEditorTWL/CompanyInfo/Company2", this->tboxCompany2 );
this->parseTmp( root, "/MasterEditorTWL/CompanyInfo/Depart2", this->tboxDepart2 );
this->parseTmp( root, "/MasterEditorTWL/CompanyInfo/Name2", this->tboxPerson2 );
this->parseTmp( root, "/MasterEditorTWL/CompanyInfo/Tel2", this->tboxTel2 );
this->parseTmp( root, "/MasterEditorTWL/CompanyInfo/Fax2", this->tboxFax2 );
this->parseTmp( root, "/MasterEditorTWL/CompanyInfo/Mail2", this->tboxMail2 );
if( this->isJapanese() )
{
this->parseTmp( root, "/MasterEditorTWL/CompanyInfo/Furigana2", this->tboxFurigana2 );
this->parseTmp( root, "/MasterEditorTWL/CompanyInfo/NTSC2", this->tboxNTSC2 );
}
}
} //loadCompany()
// ----------------------------------------------
// 一時保存情報をフォーム情報に変換
// ----------------------------------------------
System::Boolean Form1::parseTmp( System::Xml::XmlElement ^root, System::String ^xpath, System::Windows::Forms::ComboBox ^comb )
{
// コンボボックスの保存情報 - インデックスの範囲に含まれるか調べる(含まれない場合は-1)
System::String ^text = MasterEditorTWL::getXPathText( root, xpath );
if( System::String::IsNullOrEmpty( text ) )
return false;
try
{
System::Int32 index = System::Int32::Parse( text ); // テキストにはインデックスが保存されている
if( (0 <= index) && (index < comb->Items->Count) )
{
comb->SelectedIndex = index;
return true;
}
else
{
comb->SelectedIndex = -1;
return false;
}
}
catch ( System::Exception ^ex ) // 改ざんされていたとき
{
(void)ex;
comb->SelectedIndex = -1;
return false;
}
return false;
}
System::Boolean Form1::parseTmp( System::Xml::XmlElement ^root, System::String ^xpath, System::Windows::Forms::NumericUpDown ^num )
{
// テキストボックスの保存情報 - そのまま代入(ただし最大を超える場合は0にする)
System::String ^text = MasterEditorTWL::getXPathText( root, xpath );
if( System::String::IsNullOrEmpty( text ) )
return false;
try
{
System::Int32 val = System::Int32::Parse( text ); // テキストには値が保存されている
if( (0 <= val) && (val <= num->Maximum) )
{
num->Value = val;
return true;
}
else
{
num->Value = 0;
return false;
}
}
catch ( System::Exception ^ex ) // 改ざんされていたとき
{
(void)ex;
num->Value = 0;
return false;
}
return false;
}
System::Boolean Form1::parseTmp( System::Xml::XmlElement ^root, System::String ^xpath,
cli::array<System::Windows::Forms::RadioButton^>^rbuts, cli::array<System::String ^>^textCands )
{
// ラジオボタンの保存情報 - テキスト候補に合致するか調べる(合致しない場合は先頭のラジオボタンをチェック)
System::String ^text = MasterEditorTWL::getXPathText( root, xpath );
if( System::String::IsNullOrEmpty( text ) )
return false;
System::Int32 i;
System::Boolean bSearch = false;
for( i=0; i < rbuts->Length; i++ ) // XML中のテキストがどのラジオボタンのテキストに合致するかチェック
{
rbuts[i]->Checked = false;
if( textCands[i]->Equals( text ) )
{
rbuts[i]->Checked = true;
bSearch = true;
}
}
if( !bSearch ) // 合致しない場合は最初のラジオボタンをチェック
{
rbuts[0]->Checked = true;
}
return bSearch;
}
System::Boolean Form1::parseTmp( System::Xml::XmlElement ^root, System::String ^xpath, System::Windows::Forms::CheckBox ^cbox )
{
// チェックボタンの保存情報 - Y/Nを調べる(それ以外の場合にはチェックしない)
System::String ^text = MasterEditorTWL::getXPathText( root, xpath );
if( System::String::IsNullOrEmpty( text ) )
return false;
if( text->Equals("Y") )
cbox->Checked = true;
else
cbox->Checked = false; // 不正な値も含む
return cbox->Checked;
}
System::Boolean Form1::parseTmp( System::Xml::XmlElement ^root, System::String ^xpath, System::Windows::Forms::TextBox ^tbox )
{
// テキストボックスの保存情報 - そのまま代入(ただし長さが合わない場合は空白にする)
System::String ^text = MasterEditorTWL::getXPathText( root, xpath );
if( System::String::IsNullOrEmpty( text ) )
return false;
if( text->Length > tbox->MaxLength )
{
tbox->Text = gcnew System::String("");
return false;
}
tbox->Text = text;
return true;
}
System::Boolean Form1::parseTmp( System::Xml::XmlElement ^root, System::String ^xpath, System::Windows::Forms::DateTimePicker ^date )
{
System::String ^text = MasterEditorTWL::getXPathText( root, xpath );
if( System::String::IsNullOrEmpty( text ) )
return false;
System::Diagnostics::Debug::WriteLine( text );
try
{
date->Value = System::DateTime::Parse( text );
}
catch( System::Exception ^ex )
{
(void)ex;
date->Value = System::DateTime::Now;
return false;
}
return true;
}

View File

@ -0,0 +1,486 @@
#include "stdafx.h"
#include <apptype.h>
#include "common.h"
#include "srl.h"
#include "deliverable.h"
#include "crc_whole.h"
#include "utility.h"
#include "lang.h"
#include "FormError.h"
#include "Form1.h"
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace MasterEditorTWL;
// ----------------------------------------------
// フォームのチェック
// ----------------------------------------------
// テキスト入力がされているかチェック
System::Boolean Form1::checkTextForm( System::String ^formtext, System::String ^tag )
{
System::String ^tmp = formtext->Replace( " ", "" ); // スペースのみの文字列もエラー
if( (formtext == nullptr) || formtext->Equals("") || tmp->Equals("") )
{
System::String ^labelJ = this->hMsg->getMessage(tag,"J");
System::String ^labelE = this->hMsg->getMessage(tag,"E");
System::String ^msgJ = this->hMsg->getMessage("TextBoxInput", "J");
System::String ^msgE = this->hMsg->getMessage("TextBoxInput", "E");
this->hErrorList->Add( gcnew RCMrcError( labelJ, 0, 0, msgJ, labelE, msgE, true, false, RCMrcError::PurposeType::Common ) );
return false;
}
return true;
}
System::Boolean Form1::checkTextForm( System::String ^formtext, System::String ^title_tag, System::String ^msg_tag )
{
System::String ^tmp = formtext->Replace( " ", "" ); // スペースのみの文字列もエラー
if( (formtext == nullptr) || formtext->Equals("") || tmp->Equals("") )
{
System::String ^labelJ = this->hMsg->getMessage(title_tag,"J");
System::String ^labelE = this->hMsg->getMessage(title_tag,"E");
System::String ^msgJ = this->hMsg->getMessage(msg_tag, "J");
System::String ^msgE = this->hMsg->getMessage(msg_tag, "E");
this->hErrorList->Add( gcnew RCMrcError( labelJ, 0, 0, msgJ, labelE, msgE, true, false, RCMrcError::PurposeType::Common ) );
return false;
}
return true;
}
// 数値入力が正常かどうかチェック
System::Boolean Form1::checkNumRange( System::Int32 val, System::Int32 min, System::Int32 max, System::String ^tag )
{
if( (val < min) || (max < val) )
{
System::String ^labelJ = this->hMsg->getMessage(tag,"J");
System::String ^labelE = this->hMsg->getMessage(tag,"E");
System::String ^msgJ = this->hMsg->getMessage("NumRangeInput", "J");
System::String ^msgE = this->hMsg->getMessage("NumRangeInput", "E");
this->hErrorList->Add( gcnew RCMrcError( labelJ, 0, 0, msgJ, labelE, msgE, true, false, RCMrcError::PurposeType::Common ) );
return false;
}
return true;
}
System::Boolean Form1::checkNumRange( System::String ^strval, System::Int32 min, System::Int32 max, System::String ^tag )
{
try
{
System::Int32 i = System::Int32::Parse(strval);
return (this->checkNumRange( i, min, max, tag ));
}
catch ( System::FormatException ^ex )
{
(void)ex;
return (this->checkNumRange( max+1, min, max, tag )); // 必ず失敗するように max+1 を検査
}
}
// コンボボックスをチェック
System::Boolean Form1::checkComboBoxIndex( System::Windows::Forms::ComboBox ^box, System::String ^tag, System::Boolean isAffectRom )
{
if( box->SelectedIndex < 0 )
{
System::String ^labelJ = this->hMsg->getMessage(tag,"J");
System::String ^labelE = this->hMsg->getMessage(tag,"E");
System::String ^msgJ = this->hMsg->getMessage("ComboBoxInput", "J");
System::String ^msgE = this->hMsg->getMessage("ComboBoxInput", "E");
this->hErrorList->Add( gcnew RCMrcError(
labelJ, 0, 0, msgJ, labelE, msgE, true, isAffectRom, RCMrcError::PurposeType::Common ) );
return false;
}
return true;
}
// ラジオボタンをチェック
System::Boolean Form1::checkRadioButton( cli::array<System::Windows::Forms::RadioButton^> ^rbuts, System::String ^tag )
{
bool checked = false;
for each( System::Windows::Forms::RadioButton ^r in rbuts )
{
if( r->Checked )
{
checked = true;
}
}
if( !checked )
{
System::String ^labelJ = this->hMsg->getMessage(tag,"J");
System::String ^labelE = this->hMsg->getMessage(tag,"E");
System::String ^msgJ = this->hMsg->getMessage("RadioButtonInput", "J");
System::String ^msgE = this->hMsg->getMessage("RadioButtonInput", "E");
this->hErrorList->Add( gcnew RCMrcError( labelJ, 0, 0, msgJ, labelE, msgE, true, false, RCMrcError::PurposeType::Common ) );
return false;
}
return true;
}
// --------------------------------------------------------
// エラー情報の登録
// --------------------------------------------------------
// エラー情報の作成
RCMrcError^ Form1::makeErrorMsg( System::Boolean isAffectRom, System::String ^labeltag, System::String ^msgtag, ... cli::array<System::String^> ^args )
{
// 外部ファイルから項目名を取得
System::String ^nameJ = this->hMsg->getMessage( labeltag, "J" );
System::String ^nameE = this->hMsg->getMessage( labeltag, "E" );
// メッセージを取得
System::String ^fmtJ = this->hMsg->getMessage( msgtag, "J" ); // メッセージファイルから書式を取得
System::String ^msgJ = System::String::Format( fmtJ, args ); // 書式をStringに展開
System::String ^fmtE = this->hMsg->getMessage( msgtag, "E" );
System::String ^msgE = System::String::Format( fmtE, args );
return (gcnew RCMrcError( nameJ, 0, 0, msgJ, nameE, msgE, true, isAffectRom, RCMrcError::PurposeType::Common )); // 修正可能なエラーとして作成
}
// 用途のラジオボタンの状態によって表示するかどうかを振り分ける
bool Form1::isDisplayOneGridErrorForPurpose( RCMrcError ^err )
{
bool is_display = false;
if( ((err->Purpose & RCMrcError::PurposeType::Production) != (RCMrcError::PurposeType)0) &&
(this->rPurposeCardProduction->Checked ||
this->rPurposeDSiWare->Checked ||
this->rPurposeOther->Checked) )
{
is_display = true;
}
if( ((err->Purpose & RCMrcError::PurposeType::CardDistribution) != (RCMrcError::PurposeType)0) &&
this->rPurposeCardDistribution->Checked )
{
is_display = true;
}
if( ((err->Purpose & RCMrcError::PurposeType::CardKiosk) != (RCMrcError::PurposeType)0) &&
this->rPurposeCardKiosk->Checked )
{
is_display = true;
}
if( ((err->Purpose & RCMrcError::PurposeType::TouchTryDS) != (RCMrcError::PurposeType)0) &&
this->rPurposeCardTouchTryDS->Checked)
{
is_display = true;
}
/*
Zone DSDownload Service
*/
return is_display;
} //isDisplayOneGridErrorForPurpose()
// 読み込み時エラーの登録
void Form1::setGridError( void )
{
this->gridError->Rows->Clear();
if( this->hSrl->hErrorList != nullptr ) // ROM読み込み時に発見されたエラー
{
for each( RCMrcError ^err in this->hSrl->hErrorList )
{
if( this->isDisplayOneGridErrorForPurpose( err ) )
{
this->gridError->Rows->Add( err->getAll(this->isJapanese()) );
this->colorGridError( err );
}
}
}
}
void Form1::setGridWarn( void )
{
this->gridWarn->Rows->Clear();
if( this->hSrl->hWarnList != nullptr )
{
for each( RCMrcError ^err in this->hSrl->hWarnList )
{
if( this->isDisplayOneGridErrorForPurpose( err ) )
{
this->gridWarn->Rows->Add( err->getAll(this->isJapanese()) );
this->colorGridWarn( err );
}
}
}
}
// 読み込み時に検出した修正可能エラーに現在の入力を反映
void Form1::overloadGridError( void )
{
this->gridError->Rows->Clear();
if( this->hSrl->hErrorList != nullptr ) // ROM読み込み時に発見されたエラー
{
for each( RCMrcError ^err in this->hSrl->hErrorList )
{
if( !err->IsEnableModify ) // 修正可能な情報は表示しない
{
if( this->isDisplayOneGridErrorForPurpose( err ) )
{
this->gridError->Rows->Add( err->getAll(this->isJapanese()) );
this->colorGridError( err );
}
}
}
}
if( this->hErrorList != nullptr ) // 現在のフォーム入力から発見されたエラー
{
for each( RCMrcError ^err in this->hErrorList )
{
if( this->isDisplayOneGridErrorForPurpose( err ) )
{
this->gridError->Rows->Add( err->getAll(this->isJapanese()) );
this->colorGridError( err );
}
}
}
}
void Form1::overloadGridWarn( void )
{
this->gridWarn->Rows->Clear();
if( this->hSrl->hWarnList != nullptr )
{
for each( RCMrcError ^err in this->hSrl->hWarnList )
{
if( !err->IsEnableModify )
{
if( this->isDisplayOneGridErrorForPurpose( err ) )
{
this->gridWarn->Rows->Add( err->getAll(this->isJapanese()) );
this->colorGridWarn( err );
}
}
}
}
if( this->hWarnList != nullptr )
{
for each( RCMrcError ^err in this->hWarnList )
{
if( this->isDisplayOneGridErrorForPurpose( err ) )
{
this->gridWarn->Rows->Add( err->getAll(this->isJapanese()) );
this->colorGridWarn( err );
}
}
}
}
// セルの色を変える
void Form1::colorGridError( RCMrcError ^err )
{
if( err->IsAffectRom && !err->IsEnableModify ) // SRLに関係ありで修正不可
{
System::Int32 last = this->gridError->Rows->Count - 2; // 追加直後の行
this->gridError->Rows[ last ]->DefaultCellStyle->ForeColor = System::Drawing::Color::Red;
}
else if( err->IsAffectRom && err->IsEnableModify ) // SRLに関係ありで修正可
{
System::Int32 last = this->gridError->Rows->Count - 2;
this->gridError->Rows[ last ]->DefaultCellStyle->ForeColor = System::Drawing::Color::Blue;
}
}
void Form1::colorGridWarn( RCMrcError ^err )
{
if( err->IsAffectRom && !err->IsEnableModify )
{
System::Int32 last = this->gridWarn->Rows->Count - 2;
this->gridWarn->Rows[ last ]->DefaultCellStyle->ForeColor = System::Drawing::Color::Red;
}
else if( err->IsAffectRom && err->IsEnableModify )
{
System::Int32 last = this->gridWarn->Rows->Count - 2;
this->gridWarn->Rows[ last ]->DefaultCellStyle->ForeColor = System::Drawing::Color::Blue;
}
}
// まとめて更新
void Form1::updateGrid(void)
{
if( this->rErrorReading->Checked == true )
{
this->setGridError();
this->setGridWarn();
}
else
{
if( !System::String::IsNullOrEmpty(this->tboxFile->Text) )
{
this->hErrorList->Clear();
this->hWarnList->Clear();
this->checkSrlForms();
this->checkDeliverableForms();
this->overloadGridError();
this->overloadGridWarn();
}
}
}
// ----------------------------------------------
// エラーカウント
// ----------------------------------------------
// SRLには関係しない書類上のエラーをチェック
System::Boolean Form1::isValidOnlyDeliverable(void)
{
System::Int32 count = 0;
// SRLクラスのエラーリストはすべてSRLに関係するのでチェックしない
// -> 入力エラーのみのチェックでよい
for each( RCMrcError ^err in this->hErrorList )
{
if( !err->IsAffectRom )
count++;
}
return (count == 0);
}
// SRLのバイナリに影響する項目にエラーがあるかチェック
System::Boolean Form1::isValidAffectRom(void)
{
System::Int32 count = 0;
// SRLクラスの修正不可エラーをカウント
// (修正可エラーは入力によって修正されてるかもしれないのでチェックしない)
for each( RCMrcError ^err in this->hSrl->hErrorList )
{
if( !err->IsEnableModify ) // すべてSRLバイナリに影響する
count++;
}
// SRLバイナリに影響するエラーの中で
// 修正可エラーがフォーム入力によって修正されているかカウント
// (エラーリストが更新されていることが前提)
for each( RCMrcError ^err in this->hErrorList )
{
if( err->IsAffectRom ) // 修正不可エラーは存在しない
count++;
}
return (count == 0);
}
// SRLのバイナリに影響する項目の中で修正可能なエラーだけをチェック
System::Boolean Form1::isValidAffectRomModified(void)
{
System::Int32 count = 0;
for each( RCMrcError ^err in this->hErrorList )
{
if( err->IsAffectRom ) // 修正不可エラーは存在しない
count++;
}
return (count == 0);
}
// ----------------------------------------------
// ファイル操作ユーティリティ
// ----------------------------------------------
// ファイルをダイアログで取得
// @arg [in] 拡張子フィルタ
// @ret 取得したファイル名 エラーのとき nullptr
System::String^ Form1::openFileDlg( System::String ^filter )
{
System::Windows::Forms::OpenFileDialog ^dlg = gcnew (OpenFileDialog);
if( System::String::IsNullOrEmpty( this->prevDir ) || !System::IO::Directory::Exists( this->prevDir ) )
{
dlg->InitialDirectory = System::Environment::GetFolderPath( System::Environment::SpecialFolder::Desktop );
}
else
{
dlg->InitialDirectory = this->prevDir; // 前に選んだディレクトリをデフォルトにする
}
dlg->Filter = filter;
dlg->FilterIndex = 1;
dlg->RestoreDirectory = true;
if( dlg->ShowDialog() != System::Windows::Forms::DialogResult::OK )
{
return nullptr;
}
this->prevDir = System::IO::Path::GetDirectoryName( dlg->FileName ); // デフォルトディレクトリの更新
return System::String::Copy(dlg->FileName);
}
// セーブするファイルをダイアログで取得
// @arg [in] 拡張子フィルタ
// @arg [in] ファイルの拡張子が不正なときに追加するときの正しい拡張子
// @ret 取得したファイル名 エラーのとき nullptr
System::String^ Form1::saveFileDlg( System::String ^filter, System::String ^extension )
{
System::String ^retfile;
System::Windows::Forms::SaveFileDialog ^dlg = gcnew (SaveFileDialog);
if( System::String::IsNullOrEmpty( this->prevDir ) || !System::IO::Directory::Exists( this->prevDir ) )
{
dlg->InitialDirectory = System::Environment::GetFolderPath( System::Environment::SpecialFolder::Desktop );
}
else
{
dlg->InitialDirectory = this->prevDir;
}
dlg->Filter = filter;
dlg->FilterIndex = 1;
dlg->RestoreDirectory = true;
if( dlg->ShowDialog() != System::Windows::Forms::DialogResult::OK )
{
return nullptr;
}
this->prevDir = System::IO::Path::GetDirectoryName( dlg->FileName );
retfile = dlg->FileName;
if( !System::String::IsNullOrEmpty(extension) && !(dlg->FileName->ToLower()->EndsWith( extension->ToLower() )) )
{
retfile += extension;
}
return retfile;
}
// セーブするディレクトリをダイアログで取得
// @ret 取得したディレクトリ名(\\で終わるように調整される) エラーのときnullptr
System::String^ Form1::saveDirDlg( System::String ^msg )
{
System::String ^dir;
System::Windows::Forms::FolderBrowserDialog ^dlg = gcnew (System::Windows::Forms::FolderBrowserDialog);
// デフォルトのフォルダを前に選択したフォルダにする
dlg->RootFolder = System::Environment::SpecialFolder::Desktop;
if( System::String::IsNullOrEmpty( this->prevDir ) || !System::IO::Directory::Exists( this->prevDir ) )
{
dlg->SelectedPath = System::Environment::GetFolderPath( System::Environment::SpecialFolder::Desktop );
}
else
{
dlg->SelectedPath = this->prevDir;
}
dlg->ShowNewFolderButton = true;
dlg->Description = msg; // ダイアログの上部に出るメッセージ
if( dlg->ShowDialog() != System::Windows::Forms::DialogResult::OK )
{
return nullptr;
}
if( !dlg->SelectedPath->EndsWith("\\") )
{
dir = dlg->SelectedPath + "\\";
}
else
{
dir = System::String::Copy(dlg->SelectedPath);
}
this->prevDir = dir; // 選択したフォルダを次のフォルダにする
return dir;
}
// ファイルが存在するかを調べて上書き確認をする
bool Form1::isOverwriteFile( System::String ^path )
{
if( System::IO::File::Exists( path ) )
{
if( MessageBox::Show( this->makeMsg( "OverWrite", path ), "Information", MessageBoxButtons::YesNo, MessageBoxIcon::None )
== System::Windows::Forms::DialogResult::No )
{
return false;
}
}
return true; // ファイルが存在しない場合 || 上書きOKの場合 ファイルを作成してもよい
}
// end of file

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,456 @@
<?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="131072"
>
<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;&quot;C:\Documents and Settings\nishikawa_takeshi\My Documents\Visual Studio 2008\Projects\MasterEditorTWL_Common\user&quot;"
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="&quot;C:\Documents and Settings\nishikawa_takeshi\My Documents\Visual Studio 2008\Projects\MasterEditorTWL_Common\flags\lib\X86&quot;;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="&quot;C:\Documents and Settings\nishikawa_takeshi\My Documents\Visual Studio 2008\Projects\MasterEditorTWL_Common\user&quot;;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="&quot;C:\Documents and Settings\nishikawa_takeshi\My Documents\Visual Studio 2008\Projects\MasterEditorTWL_Common\flags\lib\X86&quot;;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=".\banner_char_china.cpp"
>
</File>
<File
RelativePath=".\banner_char_korea.cpp"
>
</File>
<File
RelativePath=".\banner_char_worldwide.cpp"
>
</File>
<File
RelativePath=".\crc_whole.cpp"
>
</File>
<File
RelativePath=".\deliverable.cpp"
>
</File>
<File
RelativePath=".\Form_constructor.cpp"
>
</File>
<File
RelativePath=".\Form_deliv.cpp"
>
</File>
<File
RelativePath=".\Form_errorlist.cpp"
>
</File>
<File
RelativePath=".\Form_file.cpp"
>
</File>
<File
RelativePath=".\Form_init.cpp"
>
</File>
<File
RelativePath=".\Form_lang.cpp"
>
</File>
<File
RelativePath=".\Form_mwlist.cpp"
>
</File>
<File
RelativePath=".\Form_pctl.cpp"
>
</File>
<File
RelativePath=".\Form_rominfolist.cpp"
>
</File>
<File
RelativePath=".\Form_srl.cpp"
>
</File>
<File
RelativePath=".\Form_tmp.cpp"
>
</File>
<File
RelativePath=".\Form_util.cpp"
>
</File>
<File
RelativePath=".\keys.cpp"
>
</File>
<File
RelativePath=".\MasterEditorTWL.cpp"
>
</File>
<File
RelativePath=".\message_bank.cpp"
>
</File>
<File
RelativePath=".\split_tad.cpp"
>
</File>
<File
RelativePath=".\split_tad_util.cpp"
>
</File>
<File
RelativePath=".\srl.cpp"
>
</File>
<File
RelativePath=".\srl_mrc.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=".\banner_char.h"
>
</File>
<File
RelativePath=".\common.h"
>
</File>
<File
RelativePath=".\crc_whole.h"
>
</File>
<File
RelativePath=".\deliverable.h"
>
</File>
<File
RelativePath=".\Form1.h"
FileType="3"
>
<File
RelativePath=".\Form1.en.resx"
SubType="Designer"
>
</File>
<File
RelativePath=".\Form1.ja.resx"
SubType="Designer"
>
</File>
<File
RelativePath=".\Form1.resX"
SubType="Designer"
>
</File>
</File>
<File
RelativePath=".\Form1_const.h"
>
</File>
<File
RelativePath=".\FormError.cpp"
>
</File>
<File
RelativePath=".\FormError.h"
FileType="3"
>
<File
RelativePath=".\FormError.resx"
SubType="Designer"
>
</File>
</File>
<File
RelativePath=".\keys.h"
>
</File>
<File
RelativePath=".\lang.h"
>
</File>
<File
RelativePath=".\message_bank.h"
>
</File>
<File
RelativePath=".\middleware_name_list.h"
>
</File>
<File
RelativePath=".\resource.h"
>
</File>
<File
RelativePath=".\split_tad.h"
>
</File>
<File
RelativePath=".\split_tad_util.h"
>
</File>
<File
RelativePath=".\srl.h"
>
</File>
<File
RelativePath=".\srl_const.h"
>
</File>
<File
RelativePath=".\srl_element.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,15 @@
#pragma once
#include <twl/types.h>
namespace MasterEditorTWL
{
extern const int NumOf_BannerCharCodes_China;
extern const u16 BannerCharCodes_China[];
extern const int NumOf_BannerCharCodes_Korea;
extern const u16 BannerCharCodes_Korea[];
extern const int NumOf_BannerCharCodes_Worldwide;
extern const u16 BannerCharCodes_Worldwide[];
};

View File

@ -0,0 +1,460 @@
#include "stdafx.h"
#include <twl/types.h>
#include <twl/os/common/format_rom.h>
#include <twl/os/common/ownerInfoEx.h>
#include "banner_char.h"
const int MasterEditorTWL::NumOf_BannerCharCodes_China = 7179;
const u16 MasterEditorTWL::BannerCharCodes_China[7179] =
{
0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f,
0x00a1, 0x00a2, 0x00a3, 0x00a8, 0x00a9, 0x00ae, 0x00b0, 0x00b1, 0x00b4, 0x00b7, 0x00bf, 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4,
0x00c5, 0x00c6, 0x00c7, 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4,
0x00d5, 0x00d6, 0x00d7, 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00df, 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5,
0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5,
0x00f6, 0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x0152, 0x0153, 0x02c6, 0x02dc, 0x2010, 0x2015, 0x2018, 0x2019,
0x201a, 0x201c, 0x201d, 0x201e, 0x2022, 0x2026, 0x2032, 0x2033, 0x203a, 0x203b, 0x20ac, 0x2122, 0x2190, 0x2191, 0x2192, 0x2193,
0x221e, 0x2234, 0x25a0, 0x25a1, 0x25b2, 0x25b3, 0x25bc, 0x25bd, 0x25c6, 0x25c7, 0x25cb, 0x25ce, 0x25cf, 0x2605, 0x2606, 0x266a,
0x266d, 0x266f, 0x3000, 0x3001, 0x3002, 0x3005, 0x3008, 0x3009, 0x300c, 0x300d, 0x3012, 0x3014, 0x3015, 0x3041, 0x3042, 0x3043,
0x3044, 0x3045, 0x3046, 0x3047, 0x3048, 0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, 0x3050, 0x3051, 0x3052, 0x3053,
0x3054, 0x3055, 0x3056, 0x3057, 0x3058, 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, 0x3060, 0x3061, 0x3062, 0x3063,
0x3064, 0x3065, 0x3066, 0x3067, 0x3068, 0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f, 0x3070, 0x3071, 0x3072, 0x3073,
0x3074, 0x3075, 0x3076, 0x3077, 0x3078, 0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x307f, 0x3080, 0x3081, 0x3082, 0x3083,
0x3084, 0x3085, 0x3086, 0x3087, 0x3088, 0x3089, 0x308a, 0x308b, 0x308c, 0x308d, 0x308e, 0x308f, 0x3090, 0x3091, 0x3092, 0x3093,
0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, 0x30a8, 0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af, 0x30b0,
0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7, 0x30b8, 0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf, 0x30c0,
0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7, 0x30c8, 0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d0,
0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7, 0x30d8, 0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df, 0x30e0,
0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, 0x30e8, 0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x30ef, 0x30f0,
0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6, 0x30fb, 0x30fc, 0xff01, 0xff06, 0xff08, 0xff09, 0xff0b, 0xff0c, 0xff0d, 0xff0e,
0xff0f, 0xff1a, 0xff1b, 0xff1d, 0xff1f, 0xff3b, 0xff3c, 0xff3d, 0xff3e, 0xff3f, 0xff40, 0xff5b, 0xff5c, 0xff5d, 0xff5e, 0xffe3,
0x4e00, 0x4e01, 0x4e03, 0x4e07, 0x4e08, 0x4e09, 0x4e0a, 0x4e0b, 0x4e0c, 0x4e0d, 0x4e0e, 0x4e10, 0x4e11, 0x4e13, 0x4e14, 0x4e15,
0x4e16, 0x4e18, 0x4e19, 0x4e1a, 0x4e1b, 0x4e1c, 0x4e1d, 0x4e1e, 0x4e22, 0x4e24, 0x4e25, 0x4e27, 0x4e28, 0x4e2a, 0x4e2b, 0x4e2c,
0x4e2d, 0x4e30, 0x4e32, 0x4e34, 0x4e36, 0x4e38, 0x4e39, 0x4e3a, 0x4e3b, 0x4e3d, 0x4e3e, 0x4e3f, 0x4e43, 0x4e45, 0x4e47, 0x4e48,
0x4e49, 0x4e4b, 0x4e4c, 0x4e4d, 0x4e4e, 0x4e4f, 0x4e50, 0x4e52, 0x4e53, 0x4e54, 0x4e56, 0x4e58, 0x4e59, 0x4e5c, 0x4e5d, 0x4e5e,
0x4e5f, 0x4e60, 0x4e61, 0x4e66, 0x4e69, 0x4e70, 0x4e71, 0x4e73, 0x4e7e, 0x4e86, 0x4e88, 0x4e89, 0x4e8b, 0x4e8c, 0x4e8d, 0x4e8e,
0x4e8f, 0x4e91, 0x4e92, 0x4e93, 0x4e94, 0x4e95, 0x4e98, 0x4e9a, 0x4e9b, 0x4e9f, 0x4ea0, 0x4ea1, 0x4ea2, 0x4ea4, 0x4ea5, 0x4ea6,
0x4ea7, 0x4ea8, 0x4ea9, 0x4eab, 0x4eac, 0x4ead, 0x4eae, 0x4eb2, 0x4eb3, 0x4eb5, 0x4eba, 0x4ebb, 0x4ebf, 0x4ec0, 0x4ec1, 0x4ec2,
0x4ec3, 0x4ec4, 0x4ec5, 0x4ec6, 0x4ec7, 0x4ec9, 0x4eca, 0x4ecb, 0x4ecd, 0x4ece, 0x4ed1, 0x4ed3, 0x4ed4, 0x4ed5, 0x4ed6, 0x4ed7,
0x4ed8, 0x4ed9, 0x4edd, 0x4ede, 0x4edf, 0x4ee1, 0x4ee3, 0x4ee4, 0x4ee5, 0x4ee8, 0x4eea, 0x4eeb, 0x4eec, 0x4ef0, 0x4ef2, 0x4ef3,
0x4ef5, 0x4ef6, 0x4ef7, 0x4efb, 0x4efd, 0x4eff, 0x4f01, 0x4f09, 0x4f0a, 0x4f0d, 0x4f0e, 0x4f0f, 0x4f10, 0x4f11, 0x4f17, 0x4f18,
0x4f19, 0x4f1a, 0x4f1b, 0x4f1e, 0x4f1f, 0x4f20, 0x4f22, 0x4f24, 0x4f25, 0x4f26, 0x4f27, 0x4f2a, 0x4f2b, 0x4f2f, 0x4f30, 0x4f32,
0x4f34, 0x4f36, 0x4f38, 0x4f3a, 0x4f3c, 0x4f3d, 0x4f43, 0x4f46, 0x4f4d, 0x4f4e, 0x4f4f, 0x4f50, 0x4f51, 0x4f53, 0x4f55, 0x4f57,
0x4f58, 0x4f59, 0x4f5a, 0x4f5b, 0x4f5c, 0x4f5d, 0x4f5e, 0x4f5f, 0x4f60, 0x4f63, 0x4f64, 0x4f65, 0x4f67, 0x4f69, 0x4f6c, 0x4f6f,
0x4f70, 0x4f73, 0x4f74, 0x4f76, 0x4f7b, 0x4f7c, 0x4f7e, 0x4f7f, 0x4f83, 0x4f84, 0x4f88, 0x4f89, 0x4f8b, 0x4f8d, 0x4f8f, 0x4f91,
0x4f94, 0x4f97, 0x4f9b, 0x4f9d, 0x4fa0, 0x4fa3, 0x4fa5, 0x4fa6, 0x4fa7, 0x4fa8, 0x4fa9, 0x4faa, 0x4fac, 0x4fae, 0x4faf, 0x4fb5,
0x4fbf, 0x4fc3, 0x4fc4, 0x4fc5, 0x4fca, 0x4fce, 0x4fcf, 0x4fd0, 0x4fd1, 0x4fd7, 0x4fd8, 0x4fda, 0x4fdc, 0x4fdd, 0x4fde, 0x4fdf,
0x4fe1, 0x4fe3, 0x4fe6, 0x4fe8, 0x4fe9, 0x4fea, 0x4fed, 0x4fee, 0x4fef, 0x4ff1, 0x4ff3, 0x4ff8, 0x4ffa, 0x4ffe, 0x500c, 0x500d,
0x500f, 0x5012, 0x5014, 0x5018, 0x5019, 0x501a, 0x501c, 0x501f, 0x5021, 0x5025, 0x5026, 0x5028, 0x5029, 0x502a, 0x502c, 0x502d,
0x502e, 0x503a, 0x503c, 0x503e, 0x5043, 0x5047, 0x5048, 0x504c, 0x504e, 0x504f, 0x5055, 0x505a, 0x505c, 0x5065, 0x506c, 0x5076,
0x5077, 0x507b, 0x507e, 0x507f, 0x5080, 0x5085, 0x5088, 0x508d, 0x50a3, 0x50a5, 0x50a7, 0x50a8, 0x50a9, 0x50ac, 0x50b2, 0x50ba,
0x50bb, 0x50cf, 0x50d6, 0x50da, 0x50e6, 0x50e7, 0x50ec, 0x50ed, 0x50ee, 0x50f3, 0x50f5, 0x50fb, 0x5106, 0x5107, 0x510b, 0x5112,
0x5121, 0x513f, 0x5140, 0x5141, 0x5143, 0x5144, 0x5145, 0x5146, 0x5148, 0x5149, 0x514b, 0x514d, 0x5151, 0x5154, 0x5155, 0x5156,
0x515a, 0x515c, 0x5162, 0x5165, 0x5168, 0x516b, 0x516c, 0x516d, 0x516e, 0x5170, 0x5171, 0x5173, 0x5174, 0x5175, 0x5176, 0x5177,
0x5178, 0x5179, 0x517b, 0x517c, 0x517d, 0x5180, 0x5181, 0x5182, 0x5185, 0x5188, 0x5189, 0x518c, 0x518d, 0x5192, 0x5195, 0x5196,
0x5197, 0x5199, 0x519b, 0x519c, 0x51a0, 0x51a2, 0x51a4, 0x51a5, 0x51ab, 0x51ac, 0x51af, 0x51b0, 0x51b1, 0x51b2, 0x51b3, 0x51b5,
0x51b6, 0x51b7, 0x51bb, 0x51bc, 0x51bd, 0x51c0, 0x51c4, 0x51c6, 0x51c7, 0x51c9, 0x51cb, 0x51cc, 0x51cf, 0x51d1, 0x51db, 0x51dd,
0x51e0, 0x51e1, 0x51e4, 0x51eb, 0x51ed, 0x51ef, 0x51f0, 0x51f3, 0x51f5, 0x51f6, 0x51f8, 0x51f9, 0x51fa, 0x51fb, 0x51fc, 0x51fd,
0x51ff, 0x5200, 0x5201, 0x5202, 0x5203, 0x5206, 0x5207, 0x5208, 0x520a, 0x520d, 0x520e, 0x5211, 0x5212, 0x5216, 0x5217, 0x5218,
0x5219, 0x521a, 0x521b, 0x521d, 0x5220, 0x5224, 0x5228, 0x5229, 0x522b, 0x522d, 0x522e, 0x5230, 0x5233, 0x5236, 0x5237, 0x5238,
0x5239, 0x523a, 0x523b, 0x523d, 0x523f, 0x5240, 0x5241, 0x5242, 0x5243, 0x524a, 0x524c, 0x524d, 0x5250, 0x5251, 0x5254, 0x5256,
0x525c, 0x525e, 0x5261, 0x5265, 0x5267, 0x5269, 0x526a, 0x526f, 0x5272, 0x527d, 0x527f, 0x5281, 0x5282, 0x5288, 0x5290, 0x5293,
0x529b, 0x529d, 0x529e, 0x529f, 0x52a0, 0x52a1, 0x52a2, 0x52a3, 0x52a8, 0x52a9, 0x52aa, 0x52ab, 0x52ac, 0x52ad, 0x52b1, 0x52b2,
0x52b3, 0x52be, 0x52bf, 0x52c3, 0x52c7, 0x52c9, 0x52cb, 0x52d0, 0x52d2, 0x52d6, 0x52d8, 0x52df, 0x52e4, 0x52f0, 0x52f9, 0x52fa,
0x52fe, 0x52ff, 0x5300, 0x5305, 0x5306, 0x5308, 0x530d, 0x530f, 0x5310, 0x5315, 0x5316, 0x5317, 0x5319, 0x531a, 0x531d, 0x5320,
0x5321, 0x5323, 0x5326, 0x532a, 0x532e, 0x5339, 0x533a, 0x533b, 0x533e, 0x533f, 0x5341, 0x5343, 0x5345, 0x5347, 0x5348, 0x5349,
0x534a, 0x534e, 0x534f, 0x5351, 0x5352, 0x5353, 0x5355, 0x5356, 0x5357, 0x535a, 0x535c, 0x535e, 0x535f, 0x5360, 0x5361, 0x5362,
0x5363, 0x5364, 0x5366, 0x5367, 0x5369, 0x536b, 0x536e, 0x536f, 0x5370, 0x5371, 0x5373, 0x5374, 0x5375, 0x5377, 0x5378, 0x537a,
0x537f, 0x5382, 0x5384, 0x5385, 0x5386, 0x5389, 0x538b, 0x538c, 0x538d, 0x5395, 0x5398, 0x539a, 0x539d, 0x539f, 0x53a2, 0x53a3,
0x53a5, 0x53a6, 0x53a8, 0x53a9, 0x53ae, 0x53b6, 0x53bb, 0x53bf, 0x53c1, 0x53c2, 0x53c8, 0x53c9, 0x53ca, 0x53cb, 0x53cc, 0x53cd,
0x53d1, 0x53d4, 0x53d6, 0x53d7, 0x53d8, 0x53d9, 0x53db, 0x53df, 0x53e0, 0x53e3, 0x53e4, 0x53e5, 0x53e6, 0x53e8, 0x53e9, 0x53ea,
0x53eb, 0x53ec, 0x53ed, 0x53ee, 0x53ef, 0x53f0, 0x53f1, 0x53f2, 0x53f3, 0x53f5, 0x53f6, 0x53f7, 0x53f8, 0x53f9, 0x53fb, 0x53fc,
0x53fd, 0x5401, 0x5403, 0x5404, 0x5406, 0x5408, 0x5409, 0x540a, 0x540c, 0x540d, 0x540e, 0x540f, 0x5410, 0x5411, 0x5412, 0x5413,
0x5415, 0x5416, 0x5417, 0x541b, 0x541d, 0x541e, 0x541f, 0x5420, 0x5421, 0x5423, 0x5426, 0x5427, 0x5428, 0x5429, 0x542b, 0x542c,
0x542d, 0x542e, 0x542f, 0x5431, 0x5432, 0x5434, 0x5435, 0x5438, 0x5439, 0x543b, 0x543c, 0x543e, 0x5440, 0x5443, 0x5446, 0x5448,
0x544a, 0x544b, 0x5450, 0x5452, 0x5453, 0x5454, 0x5455, 0x5456, 0x5457, 0x5458, 0x5459, 0x545b, 0x545c, 0x5462, 0x5464, 0x5466,
0x5468, 0x5471, 0x5472, 0x5473, 0x5475, 0x5476, 0x5477, 0x5478, 0x547b, 0x547c, 0x547d, 0x5480, 0x5482, 0x5484, 0x5486, 0x548b,
0x548c, 0x548e, 0x548f, 0x5490, 0x5492, 0x5494, 0x5495, 0x5496, 0x5499, 0x549a, 0x549b, 0x549d, 0x54a3, 0x54a4, 0x54a6, 0x54a7,
0x54a8, 0x54a9, 0x54aa, 0x54ab, 0x54ac, 0x54ad, 0x54af, 0x54b1, 0x54b3, 0x54b4, 0x54b8, 0x54bb, 0x54bd, 0x54bf, 0x54c0, 0x54c1,
0x54c2, 0x54c4, 0x54c6, 0x54c7, 0x54c8, 0x54c9, 0x54cc, 0x54cd, 0x54ce, 0x54cf, 0x54d0, 0x54d1, 0x54d2, 0x54d3, 0x54d4, 0x54d5,
0x54d7, 0x54d9, 0x54da, 0x54dc, 0x54dd, 0x54de, 0x54df, 0x54e5, 0x54e6, 0x54e7, 0x54e8, 0x54e9, 0x54ea, 0x54ed, 0x54ee, 0x54f2,
0x54f3, 0x54fa, 0x54fc, 0x54fd, 0x54ff, 0x5501, 0x5506, 0x5507, 0x5509, 0x550f, 0x5510, 0x5511, 0x5514, 0x551b, 0x5520, 0x5522,
0x5523, 0x5524, 0x5527, 0x552a, 0x552c, 0x552e, 0x552f, 0x5530, 0x5531, 0x5533, 0x5537, 0x553c, 0x553e, 0x553f, 0x5541, 0x5543,
0x5544, 0x5546, 0x5549, 0x554a, 0x5550, 0x5555, 0x5556, 0x555c, 0x5561, 0x5564, 0x5565, 0x5566, 0x5567, 0x556a, 0x556c, 0x556d,
0x556e, 0x5575, 0x5576, 0x5577, 0x5578, 0x557b, 0x557c, 0x557e, 0x5580, 0x5581, 0x5582, 0x5583, 0x5584, 0x5587, 0x5588, 0x5589,
0x558a, 0x558b, 0x558f, 0x5591, 0x5594, 0x5598, 0x5599, 0x559c, 0x559d, 0x559f, 0x55a7, 0x55b1, 0x55b3, 0x55b5, 0x55b7, 0x55b9,
0x55bb, 0x55bd, 0x55be, 0x55c4, 0x55c5, 0x55c9, 0x55cc, 0x55cd, 0x55d1, 0x55d2, 0x55d3, 0x55d4, 0x55d6, 0x55dc, 0x55dd, 0x55df,
0x55e1, 0x55e3, 0x55e4, 0x55e5, 0x55e6, 0x55e8, 0x55ea, 0x55eb, 0x55ec, 0x55ef, 0x55f2, 0x55f3, 0x55f5, 0x55f7, 0x55fd, 0x55fe,
0x5600, 0x5601, 0x5608, 0x5609, 0x560c, 0x560e, 0x560f, 0x5618, 0x561b, 0x561e, 0x561f, 0x5623, 0x5624, 0x5627, 0x562c, 0x562d,
0x5631, 0x5632, 0x5634, 0x5636, 0x5639, 0x563b, 0x563f, 0x564c, 0x564d, 0x564e, 0x5654, 0x5657, 0x5658, 0x5659, 0x565c, 0x5662,
0x5664, 0x5668, 0x5669, 0x566a, 0x566b, 0x566c, 0x5671, 0x5676, 0x567b, 0x567c, 0x5685, 0x5686, 0x568e, 0x568f, 0x5693, 0x56a3,
0x56af, 0x56b7, 0x56bc, 0x56ca, 0x56d4, 0x56d7, 0x56da, 0x56db, 0x56dd, 0x56de, 0x56df, 0x56e0, 0x56e1, 0x56e2, 0x56e4, 0x56eb,
0x56ed, 0x56f0, 0x56f1, 0x56f4, 0x56f5, 0x56f9, 0x56fa, 0x56fd, 0x56fe, 0x56ff, 0x5703, 0x5704, 0x5706, 0x5708, 0x5709, 0x570a,
0x571c, 0x571f, 0x5723, 0x5728, 0x5729, 0x572a, 0x572c, 0x572d, 0x572e, 0x572f, 0x5730, 0x5733, 0x5739, 0x573a, 0x573b, 0x573e,
0x5740, 0x5742, 0x5747, 0x574a, 0x574c, 0x574d, 0x574e, 0x574f, 0x5750, 0x5751, 0x5757, 0x575a, 0x575b, 0x575c, 0x575d, 0x575e,
0x575f, 0x5760, 0x5761, 0x5764, 0x5766, 0x5768, 0x5769, 0x576a, 0x576b, 0x576d, 0x576f, 0x5773, 0x5776, 0x5777, 0x577b, 0x577c,
0x5782, 0x5783, 0x5784, 0x5785, 0x5786, 0x578b, 0x578c, 0x5792, 0x5793, 0x579b, 0x57a0, 0x57a1, 0x57a2, 0x57a3, 0x57a4, 0x57a6,
0x57a7, 0x57a9, 0x57ab, 0x57ad, 0x57ae, 0x57b2, 0x57b4, 0x57b8, 0x57c2, 0x57c3, 0x57cb, 0x57ce, 0x57cf, 0x57d2, 0x57d4, 0x57d5,
0x57d8, 0x57d9, 0x57da, 0x57dd, 0x57df, 0x57e0, 0x57e4, 0x57ed, 0x57ef, 0x57f4, 0x57f8, 0x57f9, 0x57fa, 0x57fd, 0x5800, 0x5802,
0x5806, 0x5807, 0x580b, 0x580d, 0x5811, 0x5815, 0x5819, 0x581e, 0x5820, 0x5821, 0x5824, 0x582a, 0x5830, 0x5835, 0x5844, 0x584c,
0x584d, 0x5851, 0x5854, 0x5858, 0x585e, 0x5865, 0x586b, 0x586c, 0x587e, 0x5880, 0x5881, 0x5883, 0x5885, 0x5889, 0x5892, 0x5893,
0x5899, 0x589a, 0x589e, 0x589f, 0x58a8, 0x58a9, 0x58bc, 0x58c1, 0x58c5, 0x58d1, 0x58d5, 0x58e4, 0x58eb, 0x58ec, 0x58ee, 0x58f0,
0x58f3, 0x58f6, 0x58f9, 0x5902, 0x5904, 0x5907, 0x590d, 0x590f, 0x5914, 0x5915, 0x5916, 0x5919, 0x591a, 0x591c, 0x591f, 0x5924,
0x5925, 0x5927, 0x5929, 0x592a, 0x592b, 0x592d, 0x592e, 0x592f, 0x5931, 0x5934, 0x5937, 0x5938, 0x5939, 0x593a, 0x593c, 0x5941,
0x5942, 0x5944, 0x5947, 0x5948, 0x5949, 0x594b, 0x594e, 0x594f, 0x5951, 0x5954, 0x5955, 0x5956, 0x5957, 0x5958, 0x595a, 0x5960,
0x5962, 0x5965, 0x5973, 0x5974, 0x5976, 0x5978, 0x5979, 0x597d, 0x5981, 0x5982, 0x5983, 0x5984, 0x5986, 0x5987, 0x5988, 0x598a,
0x598d, 0x5992, 0x5993, 0x5996, 0x5997, 0x5999, 0x599e, 0x59a3, 0x59a4, 0x59a5, 0x59a8, 0x59a9, 0x59aa, 0x59ab, 0x59ae, 0x59af,
0x59b2, 0x59b9, 0x59bb, 0x59be, 0x59c6, 0x59ca, 0x59cb, 0x59d0, 0x59d1, 0x59d2, 0x59d3, 0x59d4, 0x59d7, 0x59d8, 0x59da, 0x59dc,
0x59dd, 0x59e3, 0x59e5, 0x59e8, 0x59ec, 0x59f9, 0x59fb, 0x59ff, 0x5a01, 0x5a03, 0x5a04, 0x5a05, 0x5a06, 0x5a07, 0x5a08, 0x5a09,
0x5a0c, 0x5a11, 0x5a13, 0x5a18, 0x5a1c, 0x5a1f, 0x5a20, 0x5a23, 0x5a25, 0x5a29, 0x5a31, 0x5a32, 0x5a34, 0x5a36, 0x5a3c, 0x5a40,
0x5a46, 0x5a49, 0x5a4a, 0x5a55, 0x5a5a, 0x5a62, 0x5a67, 0x5a6a, 0x5a74, 0x5a75, 0x5a76, 0x5a77, 0x5a7a, 0x5a7f, 0x5a92, 0x5a9a,
0x5a9b, 0x5aaa, 0x5ab2, 0x5ab3, 0x5ab5, 0x5ab8, 0x5abe, 0x5ac1, 0x5ac2, 0x5ac9, 0x5acc, 0x5ad2, 0x5ad4, 0x5ad6, 0x5ad8, 0x5adc,
0x5ae0, 0x5ae1, 0x5ae3, 0x5ae6, 0x5ae9, 0x5aeb, 0x5af1, 0x5b09, 0x5b16, 0x5b17, 0x5b32, 0x5b34, 0x5b37, 0x5b40, 0x5b50, 0x5b51,
0x5b53, 0x5b54, 0x5b55, 0x5b57, 0x5b58, 0x5b59, 0x5b5a, 0x5b5b, 0x5b5c, 0x5b5d, 0x5b5f, 0x5b62, 0x5b63, 0x5b64, 0x5b65, 0x5b66,
0x5b69, 0x5b6a, 0x5b6c, 0x5b70, 0x5b71, 0x5b73, 0x5b75, 0x5b7a, 0x5b7d, 0x5b80, 0x5b81, 0x5b83, 0x5b84, 0x5b85, 0x5b87, 0x5b88,
0x5b89, 0x5b8b, 0x5b8c, 0x5b8f, 0x5b93, 0x5b95, 0x5b97, 0x5b98, 0x5b99, 0x5b9a, 0x5b9b, 0x5b9c, 0x5b9d, 0x5b9e, 0x5ba0, 0x5ba1,
0x5ba2, 0x5ba3, 0x5ba4, 0x5ba5, 0x5ba6, 0x5baa, 0x5bab, 0x5bb0, 0x5bb3, 0x5bb4, 0x5bb5, 0x5bb6, 0x5bb8, 0x5bb9, 0x5bbd, 0x5bbe,
0x5bbf, 0x5bc2, 0x5bc4, 0x5bc5, 0x5bc6, 0x5bc7, 0x5bcc, 0x5bd0, 0x5bd2, 0x5bd3, 0x5bdd, 0x5bde, 0x5bdf, 0x5be1, 0x5be4, 0x5be5,
0x5be8, 0x5bee, 0x5bf0, 0x5bf8, 0x5bf9, 0x5bfa, 0x5bfb, 0x5bfc, 0x5bff, 0x5c01, 0x5c04, 0x5c06, 0x5c09, 0x5c0a, 0x5c0f, 0x5c11,
0x5c14, 0x5c15, 0x5c16, 0x5c18, 0x5c1a, 0x5c1c, 0x5c1d, 0x5c22, 0x5c24, 0x5c25, 0x5c27, 0x5c2c, 0x5c31, 0x5c34, 0x5c38, 0x5c39,
0x5c3a, 0x5c3b, 0x5c3c, 0x5c3d, 0x5c3e, 0x5c3f, 0x5c40, 0x5c41, 0x5c42, 0x5c45, 0x5c48, 0x5c49, 0x5c4a, 0x5c4b, 0x5c4e, 0x5c4f,
0x5c50, 0x5c51, 0x5c55, 0x5c59, 0x5c5e, 0x5c60, 0x5c61, 0x5c63, 0x5c65, 0x5c66, 0x5c6e, 0x5c6f, 0x5c71, 0x5c79, 0x5c7a, 0x5c7f,
0x5c81, 0x5c82, 0x5c88, 0x5c8c, 0x5c8d, 0x5c90, 0x5c91, 0x5c94, 0x5c96, 0x5c97, 0x5c98, 0x5c99, 0x5c9a, 0x5c9b, 0x5c9c, 0x5ca2,
0x5ca3, 0x5ca9, 0x5cab, 0x5cac, 0x5cad, 0x5cb1, 0x5cb3, 0x5cb5, 0x5cb7, 0x5cb8, 0x5cbd, 0x5cbf, 0x5cc1, 0x5cc4, 0x5ccb, 0x5cd2,
0x5cd9, 0x5ce1, 0x5ce4, 0x5ce5, 0x5ce6, 0x5ce8, 0x5cea, 0x5ced, 0x5cf0, 0x5cfb, 0x5d02, 0x5d03, 0x5d06, 0x5d07, 0x5d0e, 0x5d14,
0x5d16, 0x5d1b, 0x5d1e, 0x5d24, 0x5d26, 0x5d27, 0x5d29, 0x5d2d, 0x5d2e, 0x5d34, 0x5d3d, 0x5d3e, 0x5d47, 0x5d4a, 0x5d4b, 0x5d4c,
0x5d58, 0x5d5b, 0x5d5d, 0x5d69, 0x5d6b, 0x5d6c, 0x5d6f, 0x5d74, 0x5d82, 0x5d99, 0x5d9d, 0x5db7, 0x5dc5, 0x5dcd, 0x5ddb, 0x5ddd,
0x5dde, 0x5de1, 0x5de2, 0x5de5, 0x5de6, 0x5de7, 0x5de8, 0x5de9, 0x5deb, 0x5dee, 0x5def, 0x5df1, 0x5df2, 0x5df3, 0x5df4, 0x5df7,
0x5dfd, 0x5dfe, 0x5e01, 0x5e02, 0x5e03, 0x5e05, 0x5e06, 0x5e08, 0x5e0c, 0x5e0f, 0x5e10, 0x5e11, 0x5e14, 0x5e15, 0x5e16, 0x5e18,
0x5e19, 0x5e1a, 0x5e1b, 0x5e1c, 0x5e1d, 0x5e26, 0x5e27, 0x5e2d, 0x5e2e, 0x5e31, 0x5e37, 0x5e38, 0x5e3b, 0x5e3c, 0x5e3d, 0x5e42,
0x5e44, 0x5e45, 0x5e4c, 0x5e54, 0x5e55, 0x5e5b, 0x5e5e, 0x5e61, 0x5e62, 0x5e72, 0x5e73, 0x5e74, 0x5e76, 0x5e78, 0x5e7a, 0x5e7b,
0x5e7c, 0x5e7d, 0x5e7f, 0x5e80, 0x5e84, 0x5e86, 0x5e87, 0x5e8a, 0x5e8b, 0x5e8f, 0x5e90, 0x5e91, 0x5e93, 0x5e94, 0x5e95, 0x5e96,
0x5e97, 0x5e99, 0x5e9a, 0x5e9c, 0x5e9e, 0x5e9f, 0x5ea0, 0x5ea5, 0x5ea6, 0x5ea7, 0x5ead, 0x5eb3, 0x5eb5, 0x5eb6, 0x5eb7, 0x5eb8,
0x5eb9, 0x5ebe, 0x5ec9, 0x5eca, 0x5ed1, 0x5ed2, 0x5ed3, 0x5ed6, 0x5edb, 0x5ee8, 0x5eea, 0x5ef4, 0x5ef6, 0x5ef7, 0x5efa, 0x5efe,
0x5eff, 0x5f00, 0x5f01, 0x5f02, 0x5f03, 0x5f04, 0x5f08, 0x5f0a, 0x5f0b, 0x5f0f, 0x5f11, 0x5f13, 0x5f15, 0x5f17, 0x5f18, 0x5f1b,
0x5f1f, 0x5f20, 0x5f25, 0x5f26, 0x5f27, 0x5f29, 0x5f2a, 0x5f2d, 0x5f2f, 0x5f31, 0x5f39, 0x5f3a, 0x5f3c, 0x5f40, 0x5f50, 0x5f52,
0x5f53, 0x5f55, 0x5f56, 0x5f57, 0x5f58, 0x5f5d, 0x5f61, 0x5f62, 0x5f64, 0x5f66, 0x5f69, 0x5f6a, 0x5f6c, 0x5f6d, 0x5f70, 0x5f71,
0x5f73, 0x5f77, 0x5f79, 0x5f7b, 0x5f7c, 0x5f80, 0x5f81, 0x5f82, 0x5f84, 0x5f85, 0x5f87, 0x5f88, 0x5f89, 0x5f8a, 0x5f8b, 0x5f8c,
0x5f90, 0x5f92, 0x5f95, 0x5f97, 0x5f98, 0x5f99, 0x5f9c, 0x5fa1, 0x5fa8, 0x5faa, 0x5fad, 0x5fae, 0x5fb5, 0x5fb7, 0x5fbc, 0x5fbd,
0x5fc3, 0x5fc4, 0x5fc5, 0x5fc6, 0x5fc9, 0x5fcc, 0x5fcd, 0x5fcf, 0x5fd0, 0x5fd1, 0x5fd2, 0x5fd6, 0x5fd7, 0x5fd8, 0x5fd9, 0x5fdd,
0x5fe0, 0x5fe1, 0x5fe4, 0x5fe7, 0x5fea, 0x5feb, 0x5fed, 0x5fee, 0x5ff1, 0x5ff5, 0x5ff8, 0x5ffb, 0x5ffd, 0x5ffe, 0x5fff, 0x6000,
0x6001, 0x6002, 0x6003, 0x6004, 0x6005, 0x6006, 0x600a, 0x600d, 0x600e, 0x600f, 0x6012, 0x6014, 0x6015, 0x6016, 0x6019, 0x601b,
0x601c, 0x601d, 0x6020, 0x6021, 0x6025, 0x6026, 0x6027, 0x6028, 0x6029, 0x602a, 0x602b, 0x602f, 0x6035, 0x603b, 0x603c, 0x603f,
0x6041, 0x6042, 0x6043, 0x604b, 0x604d, 0x6050, 0x6052, 0x6055, 0x6059, 0x605a, 0x605d, 0x6062, 0x6063, 0x6064, 0x6067, 0x6068,
0x6069, 0x606a, 0x606b, 0x606c, 0x606d, 0x606f, 0x6070, 0x6073, 0x6076, 0x6078, 0x6079, 0x607a, 0x607b, 0x607c, 0x607d, 0x607f,
0x6083, 0x6084, 0x6089, 0x608c, 0x608d, 0x6092, 0x6094, 0x6096, 0x609a, 0x609b, 0x609d, 0x609f, 0x60a0, 0x60a3, 0x60a6, 0x60a8,
0x60ab, 0x60ac, 0x60ad, 0x60af, 0x60b1, 0x60b2, 0x60b4, 0x60b8, 0x60bb, 0x60bc, 0x60c5, 0x60c6, 0x60ca, 0x60cb, 0x60d1, 0x60d5,
0x60d8, 0x60da, 0x60dc, 0x60dd, 0x60df, 0x60e0, 0x60e6, 0x60e7, 0x60e8, 0x60e9, 0x60eb, 0x60ec, 0x60ed, 0x60ee, 0x60ef, 0x60f0,
0x60f3, 0x60f4, 0x60f6, 0x60f9, 0x60fa, 0x6100, 0x6101, 0x6106, 0x6108, 0x6109, 0x610d, 0x610e, 0x610f, 0x6115, 0x611a, 0x611f,
0x6120, 0x6123, 0x6124, 0x6126, 0x6127, 0x612b, 0x613f, 0x6148, 0x614a, 0x614c, 0x614e, 0x6151, 0x6155, 0x615d, 0x6162, 0x6167,
0x6168, 0x6170, 0x6175, 0x6177, 0x618b, 0x618e, 0x6194, 0x619d, 0x61a7, 0x61a8, 0x61a9, 0x61ac, 0x61b7, 0x61be, 0x61c2, 0x61c8,
0x61ca, 0x61cb, 0x61d1, 0x61d2, 0x61d4, 0x61e6, 0x61f5, 0x61ff, 0x6206, 0x6208, 0x620a, 0x620b, 0x620c, 0x620d, 0x620e, 0x620f,
0x6210, 0x6211, 0x6212, 0x6215, 0x6216, 0x6217, 0x6218, 0x621a, 0x621b, 0x621f, 0x6221, 0x6222, 0x6224, 0x6225, 0x622a, 0x622c,
0x622e, 0x6233, 0x6234, 0x6237, 0x623d, 0x623e, 0x623f, 0x6240, 0x6241, 0x6243, 0x6247, 0x6248, 0x6249, 0x624b, 0x624c, 0x624d,
0x624e, 0x6251, 0x6252, 0x6253, 0x6254, 0x6258, 0x625b, 0x6263, 0x6266, 0x6267, 0x6269, 0x626a, 0x626b, 0x626c, 0x626d, 0x626e,
0x626f, 0x6270, 0x6273, 0x6276, 0x6279, 0x627c, 0x627e, 0x627f, 0x6280, 0x6284, 0x6289, 0x628a, 0x6291, 0x6292, 0x6293, 0x6295,
0x6296, 0x6297, 0x6298, 0x629a, 0x629b, 0x629f, 0x62a0, 0x62a1, 0x62a2, 0x62a4, 0x62a5, 0x62a8, 0x62ab, 0x62ac, 0x62b1, 0x62b5,
0x62b9, 0x62bb, 0x62bc, 0x62bd, 0x62bf, 0x62c2, 0x62c4, 0x62c5, 0x62c6, 0x62c7, 0x62c8, 0x62c9, 0x62ca, 0x62cc, 0x62cd, 0x62ce,
0x62d0, 0x62d2, 0x62d3, 0x62d4, 0x62d6, 0x62d7, 0x62d8, 0x62d9, 0x62da, 0x62db, 0x62dc, 0x62df, 0x62e2, 0x62e3, 0x62e5, 0x62e6,
0x62e7, 0x62e8, 0x62e9, 0x62ec, 0x62ed, 0x62ee, 0x62ef, 0x62f1, 0x62f3, 0x62f4, 0x62f6, 0x62f7, 0x62fc, 0x62fd, 0x62fe, 0x62ff,
0x6301, 0x6302, 0x6307, 0x6308, 0x6309, 0x630e, 0x6311, 0x6316, 0x631a, 0x631b, 0x631d, 0x631e, 0x631f, 0x6320, 0x6321, 0x6322,
0x6323, 0x6324, 0x6325, 0x6328, 0x632a, 0x632b, 0x632f, 0x6332, 0x6339, 0x633a, 0x633d, 0x6342, 0x6343, 0x6345, 0x6346, 0x6349,
0x634b, 0x634c, 0x634d, 0x634e, 0x634f, 0x6350, 0x6355, 0x635e, 0x635f, 0x6361, 0x6362, 0x6363, 0x6367, 0x6369, 0x636d, 0x636e,
0x6371, 0x6376, 0x6377, 0x637a, 0x637b, 0x6380, 0x6382, 0x6387, 0x6388, 0x6389, 0x638a, 0x638c, 0x638e, 0x638f, 0x6390, 0x6392,
0x6396, 0x6398, 0x63a0, 0x63a2, 0x63a3, 0x63a5, 0x63a7, 0x63a8, 0x63a9, 0x63aa, 0x63ac, 0x63ad, 0x63ae, 0x63b0, 0x63b3, 0x63b4,
0x63b7, 0x63b8, 0x63ba, 0x63bc, 0x63be, 0x63c4, 0x63c6, 0x63c9, 0x63cd, 0x63ce, 0x63cf, 0x63d0, 0x63d2, 0x63d6, 0x63de, 0x63e0,
0x63e1, 0x63e3, 0x63e9, 0x63ea, 0x63ed, 0x63f2, 0x63f4, 0x63f6, 0x63f8, 0x63fd, 0x63ff, 0x6400, 0x6401, 0x6402, 0x6405, 0x640b,
0x640c, 0x640f, 0x6410, 0x6413, 0x6414, 0x641b, 0x641c, 0x641e, 0x6420, 0x6421, 0x6426, 0x642a, 0x642c, 0x642d, 0x6434, 0x643a,
0x643d, 0x643f, 0x6441, 0x6444, 0x6445, 0x6446, 0x6447, 0x6448, 0x644a, 0x6452, 0x6454, 0x6458, 0x645e, 0x6467, 0x6469, 0x646d,
0x6478, 0x6479, 0x647a, 0x6482, 0x6484, 0x6485, 0x6487, 0x6491, 0x6492, 0x6495, 0x6496, 0x6499, 0x649e, 0x64a4, 0x64a9, 0x64ac,
0x64ad, 0x64ae, 0x64b0, 0x64b5, 0x64b7, 0x64b8, 0x64ba, 0x64bc, 0x64c0, 0x64c2, 0x64c5, 0x64cd, 0x64ce, 0x64d0, 0x64d2, 0x64d7,
0x64d8, 0x64de, 0x64e2, 0x64e4, 0x64e6, 0x6500, 0x6509, 0x6512, 0x6518, 0x6525, 0x652b, 0x652e, 0x652f, 0x6534, 0x6535, 0x6536,
0x6538, 0x6539, 0x653b, 0x653e, 0x653f, 0x6545, 0x6548, 0x6549, 0x654c, 0x654f, 0x6551, 0x6555, 0x6556, 0x6559, 0x655b, 0x655d,
0x655e, 0x6562, 0x6563, 0x6566, 0x656b, 0x656c, 0x6570, 0x6572, 0x6574, 0x6577, 0x6587, 0x658b, 0x658c, 0x6590, 0x6591, 0x6593,
0x6597, 0x6599, 0x659b, 0x659c, 0x659f, 0x65a1, 0x65a4, 0x65a5, 0x65a7, 0x65a9, 0x65ab, 0x65ad, 0x65af, 0x65b0, 0x65b9, 0x65bc,
0x65bd, 0x65c1, 0x65c3, 0x65c4, 0x65c5, 0x65c6, 0x65cb, 0x65cc, 0x65ce, 0x65cf, 0x65d2, 0x65d6, 0x65d7, 0x65e0, 0x65e2, 0x65e5,
0x65e6, 0x65e7, 0x65e8, 0x65e9, 0x65ec, 0x65ed, 0x65ee, 0x65ef, 0x65f0, 0x65f1, 0x65f6, 0x65f7, 0x65fa, 0x6600, 0x6602, 0x6603,
0x6606, 0x660a, 0x660c, 0x660e, 0x660f, 0x6613, 0x6614, 0x6615, 0x6619, 0x661d, 0x661f, 0x6620, 0x6625, 0x6627, 0x6628, 0x662d,
0x662f, 0x6631, 0x6634, 0x6635, 0x6636, 0x663c, 0x663e, 0x6641, 0x6643, 0x664b, 0x664c, 0x664f, 0x6652, 0x6653, 0x6654, 0x6655,
0x6656, 0x6657, 0x665a, 0x665f, 0x6661, 0x6664, 0x6666, 0x6668, 0x666e, 0x666f, 0x6670, 0x6674, 0x6676, 0x6677, 0x667a, 0x667e,
0x6682, 0x6684, 0x6687, 0x668c, 0x6691, 0x6696, 0x6697, 0x669d, 0x66a7, 0x66a8, 0x66ae, 0x66b4, 0x66b9, 0x66be, 0x66d9, 0x66db,
0x66dc, 0x66dd, 0x66e6, 0x66e9, 0x66f0, 0x66f2, 0x66f3, 0x66f4, 0x66f7, 0x66f9, 0x66fc, 0x66fe, 0x66ff, 0x6700, 0x6708, 0x6709,
0x670a, 0x670b, 0x670d, 0x6710, 0x6714, 0x6715, 0x6717, 0x671b, 0x671d, 0x671f, 0x6726, 0x6728, 0x672a, 0x672b, 0x672c, 0x672d,
0x672f, 0x6731, 0x6734, 0x6735, 0x673a, 0x673d, 0x6740, 0x6742, 0x6743, 0x6746, 0x6748, 0x6749, 0x674c, 0x674e, 0x674f, 0x6750,
0x6751, 0x6753, 0x6756, 0x675c, 0x675e, 0x675f, 0x6760, 0x6761, 0x6765, 0x6768, 0x6769, 0x676a, 0x676d, 0x676f, 0x6770, 0x6772,
0x6773, 0x6775, 0x6777, 0x677c, 0x677e, 0x677f, 0x6781, 0x6784, 0x6787, 0x6789, 0x678b, 0x6790, 0x6795, 0x6797, 0x6798, 0x679a,
0x679c, 0x679d, 0x679e, 0x67a2, 0x67a3, 0x67a5, 0x67a7, 0x67a8, 0x67aa, 0x67ab, 0x67ad, 0x67af, 0x67b0, 0x67b3, 0x67b5, 0x67b6,
0x67b7, 0x67b8, 0x67c1, 0x67c3, 0x67c4, 0x67cf, 0x67d0, 0x67d1, 0x67d2, 0x67d3, 0x67d4, 0x67d8, 0x67d9, 0x67da, 0x67dc, 0x67dd,
0x67de, 0x67e0, 0x67e2, 0x67e5, 0x67e9, 0x67ec, 0x67ef, 0x67f0, 0x67f1, 0x67f3, 0x67f4, 0x67fd, 0x67ff, 0x6800, 0x6805, 0x6807,
0x6808, 0x6809, 0x680a, 0x680b, 0x680c, 0x680e, 0x680f, 0x6811, 0x6813, 0x6816, 0x6817, 0x681d, 0x6821, 0x6829, 0x682a, 0x6832,
0x6833, 0x6837, 0x6838, 0x6839, 0x683c, 0x683d, 0x683e, 0x6840, 0x6841, 0x6842, 0x6843, 0x6844, 0x6845, 0x6846, 0x6848, 0x6849,
0x684a, 0x684c, 0x684e, 0x6850, 0x6851, 0x6853, 0x6854, 0x6855, 0x6860, 0x6861, 0x6862, 0x6863, 0x6864, 0x6865, 0x6866, 0x6867,
0x6868, 0x6869, 0x686b, 0x6874, 0x6876, 0x6877, 0x6881, 0x6883, 0x6885, 0x6886, 0x688f, 0x6893, 0x6897, 0x68a2, 0x68a6, 0x68a7,
0x68a8, 0x68ad, 0x68af, 0x68b0, 0x68b3, 0x68b5, 0x68c0, 0x68c2, 0x68c9, 0x68cb, 0x68cd, 0x68d2, 0x68d5, 0x68d8, 0x68da, 0x68e0,
0x68e3, 0x68ee, 0x68f0, 0x68f1, 0x68f5, 0x68f9, 0x68fa, 0x68fc, 0x6901, 0x6905, 0x690b, 0x690d, 0x690e, 0x6910, 0x6912, 0x691f,
0x6920, 0x6924, 0x692d, 0x6930, 0x6934, 0x6939, 0x693d, 0x693f, 0x6942, 0x6954, 0x6957, 0x695a, 0x695d, 0x695e, 0x6960, 0x6963,
0x6966, 0x696b, 0x696e, 0x6971, 0x6977, 0x6978, 0x6979, 0x697c, 0x6980, 0x6982, 0x6984, 0x6986, 0x6987, 0x6988, 0x6989, 0x698d,
0x6994, 0x6995, 0x6998, 0x699b, 0x699c, 0x69a7, 0x69a8, 0x69ab, 0x69ad, 0x69b1, 0x69b4, 0x69b7, 0x69bb, 0x69c1, 0x69ca, 0x69cc,
0x69ce, 0x69d0, 0x69d4, 0x69db, 0x69df, 0x69e0, 0x69ed, 0x69f2, 0x69fd, 0x69ff, 0x6a0a, 0x6a17, 0x6a18, 0x6a1f, 0x6a21, 0x6a28,
0x6a2a, 0x6a2f, 0x6a31, 0x6a35, 0x6a3d, 0x6a3e, 0x6a44, 0x6a47, 0x6a50, 0x6a58, 0x6a59, 0x6a5b, 0x6a61, 0x6a65, 0x6a71, 0x6a79,
0x6a7c, 0x6a80, 0x6a84, 0x6a8e, 0x6a90, 0x6a91, 0x6a97, 0x6aa0, 0x6aa9, 0x6aab, 0x6aac, 0x6b20, 0x6b21, 0x6b22, 0x6b23, 0x6b24,
0x6b27, 0x6b32, 0x6b37, 0x6b39, 0x6b3a, 0x6b3e, 0x6b43, 0x6b46, 0x6b47, 0x6b49, 0x6b4c, 0x6b59, 0x6b62, 0x6b63, 0x6b64, 0x6b65,
0x6b66, 0x6b67, 0x6b6a, 0x6b79, 0x6b7b, 0x6b7c, 0x6b81, 0x6b82, 0x6b83, 0x6b84, 0x6b86, 0x6b87, 0x6b89, 0x6b8a, 0x6b8b, 0x6b8d,
0x6b92, 0x6b93, 0x6b96, 0x6b9a, 0x6b9b, 0x6ba1, 0x6baa, 0x6bb3, 0x6bb4, 0x6bb5, 0x6bb7, 0x6bbf, 0x6bc1, 0x6bc2, 0x6bc5, 0x6bcb,
0x6bcd, 0x6bcf, 0x6bd2, 0x6bd3, 0x6bd4, 0x6bd5, 0x6bd6, 0x6bd7, 0x6bd9, 0x6bdb, 0x6be1, 0x6bea, 0x6beb, 0x6bef, 0x6bf3, 0x6bf5,
0x6bf9, 0x6bfd, 0x6c05, 0x6c06, 0x6c07, 0x6c0d, 0x6c0f, 0x6c10, 0x6c11, 0x6c13, 0x6c14, 0x6c15, 0x6c16, 0x6c18, 0x6c19, 0x6c1a,
0x6c1b, 0x6c1f, 0x6c21, 0x6c22, 0x6c24, 0x6c26, 0x6c27, 0x6c28, 0x6c29, 0x6c2a, 0x6c2e, 0x6c2f, 0x6c30, 0x6c32, 0x6c34, 0x6c35,
0x6c38, 0x6c3d, 0x6c40, 0x6c41, 0x6c42, 0x6c46, 0x6c47, 0x6c49, 0x6c4a, 0x6c50, 0x6c54, 0x6c55, 0x6c57, 0x6c5b, 0x6c5c, 0x6c5d,
0x6c5e, 0x6c5f, 0x6c60, 0x6c61, 0x6c64, 0x6c68, 0x6c69, 0x6c6a, 0x6c70, 0x6c72, 0x6c74, 0x6c76, 0x6c79, 0x6c7d, 0x6c7e, 0x6c81,
0x6c82, 0x6c83, 0x6c85, 0x6c86, 0x6c88, 0x6c89, 0x6c8c, 0x6c8f, 0x6c90, 0x6c93, 0x6c94, 0x6c99, 0x6c9b, 0x6c9f, 0x6ca1, 0x6ca3,
0x6ca4, 0x6ca5, 0x6ca6, 0x6ca7, 0x6ca9, 0x6caa, 0x6cab, 0x6cad, 0x6cae, 0x6cb1, 0x6cb2, 0x6cb3, 0x6cb8, 0x6cb9, 0x6cbb, 0x6cbc,
0x6cbd, 0x6cbe, 0x6cbf, 0x6cc4, 0x6cc5, 0x6cc9, 0x6cca, 0x6ccc, 0x6cd0, 0x6cd3, 0x6cd4, 0x6cd5, 0x6cd6, 0x6cd7, 0x6cdb, 0x6cde,
0x6ce0, 0x6ce1, 0x6ce2, 0x6ce3, 0x6ce5, 0x6ce8, 0x6cea, 0x6ceb, 0x6cee, 0x6cef, 0x6cf0, 0x6cf1, 0x6cf3, 0x6cf5, 0x6cf6, 0x6cf7,
0x6cf8, 0x6cfa, 0x6cfb, 0x6cfc, 0x6cfd, 0x6cfe, 0x6d01, 0x6d04, 0x6d07, 0x6d0b, 0x6d0c, 0x6d0e, 0x6d12, 0x6d17, 0x6d19, 0x6d1a,
0x6d1b, 0x6d1e, 0x6d25, 0x6d27, 0x6d2a, 0x6d2b, 0x6d2e, 0x6d31, 0x6d32, 0x6d33, 0x6d35, 0x6d39, 0x6d3b, 0x6d3c, 0x6d3d, 0x6d3e,
0x6d41, 0x6d43, 0x6d45, 0x6d46, 0x6d47, 0x6d48, 0x6d4a, 0x6d4b, 0x6d4d, 0x6d4e, 0x6d4f, 0x6d51, 0x6d52, 0x6d53, 0x6d54, 0x6d59,
0x6d5a, 0x6d5c, 0x6d5e, 0x6d60, 0x6d63, 0x6d66, 0x6d69, 0x6d6a, 0x6d6e, 0x6d6f, 0x6d74, 0x6d77, 0x6d78, 0x6d7c, 0x6d82, 0x6d85,
0x6d88, 0x6d89, 0x6d8c, 0x6d8e, 0x6d91, 0x6d93, 0x6d94, 0x6d95, 0x6d9b, 0x6d9d, 0x6d9e, 0x6d9f, 0x6da0, 0x6da1, 0x6da3, 0x6da4,
0x6da6, 0x6da7, 0x6da8, 0x6da9, 0x6daa, 0x6dab, 0x6dae, 0x6daf, 0x6db2, 0x6db5, 0x6db8, 0x6dbf, 0x6dc0, 0x6dc4, 0x6dc5, 0x6dc6,
0x6dc7, 0x6dcb, 0x6dcc, 0x6dd1, 0x6dd6, 0x6dd8, 0x6dd9, 0x6ddd, 0x6dde, 0x6de0, 0x6de1, 0x6de4, 0x6de6, 0x6deb, 0x6dec, 0x6dee,
0x6df1, 0x6df3, 0x6df7, 0x6df9, 0x6dfb, 0x6dfc, 0x6e05, 0x6e0a, 0x6e0c, 0x6e0d, 0x6e0e, 0x6e10, 0x6e11, 0x6e14, 0x6e16, 0x6e17,
0x6e1a, 0x6e1d, 0x6e20, 0x6e21, 0x6e23, 0x6e24, 0x6e25, 0x6e29, 0x6e2b, 0x6e2d, 0x6e2f, 0x6e32, 0x6e34, 0x6e38, 0x6e3a, 0x6e43,
0x6e44, 0x6e4d, 0x6e4e, 0x6e53, 0x6e54, 0x6e56, 0x6e58, 0x6e5b, 0x6e5f, 0x6e6b, 0x6e6e, 0x6e7e, 0x6e7f, 0x6e83, 0x6e85, 0x6e86,
0x6e89, 0x6e8f, 0x6e90, 0x6e98, 0x6e9c, 0x6e9f, 0x6ea2, 0x6ea5, 0x6ea7, 0x6eaa, 0x6eaf, 0x6eb1, 0x6eb2, 0x6eb4, 0x6eb6, 0x6eb7,
0x6eba, 0x6ebb, 0x6ebd, 0x6ec1, 0x6ec2, 0x6ec7, 0x6ecb, 0x6ecf, 0x6ed1, 0x6ed3, 0x6ed4, 0x6ed5, 0x6ed7, 0x6eda, 0x6ede, 0x6edf,
0x6ee0, 0x6ee1, 0x6ee2, 0x6ee4, 0x6ee5, 0x6ee6, 0x6ee8, 0x6ee9, 0x6ef4, 0x6ef9, 0x6f02, 0x6f06, 0x6f09, 0x6f0f, 0x6f13, 0x6f14,
0x6f15, 0x6f20, 0x6f24, 0x6f29, 0x6f2a, 0x6f2b, 0x6f2d, 0x6f2f, 0x6f31, 0x6f33, 0x6f36, 0x6f3e, 0x6f46, 0x6f47, 0x6f4b, 0x6f4d,
0x6f58, 0x6f5c, 0x6f5e, 0x6f62, 0x6f66, 0x6f6d, 0x6f6e, 0x6f72, 0x6f74, 0x6f78, 0x6f7a, 0x6f7c, 0x6f84, 0x6f88, 0x6f89, 0x6f8c,
0x6f8d, 0x6f8e, 0x6f9c, 0x6fa1, 0x6fa7, 0x6fb3, 0x6fb6, 0x6fb9, 0x6fc0, 0x6fc2, 0x6fc9, 0x6fd1, 0x6fd2, 0x6fde, 0x6fe0, 0x6fe1,
0x6fee, 0x6fef, 0x7011, 0x701a, 0x701b, 0x7023, 0x7035, 0x7039, 0x704c, 0x704f, 0x705e, 0x706b, 0x706c, 0x706d, 0x706f, 0x7070,
0x7075, 0x7076, 0x7078, 0x707c, 0x707e, 0x707f, 0x7080, 0x7085, 0x7089, 0x708a, 0x708e, 0x7092, 0x7094, 0x7095, 0x7096, 0x7099,
0x709c, 0x709d, 0x70ab, 0x70ac, 0x70ad, 0x70ae, 0x70af, 0x70b1, 0x70b3, 0x70b7, 0x70b8, 0x70b9, 0x70bb, 0x70bc, 0x70bd, 0x70c0,
0x70c1, 0x70c2, 0x70c3, 0x70c8, 0x70ca, 0x70d8, 0x70d9, 0x70db, 0x70df, 0x70e4, 0x70e6, 0x70e7, 0x70e8, 0x70e9, 0x70eb, 0x70ec,
0x70ed, 0x70ef, 0x70f7, 0x70f9, 0x70fd, 0x7109, 0x710a, 0x7110, 0x7113, 0x7115, 0x7116, 0x7118, 0x7119, 0x711a, 0x7126, 0x712f,
0x7130, 0x7131, 0x7136, 0x7145, 0x714a, 0x714c, 0x714e, 0x715c, 0x715e, 0x7164, 0x7166, 0x7167, 0x7168, 0x716e, 0x7172, 0x7173,
0x7178, 0x717a, 0x717d, 0x7184, 0x718a, 0x718f, 0x7194, 0x7198, 0x7199, 0x719f, 0x71a0, 0x71a8, 0x71ac, 0x71b3, 0x71b5, 0x71b9,
0x71c3, 0x71ce, 0x71d4, 0x71d5, 0x71e0, 0x71e5, 0x71e7, 0x71ee, 0x71f9, 0x7206, 0x721d, 0x7228, 0x722a, 0x722c, 0x7230, 0x7231,
0x7235, 0x7236, 0x7237, 0x7238, 0x7239, 0x723b, 0x723d, 0x723f, 0x7247, 0x7248, 0x724c, 0x724d, 0x7252, 0x7256, 0x7259, 0x725b,
0x725d, 0x725f, 0x7261, 0x7262, 0x7266, 0x7267, 0x7269, 0x726e, 0x726f, 0x7272, 0x7275, 0x7279, 0x727a, 0x727e, 0x727f, 0x7280,
0x7281, 0x7284, 0x728a, 0x728b, 0x728d, 0x728f, 0x7292, 0x729f, 0x72ac, 0x72ad, 0x72af, 0x72b0, 0x72b4, 0x72b6, 0x72b7, 0x72b8,
0x72b9, 0x72c1, 0x72c2, 0x72c3, 0x72c4, 0x72c8, 0x72cd, 0x72ce, 0x72d0, 0x72d2, 0x72d7, 0x72d9, 0x72de, 0x72e0, 0x72e1, 0x72e8,
0x72e9, 0x72ec, 0x72ed, 0x72ee, 0x72ef, 0x72f0, 0x72f1, 0x72f2, 0x72f3, 0x72f4, 0x72f7, 0x72f8, 0x72fa, 0x72fb, 0x72fc, 0x7301,
0x7303, 0x730a, 0x730e, 0x7313, 0x7315, 0x7316, 0x7317, 0x731b, 0x731c, 0x731d, 0x731e, 0x7321, 0x7322, 0x7325, 0x7329, 0x732a,
0x732b, 0x732c, 0x732e, 0x7331, 0x7334, 0x7337, 0x7338, 0x7339, 0x733e, 0x733f, 0x734d, 0x7350, 0x7352, 0x7357, 0x7360, 0x736c,
0x736d, 0x736f, 0x737e, 0x7384, 0x7387, 0x7389, 0x738b, 0x738e, 0x7391, 0x7396, 0x739b, 0x739f, 0x73a2, 0x73a9, 0x73ab, 0x73ae,
0x73af, 0x73b0, 0x73b2, 0x73b3, 0x73b7, 0x73ba, 0x73bb, 0x73c0, 0x73c2, 0x73c8, 0x73c9, 0x73ca, 0x73cd, 0x73cf, 0x73d0, 0x73d1,
0x73d9, 0x73de, 0x73e0, 0x73e5, 0x73e7, 0x73e9, 0x73ed, 0x73f2, 0x7403, 0x7405, 0x7406, 0x7409, 0x740a, 0x740f, 0x7410, 0x741a,
0x741b, 0x7422, 0x7425, 0x7426, 0x7428, 0x742a, 0x742c, 0x742e, 0x7430, 0x7433, 0x7434, 0x7435, 0x7436, 0x743c, 0x7441, 0x7455,
0x7457, 0x7459, 0x745a, 0x745b, 0x745c, 0x745e, 0x745f, 0x746d, 0x7470, 0x7476, 0x7477, 0x747e, 0x7480, 0x7481, 0x7483, 0x7487,
0x748b, 0x748e, 0x7490, 0x749c, 0x749e, 0x74a7, 0x74a8, 0x74a9, 0x74ba, 0x74d2, 0x74dc, 0x74de, 0x74e0, 0x74e2, 0x74e3, 0x74e4,
0x74e6, 0x74ee, 0x74ef, 0x74f4, 0x74f6, 0x74f7, 0x74ff, 0x7504, 0x750d, 0x750f, 0x7511, 0x7513, 0x7518, 0x7519, 0x751a, 0x751c,
0x751f, 0x7525, 0x7528, 0x7529, 0x752b, 0x752c, 0x752d, 0x752f, 0x7530, 0x7531, 0x7532, 0x7533, 0x7535, 0x7537, 0x7538, 0x753a,
0x753b, 0x753e, 0x7540, 0x7545, 0x7548, 0x754b, 0x754c, 0x754e, 0x754f, 0x7554, 0x7559, 0x755a, 0x755b, 0x755c, 0x7565, 0x7566,
0x756a, 0x7572, 0x7574, 0x7578, 0x7579, 0x757f, 0x7583, 0x7586, 0x758b, 0x758f, 0x7591, 0x7592, 0x7594, 0x7596, 0x7597, 0x7599,
0x759a, 0x759d, 0x759f, 0x75a0, 0x75a1, 0x75a3, 0x75a4, 0x75a5, 0x75ab, 0x75ac, 0x75ae, 0x75af, 0x75b0, 0x75b1, 0x75b2, 0x75b3,
0x75b4, 0x75b5, 0x75b8, 0x75b9, 0x75bc, 0x75bd, 0x75be, 0x75c2, 0x75c3, 0x75c4, 0x75c5, 0x75c7, 0x75c8, 0x75c9, 0x75ca, 0x75cd,
0x75d2, 0x75d4, 0x75d5, 0x75d6, 0x75d8, 0x75db, 0x75de, 0x75e2, 0x75e3, 0x75e4, 0x75e6, 0x75e7, 0x75e8, 0x75ea, 0x75eb, 0x75f0,
0x75f1, 0x75f4, 0x75f9, 0x75fc, 0x75ff, 0x7600, 0x7601, 0x7603, 0x7605, 0x760a, 0x760c, 0x7610, 0x7615, 0x7617, 0x7618, 0x7619,
0x761b, 0x761f, 0x7620, 0x7622, 0x7624, 0x7625, 0x7626, 0x7629, 0x762a, 0x762b, 0x762d, 0x7630, 0x7633, 0x7634, 0x7635, 0x7638,
0x763c, 0x763e, 0x763f, 0x7640, 0x7643, 0x764c, 0x764d, 0x7654, 0x7656, 0x765c, 0x765e, 0x7663, 0x766b, 0x766f, 0x7678, 0x767b,
0x767d, 0x767e, 0x7682, 0x7684, 0x7686, 0x7687, 0x7688, 0x768b, 0x768e, 0x7691, 0x7693, 0x7696, 0x7699, 0x76a4, 0x76ae, 0x76b1,
0x76b2, 0x76b4, 0x76bf, 0x76c2, 0x76c5, 0x76c6, 0x76c8, 0x76ca, 0x76cd, 0x76ce, 0x76cf, 0x76d0, 0x76d1, 0x76d2, 0x76d4, 0x76d6,
0x76d7, 0x76d8, 0x76db, 0x76df, 0x76e5, 0x76ee, 0x76ef, 0x76f1, 0x76f2, 0x76f4, 0x76f8, 0x76f9, 0x76fc, 0x76fe, 0x7701, 0x7704,
0x7707, 0x7708, 0x7709, 0x770b, 0x770d, 0x7719, 0x771a, 0x771f, 0x7720, 0x7722, 0x7726, 0x7728, 0x7729, 0x772d, 0x772f, 0x7735,
0x7736, 0x7737, 0x7738, 0x773a, 0x773c, 0x7740, 0x7741, 0x7743, 0x7747, 0x7750, 0x7751, 0x775a, 0x775b, 0x7761, 0x7762, 0x7763,
0x7765, 0x7766, 0x7768, 0x776b, 0x776c, 0x7779, 0x777d, 0x777e, 0x777f, 0x7780, 0x7784, 0x7785, 0x778c, 0x778d, 0x778e, 0x7791,
0x7792, 0x779f, 0x77a0, 0x77a2, 0x77a5, 0x77a7, 0x77a9, 0x77aa, 0x77ac, 0x77b0, 0x77b3, 0x77b5, 0x77bb, 0x77bd, 0x77bf, 0x77cd,
0x77d7, 0x77db, 0x77dc, 0x77e2, 0x77e3, 0x77e5, 0x77e7, 0x77e9, 0x77eb, 0x77ec, 0x77ed, 0x77ee, 0x77f3, 0x77f6, 0x77f8, 0x77fd,
0x77fe, 0x77ff, 0x7800, 0x7801, 0x7802, 0x7809, 0x780c, 0x780d, 0x7811, 0x7812, 0x7814, 0x7816, 0x7817, 0x7818, 0x781a, 0x781c,
0x781d, 0x781f, 0x7823, 0x7825, 0x7826, 0x7827, 0x7829, 0x782c, 0x782d, 0x7830, 0x7834, 0x7837, 0x7838, 0x7839, 0x783a, 0x783b,
0x783c, 0x783e, 0x7840, 0x7845, 0x7847, 0x784c, 0x784e, 0x7850, 0x7852, 0x7855, 0x7856, 0x7857, 0x785d, 0x786a, 0x786b, 0x786c,
0x786d, 0x786e, 0x7877, 0x787c, 0x7887, 0x7889, 0x788c, 0x788d, 0x788e, 0x7891, 0x7893, 0x7897, 0x7898, 0x789a, 0x789b, 0x789c,
0x789f, 0x78a1, 0x78a3, 0x78a5, 0x78a7, 0x78b0, 0x78b1, 0x78b2, 0x78b3, 0x78b4, 0x78b9, 0x78be, 0x78c1, 0x78c5, 0x78c9, 0x78ca,
0x78cb, 0x78d0, 0x78d4, 0x78d5, 0x78d9, 0x78e8, 0x78ec, 0x78f2, 0x78f4, 0x78f7, 0x78fa, 0x7901, 0x7905, 0x7913, 0x791e, 0x7924,
0x7934, 0x793a, 0x793b, 0x793c, 0x793e, 0x7940, 0x7941, 0x7946, 0x7948, 0x7949, 0x7953, 0x7956, 0x7957, 0x795a, 0x795b, 0x795c,
0x795d, 0x795e, 0x795f, 0x7960, 0x7962, 0x7965, 0x7967, 0x7968, 0x796d, 0x796f, 0x7977, 0x7978, 0x797a, 0x7980, 0x7981, 0x7984,
0x7985, 0x798a, 0x798f, 0x799a, 0x79a7, 0x79b3, 0x79b9, 0x79ba, 0x79bb, 0x79bd, 0x79be, 0x79c0, 0x79c1, 0x79c3, 0x79c6, 0x79c9,
0x79cb, 0x79cd, 0x79d1, 0x79d2, 0x79d5, 0x79d8, 0x79df, 0x79e3, 0x79e4, 0x79e6, 0x79e7, 0x79e9, 0x79eb, 0x79ed, 0x79ef, 0x79f0,
0x79f8, 0x79fb, 0x79fd, 0x7a00, 0x7a02, 0x7a03, 0x7a06, 0x7a0b, 0x7a0d, 0x7a0e, 0x7a14, 0x7a17, 0x7a1a, 0x7a1e, 0x7a20, 0x7a23,
0x7a33, 0x7a37, 0x7a39, 0x7a3b, 0x7a3c, 0x7a3d, 0x7a3f, 0x7a46, 0x7a51, 0x7a57, 0x7a70, 0x7a74, 0x7a76, 0x7a77, 0x7a78, 0x7a79,
0x7a7a, 0x7a7f, 0x7a80, 0x7a81, 0x7a83, 0x7a84, 0x7a86, 0x7a88, 0x7a8d, 0x7a91, 0x7a92, 0x7a95, 0x7a96, 0x7a97, 0x7a98, 0x7a9c,
0x7a9d, 0x7a9f, 0x7aa0, 0x7aa5, 0x7aa6, 0x7aa8, 0x7aac, 0x7aad, 0x7ab3, 0x7abf, 0x7acb, 0x7ad6, 0x7ad9, 0x7ade, 0x7adf, 0x7ae0,
0x7ae3, 0x7ae5, 0x7ae6, 0x7aed, 0x7aef, 0x7af9, 0x7afa, 0x7afd, 0x7aff, 0x7b03, 0x7b04, 0x7b06, 0x7b08, 0x7b0a, 0x7b0b, 0x7b0f,
0x7b11, 0x7b14, 0x7b15, 0x7b19, 0x7b1b, 0x7b1e, 0x7b20, 0x7b24, 0x7b25, 0x7b26, 0x7b28, 0x7b2a, 0x7b2b, 0x7b2c, 0x7b2e, 0x7b31,
0x7b33, 0x7b38, 0x7b3a, 0x7b3c, 0x7b3e, 0x7b45, 0x7b47, 0x7b49, 0x7b4b, 0x7b4c, 0x7b4f, 0x7b50, 0x7b51, 0x7b52, 0x7b54, 0x7b56,
0x7b58, 0x7b5a, 0x7b5b, 0x7b5d, 0x7b60, 0x7b62, 0x7b6e, 0x7b71, 0x7b72, 0x7b75, 0x7b77, 0x7b79, 0x7b7b, 0x7b7e, 0x7b80, 0x7b85,
0x7b8d, 0x7b90, 0x7b94, 0x7b95, 0x7b97, 0x7b9c, 0x7b9d, 0x7ba1, 0x7ba2, 0x7ba6, 0x7ba7, 0x7ba8, 0x7ba9, 0x7baa, 0x7bab, 0x7bac,
0x7bad, 0x7bb1, 0x7bb4, 0x7bb8, 0x7bc1, 0x7bc6, 0x7bc7, 0x7bcc, 0x7bd1, 0x7bd3, 0x7bd9, 0x7bda, 0x7bdd, 0x7be1, 0x7be5, 0x7be6,
0x7bea, 0x7bee, 0x7bf1, 0x7bf7, 0x7bfc, 0x7bfe, 0x7c07, 0x7c0b, 0x7c0c, 0x7c0f, 0x7c16, 0x7c1f, 0x7c26, 0x7c27, 0x7c2a, 0x7c38,
0x7c3f, 0x7c40, 0x7c41, 0x7c4d, 0x7c73, 0x7c74, 0x7c7b, 0x7c7c, 0x7c7d, 0x7c89, 0x7c91, 0x7c92, 0x7c95, 0x7c97, 0x7c98, 0x7c9c,
0x7c9d, 0x7c9e, 0x7c9f, 0x7ca2, 0x7ca4, 0x7ca5, 0x7caa, 0x7cae, 0x7cb1, 0x7cb2, 0x7cb3, 0x7cb9, 0x7cbc, 0x7cbd, 0x7cbe, 0x7cc1,
0x7cc5, 0x7cc7, 0x7cc8, 0x7cca, 0x7ccc, 0x7ccd, 0x7cd5, 0x7cd6, 0x7cd7, 0x7cd9, 0x7cdc, 0x7cdf, 0x7ce0, 0x7ce8, 0x7cef, 0x7cf8,
0x7cfb, 0x7d0a, 0x7d20, 0x7d22, 0x7d27, 0x7d2b, 0x7d2f, 0x7d6e, 0x7d77, 0x7da6, 0x7dae, 0x7e3b, 0x7e41, 0x7e47, 0x7e82, 0x7e9b,
0x7e9f, 0x7ea0, 0x7ea1, 0x7ea2, 0x7ea3, 0x7ea4, 0x7ea5, 0x7ea6, 0x7ea7, 0x7ea8, 0x7ea9, 0x7eaa, 0x7eab, 0x7eac, 0x7ead, 0x7eaf,
0x7eb0, 0x7eb1, 0x7eb2, 0x7eb3, 0x7eb5, 0x7eb6, 0x7eb7, 0x7eb8, 0x7eb9, 0x7eba, 0x7ebd, 0x7ebe, 0x7ebf, 0x7ec0, 0x7ec1, 0x7ec2,
0x7ec3, 0x7ec4, 0x7ec5, 0x7ec6, 0x7ec7, 0x7ec8, 0x7ec9, 0x7eca, 0x7ecb, 0x7ecc, 0x7ecd, 0x7ece, 0x7ecf, 0x7ed0, 0x7ed1, 0x7ed2,
0x7ed3, 0x7ed4, 0x7ed5, 0x7ed7, 0x7ed8, 0x7ed9, 0x7eda, 0x7edb, 0x7edc, 0x7edd, 0x7ede, 0x7edf, 0x7ee0, 0x7ee1, 0x7ee2, 0x7ee3,
0x7ee5, 0x7ee6, 0x7ee7, 0x7ee8, 0x7ee9, 0x7eea, 0x7eeb, 0x7eed, 0x7eee, 0x7eef, 0x7ef0, 0x7ef1, 0x7ef2, 0x7ef3, 0x7ef4, 0x7ef5,
0x7ef6, 0x7ef7, 0x7ef8, 0x7efa, 0x7efb, 0x7efc, 0x7efd, 0x7efe, 0x7eff, 0x7f00, 0x7f01, 0x7f02, 0x7f03, 0x7f04, 0x7f05, 0x7f06,
0x7f07, 0x7f08, 0x7f09, 0x7f0b, 0x7f0c, 0x7f0d, 0x7f0e, 0x7f0f, 0x7f11, 0x7f12, 0x7f13, 0x7f14, 0x7f15, 0x7f16, 0x7f17, 0x7f18,
0x7f19, 0x7f1a, 0x7f1b, 0x7f1c, 0x7f1d, 0x7f1f, 0x7f20, 0x7f21, 0x7f22, 0x7f23, 0x7f24, 0x7f25, 0x7f26, 0x7f27, 0x7f28, 0x7f29,
0x7f2a, 0x7f2b, 0x7f2c, 0x7f2d, 0x7f2e, 0x7f2f, 0x7f30, 0x7f31, 0x7f32, 0x7f33, 0x7f34, 0x7f35, 0x7f36, 0x7f38, 0x7f3a, 0x7f42,
0x7f44, 0x7f45, 0x7f50, 0x7f51, 0x7f54, 0x7f55, 0x7f57, 0x7f58, 0x7f5a, 0x7f5f, 0x7f61, 0x7f62, 0x7f68, 0x7f69, 0x7f6a, 0x7f6e,
0x7f71, 0x7f72, 0x7f74, 0x7f79, 0x7f7e, 0x7f81, 0x7f8a, 0x7f8c, 0x7f8e, 0x7f94, 0x7f9a, 0x7f9d, 0x7f9e, 0x7f9f, 0x7fa1, 0x7fa4,
0x7fa7, 0x7faf, 0x7fb0, 0x7fb2, 0x7fb8, 0x7fb9, 0x7fbc, 0x7fbd, 0x7fbf, 0x7fc1, 0x7fc5, 0x7fca, 0x7fcc, 0x7fce, 0x7fd4, 0x7fd5,
0x7fd8, 0x7fdf, 0x7fe0, 0x7fe1, 0x7fe5, 0x7fe6, 0x7fe9, 0x7fee, 0x7ff0, 0x7ff1, 0x7ff3, 0x7ffb, 0x7ffc, 0x8000, 0x8001, 0x8003,
0x8004, 0x8005, 0x8006, 0x800b, 0x800c, 0x800d, 0x8010, 0x8012, 0x8014, 0x8015, 0x8016, 0x8017, 0x8018, 0x8019, 0x801c, 0x8020,
0x8022, 0x8025, 0x8026, 0x8027, 0x8028, 0x8029, 0x802a, 0x8031, 0x8033, 0x8035, 0x8036, 0x8037, 0x8038, 0x803b, 0x803d, 0x803f,
0x8042, 0x8043, 0x8046, 0x804a, 0x804b, 0x804c, 0x804d, 0x8052, 0x8054, 0x8058, 0x805a, 0x8069, 0x806a, 0x8071, 0x807f, 0x8080,
0x8083, 0x8084, 0x8086, 0x8087, 0x8089, 0x808b, 0x808c, 0x8093, 0x8096, 0x8098, 0x809a, 0x809b, 0x809c, 0x809d, 0x809f, 0x80a0,
0x80a1, 0x80a2, 0x80a4, 0x80a5, 0x80a9, 0x80aa, 0x80ab, 0x80ad, 0x80ae, 0x80af, 0x80b1, 0x80b2, 0x80b4, 0x80b7, 0x80ba, 0x80bc,
0x80bd, 0x80be, 0x80bf, 0x80c0, 0x80c1, 0x80c2, 0x80c3, 0x80c4, 0x80c6, 0x80cc, 0x80cd, 0x80ce, 0x80d6, 0x80d7, 0x80d9, 0x80da,
0x80db, 0x80dc, 0x80dd, 0x80de, 0x80e1, 0x80e4, 0x80e5, 0x80e7, 0x80e8, 0x80e9, 0x80ea, 0x80eb, 0x80ec, 0x80ed, 0x80ef, 0x80f0,
0x80f1, 0x80f2, 0x80f3, 0x80f4, 0x80f6, 0x80f8, 0x80fa, 0x80fc, 0x80fd, 0x8102, 0x8106, 0x8109, 0x810a, 0x810d, 0x810e, 0x810f,
0x8110, 0x8111, 0x8112, 0x8113, 0x8114, 0x8116, 0x8118, 0x811a, 0x811e, 0x812c, 0x812f, 0x8131, 0x8132, 0x8136, 0x8138, 0x813e,
0x8146, 0x8148, 0x814a, 0x814b, 0x814c, 0x8150, 0x8151, 0x8153, 0x8154, 0x8155, 0x8159, 0x815a, 0x8160, 0x8165, 0x8167, 0x8169,
0x816d, 0x816e, 0x8170, 0x8171, 0x8174, 0x8179, 0x817a, 0x817b, 0x817c, 0x817d, 0x817e, 0x817f, 0x8180, 0x8182, 0x8188, 0x818a,
0x818f, 0x8191, 0x8198, 0x819b, 0x819c, 0x819d, 0x81a3, 0x81a6, 0x81a8, 0x81aa, 0x81b3, 0x81ba, 0x81bb, 0x81c0, 0x81c1, 0x81c2,
0x81c3, 0x81c6, 0x81ca, 0x81cc, 0x81e3, 0x81e7, 0x81ea, 0x81ec, 0x81ed, 0x81f3, 0x81f4, 0x81fb, 0x81fc, 0x81fe, 0x8200, 0x8201,
0x8202, 0x8204, 0x8205, 0x8206, 0x820c, 0x820d, 0x8210, 0x8212, 0x8214, 0x821b, 0x821c, 0x821e, 0x821f, 0x8221, 0x8222, 0x8223,
0x8228, 0x822a, 0x822b, 0x822c, 0x822d, 0x822f, 0x8230, 0x8231, 0x8233, 0x8234, 0x8235, 0x8236, 0x8237, 0x8238, 0x8239, 0x823b,
0x823e, 0x8244, 0x8247, 0x8249, 0x824b, 0x824f, 0x8258, 0x825a, 0x825f, 0x8268, 0x826e, 0x826f, 0x8270, 0x8272, 0x8273, 0x8274,
0x8279, 0x827a, 0x827d, 0x827e, 0x827f, 0x8282, 0x8284, 0x8288, 0x828a, 0x828b, 0x828d, 0x828e, 0x828f, 0x8291, 0x8292, 0x8297,
0x8298, 0x8299, 0x829c, 0x829d, 0x829f, 0x82a1, 0x82a4, 0x82a5, 0x82a6, 0x82a8, 0x82a9, 0x82aa, 0x82ab, 0x82ac, 0x82ad, 0x82ae,
0x82af, 0x82b0, 0x82b1, 0x82b3, 0x82b4, 0x82b7, 0x82b8, 0x82b9, 0x82bd, 0x82be, 0x82c1, 0x82c4, 0x82c7, 0x82c8, 0x82ca, 0x82cb,
0x82cc, 0x82cd, 0x82ce, 0x82cf, 0x82d1, 0x82d2, 0x82d3, 0x82d4, 0x82d5, 0x82d7, 0x82d8, 0x82db, 0x82dc, 0x82de, 0x82df, 0x82e0,
0x82e1, 0x82e3, 0x82e4, 0x82e5, 0x82e6, 0x82eb, 0x82ef, 0x82f1, 0x82f4, 0x82f7, 0x82f9, 0x82fb, 0x8301, 0x8302, 0x8303, 0x8304,
0x8305, 0x8306, 0x8307, 0x8308, 0x8309, 0x830c, 0x830e, 0x830f, 0x8311, 0x8314, 0x8315, 0x8317, 0x831a, 0x831b, 0x831c, 0x8327,
0x8328, 0x832b, 0x832c, 0x832d, 0x832f, 0x8331, 0x8333, 0x8334, 0x8335, 0x8336, 0x8338, 0x8339, 0x833a, 0x833c, 0x8340, 0x8343,
0x8346, 0x8347, 0x8349, 0x834f, 0x8350, 0x8351, 0x8352, 0x8354, 0x835a, 0x835b, 0x835c, 0x835e, 0x835f, 0x8360, 0x8361, 0x8363,
0x8364, 0x8365, 0x8366, 0x8367, 0x8368, 0x8369, 0x836a, 0x836b, 0x836c, 0x836d, 0x836e, 0x836f, 0x8377, 0x8378, 0x837b, 0x837c,
0x837d, 0x8385, 0x8386, 0x8389, 0x838e, 0x8392, 0x8393, 0x8398, 0x839b, 0x839c, 0x839e, 0x83a0, 0x83a8, 0x83a9, 0x83aa, 0x83ab,
0x83b0, 0x83b1, 0x83b2, 0x83b3, 0x83b4, 0x83b6, 0x83b7, 0x83b8, 0x83b9, 0x83ba, 0x83bc, 0x83bd, 0x83c0, 0x83c1, 0x83c5, 0x83c7,
0x83ca, 0x83cc, 0x83cf, 0x83d4, 0x83d6, 0x83d8, 0x83dc, 0x83dd, 0x83df, 0x83e0, 0x83e1, 0x83e5, 0x83e9, 0x83ea, 0x83f0, 0x83f1,
0x83f2, 0x83f8, 0x83f9, 0x83fd, 0x8401, 0x8403, 0x8404, 0x8406, 0x840b, 0x840c, 0x840d, 0x840e, 0x840f, 0x8411, 0x8418, 0x841c,
0x841d, 0x8424, 0x8425, 0x8426, 0x8427, 0x8428, 0x8431, 0x8438, 0x843c, 0x843d, 0x8446, 0x8451, 0x8457, 0x8459, 0x845a, 0x845b,
0x845c, 0x8461, 0x8463, 0x8469, 0x846b, 0x846c, 0x846d, 0x8471, 0x8473, 0x8475, 0x8476, 0x8478, 0x847a, 0x8482, 0x8487, 0x8488,
0x8489, 0x848b, 0x848c, 0x848e, 0x8497, 0x8499, 0x849c, 0x84a1, 0x84af, 0x84b2, 0x84b4, 0x84b8, 0x84b9, 0x84ba, 0x84bd, 0x84bf,
0x84c1, 0x84c4, 0x84c9, 0x84ca, 0x84cd, 0x84d0, 0x84d1, 0x84d3, 0x84d6, 0x84dd, 0x84df, 0x84e0, 0x84e3, 0x84e5, 0x84e6, 0x84ec,
0x84f0, 0x84fc, 0x84ff, 0x850c, 0x8511, 0x8513, 0x8517, 0x851a, 0x851f, 0x8521, 0x852b, 0x852c, 0x8537, 0x8538, 0x8539, 0x853a,
0x853b, 0x853c, 0x853d, 0x8543, 0x8548, 0x8549, 0x854a, 0x8556, 0x8559, 0x855e, 0x8564, 0x8568, 0x8572, 0x8574, 0x8579, 0x857a,
0x857b, 0x857e, 0x8584, 0x8585, 0x8587, 0x858f, 0x859b, 0x859c, 0x85a4, 0x85a8, 0x85aa, 0x85ae, 0x85af, 0x85b0, 0x85b7, 0x85b9,
0x85c1, 0x85c9, 0x85cf, 0x85d0, 0x85d3, 0x85d5, 0x85dc, 0x85e4, 0x85e9, 0x85fb, 0x85ff, 0x8605, 0x8611, 0x8616, 0x8627, 0x8629,
0x8638, 0x863c, 0x864d, 0x864e, 0x864f, 0x8650, 0x8651, 0x8654, 0x865a, 0x865e, 0x8662, 0x866b, 0x866c, 0x866e, 0x8671, 0x8679,
0x867a, 0x867b, 0x867c, 0x867d, 0x867e, 0x867f, 0x8680, 0x8681, 0x8682, 0x868a, 0x868b, 0x868c, 0x868d, 0x8693, 0x8695, 0x869c,
0x869d, 0x86a3, 0x86a4, 0x86a7, 0x86a8, 0x86a9, 0x86aa, 0x86ac, 0x86af, 0x86b0, 0x86b1, 0x86b4, 0x86b5, 0x86b6, 0x86ba, 0x86c0,
0x86c4, 0x86c6, 0x86c7, 0x86c9, 0x86ca, 0x86cb, 0x86ce, 0x86cf, 0x86d0, 0x86d1, 0x86d4, 0x86d8, 0x86d9, 0x86db, 0x86de, 0x86df,
0x86e4, 0x86e9, 0x86ed, 0x86ee, 0x86f0, 0x86f1, 0x86f2, 0x86f3, 0x86f4, 0x86f8, 0x86f9, 0x86fe, 0x8700, 0x8702, 0x8703, 0x8707,
0x8708, 0x8709, 0x870a, 0x870d, 0x8712, 0x8713, 0x8715, 0x8717, 0x8718, 0x871a, 0x871c, 0x871e, 0x8721, 0x8722, 0x8723, 0x8725,
0x8729, 0x872e, 0x8731, 0x8734, 0x8737, 0x873b, 0x873e, 0x873f, 0x8747, 0x8748, 0x8749, 0x874c, 0x874e, 0x8753, 0x8757, 0x8759,
0x8760, 0x8763, 0x8764, 0x8765, 0x876e, 0x8770, 0x8774, 0x8776, 0x877b, 0x877c, 0x877d, 0x877e, 0x8782, 0x8783, 0x8785, 0x8788,
0x878b, 0x878d, 0x8793, 0x8797, 0x879f, 0x87a8, 0x87ab, 0x87ac, 0x87ad, 0x87af, 0x87b3, 0x87b5, 0x87ba, 0x87bd, 0x87c0, 0x87c6,
0x87ca, 0x87cb, 0x87d1, 0x87d2, 0x87d3, 0x87db, 0x87e0, 0x87e5, 0x87ea, 0x87ee, 0x87f9, 0x87fe, 0x8803, 0x880a, 0x8813, 0x8815,
0x8816, 0x881b, 0x8821, 0x8822, 0x8832, 0x8839, 0x883c, 0x8840, 0x8844, 0x8845, 0x884c, 0x884d, 0x8854, 0x8857, 0x8859, 0x8861,
0x8862, 0x8863, 0x8864, 0x8865, 0x8868, 0x8869, 0x886b, 0x886c, 0x886e, 0x8870, 0x8872, 0x8877, 0x887d, 0x887e, 0x887f, 0x8881,
0x8882, 0x8884, 0x8885, 0x8888, 0x888b, 0x888d, 0x8892, 0x8896, 0x889c, 0x88a2, 0x88a4, 0x88ab, 0x88ad, 0x88b1, 0x88b7, 0x88bc,
0x88c1, 0x88c2, 0x88c5, 0x88c6, 0x88c9, 0x88ce, 0x88d2, 0x88d4, 0x88d5, 0x88d8, 0x88d9, 0x88df, 0x88e2, 0x88e3, 0x88e4, 0x88e5,
0x88e8, 0x88f0, 0x88f1, 0x88f3, 0x88f4, 0x88f8, 0x88f9, 0x88fc, 0x88fe, 0x8902, 0x890a, 0x8910, 0x8912, 0x8913, 0x8919, 0x891a,
0x891b, 0x8921, 0x8925, 0x892a, 0x892b, 0x8930, 0x8934, 0x8936, 0x8941, 0x8944, 0x895e, 0x895f, 0x8966, 0x897b, 0x897f, 0x8981,
0x8983, 0x8986, 0x89c1, 0x89c2, 0x89c4, 0x89c5, 0x89c6, 0x89c7, 0x89c8, 0x89c9, 0x89ca, 0x89cb, 0x89cc, 0x89ce, 0x89cf, 0x89d0,
0x89d1, 0x89d2, 0x89d6, 0x89da, 0x89dc, 0x89de, 0x89e3, 0x89e5, 0x89e6, 0x89eb, 0x89ef, 0x89f3, 0x8a00, 0x8a07, 0x8a3e, 0x8a48,
0x8a79, 0x8a89, 0x8a8a, 0x8a93, 0x8b07, 0x8b26, 0x8b66, 0x8b6c, 0x8ba0, 0x8ba1, 0x8ba2, 0x8ba3, 0x8ba4, 0x8ba5, 0x8ba6, 0x8ba7,
0x8ba8, 0x8ba9, 0x8baa, 0x8bab, 0x8bad, 0x8bae, 0x8baf, 0x8bb0, 0x8bb2, 0x8bb3, 0x8bb4, 0x8bb5, 0x8bb6, 0x8bb7, 0x8bb8, 0x8bb9,
0x8bba, 0x8bbc, 0x8bbd, 0x8bbe, 0x8bbf, 0x8bc0, 0x8bc1, 0x8bc2, 0x8bc3, 0x8bc4, 0x8bc5, 0x8bc6, 0x8bc8, 0x8bc9, 0x8bca, 0x8bcb,
0x8bcc, 0x8bcd, 0x8bce, 0x8bcf, 0x8bd1, 0x8bd2, 0x8bd3, 0x8bd4, 0x8bd5, 0x8bd6, 0x8bd7, 0x8bd8, 0x8bd9, 0x8bda, 0x8bdb, 0x8bdc,
0x8bdd, 0x8bde, 0x8bdf, 0x8be0, 0x8be1, 0x8be2, 0x8be3, 0x8be4, 0x8be5, 0x8be6, 0x8be7, 0x8be8, 0x8be9, 0x8beb, 0x8bec, 0x8bed,
0x8bee, 0x8bef, 0x8bf0, 0x8bf1, 0x8bf2, 0x8bf3, 0x8bf4, 0x8bf5, 0x8bf6, 0x8bf7, 0x8bf8, 0x8bf9, 0x8bfa, 0x8bfb, 0x8bfc, 0x8bfd,
0x8bfe, 0x8bff, 0x8c00, 0x8c01, 0x8c02, 0x8c03, 0x8c04, 0x8c05, 0x8c06, 0x8c07, 0x8c08, 0x8c0a, 0x8c0b, 0x8c0c, 0x8c0d, 0x8c0e,
0x8c0f, 0x8c10, 0x8c11, 0x8c12, 0x8c13, 0x8c14, 0x8c15, 0x8c16, 0x8c17, 0x8c18, 0x8c19, 0x8c1a, 0x8c1b, 0x8c1c, 0x8c1d, 0x8c1f,
0x8c20, 0x8c21, 0x8c22, 0x8c23, 0x8c24, 0x8c25, 0x8c26, 0x8c27, 0x8c28, 0x8c29, 0x8c2a, 0x8c2b, 0x8c2c, 0x8c2d, 0x8c2e, 0x8c2f,
0x8c30, 0x8c31, 0x8c32, 0x8c33, 0x8c34, 0x8c35, 0x8c36, 0x8c37, 0x8c41, 0x8c46, 0x8c47, 0x8c49, 0x8c4c, 0x8c55, 0x8c5a, 0x8c61,
0x8c62, 0x8c6a, 0x8c6b, 0x8c73, 0x8c78, 0x8c79, 0x8c7a, 0x8c82, 0x8c85, 0x8c89, 0x8c8a, 0x8c8c, 0x8c94, 0x8c98, 0x8d1d, 0x8d1e,
0x8d1f, 0x8d21, 0x8d22, 0x8d23, 0x8d24, 0x8d25, 0x8d26, 0x8d27, 0x8d28, 0x8d29, 0x8d2a, 0x8d2b, 0x8d2c, 0x8d2d, 0x8d2e, 0x8d2f,
0x8d30, 0x8d31, 0x8d32, 0x8d33, 0x8d34, 0x8d35, 0x8d36, 0x8d37, 0x8d38, 0x8d39, 0x8d3a, 0x8d3b, 0x8d3c, 0x8d3d, 0x8d3e, 0x8d3f,
0x8d40, 0x8d41, 0x8d42, 0x8d43, 0x8d44, 0x8d45, 0x8d46, 0x8d47, 0x8d48, 0x8d49, 0x8d4a, 0x8d4b, 0x8d4c, 0x8d4d, 0x8d4e, 0x8d4f,
0x8d50, 0x8d53, 0x8d54, 0x8d55, 0x8d56, 0x8d58, 0x8d59, 0x8d5a, 0x8d5b, 0x8d5c, 0x8d5d, 0x8d5e, 0x8d60, 0x8d61, 0x8d62, 0x8d63,
0x8d64, 0x8d66, 0x8d67, 0x8d6b, 0x8d6d, 0x8d70, 0x8d73, 0x8d74, 0x8d75, 0x8d76, 0x8d77, 0x8d81, 0x8d84, 0x8d85, 0x8d8a, 0x8d8b,
0x8d91, 0x8d94, 0x8d9f, 0x8da3, 0x8db1, 0x8db3, 0x8db4, 0x8db5, 0x8db8, 0x8dba, 0x8dbc, 0x8dbe, 0x8dbf, 0x8dc3, 0x8dc4, 0x8dc6,
0x8dcb, 0x8dcc, 0x8dce, 0x8dcf, 0x8dd1, 0x8dd6, 0x8dd7, 0x8dda, 0x8ddb, 0x8ddd, 0x8dde, 0x8ddf, 0x8de3, 0x8de4, 0x8de8, 0x8dea,
0x8deb, 0x8dec, 0x8def, 0x8df3, 0x8df5, 0x8df7, 0x8df8, 0x8df9, 0x8dfa, 0x8dfb, 0x8dfd, 0x8e05, 0x8e09, 0x8e0a, 0x8e0c, 0x8e0f,
0x8e14, 0x8e1d, 0x8e1e, 0x8e1f, 0x8e22, 0x8e23, 0x8e29, 0x8e2a, 0x8e2c, 0x8e2e, 0x8e2f, 0x8e31, 0x8e35, 0x8e39, 0x8e3a, 0x8e3d,
0x8e40, 0x8e41, 0x8e42, 0x8e44, 0x8e47, 0x8e48, 0x8e49, 0x8e4a, 0x8e4b, 0x8e51, 0x8e52, 0x8e59, 0x8e66, 0x8e69, 0x8e6c, 0x8e6d,
0x8e6f, 0x8e70, 0x8e72, 0x8e74, 0x8e76, 0x8e7c, 0x8e7f, 0x8e81, 0x8e85, 0x8e87, 0x8e8f, 0x8e90, 0x8e94, 0x8e9c, 0x8e9e, 0x8eab,
0x8eac, 0x8eaf, 0x8eb2, 0x8eba, 0x8ece, 0x8f66, 0x8f67, 0x8f68, 0x8f69, 0x8f6b, 0x8f6c, 0x8f6d, 0x8f6e, 0x8f6f, 0x8f70, 0x8f71,
0x8f72, 0x8f73, 0x8f74, 0x8f75, 0x8f76, 0x8f77, 0x8f78, 0x8f79, 0x8f7a, 0x8f7b, 0x8f7c, 0x8f7d, 0x8f7e, 0x8f7f, 0x8f81, 0x8f82,
0x8f83, 0x8f84, 0x8f85, 0x8f86, 0x8f87, 0x8f88, 0x8f89, 0x8f8a, 0x8f8b, 0x8f8d, 0x8f8e, 0x8f8f, 0x8f90, 0x8f91, 0x8f93, 0x8f94,
0x8f95, 0x8f96, 0x8f97, 0x8f98, 0x8f99, 0x8f9a, 0x8f9b, 0x8f9c, 0x8f9e, 0x8f9f, 0x8fa3, 0x8fa8, 0x8fa9, 0x8fab, 0x8fb0, 0x8fb1,
0x8fb6, 0x8fb9, 0x8fbd, 0x8fbe, 0x8fc1, 0x8fc2, 0x8fc4, 0x8fc5, 0x8fc7, 0x8fc8, 0x8fce, 0x8fd0, 0x8fd1, 0x8fd3, 0x8fd4, 0x8fd5,
0x8fd8, 0x8fd9, 0x8fdb, 0x8fdc, 0x8fdd, 0x8fde, 0x8fdf, 0x8fe2, 0x8fe4, 0x8fe5, 0x8fe6, 0x8fe8, 0x8fe9, 0x8fea, 0x8feb, 0x8fed,
0x8fee, 0x8ff0, 0x8ff3, 0x8ff7, 0x8ff8, 0x8ff9, 0x8ffd, 0x9000, 0x9001, 0x9002, 0x9003, 0x9004, 0x9005, 0x9006, 0x9009, 0x900a,
0x900b, 0x900d, 0x900f, 0x9010, 0x9011, 0x9012, 0x9014, 0x9016, 0x9017, 0x901a, 0x901b, 0x901d, 0x901e, 0x901f, 0x9020, 0x9021,
0x9022, 0x9026, 0x902d, 0x902e, 0x902f, 0x9035, 0x9036, 0x9038, 0x903b, 0x903c, 0x903e, 0x9041, 0x9042, 0x9044, 0x9047, 0x904d,
0x904f, 0x9050, 0x9051, 0x9052, 0x9053, 0x9057, 0x9058, 0x905b, 0x9062, 0x9063, 0x9065, 0x9068, 0x906d, 0x906e, 0x9074, 0x9075,
0x907d, 0x907f, 0x9080, 0x9082, 0x9083, 0x9088, 0x908b, 0x9091, 0x9093, 0x9095, 0x9097, 0x9099, 0x909b, 0x909d, 0x90a1, 0x90a2,
0x90a3, 0x90a6, 0x90aa, 0x90ac, 0x90ae, 0x90af, 0x90b0, 0x90b1, 0x90b3, 0x90b4, 0x90b5, 0x90b6, 0x90b8, 0x90b9, 0x90ba, 0x90bb,
0x90be, 0x90c1, 0x90c4, 0x90c5, 0x90c7, 0x90ca, 0x90ce, 0x90cf, 0x90d0, 0x90d1, 0x90d3, 0x90d7, 0x90db, 0x90dc, 0x90dd, 0x90e1,
0x90e2, 0x90e6, 0x90e7, 0x90e8, 0x90eb, 0x90ed, 0x90ef, 0x90f4, 0x90f8, 0x90fd, 0x90fe, 0x9102, 0x9104, 0x9119, 0x911e, 0x9122,
0x9123, 0x912f, 0x9131, 0x9139, 0x9143, 0x9146, 0x9149, 0x914a, 0x914b, 0x914c, 0x914d, 0x914e, 0x914f, 0x9150, 0x9152, 0x9157,
0x915a, 0x915d, 0x915e, 0x9161, 0x9162, 0x9163, 0x9164, 0x9165, 0x9169, 0x916a, 0x916c, 0x916e, 0x916f, 0x9170, 0x9171, 0x9172,
0x9174, 0x9175, 0x9176, 0x9177, 0x9178, 0x9179, 0x917d, 0x917e, 0x917f, 0x9185, 0x9187, 0x9189, 0x918b, 0x918c, 0x918d, 0x9190,
0x9191, 0x9192, 0x919a, 0x919b, 0x91a2, 0x91a3, 0x91aa, 0x91ad, 0x91ae, 0x91af, 0x91b4, 0x91b5, 0x91ba, 0x91c7, 0x91c9, 0x91ca,
0x91cc, 0x91cd, 0x91ce, 0x91cf, 0x91d1, 0x91dc, 0x9274, 0x928e, 0x92ae, 0x92c8, 0x933e, 0x936a, 0x938f, 0x93ca, 0x93d6, 0x943e,
0x946b, 0x9485, 0x9486, 0x9487, 0x9488, 0x9489, 0x948a, 0x948b, 0x948c, 0x948d, 0x948e, 0x948f, 0x9490, 0x9492, 0x9493, 0x9494,
0x9495, 0x9497, 0x9499, 0x949a, 0x949b, 0x949c, 0x949d, 0x949e, 0x949f, 0x94a0, 0x94a1, 0x94a2, 0x94a3, 0x94a4, 0x94a5, 0x94a6,
0x94a7, 0x94a8, 0x94a9, 0x94aa, 0x94ab, 0x94ac, 0x94ad, 0x94ae, 0x94af, 0x94b0, 0x94b1, 0x94b2, 0x94b3, 0x94b4, 0x94b5, 0x94b6,
0x94b7, 0x94b8, 0x94b9, 0x94ba, 0x94bb, 0x94bc, 0x94bd, 0x94be, 0x94bf, 0x94c0, 0x94c1, 0x94c2, 0x94c3, 0x94c4, 0x94c5, 0x94c6,
0x94c8, 0x94c9, 0x94ca, 0x94cb, 0x94cc, 0x94cd, 0x94ce, 0x94d0, 0x94d1, 0x94d2, 0x94d5, 0x94d6, 0x94d7, 0x94d8, 0x94d9, 0x94db,
0x94dc, 0x94dd, 0x94de, 0x94df, 0x94e0, 0x94e1, 0x94e2, 0x94e3, 0x94e4, 0x94e5, 0x94e7, 0x94e8, 0x94e9, 0x94ea, 0x94eb, 0x94ec,
0x94ed, 0x94ee, 0x94ef, 0x94f0, 0x94f1, 0x94f2, 0x94f3, 0x94f4, 0x94f5, 0x94f6, 0x94f7, 0x94f8, 0x94f9, 0x94fa, 0x94fc, 0x94fd,
0x94fe, 0x94ff, 0x9500, 0x9501, 0x9502, 0x9503, 0x9504, 0x9505, 0x9506, 0x9507, 0x9508, 0x9509, 0x950a, 0x950b, 0x950c, 0x950d,
0x950e, 0x950f, 0x9510, 0x9511, 0x9512, 0x9513, 0x9514, 0x9515, 0x9516, 0x9517, 0x9518, 0x9519, 0x951a, 0x951b, 0x951d, 0x951e,
0x951f, 0x9521, 0x9522, 0x9523, 0x9524, 0x9525, 0x9526, 0x9528, 0x9529, 0x952a, 0x952b, 0x952c, 0x952d, 0x952e, 0x952f, 0x9530,
0x9531, 0x9532, 0x9534, 0x9535, 0x9536, 0x9537, 0x9538, 0x9539, 0x953a, 0x953b, 0x953c, 0x953e, 0x953f, 0x9540, 0x9541, 0x9542,
0x9544, 0x9545, 0x9546, 0x9547, 0x9549, 0x954a, 0x954c, 0x954d, 0x954e, 0x954f, 0x9550, 0x9551, 0x9552, 0x9553, 0x9554, 0x9556,
0x9557, 0x9558, 0x9559, 0x955b, 0x955c, 0x955d, 0x955e, 0x955f, 0x9561, 0x9562, 0x9563, 0x9564, 0x9565, 0x9566, 0x9567, 0x9568,
0x9569, 0x956a, 0x956b, 0x956c, 0x956d, 0x956f, 0x9570, 0x9571, 0x9572, 0x9573, 0x9576, 0x957f, 0x95e8, 0x95e9, 0x95ea, 0x95eb,
0x95ed, 0x95ee, 0x95ef, 0x95f0, 0x95f1, 0x95f2, 0x95f3, 0x95f4, 0x95f5, 0x95f6, 0x95f7, 0x95f8, 0x95f9, 0x95fa, 0x95fb, 0x95fc,
0x95fd, 0x95fe, 0x9600, 0x9601, 0x9602, 0x9603, 0x9604, 0x9605, 0x9606, 0x9608, 0x9609, 0x960a, 0x960b, 0x960c, 0x960d, 0x960e,
0x960f, 0x9610, 0x9611, 0x9612, 0x9614, 0x9615, 0x9616, 0x9617, 0x9619, 0x961a, 0x961c, 0x961d, 0x961f, 0x9621, 0x9622, 0x962a,
0x962e, 0x9631, 0x9632, 0x9633, 0x9634, 0x9635, 0x9636, 0x963b, 0x963c, 0x963d, 0x963f, 0x9640, 0x9642, 0x9644, 0x9645, 0x9646,
0x9647, 0x9648, 0x9649, 0x964b, 0x964c, 0x964d, 0x9650, 0x9654, 0x9655, 0x965b, 0x965f, 0x9661, 0x9662, 0x9664, 0x9667, 0x9668,
0x9669, 0x966a, 0x966c, 0x9672, 0x9674, 0x9675, 0x9676, 0x9677, 0x9685, 0x9686, 0x9688, 0x968b, 0x968d, 0x968f, 0x9690, 0x9694,
0x9697, 0x9698, 0x9699, 0x969c, 0x96a7, 0x96b0, 0x96b3, 0x96b6, 0x96b9, 0x96bc, 0x96bd, 0x96be, 0x96c0, 0x96c1, 0x96c4, 0x96c5,
0x96c6, 0x96c7, 0x96c9, 0x96cc, 0x96cd, 0x96ce, 0x96cf, 0x96d2, 0x96d5, 0x96e0, 0x96e8, 0x96e9, 0x96ea, 0x96ef, 0x96f3, 0x96f6,
0x96f7, 0x96f9, 0x96fe, 0x9700, 0x9701, 0x9704, 0x9706, 0x9707, 0x9708, 0x9709, 0x970d, 0x970e, 0x970f, 0x9713, 0x9716, 0x971c,
0x971e, 0x972a, 0x972d, 0x9730, 0x9732, 0x9738, 0x9739, 0x973e, 0x9752, 0x9753, 0x9756, 0x9759, 0x975b, 0x975e, 0x9760, 0x9761,
0x9762, 0x9765, 0x9769, 0x9773, 0x9774, 0x9776, 0x977c, 0x9785, 0x978b, 0x978d, 0x9791, 0x9792, 0x9794, 0x9798, 0x97a0, 0x97a3,
0x97ab, 0x97ad, 0x97af, 0x97b2, 0x97b4, 0x97e6, 0x97e7, 0x97e9, 0x97ea, 0x97eb, 0x97ec, 0x97ed, 0x97f3, 0x97f5, 0x97f6, 0x9875,
0x9876, 0x9877, 0x9878, 0x9879, 0x987a, 0x987b, 0x987c, 0x987d, 0x987e, 0x987f, 0x9880, 0x9881, 0x9882, 0x9883, 0x9884, 0x9885,
0x9886, 0x9887, 0x9888, 0x9889, 0x988a, 0x988c, 0x988d, 0x988f, 0x9890, 0x9891, 0x9893, 0x9894, 0x9896, 0x9897, 0x9898, 0x989a,
0x989b, 0x989c, 0x989d, 0x989e, 0x989f, 0x98a0, 0x98a1, 0x98a2, 0x98a4, 0x98a5, 0x98a6, 0x98a7, 0x98ce, 0x98d1, 0x98d2, 0x98d3,
0x98d5, 0x98d8, 0x98d9, 0x98da, 0x98de, 0x98df, 0x98e7, 0x98e8, 0x990d, 0x9910, 0x992e, 0x9954, 0x9955, 0x9963, 0x9965, 0x9967,
0x9968, 0x9969, 0x996a, 0x996b, 0x996c, 0x996d, 0x996e, 0x996f, 0x9970, 0x9971, 0x9972, 0x9974, 0x9975, 0x9976, 0x9977, 0x997a,
0x997c, 0x997d, 0x997f, 0x9980, 0x9981, 0x9984, 0x9985, 0x9986, 0x9987, 0x9988, 0x998a, 0x998b, 0x998d, 0x998f, 0x9990, 0x9991,
0x9992, 0x9993, 0x9994, 0x9995, 0x9996, 0x9997, 0x9998, 0x9999, 0x99a5, 0x99a8, 0x9a6c, 0x9a6d, 0x9a6e, 0x9a6f, 0x9a70, 0x9a71,
0x9a73, 0x9a74, 0x9a75, 0x9a76, 0x9a77, 0x9a78, 0x9a79, 0x9a7a, 0x9a7b, 0x9a7c, 0x9a7d, 0x9a7e, 0x9a7f, 0x9a80, 0x9a81, 0x9a82,
0x9a84, 0x9a85, 0x9a86, 0x9a87, 0x9a88, 0x9a8a, 0x9a8b, 0x9a8c, 0x9a8f, 0x9a90, 0x9a91, 0x9a92, 0x9a93, 0x9a96, 0x9a97, 0x9a98,
0x9a9a, 0x9a9b, 0x9a9c, 0x9a9d, 0x9a9e, 0x9a9f, 0x9aa0, 0x9aa1, 0x9aa2, 0x9aa3, 0x9aa4, 0x9aa5, 0x9aa7, 0x9aa8, 0x9ab0, 0x9ab1,
0x9ab6, 0x9ab7, 0x9ab8, 0x9aba, 0x9abc, 0x9ac0, 0x9ac1, 0x9ac2, 0x9ac5, 0x9acb, 0x9acc, 0x9ad1, 0x9ad3, 0x9ad8, 0x9adf, 0x9ae1,
0x9ae6, 0x9aeb, 0x9aed, 0x9aef, 0x9af9, 0x9afb, 0x9b03, 0x9b08, 0x9b0f, 0x9b13, 0x9b1f, 0x9b23, 0x9b2f, 0x9b32, 0x9b3b, 0x9b3c,
0x9b41, 0x9b42, 0x9b43, 0x9b44, 0x9b45, 0x9b47, 0x9b48, 0x9b49, 0x9b4d, 0x9b4f, 0x9b51, 0x9b54, 0x9c7c, 0x9c7f, 0x9c81, 0x9c82,
0x9c85, 0x9c86, 0x9c87, 0x9c88, 0x9c8b, 0x9c8d, 0x9c8e, 0x9c90, 0x9c91, 0x9c92, 0x9c94, 0x9c95, 0x9c9a, 0x9c9b, 0x9c9c, 0x9c9e,
0x9c9f, 0x9ca0, 0x9ca1, 0x9ca2, 0x9ca3, 0x9ca4, 0x9ca5, 0x9ca6, 0x9ca7, 0x9ca8, 0x9ca9, 0x9cab, 0x9cad, 0x9cae, 0x9cb0, 0x9cb1,
0x9cb2, 0x9cb3, 0x9cb4, 0x9cb5, 0x9cb6, 0x9cb7, 0x9cb8, 0x9cba, 0x9cbb, 0x9cbc, 0x9cbd, 0x9cc3, 0x9cc4, 0x9cc5, 0x9cc6, 0x9cc7,
0x9cca, 0x9ccb, 0x9ccc, 0x9ccd, 0x9cce, 0x9ccf, 0x9cd0, 0x9cd3, 0x9cd4, 0x9cd5, 0x9cd6, 0x9cd7, 0x9cd8, 0x9cd9, 0x9cdc, 0x9cdd,
0x9cde, 0x9cdf, 0x9ce2, 0x9e1f, 0x9e20, 0x9e21, 0x9e22, 0x9e23, 0x9e25, 0x9e26, 0x9e28, 0x9e29, 0x9e2a, 0x9e2b, 0x9e2c, 0x9e2d,
0x9e2f, 0x9e31, 0x9e32, 0x9e33, 0x9e35, 0x9e36, 0x9e37, 0x9e38, 0x9e39, 0x9e3a, 0x9e3d, 0x9e3e, 0x9e3f, 0x9e41, 0x9e42, 0x9e43,
0x9e44, 0x9e45, 0x9e46, 0x9e47, 0x9e48, 0x9e49, 0x9e4a, 0x9e4b, 0x9e4c, 0x9e4e, 0x9e4f, 0x9e51, 0x9e55, 0x9e57, 0x9e58, 0x9e5a,
0x9e5b, 0x9e5c, 0x9e5e, 0x9e63, 0x9e64, 0x9e66, 0x9e67, 0x9e68, 0x9e69, 0x9e6a, 0x9e6b, 0x9e6c, 0x9e6d, 0x9e70, 0x9e71, 0x9e73,
0x9e7e, 0x9e7f, 0x9e82, 0x9e87, 0x9e88, 0x9e8b, 0x9e92, 0x9e93, 0x9e9d, 0x9e9f, 0x9ea6, 0x9eb4, 0x9eb8, 0x9ebb, 0x9ebd, 0x9ebe,
0x9ec4, 0x9ec9, 0x9ecd, 0x9ece, 0x9ecf, 0x9ed1, 0x9ed4, 0x9ed8, 0x9edb, 0x9edc, 0x9edd, 0x9edf, 0x9ee0, 0x9ee2, 0x9ee5, 0x9ee7,
0x9ee9, 0x9eea, 0x9eef, 0x9ef9, 0x9efb, 0x9efc, 0x9efe, 0x9f0b, 0x9f0d, 0x9f0e, 0x9f10, 0x9f13, 0x9f17, 0x9f19, 0x9f20, 0x9f22,
0x9f2c, 0x9f2f, 0x9f37, 0x9f39, 0x9f3b, 0x9f3d, 0x9f3e, 0x9f44, 0x9f50, 0x9f51, 0x9f7f, 0x9f80, 0x9f83, 0x9f84, 0x9f85, 0x9f86,
0x9f87, 0x9f88, 0x9f89, 0x9f8a, 0x9f8b, 0x9f8c, 0x9f99, 0x9f9a, 0x9f9b, 0x9f9f, 0x9fa0,
};
// end of file

View File

@ -0,0 +1,184 @@
#include "stdafx.h"
#include <twl/types.h>
#include <twl/os/common/format_rom.h>
#include <twl/os/common/ownerInfoEx.h>
#include "banner_char.h"
const int MasterEditorTWL::NumOf_BannerCharCodes_Korea = 2765;
const u16 MasterEditorTWL::BannerCharCodes_Korea[2765] =
{
0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f,
0x00a1, 0x00a2, 0x00a3, 0x00a8, 0x00a9, 0x00ae, 0x00b0, 0x00b1, 0x00b4, 0x00b7, 0x00bf, 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4,
0x00c5, 0x00c6, 0x00c7, 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4,
0x00d5, 0x00d6, 0x00d7, 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00df, 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5,
0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5,
0x00f6, 0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x0152, 0x0153, 0x02c6, 0x02dc, 0x2010, 0x2015, 0x2018, 0x2019,
0x201a, 0x201c, 0x201d, 0x201e, 0x2022, 0x2026, 0x2032, 0x2033, 0x203a, 0x203b, 0x20ac, 0x2122, 0x2190, 0x2191, 0x2192, 0x2193,
0x221e, 0x2234, 0x25a0, 0x25a1, 0x25b2, 0x25b3, 0x25bc, 0x25bd, 0x25c6, 0x25c7, 0x25cb, 0x25ce, 0x25cf, 0x2605, 0x2606, 0x266a,
0x266d, 0x266f, 0x3000, 0x3001, 0x3002, 0x3008, 0x3009, 0x300c, 0x300d, 0x3012, 0x3014, 0x3015, 0x3041, 0x3042, 0x3043, 0x3044,
0x3045, 0x3046, 0x3047, 0x3048, 0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, 0x3050, 0x3051, 0x3052, 0x3053, 0x3054,
0x3055, 0x3056, 0x3057, 0x3058, 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, 0x3060, 0x3061, 0x3062, 0x3063, 0x3064,
0x3065, 0x3066, 0x3067, 0x3068, 0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f, 0x3070, 0x3071, 0x3072, 0x3073, 0x3074,
0x3075, 0x3076, 0x3077, 0x3078, 0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x307f, 0x3080, 0x3081, 0x3082, 0x3083, 0x3084,
0x3085, 0x3086, 0x3087, 0x3088, 0x3089, 0x308a, 0x308b, 0x308c, 0x308d, 0x308e, 0x308f, 0x3090, 0x3091, 0x3092, 0x3093, 0x30a1,
0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, 0x30a8, 0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af, 0x30b0, 0x30b1,
0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7, 0x30b8, 0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf, 0x30c0, 0x30c1,
0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7, 0x30c8, 0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d0, 0x30d1,
0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7, 0x30d8, 0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df, 0x30e0, 0x30e1,
0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, 0x30e8, 0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x30ef, 0x30f0, 0x30f1,
0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6, 0x30fb, 0x30fc, 0xff01, 0xff06, 0xff08, 0xff09, 0xff0b, 0xff0c, 0xff0d, 0xff0e, 0xff0f,
0xff1a, 0xff1b, 0xff1d, 0xff1f, 0xff3b, 0xff3c, 0xff3d, 0xff3e, 0xff3f, 0xff40, 0xff5b, 0xff5c, 0xff5d, 0xff5e, 0xffe3, 0xac00,
0xac01, 0xac04, 0xac07, 0xac08, 0xac09, 0xac0a, 0xac10, 0xac11, 0xac12, 0xac13, 0xac14, 0xac15, 0xac16, 0xac17, 0xac19, 0xac1a,
0xac1b, 0xac1c, 0xac1d, 0xac20, 0xac24, 0xac2c, 0xac2d, 0xac2f, 0xac30, 0xac31, 0xac38, 0xac39, 0xac3c, 0xac40, 0xac4b, 0xac4d,
0xac54, 0xac58, 0xac5c, 0xac70, 0xac71, 0xac74, 0xac77, 0xac78, 0xac7a, 0xac80, 0xac81, 0xac83, 0xac84, 0xac85, 0xac86, 0xac89,
0xac8a, 0xac8b, 0xac8c, 0xac90, 0xac94, 0xac9c, 0xac9d, 0xac9f, 0xaca0, 0xaca1, 0xaca8, 0xaca9, 0xacaa, 0xacac, 0xacaf, 0xacb0,
0xacb8, 0xacb9, 0xacbb, 0xacbc, 0xacbd, 0xacc1, 0xacc4, 0xacc8, 0xaccc, 0xacd5, 0xacd7, 0xace0, 0xace1, 0xace4, 0xace7, 0xace8,
0xacea, 0xacec, 0xacef, 0xacf0, 0xacf1, 0xacf3, 0xacf5, 0xacf6, 0xacfc, 0xacfd, 0xad00, 0xad04, 0xad06, 0xad0c, 0xad0d, 0xad0f,
0xad11, 0xad18, 0xad1c, 0xad20, 0xad29, 0xad2c, 0xad2d, 0xad34, 0xad35, 0xad38, 0xad3c, 0xad44, 0xad45, 0xad47, 0xad49, 0xad50,
0xad54, 0xad58, 0xad61, 0xad63, 0xad6c, 0xad6d, 0xad70, 0xad73, 0xad74, 0xad75, 0xad76, 0xad7b, 0xad7c, 0xad7d, 0xad7f, 0xad81,
0xad82, 0xad88, 0xad89, 0xad8c, 0xad90, 0xad9c, 0xad9d, 0xada4, 0xadb7, 0xadc0, 0xadc1, 0xadc4, 0xadc8, 0xadd0, 0xadd1, 0xadd3,
0xaddc, 0xade0, 0xade4, 0xadf8, 0xadf9, 0xadfc, 0xadff, 0xae00, 0xae01, 0xae08, 0xae09, 0xae0b, 0xae0d, 0xae14, 0xae30, 0xae31,
0xae34, 0xae37, 0xae38, 0xae3a, 0xae40, 0xae41, 0xae43, 0xae45, 0xae46, 0xae4a, 0xae4c, 0xae4d, 0xae4e, 0xae50, 0xae54, 0xae56,
0xae5c, 0xae5d, 0xae5f, 0xae60, 0xae61, 0xae65, 0xae68, 0xae69, 0xae6c, 0xae70, 0xae78, 0xae79, 0xae7b, 0xae7c, 0xae7d, 0xae84,
0xae85, 0xae8c, 0xaebc, 0xaebd, 0xaebe, 0xaec0, 0xaec4, 0xaecc, 0xaecd, 0xaecf, 0xaed0, 0xaed1, 0xaed8, 0xaed9, 0xaedc, 0xaee8,
0xaeeb, 0xaeed, 0xaef4, 0xaef8, 0xaefc, 0xaf07, 0xaf08, 0xaf0d, 0xaf10, 0xaf2c, 0xaf2d, 0xaf30, 0xaf32, 0xaf34, 0xaf3c, 0xaf3d,
0xaf3f, 0xaf41, 0xaf42, 0xaf43, 0xaf48, 0xaf49, 0xaf50, 0xaf5c, 0xaf5d, 0xaf64, 0xaf65, 0xaf79, 0xaf80, 0xaf84, 0xaf88, 0xaf90,
0xaf91, 0xaf95, 0xaf9c, 0xafb8, 0xafb9, 0xafbc, 0xafc0, 0xafc7, 0xafc8, 0xafc9, 0xafcb, 0xafcd, 0xafce, 0xafd4, 0xafdc, 0xafe8,
0xafe9, 0xaff0, 0xaff1, 0xaff4, 0xaff8, 0xb000, 0xb001, 0xb004, 0xb00c, 0xb010, 0xb014, 0xb01c, 0xb01d, 0xb028, 0xb044, 0xb045,
0xb048, 0xb04a, 0xb04c, 0xb04e, 0xb053, 0xb054, 0xb055, 0xb057, 0xb059, 0xb05d, 0xb07c, 0xb07d, 0xb080, 0xb084, 0xb08c, 0xb08d,
0xb08f, 0xb091, 0xb098, 0xb099, 0xb09a, 0xb09c, 0xb09f, 0xb0a0, 0xb0a1, 0xb0a2, 0xb0a8, 0xb0a9, 0xb0ab, 0xb0ac, 0xb0ad, 0xb0ae,
0xb0af, 0xb0b1, 0xb0b3, 0xb0b4, 0xb0b5, 0xb0b8, 0xb0bc, 0xb0c4, 0xb0c5, 0xb0c7, 0xb0c8, 0xb0c9, 0xb0d0, 0xb0d1, 0xb0d4, 0xb0d8,
0xb0e0, 0xb0e5, 0xb108, 0xb109, 0xb10b, 0xb10c, 0xb110, 0xb112, 0xb113, 0xb118, 0xb119, 0xb11b, 0xb11c, 0xb11d, 0xb123, 0xb124,
0xb125, 0xb128, 0xb12c, 0xb134, 0xb135, 0xb137, 0xb138, 0xb139, 0xb140, 0xb141, 0xb144, 0xb148, 0xb150, 0xb151, 0xb154, 0xb155,
0xb158, 0xb15c, 0xb160, 0xb178, 0xb179, 0xb17c, 0xb180, 0xb182, 0xb188, 0xb189, 0xb18b, 0xb18d, 0xb192, 0xb193, 0xb194, 0xb198,
0xb19c, 0xb1a8, 0xb1cc, 0xb1d0, 0xb1d4, 0xb1dc, 0xb1dd, 0xb1df, 0xb1e8, 0xb1e9, 0xb1ec, 0xb1f0, 0xb1f9, 0xb1fb, 0xb1fd, 0xb204,
0xb205, 0xb208, 0xb20b, 0xb20c, 0xb214, 0xb215, 0xb217, 0xb219, 0xb220, 0xb234, 0xb23c, 0xb258, 0xb25c, 0xb260, 0xb268, 0xb269,
0xb274, 0xb275, 0xb27c, 0xb284, 0xb285, 0xb289, 0xb290, 0xb291, 0xb294, 0xb298, 0xb299, 0xb29a, 0xb2a0, 0xb2a1, 0xb2a3, 0xb2a5,
0xb2a6, 0xb2aa, 0xb2ac, 0xb2b0, 0xb2b4, 0xb2c8, 0xb2c9, 0xb2cc, 0xb2d0, 0xb2d2, 0xb2d8, 0xb2d9, 0xb2db, 0xb2dd, 0xb2e2, 0xb2e4,
0xb2e5, 0xb2e6, 0xb2e8, 0xb2eb, 0xb2ec, 0xb2ed, 0xb2ee, 0xb2ef, 0xb2f3, 0xb2f4, 0xb2f5, 0xb2f7, 0xb2f8, 0xb2f9, 0xb2fa, 0xb2fb,
0xb2ff, 0xb300, 0xb301, 0xb304, 0xb308, 0xb310, 0xb311, 0xb313, 0xb314, 0xb315, 0xb31c, 0xb354, 0xb355, 0xb356, 0xb358, 0xb35b,
0xb35c, 0xb35e, 0xb35f, 0xb364, 0xb365, 0xb367, 0xb369, 0xb36b, 0xb36e, 0xb370, 0xb371, 0xb374, 0xb378, 0xb380, 0xb381, 0xb383,
0xb384, 0xb385, 0xb38c, 0xb390, 0xb394, 0xb3a0, 0xb3a1, 0xb3a8, 0xb3ac, 0xb3c4, 0xb3c5, 0xb3c8, 0xb3cb, 0xb3cc, 0xb3ce, 0xb3d0,
0xb3d4, 0xb3d5, 0xb3d7, 0xb3d9, 0xb3db, 0xb3dd, 0xb3e0, 0xb3e4, 0xb3e8, 0xb3fc, 0xb410, 0xb418, 0xb41c, 0xb420, 0xb428, 0xb429,
0xb42b, 0xb434, 0xb450, 0xb451, 0xb454, 0xb458, 0xb460, 0xb461, 0xb463, 0xb465, 0xb46c, 0xb480, 0xb488, 0xb49d, 0xb4a4, 0xb4a8,
0xb4ac, 0xb4b5, 0xb4b7, 0xb4b9, 0xb4c0, 0xb4c4, 0xb4c8, 0xb4d0, 0xb4d5, 0xb4dc, 0xb4dd, 0xb4e0, 0xb4e3, 0xb4e4, 0xb4e6, 0xb4ec,
0xb4ed, 0xb4ef, 0xb4f1, 0xb4f8, 0xb514, 0xb515, 0xb518, 0xb51b, 0xb51c, 0xb524, 0xb525, 0xb527, 0xb528, 0xb529, 0xb52a, 0xb530,
0xb531, 0xb534, 0xb538, 0xb540, 0xb541, 0xb543, 0xb544, 0xb545, 0xb54b, 0xb54c, 0xb54d, 0xb550, 0xb554, 0xb55c, 0xb55d, 0xb55f,
0xb560, 0xb561, 0xb5a0, 0xb5a1, 0xb5a4, 0xb5a8, 0xb5aa, 0xb5ab, 0xb5b0, 0xb5b1, 0xb5b3, 0xb5b4, 0xb5b5, 0xb5bb, 0xb5bc, 0xb5bd,
0xb5c0, 0xb5c4, 0xb5cc, 0xb5cd, 0xb5cf, 0xb5d0, 0xb5d1, 0xb5d8, 0xb5ec, 0xb610, 0xb611, 0xb614, 0xb618, 0xb625, 0xb62c, 0xb634,
0xb648, 0xb664, 0xb668, 0xb69c, 0xb69d, 0xb6a0, 0xb6a4, 0xb6ab, 0xb6ac, 0xb6b1, 0xb6d4, 0xb6f0, 0xb6f4, 0xb6f8, 0xb700, 0xb701,
0xb705, 0xb728, 0xb729, 0xb72c, 0xb72f, 0xb730, 0xb738, 0xb739, 0xb73b, 0xb744, 0xb748, 0xb74c, 0xb754, 0xb755, 0xb760, 0xb764,
0xb768, 0xb770, 0xb771, 0xb773, 0xb775, 0xb77c, 0xb77d, 0xb780, 0xb784, 0xb78c, 0xb78d, 0xb78f, 0xb790, 0xb791, 0xb792, 0xb796,
0xb797, 0xb798, 0xb799, 0xb79c, 0xb7a0, 0xb7a8, 0xb7a9, 0xb7ab, 0xb7ac, 0xb7ad, 0xb7b4, 0xb7b5, 0xb7b8, 0xb7c7, 0xb7c9, 0xb7ec,
0xb7ed, 0xb7f0, 0xb7f4, 0xb7fc, 0xb7fd, 0xb7ff, 0xb800, 0xb801, 0xb807, 0xb808, 0xb809, 0xb80c, 0xb810, 0xb818, 0xb819, 0xb81b,
0xb81d, 0xb824, 0xb825, 0xb828, 0xb82c, 0xb834, 0xb835, 0xb837, 0xb838, 0xb839, 0xb840, 0xb844, 0xb851, 0xb853, 0xb85c, 0xb85d,
0xb860, 0xb864, 0xb86c, 0xb86d, 0xb86f, 0xb871, 0xb878, 0xb87c, 0xb88d, 0xb8a8, 0xb8b0, 0xb8b4, 0xb8b8, 0xb8c0, 0xb8c1, 0xb8c3,
0xb8c5, 0xb8cc, 0xb8d0, 0xb8d4, 0xb8dd, 0xb8df, 0xb8e1, 0xb8e8, 0xb8e9, 0xb8ec, 0xb8f0, 0xb8f8, 0xb8f9, 0xb8fb, 0xb8fd, 0xb904,
0xb918, 0xb920, 0xb93c, 0xb93d, 0xb940, 0xb944, 0xb94c, 0xb94f, 0xb951, 0xb958, 0xb959, 0xb95c, 0xb960, 0xb968, 0xb969, 0xb96b,
0xb96d, 0xb974, 0xb975, 0xb978, 0xb97c, 0xb984, 0xb985, 0xb987, 0xb989, 0xb98a, 0xb98d, 0xb98e, 0xb9ac, 0xb9ad, 0xb9b0, 0xb9b4,
0xb9bc, 0xb9bd, 0xb9bf, 0xb9c1, 0xb9c8, 0xb9c9, 0xb9cc, 0xb9ce, 0xb9cf, 0xb9d0, 0xb9d1, 0xb9d2, 0xb9d8, 0xb9d9, 0xb9db, 0xb9dd,
0xb9de, 0xb9e1, 0xb9e3, 0xb9e4, 0xb9e5, 0xb9e8, 0xb9ec, 0xb9f4, 0xb9f5, 0xb9f7, 0xb9f8, 0xb9f9, 0xb9fa, 0xba00, 0xba01, 0xba08,
0xba15, 0xba38, 0xba39, 0xba3c, 0xba40, 0xba42, 0xba48, 0xba49, 0xba4b, 0xba4d, 0xba4e, 0xba53, 0xba54, 0xba55, 0xba58, 0xba5c,
0xba64, 0xba65, 0xba67, 0xba68, 0xba69, 0xba70, 0xba71, 0xba74, 0xba78, 0xba83, 0xba84, 0xba85, 0xba87, 0xba8c, 0xbaa8, 0xbaa9,
0xbaab, 0xbaac, 0xbab0, 0xbab2, 0xbab8, 0xbab9, 0xbabb, 0xbabd, 0xbac4, 0xbac8, 0xbad8, 0xbad9, 0xbafc, 0xbb00, 0xbb04, 0xbb0d,
0xbb0f, 0xbb11, 0xbb18, 0xbb1c, 0xbb20, 0xbb29, 0xbb2b, 0xbb34, 0xbb35, 0xbb36, 0xbb38, 0xbb3b, 0xbb3c, 0xbb3d, 0xbb3e, 0xbb44,
0xbb45, 0xbb47, 0xbb49, 0xbb4d, 0xbb4f, 0xbb50, 0xbb54, 0xbb58, 0xbb61, 0xbb63, 0xbb6c, 0xbb88, 0xbb8c, 0xbb90, 0xbba4, 0xbba8,
0xbbac, 0xbbb4, 0xbbb7, 0xbbc0, 0xbbc4, 0xbbc8, 0xbbd0, 0xbbd3, 0xbbf8, 0xbbf9, 0xbbfc, 0xbbff, 0xbc00, 0xbc02, 0xbc08, 0xbc09,
0xbc0b, 0xbc0c, 0xbc0d, 0xbc0f, 0xbc11, 0xbc14, 0xbc15, 0xbc16, 0xbc17, 0xbc18, 0xbc1b, 0xbc1c, 0xbc1d, 0xbc1e, 0xbc1f, 0xbc24,
0xbc25, 0xbc27, 0xbc29, 0xbc2d, 0xbc30, 0xbc31, 0xbc34, 0xbc38, 0xbc40, 0xbc41, 0xbc43, 0xbc44, 0xbc45, 0xbc49, 0xbc4c, 0xbc4d,
0xbc50, 0xbc5d, 0xbc84, 0xbc85, 0xbc88, 0xbc8b, 0xbc8c, 0xbc8e, 0xbc94, 0xbc95, 0xbc97, 0xbc99, 0xbc9a, 0xbca0, 0xbca1, 0xbca4,
0xbca7, 0xbca8, 0xbcb0, 0xbcb1, 0xbcb3, 0xbcb4, 0xbcb5, 0xbcbc, 0xbcbd, 0xbcc0, 0xbcc4, 0xbccd, 0xbccf, 0xbcd0, 0xbcd1, 0xbcd5,
0xbcd8, 0xbcdc, 0xbcf4, 0xbcf5, 0xbcf6, 0xbcf8, 0xbcfc, 0xbd04, 0xbd05, 0xbd07, 0xbd09, 0xbd10, 0xbd14, 0xbd24, 0xbd2c, 0xbd40,
0xbd48, 0xbd49, 0xbd4c, 0xbd50, 0xbd58, 0xbd59, 0xbd64, 0xbd68, 0xbd80, 0xbd81, 0xbd84, 0xbd87, 0xbd88, 0xbd89, 0xbd8a, 0xbd90,
0xbd91, 0xbd93, 0xbd95, 0xbd99, 0xbd9a, 0xbd9c, 0xbda4, 0xbdb0, 0xbdb8, 0xbdd4, 0xbdd5, 0xbdd8, 0xbddc, 0xbde9, 0xbdf0, 0xbdf4,
0xbdf8, 0xbe00, 0xbe03, 0xbe05, 0xbe0c, 0xbe0d, 0xbe10, 0xbe14, 0xbe1c, 0xbe1d, 0xbe1f, 0xbe44, 0xbe45, 0xbe48, 0xbe4c, 0xbe4e,
0xbe54, 0xbe55, 0xbe57, 0xbe59, 0xbe5a, 0xbe5b, 0xbe60, 0xbe61, 0xbe64, 0xbe68, 0xbe6a, 0xbe70, 0xbe71, 0xbe73, 0xbe74, 0xbe75,
0xbe7b, 0xbe7c, 0xbe7d, 0xbe80, 0xbe84, 0xbe8c, 0xbe8d, 0xbe8f, 0xbe90, 0xbe91, 0xbe98, 0xbe99, 0xbea8, 0xbed0, 0xbed1, 0xbed4,
0xbed7, 0xbed8, 0xbee0, 0xbee3, 0xbee4, 0xbee5, 0xbeec, 0xbf01, 0xbf08, 0xbf09, 0xbf18, 0xbf19, 0xbf1b, 0xbf1c, 0xbf1d, 0xbf40,
0xbf41, 0xbf44, 0xbf48, 0xbf50, 0xbf51, 0xbf55, 0xbf94, 0xbfb0, 0xbfc5, 0xbfcc, 0xbfcd, 0xbfd0, 0xbfd4, 0xbfdc, 0xbfdf, 0xbfe1,
0xc03c, 0xc051, 0xc058, 0xc05c, 0xc060, 0xc068, 0xc069, 0xc090, 0xc091, 0xc094, 0xc098, 0xc0a0, 0xc0a1, 0xc0a3, 0xc0a5, 0xc0ac,
0xc0ad, 0xc0af, 0xc0b0, 0xc0b3, 0xc0b4, 0xc0b5, 0xc0b6, 0xc0bc, 0xc0bd, 0xc0bf, 0xc0c0, 0xc0c1, 0xc0c5, 0xc0c8, 0xc0c9, 0xc0cc,
0xc0d0, 0xc0d8, 0xc0d9, 0xc0db, 0xc0dc, 0xc0dd, 0xc0e4, 0xc0e5, 0xc0e8, 0xc0ec, 0xc0f4, 0xc0f5, 0xc0f7, 0xc0f9, 0xc100, 0xc104,
0xc108, 0xc110, 0xc115, 0xc11c, 0xc11d, 0xc11e, 0xc11f, 0xc120, 0xc123, 0xc124, 0xc126, 0xc127, 0xc12c, 0xc12d, 0xc12f, 0xc130,
0xc131, 0xc136, 0xc138, 0xc139, 0xc13c, 0xc140, 0xc148, 0xc149, 0xc14b, 0xc14c, 0xc14d, 0xc154, 0xc155, 0xc158, 0xc15c, 0xc164,
0xc165, 0xc167, 0xc168, 0xc169, 0xc170, 0xc174, 0xc178, 0xc185, 0xc18c, 0xc18d, 0xc18e, 0xc190, 0xc194, 0xc196, 0xc19c, 0xc19d,
0xc19f, 0xc1a1, 0xc1a5, 0xc1a8, 0xc1a9, 0xc1ac, 0xc1b0, 0xc1bd, 0xc1c4, 0xc1c8, 0xc1cc, 0xc1d4, 0xc1d7, 0xc1d8, 0xc1e0, 0xc1e4,
0xc1e8, 0xc1f0, 0xc1f1, 0xc1f3, 0xc1fc, 0xc1fd, 0xc200, 0xc204, 0xc20c, 0xc20d, 0xc20f, 0xc211, 0xc218, 0xc219, 0xc21c, 0xc21f,
0xc220, 0xc228, 0xc229, 0xc22b, 0xc22d, 0xc22f, 0xc231, 0xc232, 0xc234, 0xc248, 0xc250, 0xc251, 0xc254, 0xc258, 0xc260, 0xc265,
0xc26c, 0xc26d, 0xc270, 0xc274, 0xc27c, 0xc27d, 0xc27f, 0xc281, 0xc288, 0xc289, 0xc290, 0xc298, 0xc29b, 0xc29d, 0xc2a4, 0xc2a5,
0xc2a8, 0xc2ac, 0xc2ad, 0xc2b4, 0xc2b5, 0xc2b7, 0xc2b9, 0xc2dc, 0xc2dd, 0xc2e0, 0xc2e3, 0xc2e4, 0xc2eb, 0xc2ec, 0xc2ed, 0xc2ef,
0xc2f1, 0xc2f6, 0xc2f8, 0xc2f9, 0xc2fb, 0xc2fc, 0xc300, 0xc308, 0xc309, 0xc30c, 0xc30d, 0xc313, 0xc314, 0xc315, 0xc318, 0xc31c,
0xc324, 0xc325, 0xc328, 0xc329, 0xc345, 0xc368, 0xc369, 0xc36c, 0xc370, 0xc372, 0xc378, 0xc379, 0xc37c, 0xc37d, 0xc384, 0xc388,
0xc38c, 0xc3c0, 0xc3d8, 0xc3d9, 0xc3dc, 0xc3df, 0xc3e0, 0xc3e2, 0xc3e8, 0xc3e9, 0xc3ed, 0xc3f4, 0xc3f5, 0xc3f8, 0xc408, 0xc410,
0xc424, 0xc42c, 0xc430, 0xc434, 0xc43c, 0xc43d, 0xc448, 0xc464, 0xc465, 0xc468, 0xc46c, 0xc474, 0xc475, 0xc479, 0xc480, 0xc494,
0xc49c, 0xc4b8, 0xc4bc, 0xc4e9, 0xc4f0, 0xc4f1, 0xc4f4, 0xc4f8, 0xc4fa, 0xc4ff, 0xc500, 0xc501, 0xc50c, 0xc510, 0xc514, 0xc51c,
0xc528, 0xc529, 0xc52c, 0xc530, 0xc538, 0xc539, 0xc53b, 0xc53d, 0xc544, 0xc545, 0xc548, 0xc549, 0xc54a, 0xc54c, 0xc54d, 0xc54e,
0xc553, 0xc554, 0xc555, 0xc557, 0xc558, 0xc559, 0xc55d, 0xc55e, 0xc560, 0xc561, 0xc564, 0xc568, 0xc570, 0xc571, 0xc573, 0xc574,
0xc575, 0xc57c, 0xc57d, 0xc580, 0xc584, 0xc587, 0xc58c, 0xc58d, 0xc58f, 0xc591, 0xc595, 0xc597, 0xc598, 0xc59c, 0xc5a0, 0xc5a9,
0xc5b4, 0xc5b5, 0xc5b8, 0xc5b9, 0xc5bb, 0xc5bc, 0xc5bd, 0xc5be, 0xc5c4, 0xc5c5, 0xc5c6, 0xc5c7, 0xc5c8, 0xc5c9, 0xc5ca, 0xc5cc,
0xc5ce, 0xc5d0, 0xc5d1, 0xc5d4, 0xc5d8, 0xc5e0, 0xc5e1, 0xc5e3, 0xc5e5, 0xc5ec, 0xc5ed, 0xc5ee, 0xc5f0, 0xc5f4, 0xc5f6, 0xc5f7,
0xc5fc, 0xc5fd, 0xc5fe, 0xc5ff, 0xc600, 0xc601, 0xc605, 0xc606, 0xc607, 0xc608, 0xc60c, 0xc610, 0xc618, 0xc619, 0xc61b, 0xc61c,
0xc624, 0xc625, 0xc628, 0xc62c, 0xc62d, 0xc62e, 0xc630, 0xc633, 0xc634, 0xc635, 0xc637, 0xc639, 0xc63b, 0xc640, 0xc641, 0xc644,
0xc648, 0xc650, 0xc651, 0xc653, 0xc654, 0xc655, 0xc65c, 0xc65d, 0xc660, 0xc66c, 0xc66f, 0xc671, 0xc678, 0xc679, 0xc67c, 0xc680,
0xc688, 0xc689, 0xc68b, 0xc68d, 0xc694, 0xc695, 0xc698, 0xc69c, 0xc6a4, 0xc6a5, 0xc6a7, 0xc6a9, 0xc6b0, 0xc6b1, 0xc6b4, 0xc6b8,
0xc6b9, 0xc6ba, 0xc6c0, 0xc6c1, 0xc6c3, 0xc6c5, 0xc6cc, 0xc6cd, 0xc6d0, 0xc6d4, 0xc6dc, 0xc6dd, 0xc6e0, 0xc6e1, 0xc6e8, 0xc6e9,
0xc6ec, 0xc6f0, 0xc6f8, 0xc6f9, 0xc6fd, 0xc704, 0xc705, 0xc708, 0xc70c, 0xc714, 0xc715, 0xc717, 0xc719, 0xc720, 0xc721, 0xc724,
0xc728, 0xc730, 0xc731, 0xc733, 0xc735, 0xc737, 0xc73c, 0xc73d, 0xc740, 0xc744, 0xc74a, 0xc74c, 0xc74d, 0xc74f, 0xc751, 0xc752,
0xc753, 0xc754, 0xc755, 0xc756, 0xc757, 0xc758, 0xc75c, 0xc760, 0xc768, 0xc76b, 0xc774, 0xc775, 0xc778, 0xc77c, 0xc77d, 0xc77e,
0xc783, 0xc784, 0xc785, 0xc787, 0xc788, 0xc789, 0xc78a, 0xc78e, 0xc790, 0xc791, 0xc794, 0xc796, 0xc797, 0xc798, 0xc79a, 0xc7a0,
0xc7a1, 0xc7a3, 0xc7a4, 0xc7a5, 0xc7a6, 0xc7ac, 0xc7ad, 0xc7b0, 0xc7b4, 0xc7bc, 0xc7bd, 0xc7bf, 0xc7c0, 0xc7c1, 0xc7c8, 0xc7c9,
0xc7cc, 0xc7ce, 0xc7d0, 0xc7d8, 0xc7dd, 0xc7e4, 0xc7e8, 0xc7ec, 0xc800, 0xc801, 0xc804, 0xc808, 0xc80a, 0xc810, 0xc811, 0xc813,
0xc815, 0xc816, 0xc81c, 0xc81d, 0xc820, 0xc824, 0xc82c, 0xc82d, 0xc82f, 0xc831, 0xc838, 0xc83c, 0xc840, 0xc848, 0xc849, 0xc84c,
0xc84d, 0xc854, 0xc870, 0xc871, 0xc874, 0xc878, 0xc87a, 0xc880, 0xc881, 0xc883, 0xc885, 0xc886, 0xc887, 0xc88b, 0xc88c, 0xc88d,
0xc894, 0xc89d, 0xc89f, 0xc8a1, 0xc8a8, 0xc8bc, 0xc8bd, 0xc8c4, 0xc8c8, 0xc8cc, 0xc8d4, 0xc8d5, 0xc8d7, 0xc8d9, 0xc8e0, 0xc8e1,
0xc8e4, 0xc8f5, 0xc8fc, 0xc8fd, 0xc900, 0xc904, 0xc905, 0xc906, 0xc90c, 0xc90d, 0xc90f, 0xc911, 0xc918, 0xc92c, 0xc934, 0xc950,
0xc951, 0xc954, 0xc958, 0xc960, 0xc961, 0xc963, 0xc96c, 0xc970, 0xc974, 0xc97c, 0xc988, 0xc989, 0xc98c, 0xc990, 0xc998, 0xc999,
0xc99b, 0xc99d, 0xc9c0, 0xc9c1, 0xc9c4, 0xc9c7, 0xc9c8, 0xc9ca, 0xc9d0, 0xc9d1, 0xc9d3, 0xc9d5, 0xc9d6, 0xc9d9, 0xc9da, 0xc9dc,
0xc9dd, 0xc9e0, 0xc9e2, 0xc9e4, 0xc9e7, 0xc9ec, 0xc9ed, 0xc9ef, 0xc9f0, 0xc9f1, 0xc9f8, 0xc9f9, 0xc9fc, 0xca00, 0xca08, 0xca09,
0xca0b, 0xca0c, 0xca0d, 0xca14, 0xca18, 0xca29, 0xca4c, 0xca4d, 0xca50, 0xca54, 0xca5c, 0xca5d, 0xca5f, 0xca60, 0xca61, 0xca68,
0xca7d, 0xca84, 0xca98, 0xcabc, 0xcabd, 0xcac0, 0xcac4, 0xcacc, 0xcacd, 0xcacf, 0xcad1, 0xcad3, 0xcad8, 0xcad9, 0xcae0, 0xcaec,
0xcaf4, 0xcb08, 0xcb10, 0xcb14, 0xcb18, 0xcb20, 0xcb21, 0xcb41, 0xcb48, 0xcb49, 0xcb4c, 0xcb50, 0xcb58, 0xcb59, 0xcb5d, 0xcb64,
0xcb78, 0xcb79, 0xcb9c, 0xcbb8, 0xcbd4, 0xcbe4, 0xcbe7, 0xcbe9, 0xcc0c, 0xcc0d, 0xcc10, 0xcc14, 0xcc1c, 0xcc1d, 0xcc21, 0xcc22,
0xcc27, 0xcc28, 0xcc29, 0xcc2c, 0xcc2e, 0xcc30, 0xcc38, 0xcc39, 0xcc3b, 0xcc3c, 0xcc3d, 0xcc3e, 0xcc44, 0xcc45, 0xcc48, 0xcc4c,
0xcc54, 0xcc55, 0xcc57, 0xcc58, 0xcc59, 0xcc60, 0xcc64, 0xcc66, 0xcc68, 0xcc70, 0xcc75, 0xcc98, 0xcc99, 0xcc9c, 0xcca0, 0xcca8,
0xcca9, 0xccab, 0xccac, 0xccad, 0xccb4, 0xccb5, 0xccb8, 0xccbc, 0xccc4, 0xccc5, 0xccc7, 0xccc9, 0xccd0, 0xccd4, 0xcce4, 0xccec,
0xccf0, 0xcd01, 0xcd08, 0xcd09, 0xcd0c, 0xcd10, 0xcd18, 0xcd19, 0xcd1b, 0xcd1d, 0xcd24, 0xcd28, 0xcd2c, 0xcd39, 0xcd5c, 0xcd60,
0xcd64, 0xcd6c, 0xcd6d, 0xcd6f, 0xcd71, 0xcd78, 0xcd88, 0xcd94, 0xcd95, 0xcd98, 0xcd9c, 0xcda4, 0xcda5, 0xcda7, 0xcda9, 0xcdb0,
0xcdc4, 0xcdcc, 0xcdd0, 0xcde8, 0xcdec, 0xcdf0, 0xcdf8, 0xcdf9, 0xcdfb, 0xcdfd, 0xce04, 0xce08, 0xce0c, 0xce14, 0xce19, 0xce20,
0xce21, 0xce24, 0xce28, 0xce30, 0xce31, 0xce33, 0xce35, 0xce58, 0xce59, 0xce5c, 0xce5f, 0xce60, 0xce61, 0xce68, 0xce69, 0xce6b,
0xce6d, 0xce74, 0xce75, 0xce78, 0xce7c, 0xce84, 0xce85, 0xce87, 0xce89, 0xce90, 0xce91, 0xce94, 0xce98, 0xcea0, 0xcea1, 0xcea3,
0xcea4, 0xcea5, 0xceac, 0xcead, 0xcec1, 0xcee4, 0xcee5, 0xcee8, 0xceeb, 0xceec, 0xcef4, 0xcef5, 0xcef7, 0xcef8, 0xcef9, 0xcf00,
0xcf01, 0xcf04, 0xcf08, 0xcf10, 0xcf11, 0xcf13, 0xcf15, 0xcf1c, 0xcf20, 0xcf24, 0xcf2c, 0xcf2d, 0xcf2f, 0xcf30, 0xcf31, 0xcf38,
0xcf54, 0xcf55, 0xcf58, 0xcf5c, 0xcf64, 0xcf65, 0xcf67, 0xcf69, 0xcf70, 0xcf71, 0xcf74, 0xcf78, 0xcf80, 0xcf85, 0xcf8c, 0xcfa1,
0xcfa8, 0xcfb0, 0xcfc4, 0xcfe0, 0xcfe1, 0xcfe4, 0xcfe8, 0xcff0, 0xcff1, 0xcff3, 0xcff5, 0xcffc, 0xd000, 0xd004, 0xd011, 0xd018,
0xd02d, 0xd034, 0xd035, 0xd038, 0xd03c, 0xd044, 0xd045, 0xd047, 0xd049, 0xd050, 0xd054, 0xd058, 0xd060, 0xd06c, 0xd06d, 0xd070,
0xd074, 0xd07c, 0xd07d, 0xd081, 0xd0a4, 0xd0a5, 0xd0a8, 0xd0ac, 0xd0b4, 0xd0b5, 0xd0b7, 0xd0b9, 0xd0c0, 0xd0c1, 0xd0c4, 0xd0c8,
0xd0c9, 0xd0d0, 0xd0d1, 0xd0d3, 0xd0d4, 0xd0d5, 0xd0dc, 0xd0dd, 0xd0e0, 0xd0e4, 0xd0ec, 0xd0ed, 0xd0ef, 0xd0f0, 0xd0f1, 0xd0f8,
0xd10d, 0xd130, 0xd131, 0xd134, 0xd138, 0xd13a, 0xd140, 0xd141, 0xd143, 0xd144, 0xd145, 0xd14c, 0xd14d, 0xd150, 0xd154, 0xd15c,
0xd15d, 0xd15f, 0xd161, 0xd168, 0xd16c, 0xd17c, 0xd184, 0xd188, 0xd1a0, 0xd1a1, 0xd1a4, 0xd1a8, 0xd1b0, 0xd1b1, 0xd1b3, 0xd1b5,
0xd1ba, 0xd1bc, 0xd1c0, 0xd1d8, 0xd1f4, 0xd1f8, 0xd207, 0xd209, 0xd210, 0xd22c, 0xd22d, 0xd230, 0xd234, 0xd23c, 0xd23d, 0xd23f,
0xd241, 0xd248, 0xd25c, 0xd264, 0xd280, 0xd281, 0xd284, 0xd288, 0xd290, 0xd291, 0xd295, 0xd29c, 0xd2a0, 0xd2a4, 0xd2ac, 0xd2b1,
0xd2b8, 0xd2b9, 0xd2bc, 0xd2bf, 0xd2c0, 0xd2c2, 0xd2c8, 0xd2c9, 0xd2cb, 0xd2d4, 0xd2d8, 0xd2dc, 0xd2e4, 0xd2e5, 0xd2f0, 0xd2f1,
0xd2f4, 0xd2f8, 0xd300, 0xd301, 0xd303, 0xd305, 0xd30c, 0xd30d, 0xd30e, 0xd310, 0xd314, 0xd316, 0xd31c, 0xd31d, 0xd31f, 0xd320,
0xd321, 0xd325, 0xd328, 0xd329, 0xd32c, 0xd330, 0xd338, 0xd339, 0xd33b, 0xd33c, 0xd33d, 0xd344, 0xd345, 0xd37c, 0xd37d, 0xd380,
0xd384, 0xd38c, 0xd38d, 0xd38f, 0xd390, 0xd391, 0xd398, 0xd399, 0xd39c, 0xd3a0, 0xd3a8, 0xd3a9, 0xd3ab, 0xd3ad, 0xd3b4, 0xd3b8,
0xd3bc, 0xd3c4, 0xd3c5, 0xd3c8, 0xd3c9, 0xd3d0, 0xd3d8, 0xd3e1, 0xd3e3, 0xd3ec, 0xd3ed, 0xd3f0, 0xd3f4, 0xd3fc, 0xd3fd, 0xd3ff,
0xd401, 0xd408, 0xd41d, 0xd440, 0xd444, 0xd45c, 0xd460, 0xd464, 0xd46d, 0xd46f, 0xd478, 0xd479, 0xd47c, 0xd47f, 0xd480, 0xd482,
0xd488, 0xd489, 0xd48b, 0xd48d, 0xd494, 0xd4a9, 0xd4cc, 0xd4d0, 0xd4d4, 0xd4dc, 0xd4df, 0xd4e8, 0xd4ec, 0xd4f0, 0xd4f8, 0xd4fb,
0xd4fd, 0xd504, 0xd508, 0xd50c, 0xd514, 0xd515, 0xd517, 0xd53c, 0xd53d, 0xd540, 0xd544, 0xd54c, 0xd54d, 0xd54f, 0xd551, 0xd558,
0xd559, 0xd55c, 0xd560, 0xd565, 0xd568, 0xd569, 0xd56b, 0xd56d, 0xd574, 0xd575, 0xd578, 0xd57c, 0xd584, 0xd585, 0xd587, 0xd588,
0xd589, 0xd590, 0xd5a5, 0xd5c8, 0xd5c9, 0xd5cc, 0xd5d0, 0xd5d2, 0xd5d8, 0xd5d9, 0xd5db, 0xd5dd, 0xd5e4, 0xd5e5, 0xd5e8, 0xd5ec,
0xd5f4, 0xd5f5, 0xd5f7, 0xd5f9, 0xd600, 0xd601, 0xd604, 0xd608, 0xd610, 0xd611, 0xd613, 0xd614, 0xd615, 0xd61c, 0xd620, 0xd624,
0xd62d, 0xd638, 0xd639, 0xd63c, 0xd640, 0xd645, 0xd648, 0xd649, 0xd64b, 0xd64d, 0xd651, 0xd654, 0xd655, 0xd658, 0xd65c, 0xd667,
0xd669, 0xd670, 0xd671, 0xd674, 0xd683, 0xd685, 0xd68c, 0xd68d, 0xd690, 0xd694, 0xd69d, 0xd69f, 0xd6a1, 0xd6a8, 0xd6ac, 0xd6b0,
0xd6b9, 0xd6bb, 0xd6c4, 0xd6c5, 0xd6c8, 0xd6cc, 0xd6d1, 0xd6d4, 0xd6d7, 0xd6d9, 0xd6e0, 0xd6e4, 0xd6e8, 0xd6f0, 0xd6f5, 0xd6fc,
0xd6fd, 0xd700, 0xd704, 0xd711, 0xd718, 0xd719, 0xd71c, 0xd720, 0xd728, 0xd729, 0xd72b, 0xd72d, 0xd734, 0xd735, 0xd738, 0xd73c,
0xd744, 0xd747, 0xd749, 0xd750, 0xd751, 0xd754, 0xd756, 0xd757, 0xd758, 0xd759, 0xd760, 0xd761, 0xd763, 0xd765, 0xd769, 0xd76c,
0xd770, 0xd774, 0xd77c, 0xd77d, 0xd781, 0xd788, 0xd789, 0xd78c, 0xd790, 0xd798, 0xd799, 0xd79b, 0xd79d,
};
// end of file

View File

@ -0,0 +1,39 @@
#include "stdafx.h"
#include <twl/types.h>
#include <twl/os/common/format_rom.h>
#include <twl/os/common/ownerInfoEx.h>
#include "banner_char.h"
const int MasterEditorTWL::NumOf_BannerCharCodes_Worldwide = 439;
const u16 MasterEditorTWL::BannerCharCodes_Worldwide[439] =
{
0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f,
0x20ac, 0x201a, 0x201e, 0x2026, 0x02c6, 0x0152, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x02dc, 0x2122, 0x203a, 0x0153, 0x00a1,
0x00a2, 0x00a3, 0x00a8, 0x00a9, 0x00ae, 0x00b7, 0x00bf, 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, 0x00c8,
0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d8, 0x00d9,
0x00da, 0x00db, 0x00dc, 0x00dd, 0x00df, 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea,
0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, 0x00f8, 0x00f9, 0x00fa,
0x00fb, 0x00fc, 0x00fd, 0x3000, 0x3001, 0x3002, 0xff0c, 0xff0e, 0x30fb, 0x003a, 0x003b, 0xff1f, 0xff01, 0x30fc, 0x3041, 0x3042,
0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, 0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, 0x3050, 0x3051, 0x3052,
0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, 0x3060, 0x3061, 0x3062,
0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, 0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f, 0x3070, 0x3071, 0x3072,
0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078, 0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x307f, 0x3080, 0x3081, 0x3082,
0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088, 0x3089, 0x308a, 0x308b, 0x308c, 0x308d, 0x308e, 0x308f, 0x3090, 0x3091, 0x3092,
0x3093, 0x309b, 0x309c, 0x309d, 0x309e, 0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, 0x30a8, 0x30a9, 0x30aa, 0x30ab,
0x30ac, 0x30ad, 0x30ae, 0x30af, 0x30b0, 0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7, 0x30b8, 0x30b9, 0x30ba, 0x30bb,
0x30bc, 0x30bd, 0x30be, 0x30bf, 0x30c0, 0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7, 0x30c8, 0x30c9, 0x30ca, 0x30cb,
0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d0, 0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7, 0x30d8, 0x30d9, 0x30da, 0x30db,
0x30dc, 0x30dd, 0x30de, 0x30df, 0x30e0, 0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, 0x30e8, 0x30e9, 0x30ea, 0x30eb,
0x30ec, 0x30ed, 0x30ee, 0x30ef, 0x30f0, 0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6, 0x3001, 0x3002, 0xff0c, 0xff0e, 0x30fb,
0xff1a, 0xff1b, 0xff1f, 0xff01, 0x309b, 0x309c, 0x00b4, 0xff40, 0xff3e, 0xffe3, 0xff3f, 0x3005, 0x30fc, 0x2015, 0x2010, 0xff0f,
0xff3c, 0xff5e, 0xff5c, 0x2026, 0x2018, 0x2019, 0x201c, 0x201d, 0xff08, 0xff09, 0x3014, 0x3015, 0xff3b, 0xff3d, 0xff5b, 0xff5d,
0x3008, 0x3009, 0x300c, 0x300d, 0xff0b, 0xff0d, 0x00b1, 0x00d7, 0x00f7, 0xff1d, 0x221e, 0x2234, 0x00b0, 0x2032, 0x2033, 0xff06,
0x2606, 0x2605, 0x25cb, 0x25cf, 0x25ce, 0x25c7, 0x25c6, 0x25a1, 0x25a0, 0x25b3, 0x25b2, 0x25bd, 0x25bc, 0x203b, 0x3012, 0x2192,
0x2190, 0x2191, 0x2193, 0x266f, 0x266d, 0x266a, 0x000a,
};
// end of file

View File

@ -0,0 +1,40 @@
#pragma once
#define METWL_WHETHER_PLATFORM_CHECK // プラットフォームがTWL対応以外かどうかをチェックする
#define METWL_WHETHER_SIGN_DECRYPT // 署名を外してダイジェストをベリファイする
#define METWL_WHETHER_MRC // MRC機能を含めるか
#define METWL_LIGHT_CHECK // 提出条件を緩くするか
// 定数
#define METWL_ROMSIZE_MIN 256 // 最小のデバイス容量 256Mbit
#define METWL_ROMSIZE_MAX 4096 // 最大の.. 4Gbit
#define METWL_ROMSIZE_MIN_NAND 1
#define METWL_ROMSIZE_MAX_NAND 256
#define METWL_ALLSIZE_MAX_NAND (32*1024*1024) // システム上のNANDアプリの容量制限(単位Byte)
#define METWL_ALLSIZE_MAX_NAND_LIC (16*1024*1024) // 運用上の(契約上の)NANDアプリの容量制限(単位Byte)
#define METWL_MASK_REGION_JAPAN 0x00000001
#define METWL_MASK_REGION_AMERICA 0x00000002
#define METWL_MASK_REGION_EUROPE 0x00000004
#define METWL_MASK_REGION_AUSTRALIA 0x00000008
#define METWL_MASK_REGION_CHINA 0x00000010
#define METWL_MASK_REGION_KOREA 0x00000020
#define METWL_MASK_REGION_ALL 0xffffffff
#define METWL_NUMOF_SHARED2FILES 6
#define METWL_SEG3_CRC 0x0254
#define METWL_TAD_TMP_FILENAME "tmp.srl" // TAD読み込みの際に split_tad で一時的に作成するファイル名
#define METWL_SDK52_RELEASE ((5 << 24)|(2 << 16)|30000) // SDアクセス権の判定が必要なSDKバージョン (5.2 RELEASE)
#define METWL_SDK51_PR ((5 << 24)|(1 << 16)|10000) // クローンブート対応をしたSDKバージョン (5.1 PR)
// 特別にGUI表示/提出確認書に記述する文字列
#define METWL_STRING_UNNECESSARY_RATING_J ("レーティング表示不要(全年齢)")
#define METWL_STRING_UNNECESSARY_RATING_E ("Rating Not Required (All ages)")
#define METWL_STRING_UNDEFINED_RATING_J ("不可")
#define METWL_STRING_UNDEFINED_RATING_E ("Undefined")
#define METWL_STRING_UNDEFINED_REGION_J ("不明") // 起こり得ない
#define METWL_STRING_UNDEFINED_REGION_E ("Undefined")
#define METWL_STRING_CHINA_RATING_FREE_J ("全年齢(中国版対応)")
#define METWL_STRING_CHINA_RATING_FREE_E ("All ages (China version support)")
#define METWL_STRING_CHINA_REGION_J ("中国のみ")
#define METWL_STRING_CHINA_REGION_E ("China only")
#define METWL_STRING_KOREA_REGION_J ("韓国のみ")
#define METWL_STRING_KOREA_REGION_E ("Korea only")

View File

@ -0,0 +1,185 @@
// crc_whole.h の実装
#include "stdafx.h"
#include <apptype.h>
#include "common.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: getSeg3CRCInFp
Description: Segment3(0x3000-0x3fff)CRCを算出
Arguments: [in] srlファイルのファイルポインタ
[out] CRC格納先
Return: TRUE.
*---------------------------------------------------------------------------*/
BOOL getSeg3CRCInFp( FILE *fp, u16 *pCRC )
{
u16 crc;
u16 data[ 0x1000 / 2 ]; // 64Kバイト(512Kビット)
if( !fp )
{
return FALSE;
}
// CRCテーブル初期化製品技術部のコード
inittable(crc_table);
// 0x3000 から 0x3fff までの CRC をとる
fseek( fp, 0x3000, SEEK_SET );
fread( (void*)data, sizeof(data), 1, fp );
crc = newGetCRC( 0, data, sizeof(data) );
*pCRC = crc;
return TRUE;
}
/*---------------------------------------------------------------------------*
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,52 @@
#pragma once
// 署名用の鍵データの宣言
#include <twl/types.h>
#include <cstdio>
namespace MasterEditorTWL
{
/*---------------------------------------------------------------------------*
Name: getSeg3CRCInFp
Description: Segment3(0x3000-0x3fff)CRCを算出
Arguments: [in] srlファイルのファイルポインタ
[out] CRC格納先
Return: TRUE.
*---------------------------------------------------------------------------*/
BOOL getSeg3CRCInFp( FILE *fp, u16 *pCRC );
/*---------------------------------------------------------------------------*
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

View File

@ -0,0 +1,678 @@
// deliverable.h のクラス実装
#include "stdafx.h"
#include <apptype.h>
#include "common.h"
#include "srl.h"
#include "deliverable.h"
#include "utility.h"
#include <cstring>
#include <cstdio>
#define METWL_SHEET_YES ("Yes")
#define METWL_SHEET_NO ("No")
using namespace MasterEditorTWL;
//
// RCDeliverable クラス
//
//
// 書類出力
//
// @arg [out] 出力ファイル名
// @arg [in] ROMバイナリ(SRL)固有情報
// @arg [in] ファイル全体のCRC
// @arg [in] SRLのファイル名(書類に記述するために使用)
// @arg [in] 英語フラグ
//
ECDeliverableResult RCDeliverable::writeSpreadsheet(
System::String ^hFilename, System::String ^hSheetTemplateFilename,
MasterEditorTWL::RCSrl ^hSrl, System::UInt16 CRC, System::String ^hSrlFilename, System::Boolean english )
{
// テンプレートを読み込む
System::Xml::XmlDocument ^doc = gcnew System::Xml::XmlDocument();
try
{
doc->Load( hSheetTemplateFilename );
}
catch ( System::Exception ^ex )
{
(void)ex;
return ECDeliverableResult::ERROR_FILE_OPEN;
}
System::Xml::XmlElement ^root = doc->DocumentElement;
// ソフトタイトルetc.は1文字ずつ入れる
char title_name[ TITLE_NAME_MAX ];
char game_code[ GAME_CODE_MAX ];
char maker_code[ MAKER_CODE_MAX ];
MasterEditorTWL::setStringToChars( title_name, hSrl->hTitleName, TITLE_NAME_MAX, 0 );
MasterEditorTWL::setStringToChars( game_code, hSrl->hGameCode, GAME_CODE_MAX, 0 );
MasterEditorTWL::setStringToChars( maker_code, hSrl->hMakerCode, MAKER_CODE_MAX, 0 );
//System::String ^str = gcnew System::String( hSrl->hTitleName[0], 1 );
//System::Diagnostics::Debug::WriteLine( str );
//System::Diagnostics::Debug::WriteLine( "hex 0x: " + title_name[0].ToString("X") );
// アプリ種別
System::String ^apptype = gcnew System::String("");
if( hSrl->IsAppLauncher )
{
apptype = gcnew System::String( "Launcher" );
}
else if( hSrl->IsAppSecure )
{
apptype = gcnew System::String( "Secure" );
}
else if( hSrl->IsAppSystem )
{
apptype = gcnew System::String( "System" );
}
else if( hSrl->IsAppUser )
{
apptype = gcnew System::String( "User" );
}
System::String ^media = gcnew System::String("");
if( hSrl->IsMediaNand )
{
media = gcnew System::String( "NAND" );
}
else
{
media = gcnew System::String( "Game Card" );
}
System::String ^appother = gcnew System::String("");
if( !hSrl->IsLaunch )
{
appother += "ランチャー非表示.";
}
if( hSrl->IsDataOnly )
{
apptype += "データ専用.";
}
// アクセスコントロール その他
System::String ^access = gcnew System::String("");
if( hSrl->IsCommonClientKey )
{
access += "CommonClientKey. ";
}
if( hSrl->IsAesSlotBForES )
{
access += "AES-SlotB(ES). ";
}
if( hSrl->IsAesSlotCForNAM )
{
access += "AES-SlotC(NAM). ";
}
if( hSrl->IsAesSlotBForJpegEnc )
{
access += "Jpeg Signature for the Launcher.";
}
if( hSrl->IsAesSlotBForJpegEncUser )
{
access += "Jpeg Signature.";
}
if( hSrl->IsAesSlotAForSSL )
{
access += "AES-SlotA(SSL Client Cert). ";
}
if( hSrl->IsCommonClientKeyForDebugger )
{
access += "CommonClientKey(Debugger System Menu). ";
}
// 使用ライセンス
System::String ^lib = gcnew System::String("");
if( hSrl->hLicenseList != nullptr )
{
for each( RCLicense ^lic in hSrl->hLicenseList )
{
lib += "[" + lic->Publisher + " / " + lic->Name + "]. ";
}
}
// 備考欄に特殊な設定を追記
System::String ^capEx = "";
if( hSrl->HasDSDLPlaySign )
{
if( english )
capEx += " [DS clone-boot is supported.]";
else
capEx += " [DSクローンブート対応です.]";
}
if( hSrl->IsSCFGAccess )
{
if( english )
capEx += " [The SCFC register can be accessed.]";
else
capEx += " [SCFGレジスタアクセス可能になっています.]";
}
if( hSrl->IsSD )
{
if( english )
capEx += " [The SD Card can be accessed.]";
else
capEx += " [SDカードへアクセス可能になっています.]";
}
if( hSrl->IsNormalJump )
{
if( english )
capEx += " [The normal jump is comfigured.]";
else
capEx += " [ノーマルジャンプが設定されています.]";
}
// 書類テンプレートの各タグを入力情報に置き換え
System::Xml::XmlNodeList ^list;
list = root->GetElementsByTagName( "Data" );
System::Int32 i;
for( i=0; i < list->Count; i++ )
{
System::Xml::XmlNode ^node = list->Item(i);
if( (node->FirstChild != nullptr) && (node->FirstChild->Value != nullptr) )
{
// プログラムのバージョン
if( node->FirstChild->Value->Equals( "TagMasterEditorVersion" ) )
{
node->FirstChild->Value = this->hMasterEditorVersion;
}
// 提出情報
if( node->FirstChild->Value->Equals( "TagProductName" ) )
{
node->FirstChild->Value = this->hProductName;
}
if( node->FirstChild->Value->Equals( "TagProductCode1" ) )
{
node->FirstChild->Value = this->hProductCode1;
}
if( node->FirstChild->Value->Equals( "TagProductCode2" ) )
{
node->FirstChild->Value = this->hProductCode2;
}
if( node->FirstChild->Value->Equals( "TagReleaseForeign" ) )
{
if( this->IsReleaseForeign )
node->FirstChild->Value = gcnew System::String(METWL_SHEET_YES);
else
node->FirstChild->Value = gcnew System::String(METWL_SHEET_NO);
}
if( node->FirstChild->Value->Equals( "TagProductNameForeign" ) )
{
node->FirstChild->Value = this->hProductNameForeign;
}
if( node->FirstChild->Value->Equals( "TagProductCode1Foreign" ) )
{
node->FirstChild->Value = this->hProductCode1Foreign;
}
if( node->FirstChild->Value->Equals( "TagProductCode2Foreign" ) )
{
node->FirstChild->Value = this->hProductCode2Foreign;
}
if( node->FirstChild->Value->Equals( "TagSubmitYear" ) )
{
node->FirstChild->Value = this->SubmitYear.ToString();
}
if( node->FirstChild->Value->Equals( "TagSubmitMonth" ) )
{
node->FirstChild->Value = this->SubmitMonth.ToString();
}
if( node->FirstChild->Value->Equals( "TagSubmitDay" ) )
{
node->FirstChild->Value = this->SubmitDay.ToString();
}
if( node->FirstChild->Value->Equals( "TagReleaseYear" ) )
{
node->FirstChild->Value = this->ReleaseYear.ToString();
}
if( node->FirstChild->Value->Equals( "TagReleaseMonth" ) )
{
node->FirstChild->Value = this->ReleaseMonth.ToString();
}
if( node->FirstChild->Value->Equals( "TagReleaseDay" ) )
{
node->FirstChild->Value = this->ReleaseDay.ToString();
}
if( node->FirstChild->Value->Equals( "TagSubmitWay" ) )
{
node->FirstChild->Value = this->hSubmitWay;
}
if( node->FirstChild->Value->Equals( "TagUsage" ) )
{
node->FirstChild->Value = this->hUsage;
}
if( node->FirstChild->Value->Equals( "TagUsageDetail" ) )
{
node->FirstChild->Value = this->hUsageDetail;
}
if( node->FirstChild->Value->Equals( "TagRomVersion" ) )
{
node->FirstChild->Value = hSrl->RomVersion.ToString("X2");
if( hSrl->RomVersion == 0xE0 )
{
if( english )
node->FirstChild->Value += "(Preliminary ver.)";
else
node->FirstChild->Value += "(事前版)";
}
}
if( node->FirstChild->Value->Equals( "TagSubmitVersion" ) )
{
node->FirstChild->Value = this->SubmitVersion.ToString("X");
}
if( node->FirstChild->Value->Equals( "TagSrlFilename" ) )
{
node->FirstChild->Value = hSrlFilename;
}
if( node->FirstChild->Value->Equals( "TagCRC" ) )
{
node->FirstChild->Value = "0x" + CRC.ToString("X4");
}
// ROM情報
if( node->FirstChild->Value->Equals( "TagLatency" ) )
{
node->FirstChild->Value = hSrl->hLatency;
}
if( node->FirstChild->Value->Equals( "TagPlatform" ) )
{
node->FirstChild->Value = hSrl->hPlatform;
}
if( node->FirstChild->Value->Equals( "TagRomSize" ) )
{
node->FirstChild->Value = hSrl->hRomSize;
}
if( node->FirstChild->Value->Equals( "TagBackupMemory" ) )
{
node->FirstChild->Value = this->hBackupMemory;
}
if( node->FirstChild->Value->Equals( "TagSDK" ) )
{
node->FirstChild->Value = this->hSDK;
}
if( node->FirstChild->Value->Equals( "TagLibrary" ) )
{
node->FirstChild->Value = lib;
}
// ROM情報 (TWL拡張情報)
if( node->FirstChild->Value->Equals( "TagTitleIDLo" ) )
{
node->FirstChild->Value = hSrl->hTitleIDLo;
}
if( node->FirstChild->Value->Equals( "TagTitleIDHi" ) )
{
node->FirstChild->Value = "0x" + hSrl->TitleIDHi.ToString("X8");
}
if( node->FirstChild->Value->Equals( "TagAppType" ) )
{
node->FirstChild->Value = apptype;
}
if( node->FirstChild->Value->Equals( "TagMedia" ) )
{
node->FirstChild->Value = media;
}
if( node->FirstChild->Value->Equals( "TagAppTypeOther" ) )
{
node->FirstChild->Value = appother;
}
if( node->FirstChild->Value->Equals( "TagIsNormalJump" ) )
{
if( hSrl->IsNormalJump )
node->FirstChild->Value = gcnew System::String(METWL_SHEET_YES);
else
node->FirstChild->Value = gcnew System::String(METWL_SHEET_NO);
}
if( node->FirstChild->Value->Equals( "TagIsTmpJump" ) )
{
if( hSrl->IsTmpJump )
node->FirstChild->Value = gcnew System::String(METWL_SHEET_YES);
else
node->FirstChild->Value = gcnew System::String(METWL_SHEET_NO);
}
if( node->FirstChild->Value->Equals( "TagNormalRomOffset" ) )
{
node->FirstChild->Value = "0x" + hSrl->NormalRomOffset.ToString("X8");
}
if( node->FirstChild->Value->Equals( "TagKeyTableRomOffset" ) )
{
node->FirstChild->Value = "0x" + hSrl->KeyTableRomOffset.ToString("X8");
}
if( node->FirstChild->Value->Equals( "TagPublicSize" ) )
{
node->FirstChild->Value = MasterEditorTWL::transSizeToString( hSrl->PublicSize );
}
if( node->FirstChild->Value->Equals( "TagPrivateSize" ) )
{
node->FirstChild->Value = MasterEditorTWL::transSizeToString( hSrl->PrivateSize );
}
if( node->FirstChild->Value->Equals( "TagPrivateSaveDataPurpose" ) )
{
if( this->hPrivateSaveDataPurpose != nullptr )
{
node->FirstChild->Value = System::String::Copy( this->hPrivateSaveDataPurpose );
}
else
{
node->FirstChild->Value = "";
}
}
if( node->FirstChild->Value->Equals( "TagIsCodec" ) )
{
if( hSrl->IsCodecTWL )
node->FirstChild->Value = gcnew System::String("TWL");
else
node->FirstChild->Value = gcnew System::String("DS");
}
if( node->FirstChild->Value->Equals( "TagIsEULA" ) )
{
if( hSrl->IsEULA )
node->FirstChild->Value = gcnew System::String(METWL_SHEET_YES);
else
node->FirstChild->Value = gcnew System::String(METWL_SHEET_NO);
}
if( node->FirstChild->Value->Equals( "TagIsSubBanner" ) )
{
if( hSrl->IsSubBanner )
node->FirstChild->Value = gcnew System::String(METWL_SHEET_YES);
else
node->FirstChild->Value = gcnew System::String(METWL_SHEET_NO);
}
if( node->FirstChild->Value->Equals( "TagIsWiFiIcon" ) )
{
if( hSrl->IsWiFiIcon )
node->FirstChild->Value = gcnew System::String(METWL_SHEET_YES);
else
node->FirstChild->Value = gcnew System::String(METWL_SHEET_NO);
}
if( node->FirstChild->Value->Equals( "TagIsWirelessIcon" ) )
{
if( hSrl->IsWirelessIcon )
node->FirstChild->Value = gcnew System::String(METWL_SHEET_YES);
else
node->FirstChild->Value = gcnew System::String(METWL_SHEET_NO);
}
if( node->FirstChild->Value->Equals( "TagIsSD" ) )
{
if( hSrl->IsSD )
node->FirstChild->Value = gcnew System::String(METWL_SHEET_YES);
else
node->FirstChild->Value = gcnew System::String(METWL_SHEET_NO);
}
if( node->FirstChild->Value->Equals( "TagIsNAND" ) )
{
if( hSrl->IsNAND )
node->FirstChild->Value = gcnew System::String(METWL_SHEET_YES);
else
node->FirstChild->Value = gcnew System::String(METWL_SHEET_NO);
}
if( node->FirstChild->Value->Equals( "TagIsShared2" ) )
{
if( hSrl->IsShared2 )
node->FirstChild->Value = gcnew System::String(METWL_SHEET_YES);
else
node->FirstChild->Value = gcnew System::String(METWL_SHEET_NO);
}
if( node->FirstChild->Value->Equals( "TagIsGameCardOn" ) )
{
if( hSrl->IsGameCardNitro )
node->FirstChild->Value = gcnew System::String("ON(NTR)");
else if( hSrl->IsGameCardOn )
node->FirstChild->Value = gcnew System::String("ON(normal)");
else
node->FirstChild->Value = gcnew System::String("OFF");;
}
if( node->FirstChild->Value->Equals( "TagAccessOther" ) )
{
node->FirstChild->Value = access;
}
if( node->FirstChild->Value->Equals( "TagShared2Size0" ) )
{
node->FirstChild->Value = MasterEditorTWL::transSizeToString( hSrl->hShared2SizeArray[0] );
}
if( node->FirstChild->Value->Equals( "TagShared2Size1" ) )
{
node->FirstChild->Value = MasterEditorTWL::transSizeToString( hSrl->hShared2SizeArray[1] );
}
if( node->FirstChild->Value->Equals( "TagShared2Size2" ) )
{
node->FirstChild->Value = MasterEditorTWL::transSizeToString( hSrl->hShared2SizeArray[2] );
}
if( node->FirstChild->Value->Equals( "TagShared2Size3" ) )
{
node->FirstChild->Value = MasterEditorTWL::transSizeToString( hSrl->hShared2SizeArray[3] );
}
if( node->FirstChild->Value->Equals( "TagShared2Size4" ) )
{
node->FirstChild->Value = MasterEditorTWL::transSizeToString( hSrl->hShared2SizeArray[4] );
}
if( node->FirstChild->Value->Equals( "TagShared2Size5" ) )
{
node->FirstChild->Value = MasterEditorTWL::transSizeToString( hSrl->hShared2SizeArray[5] );
}
if( node->FirstChild->Value->Equals( "TagPhotoAccess" ) )
{
if( hSrl->IsPhotoRead && hSrl->IsPhotoWrite )
node->FirstChild->Value = gcnew System::String("Read/Write");
else if( hSrl->IsPhotoRead )
node->FirstChild->Value = gcnew System::String("Read Only");
else if( hSrl->IsPhotoWrite )
node->FirstChild->Value = gcnew System::String("Write Only");
else
node->FirstChild->Value = gcnew System::String("None");
}
if( node->FirstChild->Value->Equals( "TagSDAccessRight" ) )
{
if( hSrl->IsSD && !hSrl->IsOldSDK52Release ) // SDアクセスしない場合には空白
{
if( hSrl->IsSDRead && hSrl->IsSDWrite )
node->FirstChild->Value = gcnew System::String("Read/Write");
else if( hSrl->IsSDRead )
node->FirstChild->Value = gcnew System::String("Read");
else if( hSrl->IsSDWrite )
node->FirstChild->Value = gcnew System::String("Write");
else
node->FirstChild->Value = gcnew System::String("None");
}
else // アクセス権が定義されるまでのバージョンでは空白にしておく
{
node->FirstChild->Value = gcnew System::String("");
}
}
// 会社情報
if( node->FirstChild->Value->Equals( "TagCompany1" ) )
{
node->FirstChild->Value = this->hCompany1;
}
if( node->FirstChild->Value->Equals( "TagPerson1" ) )
{
node->FirstChild->Value = this->hPerson1;
}
if( node->FirstChild->Value->Equals( "TagFurigana1" ) )
{
node->FirstChild->Value = this->hFurigana1;
}
if( node->FirstChild->Value->Equals( "TagTel1" ) )
{
node->FirstChild->Value = this->hTel1;
}
if( node->FirstChild->Value->Equals( "TagFax1" ) )
{
node->FirstChild->Value = this->hFax1;
}
if( node->FirstChild->Value->Equals( "TagMail1" ) )
{
node->FirstChild->Value = this->hMail1;
}
if( node->FirstChild->Value->Equals( "TagNTSC1" ) )
{
node->FirstChild->Value = this->hNTSC1;
}
if( node->FirstChild->Value->Equals( "TagCompany2" ) )
{
node->FirstChild->Value = this->hCompany2;
}
if( node->FirstChild->Value->Equals( "TagPerson2" ) )
{
node->FirstChild->Value = this->hPerson2;
}
if( node->FirstChild->Value->Equals( "TagFurigana2" ) )
{
node->FirstChild->Value = this->hFurigana2;
}
if( node->FirstChild->Value->Equals( "TagTel2" ) )
{
node->FirstChild->Value = this->hTel2;
}
if( node->FirstChild->Value->Equals( "TagFax2" ) )
{
node->FirstChild->Value = this->hFax2;
}
if( node->FirstChild->Value->Equals( "TagMail2" ) )
{
node->FirstChild->Value = this->hMail2;
}
if( node->FirstChild->Value->Equals( "TagNTSC2" ) )
{
node->FirstChild->Value = this->hNTSC2;
}
// 備考
if( node->FirstChild->Value->Equals( "TagCaption" ) )
{
node->FirstChild->Value = this->hCaption + capEx;
}
// リージョン
if( node->FirstChild->Value->Equals( "TagRegion" ) )
{
node->FirstChild->Value = this->hRegion;
}
// ペアレンタルコントロール
if( node->FirstChild->Value->Equals( "TagRatingCERO" ) )
{
node->FirstChild->Value = this->hCERO;
}
if( node->FirstChild->Value->Equals( "TagRatingESRB" ) )
{
node->FirstChild->Value = this->hESRB;
}
if( node->FirstChild->Value->Equals( "TagRatingUSK" ) )
{
node->FirstChild->Value = this->hUSK;
}
if( node->FirstChild->Value->Equals( "TagRatingPEGI" ) )
{
node->FirstChild->Value = this->hPEGI;
}
if( node->FirstChild->Value->Equals( "TagRatingPEGI_PRT" ) )
{
node->FirstChild->Value = this->hPEGI_PRT;
}
if( node->FirstChild->Value->Equals( "TagRatingPEGI_BBFC" ) )
{
node->FirstChild->Value = this->hPEGI_BBFC;
}
if( node->FirstChild->Value->Equals( "TagRatingOFLC" ) )
{
node->FirstChild->Value = this->hOFLC;
}
if( node->FirstChild->Value->Equals( "TagRatingGRB" ) )
{
node->FirstChild->Value = this->hGRB;
}
if( node->FirstChild->Value->Equals( "TagIsUnnecessaryRating" ) )
{
if( hSrl->IsUnnecessaryRating )
{
node->FirstChild->Value = gcnew System::String(METWL_SHEET_YES);
}
else
{
node->FirstChild->Value = gcnew System::String(METWL_SHEET_NO);
}
}
// NAND使用サイズ
if( node->FirstChild->Value->Equals( "TagDLCategory" ) )
{
node->FirstChild->Value = this->hDLCategory;
}
if( node->FirstChild->Value->Equals( "TagUsedNandSizeKB" ) )
{
node->FirstChild->Value = MasterEditorTWL::transSizeToStringKB( hSrl->hNandUsedSize->NandUsedSize );
}
if( node->FirstChild->Value->Equals( "TagUsedNandSizeMB" ) )
{
//node->FirstChild->Value = MasterEditorTWL::transSizeToStringMB( hSrl->hNandUsedSize->NandUsedSize, 2 );
node->FirstChild->Value = MasterEditorTWL::transSizeToStringMB( hSrl->hNandUsedSize->NandUsedSize );
}
// SRLに登録されないROM仕様
if( node->FirstChild->Value->Equals( "TagIsUGC" ) )
{
if( this->IsUGC )
node->FirstChild->Value = gcnew System::String(METWL_SHEET_YES);
else
node->FirstChild->Value = gcnew System::String(METWL_SHEET_NO);
}
if( node->FirstChild->Value->Equals( "TagIsPhotoEx" ) )
{
if( this->IsPhotoEx )
node->FirstChild->Value = gcnew System::String(METWL_SHEET_YES);
else
node->FirstChild->Value = gcnew System::String(METWL_SHEET_NO);
}
// ROM内登録データを1バイトずつ表に書き込む
if( node->FirstChild->Value->Equals( "TagRomVersionHex" ) )
{
node->FirstChild->Value = hSrl->RomVersion.ToString("X2");
}
System::Int32 byte;
for( byte=0; byte < TITLE_NAME_MAX; byte++ )
{
if( node->FirstChild->Value->Equals( "TagTitleName" + byte.ToString() ) )
{
System::String ^bstr = hSrl->hTitleName[byte].ToString();
if( bstr == nullptr )
node->FirstChild->Value = gcnew System::String( "null" );
else if( bstr->Equals( "\0" ) )
node->FirstChild->Value = gcnew System::String( "\\0" );
else if( bstr->Equals( " " ) )
node->FirstChild->Value = gcnew System::String( "\\s" );
else
node->FirstChild->Value = gcnew System::String( bstr );
//node->FirstChild->Value = gcnew System::String( hSrl->hTitleName[byte].ToString() );
}
else if( node->FirstChild->Value->Equals( "TagTitleNameHex" + byte.ToString() ) )
{
node->FirstChild->Value = title_name[byte].ToString("X2");
}
}
if( node->FirstChild->Value->Equals( "TagGameCode" ) )
{
node->FirstChild->Value = hSrl->hGameCode;
}
if( node->FirstChild->Value->Equals( "TagMakerCode" ) )
{
node->FirstChild->Value = hSrl->hMakerCode;
}
} // if( (node->FirstChild != nullptr) && (node->FirstChild->Value != nullptr) )
} // for( i=0; i < list->Count; i++ )
try
{
doc->Save( hFilename );
}
catch ( System::Exception ^ex )
{
(void)ex;
return ECDeliverableResult::ERROR_FILE_WRITE;
}
return ECDeliverableResult::NOERROR;
} // ECDeliverableResult RCDeliverable::writeSpreadsheet(System::String ^hFilename, MasterEditorTWL::RCSrl ^hSrl)

View File

@ -0,0 +1,136 @@
#pragma once
// 書類クラスの宣言
#include <apptype.h>
#include <twl/types.h>
#include <twl/os/common/format_rom.h>
#include <apptype.h>
#include "common.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 ReleaseYear; // 発売予定日
property System::Int32 ReleaseMonth;
property System::Int32 ReleaseDay;
property System::Int32 SubmitYear; // 提出日
property System::Int32 SubmitMonth;
property System::Int32 SubmitDay;
property System::String ^hSubmitWay; // 提出方法
property System::String ^hUsage; // 用途
property System::String ^hUsageDetail;
property System::Int32 SubmitVersion; // 提出バージョン
property System::String ^hSDK; // SDKバージョン
property System::Boolean IsReleaseForeign; // 海外版の予定
property System::String ^hProductNameForeign;
property System::String ^hProductCode1Foreign;
property System::String ^hProductCode2Foreign;
// 会社情報
// 担当者(1人目)
property System::String ^hCompany1; // 会社名
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::String ^hCompany2;
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::String ^hCaption;
// ROMヘッダ不記載のROMバイナリ(SRL)固有情報
property System::String ^hBackupMemory; // バックアップメモリの種別
// DSi Wareの販売カテゴリ
property System::String ^hDLCategory;
// SRL情報の一部を文字列で持っておく
property System::String ^hRegion;
property System::String ^hCERO;
property System::String ^hESRB;
property System::String ^hUSK;
property System::String ^hPEGI;
property System::String ^hPEGI_PRT;
property System::String ^hPEGI_BBFC;
property System::String ^hOFLC;
property System::String ^hGRB;
property System::String ^hAppTypeOther; // 特記事項
// SRLには登録されないROM仕様
property System::Boolean IsUGC;
property System::Boolean IsPhotoEx;
// Privateセーブデータの用途
property System::String ^hPrivateSaveDataPurpose;
// プログラムのバージョン
property System::String ^hMasterEditorVersion;
// constructor and destructor
public:
// method
public:
//
// 提出確認書出力
//
// @arg [out] 出力ファイル名
// @arg [in] 提出確認書のテンプレート
// @arg [in] ROMバイナリ(SRL)固有情報
// @arg [in] ファイル全体のCRC
// @arg [in] SRLのファイル名(書類に記述するために使用)
// @arg [in] 英語フラグ
//
ECDeliverableResult writeSpreadsheet(
System::String ^hFilename, System::String ^hSheetTemplateFilename,
RCSrl ^hSrl, System::UInt16 CRC, System::String ^hSrlFilename, System::Boolean english );
}; // end of ref class RCDeliverable
} // end of namespace MasterEditorTWL

View File

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

View File

@ -0,0 +1,29 @@
#pragma once
// 署名用の鍵データの宣言
#include <twl/types.h>
#include <apptype.h>
namespace MasterEditorTWL
{
// 開発機用ROMヘッダ署名鍵
#ifdef METWL_VER_APPTYPE_USER
extern const u8 g_devPubKey_DER[ 0xa2 ];
extern const u8 g_devPrivKey_DER[ 0x263 ];
#endif
#ifdef METWL_VER_APPTYPE_SYSTEM
extern const u8 g_devPubKey_DER_system[ 0xa2 ];
extern const u8 g_devPrivKey_DER_system[ 0x263 ];
#endif
#ifdef METWL_VER_APPTYPE_SECURE
extern const u8 g_devPubKey_DER_secure[ 0xa2 ];
extern const u8 g_devPrivKey_DER_secure[ 0x263 ];
#endif
#ifdef METWL_VER_APPTYPE_LAUNCHER
extern const u8 g_devPubKey_DER_launcher[ 0xa2 ];
extern const u8 g_devPrivKey_DER_launcher[ 0x263 ];
#endif
} // end of namespace MasterEditorTWL

View File

@ -0,0 +1,106 @@
#pragma once
// 量が多いのでひとまず入力ありの項目のみ
#define LANG_PRODUCT_NAME_J ("製品名")
#define LANG_PRODUCT_LIMIT_J ("(30文字以内)")
#define LANG_PRODUCT_CODE_J ("製品コード")
#define LANG_RELEASE_DATE_J ("発売予定日")
#define LANG_SUBMIT_DATE_J ("書類提出日")
#define LANG_SUBMIT_WAY_J ("提出方法")
#define LANG_SUBMIT_POST_J ("郵送")
#define LANG_SUBMIT_HAND_J ("手渡し")
#define LANG_USAGE_J ("用途")
#define LANG_USAGE_SALE_J ("一般販売用")
#define LANG_USAGE_SAMPLE_J ("試遊台用")
#define LANG_USAGE_DST_J ("データ配信用")
#define LANG_USAGE_OTHER_J ("その他")
#define LANG_BACKUP_J ("バックアップメモリ")
#define LANG_SUBMIT_VER_J ("提出バージョン")
#define LANG_SUBMIT_VER_CAP_J ("* リマスターバージョンが上がると再び0からカウント")
#define LANG_F_J ("海外版")
#define LANG_PRODUCT_NAME_F_J ("製品名")
#define LANG_PRODUCT_CODE_F_J ("製品コード")
#define LANG_RELEASE_F_J ("海外版を発売する(予定)")
#define LANG_MULTI_F_J ("(複数ある場合のみ)")
#define LANG_CAPTION_J ("備考欄 - その他連絡事項があればご記入ください")
#define LANG_PERSON_1_J ("担当者1")
#define LANG_PERSON_2_J ("担当者2")
#define LANG_INPUT_PERSON_2_J ("担当者2を入力する")
#define LANG_COMPANY_J ("貴社名")
#define LANG_DEPART_J ("部署名")
#define LANG_PERSON_J ("ご氏名")
#define LANG_FURIGANA_J ("ふりがな")
#define LANG_TEL_J ("Tel")
#define LANG_FAX_J ("Fax")
#define LANG_MAIL_J ("e-mail")
#define LANG_NTSC_1_J ("NTSC")
#define LANG_NTSC_2_J ("User ID")
#define LANG_BOX_EULA_J ("EULA(利用規約)")
#define LANG_EULA_J ("EULAへの同意を必要とする")
#define LANG_EULA_VER_J ("EULA同意バージョン")
#define LANG_ICON_J ("メニュー上でのアイコン表示")
#define LANG_WIRELESS_ICON_J ("DSワイヤレス通信アイコン表示")
#define LANG_WIFI_ICON_J ("Wi-Fi通信アイコン表示")
#define LANG_NO_ICON_J ("アイコンを表示しない")
#define LANG_REGION_PCTL_J ("リージョンとリージョン情報")
#define LANG_REGION_J ("リージョン")
#define LANG_PCTL_RATING_J ("レーティング年齢")
#define LANG_PCTL_ENABLE_J ("制限を有効")
#define LANG_PCTL_ALWAYS_J ("審査中")
#define LANG_OTHER_SPEC_J ("その他ROM仕様")
#define LANG_UGC_J ("UGC(User Generated Contents)対応")
#define LANG_PHOTO_EX_J ("写真交換対応")
#define LANG_PRODUCT_NAME_E ("Product Name")
#define LANG_PRODUCT_LIMIT_E ("(Shorter than 30 chars)")
#define LANG_PRODUCT_CODE_E ("Product Code")
#define LANG_RELEASE_DATE_E ("Launch Date")
#define LANG_SUBMIT_DATE_E ("Submission Date")
#define LANG_SUBMIT_WAY_E ("How to submit")
#define LANG_SUBMIT_POST_E ("Mail")
#define LANG_SUBMIT_HAND_E ("Handover")
#define LANG_USAGE_E ("Purpose")
#define LANG_USAGE_SALE_E ("For Sale")
#define LANG_USAGE_SAMPLE_E ("For Trial")
#define LANG_USAGE_DST_E ("For Network Distribution")
#define LANG_USAGE_OTHER_E ("Other")
#define LANG_SUBMIT_VER_E ("Submission Ver.")
#define LANG_BACKUP_E ("Backup Memory")
#define LANG_SUBMIT_VER_CAP_E ("* return to 0 when release ver. is updated.")
#define LANG_F_E ("Foreign Ver.")
#define LANG_PRODUCT_NAME_F_E ("Product Name")
#define LANG_PRODUCT_CODE_F_E ("Product Code")
#define LANG_RELEASE_F_E ("Foreign Ver. is scheduled to go on sale")
#define LANG_MULTI_F_E ("(Only Release Multi Ver.)")
#define LANG_CAPTION_E ("Remarks Item - Please write further information.")
#define LANG_PERSON_1_E ("Account1")
#define LANG_PERSON_2_E ("Account2")
#define LANG_INPUT_PERSON_2_E ("Input Account2")
#define LANG_COMPANY_E ("Company")
#define LANG_DEPART_E ("Dept.")
#define LANG_PERSON_E ("Contact")
#define LANG_FURIGANA_E ("")
#define LANG_TEL_E ("Tel")
#define LANG_FAX_E ("Fax")
#define LANG_MAIL_E ("e-mail")
#define LANG_NTSC_1_E ("")
#define LANG_NTSC_2_E ("")
#define LANG_BOX_EULA_E ("EULA")
#define LANG_EULA_E ("Require EULA Agreement")
#define LANG_EULA_VER_E ("EULA agreement ver.")
#define LANG_ICON_E ("Icons on the Menu")
#define LANG_WIRELESS_ICON_E ("Display an Icon of DS Wireless")
#define LANG_WIFI_ICON_E ("Display an Icon of Wi-Fi connection")
#define LANG_NO_ICON_E ("Display No Icon")
#define LANG_REGION_PCTL_E ("Region and Rating Information")
#define LANG_REGION_E ("Region")
#define LANG_PCTL_RATING_E ("Rating Information")
#define LANG_PCTL_ENABLE_E ("Enable Control")
#define LANG_PCTL_ALWAYS_E ("Rating Pending")
#define LANG_OTHER_SPEC_E ("Other ROM Spec.")
#define LANG_UGC_E ("UGC(User Generated Contents) Support")
#define LANG_PHOTO_EX_E ("Photo Exchange Support")

View File

@ -0,0 +1,63 @@
#include "stdafx.h"
// RCMessageBankクラスの実装
#include <cstring>
#include <cstdio>
#include "message_bank.h"
#include "utility.h"
using namespace MasterEditorTWL;
// ****************************************************************
// RCMessageBank クラス
// ****************************************************************
// -------------------------------------------------------------------
// constructor
// -------------------------------------------------------------------
RCMessageBank::RCMessageBank( System::String ^fileJ, System::String ^fileE )
{
this->loadMessage( fileJ, "J" );
this->loadMessage( fileE, "E" );
}
// -------------------------------------------------------------------
// 外部ファイルからメッセージを読み出す
// -------------------------------------------------------------------
void RCMessageBank::loadMessage( System::String ^filepath, System::String ^lang )
{
System::Xml::XmlDocument ^doc = gcnew System::Xml::XmlDocument();
doc->Load( filepath );
System::Xml::XmlElement ^root = doc->DocumentElement;
// 言語によってXMLルートの格納先を変更
if( lang->ToUpper() == "J" )
{
this->rootJ = root;
}
else
{
this->rootE = root;
}
}
// -------------------------------------------------------------------
// 特定のメッセージを返す
// -------------------------------------------------------------------
System::String^ RCMessageBank::getMessage( System::String ^tag, System::String ^lang )
{
System::Xml::XmlElement ^root;
if( lang->ToUpper() == "J" )
{
root = this->rootJ;
}
else
{
root = this->rootE;
}
// どのファイルも同じタグがつけられていることが前提
System::String ^msg = MasterEditorTWL::getXPathText( root, "/message/" + tag );
return msg;
}

View File

@ -0,0 +1,35 @@
#pragma once
// 多言語メッセージの管理クラス
namespace MasterEditorTWL
{
// -------------------------------------------------------------------
// Type : ref class
// Name : RCMessageBank
//
// Description : メッセージを内部に持ち要求があれば返す
//
// Role : 多言語メッセージの管理
// -------------------------------------------------------------------
ref class RCMessageBank
{
private:
System::Xml::XmlElement ^rootJ;
System::Xml::XmlElement ^rootE;
private:
RCMessageBank(){};
public:
// Caution: throwing Exception
RCMessageBank( System::String ^fileJ, System::String ^fileE );
private:
// 外部ファイルからメッセージを読み出す
// Caution: throwing Exception
void loadMessage( System::String ^filepath, System::String ^lang );
public:
// 特定のメッセージを返す
System::String^ getMessage( System::String ^tag, System::String ^lang );
}; //RCMessageBank
} //namespace MasterEditorTWL

View File

@ -0,0 +1,149 @@
#pragma once
// ROMデータ(SRL)クラスの関連クラスの宣言と定義
#include <apptype.h>
#include <twl/types.h>
namespace MasterEditorTWL
{
// -------------------------------------------------------------------
// Type : ref class
// Name : RCMiddlewareName
//
// Description : 1つのミドルウェアの名前情報
//
// Role : バイナリに埋め込まれているミドルウェア(ライセンス情報)から
// その一般名称を返す
// -------------------------------------------------------------------
ref class RCMiddlewareName
{
private:
System::String ^publisher; // バイナリに埋め込まれているはずの提供元
System::String ^code; // バイナリに埋め込まれているはずの識別コード
System::String ^noteJ; // 一般名称
System::String ^noteE;
private:
RCMiddlewareName(){} // 封じる
public:
RCMiddlewareName( System::String ^pub, System::String ^c, System::String ^nJ, System::String ^nE )
{
this->publisher = pub;
this->code = c;
this->noteJ = nJ;
this->noteE = nE;
}
public:
// 提供元と識別コードが一致する場合に一般名称を返す
// 一致しない場合には nullptr を返す
System::String^ check(System::String ^pub, System::String ^code, System::Boolean isJapanese)
{
if( pub->Equals(this->publisher) && code->StartsWith(this->code) )
{
if( isJapanese )
{
return System::String::Copy(this->noteJ);
}
else
{
return System::String::Copy(this->noteE);
}
}
return nullptr;
}
}; //ref class RCMiddlewareName
// -------------------------------------------------------------------
// Type : ref class
// Name : RCMiddlewareName
//
// Description : ミドルウェアの名前情報のリスト
//
// Role : 設定ファイル中のミドルウェア名称リストから
// 各ミドルウェアの名称を取得し
// 名称を検索する
// -------------------------------------------------------------------
ref class RCMiddlewareNameList
{
private:
System::Collections::Generic::List<RCMiddlewareName^> ^list;
private:
RCMiddlewareNameList(){}
public:
RCMiddlewareNameList( System::String^ filepath )
{
this->makelist(filepath);
}
private:
// ファイルから各ミドルウェアの名称を取得しリストを作成する
void makelist( System::String^ filepath )
{
this->list = gcnew System::Collections::Generic::List<RCMiddlewareName^>;
this->list->Clear();
// xmlファイルの読み込み
System::Xml::XmlDocument ^doc = gcnew System::Xml::XmlDocument();
try
{
doc->Load( filepath );
}
catch( System::Exception ^s )
{
(void)s;
return;
}
System::Xml::XmlElement ^root = doc->DocumentElement;
// ミドルウェアの名称情報のリストをファイルから取得してリストに登録する
System::Xml::XmlNodeList ^nodelist = root->SelectNodes( "/middleware-name-list/middleware" ); // 同じタグを持つ要素をすべて取得
System::Collections::IEnumerator^ iter = nodelist->GetEnumerator();
while( iter->MoveNext() )
{
System::Xml::XmlNode ^node = safe_cast<System::Xml::XmlNode^>(iter->Current);
System::Xml::XmlNode ^n_pub = node->SelectSingleNode( "publisher" ); // 相対パス
System::Xml::XmlNode ^n_c = node->SelectSingleNode( "code" );
System::Xml::XmlNode ^n_nJ = node->SelectSingleNode( "note-j" );
System::Xml::XmlNode ^n_nE = node->SelectSingleNode( "note-e" );
// XMLードからデータを抜き出してリストに順次登録していく
System::String ^pub = ""; // 比較に使うのでnullptrを許さない
if( n_pub && n_pub->FirstChild && n_pub->FirstChild->Value )
{
pub = n_pub->FirstChild->Value;
}
System::String ^c = "";
if( n_c && n_c->FirstChild && n_c->FirstChild->Value )
{
c = n_c->FirstChild->Value;
}
System::String ^nJ = nullptr; // 比較に使用しないのでnullptr(登録されていないことを表す)
if( n_nJ && n_nJ->FirstChild && n_nJ->FirstChild->Value )
{
nJ = n_nJ->FirstChild->Value;
}
System::String ^nE = nullptr;
if( n_nE && n_nE->FirstChild && n_nE->FirstChild->Value )
{
nE = n_nE->FirstChild->Value;
}
this->list->Add( gcnew RCMiddlewareName(pub, c, nJ, nE ) ); // リストに登録
} //while
} //void makelist()
public:
// リスト内を検索してミドルウェアの名称を返す
// 登録されていない場合は nullptr を返す
System::String^ search( System::String ^pub, System::String ^code, System::Boolean isJapanese )
{
for each (RCMiddlewareName ^mid in this->list )
{
System::String ^note = mid->check(pub, code, isJapanese);
if( note != nullptr )
{
return note;
}
}
return nullptr;
} //System::String^ search()
}; //ref class RCMiddlewareNameList
}; // 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,275 @@
#include "stdafx.h"
#include "twl/types.h"
#include <cstring>
#include <cstdio>
#include "split_tad.h"
#include "split_tad_util.h"
// ------------------------------------------------------
// 宣言と定数
// ------------------------------------------------------
// internal functions
cli::array<System::Byte>^ readTitleKey( cli::array<System::Byte> ^ticket );
cli::array<System::Byte>^ decCBC( cli::array<System::Byte> ^ Key, cli::array<System::Byte> ^ IV, cli::array<System::Byte> ^cipherText );
cli::array<rcContentsInfo^> ^readContentsInfo( cli::array<System::Byte> ^tmd );
// tad外し用の鍵
const u8 commonKey[] =
{
0xA1,0x60,0x4A,0x6A,0x71,0x23,0xB5,0x29,0xAE,0x8B,0xEC,0x32,0xC8,0x16,0xFC,0xAA
};
// ------------------------------------------------------
// tad外し処理本体
// ------------------------------------------------------
//
// tad ファイルから srl(0番目のコンテンツ)を抜き出す
// (split_tad_dev.pl の移植)
//
// @arg [in] 入力 tad ファイル名
// @arg [out] 出力 srl ファイル名
//
// @ret 成功したとき0 失敗したら負の値
//
int splitTad( System::String ^tadpath, System::String ^srlpath )
{
FILE *fp = NULL;
const char *pchFilename =
(const char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi( tadpath ).ToPointer();
if( fopen_s( &fp, pchFilename, "rb" ) != NULL )
{
return -1;
}
cli::array<System::Byte> ^mbuf = subStr( fp, 0, 32 );
u32 hdrSize = reverseEndian( unpack32(mbuf, 0) ); // 基本的にビッグエンディアン
u16 tadType = reverseEndian( unpack16(mbuf, 4) );
u16 tadVersion = reverseEndian( unpack16(mbuf, 6) );
u32 certSize = reverseEndian( unpack32(mbuf, 8) );
u32 crlSize = reverseEndian( unpack32(mbuf, 12) );
u32 ticketSize = reverseEndian( unpack32(mbuf, 16) );
u32 tmdSize = reverseEndian( unpack32(mbuf, 20) );
u32 contentSize = reverseEndian( unpack32(mbuf, 24) );
u32 metaSize = reverseEndian( unpack32(mbuf, 28) );
printf( "hdrSize %d\n", hdrSize );
printf( "tadType %c%c\n", tadType>>8, tadType&0xFF );
printf( "tadVersion %d\n", tadVersion );
printf( "certSize %d\n", certSize );
printf( "crlSize %d\n", crlSize );
printf( "ticketSize %d\n", ticketSize );
printf( "tmdSize %d\n", tmdSize );
printf( "contentSize %d\n", contentSize );
printf( "metaSize %d\n", metaSize );
u32 certOffset = roundUp( hdrSize, 64);
u32 crlOffset = roundUp( certOffset + certSize, 64);
u32 ticketOffset = roundUp( crlOffset + crlSize, 64);
u32 tmdOffset = roundUp( ticketOffset + ticketSize, 64);
u32 contentOffset = roundUp( tmdOffset + tmdSize, 64);
u32 metaOffset = roundUp( contentOffset + contentSize, 64);
u32 fileSize = roundUp( metaOffset + metaSize, 64);
fseek( fp, 0, SEEK_END );
u32 orgFileSize = ftell( fp );
if( fileSize != orgFileSize )
{
printf( "file size is not expected size(=%d)", fileSize );
fclose( fp );
return -1;
}
cli::array<System::Byte> ^ticket = subStr( fp, ticketOffset, ticketSize );
cli::array<System::Byte> ^tmd = subStr( fp, tmdOffset, tmdSize );
cli::array<System::Byte> ^content = subStr( fp, contentOffset, contentSize );
//saveFile( "cert.bin", subStr( fp, certOffset, certSize ) );
//saveFile( "crl.bin", subStr( fp, crlOffset, crlSize ) );
//saveFile( "ticket.bin", ticket );
//saveFile( "tmd.bin", tmd );
//saveFile( "meta.bin", subStr( fp, metaOffset, metaSize ) );
cli::array<System::Byte> ^title_key = readTitleKey( ticket );
cli::array<rcContentsInfo^> ^rci = readContentsInfo( tmd );
dumpBytes( title_key );
// 通常は tad は srl (コンテンツ No.0) しか含まないが
// マルチコンテンツ を含む場合のために No.1 以降も別ファイルとして保存する
// srl 名が out.srl のとき out_1.bin out_2.bin ... として出力する
System::String ^srl_dir = System::IO::Path::GetDirectoryName( srlpath ); // 格納ディレクトリ名
System::String ^srl_prefix = System::IO::Path::GetFileNameWithoutExtension( srlpath ); // 拡張子よりも前のファイル名
System::String ^srl_ext = System::IO::Path::GetExtension( srlpath ); // 拡張子
int result = 0;
u32 offset = 0;
for each( rcContentsInfo ^ci in rci )
{
u32 size = roundUp( (u32)ci->size, 16 );
cli::array<System::Byte> ^enc_content_x = subStr( content, offset, size );
cli::array<System::Byte> ^content_x_iv = resizeBytes( pack16( reverseEndian(ci->idx) ), 14 ); // ビッグエンディアンにしておく
cli::array<System::Byte> ^dec_content_x = decCBC( title_key, content_x_iv, enc_content_x );
cli::array<System::Byte> ^dec_content = subStr( dec_content_x, 0, ci->size );
System::Security::Cryptography::SHA1 ^sha1 = gcnew System::Security::Cryptography::SHA1Managed();
cli::array<System::Byte> ^hash = sha1->ComputeHash( dec_content );
dumpBytes( hash );
pin_ptr<unsigned char> calc = &hash[0]; // 計算で求めたハッシュ
pin_ptr<unsigned char> extr = &ci->hash[0]; // 抽出したハッシュ
if( memcmp( calc, extr, 20 ) == 0 )
{
printf( "hash OK\n" );
}
else
{
printf( "hash mismatch\n" );
result = -1; // エラーとする 中断はせず最後まで作成
}
//saveFile( "content_" + ci->idx.ToString() + ".encrypted.bin", enc_content_x );
//saveFile( "content_" + ci->idx.ToString() + ".bin", dec_content );
if( ci->idx == 0 )
{
saveFile( srlpath, dec_content ); // コンテンツ No.0 が srl にあたる
}
else
{
System::String ^tmppath = srl_dir + "\\" + srl_prefix + "_" + ci->idx.ToString() + ".bin";
saveFile( tmppath, dec_content );
}
offset += roundUp( size, 64 );
}
fclose( fp );
return result;
}
// ------------------------------------------------------
// internal functions
// ------------------------------------------------------
//
// title_key の復号
//
// @ret title_key のバイト列
//
cli::array<System::Byte>^ readTitleKey( cli::array<System::Byte> ^ticket )
{
cli::array<System::Byte> ^encTitleKey = subStr( ticket, 0x1BF, 16 );
cli::array<System::Byte> ^IV = resizeBytes( subStr( ticket, 0x1DC, 8 ), 8 ); // 16バイトに拡張してケツの8バイトを0で埋める
cli::array<System::Byte> ^comKey = gcnew cli::array<System::Byte>(16);
pin_ptr<unsigned char> pComKey = &comKey[0];
memcpy( pComKey, commonKey, 16 );
cli::array<System::Byte> ^plain;
try
{
plain = decCBC( comKey, IV, encTitleKey );
}
catch (System::Exception ^ e)
{
System::Console::WriteLine("Exception in readTitleKey(): {0}", e->Message);
}
return plain;
}
//
// tmd から各コンテンツファイルの情報を抜き出す
//
// @ret 各コンテンツファイルの情報をまとめた Array
//
cli::array<rcContentsInfo^> ^readContentsInfo( cli::array<System::Byte> ^tmd )
{
u16 nContent = reverseEndian( unpack16(tmd, 0x1DE) );
cli::array<rcContentsInfo^> ^ci = gcnew cli::array<rcContentsInfo^>( nContent );
u16 i;
for( i=0; i < nContent; i++ )
{
u32 offset = 0x1E4 + 36*i;
ci[i] = gcnew rcContentsInfo;
ci[i]->cid = reverseEndian( unpack32(tmd, offset) );
ci[i]->idx = reverseEndian( unpack16(tmd, offset + 4) );
ci[i]->type = reverseEndian( unpack16(tmd, offset + 6) );
ci[i]->size = reverseEndian( unpack32(tmd, offset + 12) );
ci[i]->hash = subStr( tmd, offset + 16, 20 );
}
return ci;
}
//
// AES復号 : System::Security::Cryptography::RijndaelManaged のヘルプのサンプルをコピペ
//
// @ret 復号後のデータ
//
cli::array<System::Byte>^ decCBC( cli::array<System::Byte> ^ Key, cli::array<System::Byte> ^ IV, cli::array<System::Byte> ^cipherText )
{
// Check arguments.
if (!cipherText || cipherText->Length <= 0)
throw gcnew System::ArgumentNullException("cipherText");
if (!Key || Key->Length <= 0)
throw gcnew System::ArgumentNullException("Key");
if (!IV || IV->Length <= 0)
throw gcnew System::ArgumentNullException("Key");
// TDeclare the streams used
// to decrypt to an in memory
// array of bytes.
System::IO::MemoryStream ^msDecrypt;
System::Security::Cryptography::CryptoStream ^csDecrypt;
// Declare the RijndaelManaged object
// used to decrypt the data.
System::Security::Cryptography::RijndaelManaged ^aesAlg;
// Declare the string used to hold
// the decrypted text.
cli::array<System::Byte> ^plain = gcnew cli::array<System::Byte>(cipherText->Length);
try
{
// Create a RijndaelManaged object
// with the specified key and IV.
aesAlg = gcnew System::Security::Cryptography::RijndaelManaged();
aesAlg->Mode = System::Security::Cryptography::CipherMode::CBC; // CBCモード
aesAlg->Key = Key;
aesAlg->IV = IV;
aesAlg->Padding = System::Security::Cryptography::PaddingMode::Zeros;
// Create a decrytor to perform the stream transform.
System::Security::Cryptography::ICryptoTransform ^ decryptor
= aesAlg->CreateDecryptor(aesAlg->Key, aesAlg->IV);
// Create the streams used for decryption.
msDecrypt = gcnew System::IO::MemoryStream(cipherText);
csDecrypt = gcnew System::Security::Cryptography::CryptoStream
(msDecrypt, decryptor, System::Security::Cryptography::CryptoStreamMode::Read);
csDecrypt->Read( plain, 0, cipherText->Length );
//srDecrypt = gcnew System::IO::StreamReader(csDecrypt);
//// Read the decrypted bytes from the decrypting stream
//// and place them in a string.
//plaintext = srDecrypt->ReadToEnd();
}
finally
{
// Clean things up.
// Close the streams.
if (csDecrypt)
csDecrypt->Close();
if (msDecrypt)
msDecrypt->Close();
// Clear the RijndaelManaged object.
if (aesAlg)
aesAlg->Clear();
}
return plain;
}
// end of file

View File

@ -0,0 +1,80 @@
#pragma once
#include "twl/types.h"
#include <cstring>
#include <cstdio>
// ------------------------------------------------------
// APIs
// ------------------------------------------------------
//
// tad ファイルから srl(0番目のコンテンツ)を抜き出す
// (split_tad_dev.pl の移植)
//
// @arg [in] 入力 tad ファイルのパス
// @arg [out] 出力 srl ファイルのパス
//
// @ret 成功したとき0 失敗したら負の値
//
int splitTad( System::String ^tadpath, System::String ^srlpath );
// ------------------------------------------------------
// 内部処理用の構造体(プロトタイプ宣言できないのでヘッダに置く)
// ------------------------------------------------------
// コンテンツ情報の構造体
ref class rcContentsInfo
{
private:
System::UInt32 ^h_cid;
System::UInt16 ^h_idx;
System::UInt16 ^h_type;
System::UInt32 ^h_size;
cli::array<System::Byte> ^h_hash;
public:
rcContentsInfo()
{
this->h_cid = gcnew System::UInt32; // 解放の必要なし
this->h_idx = gcnew System::UInt16;
this->h_type = gcnew System::UInt16;
this->h_size = gcnew System::UInt32;
this->h_hash = gcnew cli::array<System::Byte>(20); // 固定長
}
public:
property System::UInt32 cid
{
void set( System::UInt32 v ){ *this->h_cid = v; };
System::UInt32 get(void){ return *this->h_cid; }
}
property System::UInt16 idx
{
void set( System::UInt16 v ){ *this->h_idx = v; };
System::UInt16 get(void){ return *this->h_idx; }
}
property System::UInt16 type
{
void set( System::UInt16 v ){ *this->h_type = v; };
System::UInt16 get(void){ return *this->h_type; }
}
property System::UInt32 size
{
void set( System::UInt32 v ){ *this->h_size = v; };
System::UInt32 get(void){ return *this->h_size; }
}
property cli::array<System::Byte> ^hash
{
void set( cli::array<System::Byte> ^h )
{
cli::array<System::Byte>::Copy( h, this->h_hash, 20 );
}
cli::array<System::Byte> ^get(void)
{
cli::array<System::Byte> ^cp = gcnew cli::array<System::Byte>(20); // コピーを返す
cli::array<System::Byte>::Copy( this->h_hash, cp, 20 );
return cp;
}
}
};

View File

@ -0,0 +1,186 @@
#include "stdafx.h"
#include "twl/types.h"
#include <cstring>
#include <cstdio>
#include "split_tad_util.h"
// ------------------------------------------------------------------------
// 部分バイト列を抜き出す
// ------------------------------------------------------------------------
// @ret 抜き出したバイト列
cli::array<System::Byte>^ subStr( FILE *fp, const int offset, const int size )
{
if( size <= 0 )
{
return nullptr;
}
cli::array<System::Byte> ^mbuf = gcnew cli::array<System::Byte>(size); // メモリ解放の必要なし
pin_ptr<unsigned char> buf = &mbuf[0]; // fread が unmanaged 配列を引数にするので変換
(void)fseek( fp, offset, SEEK_SET );
if( fread( buf, 1, size, fp ) != size )
{
return nullptr;
}
return mbuf; // managed のほうを返す
}
// @ret 抜き出したバイト列
cli::array<System::Byte>^ subStr( cli::array<System::Byte> ^bytes, const int offset, const int size )
{
cli::array<System::Byte> ^sub = gcnew cli::array<System::Byte>(size);
cli::array<System::Byte>::Copy( bytes, offset, sub, 0, size );
return sub;
}
// ------------------------------------------------------------------------
// ファイルを作成してバイト列を格納する
// ------------------------------------------------------------------------
// @ret 成功したら0 失敗したら負の値
int saveFp( FILE *fp, cli::array<System::Byte> ^bytes )
{
if( bytes == nullptr )
{
return 0; // 空のファイルをつくりたいということなので正常終了とみなす
}
pin_ptr<unsigned char> tmp = &bytes[0]; // array型はふつうの配列ではないのでバイト配列に変換
int size = bytes->Length;
if( fwrite( tmp, 1, size, fp ) != size )
{
return -1;
}
return 0;
}
// @ret 成功したら0 失敗したら負の値
int saveFile( System::String ^filename, cli::array<System::Byte> ^bytes )
{
FILE *fp = NULL;
const char *pchFilename =
(const char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi( filename ).ToPointer();
// ファイルにROMヘッダをライト
if( fopen_s( &fp, pchFilename, "wb" ) != NULL ) // 同名ファイルを削除して新規にライト・バイナリ
{
return -1;
}
fseek( fp, 0, SEEK_SET );
int r = saveFp( fp, bytes );
fclose( fp );
return r;
}
// ------------------------------------------------------------------------
// エンディアンを逆転させる(tadはビッグエンディアンなのであったほうが便利)
// ------------------------------------------------------------------------
// @ret エンディアン逆転後の値
u32 reverseEndian( const u32 v )
{
u32 ret = (v<<24) | ((v<<8) & 0x00FF0000) | ((v>>8) & 0x0000FF00) | (v>>24);
return ret;
}
u16 reverseEndian( const u16 v )
{
u16 ret = (v<<8) | (v>>8);
return ret;
}
// ------------------------------------------------------------------------
// 多バイト値をバイト列に変換(リトルエンディアン)
// *** perlのpackを意識 ***
// ------------------------------------------------------------------------
// @ret 変換後のバイト列
cli::array<System::Byte> ^pack32( u32 v )
{
cli::array<System::Byte> ^bytes = gcnew cli::array<System::Byte>(4);
bytes[0] = v & 0xFF;
bytes[1] = (v >> 8) & 0xFF;
bytes[2] = (v >> 16) & 0xFF;
bytes[3] = (v >> 24) & 0xFF;
return bytes;
}
cli::array<System::Byte> ^pack16( u16 v )
{
cli::array<System::Byte> ^bytes = gcnew cli::array<System::Byte>(2);
bytes[0] = v & 0xFF;
bytes[1] = v >>8;
return bytes;
}
// ------------------------------------------------------------------------
// バイト列の部分バイト列から多バイト値として解釈(リトルエンディアン)
// *** perlのunpackを意識 ***
// ------------------------------------------------------------------------
// @arg [in] バイト列
// @arg [in] 何バイト目からを多バイト値とみなすか
// @ret 解釈した後の多バイト値
u32 unpack32( cli::array<System::Byte> ^bytes, const int index )
{
pin_ptr<unsigned char> tmp = &bytes[0];
u32 v = (u32)*((u32*)(tmp+index));
return v;
}
u16 unpack16( cli::array<System::Byte> ^bytes, const int index )
{
pin_ptr<unsigned char> tmp = &bytes[0];
u16 v = (u16)*((u16*)(tmp+index));
return v;
}
// ------------------------------------------------------------------------
// 丸める
// ------------------------------------------------------------------------
u32 roundUp( const u32 v, const u32 align )
{
u32 r = ((v + align - 1) / align) * align;
return r;
}
u16 roundUp( const u16 v, const u16 align )
{
u16 r = ((v + align - 1) / align) * align;
return r;
}
// ------------------------------------------------------------------------
// バイト列の長さを拡張して末尾を0で埋める
// (0x12345678 => 0x1234567800000000)
// ------------------------------------------------------------------------
// @arg [in] 拡張前のバイト列
// @arg [in] 何バイト拡張するか(拡張分だけを指定 例えば4バイトを5バイトにする場合には1を指定)
// @ret 拡張後のバイト列(新たなバイト列を内部で生成)
cli::array<System::Byte> ^resizeBytes( cli::array<System::Byte> ^org, const int difSize )
{
cli::array<System::Byte> ^r = gcnew cli::array<System::Byte>( org->Length + difSize );
cli::array<System::Byte>::Copy( org, 0, r, 0, org->Length );
return r;
}
// ------------------------------------------------------------------------
// バイト列を16進で表示
// ------------------------------------------------------------------------
void dumpBytes( cli::array<System::Byte> ^bytes )
{
for each( System::Byte b in bytes )
{
printf( "%02x", b );
}
printf( "\n" );
}
// end of file

View File

@ -0,0 +1,73 @@
#pragma once
#include "twl/types.h"
#include <cstring>
#include <cstdio>
// ------------------------------------------------------------------------
// 部分バイト列を抜き出す
// ------------------------------------------------------------------------
// @ret 抜き出したバイト列
cli::array<System::Byte>^ subStr( FILE *fp, const int offset, const int size );
cli::array<System::Byte>^ subStr( cli::array<System::Byte> ^bytes, const int offset, const int size );
// ------------------------------------------------------------------------
// ファイルを作成してバイト列を格納する
// ------------------------------------------------------------------------
// @ret 成功したら0 失敗したら負の値
int saveFp( FILE *fp, cli::array<System::Byte> ^bytes );
int saveFile( System::String ^filename, cli::array<System::Byte> ^bytes );
// ------------------------------------------------------------------------
// エンディアンを逆転させる(tadはビッグエンディアンなのであったほうが便利)
// ------------------------------------------------------------------------
// @ret エンディアン逆転後の値
u32 reverseEndian( const u32 v );
u16 reverseEndian( const u16 v );
// ------------------------------------------------------------------------
// 多バイト値をバイト列に変換(リトルエンディアン)
// *** perlのpackを意識 ***
// ------------------------------------------------------------------------
// @ret 変換後のバイト列
cli::array<System::Byte> ^pack32( u32 v );
cli::array<System::Byte> ^pack16( u16 v );
// ------------------------------------------------------------------------
// バイト列の部分バイト列から多バイト値として解釈(リトルエンディアン)
// *** perlのunpackを意識 ***
// ------------------------------------------------------------------------
// @arg [in] バイト列
// @arg [in] 何バイト目からを多バイト値とみなすか
// @ret 解釈した後の多バイト値
u32 unpack32( cli::array<System::Byte> ^bytes, const int index );
u16 unpack16( cli::array<System::Byte> ^bytes, const int index );
// ------------------------------------------------------------------------
// 丸める
// ------------------------------------------------------------------------
u32 roundUp( const u32 v, const u32 align );
u16 roundUp( const u16 v, const u16 align );
// ------------------------------------------------------------------------
// バイト列の長さを拡張して末尾を0で埋める
// (0x12345678 => 0x1234567800000000)
// ------------------------------------------------------------------------
// @arg [in] 拡張前のバイト列
// @arg [in] 何バイト拡張するか(拡張分だけを指定 例えば4バイトを5バイトにする場合には1を指定)
// @ret 拡張後のバイト列(新たなバイト列を内部で生成)
cli::array<System::Byte> ^resizeBytes( cli::array<System::Byte> ^org, const int difSize );
// ------------------------------------------------------------------------
// バイト列を16進で表示
// ------------------------------------------------------------------------
void dumpBytes( cli::array<System::Byte> ^bytes );

View File

@ -0,0 +1,204 @@
#pragma once
// ROMデータ(SRL)クラスの宣言
#include <apptype.h>
#include "common.h"
#include <twl/types.h>
#include <twl/os/common/format_rom.h>
#include <twl/os/common/ownerInfoEx.h>
#include "srl_const.h"
#include "srl_element.h"
#include "utility.h"
#include "message_bank.h"
namespace MasterEditorTWL
{
// -------------------------------------------------------------------
// Type : ref class
// Name : RCSrl
//
// Description : ROMデータ(SRL)の設定情報クラス
//
// Role : ROMデータのファイル入出力・内部情報の更新
// -------------------------------------------------------------------
ref class RCSrl
{
// field
private:
// ROMヘッダ
ROM_Header *pRomHeader;
public:
// 一度でも読み込まれたかどうか
property System::Boolean IsAlreadyReadOnce;
// (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 RomVersion;
property System::UInt16 HeaderCRC;
property System::String ^hLatency; // MROM/1TROM/Illegal
// ペアレンタルコントロール
property cli::array<System::Int32> ^hArrayParentalIndex; // 表示用のコンボボックスのインデックス
property System::Boolean IsUnnecessaryRating; // レーティング表示不要フラグ
// TWL専用情報 Read Only
property System::UInt32 NormalRomOffset;
property System::UInt32 KeyTableRomOffset;
property System::String ^hTitleIDLo;
property System::UInt32 TitleIDHi;
property System::Boolean IsAppLauncher; // TitleIDLoからわかるアプリ種別
property System::Boolean IsAppUser; // TitleIDHiからわかるアプリ種別
property System::Boolean IsAppSystem; //
property System::Boolean IsAppSecure; //
property System::Boolean IsLaunch; //
property System::Boolean IsMediaNand; //
property System::Boolean IsDataOnly; //
property System::UInt16 PublisherCode; //
property System::Boolean IsNormalJump;
property System::Boolean IsTmpJump;
property System::Boolean HasDSDLPlaySign; // ROMヘッダ外のSRLからわかる署名の有無
property System::Boolean IsOldDevEncrypt; // 旧開発用暗号フラグが立っている
property System::Boolean IsSCFGAccess; // SCFGレジスタをロックしている
property System::UInt32 PublicSize; // セーブデータサイズ
property System::UInt32 PrivateSize;
// NAND消費サイズ
RCNandUsedSize ^hNandUsedSize;
// TWL拡張フラグ Read Only
property System::Boolean IsCodecTWL;
property System::Boolean IsEULA;
property System::Boolean IsSubBanner;
property System::Boolean IsWiFiIcon;
property System::Boolean IsWirelessIcon;
property System::Boolean IsWL;
// TWLアクセスコントロール Read Only
property System::Boolean IsCommonClientKey;
property System::Boolean IsAesSlotBForES;
property System::Boolean IsAesSlotCForNAM;
property System::Boolean IsSD;
property System::Boolean IsNAND;
property System::Boolean IsGameCardOn;
property System::Boolean IsShared2;
property System::Boolean IsAesSlotBForJpegEnc;
property System::Boolean IsAesSlotBForJpegEncUser;
property System::Boolean IsGameCardNitro;
property System::Boolean IsAesSlotAForSSL;
property System::Boolean IsCommonClientKeyForDebugger;
property System::Boolean IsPhotoWrite;
property System::Boolean IsPhotoRead;
property System::Boolean IsSDWrite; // SDカードアクセス権 : フラグとは別に用意された(5.2 RELEASE)
property System::Boolean IsSDRead;
property System::Boolean IsOldSDK52Release; // SDアクセス権を調べる必要があるか : 5.2 RELEASE 以降のとき調べる必要あり
property System::Boolean IsOldSDK51PR; // HYBRID-NANDアプリを禁止する必要があるか : 5.1 PR 以前のとき調べる必要あり
// Shared2ファイルサイズ Read Only
property cli::array<System::UInt32> ^hShared2SizeArray;
// カードリージョン Read Only
property System::Boolean IsRegionJapan;
property System::Boolean IsRegionAmerica;
property System::Boolean IsRegionEurope;
property System::Boolean IsRegionAustralia;
property System::Boolean IsRegionKorea;
property System::Boolean IsRegionChina;
// 中韓設定フラグ Read Only
property System::Boolean IsForChina;
property System::Boolean IsForKorea;
// SDKバージョンと使用ライブラリのリスト
property System::Collections::Generic::List<RCSDKVersion^> ^hSDKList;
property System::Collections::Generic::List<RCLicense^> ^hLicenseList;
// MRC機能でチェックされたエラー情報のリスト
property System::Collections::Generic::List<RCMrcError^> ^hErrorList;
property System::Collections::Generic::List<RCMrcError^> ^hWarnList;
property System::Collections::Generic::List<RCMrcError^> ^hParentalErrorList; // 読み込み時に発見されるペアレンタルコントロール情報のエラー
property System::Collections::Generic::List<RCMrcError^> ^hParentalWarnList;
// MRC追加項目
property RCMrcExternalCheckItems ^hMrcExternalCheckItems;
// MRCメッセージ
property RCMessageBank ^hMrcMsg;
// constructor / destructor / finalizer
private:
RCSrl(){};
public:
RCSrl( System::String ^msgfileJ, System::String ^msgfileE ); // MRCメッセージのファイルを指定する
~RCSrl();
!RCSrl();
// method
public:
//
// ROMヘッダのファイル入出力
//
// @arg [in/out] 入出力ファイル名
//
ECSrlResult readFromFile( System::String ^srlfile );
ECSrlResult writeToFile( System::String ^srlfile );
// internal method
private:
// ROM固有情報とROMヘッダの設定
ECSrlResult setRomInfo(void); // ROMヘッダから取得したROM固有情報をフィールドに反映させる
ECSrlResult setRomHeader(void); // ROMヘッダにROM固有情報フィールドの値を反映させる
// ペアレンタルコントロールの設定
bool setRegionInfo( u32 region ); // リージョンを取得(エラー情報も登録) @ret リージョンが正しいかどうか
void setUnnecessaryRatingInfo( u32 region ); // レーティング情報が不要かどうかを取得(エラー情報も登録)
void setRatingInfo( u32 region ); // リージョンに含まれる団体のレーティングを取得
void setOneRatingOrgInfo( int ogn ); // 1つの団体のレーティングを取得(エラー情報も登録)
void setRatingRomHeader( u32 region ); // ROMヘッダにフィールドの値を反映させる
// ROMヘッダの更新
ECSrlResult calcRomHeaderCRC(void); // ROMヘッダのCRCを再計算
ECSrlResult signRomHeader(void); // ROMヘッダ更新後の再署名
ECSrlResult decryptRomHeader( ROM_Header *prh ); // ROMヘッダの署名を外す
// SRLバイナリから特殊な設定を調べる
ECSrlResult hasDSDLPlaySign( FILE *fp );
// DSダウンロード署名がSRLに格納されているか調べる
// @arg [in] 入力ファイルのFP (->SRL読み込み時に実行されるべき)]
ECSrlResult searchSDKVersion( FILE *fp ); // SDKバージョンを取得する
ECSrlResult searchLicenses( FILE *fp ); // 使用ライセンスを取得する
ECAppType selectAppType( ROM_Header *prh ); // TitleIDからアプリ種別を決定する
void calcNandUsedSize( FILE *fp ); // NAND消費サイズを計算する
// MRC(Master ROM Checker)機能
ECSrlResult mrc( FILE *fp );
ECSrlResult mrcNTR( FILE *fp );
ECSrlResult mrcTWL( FILE *fp );
void mrcAppType( FILE *fp );
void mrcAccessControl( FILE *fp );
void mrcPadding( FILE *fp );
void mrcBanner( FILE *fp );
void mrcReservedArea( FILE *fp );
void mrcShared2( FILE *fp );
void mrcSDKVersion( FILE *fp );
void mrcChinaKorea(void);
void mrcTrialApp( FILE *fp ); // 体験版アプリ用の追加チェック
// MRCメッセージを追加
RCMrcError^ makeMrcError( System::UInt32 beg, System::UInt32 end, System::Boolean isEnableModify, System::Boolean isAffectRom,
RCMrcError::PurposeType purpose,
System::String ^tag, ... cli::array<System::String^> ^args );
RCMrcError^ makeMrcError( RCMrcError::PurposeType purpose, System::String ^tag, ... cli::array<System::String^> ^args );
RCMrcError^ makeMrcError( System::String ^tag, ... cli::array<System::String^> ^args );
}; // end of ref class RCSrl
} // end of namespace MasterEditorTWL

View File

@ -0,0 +1,57 @@
#pragma once
// ROMデータ(SRL)クラス関連の定数宣言
#include <apptype.h>
#include "common.h"
#include <twl/types.h>
#include <twl/os/common/format_rom.h>
#include <twl/os/common/ownerInfoEx.h>
#include "utility.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, // 署名解除できない
ERROR_SIGN_VERIFY, // 署名解除した後のダイジェストが合わない
// CRC算出でのエラー
ERROR_SIGN_CRC,
// SDKバージョン取得でのエラー
ERROR_SDK,
// プラットフォームがNTR専用 or 不正バイナリ
ERROR_PLATFORM,
};
// -------------------------------------------------------------------
// Type : enum class
// Name : ECAppType
//
// Description : RCSrlクラスのアプリ種別を宣言
// -------------------------------------------------------------------
enum class ECAppType
{
USER = 0,
SYSTEM,
SECURE,
LAUNCHER,
ILLEGAL, // 不定
}; //ECAppType
} // end of namespace MasterEditorTWL

View File

@ -0,0 +1,423 @@
#pragma once
// ROMデータ(SRL)クラスの関連クラスの宣言と定義
#include <apptype.h>
#include "common.h"
#include <twl/types.h>
#include <twl/os/common/format_rom.h>
#include <twl/os/common/ownerInfoEx.h>
#include "srl_const.h"
#include "utility.h"
namespace MasterEditorTWL
{
// -------------------------------------------------------------------
// Type : ref class
// Name : RCSDKVersion
//
// Description : RCSrlクラスに持たせるSDKバージョン情報クラス
//
// Role : 構造体としてデータをまとめておく
// -------------------------------------------------------------------
ref class RCSDKVersion
{
private:
System::String ^hVersion;
System::UInt32 code;
System::Boolean isStatic;
private:
RCSDKVersion(){} // 封じる
public:
RCSDKVersion( System::UInt32 code, System::Boolean isStatic ) // 生成時にのみフィールドを設定可能
{
this->code = code;
this->isStatic = isStatic;
this->hVersion = MasterEditorTWL::analyzeSDKVersion( this->code );
}
public:
property System::String ^Version // 生成後にはフィールドは Read Only
{
System::String^ get(){ return System::String::Copy(this->hVersion); }
}
public:
property System::Boolean IsStatic
{
System::Boolean get(){ return (this->isStatic); }
}
public:
property System::UInt32 Code
{
System::UInt32 get(){ return (this->code); }
}
//public:
// property System::Byte MajorVersion
// {
// System::Byte get(){ return ((System::Byte)(0xff & (this->code >> 24))); }
// }
// property System::Byte MinorVersion
// {
// System::Byte get(){ return ((System::Byte)(0xff & (this->code >> 16))); }
// }
// property System::UInt16 Relstep
// {
// System::UInt16 get(){ return ((System::UInt16)(0xffff & this->code)); }
// }
}; //RCSDKVersion
// -------------------------------------------------------------------
// Type : ref class
// Name : RCLicense
//
// Description : RCSrlクラスに持たせるライセンス情報クラス
//
// Role : 構造体としてデータをまとめておく
// -------------------------------------------------------------------
ref class RCLicense
{
private:
System::String ^hPublisher;
System::String ^hName;
private:
RCLicense(){} // 封じる
public:
RCLicense( System::String ^pub, System::String ^name ) // 生成時にのみフィールドを設定可能
{
if( pub == nullptr )
this->hPublisher = gcnew System::String("");
else
this->hPublisher = pub;
if( name == nullptr )
this->hName = gcnew System::String("");
else
this->hName = name;
}
public:
property System::String ^Name // 生成後にはフィールドはRead Only
{
System::String^ get(){ return System::String::Copy(this->hName); }
}
public:
property System::String ^Publisher
{
System::String^ get(){ return System::String::Copy(this->hPublisher); }
}
}; //RCLicense
// -------------------------------------------------------------------
// Type : value class
// Name : VCReservedArea
//
// Description : 予約領域の範囲クラス
//
// Role : 構造体としてデータをまとめておく
// -------------------------------------------------------------------
value class VCReservedArea
{
private:
System::UInt32 begin;
System::UInt32 end;
// value class ではデフォルトコンストラクタを private にして封じることはできない
public:
VCReservedArea( System::UInt32 begin, System::UInt32 end )
{
this->begin = begin;
this->end = end;
}
public:
property System::UInt32 Begin // read only
{
System::UInt32 get(){ return this->begin; }
}
property System::UInt32 End
{
System::UInt32 get(){ return this->end; }
}
}; //VCReservedArea
// -------------------------------------------------------------------
// Type : ref class
// Name : RCNandUsedSize
//
// Description : アプリのインポート時NAND消費サイズクラス
//
// Role : 構造体としてデータをまとめておく
// -------------------------------------------------------------------
ref class RCNandUsedSize
{
// 値へのアクセス方法
// - 生のデータサイズ : publicメンバ変数
// - 切り上げたサイズ : property (ReadOnlyなメンバ変数のように見える)
public:
property System::UInt32 SrlSize;
property System::UInt32 PublicSaveSize;
property System::UInt32 PrivateSaveSize;
property System::Boolean IsMediaNand; // NANDアプリかどうか
property System::Boolean IsUseSubBanner; // サブバナーを使用するかどうか
private:
static const System::UInt32 cTmdSize = 16 * 1024;
static const System::UInt32 cSubBannerSize = 16 * 1024;
static const System::UInt32 NandClusterSize = 16 * 1024;
static const System::UInt32 ShopBlockSize = 128 * 1024;
public:
property System::UInt32 SrlSizeRoundUp // 切り上げた値はメンバ変数としては持たず計算した値を property で提供
{
System::UInt32 get()
{
if( !this->IsMediaNand )
{
return 0;
}
return (MasterEditorTWL::roundUp( this->SrlSize, NandClusterSize ));
}
}
property System::UInt32 PublicSaveSizeRoundUp
{
System::UInt32 get(){ return (MasterEditorTWL::roundUp( this->PublicSaveSize, NandClusterSize )); }
}
property System::UInt32 PrivateSaveSizeRoundUp
{
System::UInt32 get(){ return (MasterEditorTWL::roundUp( this->PrivateSaveSize, NandClusterSize )); }
}
property System::UInt32 SubBannerSize // サブバナーのサイズは使用するかしないかで異なるので計算した値を property で提供
{
System::UInt32 get()
{
if( !this->IsUseSubBanner )
{
return 0;
}
return this->cSubBannerSize;
}
}
property System::UInt32 SubBannerSizeRoundUp
{
System::UInt32 get()
{
if( !this->IsUseSubBanner )
{
return 0;
}
return (MasterEditorTWL::roundUp( this->SubBannerSize, NandClusterSize ));
}
}
property System::UInt32 TmdSize
{
System::UInt32 get()
{
if( !this->IsMediaNand )
{
return 0;
}
return this->cTmdSize;
}
}
property System::UInt32 TmdSizeRoundUp
{
System::UInt32 get()
{
if( !this->IsMediaNand )
{
return 0;
}
return (MasterEditorTWL::roundUp( this->TmdSize, NandClusterSize ));
}
}
property System::UInt32 NandUsedSize // 全体のNAND消費サイズは変数で持たず property で提供
{
System::UInt32 get()
{
// NAND消費量の計算式
// 以下のファイルをNANDクラスタ単位(=16KB)に切り上げて合計する
//
// SRLの実ファイルサイズ
// Publicセーブデータサイズ
// Privateセーブデータサイズ
// TMDサイズ(=16KB固定)
// サブバナーサイズ(使用時には16KB固定 不使用時には0KB)
if( !this->IsMediaNand )
{
return 0; // カードアプリのとき0
}
System::UInt32 size = this->SrlSizeRoundUp + this->PublicSaveSizeRoundUp + this->PrivateSaveSizeRoundUp
+ this->TmdSizeRoundUp + this->SubBannerSizeRoundUp;
return size;
}
}
property System::UInt32 NandUsedSizeBlock // ショップでのブロック数
{
System::UInt32 get()
{
System::UInt32 blocks = MasterEditorTWL::roundUp( this->NandUsedSize, this->ShopBlockSize)
/ this->ShopBlockSize;
return blocks;
}
}
}; //RCNandUsedSize
// -------------------------------------------------------------------
// Type : ref class
// Name : RCMrcError
//
// Description : RCSrlクラスに持たせるMRCエラー情報クラス
//
// Role : 構造体としてデータをまとめておく
// -------------------------------------------------------------------
public ref class RCMrcError
{
public:
enum class PurposeType : System::UInt32 // 型指定
{
Production = 1 << 0, // 一般販売用(カード/NAND)
TouchTryDS = 1 << 1, // TouchTryDS/DS CENTRE
CardDistribution = 1 << 2, // データ配信用カード
CardKiosk = 1 << 3, // 店頭試遊台(単独型)
DSiShop = 1 << 4, // DSiショップ配信用体験版
DSDownload = 1 << 5, // DSダウンロードサービス(& ニンテンドーチャンネル)
Zone = 1 << 6, // Nintendo Zone
Common = 0xFFFFFFFF, // すべての用途で共通のエラー
};
private:
System::String ^hName; // 項目名
System::UInt32 begin; // 開始アドレス
System::UInt32 end; // 終了アドレス
System::String ^hMsg; // エラーメッセージ
System::String ^hNameE; // 英語版
System::String ^hMsgE;
System::Boolean isEnableModify; // マスタエディタで修正可能かどうか
System::Boolean isAffectRom; // 変更するとSRL(ROMバイナリ)が変更されるか
PurposeType purpose;
private:
RCMrcError(){} // 封じる
public:
RCMrcError( // この形式でしかインスタンスを作成できない
System::String ^name, System::UInt32 beg, System::UInt32 end, System::String ^msg,
System::String ^nameE, System::String ^msgE, System::Boolean isEnableModify, System::Boolean isAffectRom, PurposeType purpose )
{
if( name == nullptr )
this->hName = gcnew System::String("");
else
this->hName = name;
if( nameE == nullptr )
this->hNameE = gcnew System::String("");
else
this->hNameE = nameE;
this->begin = beg;
this->end = end;
if( msg == nullptr )
this->hMsg = gcnew System::String("");
else
this->hMsg = msg;
if( msgE == nullptr )
this->hMsgE = gcnew System::String("");
else
this->hMsgE = msgE;
this->isEnableModify = isEnableModify;
this->isAffectRom = isAffectRom;
this->purpose = purpose;
}
public:
property System::Boolean IsEnableModify
{
System::Boolean get(){ return this->isEnableModify; } // Read Only
}
property System::Boolean IsAffectRom
{
System::Boolean get(){ return this->isAffectRom; }
}
property System::String ^Name
{
System::String^ get(){ return System::String::Copy(this->hName); }
}
property System::String ^NameE
{
System::String^ get(){ return System::String::Copy(this->hNameE); }
}
property System::String ^Msg
{
System::String^ get(){ return System::String::Copy(this->hMsg); }
}
property System::String ^MsgE
{
System::String^ get(){ return System::String::Copy(this->hMsgE); }
}
property System::UInt32 Begin
{
System::UInt32 get(){ return this->begin; }
}
property System::UInt32 End
{
System::UInt32 get(){ return this->end; }
}
property PurposeType Purpose
{
PurposeType get(){ return this->purpose; }
}
public:
// gridViewの表示形式にあわせる
cli::array<System::Object^>^ getAll( System::Boolean isJapanese )
{
if( (this->begin == 0) && (this->end == 0) )
{
if( isJapanese )
return (gcnew array<System::Object^>{this->hName, "-", "-", this->hMsg});
else
return (gcnew array<System::Object^>{this->hNameE, "-", "-", this->hMsgE});
}
if( isJapanese )
return (gcnew array<System::Object^>{this->hName, this->begin.ToString("X04")+"h", this->end.ToString("X04")+"h", this->hMsg});
else
return (gcnew array<System::Object^>{this->hNameE, this->begin.ToString("X04")+"h", this->end.ToString("X04")+"h", this->hMsgE});
}
}; //RCMrcError
// -------------------------------------------------------------------
// Type : ref class
// Name : RCMrcExternalCheckItems
//
// Description : MRCチェック項目の外部パラメータクラス
//
// Role : 構造体としてデータをまとめておく
// -------------------------------------------------------------------
ref class RCMrcExternalCheckItems
{
public:
property System::Boolean IsAppendCheck; // 追加チェックをするかどうか(すべての項目が追加チェックとは限らない)
property System::UInt32 SDKVer; // SDKのバージョン
property System::UInt32 SDKVerNotStaticTWL; // SDKのバージョン(TWL常駐モジュール以外)
property System::UInt32 SDKVerNotStaticNTR; // SDKのバージョン(NTR常駐モジュール以外)
property System::Boolean IsPermitNormalJump; // ノーマルジャンプがアクセス許可されているか
property cli::array<System::Boolean> ^hIsPermitShared2Array; // Shared2ファイルアクセスが許可されているか
property cli::array<System::UInt32> ^hShared2SizeArray; // Shared2ファイルサイズ
property System::Collections::Generic::List<VCReservedArea> ^hReservedAreaList; // 予約領域の範囲
public:
RCMrcExternalCheckItems()
{
this->IsAppendCheck = false;
this->SDKVer = 0;
this->SDKVerNotStaticTWL = 0;
this->SDKVerNotStaticNTR = 0;
this->IsPermitNormalJump = false;
this->hIsPermitShared2Array = gcnew cli::array<System::Boolean>(METWL_NUMOF_SHARED2FILES);
this->hShared2SizeArray = gcnew cli::array<System::UInt32>(METWL_NUMOF_SHARED2FILES);
System::Int32 i;
for( i=0; i < METWL_NUMOF_SHARED2FILES; i++ )
{
this->hIsPermitShared2Array[i] = false;
this->hShared2SizeArray[i] = 0;
}
this->hReservedAreaList = gcnew System::Collections::Generic::List<VCReservedArea>;
this->hReservedAreaList->Clear();
}
}; //RCMrcExternalCheckItems
} // 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,753 @@
// utility.h の実装
#include "stdafx.h"
#include <apptype.h>
#include "common.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] バイト数
//
// @ret 文字列(単位つき)
// ----------------------------------------------------------------------
System::String^ MasterEditorTWL::transSizeToString( const System::UInt32 size )
{
System::UInt32 val = size;
// Byte単位
if( val == 0 )
{
return val.ToString();
}
if( val < 1024 )
{
return (val.ToString() + " Byte");
}
// KB単位に変換
if( (val % 1024) != 0 )
{
return (val.ToString() + " Byte"); // 端数のときは単位変換しない
}
val = val / 1024;
if( val < 1024 )
{
return (val.ToString() + " KB");
}
// MB単位に変換
if( (val % 1024) != 0 )
{
return (val.ToString() + " KB");
}
val = val / 1024;
if( val < 1024)
{
return (val.ToString() + " MB");
}
// GB単位に変換
if( (val % 1024) != 0 )
{
return (val.ToString() + " MB");
}
val = val / 1024;
return (val.ToString() + " GB");
}
// KBまで
System::String^ MasterEditorTWL::transSizeToStringKB( const System::UInt32 size )
{
System::UInt32 val = size;
// Byte単位
if( val == 0 )
{
return val.ToString();
}
if( val < 1024 )
{
return (val.ToString() + " Byte");
}
// KB単位に変換
if( (val % 1024) != 0 )
{
return (val.ToString() + " Byte"); // 端数のときは単位変換しない
}
val = val / 1024;
return (val.ToString() + " KB");
}
// MB
System::String^ MasterEditorTWL::transSizeToStringMB( const System::UInt32 size )
{
if( size == 0 )
{
return size.ToString();
}
System::Double MB = 1024.0 * 1024.0;
System::Double result = ((System::Double)size) / MB; // 小数
return (result.ToString() + " MB");
}
// 第2引数で小数点の桁数を指定(それ以下の桁は切り上げ)
System::String^ MasterEditorTWL::transSizeToStringMB( const System::UInt32 size, const System::UInt32 decimals )
{
if( size == 0 )
{
return size.ToString();
}
System::UInt32 MB = 1024*1024;
System::UInt32 pow = 1;
System::UInt32 i;
for( i=0; i < decimals; i++ )
{
pow = pow * 10;
}
System::UInt32 div = size * pow / MB; // 小数点の位置をずらす
System::UInt32 mod = size * pow % MB;
if( mod > 0 ) // ずらした小数点以下を切り上げ(直後の桁が0であってもそれ以降が0でなければ切り上げ)
{
div++;
}
System::String ^str = ((System::Double)div / (System::Double)pow).ToString("F" + decimals.ToString());
return (str + " MB");
}
// ----------------------------------------------------------------------
// 各レーティング団体の設定可能年齢を取得する
//
// @arg [in] 団体No.
// ----------------------------------------------------------------------
cli::array<System::Byte>^ MasterEditorTWL::getOgnRatingAges( int ogn )
{
cli::array<System::Byte> ^ages = gcnew cli::array<System::Byte>{0};
if( ogn == OS_TWL_PCTL_OGN_CERO )
{
ages = gcnew cli::array<System::Byte>{0,12,15,17,18};
}
else if( ogn == OS_TWL_PCTL_OGN_ESRB )
{
ages = gcnew cli::array<System::Byte>{0,3,6,10,13,17};
}
else if( ogn == OS_TWL_PCTL_OGN_USK )
{
ages = gcnew cli::array<System::Byte>{0,6,12,16,18};
}
else if( ogn == OS_TWL_PCTL_OGN_PEGI_GEN )
{
ages = gcnew cli::array<System::Byte>{0,3,7,12,16,18};
}
else if( ogn == OS_TWL_PCTL_OGN_PEGI_PRT )
{
ages = gcnew cli::array<System::Byte>{0,4,6,12,16,18};
}
else if( ogn == OS_TWL_PCTL_OGN_PEGI_BBFC )
{
ages = gcnew cli::array<System::Byte>{0,3,4,7,8,12,15,16,18};
}
else if( ogn == OS_TWL_PCTL_OGN_AGCB )
{
ages = gcnew cli::array<System::Byte>{0,7,14,15};
}
else if( ogn == OS_TWL_PCTL_OGN_GRB )
{
ages = gcnew cli::array<System::Byte>{0,12,15,18};
}
return ages;
}
// ----------------------------------------------------------------------
// 各レーティング団体の団体名を取得する
//
// @arg [in] 団体No.
// ----------------------------------------------------------------------
System::String^ MasterEditorTWL::getOgnName( int ogn )
{
System::String ^name = gcnew System::String("");
if( ogn == OS_TWL_PCTL_OGN_CERO )
{
name = gcnew System::String("CERO");
}
else if( ogn == OS_TWL_PCTL_OGN_ESRB )
{
name = gcnew System::String("ESRB");
}
else if( ogn == OS_TWL_PCTL_OGN_USK )
{
name = gcnew System::String("USK");
}
else if( ogn == OS_TWL_PCTL_OGN_PEGI_GEN )
{
name = gcnew System::String("PEGI(General)");
}
else if( ogn == OS_TWL_PCTL_OGN_PEGI_PRT )
{
name = gcnew System::String("PEGI(Portugal)");
}
else if( ogn == OS_TWL_PCTL_OGN_PEGI_BBFC )
{
name = gcnew System::String("PEGI and BBFC");
}
else if( ogn == OS_TWL_PCTL_OGN_AGCB )
{
name = gcnew System::String("COB");
}
else if( ogn == OS_TWL_PCTL_OGN_GRB )
{
name = gcnew System::String("GRB");
}
return name;
}
// ----------------------------------------------------------------------
// リージョンに含まれるレーティング団体のリストを返す
// (不正なリージョンのときはnullptr)
//
// @arg [in] リージョン
// ----------------------------------------------------------------------
System::Collections::Generic::List<int>^ MasterEditorTWL::getOgnListInRegion( u32 region )
{
System::Collections::Generic::List<int> ^list = gcnew System::Collections::Generic::List<int>;
switch( region )
{
case METWL_MASK_REGION_JAPAN:
list->Add( OS_TWL_PCTL_OGN_CERO ); // リージョンに含まれない団体の情報は読み込まない
break;
case METWL_MASK_REGION_AMERICA:
list->Add( OS_TWL_PCTL_OGN_ESRB );
break;
case METWL_MASK_REGION_EUROPE:
list->Add( OS_TWL_PCTL_OGN_USK );
list->Add( OS_TWL_PCTL_OGN_PEGI_GEN );
list->Add( OS_TWL_PCTL_OGN_PEGI_PRT );
list->Add( OS_TWL_PCTL_OGN_PEGI_BBFC );
break;
case METWL_MASK_REGION_AUSTRALIA:
list->Add( OS_TWL_PCTL_OGN_AGCB );
break;
case (METWL_MASK_REGION_EUROPE|METWL_MASK_REGION_AUSTRALIA):
list->Add( OS_TWL_PCTL_OGN_USK );
list->Add( OS_TWL_PCTL_OGN_PEGI_GEN );
list->Add( OS_TWL_PCTL_OGN_PEGI_PRT );
list->Add( OS_TWL_PCTL_OGN_PEGI_BBFC );
list->Add( OS_TWL_PCTL_OGN_AGCB );
break;
case (METWL_MASK_REGION_AMERICA|METWL_MASK_REGION_AUSTRALIA):
list->Add( OS_TWL_PCTL_OGN_ESRB );
list->Add( OS_TWL_PCTL_OGN_AGCB );
break;
case (METWL_MASK_REGION_AMERICA|METWL_MASK_REGION_EUROPE|METWL_MASK_REGION_AUSTRALIA):
list->Add( OS_TWL_PCTL_OGN_ESRB );
list->Add( OS_TWL_PCTL_OGN_USK );
list->Add( OS_TWL_PCTL_OGN_PEGI_GEN );
list->Add( OS_TWL_PCTL_OGN_PEGI_PRT );
list->Add( OS_TWL_PCTL_OGN_PEGI_BBFC );
list->Add( OS_TWL_PCTL_OGN_AGCB );
break;
case METWL_MASK_REGION_KOREA:
list->Add( OS_TWL_PCTL_OGN_GRB );
break;
case METWL_MASK_REGION_ALL & ~METWL_MASK_REGION_CHINA:
list->Add( OS_TWL_PCTL_OGN_CERO );
list->Add( OS_TWL_PCTL_OGN_ESRB );
list->Add( OS_TWL_PCTL_OGN_USK );
list->Add( OS_TWL_PCTL_OGN_PEGI_GEN );
list->Add( OS_TWL_PCTL_OGN_PEGI_PRT );
list->Add( OS_TWL_PCTL_OGN_PEGI_BBFC );
list->Add( OS_TWL_PCTL_OGN_AGCB );
list->Add( OS_TWL_PCTL_OGN_GRB );
break;
#if defined(METWL_VER_APPTYPE_SYSTEM) || defined(METWL_VER_APPTYPE_SECURE) || defined(METWL_VER_APPTYPE_LAUNCHER)
case METWL_MASK_REGION_ALL:
list->Add( OS_TWL_PCTL_OGN_CERO );
list->Add( OS_TWL_PCTL_OGN_ESRB );
list->Add( OS_TWL_PCTL_OGN_USK );
list->Add( OS_TWL_PCTL_OGN_PEGI_GEN );
list->Add( OS_TWL_PCTL_OGN_PEGI_PRT );
list->Add( OS_TWL_PCTL_OGN_PEGI_BBFC );
list->Add( OS_TWL_PCTL_OGN_AGCB );
list->Add( OS_TWL_PCTL_OGN_GRB );
break;
#endif //#if defined(METWL_VER_APPTYPE_SYSTEM) || defined(METWL_VER_APPTYPE_SECURE) || defined(METWL_VER_APPTYPE_LAUNCHER)
default:
list = nullptr;
break;
}
return list;
}
// ----------------------------------------------------------------------
// バイト列に特定のパターンが含まれるかどうかマッチングする
//
// @arg [in] テキスト
// [in] テキストの長さ
// [in] パターン
// [in] パターンの長さ
// [in] テキストの終端まで調べた時点でテキストが途中までマッチしていた場合を成功とみなすか
//
// @ret マッチしたテキストのオフセットをリストで返す。
// ----------------------------------------------------------------------
System::Collections::Generic::List<u32>^ MasterEditorTWL::patternMatch(
const u8 *text, const u32 textLen, const u8 *pattern, const u32 patternLen, const System::Boolean enableLast )
{
// ひとまずシンプルな方法で実装する
u32 first;
u32 len;
System::Collections::Generic::List<u32> ^list = gcnew System::Collections::Generic::List<u32>();
list->Clear();
// パターンを1文字ずつずらしながらマッチング
for( first=0; first < textLen; first++ )
{
len = (patternLen < (textLen-first))?patternLen:(textLen-first); // 最後のほうは途中までしかマッチングしない
if( *(text+first) == pattern[0] ) // 高速化のため最初の文字が一致したときのみ全文マッチング
{
if( memcmp( text+first, pattern, len ) == 0 )
{
if( (enableLast == true) )
{
list->Add( first );
}
else if( len == patternLen ) // 完全一致しないとダメ
{
list->Add( first );
}
}
}
}
return list;
} // MasterEditorTWL::patternMatch
//// ----------------------------------------------------------------------
//// バイト列に特定のパターンが含まれるかどうかマッチングする (Boyer-Moore法)
////
//// @arg [in] テキスト
//// [in] テキストの長さ
//// [in] パターン
//// [in] パターンの長さ
//// [in] skipマップ(あらかじめ生成しておく)
////
//// @ret マッチしたテキストのインデックスをリストで返す。
//// ----------------------------------------------------------------------
//System::Collections::Generic::List<u32>^ MasterEditorTWL::patternMatchBM(
// const u8 *text, const int textLen, const u8 *pattern, const int patternLen, const int skip[] )
//{
// System::Collections::Generic::List<u32> ^list = gcnew System::Collections::Generic::List<u32>();
// list->Clear();
//
// if( textLen < patternLen )
// {
// return list;
// }
//
// int pos = patternLen-1;
// while( pos < textLen ) // イメージとしてはパターンを固定してテキストの方をずらしていく感じ
// {
// int first = pos - (patternLen-1);
// if( memcmp( text+first, pattern, patternLen ) == 0 ) // 本来は末尾から探索するがめんどうなので先頭からmemcmp
// {
// list->Add( first );
// }
// pos = pos + skip[ (int)text[pos] ]; // パターンの末尾と照合するテキスト位置をずらす
// }
// return list;
//}
//
//// ----------------------------------------------------------------------
//// Boyer-Moore法のskipマップの生成
////
//// @arg [in] パターン
//// [in] パターンの長さ
//// [out] skipマップの格納先
////
//// @ret なし
//// ----------------------------------------------------------------------
//void MasterEditorTWL::makeSkipBM( const u8 *pattern, const int patternLen, int skip[] )
//{
// int i;
// for( i=0; i < 256; i++ ) // すべての文字(出現しうるデータ)についてマップを初期化
// {
// skip[i] = patternLen; // パターンにない文字なのでパターンを丸ごとスキップできる
// }
// for( i=0; i < (patternLen-1); i++ ) // 末尾を除くすべてのパターン出現文字について(最後の)出現位置を登録
// {
// skip[ (int)pattern[i] ] = patternLen - 1 - i;
// }
//}
// ----------------------------------------------------------------------
// ファイルにバイト列のパターンが含まれるかどうかマッチングする
//
// @arg [in] マッチ対象となるファイルポインタ
// @arg [in] パターン
// @arg [in] パターンの長さ(PATTERN_MATCH_LEN_MAX以下でなければならない)
//
// @ret マッチしたテキストのオフセットをリストで返す。
// 最後までマッチした場合のみ成功したとみなす。
// ----------------------------------------------------------------------
#define PATTERN_MATCH_LEN_MAX (10*1024)
System::Collections::Generic::List<u32>^ MasterEditorTWL::patternMatch( FILE *fp, const u8 *pattern, const u32 patternLen )
{
u8 text[ 2 * PATTERN_MATCH_LEN_MAX ]; // バッファの切れ目を探索するため多めに読み込むので最大でパターンの2倍だけバッファが必要になる
u32 cur;
u32 filesize;
u32 len;
u32 extra;
System::Collections::Generic::List<u32> ^tmplist;
System::Collections::Generic::List<u32> ^list = gcnew System::Collections::Generic::List<u32>;
list->Clear();
if( patternLen > PATTERN_MATCH_LEN_MAX )
return nullptr;
fseek( fp, 0, SEEK_END );
filesize = ftell( fp );
cur = 0;
while( cur < filesize )
{
// バッファの切れ目を調べたいため実際には(パターンの長さ-1)だけ多めにリードする
len = ((filesize - cur) < PATTERN_MATCH_LEN_MAX)?(filesize - cur):PATTERN_MATCH_LEN_MAX;
extra = (len <= PATTERN_MATCH_LEN_MAX)?0:(patternLen-1); // 最後までいったときには余分にリードしてはいけない
fseek( fp, cur, SEEK_SET );
u32 readlen = fread( text, 1, len + extra, fp );
if( (len + extra) != readlen )
{
//System::Diagnostics::Debug::WriteLine( "actual len = " + readlen.ToString() );
//System::Diagnostics::Debug::WriteLine( "expect len = " + (len + extra).ToString() );
return nullptr;
}
// テキスト終端に途中までマッチングしたときは失敗とみなす
tmplist = MasterEditorTWL::patternMatch( text, len+extra, pattern, patternLen, false );
if( tmplist != nullptr )
{
for each( u32 tmpval in tmplist )
{
list->Add( tmpval + cur ); // 実際のオフセットはファイルオフセットを加えた値
}
}
// 次のSEEK位置:多めにリードしたはずらす
cur += len;
}
return list;
}
// ----------------------------------------------------------------------
// XMLのルートードから指定した名前のタグを検索して返す
//
// @arg [in] XMLのルートード
// @arg [in] タグ名
//
// @ret 検索でマッチしたときノードを返す。ないときは nullptr。
// ただし、最初にマッチしたもののみ返す
// ----------------------------------------------------------------------
System::Xml::XmlNode^ MasterEditorTWL::searchXmlNode( System::Xml::XmlElement ^root, System::String ^tag )
{
System::Xml::XmlNodeList ^list = root->GetElementsByTagName( tag );
System::Xml::XmlNode ^item = nullptr;
if( list != nullptr )
{
item = list->Item(0);
}
return item;
}
// ----------------------------------------------------------------------
// タグを検索してそのテキストが指定したテキストと一致するか調べる
//
// @arg [in] XMLのルートード
// @arg [in] タグ名
// @arg [in] 値
//
// @ret 一致するときtrue。一致しないとき、タグが存在しないときはfalse。
// ----------------------------------------------------------------------
System::Boolean MasterEditorTWL::isXmlEqual( System::Xml::XmlElement ^root, System::String ^tag, System::String ^val )
{
System::Xml::XmlNode ^item = MasterEditorTWL::searchXmlNode( root, tag );
if( (item != nullptr) && (item->FirstChild != nullptr) && (item->FirstChild->Value->Equals( val )) )
{
return true;
}
return false;
}
// ----------------------------------------------------------------------
// タグを検索してそのテキストを返す
//
// @arg [in] XMLのルートード
// @arg [in] タグのXPath
//
// @ret テキストが存在するときそのテキストを返す。存在しないときnullptr。
// ----------------------------------------------------------------------
System::String^ MasterEditorTWL::getXPathText( System::Xml::XmlElement ^root, System::String ^xpath )
{
System::Xml::XmlNode ^tmp = root->SelectSingleNode( xpath );
if( tmp && tmp->FirstChild && tmp->FirstChild->Value )
{
return tmp->FirstChild->Value;
}
return nullptr;
}
// ----------------------------------------------------------------------
// XMLにタグを追加する
//
// @arg [in] XMLドキュメント
// @arg [in] 親ノード
// @arg [in] タグ名
// @arg [in] テキスト
// ----------------------------------------------------------------------
void MasterEditorTWL::appendXmlTag( System::Xml::XmlDocument ^doc, System::Xml::XmlElement ^parent,
System::String ^tag, System::String ^text )
{
if( System::String::IsNullOrEmpty( text ) )
return;
System::Xml::XmlElement ^node = doc->CreateElement( tag );
node->AppendChild( doc->CreateTextNode( text ) );
parent->AppendChild( node );
}
// ----------------------------------------------------------------------
// ビット数をカウントする
//
// @arg [in] 値
//
// @ret ビット数
// ----------------------------------------------------------------------
u32 MasterEditorTWL::countBits( const u32 val )
{
// 分割統治法:隣り合うかたまりごとにビット数をカウントしていく
u32 n = val;
n = ((n>>1) & 0x55555555) + (n & 0x55555555);
n = ((n>>2) & 0x33333333) + (n & 0x33333333);
n = ((n>>4) & 0x0f0f0f0f) + (n & 0x0f0f0f0f);
n = ((n>>8) & 0x00ff00ff) + (n & 0x00ff00ff);
n = (n>>16) + (n & 0x0000ffff);
return n;
}
// ----------------------------------------------------------------------
// SDKバージョンを解読する(例 10203 -> "PR2 plus3")
//
// @arg [in] SRL中に埋まっているSDKのバージョン情報(4バイトバイナリ)
//
// @ret 解読したSDKバージョン
//
// ----------------------------------------------------------------------
System::String^ MasterEditorTWL::analyzeSDKVersion( System::UInt32 code )
{
System::Byte major = (System::Byte)(0xff & (code >> 24));
System::Byte minor = (System::Byte)(0xff & (code >> 16));
System::UInt16 relstep = (System::UInt16)(0xffff & code);
System::String ^str = nullptr;
str += (major.ToString() + "." + minor.ToString() + " ");
//System::Diagnostics::Debug::WriteLine( "relstep = " + relstep.ToString() );
// RELSTEPの解釈
// PR1=10100 PR2=10200 ...
// RC1=20100 RC2=20200 ...
// RELEASE=30000
System::UInt16 middle = relstep;
while( middle >= 10000 )
{
middle -= 10000;
}
System::UInt16 plus = middle;
System::String ^plusstr = gcnew System::String( "" );
while( plus >= 100 )
{
plus -= 100;
}
if( plus > 0 )
{
plusstr = " plus" + plus.ToString();
}
middle = middle / 100;
switch( relstep / 10000 )
{
case 1: str += ("PR " + middle.ToString() + plusstr); break;
case 2: str += ("RC " + middle.ToString() + plusstr); break;
//case 3: str += ("RELEASE " + middle.ToString() + plusstr); break;
case 3:
if( middle > 0 )
{
str += ("RELEASE " + middle.ToString() + plusstr);
}
else
{
str += ("RELEASE" + plusstr);
}
break;
default: break;
}
return System::String::Copy(str);
}
// ----------------------------------------------------------------------
// SDKバージョンの大小判定をする
//
// @arg [in] 判定対象のSDKバージョン(SRLに含まれるもの)
// @arg [in] 判定基準のSDKバージョン(設定ファイルに記述されるもの)
// @arg [in] Relstepの判定をPR/RCのときも判定するか(falseのときRelease版のみ)
//
// @ret 判定対象が基準よりも旧バージョンのとき(認められないとき) true
// ----------------------------------------------------------------------
System::Boolean MasterEditorTWL::IsOldSDKVersion( u32 target, u32 criterion, System::Boolean isRelstepPrRc )
{
// SDKバージョンからメジャーバージョン/マイナーバージョン/relstepを抽出
System::Byte majorTar = (System::Byte)(0xff & (target >> 24));
System::Byte minorTar = (System::Byte)(0xff & (target >> 16));
System::UInt16 relstepTar = (System::UInt16)(0xffff & target);
System::Byte majorCri = (System::Byte)(0xff & (criterion >> 24));
System::Byte minorCri = (System::Byte)(0xff & (criterion >> 16));
System::UInt16 relstepCri = (System::UInt16)(0xffff & criterion);
if( majorTar < majorCri )
{
return true;
}
// メジャーが一致するときマイナーを判定
if( (majorTar == majorCri) && (minorTar < minorCri) )
{
return true;
}
// メジャーもマイナーも一致するときrelstepを判定
if( (majorTar == majorCri) && (minorTar == minorCri) && (relstepTar < relstepCri) )
{
if( isRelstepPrRc )
{
return true; // PR/RC/Releaseのとき
}
else if( !MasterEditorTWL::IsSDKVersionPR(relstepTar) && !MasterEditorTWL::IsSDKVersionRC(relstepTar) )
{
return true; // Release版のときのみ
}
}
return false;
}
// ----------------------------------------------------------------------
// SDKバージョンがPR版かどうか調べる
//
// @arg [in] 判定対象のSDKバージョン(SRLに含まれるもの)
//
// @ret PR版のとき true
// ----------------------------------------------------------------------
System::Boolean MasterEditorTWL::IsSDKVersionPR( u32 target )
{
System::UInt16 relstep = (System::UInt16)(0xffff & target);
if( (10000 <= relstep) && (relstep < 20000) )
{
return true;
}
return false;
}
// ----------------------------------------------------------------------
// SDKバージョンがRC版かどうか調べる
//
// @arg [in] 判定対象のSDKバージョン(SRLに含まれるもの)
//
// @ret PR版のとき true
// ----------------------------------------------------------------------
System::Boolean MasterEditorTWL::IsSDKVersionRC( u32 target )
{
System::UInt16 relstep = (System::UInt16)(0xffff & target);
if( (20000 <= relstep) && (relstep < 30000) )
{
return true;
}
return false;
}
// ----------------------------------------------------------------------
// src を base 単位に切り上げる
// ----------------------------------------------------------------------
System::UInt32 MasterEditorTWL::roundUp( const System::UInt32 src, const System::UInt32 base )
{
System::UInt32 div = src / base;
if( src % base )
{
div++;
}
return (div*base);
}

View File

@ -0,0 +1,210 @@
#pragma once
// 共用ライブラリ・クラスの宣言
#include <twl/types.h>
#include <cstring>
#include <cstdio>
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] バイト数
//
// @ret 文字列(単位つき)
//
System::String^ transSizeToString( const System::UInt32 size );
System::String^ transSizeToStringKB( const System::UInt32 size );
System::String^ transSizeToStringMB( const System::UInt32 size ); // 小数点表示
System::String^ transSizeToStringMB( const System::UInt32 size, const System::UInt32 decimals ); // 第2引数で小数点桁数を指定(それ以下の桁は切り上げ)
//
// 各レーティング団体の設定可能年齢を取得する
//
// @arg [in] 団体
//
cli::array<System::Byte>^ getOgnRatingAges( int ogn );
//
// 各レーティング団体の団体名を取得する
//
// @arg [in] 団体
//
System::String^ getOgnName( int ogn );
//
// リージョンに含まれる団体のリストを返す(不正なリージョンのときはnullptr)
//
// @arg [in] リージョン
//
System::Collections::Generic::List<int>^ getOgnListInRegion( u32 region );
//
// バイト列に特定のパターンが含まれるかどうかマッチングする
//
// @arg [in] テキスト
// [in] テキストの長さ
// [in] パターン
// [in] パターンの長さ
// [in] テキストの終端まで調べた時点でテキストが途中までマッチしていた場合を成功とみなすか
//
// @ret マッチしたテキストのインデックスをリストで返す。
//
System::Collections::Generic::List<u32>^ patternMatch(
const u8 *text, const u32 textLen, const u8 *pattern, const u32 patternLen, const System::Boolean enableLast );
//
// ファイルにバイト列のパターンが含まれるかどうかマッチングする
//
// @arg [in] マッチ対象となるファイルポインタ
// @arg [in] パターン
// @arg [in] パターンの長さ
//
// @ret マッチしたテキストのインデックスをリストで返す。
// 最後までマッチした場合のみ成功したとみなす。
//
System::Collections::Generic::List<u32>^ patternMatch( FILE *fp, const u8 *pattern, const u32 patternLen );
////
//// バイト列に特定のパターンが含まれるかどうかマッチングする (Boyer-Moore法)
////
//// @arg [in] テキスト
//// [in] テキストの長さ
//// [in] パターン
//// [in] パターンの長さ
//// [in] skipマップ(あらかじめ生成しておく)
////
//// @ret マッチしたテキストのインデックスをリストで返す。
////
//System::Collections::Generic::List<u32>^ patternMatchBM(
// const u8 *text, const int textLen, const u8 *pattern, const int patternLen, const int skip[] );
////
//// Boyer-Moore法のskipマップの生成
////
//// @arg [in] パターン
//// [in] パターンの長さ
//// [out] skipマップの格納先
////
//// @ret なし
////
//void makeSkipBM( const u8 *pattern, const int patternLen, int skip[] );
//
// XMLのルートードから指定した名前のタグを検索して返す
//
// @arg [in] XMLのルートード
// @arg [in] タグ名
//
// @ret 検索でマッチしたときノードを返す。ないときは nullptr。
// ただし、最初にマッチしたもののみ返す
//
System::Xml::XmlNode^ searchXmlNode( System::Xml::XmlElement ^root, System::String ^tag );
//
// タグを検索してそのテキストが指定したテキストと一致するか調べる
//
// @arg [in] XMLのルートード
// @arg [in] タグ名
// @arg [in] 値
//
// @ret 一致するときtrue。一致しないとき、タグが存在しないときはfalse。
//
System::Boolean isXmlEqual( System::Xml::XmlElement ^root, System::String ^tag, System::String ^val );
//
// タグを検索してそのテキストを返す
//
// @arg [in] XMLのルートード
// @arg [in] タグのXPath
//
// @ret テキストが存在するときそのテキストを返す。存在しないときnullptr。
//
System::String^ getXPathText( System::Xml::XmlElement ^root, System::String ^xpath );
//
// XMLにタグを追加する
//
// @arg [in] XMLドキュメント
// @arg [in] 親ノード
// @arg [in] タグ名
// @arg [in] テキスト
//
void appendXmlTag( System::Xml::XmlDocument ^doc, System::Xml::XmlElement ^parent,
System::String ^tag, System::String ^text );
//
// ビット数をカウントする
//
// @arg [in] 値
//
// @ret ビット数
//
u32 countBits( const u32 val );
//
// SDKバージョンを解読する(例 10203 -> "PR2 plus3")
//
System::String^ analyzeSDKVersion( System::UInt32 code );
//
// SDKバージョンの大小判定をする
//
// @arg [in] 判定対象のSDKバージョン(SRLに含まれるもの)
// @arg [in] 判定基準のSDKバージョン(設定ファイルに記述されるもの)
// @arg [in] Relstepの判定をPR/RCのときも判定するか(falseのときRelease版のみ)
//
// @ret 判定対象が基準よりも旧バージョンのとき(認められないとき) true
//
System::Boolean IsOldSDKVersion( u32 target, u32 criterion, System::Boolean isRelstepPrRc );
//
// SDKバージョンがPR版かどうか調べる
//
// @arg [in] 判定対象のSDKバージョン(SRLに含まれるもの)
//
// @ret PR版のとき true
//
System::Boolean IsSDKVersionPR( u32 target );
//
// SDKバージョンがRC版かどうか調べる
//
// @arg [in] 判定対象のSDKバージョン(SRLに含まれるもの)
//
// @ret PR版のとき true
//
System::Boolean IsSDKVersionRC( u32 target );
//
// src を base 単位に切り上げる
//
System::UInt32 roundUp( const System::UInt32 src, const System::UInt32 base );
} // end of namespace MasterEditorTWL

View File

@ -0,0 +1,20 @@

Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ResourceTransition", "ResourceTransition\ResourceTransition.vcproj", "{A8AE9F94-E10F-4962-B5F7-059FEA220583}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{A8AE9F94-E10F-4962-B5F7-059FEA220583}.Debug|Win32.ActiveCfg = Debug|Win32
{A8AE9F94-E10F-4962-B5F7-059FEA220583}.Debug|Win32.Build.0 = Debug|Win32
{A8AE9F94-E10F-4962-B5F7-059FEA220583}.Release|Win32.ActiveCfg = Release|Win32
{A8AE9F94-E10F-4962-B5F7-059FEA220583}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

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("ResourceTransition")];
[assembly:AssemblyDescriptionAttribute("")];
[assembly:AssemblyConfigurationAttribute("")];
[assembly:AssemblyCompanyAttribute("任天堂株式会社")];
[assembly:AssemblyProductAttribute("ResourceTransition")];
[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)];

View File

@ -0,0 +1,29 @@
===============================================================================
アプリケーション : ResourceTransition プロジェクトの概要
===============================================================================
この ResourceTransition アプリケーションは、AppWizard によって作成されました。
このファイルには、ResourceTransition アプリケーションを構成する各ファイルの
内容の概略が記述されています。
ResourceTransition.vcproj
これは、アプリケーション ウィザードで生成される VC++ プロジェクトのメインの
プロジェクト ファイルです。
ファイルを生成した Visual C++ のバージョン情報と、アプリケーション ウィザー
ドで選択したプラットフォーム、構成、およびプロジェクトの機能に関する情報が
記述されています。
ResourceTransition.cpp
これは、メインのアプリケーション ソース ファイルです。
AssemblyInfo.cpp
アセンブリ メタデータを変更するためのカスタム属性が含まれています。
///////////////////////////////////////////////////////////////////////////////
その他のメモ :
AppWizard では、"TODO:" を使用して、ユーザーが追加またはカスタマイズするソース
部分を示します。
///////////////////////////////////////////////////////////////////////////////

View File

@ -0,0 +1,55 @@
// ResourceTransition.cpp : メイン プロジェクト ファイルです。
#include "stdafx.h"
using namespace System;
#define ROOT_PATH "..\\"
int main(array<System::String ^> ^args)
{
// 作業ルートを引数からゲット
System::String ^root;
if( (args->Length <= 0) || (System::String::IsNullOrEmpty( args[0] )) )
{
root = gcnew System::String(ROOT_PATH); // ない場合はデフォルト
}
else
{
root = args[0];
if( !root->EndsWith( "\\" ) )
{
root += "\\";
}
}
Console::WriteLine( "Root path: " + root );
// 新しいフォルダ/jp/言語リソース.dll を jp/ に移す(コピー)
try
{
if( System::IO::File::Exists( root + "新しいフォルダ\\ja\\MasterEditorTWL.resources.dll" ) )
{
Console::WriteLine( "File Exists." );
if( !System::IO::Directory::Exists( root + "ja" ) )
{
System::IO::Directory::CreateDirectory( root + "ja" );
Console::WriteLine( "Create New Directory." );
}
System::IO::File::Copy( root + "新しいフォルダ\\ja\\MasterEditorTWL.resources.dll",
root + "ja\\MasterEditorTWL.resources.dll", true ); // 上書き
Console::WriteLine( "Copy Resource DLL." );
}
else
{
Console::WriteLine( "No File Exists." );
}
}
catch( System::Exception ^ex )
{
Console::WriteLine( "error: " + ex->Message );
}
//Console::ReadKey();
return 0;
}

View File

@ -0,0 +1,248 @@
<?xml version="1.0" encoding="shift_jis"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="9.00"
Name="ResourceTransition"
ProjectGUID="{A8AE9F94-E10F-4962-B5F7-059FEA220583}"
RootNamespace="ResourceTransition"
Keyword="ManagedCProj"
TargetFrameworkVersion="131072"
>
<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"
PreprocessorDefinitions="WIN32;_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="$(NoInherit)"
LinkIncremental="2"
GenerateDebugInformation="true"
AssemblyDebug="1"
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"
PreprocessorDefinitions="WIN32;NDEBUG"
RuntimeLibrary="2"
UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="$(NoInherit)"
LinkIncremental="1"
GenerateDebugInformation="true"
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.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=".\ResourceTransition.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>
</Filter>
<Filter
Name="ヘッダー ファイル"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath=".\resource.h"
>
</File>
<File
RelativePath=".\stdafx.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>

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,3 @@
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by app.rc

View File

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

View File

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

View File

@ -0,0 +1,70 @@
#!/usr/bin/perl
#=================================================================
# バナー文字を列挙したcsvからC言語の配列を生成するスクリプト
#=================================================================
use strict;
# バイナリの中身を1つの変数としてゲット
my $bin_size = -s $ARGV[0];
my $buf;
open(F, $ARGV[0]) or die "can not open file.\n";
binmode(F);
read(F, $buf, $bin_size);
close(F);
# 配列名となるリージョン名を指定
my $region = $ARGV[1] or die "argv[1] is region name.";
# 配列の中身を生成
my @codes;
my $num_of_codes=0;
my $offset = 0;
while ($offset < $bin_size) {
# 2バイト抜き出す
my $b = substr($buf, $offset, 2);
$offset += 2;
# 改行
my $suffix = ", ";
if ( (${num_of_codes}%16) == 15 ) {
$suffix = ",\n";
}
# バイナリを数値に変換してさらに文字列に変換
$codes[$num_of_codes++] = sprintf( "0x%04x", unpack("v*",$b) ) . $suffix;
}
# ヘッダ
my $header_format =<<'EOF';
#include "stdafx.h"
#include <twl/types.h>
#include <twl/os/common/format_rom.h>
#include <twl/os/common/ownerInfoEx.h>
#include "banner_char.h"
const int MasterEditorTWL::NumOf_BannerCharCodes_%1$s = %2$d;
const u16 MasterEditorTWL::BannerCharCodes_%1$s[%2$d] =
{
EOF
# フッタ
my $footer =<<'EOF';
};
// end of file
EOF
# 出力
my $header = sprintf ($header_format, $region, $num_of_codes);
printf STDOUT $header;
foreach my $code (@codes) {
printf STDOUT $code;
}
if( ($num_of_codes%16) != 0 ) {
printf STDOUT "\n";
}
printf STDOUT $footer;
# end of file

View File

@ -0,0 +1,68 @@
#!/usr/bin/perl
#=================================================================
# バナー文字を列挙したcsvからC言語の配列を生成するスクリプト
#=================================================================
use strict;
# 配列の中身を生成
my $region = "Undefined";
my @codes;
my $num_of_codes=0;
while (<STDIN>) {
chomp;
# コメントから始まる行はリージョン名
if ( /^\#/ ) {
s/^\#[\s]*//;
$region = $_;
} else {
# C言語の配列になるように"0x"をつける
my $prefix = "";
if ( !/^0x/ ) {
$prefix .= "0x";
}
my $suffix = ", ";
# 改行
if ( (${num_of_codes}%16) == 15 ) {
$suffix = ",\n";
}
$codes[$num_of_codes] = $prefix . $_ . $suffix;
$num_of_codes++;
}
}
# ヘッダ
my $header_format =<<'EOF';
#include "stdafx.h"
#include <twl/types.h>
#include <twl/os/common/format_rom.h>
#include <twl/os/common/ownerInfoEx.h>
#include "banner_char.h"
const int MasterEditorTWL::NumOf_BannerCharCodes_%1$s = %2$d;
const u16 MasterEditorTWL::BannerCharCodes_%1$s[%2$d] =
{
EOF
# フッタ
my $footer =<<'EOF';
};
// end of file
EOF
# 出力
my $header = sprintf ($header_format, $region, $num_of_codes);
printf STDOUT $header;
foreach my $code (@codes) {
printf STDOUT $code;
}
if( ($num_of_codes%16) != 0 ) {
printf STDOUT "\n";
}
printf STDOUT $footer;
# end of file

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<MasterEditorTWL>
<CompanyInfo>
<InputPerson2>N</InputPerson2>
</CompanyInfo>
<MasterEditorVersion>1.8</MasterEditorVersion>
</MasterEditorTWL>

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8" ?>
<init>
<!-- 非表示項目を表示したいときにはONを指定してください。-->
<visible>ON</visible>
<!-- SDKのバージョンのチェックをする場合にはONを指定してください。-->
<spcheck>ON</spcheck>
<!-- SDKバージョンの真値を指定してください。 -->
<sdk> <!-- TWL常駐モジュール -->
<major>5</major>
<minor>0</minor>
<relstep>30000</relstep>
</sdk>
<sdkNotStaticTWL> <!-- TWL常駐モジュール以外のモジュール -->
<major>5</major>
<minor>0</minor>
<relstep>30000</relstep>
</sdkNotStaticTWL>
<sdkNotStaticNTR> <!-- NTR常駐モジュール以外のモジュール -->
<major>4</major>
<minor>0</minor>
<relstep>30000</relstep>
</sdkNotStaticNTR>
</init>

View File

@ -0,0 +1,313 @@
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<title>TWL Error List</title>
<style type="text/css">
body {
font-family: "verdana";
font-size: 12px;
text-align: left;
}
div.game-title {
font-size: 16px;
font-weight: bold;
}
div.game-version {
font-size: 12px;
font-weight: bold;
}
div.index
{
font-size: 14px;
font-weight: bold;
text-decoration:underline;
text-underline:single;
margin-top: 24px;
margin-bottom: 10px;
}
div.spacer
{
font-size: 14px;
}
div.caption
{
font-size: 10px;
font-weight: bold;
}
div.path
{
font-size: 12px;
}
span.num-error
{
color: #FF0000;
font-size: 12px;
font-weight: bold;
}
span.num-normal
{
font-size: 12px;
font-weight: bold;
}
div.error
{
}
hr {
width: 1000px;
margin-left: 0;
}
tr {
text-align: left;
}
tr.even {
background-color: #FFFFFF;
}
tr.odd {
background-color: #D6D3CE;
}
th {
font-size: 12px;
background-color: #999999;
color: #000000;
padding-top: 2px;
padding-bottom: 2px;
}
th.label {
width: 400px;
}
th.value {
width: 300px;
}
th.type {
width: 300px;
}
th.version {
width: 400px;
}
th.is-static {
width: 300px;
}
th.publisher {
width: 200px;
}
th.name {
width: 400px;
}
th.note {
width: 400px;
}
th.errname {
width: 200px;
}
th.errtype {
width: 200px;
}
th.errrange {
width: 100px;
}
th.errmsg {
width: 600px;
}
td {
font-weight: normal;
font-size: 12px;
padding-top: 2px;
padding-bottom: 2px;
}
td.label {
width: 400px;
}
td.value {
width: 300px;
}
td.type {
width: 300px;
}
td.version {
width: 400px;
}
td.is-static {
width: 300px;
}
td.publisher {
width: 200px;
}
td.name {
width: 400px;
}
td.note {
width: 400px;
}
td.errname {
width: 200px;
}
td.errtype {
width: 200px;
}
td.errrange {
width: 100px;
}
td.errmsg {
width: 600px;
}
</style>
</head>
<body>
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<xsl:template match="twl-master-editor">
<xsl:apply-templates select="game" />
<xsl:apply-templates select="error-num-info" />
<div class="path">
<xsl:value-of select="path" />
</div>
<hr />
<xsl:apply-templates select="error-info" />
<xsl:apply-templates select="warning-info" />
<xsl:apply-templates select="error-caption-list" />
<hr />
<div class="footer">
generated on <xsl:apply-templates select="time-info" /> by MasterEditorTWL ver. <xsl:value-of select="@version" />
</div>
</xsl:template>
<!-- Title Info -->
<xsl:template match="game">
<div class="game-title">
<xsl:value-of select="title-name" />(<xsl:value-of select="game-code" />)
</div>
<div class="game-version">
version: <xsl:value-of select="rom-version" />
</div>
</xsl:template>
<!-- Each Section -->
<xsl:template match="error-info">
<div class="index"><xsl:value-of select="index" /></div>
<xsl:apply-templates select="error-list" />
<hr />
</xsl:template>
<xsl:template match="warning-info">
<div class="index"><xsl:value-of select="index" /></div>
<xsl:apply-templates select="warning-list" />
<hr />
</xsl:template>
<xsl:template match="error-num-info">
<xsl:choose>
<xsl:when test="@error-num &gt; 0">
<span class="num-error">
<xsl:value-of select="@error-title" /> : <xsl:value-of select="@error-num" />
</span>
</xsl:when>
<xsl:otherwise>
<span class="num-normal">
<xsl:value-of select="@error-title" /> : <xsl:value-of select="@error-num" />
</span>
</xsl:otherwise>
</xsl:choose>
,
<xsl:choose>
<xsl:when test="@warning-num &gt; 0">
<span class="num-error">
<xsl:value-of select="@warning-title" /> : <xsl:value-of select="@warning-num" />
</span>
</xsl:when>
<xsl:otherwise>
<span class="num-normal">
<xsl:value-of select="@warning-title" /> : <xsl:value-of select="@warning-num" />
</span>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="time-info">
<xsl:value-of select="@month" />&#160;<xsl:value-of select="@day" />, <xsl:value-of select="@year" />&#160;<xsl:value-of select="@time" />
</xsl:template>
<!-- Make the Error and Warning table -->
<xsl:template match="error-list">
<table cellspacing="0">
<tr>
<th class="errname">Item Name</th>
<th class="errtype">Type</th>
<th class="errmsg">Reason</th>
</tr>
<xsl:apply-templates />
</table>
</xsl:template>
<xsl:template match="error">
<xsl:if test="(@num mod 2)=1">
<tr class="odd">
<td class="errname"><div class="error"><xsl:value-of select="errname" /></div></td>
<td class="errtype"><div class="error"><xsl:value-of select="errtype" /></div></td>
<td class="errmsg"><div class="error"><xsl:value-of select="errmsg" /></div></td>
</tr>
</xsl:if>
<xsl:if test="(@num mod 2)=0">
<tr class="even">
<td class="errname"><div class="error"><xsl:value-of select="errname" /></div></td>
<td class="errtype"><div class="error"><xsl:value-of select="errtype" /></div></td>
<td class="errmsg"><div class="error"><xsl:value-of select="errmsg" /></div></td>
</tr>
</xsl:if>
</xsl:template>
<xsl:template match="warning-list">
<table cellspacing="0">
<tr>
<th class="errname">Item Name</th>
<th class="errtype">Type</th>
<th class="errmsg">Reason</th>
</tr>
<xsl:apply-templates />
</table>
</xsl:template>
<xsl:template match="warning">
<xsl:if test="(@num mod 2)=1">
<tr class="odd">
<td class="errname"><div class="error"><xsl:value-of select="errname" /></div></td>
<td class="errtype"><div class="error"><xsl:value-of select="errtype" /></div></td>
<td class="errmsg"><div class="error"><xsl:value-of select="errmsg" /></div></td>
</tr>
</xsl:if>
<xsl:if test="(@num mod 2)=0">
<tr class="even">
<td class="errname"><div class="error"><xsl:value-of select="errname" /></div></td>
<td class="errtype"><div class="error"><xsl:value-of select="errtype" /></div></td>
<td class="errmsg"><div class="error"><xsl:value-of select="errmsg" /></div></td>
</tr>
</xsl:if>
</xsl:template>
<xsl:template match="error-caption-list">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="error-caption">
<div class="caption"><xsl:value-of select="text"/></div>
</xsl:template>
</xsl:stylesheet>

View File

@ -0,0 +1,135 @@
<?xml version="1.0" encoding="UTF-8"?>
<message>
<!-- Begin messages appended in ver1.7-->
<E_JapaneseFont>Japanese text display is only supported on PCs that have the MS PGothic Japanese font installed.</E_JapaneseFont>
<!-- End messages appended in ver1.7-->
<!-- common -->
<OverWrite>{0} already exists. Overwrite data?</OverWrite>
<!-- Start Up -->
<E_Start_InitExist>Cannot find the configuration file.</E_Start_InitExist>
<E_Start_InitOpen>Cannot open the configuration file.</E_Start_InitOpen>
<E_Start_TmpExist>Temporary file already exists. Delete this data.</E_Start_TmpExist>
<E_Start_AppendExist>Cannot find the extended configuration file.</E_Start_AppendExist>
<E_Start_AppendOpen>Cannot open the extended configuration file</E_Start_AppendOpen>
<E_Start_SDK>Cannot read the SDK version in the configuration file. </E_Start_SDK>
<!-- Load Rom -->
<E_LoadRom_Sign>Illegal ROM data. Either this is not TWL-compatible or TWL-exclusive ROM data, or the ROM data may have been modified.</E_LoadRom_Sign>
<E_LoadRom_Platform>This tool is for TWL-compatible ROMs only. Cannot read a ROM that does not support TWL, such as a NTR-only ROM.</E_LoadRom_Platform>
<E_LoadRom_Default>Failed to read ROM data file. Read ROM data again.</E_LoadRom_Default>
<E_LoadRom_CRC>ROM data CRC calculation failed. ROM data read canceled.</E_LoadRom_CRC>
<E_LoadRom_Exist>Cannot read because the ROM data file does not exist.</E_LoadRom_Exist>
<E_LoadRom_Tad>The reading of the TAD file has failed.</E_LoadRom_Tad>
<!-- Create Submission Set -->
<E_SaveSet_Empty>ROM data file has not been read.</E_SaveSet_Empty>
<E_SaveSet_Setting>Submission data cannot be created due to illegal settings.</E_SaveSet_Setting>
<E_SaveSet_Input>Submission data cannot be created due to insufficient input information.</E_SaveSet_Input>
<SaveSet_Name>The following submission files are all created at one time.
{0} (Master ROM)
{1} (Master ROM submission checklist)
{2} (List of middleware)
{3} (Print version of list of middleware)
</SaveSet_Name>
<SaveSet_Folder>Select a save-to folder.</SaveSet_Folder>
<E_SaveSet_FolderCancel>Submission data is not created because folder selection has been canceled.</E_SaveSet_FolderCancel>
<E_SaveSet_OWCancel>Submission data is not created because file overwrite has been canceled.</E_SaveSet_OWCancel>
<E_SaveSet_FileDefault>Failed to create Master ROM. Halted during creation, so some files were not created.
</E_SaveSet_FileDefault>
<E_SaveSet_FileOpen>Master ROM file not created due to failure to open the output file.</E_SaveSet_FileOpen>
<E_SaveSet_FileRead>Master ROM file not created due to failure to read the file.</E_SaveSet_FileRead>
<E_SaveSet_FileWrite>Master ROM file not created due to failure to write to the output file.</E_SaveSet_FileWrite>
<E_SaveSet_FileCopy>Master ROM file not created due to failure to copy the input ROM data file.</E_SaveSet_FileCopy>
<E_SaveSet_FileExist>Master ROM file not created because the output file cannot be created if the input ROM data file does not exist in the source folder.</E_SaveSet_FileExist>
<E_SaveSet_FileSign>Master ROM file not created due to failure to calculate the digital signature of the output file.</E_SaveSet_FileSign>
<E_SaveSet_CRC>Failed to calculate CRC. Halted during creation, so some files were not created.</E_SaveSet_CRC>
<E_SaveSet_MWList>Could not create middleware list. Halted during creation, so some files were not created.</E_SaveSet_MWList>
<E_SaveSet_Exception>Failed to create Master ROM. Halted during creation, so some files were not created.
Exception:{0}
{1}</E_SaveSet_Exception>
<E_SaveSet_SheetTemplate>Failed to create submission checklist because submission checklist template could not be opened.</E_SaveSet_SheetTemplate>
<E_SaveSet_SheetOpen>Could not write data to submission checklist. Check that a file of the same name is not already open.</E_SaveSet_SheetOpen>
<E_SaveSet_SheetDefault>Failed to create submission checklist.</E_SaveSet_SheetDefault>
<SaveSet_Success>Succeeded in creating submission data.</SaveSet_Success>
<!-- Create Master Rom -->
<E_SaveRom_Empty>Could not create Master ROM because the ROM data file has not been read.</E_SaveRom_Empty>
<E_SaveRom_Setting>Could not create Master ROM due to illegal settings.</E_SaveRom_Setting>
<SaveRom_Name>This procedure creates the following files.
{0} (Master ROM)</SaveRom_Name>
<SaveRom_Folder>Select a save-to folder.</SaveRom_Folder>
<E_SaveRom_FolderCancel>The Master ROM was not created because folder selection has been canceled.</E_SaveRom_FolderCancel>
<E_SaveRom_OWCancel>Creation of Master ROM was canceled.</E_SaveRom_OWCancel>
<E_SaveRom_FileDefault>Failed to create Master ROM.
</E_SaveRom_FileDefault>
<E_SaveRom_Exception>Failed to create Master ROM.
Exception:{0}
{1}</E_SaveRom_Exception>
<SaveRom_Success>Succeeded in creating Master ROM.</SaveRom_Success>
<E_SaveRom_CRC>Failed to calculate CRC.</E_SaveRom_CRC>
<!-- Create MiddleWare List -->
<E_MWList_Empty>ROM data file has not been read.</E_MWList_Empty>
<E_MWList_Default>Failed to create the middleware list.</E_MWList_Default>
<MWList_Success>Succeeded in creating middleware list.</MWList_Success>
<!-- Export Error List -->
<E_ErrList_Empty>ROM data file has not been read.</E_ErrList_Empty>
<E_ErrList_Default>Failed to create the error list.</E_ErrList_Default>
<ErrList_Success>Succeeded in creating error list.</ErrList_Success>
<!-- ROM Info List -->
<E_RomInfoList_Empty>ROM data file has not been read.</E_RomInfoList_Empty>
<E_RomInfoList_Default>Failed to create the ROM info list.</E_RomInfoList_Default>
<RomInfoList_Success>Succeeded in creating ROM info list.</RomInfoList_Success>
<!-- Save Temp File -->
<E_SaveTemp>Failed to save temporary information.</E_SaveTemp>
<!-- Load Temp File -->
<E_LoadTemp>Failed to read temporary information.</E_LoadTemp>
<!-- Check -->
<TextBoxInput>Insufficient input: Input data.</TextBoxInput>
<NumRangeInput>Insufficient input: Illegal value.</NumRangeInput>
<ComboBoxInput>Insufficient input: Select data.</ComboBoxInput>
<RadioButtonInput>Insufficient input: Select data.</RadioButtonInput>
<LabelProductName>Product Name</LabelProductName>
<LabelProductCode>Product Code</LabelProductCode>
<LabelCountryCode>Product Code(Region Code)</LabelCountryCode>
<LabelProductNameForeign>Product Name(Foreign Version)</LabelProductNameForeign>
<LabelProductCodeForeign>Product Code(Foreign Version)</LabelProductCodeForeign>
<LabelUsage>Purpose</LabelUsage>
<LabelBackup>Backup Memory</LabelBackup>
<LabelPerson1>Contact1</LabelPerson1>
<LabelFurigana1>Furigana</LabelFurigana1>
<LabelCompany1>Company(Contact1)</LabelCompany1>
<LabelDepart1>Dept.(Contact1)</LabelDepart1>
<LabelTel1>TEL(Contact1)</LabelTel1>
<LabelMail1>e-mail(Contact1)</LabelMail1>
<LabelPerson2>Contact2</LabelPerson2>
<LabelFurigana2>Furigana</LabelFurigana2>
<LabelCompany2>Company(Contact2)</LabelCompany2>
<LabelDepart2>Dept.(Contact2)</LabelDepart2>
<LabelTel2>TEL(Contact2)</LabelTel2>
<LabelMail2>e-mail(Contact2)</LabelMail2>
<LabelRegion>Market</LabelRegion>
<LabelRating>Rating</LabelRating>
<RatingInput>{0}: Select data.</RatingInput>
<RatingPendingSelect>{0}: A "Rating Pending" has been specified. Re-submit when examination is finished.</RatingPendingSelect>
<RatingUnnecessarySelect>Selected if rating does not need to be shown. This choice can only be selected when the software is a kind of tool and not a game. Contact support@noa.com to determine if the rating does not need to be displayed.</RatingUnnecessarySelect>
<PrivateSaveDataPurposeTitle>Private Save Data Usage</PrivateSaveDataPurposeTitle>
<PrivateSaveDataPurposeMsg>If you must use the private save data memory region, enter your intended use and reasons for use in the appropriate entry fields.</PrivateSaveDataPurposeMsg>
</message>

View File

@ -0,0 +1,135 @@
<?xml version="1.0" encoding="UTF-8"?>
<message>
<!-- 英訳依頼 ver1.7 追加メッセージ ここから -->
<E_JapaneseFont> Pゴシック (MS PGothic) フォントがインストールされていないPCでの日本語表示には対応していません。</E_JapaneseFont>
<!-- 英訳依頼 ver1.7 追加メッセージ ここまで -->
<!-- common -->
<OverWrite>{0} はすでに存在します。上書きしますか?</OverWrite>
<!-- Start Up -->
<E_Start_InitExist>設定ファイルが見つかりません。</E_Start_InitExist>
<E_Start_InitOpen>設定ファイルを開くことができませんでした。</E_Start_InitOpen>
<E_Start_TmpExist>本プログラムで作成する一時ファイルと同名のファイルが存在します。このファイルを削除します。</E_Start_TmpExist>
<E_Start_AppendExist>追加設定ファイルが見つかりません。</E_Start_AppendExist>
<E_Start_AppendOpen>追加設定ファイルを開くことができませんでした。</E_Start_AppendOpen>
<E_Start_SDK>設定ファイル中のSDKバージョンが読み込めませんでした。バージョンは0とみなされます。</E_Start_SDK>
<!-- Load Rom -->
<E_LoadRom_Sign>不正なROMデータです。TWL対応/専用ROMでないかROMデータが改ざんされている可能性があります。</E_LoadRom_Sign>
<E_LoadRom_Platform>本ツールはTWL用です。NTR専用ROMなどのTWL非対応ROMを読み込むことはできません。</E_LoadRom_Platform>
<E_LoadRom_Default>ROMデータファイルの読み込みに失敗しました。再度ROMデータを読み込ませてください。</E_LoadRom_Default>
<E_LoadRom_CRC>ROMデータのCRC計算に失敗しました。ROMデータの読み込みはキャンセルされました。</E_LoadRom_CRC>
<E_LoadRom_Exist>ファイルが存在しないので読み込むことができません。</E_LoadRom_Exist>
<E_LoadRom_Tad>TADファイルの読み込みに失敗しました。</E_LoadRom_Tad>
<!-- Create Submission Set -->
<E_SaveSet_Empty>ROMデータファイルが読み込まれていません。</E_SaveSet_Empty>
<E_SaveSet_Setting>不正な設定があるため提出データを作成できません。</E_SaveSet_Setting>
<E_SaveSet_Input>入力情報に不足があるため提出データを作成できません。</E_SaveSet_Input>
<SaveSet_Name>以下の提出ファイルが一度に作成されます。
{0} (マスターROM)
{1} (マスターROM提出確認書)
{2} (ミドルウェア一覧)
{3} (ミドルウェア一覧 印刷用)
</SaveSet_Name>
<SaveSet_Folder>保存先フォルダを選択してください。</SaveSet_Folder>
<E_SaveSet_FolderCancel>フォルダの選択がキャンセルされましたので提出データ一式は作成されません。</E_SaveSet_FolderCancel>
<E_SaveSet_OWCancel>ファイルの上書きがキャンセルされましたので提出データ一式は作成されません。</E_SaveSet_OWCancel>
<E_SaveSet_FileDefault>マスターROMの作成に失敗しました。作成を中止するため一部のファイルは作成されません。
</E_SaveSet_FileDefault>
<E_SaveSet_FileOpen>原因:出力ファイルのオープンに失敗しました。</E_SaveSet_FileOpen>
<E_SaveSet_FileRead>原因:ファイルの読み込みに失敗しました。</E_SaveSet_FileRead>
<E_SaveSet_FileWrite>原因:出力ファイルへの書き出しに失敗しました。</E_SaveSet_FileWrite>
<E_SaveSet_FileCopy>原因:入力ROMデータファイルのコピーに失敗しました。</E_SaveSet_FileCopy>
<E_SaveSet_FileExist>原因:入力ROMデータファイルが元のフォルダに存在しないとき出力ファイルを作成できません。</E_SaveSet_FileExist>
<E_SaveSet_FileSign>原因:出力ファイルのディジタル署名の計算に失敗しました。</E_SaveSet_FileSign>
<E_SaveSet_CRC>CRCの計算に失敗しました。作成を中止するため一部のファイルは作成されません。</E_SaveSet_CRC>
<E_SaveSet_MWList>ミドルウェアのリストが作成できませんでした。作成を中止するため一部のファイルは作成されません。</E_SaveSet_MWList>
<E_SaveSet_Exception>マスターROMの作成に失敗しました。作成を中止するため一部のファイルは作成されません。
例外:{0}
{1}</E_SaveSet_Exception>
<E_SaveSet_SheetTemplate>提出確認書のテンプレートが開けなかったため、提出確認書の作成に失敗しました。</E_SaveSet_SheetTemplate>
<E_SaveSet_SheetOpen>提出確認書にデータを書き込みできませんでした。同名ファイルがすでに開かれていないかご確認ください。</E_SaveSet_SheetOpen>
<E_SaveSet_SheetDefault>提出確認書の作成に失敗しました。</E_SaveSet_SheetDefault>
<SaveSet_Success>提出データ一式の作成に成功しました。</SaveSet_Success>
<!-- Create Master Rom -->
<E_SaveRom_Empty>ROMデータファイルが読み込まれていませんので、マスターROMの作成ができません。</E_SaveRom_Empty>
<E_SaveRom_Setting>不正な設定があるためマスターROMの作成ができません。</E_SaveRom_Setting>
<SaveRom_Name>以下のファイルが作成されます。
{0} (マスターROM)</SaveRom_Name>
<SaveRom_Folder>保存先フォルダを選択してください。</SaveRom_Folder>
<E_SaveRom_FolderCancel>フォルダの選択がキャンセルされましたのでマスターROMは作成されません。</E_SaveRom_FolderCancel>
<E_SaveRom_OWCancel>ファイルの上書きがキャンセルされましたのでマスターROMは作成されません。</E_SaveRom_OWCancel>
<E_SaveRom_FileDefault>マスターROMの作成に失敗しました。
</E_SaveRom_FileDefault>
<E_SaveRom_Exception>マスターROMの作成に失敗しました。
例外:{0}
{1}</E_SaveRom_Exception>
<SaveRom_Success>マスターROMの作成に成功しました。</SaveRom_Success>
<E_SaveRom_CRC>CRCの計算に失敗しました。</E_SaveRom_CRC>
<!-- Create MiddleWare List -->
<E_MWList_Empty>ROMデータファイルが読み込まれていません。</E_MWList_Empty>
<E_MWList_Default>ミドルウェアリストの作成に失敗しました。</E_MWList_Default>
<MWList_Success>ミドルウェアリストの作成に成功しました。</MWList_Success>
<!-- Export Error List -->
<E_ErrList_Empty>ROMデータファイルが読み込まれていません。</E_ErrList_Empty>
<E_ErrList_Default>エラーリストの作成に失敗しました。</E_ErrList_Default>
<ErrList_Success>エラーリストの作成に成功しました。</ErrList_Success>
<!-- ROM Info List -->
<E_RomInfoList_Empty>ROMデータファイルが読み込まれていません。</E_RomInfoList_Empty>
<E_RomInfoList_Default>ROM情報リストの作成に失敗しました。</E_RomInfoList_Default>
<RomInfoList_Success>ROM情報リストの作成に成功しました。</RomInfoList_Success>
<!-- Save Temp File -->
<E_SaveTemp>一時情報の保存に失敗しました。</E_SaveTemp>
<!-- Load Temp File -->
<E_LoadTemp>一時情報の読み込みに失敗しました。</E_LoadTemp>
<!-- Check -->
<TextBoxInput>入力漏れ: 入力してください。</TextBoxInput>
<NumRangeInput>入力漏れ: 値が不正です。</NumRangeInput>
<ComboBoxInput>入力漏れ: 選択してください。</ComboBoxInput>
<RadioButtonInput>入力漏れ: 選択してください。</RadioButtonInput>
<LabelProductName>製品名</LabelProductName>
<LabelProductCode>製品コード</LabelProductCode>
<LabelCountryCode>製品コード(仕向地仕様コード)</LabelCountryCode>
<LabelProductNameForeign>製品名(海外版)</LabelProductNameForeign>
<LabelProductCodeForeign>製品コード(海外版)</LabelProductCodeForeign>
<LabelUsage>用途</LabelUsage>
<LabelBackup>バックアップメモリ</LabelBackup>
<LabelPerson1>ご氏名(担当者1)</LabelPerson1>
<LabelFurigana1>ふりがな(担当者1)</LabelFurigana1>
<LabelCompany1>貴社名(担当者1)</LabelCompany1>
<LabelDepart1>部署名(担当者1)</LabelDepart1>
<LabelTel1>TEL(担当者1)</LabelTel1>
<LabelMail1>e-mail(担当者1)</LabelMail1>
<LabelPerson2>ご氏名(担当者2)</LabelPerson2>
<LabelFurigana2>ふりがな(担当者2)</LabelFurigana2>
<LabelCompany2>貴社名(担当者2)</LabelCompany2>
<LabelDepart2>部署名(担当者2)</LabelDepart2>
<LabelTel2>TEL(担当者2)</LabelTel2>
<LabelMail2>e-mail(担当者2)</LabelMail2>
<LabelRegion>リージョン</LabelRegion>
<LabelRating>レーティング</LabelRating>
<RatingInput>{0}: 選択してください。</RatingInput>
<RatingPendingSelect>{0}: 審査中であると指定されています。審査が決まりしだい、再提出してください。</RatingPendingSelect>
<RatingUnnecessarySelect>レーティング表示が不要であると設定されています。この指定は、ソフトがゲームでないツール類のときのみ選択可能です。レーティング表示が不要であるかどうかは弊社窓口にご相談ください。</RatingUnnecessarySelect>
<PrivateSaveDataPurposeTitle>Privateセーブデータの用途</PrivateSaveDataPurposeTitle>
<PrivateSaveDataPurposeMsg>Privateセーブデータを使用する場合には、用途欄に理由、用途を明記してください。</PrivateSaveDataPurposeMsg>
</message>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8" ?>
<init>
<rw>w</rw>
<access>
<normalJump>Permit</normalJump>
</access>
<shared2>
<size0>2097152</size0>
</shared2>
<reserved-list>
<reserved><begin>78</begin><end>7f</end></reserved>
<reserved><begin>160</begin><end>17f</end></reserved>
<reserved><begin>15</begin><end>1b</end></reserved>
<reserved><begin>99</begin><end>bf</end></reserved>
<reserved><begin>1bc</begin><end>1be</end></reserved>
<reserved><begin>240</begin><end>2ef</end></reserved>
<reserved><begin>378</begin><end>39f</end></reserved>
<reserved><begin>3b4</begin><end>f7f</end></reserved>
</reserved-list>
</init>

View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8" ?>
<init>
<!-- 非公開情報の記述方法を忘れないようにメモしておく -->
<rw>w</rw>
<access>
<!-- <shared2>0,1</shared2> -->
<!-- <normalJump>Permit</normalJump> -->
</access>
<shared2>
<size0>2097152</size0>
</shared2>
<reserved-list>
<reserved><begin>78</begin><end>7f</end></reserved>
<reserved><begin>160</begin><end>17f</end></reserved>
<reserved><begin>15</begin><end>1b</end></reserved>
<reserved><begin>99</begin><end>bf</end></reserved>
<reserved><begin>1bc</begin><end>1be</end></reserved>
<reserved><begin>240</begin><end>2ef</end></reserved>
<reserved><begin>378</begin><end>39f</end></reserved>
<reserved><begin>3b4</begin><end>f7f</end></reserved>
</reserved-list>
</init>

View File

@ -0,0 +1,106 @@
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<title>TWL Middleware List</title>
<style type="text/css">
body {
font-family: "verdana";
font-size: 12px;
text-align: left;
}
div.game-title {
font-size: 16px;
font-weight: bold;
}
div.game-version {
font-size: 12px;
font-weight: bold;
}
hr {
width: 1000px;
margin-left: 0;
}
tr {
text-align: left;
}
th {
font-size: 12px;
background-color: #D6D3CE;
color: black;
}
th.publisher {
width: 200px;
}
th.name {
width: 400px;
}
th.note {
width: 400px;
}
td {
font-weight: normal;
font-size: 12px;
}
td.publisher {
width: 200px;
}
td.name {
width: 400px;
}
td.note {
width: 400px;
}
</style>
</head>
<body>
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<xsl:template match="twl-master-editor">
<xsl:apply-templates select="game" />
<hr />
<xsl:apply-templates select="middleware-list" />
<hr />
<div class="footer">
generated by MasterEditorTWL ver. <xsl:value-of select="@version" />
</div>
</xsl:template>
<xsl:template match="game">
<div class="game-title">
<xsl:value-of select="product-name" />(<xsl:value-of select="game-code" />)
</div>
<div class="game-version">
version: <xsl:value-of select="rom-version" />-<xsl:value-of select="submit-version" />
</div>
</xsl:template>
<xsl:template match="middleware-list">
<table cellspacing="0">
<tr>
<th class="publisher">Publisher</th>
<th class="name">Middleware Name</th>
<th class="note">Note</th>
</tr>
<xsl:apply-templates />
</table>
</xsl:template>
<xsl:template match="middleware">
<tr>
<td class="publisher"><xsl:value-of select="publisher" /></td>
<td class="name"><xsl:value-of select="name" /></td>
<td class="note"><xsl:value-of select="note" /></td>
</tr>
</xsl:template>
</xsl:stylesheet>

View File

@ -0,0 +1,106 @@
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet id="stylesheet" version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<title>TWL Middleware List</title>
<style type="text/css">
body {
font-family: "verdana";
font-size: 12px;
text-align: left;
}
div.game-title {
font-size: 16px;
font-weight: bold;
}
div.game-version {
font-size: 12px;
font-weight: bold;
}
hr {
width: 1000px;
margin-left: 0;
}
tr {
text-align: left;
}
th {
font-size: 12px;
background-color: #D6D3CE;
color: black;
}
th.publisher {
width: 200px;
}
th.name {
width: 400px;
}
th.note {
width: 400px;
}
td {
font-weight: normal;
font-size: 12px;
}
td.publisher {
width: 200px;
}
td.name {
width: 400px;
}
td.note {
width: 400px;
}
</style>
</head>
<body>
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<xsl:template match="twl-master-editor">
<xsl:apply-templates select="game" />
<hr />
<xsl:apply-templates select="middleware-list" />
<hr />
<div class="footer">
generated by MasterEditorTWL ver. <xsl:value-of select="@version" />
</div>
</xsl:template>
<xsl:template match="game">
<div class="game-title">
<xsl:value-of select="product-name" />(<xsl:value-of select="game-code" />)
</div>
<div class="game-version">
version: <xsl:value-of select="rom-version" />-<xsl:value-of select="submit-version" />
</div>
</xsl:template>
<xsl:template match="middleware-list">
<table cellspacing="0">
<tr>
<th class="publisher">Publisher</th>
<th class="name">Middleware Name</th>
<th class="note">Note</th>
</tr>
<xsl:apply-templates />
</table>
</xsl:template>
<xsl:template match="middleware">
<tr>
<td class="publisher"><xsl:value-of select="publisher" /></td>
<td class="name"><xsl:value-of select="name" /></td>
<td class="note"><xsl:value-of select="note" /></td>
</tr>
</xsl:template>
</xsl:stylesheet>

View File

@ -0,0 +1,165 @@
<?xml version="1.0" encoding="UTF-8" ?>
<middleware-name-list>
<version>1.6</version>
<middleware>
<publisher>MEI</publisher>
<code>libASR</code>
<note-j>音声認識エンジン for NINTENDO DS</note-j>
<note-e>Voice Recognition Library</note-e>
</middleware>
<middleware>
<publisher>MEI</publisher>
<code>ASR</code>
<note-j>音声認識エンジン for NINTENDO DS</note-j>
<note-e>Voice Recognition Library</note-e>
</middleware>
<middleware>
<publisher>Panasonic</publisher>
<code>ASR</code>
<note-j>音声認識エンジン for NINTENDO DS</note-j>
<note-e>Voice Recognition Library</note-e>
</middleware>
<middleware>
<publisher>Panasonic</publisher>
<code>libASR</code>
<note-j>音声認識エンジン for NINTENDO DS</note-j>
<note-e>Voice Recognition Library</note-e>
</middleware>
<middleware>
<publisher>Actimagine</publisher>
<code>VX</code>
<note-j>VX MiddleWare for NINTENDO DS</note-j>
<note-e>VX MiddleWare</note-e>
</middleware>
<middleware>
<publisher>NINTENDO</publisher>
<code>DWC</code>
<note-j>TWL-DWC</note-j>
<note-e>TWL-DWC</note-e>
</middleware>
<middleware>
<publisher>NINTENDO</publisher>
<code>WiFi</code>
<note-j>TWL-WiFi</note-j>
<note-e>TWL Wi-Fi Library</note-e>
</middleware>
<middleware>
<publisher>MEI</publisher>
<code>libHWR_FULL</code>
<note-j>手書き認識ライブラリ</note-j>
<note-e>HandWrite Recognition</note-e>
</middleware>
<middleware>
<publisher>Panasonic</publisher>
<code>libHWR_FULL</code>
<note-j>手書き認識ライブラリ</note-j>
<note-e>HandWrite Recognition</note-e>
</middleware>
<middleware>
<publisher>Zi Corporation</publisher>
<code>DLTLIB</code>
<note-j>Decuma手書文字認識ライブラリ日本語版 for NINTENDO DS</note-j>
<note-e>Handwriting Recognition Library Japanese</note-e>
</middleware>
<middleware>
<publisher>Zi Corporation</publisher>
<code>SCRLIB</code>
<note-j>Decuma手書文字認識ライブラリ英語版 for NINTENDO DS</note-j>
<note-e>Handwriting Recognition Library</note-e>
</middleware>
<middleware>
<publisher>Zi Corporation</publisher>
<code>MCRLIB</code>
<note-j>Decuma手書文字認識ライブラリ英語版 for NINTENDO DS</note-j>
<note-e>Handwriting Recognition Library</note-e>
</middleware>
<middleware>
<publisher>JUSTSYSTEM</publisher>
<code>ATOK</code>
<note-j>DS用ATOKライブラリ</note-j>
<note-e>ATOK Library</note-e>
</middleware>
<middleware>
<publisher>Abiosso</publisher>
<code>VoiceChat</code>
<note-j>VoiceChatライブラリ for NINTENDO DS</note-j>
<note-e>VoiceChat Library</note-e>
</middleware>
<middleware>
<publisher>SHARP</publisher>
<code>SHTTS</code>
<note-j>SHARP音声合成ライブラリ</note-j>
<note-e>Voice Synthesis Library</note-e>
</middleware>
<middleware>
<publisher>ACCESS</publisher>
<code>NFC</code>
<note-j>NetFront ブラウザコンポーネント HTTP/HTTPSプロトコル</note-j>
<note-e>NetFront Browser for DS HTTP/HTTPS</note-e>
</middleware>
<middleware>
<publisher>ACCESS</publisher>
<code>NFB</code>
<note-j>NetFront ブラウザコンポーネント</note-j>
<note-e>NetFront Browser for DS</note-e>
</middleware>
<middleware>
<publisher>TMC</publisher>
<code>MP3Decoder_</code>
<note-j>MP3コーデックライブラリ</note-j>
<note-e>MP3 Decoder</note-e>
</middleware>
<middleware>
<publisher>Actimagine</publisher>
<code>Mobiclip</code>
<note-j>Mobiclip Middleware for NINTENDO DS</note-j>
<note-e>Mobiclip Middleware</note-e>
</middleware>
<middleware>
<publisher>OKI</publisher>
<code>FSE</code>
<note-j>TWL用 顔認識ライブラリ</note-j>
<note-e>Face Recognition</note-e>
</middleware>
<middleware>
<publisher>TOSHIBA</publisher>
<code>SPConv</code>
<note-j>スピーチコンバータ for DS</note-j>
<note-e>Sound Playback Speed Conversion</note-e>
</middleware>
<middleware>
<publisher>NINTENDO</publisher>
<code>M4A</code>
<note-j>MPEG4Systems Demux ライブラリ</note-j>
<note-e>MPEG 4 Demux</note-e>
</middleware>
<middleware>
<publisher>NINTENDO</publisher>
<code>AAC-LC</code>
<note-j>AAC-LC Decoder ライブラリ</note-j>
<note-e>AAC Decoder</note-e>
</middleware>
</middleware-name-list>

View File

@ -0,0 +1,777 @@
<?xml version="1.0" encoding="UTF-8"?>
<message>
<!-- 英訳依頼 ここから (ver.1.8 追加メッセージ その2) -->
<!-- LIMITED Card -->
<LimitedCard53>
<name>カードアプリのLIMITED条件</name>
<sentence>カードアプリをLIMITED版として作成する場合には、TwlSDK 5.3 patch 1 以降を使用してください。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</LimitedCard53>
<LimitedCard52>
<name>カードアプリのLIMITED条件</name>
<sentence>カードアプリをLIMITED版として作成する場合には、TwlSDK 5.2 patch 3 以降を使用してください。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</LimitedCard52>
<!-- TCL -->
<TclDeletePicture53>
<name>写真データベースアクセス</name>
<sentence>TwlSDK 5.3 patch 3 以前のSDKを使用して作成されたソフトでは、TCL_DeletePicture()関数の使用は禁止されています。ソフト内でTCL_DeletePicture()関数を使用していないかを確認してください。もし上記の関数を使用していない場合、本警告を無視していただいて結構です。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</TclDeletePicture53>
<TclDeletePicture52>
<name>写真データベースアクセス</name>
<sentence>TwlSDK 5.2 patch 4 以前のSDKを使用して作成されたソフトでは、TCL_DeletePicture()関数の使用は禁止されています。ソフト内でTCL_DeletePicture()関数を使用していないかを確認してください。もし上記の関数を使用していない場合、本警告を無視していただいて結構です。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</TclDeletePicture52>
<!-- DWC -->
<DwcDebug>
<name>DWCライブラリ</name>
<sentence>開発用サーバにアクセスするためのライブラリが使用されています。製品用サーバへアクセスするためのライブラリを使用してください。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</DwcDebug>
<!-- 英訳依頼 ここまで -->
<!-- 英訳依頼 ここから (ver.1.8 追加メッセージ) -->
<!-- TWL Rom Info -->
<RomStartAddress>
<name>ロード先アドレス</name>
<sentence>プログラムのロード先アドレスは、0x02004000以降でなければなりません。LSFファイルの "ADDRESS_STATIC" の値、もしくは CodeWarrior for DSi の設定を確認してください。</sentence>
<begin>28</begin><end>2b</end><modify>False</modify><affect>True</affect>
</RomStartAddress>
<DigestArea>
<name>ダイジェスト</name>
<sentence>ファイルサイズがダイジェストの対象範囲よりも小さくなっています。ROM末尾のパディングやROMの一部が削除されている可能性があります。</sentence>
<begin>1e0</begin><end>1ef</end><modify>False</modify><affect>True</affect>
</DigestArea>
<!-- For China -->
<ChinaAllRatingFree>
<name>レーティング(中国版対応)</name>
<sentence>中国にはレーティング審査団体が存在しませんので、中国向けソフトに対しては、各審査団体のレーティング値を設定する必要はありません。(自動的にマスターエディタが値をセットしますので、本警告を無視していただいてかまいません。)</sentence>
<begin>2f0</begin><end>2ff</end><modify>True</modify><affect>True</affect>
</ChinaAllRatingFree>
<!-- For Touch Try DS -->
<TouchTryDSLibTis>
<name>Touch!Try!DS体験版対応</name>
<sentence>Touch!Try!DS体験版ではTISライブラリを使用する必要があります。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</TouchTryDSLibTis>
<TouchTryDSLibNis>
<name>Touch!Try!DS体験版対応</name>
<sentence>Touch!Try!DS体験版ではNISライブラリを使用してはいけません。TISライブラリを使用してください。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</TouchTryDSLibNis>
<TouchTryDSMedia>
<name>Touch!Try!DS体験版対応</name>
<sentence>NANDアプリとして作成されています。Touch!Try!DS体験版を作成する際には、カードアプリとして作成する必要があります。</sentence>
<begin>234</begin><end>237</end><modify>False</modify><affect>True</affect>
</TouchTryDSMedia>
<TouchTryDSNormalJump>
<name>Touch!Try!DS体験版対応</name>
<sentence>Touch!Try!DS体験版でのアプリケーションジャンプは禁止されています。</sentence>
<begin>1d</begin><end>1d</end><modify>False</modify><affect>True</affect>
</TouchTryDSNormalJump>
<TouchTryDSTmpJump>
<name>Touch!Try!DS体験版対応</name>
<sentence>Touch!Try!DS体験版でのtmpジャンプは禁止されています。</sentence>
<begin>1d</begin><end>1d</end><modify>False</modify><affect>True</affect>
</TouchTryDSTmpJump>
<TouchTryDSSDCard>
<name>Touch!Try!DS体験版対応</name>
<sentence>Touch!Try!DS体験版でのSDカード使用は禁止されています。</sentence>
<begin>1b4</begin><end>1b7</end><modify>False</modify><affect>True</affect>
</TouchTryDSSDCard>
<TouchTryDSSyscall>
<name>Touch!Try!DS体験版対応</name>
<sentence>Touch!Try!DS体験版では、SDK付属のシステムコールライブラリを使用せず、弊社より体験版専用に提供されたライブラリを使用してください。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</TouchTryDSSyscall>
<TouchTryDSRomSize>
<name>Touch!Try!DS体験版対応</name>
<sentence>Touch!Try!DS体験版のファイルサイズは96MByte以下である必要があります。サイズオーバーしたROMを提出する場合、弊社窓口にご連絡ください。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</TouchTryDSRomSize>
<!-- For Nintendo Zone -->
<ZoneHybrid>
<name>Nintendo Zone対応</name>
<sentence>Nintendo ZoneソフトをHYBRID版として作成することは許可されていません。</sentence>
<begin>12</begin><end>12</end><modify>False</modify><affect>True</affect>
</ZoneHybrid>
<ZoneLimited>
<name>Nintendo Zone対応</name>
<sentence>このソフトはNintendo Zoneでのみ配信可能です。みんなのニンテンドーチャンネルやDSダウンロードプレイのしくみを使用して配信することはできませんのでご注意ください。(ROMに問題があるわけではありませんので、本警告を無視していただいて結構です。)</sentence>
<begin>12</begin><end>12</end><modify>False</modify><affect>True</affect>
</ZoneLimited>
<ZoneRomSize>
<name>Nintendo Zone対応</name>
<sentence>Nintendo Zoneソフトのファイルサイズは2.5MByte以下である必要があります。サイズオーバーしたROMを提出する場合、弊社窓口にご連絡ください。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</ZoneRomSize>
<ZoneCardAccess>
<name>Nintendo Zone対応</name>
<sentence>Nintendo ZoneソフトからDSカードへのアクセスは許可されていません。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</ZoneCardAccess>
<ZoneSyscall>
<name>Nintendo Zone対応</name>
<sentence>Nintendo ZoneソフトではSDK付属のシステムコールライブラリを使用する必要があります。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</ZoneSyscall>
<ZoneMedia>
<name>Nintendo Zone対応</name>
<sentence>カードアプリとして作成されています。Nintendo Zoneソフトを作成する際には、NANDアプリとして作成する必要があります。</sentence>
<begin>234</begin><end>237</end><modify>False</modify><affect>True</affect>
</ZoneMedia>
<ZoneTmpJump>
<name>Nintendo Zone対応</name>
<sentence>Nintendo Zoneソフトではtmpジャンプを指定する必要があります。RSFファイルのPermitLandingTmpJumpプロパティをTRUEに設定してください。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</ZoneTmpJump>
<!-- For DS Download Service and Nintendo Channel -->
<DSDownloadLimited>
<name>DSダウンロードサービス/ニンテンドーチャンネル対応</name>
<sentence>DSダウンロードサービスもしくはみんなのニンテンドーチャンネル向けソフトをLIMITED版として作成することはできません。HYBRID版として作成してください。</sentence>
<begin>12</begin><end>12</end><modify>False</modify><affect>True</affect>
</DSDownloadLimited>
<DSDownloadRomSize>
<name>DSダウンロードサービス/ニンテンドーチャンネル対応</name>
<sentence>DSダウンロードサービスもしくはみんなのニンテンドーチャンネル向けソフトのファイルサイズは2.5MByte以下である必要があります。サイズオーバーしたROMを提出する場合、弊社窓口にご連絡ください。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</DSDownloadRomSize>
<DSDownloadCloneBoot>
<name>DSダウンロードサービス/ニンテンドーチャンネル対応</name>
<sentence>認証コードが付加されていません。DSダウンロードサービスもしくはみんなのニンテンドーチャンネル向けソフトを配信するためには、認証コードを付加する必要があります。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</DSDownloadCloneBoot>
<DSDownloadCardAccess>
<name>DSダウンロードサービス/ニンテンドーチャンネル対応</name>
<sentence>DSダウンロードサービスもしくはみんなのニンテンドーチャンネル向けソフトからDSカードへのアクセスは許可されていません。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</DSDownloadCardAccess>
<DSDownloadSyscall>
<name>DSダウンロードサービス/ニンテンドーチャンネル対応</name>
<sentence>DSダウンロードサービスもしくはみんなのニンテンドーチャンネル向けソフトではSDK付属のシステムコールライブラリを使用する必要があります。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</DSDownloadSyscall>
<DSDownloadMedia>
<name>DSダウンロードサービス/ニンテンドーチャンネル対応</name>
<sentence>カードアプリとして作成されています。DSダウンロードサービスもしくはみんなのニンテンドーチャンネル向けソフトを作成する際には、NANDアプリとして作成する必要があります。</sentence>
<begin>234</begin><end>237</end><modify>False</modify><affect>True</affect>
</DSDownloadMedia>
<DSDownloadTmpJump>
<name>DSダウンロードサービス/ニンテンドーチャンネル対応</name>
<sentence>DSダウンロードサービスもしくはみんなのニンテンドーチャンネル向けソフトではtmpジャンプを指定する必要があります。RSFファイルのPermitLandingTmpJumpプロパティをTRUEに設定してください。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</DSDownloadTmpJump>
<!-- 英訳依頼 ここまで -->
<!-- (ver.1.6 追加メッセージ ここから) -->
<!-- Clone Boot -->
<NandHybridBefore51PR>
<name>NANDアプリのHYBRID条件</name>
<sentence>TwlSDK5.1PRよりも前のバージョンをご使用の場合、HYBRID版NANDアプリを作成するためには、弊社窓口への確認が必要です。</sentence>
<begin>12</begin><end>12</end><modify>False</modify><affect>True</affect>
</NandHybridBefore51PR>
<!-- Access Control -->
<PhotoTclAccessUser>
<name>写真データベースアクセス</name>
<sentence>写真データベースへアクセスする場合にはTCLライブラリを使用してください。</sentence>
<begin>1b4</begin><end>1b7</end><modify>False</modify><affect>True</affect>
</PhotoTclAccessUser>
<SDAccessPriv>
<name>SDカードアクセス</name>
<sentence>SDカードへのアクセス権の設定が不十分です。RSFファイルのSDCardAccessプロパティに"None"、"Read"、"Write"、"ReadWrite"のいずれかを指定する必要があります。</sentence>
<begin>1b4</begin><end>1b7</end><modify>False</modify><affect>True</affect>
</SDAccessPriv>
<!-- For Korea -->
<KoreaFlagNegated>
<name>韓国版対応</name>
<sentence>仕向地が韓国であるにもかかわらず、RSFファイルでForKoreaプロパティが設定されていません。</sentence>
<begin>1d</begin><end>1d</end><modify>False</modify><affect>True</affect>
</KoreaFlagNegated>
<KoreaFlagAsserted>
<name>韓国版対応</name>
<sentence>仕向地が韓国でないにもかかわらず、RSFファイルでForKoreaプロパティが設定されています。</sentence>
<begin>1d</begin><end>1d</end><modify>False</modify><affect>True</affect>
</KoreaFlagAsserted>
<KoreaBannerCharSet>
<name>韓国版バナー</name>
<sentence>韓国版のバナー文字として不正な文字セットが使用されています。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</KoreaBannerCharSet>
<!-- For China -->
<ChinaFlagNegated>
<name>中国版対応</name>
<sentence>仕向地が中国であるにもかかわらず、RSFファイルでForChinaプロパティが設定されていません。</sentence>
<begin>1d</begin><end>1d</end><modify>False</modify><affect>True</affect>
</ChinaFlagNegated>
<ChinaFlagAsserted>
<name>中国版対応</name>
<sentence>仕向地が中国でないにもかかわらず、RSFファイルでForChinaプロパティが設定されています。</sentence>
<begin>1d</begin><end>1d</end><modify>False</modify><affect>True</affect>
</ChinaFlagAsserted>
<OSInitChinaUnused>
<name>中国版対応</name>
<sentence>仕向地が中国であるにもかかわらず、OS_InitChina関数が使用されていません。</sentence>
<begin>1d</begin><end>1d</end><modify>False</modify><affect>True</affect>
</OSInitChinaUnused>
<OSInitChinaUsed>
<name>中国版対応</name>
<sentence>仕向地が中国でないにもかかわらず、OS_InitChina関数が使用されています。</sentence>
<begin>1d</begin><end>1d</end><modify>False</modify><affect>True</affect>
</OSInitChinaUsed>
<ChinaBannerCharSet>
<name>中国版バナー</name>
<sentence>中国版のバナー文字として不正な文字セットが使用されています。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</ChinaBannerCharSet>
<!-- SDK Version -->
<SDKVersionExModuleTwlOld>
<name>SDKバージョン(TWL非常駐モジュール)</name>
<sentence>設定ファイルに登録されているバージョンよりも古いモジュールがあります。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</SDKVersionExModuleTwlOld>
<SDKVersionExModuleTwlPR>
<name>SDKバージョン(TWL非常駐モジュール)</name>
<sentence>PR版が使用されています。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</SDKVersionExModuleTwlPR>
<SDKVersionExModuleTwlRC>
<name>SDKバージョン(TWL非常駐モジュール)</name>
<sentence>RC版が使用されています。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</SDKVersionExModuleTwlRC>
<SDKVersionExModuleNtrOld>
<name>SDKバージョン(NTR非常駐モジュール)</name>
<sentence>設定ファイルに登録されているバージョンよりも古いモジュールがあります。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</SDKVersionExModuleNtrOld>
<SDKVersionExModuleNtrPR>
<name>SDKバージョン(NTR非常駐モジュール)</name>
<sentence>PR版が使用されています。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</SDKVersionExModuleNtrPR>
<SDKVersionExModuleNtrRC>
<name>SDKバージョン(NTR非常駐モジュール)</name>
<sentence>RC版が使用されています。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</SDKVersionExModuleNtrRC>
<!-- Application Jump -->
<NormalJumpCard>
<name>アプリジャンプ</name>
<sentence>ゲームカード向けのソフトではノーマルアプリジャンプは許可されていません。</sentence>
<begin>1d</begin><end>1d</end><modify>False</modify><affect>True</affect>
</NormalJumpCard>
<TmpJumpCard>
<name>アプリジャンプ</name>
<sentence>ゲームカード向けのソフトではtmpアプリジャンプは許可されていません。</sentence>
<begin>1d</begin><end>1d</end><modify>False</modify><affect>True</affect>
</TmpJumpCard>
<NormalJumpAndTmpJump>
<name>アプリジャンプ</name>
<sentence>ーマルアプリジャンプとtmpジャンプを同時に設定することはできません。</sentence>
<begin>1d</begin><end>1d</end><modify>False</modify><affect>True</affect>
</NormalJumpAndTmpJump>
<!-- (ver.1.6追加メッセージ ここまで) -->
<!-- NTR Compatible Area -->
<TitleNameAscii>
<name>ソフトタイトル</name>
<sentence>使用不可のASCIIコードが使用されています。</sentence>
<begin>0</begin><end>b</end><modify>False</modify><affect>True</affect>
</TitleNameAscii>
<TitleNameSuffix>
<name>ソフトタイトル</name>
<sentence>末尾の未使用部分には00hを登録してください。</sentence>
<begin>0</begin><end>b</end><modify>False</modify><affect>True</affect>
</TitleNameSuffix>
<TitleNameSpace>
<name>ソフトタイトル</name>
<sentence>スペース部分には20hを登録してください。</sentence>
<begin>0</begin><end>b</end><modify>False</modify><affect>True</affect>
</TitleNameSpace>
<InitialCodeAscii>
<name>イニシャルコード</name>
<sentence>使用不可のASCIIコードが使用されています。</sentence>
<begin>c</begin><end>f</end><modify>False</modify><affect>True</affect>
</InitialCodeAscii>
<InitialCodeSDKDefault>
<name>イニシャルコード</name>
<sentence>SDKデフォルトのコード(NTRJ)が使用されています。</sentence>
<begin>c</begin><end>f</end><modify>False</modify><affect>True</affect>
</InitialCodeSDKDefault>
<MakerCodeAscii>
<name>メーカーコード</name>
<sentence>使用不可のASCIIコードが使用されています。</sentence>
<begin>10</begin><end>11</end><modify>False</modify><affect>True</affect>
</MakerCodeAscii>
<DeviceType>
<name>デバイスタイプ</name>
<sentence>不正な値です。00hを設定してください。</sentence>
<begin>13</begin><end>13</end><modify>False</modify><affect>True</affect>
</DeviceType>
<RemasterVersion>
<name>リマスターバージョン</name>
<sentence>不正な値です。正式版では01h-0Fhのいずれかの値、事前版ではE0hを設定してください。</sentence>
<begin>1e</begin><end>1e</end><modify>False</modify><affect>True</affect>
</RemasterVersion>
<BannerOffset>
<name>バナーオフセット</name>
<sentence>バナーデータが設定されていません。</sentence>
<begin>68</begin><end>6b</end><modify>False</modify><affect>True</affect>
</BannerOffset>
<RomValidSize>
<name>ROM実効サイズ</name>
<sentence>値が設定されていません。</sentence>
<begin>80</begin><end>83</end><modify>False</modify><affect>True</affect>
</RomValidSize>
<SecureCRCAddress>
<name>セキュア領域CRC</name>
<sentence>セキュア領域のアドレス指定が不正です。</sentence>
<begin>7c</begin><end>7d</end><modify>False</modify><affect>True</affect>
</SecureCRCAddress>
<SecureCRCVerify>
<name>セキュア領域CRC</name>
<sentence>計算結果と一致しません。セキュア領域が改ざんされた可能性があります。</sentence>
<begin>7c</begin><end>7d</end><modify>False</modify><affect>True</affect>
</SecureCRCVerify>
<LogoCRC>
<name>キャラクターデータCRC</name>
<sentence>計算結果と一致しません。キャラクターデータが改ざんされた可能性があります。</sentence>
<begin>15c</begin><end>15d</end><modify>False</modify><affect>True</affect>
</LogoCRC>
<HeaderCRC>
<name>ROMヘッダCRC</name>
<sentence>計算結果と一致しません。ROMヘッダが改ざんされた可能性があります。</sentence>
<begin>15e</begin><end>15f</end><modify>False</modify><affect>True</affect>
</HeaderCRC>
<Syscall>
<name>システムコールライブラリ</name>
<sentence>SDKデフォルトです。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</Syscall>
<!-- TWL Unique Area -->
<NandHybrid>
<name>NANDアプリのHYBRID条件</name>
<sentence>クローンブート対応でないNANDアプリをHYBRID版として作成することは許可されていません。</sentence>
<begin>12</begin><end>12</end><modify>False</modify><affect>True</affect>
</NandHybrid>
<NandLimited>
<name>NANDアプリのLIMITED条件</name>
<sentence>クローンブート対応のNANDアプリをLIMITED版として作成することは許可されていません。</sentence>
<begin>12</begin><end>12</end><modify>False</modify><affect>True</affect>
</NandLimited>
<OldDevFlag>
<name>旧開発用暗号フラグ</name>
<sentence>このROMはクローンブート対応アプリですが、製品用本体ではクローンブートができなくなります。</sentence>
<begin>1c</begin><end>1c</end><modify>False</modify><affect>True</affect>
</OldDevFlag>
<CapacityCardLess>
<name>デバイス容量</name>
<sentence>実ファイルサイズよりも小さい値が指定されています。</sentence>
<begin>14</begin><end>14</end><modify>False</modify><affect>True</affect>
</CapacityCardLess>
<CapacityCardWaste>
<name>デバイス容量</name>
<sentence>実ファイルサイズに比べて無駄のある値が設定されています。</sentence>
<begin>14</begin><end>14</end><modify>False</modify><affect>True</affect>
</CapacityCardWaste>
<CapacityCardRange>
<name>デバイス容量</name>
<sentence>指定可能な容量ではありません。</sentence>
<begin>14</begin><end>14</end><modify>False</modify><affect>True</affect>
</CapacityCardRange>
<CapacityNandRange>
<name>デバイス容量</name>
<sentence>NANDアプリに対して指定可能な容量ではありません。</sentence>
<begin>14</begin><end>14</end><modify>False</modify><affect>True</affect>
</CapacityNandRange>
<FilesizeFraction>
<name>実ファイルサイズ</name>
<sentence>中途半端な値です。通常では2のべき乗[Mbit]の値です。</sentence>
<begin>14</begin><end>14</end><modify>False</modify><affect>True</affect>
</FilesizeFraction>
<UsedNandSizeLimit>
<name>NAND使用サイズ</name>
<sentence>NANDアプリによるNAND領域の使用サイズ(セーブデータ含む)が32MBを超えています。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</UsedNandSizeLimit>
<UsedNandSizeExceed>
<name>NAND使用サイズ</name>
<sentence>NANDアプリによるNAND領域の使用サイズ(セーブデータ含む)が16MBを超えています。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</UsedNandSizeExceed>
<Seg3CRC>
<name>セグメント3 CRC</name>
<sentence>セグメント3領域に誤りがあります。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</Seg3CRC>
<TwlRomOffset>
<name>TWL ROMオフセット</name>
<sentence>TWLーマル領域ROMオフセット(NA)およびTWL専用領域ROMオフセット(KA)はともに1以上で、かつNAはKAを超えてはいけません。</sentence>
<begin>90</begin><end>93</end><modify>False</modify><affect>True</affect>
</TwlRomOffset>
<DisableDebugSystem>
<name>デバッガ動作禁止フラグ</name>
<sentence>デバッガ上で解析可能な設定になっています。デバッガ向けソフトとしてROMをリリースする場合にはセキュリティ上の問題がないかご確認ください。</sentence>
<begin>1f</begin><end>1f</end><modify>False</modify><affect>True</affect>
</DisableDebugSystem>
<DisableDebugUser>
<name>デバッガ動作禁止フラグ</name>
<sentence>デバッガ上で解析不可な設定になっています。この設定は許可されていません。</sentence>
<begin>1f</begin><end>1f</end><modify>False</modify><affect>True</affect>
</DisableDebugUser>
<ExtraRegion>
<name>特定仕向地</name>
<sentence>不正なビットが立っています。この設定は許可されていません。</sentence>
<begin>1d</begin><end>1d</end><modify>False</modify><affect>True</affect>
</ExtraRegion>
<NormalJump>
<name>ノーマルアプリジャンプ</name>
<sentence>ノーマルアプリジャンプは許可されていません。</sentence>
<begin>1d</begin><end>1d</end><modify>False</modify><affect>True</affect>
</NormalJump>
<RomSpeedType>
<name>諸フラグ</name>
<sentence>RSFファイルでRomSpeedTypeが設定されていません。</sentence>
<begin>1f</begin><end>1f</end><modify>False</modify><affect>True</affect>
</RomSpeedType>
<RomControl>
<name>ROMコントロール情報</name>
<sentence>TWLではマスクROMは用意されていません。ワンタイムPROM設定にしてください。</sentence>
<begin>60</begin><end>67</end><modify>False</modify><affect>True</affect>
</RomControl>
<AES>
<name>AES暗号</name>
<sentence>AES暗号が無効になっています。セキュリティ上の問題があります。</sentence>
<begin>220</begin><end>22f</end><modify>False</modify><affect>True</affect>
</AES>
<WhiteList>
<name>TWL拡張諸フラグ</name>
<sentence>本来、立つはずのないフラグが立てられています。ビルド時の設定をご確認ください。</sentence>
<begin>1bf</begin><end>1bf</end><modify>False</modify><affect>True</affect>
</WhiteList>
<ConnectIcon>
<name>アイコン表示フラグ</name>
<sentence>ワイヤレス通信アイコンとWi-Fi通信アイコンは同時に表示できません。</sentence>
<begin>1bf</begin><end>1bf</end><modify>False</modify><affect>True</affect>
</ConnectIcon>
<LimitedStatic>
<name>拡張常駐モジュール</name>
<sentence>TWL拡張常駐モジュールの配置に問題があります。弊社窓口にご連絡ください。</sentence>
<begin>1c0</begin><end>1c3</end><modify>False</modify><affect>True</affect>
</LimitedStatic>
<SCFGAccess>
<name>SCFG設定</name>
<sentence>SCFGレジスタへアクセス可能になっています。</sentence>
<begin>1b8</begin><end>1bb</end><modify>False</modify><affect>True</affect>
</SCFGAccess>
<TitleID>
<name>タイトルID</name>
<sentence>下位4バイトがイニシャルコードと一致しません。</sentence>
<begin>230</begin><end>233</end><modify>False</modify><affect>True</affect>
</TitleID>
<SaveData>
<name>Pubilc/Privateセーブデータ</name>
<sentence>ゲームカード向けソフトではPublicセーブデータおよびPrivateセーブデータのサイズを指定することはできません。</sentence>
<begin>238</begin><end>23f</end><modify>False</modify><affect>True</affect>
</SaveData>
<DebugBuild>
<name>Debug/Releaseビルド</name>
<sentence>FINALROMビルドのROMではありません。必ずFINALROMビルドのROMを作成してご提出ください。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</DebugBuild>
<!-- Application Type -->
<IllegalAppType>
<name>アプリ種別</name>
<sentence>不正な値です。</sentence>
<begin>230</begin><end>237</end><modify>False</modify><affect>True</affect>
</IllegalAppType>
<DifferentAppType>
<name>アプリ種別</name>
<sentence>アプリ種別は「{0}」です。本プログラムでは非対応です。</sentence>
<begin>230</begin><end>237</end><modify>False</modify><affect>True</affect>
</DifferentAppType>
<!-- Access Control -->
<CardAccess>
<name>アクセスコントロール情報</name>
<sentence>ゲームカードアクセス設定にーマルモードとNTRモードの両方を設定することはできません。</sentence>
<begin>1b4</begin><end>1b7</end><modify>False</modify><affect>True</affect>
</CardAccess>
<NandAccessUser>
<name>アクセスコントロール情報</name>
<sentence>ゲームカード用ソフトはNANDフラッシュメモリへのアクセスを許可されていません。</sentence>
<begin>1b4</begin><end>1b7</end><modify>False</modify><affect>True</affect>
</NandAccessUser>
<SDAccessUser>
<name>SDカードアクセス</name>
<sentence>SDカードへのアクセスは許可されていません。</sentence>
<begin>1b4</begin><end>1b7</end><modify>False</modify><affect>True</affect>
</SDAccessUser>
<SDReadAccessUser>
<name>SDカードアクセス</name>
<sentence>SDカードへのリードアクセスは許可されていません。</sentence>
<begin>1b4</begin><end>1b7</end><modify>False</modify><affect>True</affect>
</SDReadAccessUser>
<SDWriteAccessUser>
<name>SDカードアクセス</name>
<sentence>SDカードへのライトアクセスは許可されていません。</sentence>
<begin>1b4</begin><end>1b7</end><modify>False</modify><affect>True</affect>
</SDWriteAccessUser>
<SDAccessSystem>
<name>アクセスコントロール情報</name>
<sentence>SDカードへアクセス可能になっています。</sentence>
<begin>1b4</begin><end>1b7</end><modify>False</modify><affect>True</affect>
</SDAccessSystem>
<GameCardNormalAccessUser>
<name>アクセスコントロール情報</name>
<sentence>ゲームカードへのアクセスは許可されていません。</sentence>
<begin>1b4</begin><end>1b7</end><modify>False</modify><affect>True</affect>
</GameCardNormalAccessUser>
<GameCardNormalAccessSystem>
<name>アクセスコントロール情報</name>
<sentence>ゲームカードへアクセス可能になっています。</sentence>
<begin>1b4</begin><end>1b7</end><modify>False</modify><affect>True</affect>
</GameCardNormalAccessSystem>
<GameCardNTRAccessUser>
<name>アクセスコントロール情報</name>
<sentence>ゲームカードNTR互換領域へのアクセスは許可されていません。</sentence>
<begin>1b4</begin><end>1b7</end><modify>False</modify><affect>True</affect>
</GameCardNTRAccessUser>
<GameCardNTRAccessSystem>
<name>アクセスコントロール情報</name>
<sentence>ゲームカードNTR互換領域へアクセス可能になっています。</sentence>
<begin>1b4</begin><end>1b7</end><modify>False</modify><affect>True</affect>
</GameCardNTRAccessSystem>
<GameCardReadAccessUser>
<name>アクセスコントロール情報</name>
<sentence>ゲームカードへのリードアクセスは許可されていません。</sentence>
<begin>1b4</begin><end>1b7</end><modify>False</modify><affect>True</affect>
</GameCardReadAccessUser>
<GameCardWriteAccessUser>
<name>アクセスコントロール情報</name>
<sentence>ゲームカードへのライトアクセスは許可されていません。</sentence>
<begin>1b4</begin><end>1b7</end><modify>False</modify><affect>True</affect>
</GameCardWriteAccessUser>
<PhotoReadAccessUser>
<name>写真データベースアクセス</name>
<sentence>写真データベースへのリードアクセスは許可されていません。</sentence>
<begin>1b4</begin><end>1b7</end><modify>False</modify><affect>True</affect>
</PhotoReadAccessUser>
<PhotoWriteAccessUser>
<name>写真データベースアクセス</name>
<sentence>写真データベースへのライトアクセスは許可されていません。</sentence>
<begin>1b4</begin><end>1b7</end><modify>False</modify><affect>True</affect>
</PhotoWriteAccessUser>
<PhotoJpegSignAccessUser>
<name>写真データベースアクセス</name>
<sentence>写真データベースへのライトアクセスが指定されているにもかかわらずJPEG署名(JpegSign)が有効になっていません。</sentence>
<begin>1b4</begin><end>1b7</end><modify>False</modify><affect>True</affect>
</PhotoJpegSignAccessUser>
<JpegSignAccessUserCard>
<name>アクセスコントロール情報</name>
<sentence>JPEG署名(JpegSign)が有効になっています。</sentence>
<begin>1b4</begin><end>1b7</end><modify>False</modify><affect>True</affect>
</JpegSignAccessUserCard>
<JpegSignAccessUserNand>
<name>写真データベースアクセス</name>
<sentence>写真データベースへのライトアクセスが指定されていないにもかかわらずJPEG署名(JpegSign)が有効になっています。</sentence>
<begin>1b4</begin><end>1b7</end><modify>False</modify><affect>True</affect>
</JpegSignAccessUserNand>
<JpegSignAccessSystem>
<name>アクセスコントロール情報</name>
<sentence>JPEG署名(JpegSign)が有効になっています。</sentence>
<begin>1b4</begin><end>1b7</end><modify>False</modify><affect>True</affect>
</JpegSignAccessSystem>
<SDJpegSignAccessUser>
<name>アクセスコントロール情報</name>
<sentence>JPEG画像をSDカードに読み書きする場合にはJPEG署名(JpegSign)の付与と検証が必要になりますのでご注意ください。(JPEG画像をSDカードに読み書きしない場合、この警告を無視していただいて構いません。)</sentence>
<begin>1b4</begin><end>1b7</end><modify>False</modify><affect>True</affect>
</SDJpegSignAccessUser>
<IllegalAccessUser>
<name>アクセスコントロール情報</name>
<sentence>{0} へのアクセスは許可されていません。</sentence>
<begin>1b4</begin><end>1b7</end><modify>False</modify><affect>True</affect>
</IllegalAccessUser>
<IllegalAccessUserWarn>
<name>アクセスコントロール情報</name>
<sentence>{0} へアクセス可能になっています。</sentence>
<begin>1b4</begin><end>1b7</end><modify>False</modify><affect>True</affect>
</IllegalAccessUserWarn>
<IllegalAccessSystem>
<name>アクセスコントロール情報</name>
<sentence>{0} へアクセス可能になっています。</sentence>
<begin>1b4</begin><end>1b7</end><modify>False</modify><affect>True</affect>
</IllegalAccessSystem>
<AccessDefault>
<name>アクセスコントロール情報</name>
<sentence>未定義のアクセスビットが設定されています。この設定は許可されていません。</sentence>
<begin>1b4</begin><end>1b7</end><modify>False</modify><affect>True</affect>
</AccessDefault>
<!-- Padding -->
<PaddingRead>
<name>パディング</name>
<sentence>最終{0}を読み出すことができませんでした。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</PaddingRead>
<PaddingValue>
<name>パディング</name>
<sentence>最終{0}にFFh以外の値が格納されています。{1} ROMの制限が守られていません。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</PaddingValue>
<!-- Reserved Area -->
<ReservedArea>
<name>予約領域</name>
<sentence>不正な値が含まれています。この領域をすべて0で埋めてください。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</ReservedArea>
<!-- Shared2 file -->
<Shared2Disable>
<name>Shared2ファイル</name>
<sentence>Shared2ファイルへのアクセスが指定されていないにもかかわらずファイルサイズが設定されています。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</Shared2Disable>
<Shared2Enable>
<name>Shared2ファイル</name>
<sentence>Shared2ファイルへのアクセスが指定されているにもかかわらずファイルサイズが設定されていません。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</Shared2Enable>
<Shared2AccessSystem>
<name>Shared2ファイル</name>
<sentence>Shared2ファイル(No.{0})へのアクセス(非公開)が設定されています。アクセス許可されているかご確認ください。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</Shared2AccessSystem>
<Shared2AccessUser>
<name>Shared2ファイル</name>
<sentence>Shared2ファイル(No.{0})へのアクセスは許可されていません。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</Shared2AccessUser>
<Shared2SizeSystem>
<name>Shared2ファイル</name>
<sentence>Shared2ファイル(No.{0})のファイルサイズが {1} に設定されています。正しい値かどうかをご確認ください。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</Shared2SizeSystem>
<Shared2SizeUser>
<name>Shared2ファイル</name>
<sentence>Shared2ファイル(No.{0})のファイルサイズが {1} に設定されています。正しい値かどうかをご確認ください。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</Shared2SizeUser>
<!-- SDK Version -->
<SDKVersionOld>
<name>SDKバージョン</name>
<sentence>設定ファイルに登録されているバージョンよりも古いバージョンです。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</SDKVersionOld>
<SDKVersionPR>
<name>SDKバージョン</name>
<sentence>ご使用のSDKバージョンはPR版です。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</SDKVersionPR>
<SDKVersionRC>
<name>SDKバージョン</name>
<sentence>ご使用のSDKバージョンはRC版です。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</SDKVersionRC>
<!-- Banner -->
<BannerRead>
<name>バナーファイル</name>
<sentence>読み出すことができませんでした。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</BannerRead>
<BannerChar>
<name>バナーファイル</name>
<sentence>使用不可能な文字セットが使用されています。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</BannerChar>
<!-- Region -->
<IllegalRegion>
<name>リージョン</name>
<sentence>仕向地の組み合わせが不正です。ペアレンタルコントロール情報は無視して読み込まれました。</sentence>
<begin>1b0</begin><end>1b4</end><modify>True</modify><affect>True</affect>
</IllegalRegion>
<AllRegion>
<name>リージョン</name>
<sentence>読み込み時のROMでは全リージョンが設定されています。仕向地別に設定する必要がないかご確認ください。</sentence>
<begin>1b0</begin><end>1b4</end><modify>True</modify><affect>True</affect>
</AllRegion>
<!-- Rating -->
<UnnecessaryRatingIllegal>
<name>レーティング</name>
<sentence>レーティング表示が不要かどうかを判断できません。再設定してください。</sentence>
<begin>2f0</begin><end>2ff</end><modify>True</modify><affect>True</affect>
</UnnecessaryRatingIllegal>
<UnnecessaryRatingSetting>
<name>レーティング</name>
<sentence>読み込み時のROMにはレーティング表示が不要であると設定されています。この指定は、ソフトがゲームでないツール類のときのみ選択可能です。レーティング表示が不要であるかどうかは弊社窓口にご相談ください。</sentence>
<begin>2f0</begin><end>2ff</end><modify>True</modify><affect>True</affect>
</UnnecessaryRatingSetting>
<RatingUndefine>
<name>レーティング</name>
<sentence>{0}: 未定義です。</sentence>
<begin>2f0</begin><end>2ff</end><modify>True</modify><affect>True</affect>
</RatingUndefine>
<RatingPendingSetting>
<name>レーティング</name>
<sentence>{0}: 読み込み時のROMには審査中であると指定されています。審査が決まりしだい、再提出してください。</sentence>
<begin>2f0</begin><end>2ff</end><modify>True</modify><affect>True</affect>
</RatingPendingSetting>
<RatingPendingConcurrent>
<name>レーティング</name>
<sentence>{0}: 審査中指定とレーティング年齢が同時に設定されています。</sentence>
<begin>2f0</begin><end>2ff</end><modify>True</modify><affect>True</affect>
</RatingPendingConcurrent>
<IllegalRating>
<name>レーティング</name>
<sentence>{0}: レーティング年齢が団体によって指定された値ではありません。</sentence>
<begin>2f0</begin><end>2ff</end><modify>True</modify><affect>True</affect>
</IllegalRating>
</message>

Some files were not shown because too many files have changed in this diff Show More