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; 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> /// Stream the field to a buffer /// </summary> /// <param name="ew"></param> public override void Write(IO.EndianWriter ew) { ew.WriteTag(Value); }
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()); }
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); }