public IFFNode(String ID, Byte[] Data, IFFNode[] Children) { this.m_ID = ID; this.m_Data = Data; this.m_Parent = null; this.m_Children = new List<IFFNode>(Children); }
public IFFNode(String ID, Byte[] Data, IFFNode Parent, IFFNode[] Children) { this.m_ID = ID; this.m_Data = Data; this.m_Parent = Parent; if (Children == null) { this.m_Children = new List<IFFNode>(); } else { this.m_Children = new List<IFFNode>(Children); } }
public IFFNode() { this.m_ID = String.Empty; this.m_Data = null; this.m_Parent = null; this.m_Children = new List<IFFNode>(); }
public IFFNode(String ID, Byte[] Data, IFFNode Parent) { this.m_ID = ID; this.m_Data = Data; this.m_Parent = Parent; this.m_Children = new List<IFFNode>(); }
private void ParseStream(Stream Stream) { Stream.Seek(0L, SeekOrigin.Begin); BinaryReader binaryReader = new BinaryReader(Stream); String ID = new String(binaryReader.ReadChars(4)); Int32 Length; Byte[] Data; Byte[] buffer = binaryReader.ReadBytes(4); if (Utilities.IsAlpha(buffer)) { ID += new String(Encoding.ASCII.GetChars(buffer)); buffer = binaryReader.ReadBytes(4); } if (!ID.Contains("FORM")) { throw new IOException("File does not contain valid FORM data."); } Length = Utilities.EndianFlip(BitConverter.ToInt32(buffer, 0)); Data = binaryReader.ReadBytes((Int32)(Stream.Length - Stream.Position)); Stream.Seek(0, SeekOrigin.Begin); buffer = binaryReader.ReadBytes((Int32)Stream.Length); binaryReader.Close(); Stream.Close(); IFFNode iffNode = new IFFNode(ID, Data); this.m_Node = iffNode; ParseNode(iffNode); if (this.IsDataTable) { this.m_DataTable = new IFFDataTable(this); } else { this.m_DataTable = null; } }
private void ParseNode(IFFNode iffNode) { MemoryStream memoryStream = new MemoryStream(iffNode.Data); BinaryReader binaryReader = new BinaryReader(memoryStream); while (memoryStream.Position < memoryStream.Length) { String ID = new String(binaryReader.ReadChars(4)); IFFNode iffChild = new IFFNode(); if (memoryStream.Position < memoryStream.Length) { Int32 Length = 0; Byte[] Data = new Byte[0]; try { Byte[] buffer1 = binaryReader.ReadBytes(4); if (Utilities.IsAlpha(buffer1)) { ID += new String(Encoding.ASCII.GetChars(buffer1)); buffer1 = binaryReader.ReadBytes(4); } Length = Utilities.EndianFlip(BitConverter.ToInt32(buffer1, 0)); Data = binaryReader.ReadBytes(Length); } catch { iffChild.Children = new List<IFFNode>(); iffChild.Data = null; iffChild.ID = ID; iffChild.Parent = iffNode; iffNode.Children.Add(iffChild); } iffChild.Children = new List<IFFNode>(); iffChild.Data = Data; iffChild.ID = ID; iffChild.Parent = iffNode; iffNode.Children.Add(iffChild); if (iffChild.ID.Contains("FORM")) { ParseNode(iffChild); } } else { iffChild.Children = new List<IFFNode>(); iffChild.Data = null; iffChild.ID = ID; iffChild.Parent = iffNode; iffNode.Children.Add(iffChild); } } binaryReader.Close(); memoryStream.Close(); }
private Byte[] ParseChildren(IFFNode[] iffNodes) { List<Byte[]> listByteArrays = new List<Byte[]>(); foreach (IFFNode iffChunk in iffNodes) { listByteArrays.Add(ParseChild(iffChunk)); } listByteArrays.Reverse(); List<Byte> listBytes = new List<Byte>(); foreach (Byte[] byteArray in listByteArrays.ToArray()) { listBytes.AddRange(byteArray); } listByteArrays.Clear(); Byte[] returnValue = listBytes.ToArray(); listBytes.Clear(); return returnValue; }
private Byte[] ParseChild(IFFNode iffNode) { Byte[] childrenBytes = null; if (iffNode.Children.Count > 0) { List<IFFNode> tempChildren = new List<IFFNode>(); tempChildren.AddRange(iffNode.Children.ToArray()); tempChildren.Reverse(); childrenBytes = ParseChildren(tempChildren.ToArray()); tempChildren.Clear(); } Int32 Length = 0; if (childrenBytes != null) { Length += childrenBytes.Length; } if ((iffNode.Data != null) && (!iffNode.ID.Contains("FORM"))) { Length += iffNode.Data.Length; } MemoryStream memoryStream = new MemoryStream(); BinaryWriter binaryWriter = new BinaryWriter(memoryStream); binaryWriter.Write(Encoding.ASCII.GetBytes(iffNode.ID)); if (Length > 0) { binaryWriter.Write(Utilities.EndianFlip(Length)); if ((iffNode.Data != null) && (!iffNode.ID.Contains("FORM"))) { binaryWriter.Write(iffNode.Data); } if (childrenBytes != null) { binaryWriter.Write(childrenBytes); } } Byte[] returnValue = memoryStream.ToArray(); binaryWriter.Close(); memoryStream.Close(); return returnValue; }
public void Close() { this.m_Filename = String.Empty; this.m_Node = null; }