private void ApplySHA1s() { int count = 0; foreach (byte[] sha1 in Sha1List) { if (count < Header.ebxCount) { EbxEntry e = EbxList[count]; e._sha1 = sha1; EbxList[count] = e; } if (count >= Header.ebxCount && count < Header.ebxCount + Header.resCount) { ResEntry e = ResList[count - (int)Header.ebxCount]; e._sha1 = sha1; ResList[count - (int)Header.ebxCount] = e; } if (count >= Header.ebxCount + Header.resCount) { ChunkEntry e = ChunkList[count - (int)(Header.ebxCount + Header.resCount)]; e._sha1 = sha1; ChunkList[count - (int)(Header.ebxCount + Header.resCount)] = e; } count++; } }
private void ReadResList(Stream data) { ResList = new List <ResEntry>(); for (int i = 0; i < Header.resCount; i++) { ResEntry b = new ResEntry(); b.nameOffset = Helpers.ReadLEInt(data); b.ucsize = Helpers.ReadLEInt(data); ResList.Add(b); } for (int i = 0; i < Header.resCount; i++) { ResEntry b = ResList[i]; b.type = Helpers.ReadLEInt(data); ResList[i] = b; } for (int i = 0; i < Header.resCount; i++) { ResEntry b = ResList[i]; b.meta = new byte[16]; data.Read(b.meta, 0, 16); ResList[i] = b; } for (int i = 0; i < Header.resCount; i++) { ResEntry b = ResList[i]; b.id = new byte[8]; data.Read(b.id, 0, 8); ResList[i] = b; } }
private void ReadResListData(Stream data, bool fast = false) { for (int i = 0; i < Header.resCount; i++) { ResEntry e = ResList[i]; e._data = ReadPayload(data, e.ucsize, fast); ResList[i] = e; } }
private void ReadResListNames(Stream data) { long startOffset = data.Position; for (int i = 0; i < Header.resCount; i++) { ResEntry e = ResList[i]; data.Seek(startOffset + e.nameOffset, 0); e._name = Helpers.ReadNullString(data); ResList[i] = e; } }
TreeNode addType(ResEntry entry,TreeNode node) { IntPtr i = (IntPtr)entry.type; String type = ResourceTypes.getResTypeName(i); TreeNode[] treeList = node.Nodes.Find(type, false); if (treeList == null || treeList.Length == 0) { TreeNode added = node.Nodes.Add(type); added.Name = type; treeList = new TreeNode[] { added }; } return treeList[0]; }
private void WriteStringTable(Stream s) { List <string> list = new List <string>(); bool found; foreach (EbxEntry e in EbxList) { found = false; foreach (string str in list) { if (e._name == str) { found = true; break; } } if (!found) { list.Add(e._name); } } foreach (ResEntry e in ResList) { found = false; foreach (string str in list) { if (e._name == str) { found = true; break; } } if (!found) { list.Add(e._name); } } int pos = 0; foreach (string str in list) { Helpers.WriteNullString(s, str); for (int i = 0; i < EbxList.Count; i++) { if (EbxList[i]._name == str) { EbxEntry e = EbxList[i]; e.nameOffset = pos; EbxList[i] = e; } } for (int i = 0; i < ResList.Count; i++) { if (ResList[i]._name == str) { ResEntry e = ResList[i]; e.nameOffset = pos; ResList[i] = e; } } pos += 1 + str.Length; } while (s.Position % 0x10 != 0) { s.WriteByte(0); } }
private void ReadResList(Stream data) { ResList = new List<ResEntry>(); for (int i = 0; i < Header.resCount; i++) { ResEntry b = new ResEntry(); b.nameOffset = Helpers.ReadLEInt(data); b.ucsize = Helpers.ReadLEInt(data); ResList.Add(b); } for (int i = 0; i < Header.resCount; i++) { ResEntry b = ResList[i]; b.type = Helpers.ReadLEInt(data); ResList[i] = b; } for (int i = 0; i < Header.resCount; i++) { ResEntry b = ResList[i]; b.meta = new byte[16]; data.Read(b.meta, 0, 16); ResList[i] = b; } for (int i = 0; i < Header.resCount; i++) { ResEntry b = ResList[i]; b.id = new byte[8]; data.Read(b.id, 0, 8); ResList[i] = b; } }
TreeNode addLang(ResEntry entry,TreeNode node) { String name = entry.lang.ToString(); TreeNode[] treeList = node.Nodes.Find(name, false); if (treeList == null || treeList.Length == 0) { TreeNode added = node.Nodes.Add(name); added.Name = name; treeList = new TreeNode[] { added }; } return treeList[0]; }
TreeNode addName(ResEntry entry,TreeNode node) { IntPtr i = (IntPtr)entry.name; String name = i.ToString(); TreeNode[] treeList = node.Nodes.Find(name, false); if (treeList == null || treeList.Length == 0) { TreeNode added = node.Nodes.Add(name); added.Name = name; treeList = new TreeNode[] { added }; } return treeList[0]; }
public TreeNode init(String path) { ResEntry entry = new ResEntry(); unsafe { ResEntry* r; r = testNew(); testSet(ref *r); testSet(ref entry); } TreeNode root = new TreeNode("Current Resources"); container = new Container(root); UInt64 hSeason = initSeasons(); char[] str = new char[path.Length]; str = path.ToCharArray(); int bRet = openResModule(hSeason,path); if(bRet == 0) { MessageBox.Show("Cannot open <" + str + "> for reading"); } enumAll(hSeason, MyEnumAllProc,ref container); closeResModule(hSeason); freeSeasons(hSeason); //byte[] p = (byte[])testNew(); this.path = path; types.Clear(); IntPtr hModule = LoadLibrary(path); if(hModule == null) { DialogResult box = MessageBox.Show("Module " + path + " cannot be loaded","FileVersion"); return null; } UInt32 err = 0; long ret = EnumResourceTypes(hModule, new EnumResTypeProc(MyEnumResTypeProc),(IntPtr)0); err = GetLastError(); FreeLibrary(hModule); if(ret == 0) { String x ; x = String.Format("{0:x8}", err); DialogResult box = MessageBox.Show("Module <" + path + "> resources cannot be enumerated " + x, "FileVersion"); } return root; }
static extern void getResource(UInt64 hSeason, ref ResEntry entry, UInt32 size ,byte[] buffer);
static extern void getResourceSize(UInt64 hSeason,ref ResEntry entry,ref UInt32 size);
static extern void testSet(ref ResEntry entry);
bool MyEnumAllProc(ResEntry entry,ref Container container) { container.add(entry); return true; }
public void add(ResEntry entry) { list.Add(entry); TreeNode node = addType(entry,root); TreeNode nameNode = addName(entry, node); TreeNode lang = addLang(entry, nameNode); lang.Tag = entry; }