private VLTBase ReadChunk(BinaryReader br) { if (br.BaseStream.Position == br.BaseStream.Length) { return(null); } VLTChunk chunk = new VLTChunk(); chunk.Read(br); if (chunk.IsValid) { VLTBase vltbase = null; switch (chunk.ChunkId) { case VLTChunkId.Dependency: vltbase = new VLTDependency(); break; case VLTChunkId.Strings: vltbase = new VLTRaw(); break; case VLTChunkId.Data: vltbase = new VLTRaw(); break; case VLTChunkId.Expression: vltbase = new VLTExpression(); break; case VLTChunkId.Pointers: vltbase = new VLTPointers(); break; default: vltbase = new VLTRaw(); break; } vltbase.Chunk = chunk; vltbase.Read(br); chunk.SkipChunk(br.BaseStream); return(vltbase); } else { return(null); } }
private void WriteChunk(BinaryWriter bw, VLTBase vltbase) { long position = bw.BaseStream.Position; bw.BaseStream.Seek(8, SeekOrigin.Current); vltbase.Write(bw); long endPosition = bw.BaseStream.Position; if ((endPosition % 0x10) != 0) { endPosition += 0x10 - (endPosition % 0x10); } vltbase.Chunk.Length = (int)(endPosition - position); bw.BaseStream.Seek(position, SeekOrigin.Begin); vltbase.Chunk.Write(bw); bw.BaseStream.Seek(endPosition, SeekOrigin.Begin); }