GameRes refactoring.

(FormatCatalog.CreateEntry): method renamed to 'Create' and made generic
towards Entry type.
This commit is contained in:
morkt 2015-08-30 22:34:06 +04:00
parent 4bfdc502e4
commit 46dbf2b142
53 changed files with 75 additions and 99 deletions

View File

@ -113,7 +113,7 @@ namespace GARbro.GUI
{
if (0 != (file.Attributes & (FileAttributes.System)))
continue;
var entry = FormatCatalog.Instance.CreateEntry (file.Name);
var entry = FormatCatalog.Instance.Create<Entry> (file.Name);
entry.Size = (uint)Math.Min (file.Length, uint.MaxValue);
list.Add (entry);
}

View File

@ -71,7 +71,7 @@ namespace GameRes.Formats.AZSys
var name = Binary.GetCString (index, index_offset + 0x10, 0x30);
if (name.Length > 0)
{
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Offset = base_offset + LittleEndian.ToUInt32 (index, index_offset);
entry.Size = LittleEndian.ToUInt32 (index, index_offset + 4);
if (entry.CheckPlacement (file.MaxOffset))

View File

@ -64,7 +64,7 @@ namespace GameRes.Formats.AdPack
string ext = file.View.ReadString (index_offset+8, 4).TrimEnd (null);
if (0 != ext.Length)
name += '.'+ext;
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
uint offset = file.View.ReadUInt32 (index_offset+12);
uint next_offset = file.View.ReadUInt32 (index_offset+0x10+12);
entry.Size = next_offset - offset;
@ -107,7 +107,7 @@ namespace GameRes.Formats.AdPack
for (uint i = 0; i < count; ++i)
{
string name = file.View.ReadString (index_offset, 0x18);
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
uint offset = file.View.ReadUInt32 (index_offset+0x1c);
uint next_offset = file.View.ReadUInt32 (index_offset+0x20+0x1c);
entry.Size = next_offset - offset;

View File

@ -60,7 +60,7 @@ namespace GameRes.Formats.AdvSys
for (int i = 0; i < count; ++i)
{
var name = file.View.ReadString (index_offset, 0x18);
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Size = file.View.ReadUInt32 (index_offset+0x18);
entry.Offset = file.View.ReadUInt32 (index_offset+0x1C);
if (entry.Offset < data_offset || !entry.CheckPlacement (file.MaxOffset))

View File

@ -167,7 +167,7 @@ namespace GameRes.Formats.AVC
continue;
}
var name = Encodings.cp932.GetString (m_index, index_offset, name_length);
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
index_offset += 0x107;
entry.Offset = m_header_offset + LittleEndian.ToUInt32 (m_index, index_offset);
entry.Size = LittleEndian.ToUInt32 (m_index, index_offset+4);

View File

@ -60,7 +60,7 @@ namespace GameRes.Formats.Ego
if (entry_len <= 0x10 || entry_len > 0x100 || index_offset + entry_len > data_offset)
return null;
var name = file.View.ReadString (index_offset+0x10, entry_len-0x10);
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Offset = file.View.ReadUInt32 (index_offset+8);
entry.Size = file.View.ReadUInt32 (index_offset+12);
if (entry.Offset < data_offset || !entry.CheckPlacement (file.MaxOffset))

View File

@ -60,7 +60,7 @@ namespace GameRes.Formats.FVP
for (int i = 0; i < count; ++i)
{
string name = file.View.ReadString (index_offset, 0x20);
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Offset = file.View.ReadUInt32 (index_offset+0x20);
entry.Size = file.View.ReadUInt32 (index_offset+0x24);
if (!entry.CheckPlacement (file.MaxOffset))

View File

@ -65,7 +65,7 @@ namespace GameRes.Formats.X
return null;
file.View.Read (index_offset+1, name_buffer, 0, name_length);
string name = Encodings.cp932.GetString (name_buffer, 0, name_length);
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Offset = file.View.ReadUInt32 (index_offset+0x20);
entry.Size = file.View.ReadUInt32 (index_offset+0x1C);
if (entry.Offset < data_offset || !entry.CheckPlacement (file.MaxOffset))

View File

@ -53,7 +53,7 @@ namespace GameRes.Formats.ISM
for (int i = 0; i < count; ++i)
{
var name = file.View.ReadString (index_offset, 0x0c);
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Offset = file.View.ReadUInt32 (index_offset+0x10);
entry.Size = file.View.ReadUInt32 (index_offset+0x14);
if (!entry.CheckPlacement (file.MaxOffset))

View File

@ -64,8 +64,7 @@ namespace GameRes.Formats.SystemEpsylon
for (int i = 0; i < count; ++i)
{
string name = file.View.ReadString (index_offset, 0x20);
var entry = new PackDatEntry { Name = name };
entry.Type = FormatCatalog.Instance.GetTypeFromName (name);
var entry = FormatCatalog.Instance.Create<PackDatEntry> (name);
entry.Offset = file.View.ReadUInt32 (index_offset+0x20);
entry.Flags = file.View.ReadUInt32 (index_offset+0x24);
entry.Size = file.View.ReadUInt32 (index_offset+0x28);

View File

@ -96,8 +96,7 @@ namespace GameRes.Formats.Kogado
name = i.ToString ("D5");
if (0 != ext.Length)
name += '.'+ext;
var entry = new KogadoEntry { Name = name };
entry.Type = FormatCatalog.Instance.GetTypeFromName (entry.Name);
var entry = FormatCatalog.Instance.Create<KogadoEntry> (name);
entry.Offset = data_offset + file.View.ReadUInt32 (index_offset + 0x18);
if (version >= 0x200)
{

View File

@ -84,7 +84,7 @@ namespace GameRes.Formats.Nexton
string name = ReadName (lst, index_offset+8, 0x24, 0xcccccccc, cp932);
if (0 == name.Length)
return null;
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Offset = lst.View.ReadUInt32 (index_offset) ^ 0xcccccccc;
entry.Size = lst.View.ReadUInt32 (index_offset+4) ^ 0xcccccccc;
if (!entry.CheckPlacement (max_offset))

View File

@ -51,7 +51,7 @@ namespace GameRes.Formats.Mg
{
uint name_length = file.View.ReadByte (cur_offset);
string name = file.View.ReadString (cur_offset+1, name_length, Encoding.UTF8);
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Offset = file.View.ReadUInt32 (cur_offset+0x20);
entry.Size = file.View.ReadUInt32 (cur_offset+0x24);
if (!entry.CheckPlacement (file.MaxOffset))

View File

@ -87,8 +87,7 @@ namespace GameRes.Formats.Qlie
name_buffer[k] ^= (byte)(((k + 1) ^ key) + k + 1);
string name = Encodings.cp932.GetString (name_buffer, 0, name_length);
var entry = new QlieEntry { Name = name };
entry.Type = FormatCatalog.Instance.GetTypeFromName (name);
var entry = FormatCatalog.Instance.Create<QlieEntry> (name);
index_offset += 2 + name_length;
entry.Offset = file.View.ReadInt64 (index_offset);

View File

@ -71,7 +71,7 @@ namespace GameRes.Formats.BlackCyc
return null;
string name = gtb.View.ReadString (name_offset, (uint)(gtb.MaxOffset-name_offset));
name += ".dwq";
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Offset = next_offset;
if (i + 1 == count)
next_offset = (uint)file.MaxOffset;

View File

@ -61,7 +61,7 @@ namespace GameRes.Formats.BlackCyc
for (int i = 0; i < count; ++i)
{
string name = vtb.View.ReadString (index_offset, 8) + ".vaw";
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Offset = next_offset;
index_offset += 0xC;
next_offset = vtb.View.ReadUInt32 (index_offset+8);

View File

@ -109,7 +109,7 @@ namespace GameRes.Formats.CatSystem
for (uint i = 0; i < entry_count; ++i)
{
string name = file.View.ReadString (current_offset, 0x40);
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Offset = file.View.ReadUInt32 (current_offset+0x40);
entry.Size = file.View.ReadUInt32 (current_offset+0x44);
if (!entry.CheckPlacement (file.MaxOffset))
@ -150,7 +150,7 @@ namespace GameRes.Formats.CatSystem
uint key = twister.Twist (main_key + i);
string name = DecipherName (name_info, key);
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Offset = eax;
entry.Size = edx;
if (!entry.CheckPlacement (file.MaxOffset))

View File

@ -70,7 +70,7 @@ namespace GameRes.Formats.Circus
if (0 == file.View.ReadByte (index_offset))
return null;
string name = file.View.ReadString (index_offset, (uint)name_length);
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
index_offset += name_length;
uint offset = next_offset;
if (i+1 == count)

View File

@ -45,7 +45,7 @@ namespace GameRes.Formats.??????
var dir = new List<Entry> (count);
for (int i = 0; i < count; ++i)
{
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
if (!entry.CheckPlacement (file.MaxOffset))
return null;
dir.Add (entry);

View File

@ -70,7 +70,7 @@ namespace GameRes.Formats.Eagls
break;
var name = Binary.GetCString (index, index_offset, name_size);
index_offset += name_size;
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
if (name.EndsWith (".dat", StringComparison.InvariantCultureIgnoreCase))
entry.Type = "script";
if (long_offsets)

View File

@ -119,7 +119,7 @@ namespace GameRes.Formats.Emic
index_offset += 4;
Read (index_offset, index_buf, 0, name_len+8);
string name = Binary.GetCString (index_buf, 0, name_len);
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Offset = LittleEndian.ToUInt32 (index_buf, name_len+4);
entry.Size = LittleEndian.ToUInt32 (index_buf, name_len);
if (!entry.CheckPlacement (m_file.MaxOffset))

View File

@ -61,7 +61,7 @@ namespace GameRes.Formats.BGI
for (uint i = 0; i < count; ++i)
{
string name = file.View.ReadString (index_offset, 0x10);
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Offset = base_offset + file.View.ReadUInt32 (index_offset+0x10);
entry.Size = file.View.ReadUInt32 (index_offset+0x14);
if (!entry.CheckPlacement (file.MaxOffset))
@ -121,7 +121,7 @@ namespace GameRes.Formats.BGI
for (uint i = 0; i < count; ++i)
{
string name = file.View.ReadString (index_offset, 0x60);
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Offset = base_offset + file.View.ReadUInt32 (index_offset+0x60);
entry.Size = file.View.ReadUInt32 (index_offset+0x64);
if (!entry.CheckPlacement (file.MaxOffset))

View File

@ -64,7 +64,7 @@ namespace GameRes.Formats.Ffa
for (int i = 0; i < count; ++i)
{
string name = lst.View.ReadString (index_offset, 14);
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Offset = lst.View.ReadUInt32 (index_offset+14);
entry.Size = lst.View.ReadUInt32 (index_offset+18);
if (!entry.CheckPlacement (file.MaxOffset))

View File

@ -70,7 +70,7 @@ namespace GameRes.Formats.Ffa
for (int i = 0; i < count; ++i)
{
var name = file.View.ReadString (index_offset, 0x10);
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Offset = file.View.ReadUInt32 (index_offset+0x10);
entry.Size = file.View.ReadUInt32 (index_offset+0x14);
if (!entry.CheckPlacement (file.MaxOffset))

View File

@ -71,7 +71,7 @@ namespace GameRes.Formats.Fs
for (uint i = 0; i < count; ++i)
{
string name = file.View.ReadString (cur_offset, 0x80);
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Offset = file.View.ReadInt64 (cur_offset+0x80);
entry.Size = file.View.ReadUInt32 (cur_offset+0x88);
if (!entry.CheckPlacement (file.MaxOffset))
@ -258,7 +258,7 @@ namespace GameRes.Formats.Fs
if (len <= 0 || len >= 0x24)
return null;
string name = enc.GetString (buf, 0, len);
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
uint shift = LittleEndian.ToUInt32 (buf, 0x24);
entry.Offset = LittleEndian.ToUInt32 (buf, 0x28) - shift;
entry.Size = LittleEndian.ToUInt32 (buf, 0x2c) - shift;

View File

@ -54,7 +54,7 @@ namespace GameRes.Formats.BlackRainbow
for (int i = 0; i < count; ++i)
{
string name = file.View.ReadString (index_offset+8, 0x38);
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Offset = file.View.ReadUInt32 (index_offset);
entry.Size = file.View.ReadUInt32 (index_offset+4);
if (entry.Offset < data_offset || !entry.CheckPlacement (file.MaxOffset))
@ -104,7 +104,7 @@ namespace GameRes.Formats.BlackRainbow
{
long offset = index[i];
string name = file.View.ReadString (offset, 0x20);
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Offset = offset + 0x24;
entry.Size = file.View.ReadUInt32 (offset+0x20);
dir.Add (entry);

View File

@ -84,7 +84,7 @@ namespace GameRes.Formats.Ikura
if (next_offset > file.MaxOffset || next_offset < offset)
return null;
string name = encoding.GetString (name_raw, 0, name_length).ToLowerInvariant();
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Offset = offset;
entry.Size = next_offset - offset;
dir.Add (entry);
@ -155,7 +155,7 @@ namespace GameRes.Formats.Ikura
has_scripts = true;
}
else
entry = FormatCatalog.Instance.CreateEntry (name);
entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Offset = file.View.ReadUInt32 (dir_offset+12);
entry.Size = file.View.ReadUInt32 (dir_offset+16);
if (!entry.CheckPlacement (file.MaxOffset))

View File

@ -68,7 +68,7 @@ namespace GameRes.Formats.CandySoft
for (int i = 0; i < count; ++i)
{
string name = file.View.ReadString (index_offset+8, (uint)name_size);
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Offset = file.View.ReadUInt32 (index_offset);
entry.Size = file.View.ReadUInt32 (index_offset+4);
if (entry.Offset < index_size || !entry.CheckPlacement (file.MaxOffset))

View File

@ -63,7 +63,7 @@ namespace GameRes.Formats.Liar
if (cur_offset+40 > base_offset)
return null;
string name = file.View.ReadString (cur_offset, 32);
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Offset = base_offset + file.View.ReadUInt32 (cur_offset+32);
entry.Size = file.View.ReadUInt32 (cur_offset+36);
if (!entry.CheckPlacement (max_offset))

View File

@ -78,7 +78,7 @@ namespace GameRes.Formats.Lilim
if (-1 == name_length)
name_length = name_buf.Length;
var name = Encodings.cp932.GetString (name_buf, 0, name_length);
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Offset = file.View.ReadUInt32 (current_offset+0x10);
entry.Size = file.View.ReadUInt32 (current_offset+0x14);
current_offset += 0x20;

View File

@ -93,7 +93,7 @@ namespace GameRes.Formats.Majiro
names_pos = zero+1;
uint offset = offset_next;
offset_next = file.View.ReadUInt32 (table_pos + entry_size + hash_size);
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Offset = offset;
if (1 == version)
entry.Size = offset_next >= offset ? offset_next - offset : 0;

View File

@ -96,7 +96,7 @@ namespace GameRes.Formats.Malie
if (offset < data_offset || offset + entry_size > base_offset + size)
return false;
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Offset = offset;
entry.Size = entry_size;
m_dir.Add (entry);
@ -226,7 +226,7 @@ namespace GameRes.Formats.Malie
continue;
}
long entry_offset = m_base_offset + ((long)m_offset_table[offset] << 10);
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
if (entry.CheckPlacement (m_max_offset))
{
entry.Offset = entry_offset;

View File

@ -87,7 +87,7 @@ namespace GameRes.Formats.ONScripter
return null;
string name = Encodings.cp932.GetString (name_buffer, 0, name_len);
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Offset = Binary.BigEndian (file.View.ReadUInt32 (cur_offset)) + (long)base_offset;
entry.Size = Binary.BigEndian (file.View.ReadUInt32 (cur_offset+4));
if (!entry.CheckPlacement (file.MaxOffset))
@ -222,12 +222,9 @@ namespace GameRes.Formats.ONScripter
if (base_offset - cur_offset < 13)
return null;
var entry = new NsaEntry
{
Name = Encodings.cp932.GetString (name_buffer, 0, name_len),
};
var name = Encodings.cp932.GetString (name_buffer, 0, name_len);
var entry = FormatCatalog.Instance.Create<NsaEntry> (name);
byte compression_type = file.View.ReadByte (cur_offset);
entry.Type = FormatCatalog.Instance.GetTypeFromName (entry.Name);
entry.Offset = Binary.BigEndian (file.View.ReadUInt32 (cur_offset+1)) + (long)base_offset;
entry.Size = Binary.BigEndian (file.View.ReadUInt32 (cur_offset+5));
if (!entry.CheckPlacement (file.MaxOffset))

View File

@ -101,8 +101,7 @@ namespace GameRes.Formats.NitroPlus
if (name_length != header.Read (name_buf, 0, name_length))
return null;
var name = Encodings.cp932.GetString (name_buf, 0, name_length);
var entry = new PackedEntry { Name = name };
entry.Type = FormatCatalog.Instance.GetTypeFromName (name);
var entry = FormatCatalog.Instance.Create<PackedEntry> (name);
entry.Offset = base_offset + header.ReadUInt32();
entry.UnpackedSize = header.ReadUInt32();
entry.Size = header.ReadUInt32();

View File

@ -85,7 +85,7 @@ namespace GameRes.Formats
Encoding enc = GuessEncoding (name_raw);
string filename = enc.GetString (name_raw);
var entry = FormatCatalog.Instance.CreateEntry (filename);
var entry = FormatCatalog.Instance.Create<Entry> (filename);
entry.Size = header.ReadUInt32();
entry.Offset = header.ReadInt64();
if (!entry.CheckPlacement (file.MaxOffset))

View File

@ -70,7 +70,7 @@ namespace GameRes.Formats.Pajamas
for (int i = 0; i < count; ++i)
{
var name = file.View.ReadString (name_offset, (uint)name_length);
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Offset = base_offset + file.View.ReadUInt32 (index_offset);
entry.Size = file.View.ReadUInt32 (index_offset+4);
if (!entry.CheckPlacement (file.MaxOffset))

View File

@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion ("1.1.9.418")]
[assembly: AssemblyFileVersion ("1.1.9.418")]
[assembly: AssemblyVersion ("1.1.9.419")]
[assembly: AssemblyFileVersion ("1.1.9.419")]

View File

@ -98,14 +98,10 @@ namespace GameRes.Formats.RenPy
Trace.WriteLine ("invalid index tuple", "RpaOpener.TryOpen");
return null;
}
var entry = new RpaEntry
{
Name = name,
Type = FormatCatalog.Instance.GetTypeFromName (name),
Offset = (uint)((int)tuple[0] ^ key),
UnpackedSize = (uint)((int)tuple[1] ^ key),
};
entry.Size = entry.UnpackedSize;
var entry = FormatCatalog.Instance.Create<RpaEntry> (name);
entry.Offset = (uint)((int)tuple[0] ^ key);
entry.UnpackedSize = (uint)((int)tuple[1] ^ key);
entry.Size = entry.UnpackedSize;
if (tuple.Count > 2)
{
entry.Header = tuple[2] as byte[];

View File

@ -117,10 +117,7 @@ namespace GameRes.Formats.ShiinaRio // 椎名里緒
while (name_buf.Length == header.Read (name_buf, 0, name_buf.Length))
{
var name = Binary.GetCString (name_buf, 0, name_buf.Length);
var entry = new WarcEntry {
Name = name,
Type = FormatCatalog.Instance.GetTypeFromName (name)
};
var entry = FormatCatalog.Instance.Create<WarcEntry> (name);
entry.Offset = header.ReadUInt32();
entry.Size = header.ReadUInt32();
if (!entry.CheckPlacement (file.MaxOffset))

View File

@ -55,7 +55,7 @@ namespace GameRes.Formats.Silky
string name = file.View.ReadString (index_offset, 0x10);
if (0 == name.Length)
return null;
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Offset = file.View.ReadUInt32 (index_offset+0x10);
entry.Size = file.View.ReadUInt32 (index_offset+0x14);
if (!entry.CheckPlacement (file.MaxOffset))

View File

@ -66,7 +66,7 @@ namespace GameRes.Formats.UMeSoft
return null;
string name = file.View.ReadString (index_offset, name_len);
index_offset += name_len+6;
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Size = file.View.ReadUInt32 (index_offset);
entry.Offset = file.View.ReadUInt32 (index_offset+4);
if (!entry.CheckPlacement (index_offset))

View File

@ -60,7 +60,7 @@ namespace GameRes.Formats.WildBug
string name = file.View.ReadString (index_offset+0x14, name_length);
if (0 == name.Length)
return null;
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Offset = file.View.ReadUInt32 (index_offset);
entry.Size = file.View.ReadUInt32 (index_offset+4);
if (!entry.CheckPlacement (file.MaxOffset))

View File

@ -97,7 +97,7 @@ namespace GameRes.Formats.Will
if (string.IsNullOrEmpty (name))
return null;
name = name.ToLowerInvariant()+'.'+ext.Extension;
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Size = file.View.ReadUInt32 (dir_offset+name_size);
entry.Offset = file.View.ReadUInt32 (dir_offset+name_size+4);
if (!entry.CheckPlacement (file.MaxOffset))

View File

@ -163,7 +163,7 @@ namespace GameRes.Formats.Xuse
if (!string.IsNullOrEmpty (filename))
{
filename = DriveRe.Replace (filename, "");
entry = FormatCatalog.Instance.CreateEntry (filename);
entry = FormatCatalog.Instance.Create<Entry> (filename);
}
else
{

View File

@ -97,7 +97,7 @@ namespace GameRes.Formats.Xuse
name_buf[n] ^= 0x56;
var name = Encodings.cp932.GetString (name_buf, 0, name_length);
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Offset = cadr_view.ReadInt64 (cadr_offset);
if (entry.Offset >= file.MaxOffset)
return null;

View File

@ -84,7 +84,7 @@ namespace GameRes.Formats.Elf
if (0 == name.Length)
return null;
index_offset += scheme.NameLength;
var entry = FormatCatalog.Instance.CreateEntry (name);
var entry = FormatCatalog.Instance.Create<Entry> (name);
entry.Size = file.View.ReadUInt32 (index_offset) ^ scheme.SizeKey;
entry.Offset = file.View.ReadUInt32 (index_offset+4) ^ scheme.OffsetKey;
if (entry.Offset < index_size+4 || !entry.CheckPlacement (file.MaxOffset))

View File

@ -84,7 +84,7 @@ namespace GameRes.Formats.Elf
var dir = new List<Entry> (file_map.Count);
for (int i = 0; i < file_map.Count; ++i)
{
var entry = FormatCatalog.Instance.CreateEntry (file_map[i]);
var entry = FormatCatalog.Instance.Create<Entry> (file_map[i]);
entry.Offset = pak.View.ReadUInt32 (index_offset);
entry.Size = pak.View.ReadUInt32 (index_offset + 4);
if (!entry.CheckPlacement (bin.MaxOffset))
@ -104,7 +104,7 @@ namespace GameRes.Formats.Elf
var dir = new List<Entry> (file_map.Count);
for (int i = 0; i < file_map.Count; ++i)
{
var entry = FormatCatalog.Instance.CreateEntry (file_map[i]);
var entry = FormatCatalog.Instance.Create<Entry> (file_map[i]);
entry.Offset = pak.View.ReadUInt32 (index_offset);
entry.Size = pak.View.ReadUInt32 (index_offset + 4);
if (!entry.CheckPlacement (bin.MaxOffset))

View File

@ -103,7 +103,7 @@ namespace GameRes
private Entry EntryFromFileInfo (FileInfo file)
{
var entry = FormatCatalog.Instance.CreateEntry (file.FullName);
var entry = FormatCatalog.Instance.Create<Entry> (file.FullName);
entry.Size = (uint)Math.Min (file.Length, uint.MaxValue);
return entry;
}

View File

@ -91,9 +91,9 @@ namespace GameRes
/// <summary>
/// Create empty Entry that corresponds to implemented resource.
/// </summary>
public virtual Entry CreateEntry ()
public EntryType Create<EntryType> () where EntryType : Entry, new()
{
return new Entry { Type = this.Type };
return new EntryType { Type = this.Type };
}
protected IResource ()
@ -363,19 +363,14 @@ namespace GameRes
/// <exception cref="System.ArgumentException">May be thrown if filename contains invalid
/// characters.</exception>
/// </summary>
public Entry CreateEntry (string filename)
public EntryType Create<EntryType> (string filename) where EntryType : Entry, new()
{
Entry entry = null;
string ext = Path.GetExtension (filename);
if (!string.IsNullOrEmpty (ext))
{
ext = ext.TrimStart ('.').ToUpperInvariant();
var range = m_extension_map.GetValues (ext, false);
if (null != range)
entry = range.First().CreateEntry();
}
EntryType entry = null;
var formats = LookupFileName (filename);
if (formats.Any())
entry = formats.First().Create<EntryType>();
if (null == entry)
entry = new Entry();
entry = new EntryType();
entry.Name = filename;
return entry;
}

View File

@ -173,11 +173,6 @@ namespace GameRes
return null;
}
public override Entry CreateEntry ()
{
return new ImageEntry();
}
public bool IsBuiltin
{
get { return this.GetType().Assembly == typeof(ImageFormat).Assembly; }

View File

@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion ("1.1.6.8")]
[assembly: AssemblyFileVersion ("1.1.6.8")]
[assembly: AssemblyVersion ("1.1.7.89")]
[assembly: AssemblyFileVersion ("1.1.7.89")]

View File

@ -231,7 +231,7 @@ namespace GARbro.GUI
if (file.Length >= uint.MaxValue)
continue;
string name = Path.Combine (path, file.Name);
var e = FormatCatalog.Instance.CreateEntry (name);
var e = FormatCatalog.Instance.Create<Entry> (name);
e.Size = (uint)file.Length;
list.Add (e);
}

View File

@ -51,5 +51,5 @@ using System.Windows;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion ("1.1.5.642")]
[assembly: AssemblyFileVersion ("1.1.5.642")]
[assembly: AssemblyVersion ("1.1.5.656")]
[assembly: AssemblyFileVersion ("1.1.5.656")]