static TextUtilities() { PSXMap = new PSXCharMap(); PSPMap = new PSPCharMap(); BuildVersion1Charmap( PSXMap, PSPMap ); BuildVersion2Charmap( PSXMap, PSPMap ); BuildVersion3Charmap( PSXMap, PSPMap ); }
static TextUtilities() { //PSXMap = new PSXCharMap(); //PSPMap = new PSPCharMap(); var psx = new Dictionary<int, string>(); var psp = new Dictionary<int, string>(); BuildVersion1Charmap( psx, psp ); BuildVersion2Charmap( psx, psp ); BuildVersion3Charmap( psx, psp ); PSXMap = new PSXCharMap( psx ); PSPMap = new PSPCharMap( psp ); // Extract the DLL to the temp folder string dir = Path.Combine( Path.GetTempPath(), Path.GetRandomFileName() ); Directory.CreateDirectory( dir ); string path = Path.Combine( dir, "FFTTextCompression.dll" ); File.WriteAllBytes( path, Resources.FFTTextCompression ); IntPtr h = LoadLibrary( path ); System.Diagnostics.Debug.Assert( h != IntPtr.Zero, "Unable to load library " + path ); Application.ApplicationExit += delegate( object sender, EventArgs args ) { if (FreeLibrary( h ) && File.Exists( path ) && Directory.Exists( dir )) { try { File.Delete( path ); Directory.Delete( dir ); } catch { } } }; }
private static void BuildVersion1Charmap( PSXCharMap psx, PSPCharMap psp ) { for( int i = (int)'a'; i <= (int)'z'; i++ ) { psx.Add( i - (ushort)'a' + 0x24, ((char)i).ToString() ); psx.Add( i - (ushort)'a' + 0x24 + 0xD000, ((char)i).ToString() ); } psx.Add( 0x40, "?" ); psx.Add( 0xD040, "?" ); psx.Add( 0xD9C9, "?" ); psx.Add( 0xB2, "\u266A" ); psx.Add( 0xD0B2, "\u266A" ); psx.Add( 0xD117, "\u2014" ); psx.Add( 0xD118, "\u300C" ); psx.Add( 0xD11B, "\u22EF" ); psx.Add( 0xD11F, "\xD7" ); psx.Add( 0xD120, "\xF7" ); psx.Add( 0xD121, "\u2229" ); psx.Add( 0xD122, "\u222A" ); psx.Add( 0xD123, "=" ); psx.Add( 0xDA70, "=" ); psx.Add( 0xD124, "\u2260" ); psx.Add( 0xD9B5, "\u221E" ); psx.Add( 0xD9B7, "&" ); psx.Add( 0xD9B8, "%" ); psx.Add( 0xD9B9, "\u25CB" ); psx.Add( 0xD9BA, "\u2190" ); psx.Add( 0xD9BB, "\u2192" ); psx.Add( 0xD9C2, "\u300E" ); psx.Add( 0xD9C3, "\u300F" ); psx.Add( 0xD9C4, "\u300D" ); psx.Add( 0xD9C5, "\uFF5E" ); psx.Add( 0xD9C7, "\u25B3" ); psx.Add( 0xD9C8, "\u25A1" ); psx.Add( 0xD9CA, "\u2665" ); psx.Add( 0xD9CB, "\u2160" ); psx.Add( 0xD9CC, "\u2161" ); psx.Add( 0xD9CD, "\u2162" ); psx.Add( 0xD9CE, "\u2163" ); psx.Add( 0xD9CF, "\u2164" ); psx.Add( 0xDA00, "\u2648" ); psx.Add( 0xDA01, "\u2649" ); psx.Add( 0xDA02, "\u264A" ); psx.Add( 0xDA03, "\u264B" ); psx.Add( 0xDA04, "\u264C" ); psx.Add( 0xDA05, "\u264D" ); psx.Add( 0xDA06, "\u264E" ); psx.Add( 0xDA07, "\u264F" ); psx.Add( 0xDA08, "\u2650" ); psx.Add( 0xDA09, "\u2651" ); psx.Add( 0xDA0A, "\u2652" ); psx.Add( 0xDA0B, "\u2653" ); psx.Add( 0xDA0C, "{Serpentarius}" ); psx.Add( 0xDA71, "$" ); psx.Add( 0xDA72, "\xA5" ); psx.Add( 0xDA74, "," ); psx.Add( 0xDA75, ";" ); psx.Add( 0xD11D, "-" ); psx.Add( 0x42, "+" ); psx.Add( 0xD042, "+" ); psx.Add( 0xD11E, "+" ); psx.Add( 0x46, ":" ); psx.Add( 0xD046, ":" ); psx.Add( 0xD9BD, ":" ); psx.Add( 0x8D, "(" ); psx.Add( 0xD08D, "(" ); psx.Add( 0xD9BE, "(" ); psx.Add( 0x8E, ")" ); psx.Add( 0xD08E, ")" ); psx.Add( 0xD9BF, ")" ); psx.Add( 0x91, "\"" ); psx.Add( 0xD091, "\"" ); psx.Add( 0xD9C0, "\"" ); psx.Add( 0xDA77, "\"" ); psx.Add( 0x93, "'" ); psx.Add( 0xD093, "'" ); psx.Add( 0xD9C1, "'" ); psx.Add( 0xDA76, "'" ); psx.Add( 0x8B, "\xB7" ); psx.Add( 0xD08B, "\xB7" ); psx.Add( 0xD9BC, "\xB7" ); psx.Add( 0x44, "/" ); psx.Add( 0xD044, "/" ); psx.Add( 0xD9C6, "/" ); psx.Add( 0xD125, ">" ); psx.Add( 0xD126, "<" ); psx.Add( 0xD127, "\u2267" ); psx.Add( 0xD128, "\u2266" ); psx.Add( 0xFA, " " ); psx.Add( 0xD12A, " " ); psx.Add( 0xDA73, " " ); psx.Add( 0x5F, "." ); psx.Add( 0xD05F, "." ); psx.Add( 0xD119, "." ); psx.Add( 0xD11C, "." ); psx.Add( 0xD9B6, "." ); psx.Add( 0x3E, "!" ); psx.Add( 0xD03E, "!" ); psx.Add( 0xD11A, "!" ); psx.Add( 0xB5, "*" ); psx.Add( 0xD0B5, "*" ); psx.Add( 0xD111, "*" ); psx.Add( 0xD129, "*" ); psx.Add( 0xD12B, "*" ); psx.Add( 0xD12C, "*" ); psx.Add( 0xD12D, "*" ); psx.Add( 0xD12E, "*" ); psx.Add( 0xD12F, "*" ); psx.Add( 0xD130, "*" ); psx.Add( 0xD131, "*" ); psx.Add( 0xD132, "*" ); psx.Add( 0xE0, "{Ramza}" ); psx.Add( 0xF8, "{Newline}" ); psx.Add( 0xFB, "{Begin List}" ); psx.Add( 0xFC, "{End List}" ); psx.Add( 0xFF, "{Close}" ); for( int i = 0; i < 10; i++ ) { psx.Add( i, i.ToString() ); psx.Add( i + 0xD000, i.ToString() ); } for( int i = (int)'A'; i <= (int)'Z'; i++ ) { psx.Add( i - (ushort)'A' + 0x0A, ((char)i).ToString() ); psx.Add( i - (ushort)'A' + 0x0A + 0xD000, ((char)i).ToString() ); } for( int i = 0; i < 256; i++ ) { // HACK psx.Add( 0xE200 + i, string.Format( "{{Delay {0:X2}", i ) + @"}" ); psx.Add( 0xE300 + i, string.Format( "{{Color {0:X2}", i ) + @"}" ); } psx.Add( 0x3F, "\u3042" ); psx.Add( 0x41, "\u3044" ); psx.Add( 0x43, "\u3046" ); psx.Add( 0x45, "\u3048" ); psx.Add( 0xD03F, "\u3042" ); psx.Add( 0xD041, "\u3044" ); psx.Add( 0xD043, "\u3046" ); psx.Add( 0xD045, "\u3048" ); for( int i = 0x47; i <= 0x5E; i++ ) { psx.Add( i, ((char)(i - 0x47 + 0x304A)).ToString() ); psx.Add( i + 0xD000, ((char)(i - 0x47 + 0x304A)).ToString() ); } for( int i = 0x60; i <= 0x8A; i++ ) { psx.Add( i, ((char)(i - 0x60 + 0x3063)).ToString() ); psx.Add( i + 0xD000, ((char)(i - 0x60 + 0x3063)).ToString() ); } psx.Add( 0x8C, "\u308F" ); psx.Add( 0xD08C, "\u308F" ); psx.Add( 0x8F, "\u3092" ); psx.Add( 0xD08F, "\u3092" ); psx.Add( 0x90, "\u3093" ); psx.Add( 0xD090, "\u3093" ); psx.Add( 0x92, "\u30A2" ); psx.Add( 0xD092, "\u30A2" ); for( int i = 0x94; i <= 0xB1; i++ ) { psx.Add( i, ((char)(i - 0x94 + 0x30A4)).ToString() ); psx.Add( i + 0xD000, ((char)(i - 0x94 + 0x30A4)).ToString() ); } psx.Add( 0xB3, "\u30C3" ); psx.Add( 0xD0B3, "\u30C3" ); psx.Add( 0xB4, "\u30C4" ); psx.Add( 0xD0B4, "\u30C4" ); for( int i = 0xB6; i <= 0xCF; i++ ) { psx.Add( i, ((char)(i - 0xB6 + 0x30C6)).ToString() ); psx.Add( i + 0xD000, ((char)(i - 0xB6 + 0x30C6)).ToString() ); } for( int i = 0xD0; i <= 0xDB; i++ ) { psx.Add( i - 0xD0 + 0xD100, ((char)(i - 0xD0 + 0x30E0)).ToString() ); } psx.Add( 0xD10C, "\u30EC" ); psx.Add( 0xD10D, "\u30ED" ); psx.Add( 0xD10E, "\u30EE" ); psx.Add( 0xD10F, "\u30EF" ); for( int i = 0xE2; i <= 0xE6; i++ ) { psx.Add( i - 0xE2 + 0xD112, ((char)(i - 0xE2 + 0x30F2)).ToString() ); } foreach( KeyValuePair<int, string> kvp in psx ) { psp.Add( kvp.Key, kvp.Value ); } for (int i = 0; i < 256; i++) { psp.Add( 0xEE00 + i, string.Format( "{{Tab {0:X2}", i ) + @"}" ); } psp[0x95] = " "; psp[0xfa] = "{SP2}"; psp.Add( 0xDA60, "\xE1" ); psp.Add( 0xDA61, "\xE0" ); psp.Add( 0xDA62, "\xE9" ); psp.Add( 0xDA63, "\xE8" ); psp.Add( 0xDA64, "\xED" ); psp.Add( 0xDA65, "\xFA" ); psp.Add( 0xDA66, "\xF9" ); }
private static void BuildVersion3Charmap( PSXCharMap PSXMap, PSPCharMap PSPMap ) { IList<string> psxChars = PatcherLib.PSXResources.CharacterSet; IList<string> pspChars = PatcherLib.PSPResources.CharacterSet; for ( int i = 0; i < 0xD0; i++ ) { PSXMap[i] = psxChars[i]; PSPMap[i] = pspChars[i]; PSXMap[i + 0xD000] = psxChars[i]; PSPMap[i + 0xD000] = pspChars[i]; } for ( int i = 0xD0; i < pspChars.Count; i++ ) { PSXMap[( i - 0xD0 ) % 0xD0 + 0xD100 + 0x100 * ( ( i - 0xD0 ) / 0xD0 )] = psxChars[i]; PSPMap[( i - 0xD0 ) % 0xD0 + 0xD100 + 0x100 * ( ( i - 0xD0 ) / 0xD0 )] = pspChars[i]; } }
private static void BuildVersion2Charmap( PSXCharMap psx, PSPCharMap psp ) { foreach( GenericCharMap map in new GenericCharMap[] { psx, psp } ) { map.Add( 0xD133, "\u5263" ); map.Add( 0xD134, "\u4E00" ); map.Add( 0xD135, "\u4E59" ); map.Add( 0xD136, "\u4E03" ); map.Add( 0xD137, "\u4E01" ); map.Add( 0xD138, "\u4E5D" ); map.Add( 0xD139, "\u4E86" ); map.Add( 0xD13A, "\u61E8" ); map.Add( 0xD13B, "\u4EBA" ); map.Add( 0xD13C, "\u5165" ); map.Add( 0xD13D, "\u516B" ); map.Add( 0xD13E, "\u5200" ); map.Add( 0xD13F, "\u529B" ); map.Add( 0xD140, "\u5341" ); map.Add( 0xD141, "\u4E0B" ); map.Add( 0xD142, "\u4E09" ); map.Add( 0xD143, "\u4E0A" ); map.Add( 0xD144, "\u4E08" ); map.Add( 0xD145, "\u4E07" ); map.Add( 0xD146, "\u4E0E" ); map.Add( 0xD147, "\u4E45" ); map.Add( 0xD148, "\u4E38" ); map.Add( 0xD149, "\u4E5E" ); map.Add( 0xD14A, "\u4E5F" ); map.Add( 0xD14B, "\u4EA1" ); map.Add( 0xD14C, "\u51E1" ); map.Add( 0xD14D, "\u5203" ); map.Add( 0xD14E, "\u5343" ); map.Add( 0xD14F, "\u98EF" ); map.Add( 0xD150, "\u571F" ); map.Add( 0xD151, "\u58EB" ); map.Add( 0xD152, "\u5915" ); map.Add( 0xD153, "\u5927" ); map.Add( 0xD154, "\u5973" ); map.Add( 0xD155, "\u5B50" ); map.Add( 0xD156, "\u5BF8" ); map.Add( 0xD157, "\u5C0F" ); map.Add( 0xD158, "\u5C71" ); map.Add( 0xD159, "\u5DDD" ); map.Add( 0xD15A, "\u5DE5" ); map.Add( 0xD15B, "\u5DF1" ); map.Add( 0xD15C, "\u5E72" ); map.Add( 0xD15D, "\u5F13" ); map.Add( 0xD15E, "\u3005" ); map.Add( 0xD15F, "\u6CB9" ); map.Add( 0xD160, "\u796D" ); map.Add( 0xD161, "\u5947" ); map.Add( 0xD162, "\u8DE1" ); map.Add( 0xD164, "\u4E0D" ); map.Add( 0xD165, "\u4E2D" ); map.Add( 0xD166, "\u4E88" ); map.Add( 0xD167, "\u4E94" ); map.Add( 0xD168, "\u4E92" ); map.Add( 0xD169, "\u4E95" ); map.Add( 0xD16A, "\u4ECB" ); map.Add( 0xD16B, "\u4EC7" ); map.Add( 0xD16C, "\u4ECA" ); map.Add( 0xD16D, "\u4EC1" ); map.Add( 0xD16E, "\u5185" ); map.Add( 0xD16F, "\u5143" ); map.Add( 0xD170, "\u516C" ); map.Add( 0xD171, "\u516D" ); map.Add( 0xD172, "\u5186" ); map.Add( 0xD173, "\u5197" ); map.Add( 0xD174, "\u51F6" ); map.Add( 0xD175, "\u5207" ); map.Add( 0xD176, "\u5206" ); map.Add( 0xD177, "\u5302" ); map.Add( 0xD178, "\u5316" ); map.Add( 0xD179, "\u5DE8" ); map.Add( 0xD17A, "\u5339" ); map.Add( 0xD17B, "\u725B" ); map.Add( 0xD17C, "\u5384" ); map.Add( 0xD17D, "\u53CC" ); map.Add( 0xD17E, "\u53CD" ); map.Add( 0xD17F, "\u53CB" ); map.Add( 0xD180, "\u592A" ); map.Add( 0xD181, "\u5929" ); map.Add( 0xD182, "\u5C11" ); map.Add( 0xD183, "\u5E7B" ); map.Add( 0xD184, "\u5F15" ); map.Add( 0xD185, "\u5FC3" ); map.Add( 0xD186, "\u6238" ); map.Add( 0xD187, "\u624B" ); map.Add( 0xD188, "\u652F" ); map.Add( 0xD189, "\u6587" ); map.Add( 0xD18A, "\u6597" ); map.Add( 0xD18B, "\u65B9" ); map.Add( 0xD18C, "\u65E5" ); map.Add( 0xD18D, "\u6708" ); map.Add( 0xD18E, "\u6728" ); map.Add( 0xD18F, "\u6B20" ); map.Add( 0xD190, "\u6B62" ); map.Add( 0xD191, "\u6BD4" ); map.Add( 0xD192, "\u6BDB" ); map.Add( 0xD193, "\u6C34" ); map.Add( 0xD194, "\u706B" ); map.Add( 0xD195, "\u722A" ); map.Add( 0xD196, "\u7236" ); map.Add( 0xD197, "\u7247" ); map.Add( 0xD198, "\u725B" ); map.Add( 0xD199, "\u72AC" ); map.Add( 0xD19A, "\u738B" ); map.Add( 0xD19C, "\u5EB7" ); map.Add( 0xD19D, "\u808C" ); map.Add( 0xD19E, "\u72AF" ); map.Add( 0xD19F, "\u5C4D" ); map.Add( 0xD1A0, "\u6557" ); map.Add( 0xD1A1, "\u6211" ); map.Add( 0xD1A2, "\u767B" ); map.Add( 0xD1A3, "\u9332" ); map.Add( 0xD1A4, "\u4E18" ); map.Add( 0xD1A5, "\u4E16" ); map.Add( 0xD1A6, "\u4E3B" ); map.Add( 0xD1A7, "\u4EE5" ); map.Add( 0xD1A8, "\u4ED5" ); map.Add( 0xD1A9, "\u4ED9" ); map.Add( 0xD1AA, "\u4ED6" ); map.Add( 0xD1AB, "\u4EE3" ); map.Add( 0xD1AC, "\u4ED8" ); map.Add( 0xD1AD, "\u4EE4" ); map.Add( 0xD1AE, "\u5144" ); map.Add( 0xD1AF, "\u5199" ); map.Add( 0xD1B1, "\u51FA" ); map.Add( 0xD1B2, "\u52A0" ); map.Add( 0xD1B3, "\u5305" ); map.Add( 0xD1B4, "\u5317" ); map.Add( 0xD1B5, "\u534A" ); map.Add( 0xD1B6, "\u5360" ); map.Add( 0xD1B7, "\u53BB" ); map.Add( 0xD1B8, "\u53CE" ); map.Add( 0xD1B9, "\u53EF" ); map.Add( 0xD1BA, "\u529F" ); map.Add( 0xD1BB, "\u53E5" ); map.Add( 0xD1BC, "\u53E4" ); map.Add( 0xD1BD, "\u53F7" ); map.Add( 0xD1BE, "\u53F2" ); map.Add( 0xD1BF, "\u53F8" ); map.Add( 0xD1C0, "\u53EC" ); map.Add( 0xD1C1, "\u53F0" ); map.Add( 0xD1C2, "\u53F3" ); map.Add( 0xD1C3, "\u56DB" ); map.Add( 0xD1C4, "\u56DA" ); map.Add( 0xD1C5, "\u5727" ); map.Add( 0xD1C6, "\u51AC" ); map.Add( 0xD1C7, "\u5916" ); map.Add( 0xD1C8, "\u592E" ); map.Add( 0xD1C9, "\u5931" ); map.Add( 0xD1CA, "\u5974" ); map.Add( 0xD1CB, "\u5C3B" ); map.Add( 0xD1CC, "\u5DE6" ); map.Add( 0xD1CD, "\u5E02" ); map.Add( 0xD1CE, "\u5E03" ); map.Add( 0xD1CF, "\u5E73" ); map.Add( 0xD200, "\u5E7C" ); map.Add( 0xD201, "\u5E83" ); } }