Exemplo n.º 1
0
            public override void Write(IO.EndianWriter stream)
            {
                Compiler comp = stream.Owner as Compiler;

                uint elementsAddress = 0;
                int  flags           = (
                    (tagRef.IsNonResolving ? 1 << 1 : 0)
                    );

                if (tagRef.Elements.Count > 1)
                {
                    elementsAddress = stream.PositionUnsigned;
                    foreach (string i in tagRef.Elements)
                    {
                        stream.WriteTag(i);
                    }

                    comp.MarkLocationFixup(tagRef.Name, stream, true);
                    stream.Write(flags);
                    stream.Write((int)-1);
                    stream.WritePointer(elementsAddress);
                }
                else
                {
                    comp.MarkLocationFixup(tagRef.Name, stream, true);
                    stream.Write(flags);
                    stream.WriteTag(tagRef.Elements[0]);
                    stream.Write((int)0);
                }
            }
Exemplo n.º 2
0
            public override void Write(IO.EndianWriter stream)
            {
                Compiler comp = stream.Owner as Compiler;

                TagBlock tb = new TagBlock((Import.TagBlock)tagGroup.Block);

                tb.Write(stream);

                comp.MarkLocationFixup(tagGroup.Name, stream, false);

                stream.Write(tagGroup.Name);
                stream.Write((int)0);
                stream.WriteTag(tagGroup.GroupTag);
                if (tagGroup.ParentTag != null)
                {
                    stream.WriteTag(tagGroup.ParentTag);
                }
                else
                {
                    stream.Write((int)-1);
                }
                stream.Write(tagGroup.Version);
                stream.Write((short)1);                 // init'd
                stream.Write((int)0);
                stream.Write((int)0);
                stream.Write((int)0);
                stream.Write((int)0);
                stream.WritePointer(tb.RuntimeAddress);
                for (int x = 0; x < 17; x++)
                {
                    stream.Write((int)0);             // child group tags
                }
                stream.Write((int)0);                 // we don't support that shit, gtfo
                stream.Write(comp.Strings.GetNull());
            }
Exemplo n.º 3
0
 /// <summary>
 /// Write the header information
 /// </summary>
 void WritePreprocess()
 {
     OutputStream.Write(new byte[4 + 32]);
     OutputStream.WriteTag(tagGroup.ID);
     OutputStream.Write(0); OutputStream.Write(64); OutputStream.Write(0); OutputStream.Write(0);
     OutputStream.Write(tagGroupAttr.TagVersion);
     engine.Write(OutputStream);
     OutputStream.WriteTag(Blam.MiscGroups.VersionToTag(engine, false));
 }
Exemplo n.º 4
0
 /// <summary>
 /// Writes each tag group's four character code
 /// </summary>
 /// <param name="s"></param>
 public void Write(IO.EndianWriter s)
 {
     foreach (TagGroup t in groupTags)
     {
         s.WriteTag(t.ID);
     }
 }
        /// <summary>
        /// Write the header information
        /// </summary>
        private void WritePreprocess()
        {
            OutputStream.Write(HeaderEndian);

            OutputStream.Write(HeaderVersion);
            OutputStream.WriteTag(IO.TagGroups.BlamLib.Tag);
            OutputStream.Write((ushort)(flags >> 16));

            OutputStream.Write(data.Attribute.Version);
            OutputStream.WriteTag(data.GroupTag.Tag);

            OutputStream.Write((int)0);
            OutputStream.Write((int)0);

            OutputStream.Write((int)0);
            OutputStream.Write(OutputStream.Position + sizeof(int));

            Debug.Assert.If(OutputStream.Position == HeaderSize,
                            "File: Update header size! [{0}, !{1}]", HeaderSize, OutputStream.Position);
        }
Exemplo n.º 6
0
        public void Create()
        {
            Debug.Assert.If(OutputStream != null,
                            "Can't create a definition file when we're not initialized for that mode");

            OutputStream.WriteTag(Ext);
            groupTag.Write(OutputStream);
            OutputStream.Write((uint)engine);
            OutputStream.Write(version);
            OutputStream.Write(header);

            Create(def);
        }
