Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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);
        }