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); } }
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()); }
/// <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)); }
/// <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); }
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); }
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); } }
/// <summary> /// Writes this tag group's four character code /// </summary> /// <param name="s"></param> public void Write(IO.EndianWriter s) { s.WriteTag(this.tag); }