Exemplo n.º 7
0
            public override void Write(IO.EndianWriter stream)
            {
                Compiler comp = stream.Owner as Compiler;

                TagBlock tb = new TagBlock((Import.TagBlock)tagStruct.Block);

                tb.Write(stream);

                comp.MarkLocationFixup(tagStruct.Name, stream, false);

                stream.Write(tagStruct.Name);
                stream.WriteTag(tagStruct.GroupTag);
                stream.Write(tagStruct.Block.DisplayName);
                stream.WritePointer(tb.RuntimeAddress);
            }
            public override void Write(IO.EndianWriter stream)
            {
                Compiler comp = stream.Owner as Compiler;

                int flags;

                #region Block
                var  tag_block     = tagGroup.Block as Import.TagBlock;
                uint fieldsAddress = new FieldsWriter(tag_block.Fields).WriteFields(stream, comp);
                //comp.MarkLocationFixup(tag_block.Name, stream, false);

                flags = (
                    (tag_block.DontReadChildren ? 1 << 0 : 0)
                    );

                uint blockAddress = stream.PositionUnsigned;
                stream.Write(tagGroup.BlockName);
                stream.Write(flags);
                stream.Write((int)1);                 // max elements
                stream.Write(tag_block.CalculateSize(comp.OwnerState));
                stream.Write((int)0);
                stream.WritePointer(fieldsAddress);

                // procs
                stream.Write((int)0); stream.Write((int)0); stream.Write((int)0); stream.Write((int)0);

                stream.Write((int)0);                 // byte swap codes address
                #endregion

                comp.MarkLocationFixup(tagGroup.Name, stream, false);

                flags = (
                    (tagGroup.IsIncludedInTagGroupsChecksum ? 1 << 0 : 0)
                    );

                stream.Write(tagGroup.Name);
                stream.Write(flags);
                if (string.IsNullOrEmpty(tagGroup.GroupTag))
                {
                    Debug.LogFile.WriteLine("CheApe: tag_group '{0}' has a bad group-tag...check your XML?");
                }
                stream.WriteTag(tagGroup.GroupTag);
                if (tagGroup.ParentTag != null)
                {
                    if (string.IsNullOrEmpty(tagGroup.GroupTag))
                    {
                        Debug.LogFile.WriteLine("CheApe: tag_group '{0}' has a bad parent group-tag...check your XML?");
                    }
                    stream.WriteTag(tagGroup.ParentTag);
                }
                else
                {
                    stream.Write((int)-1);
                }
                stream.Write(tagGroup.Version); stream.Write((short)0);
                stream.Write((int)0);                 // post process proc
                stream.WritePointer(blockAddress);
                for (int x = 0; x < 17; x++)
                {
                    stream.Write((int)0);             // child group tags
                }
                stream.Write((int)0);                 // we don't support that shit, gtfo
                stream.Write((int)0);
            }
            public override void Write(IO.EndianWriter stream)
            {
                Compiler comp = stream.Owner as Compiler;

                #region TypeIndex
                if (field.TypeIndex == comp.TypeIndexStringId)
                {
                    stream.Write(comp.TypeIndexTagReference);
                }
                else
                {
                    stream.Write(field.TypeIndex);
                }
                #endregion

                if (field.TypeIndex != comp.TypeIndexPad)
                {
                    stream.Write(field.Name);
                }
                else
                {
                    stream.Write((int)0);
                }

                if (field.TypeIndex == comp.TypeIndexArrayStart ||
                    field.TypeIndex == comp.TypeIndexPad ||
                    field.TypeIndex == comp.TypeIndexSkip)
                {
                    stream.Write(field.ToInt());
                }
                else if (field.TypeIndex == comp.TypeIndexCustom)
                {
                    stream.WriteTag(field.ToString());
                }
                else if (field.TypeIndex == comp.TypeIndexExplanation)
                {
                    if (field.Definition != string.Empty)
                    {
                        stream.Write(field.ToPointer());
                    }
                    else
                    {
                        stream.Write(comp.Strings.GetNull());
                    }
                }
                else if (field.TypeIndex == comp.TypeIndexByteFlags ||
                         field.TypeIndex == comp.TypeIndexEnum ||
                         field.TypeIndex == comp.TypeIndexWordFlags ||
                         field.TypeIndex == comp.TypeIndexShortBlockIndex ||
                         field.TypeIndex == comp.TypeIndexLongFlags ||
                         field.TypeIndex == comp.TypeIndexLongBlockIndex ||
                         field.TypeIndex == comp.TypeIndexTagReference ||
                         field.TypeIndex == comp.TypeIndexData ||
                         field.TypeIndex == comp.TypeIndexBlock ||

                         field.TypeIndex == comp.TypeIndexStringId)
                {
                    comp.AddLocationFixup(field.Definition, stream);

                    stream.Write((int)0);                     // should come back later and write the address
                }
                else
                {
                    stream.Write((int)0);
                }
            }
Exemplo n.º 10
0
 /// <summary>
 /// Writes this tag group's four character code
 /// </summary>
 /// <param name="s"></param>
 public void Write(IO.EndianWriter s)
 {
     s.WriteTag(this.tag);
 }