Example #1
0
            public void Write(IO.EndianWriter s)
            {
                var xmbContext = s.UserData as XmbFileContext;

                s.Write(RootElementIndex);
                XmbVariantSerialization.Write(s, NameVariant);
                XmbVariantSerialization.Write(s, InnerTextVariant);
                if (xmbContext.PointerSize == Shell.ProcessorSize.x64)
                {
                    s.Pad32();
                }

                #region Attributes header
                s.Write(Attributes.Count);
                if (xmbContext.PointerSize == Shell.ProcessorSize.x64)
                {
                    s.Pad32();
                }
                mAttributesOffsetPos = s.PositionPtr;
                s.WriteVirtualAddress(Values.PtrHandle.InvalidHandle32);
                #endregion

                #region Children header
                s.Write(ChildrenIndices.Count);
                if (xmbContext.PointerSize == Shell.ProcessorSize.x64)
                {
                    s.Pad32();
                }
                mChildrenOffsetPos = s.PositionPtr;
                s.WriteVirtualAddress(Values.PtrHandle.InvalidHandle32);
                #endregion
            }
Example #2
0
        public void Write(IO.EndianWriter s)
        {
            var context = s.UserData as XmbFileContext;

            s.Write(kSignature);
            if (context.PointerSize == Shell.ProcessorSize.x64)
            {
                s.Pad32();
            }

            #region Elements header
            s.Write(mElements.Count);
            if (context.PointerSize == Shell.ProcessorSize.x64)
            {
                s.Pad32();
            }
            var elements_offset_pos = s.MarkVirtualAddress(context.PointerSize);
            #endregion

            #region Pool header
            s.Write(mPool.Size);
            if (context.PointerSize == Shell.ProcessorSize.x64)
            {
                s.Pad32();
            }
            var pool_offset_pos = s.MarkVirtualAddress(context.PointerSize);
            #endregion

            if (context.PointerSize == Shell.ProcessorSize.x64)
            {
                s.Pad64();
            }

            var elements_offset = s.PositionPtr;
            foreach (var e in mElements)
            {
                e.Write(s);
            }
            foreach (var e in mElements)
            {
                e.WriteAttributes(s);
                e.WriteChildren(s);
            }

            var pool_offset = s.PositionPtr;
            mPool.Write(s);

            s.Seek((long)elements_offset_pos);
            s.WriteVirtualAddress(elements_offset);
            s.Seek((long)pool_offset_pos);
            s.WriteVirtualAddress(pool_offset);
        }
Example #3
0
            public void WriteChildren(IO.EndianWriter s)
            {
                if (ChildrenIndices.Count == 0)
                {
                    return;
                }

                mChildrenOffset = s.PositionPtr;
                foreach (int ci in ChildrenIndices)
                {
                    s.Write(ci);
                }

                // Update element entry
                var pos = s.BaseStream.Position;

                s.Seek((long)mChildrenOffsetPos);
                s.WriteVirtualAddress(mChildrenOffset);
                s.Seek(pos);
            }
Example #4
0
            public void WriteAttributes(IO.EndianWriter s)
            {
                if (Attributes.Count == 0)
                {
                    return;
                }

                mAttributesOffset = s.PositionPtr;
                foreach (var kv in Attributes)
                {
                    XmbVariantSerialization.Write(s, kv.Key);
                    XmbVariantSerialization.Write(s, kv.Value);
                }

                // Update element entry
                var pos = s.BaseStream.Position;

                s.Seek((long)mAttributesOffsetPos);
                s.WriteVirtualAddress(mAttributesOffset);
                s.Seek(pos);
            }