Ejemplo n.º 1
0
        public void Write( System.IO.FileStream stream )
        {
            stream.WriteUInt64( CreationTime.ToEndian( Endian ) );
            stream.WriteUInt32( ( FileHashArrayOffset - (uint)stream.Position ).ToEndian( Endian ) );
            stream.WriteUInt32( FileHashArraySize.ToEndian( Endian ) );
            stream.WriteUInt32( ( VirtualHashArrayOffset - (uint)stream.Position ).ToEndian( Endian ) );
            stream.WriteUInt32( VirtualHashArraySize.ToEndian( Endian ) );
            stream.WriteUInt32( ( FileArrayOffset - (uint)stream.Position ).ToEndian( Endian ) );
            stream.WriteUInt32( FileArraySize.ToEndian( Endian ) );
            stream.WriteUInt32( ( VirtualPackArrayOffset - (uint)stream.Position ).ToEndian( Endian ) );
            stream.WriteUInt32( VirtualPackArraySize.ToEndian( Endian ) );

            foreach ( var h in FileHashArray ) {
                stream.WriteUInt32( h.Key.ToEndian( Endian ) );
                stream.WriteUInt32( h.Value.ToEndian( Endian ) );
            }

            foreach ( var f in FileArray ) {
                stream.WriteUInt64( f.Filesize.ToEndian( Endian ) );
                stream.WriteUInt64( f.CompressedSize.ToEndian( Endian ) );
                stream.WriteUInt64( f.Offset.ToEndian( Endian ) );
                stream.WriteUInt32( f.Hash.ToEndian( Endian ) );
                stream.WriteAscii( f.Extension, 0x0A );
                stream.WriteUInt16( f.Unknown.ToEndian( Endian ) );
            }
        }
Ejemplo n.º 2
0
        public void Write( System.IO.Stream stream )
        {
            stream.WriteUInt32( Type.ToEndian( Endian ) );

            bool ToZ = Type != 0x08;
            if ( ToZ ) {
                stream.WriteUInt32( Util.ToEndian( 0x0Cu, Endian ) );
            }

            stream.WriteUInt32( ( (uint)TextList.Count ).ToEndian( Endian ) );

            if ( ToZ ) {
                stream.WriteUInt32( ( (uint)OtherData.Count ).ToEndian( Endian ) );
                foreach ( uint d in OtherData ) {
                    stream.WriteUInt32( d.ToEndian( Endian ) );
                }
                stream.WriteUInt32( (uint)( TextList.Count * 8 + 4 ) );
            }

            uint pointerLocation = (uint)stream.Position;
            for ( int i = 0; i < TextList.Count; ++i ) {
                // reserve space for pointers
                stream.WriteUInt32( 0 );
                stream.WriteUInt32( 0 );
            }

            foreach ( SDBEntry e in TextList ) {
                for ( int i = 0; i < 2; ++i ) {
                    if ( ToZ ) {
                        stream.WriteAlign( 2 );
                    }
                    uint pos = (uint)stream.Position;
                    stream.Position = pointerLocation;
                    stream.WriteUInt32( ( pos - pointerLocation ).ToEndian( Endian ) );
                    stream.Position = pos;
                    pointerLocation += 4;
                    stream.WriteUTF8Nullterm( i == 0 ? e.IDString : e.Text );
                }
            }
        }