Exemple #1
0
            public void Read(BlamLib.CheApe.ProjectState state, IO.XmlStream s)
            {
                int array_start_depth = 0;

                foreach (XmlNode n in s.Cursor.ChildNodes)
                {
                    if (n.Name != "field")
                    {
                        continue;
                    }

                    Field f;
                    s.SaveCursor(n);
                    fields.Add(f = new Field(state, s));
                    s.RestoreCursor();

                    if (f.TypeIndex == state.kTypeIndexArrayStart)
                    {
                        array_start_depth++;
                    }
                    else if (f.TypeIndex == state.kTypeIndexArrayEnd)
                    {
                        array_start_depth--;
                    }
                }

                if (array_start_depth != 0)
                {
                    throw new Debug.ExceptionLog("Unterminated ArrayStart or extra ArrayEnd in '{0}'.{1}{2}",
                                                 s.FileName, Program.NewLine, s.Cursor.OuterXml);
                }
            }
Exemple #2
0
        protected override void ProcessDefinition(XmlNode node, BlamLib.CheApe.ProjectState state, BlamLib.IO.XmlStream s)
        {
            StringIdFieldsInitialize(state);

            switch (node.Name)
            {
                #region Tag Structs
            case "structs":
                s.SaveCursor(node);
                ProcessTagStructs(state, s);
                s.RestoreCursor();
                break;
                #endregion

                #region Tag Blocks
            case "blocks":
                s.SaveCursor(node);
                ProcessTagBlocks(state, s);
                s.RestoreCursor();
                break;
                #endregion

                #region Tag Groups
            case "groups":
                s.SaveCursor(node);
                ProcessTagGroups(state, s);
                s.RestoreCursor();
                break;
                #endregion
            }
        }
            public TagBlock(BlamLib.CheApe.ProjectState state, IO.XmlStream s) : base(state, s)
            {
                s.ReadAttribute("maxElements", 10, ref maxElements);
                s.ReadAttributeOpt("dontReadChildren", ref DontReadChildren);

                mFields.Read(state, s);
            }
Exemple #4
0
            /// <summary>
            /// Constructs a tag group definition from an xml definition node
            /// </summary>
            /// <param name="state"></param>
            /// <param name="s"></param>
            public TagGroup(BlamLib.CheApe.ProjectState state, IO.XmlStream s) : base(state, s)
            {
                block             = new TagBlock();
                block.DisplayName = name;
                string tempName = nameString + "_block";

                block.Name = blockName = state.Compiler.Strings.Add(tempName);
                block.Read(state, s);
            }
Exemple #5
0
            public TagStruct(BlamLib.CheApe.ProjectState state, IO.XmlStream s)
            {
                string name_string = null;

                s.ReadAttribute("name", ref name_string);
                Name = name_string;

                Fields = new FieldContainer();
            }
        void StringIdFieldsInitialize(BlamLib.CheApe.ProjectState state)
        {
            if (StringIdFieldDefinition != null)
            {
                return;
            }

            // Will add itself to the import state in the ctor
            StringIdFieldDefinition    = new TagReference(state, kStringIdFieldDefinitionName, true, kStringIdGroupTag);
            StringIdFieldHandlePadding = new Field(state, state.kTypeIndexPad, "", kStringIdPadSize.ToString());
        }
            /// <summary>
            /// Constructs a tag group definition from an xml definition node
            /// </summary>
            /// <param name="state"></param>
            /// <param name="s"></param>
            public TagGroup(BlamLib.CheApe.ProjectState state, IO.XmlStream s) : base(state, s)
            {
                s.ReadAttributeOpt("isIncludedInTagGroupsChecksum", ref IsIncludedInTagGroupsChecksum);

                block             = new TagBlock();
                block.DisplayName = name;
                string tempName = nameString + "_block";

                block.Name = blockName = state.Compiler.Strings.Add(tempName);
                block.Read(state, s);
            }
Exemple #8
0
            public Struct(BlamLib.CheApe.ProjectState state, IO.XmlStream s) : base(state, s)
            {
                s.ReadAttribute("groupTag", ref groupTag);

                block             = new TagBlock();
                block.DisplayName = name;
                string tempName = nameString + "_block";

                block.Name = state.Compiler.Strings.Add(tempName);
                block.Read(state, s);
            }
Exemple #9
0
            public Block(BlamLib.CheApe.ProjectState state, IO.XmlStream s) : base(state, s)
            {
                foreach (XmlNode n in s.Cursor.ChildNodes)
                {
                    if (n.Name != "FieldSet")
                    {
                        continue;
                    }

                    s.SaveCursor(n);
                    fieldSets.Add(new FieldSet(state, s));
                    s.RestoreCursor();
                }
            }
Exemple #10
0
 int CalculateSize(BlamLib.CheApe.ProjectState state, Field f, int kUselessPadTypeIndex)
 {
     if (f.TypeIndex == state.kTypeIndexPad ||
         f.TypeIndex == kUselessPadTypeIndex ||
         f.TypeIndex == state.kTypeIndexSkip)
     {
         return(f.ToInt());
     }
     //else if (f.TypeIndex == kStructTypeIndex)
     //	((Struct)state.ImportedBlocks[f.ToString()]).Block.Latest.CalculateSize();
     else
     {
         return(state.GetFieldSize(f.TypeIndex));
     }
 }
Exemple #11
0
            int CalculateSize(BlamLib.CheApe.ProjectState state, Field f)
            {
                int size = 0;

                if (f.TypeIndex == state.kTypeIndexPad || f.TypeIndex == state.kTypeIndexSkip)
                {
                    size = f.ToInt();
                }
                else
                {
                    size = state.GetFieldSize(f.TypeIndex);
                }

                return(size);
            }
Exemple #12
0
        void ProcessTagGroups(BlamLib.CheApe.ProjectState state, IO.XmlStream s)
        {
            foreach (XmlNode n in s.Cursor.ChildNodes)
            {
                if (n.Name != "TagGroup")
                {
                    continue;
                }

                s.SaveCursor(n);
                var group = new TagGroup(state, s);
                s.RestoreCursor();
                string name_str = group.ToString();

                try { Groups.Add(name_str, group); }
                catch (ArgumentException) { Debug.LogFile.WriteLine(CheApe.Import.kDuplicateErrorStr, "tag group definition", name_str); }
            }
        }
Exemple #13
0
        void ProcessTagStructs(BlamLib.CheApe.ProjectState state, IO.XmlStream s)
        {
            foreach (XmlNode n in s.Cursor.ChildNodes)
            {
                if (n.Name != "Struct")
                {
                    continue;
                }

                s.SaveCursor(n);
                var block = new TagStruct(state, s);
                s.RestoreCursor();
                string name_str = block.ToString();

                try { Structs.Add(name_str, block); }
                catch (ArgumentException) { Debug.LogFile.WriteLine(CheApe.Import.kDuplicateErrorStr, "tag struct definition", name_str); }
            }
        }
Exemple #14
0
            /// <summary>
            /// Calculates the block size in bytes via the field for this block
            /// eliminating the need for programmers to aid designers in creating
            /// the tag group definition files
            /// </summary>
            /// <returns></returns>
            public int CalculateSize(BlamLib.CheApe.ProjectState state)
            {
                int size = 0;

                for (int x = 0; x < fields.Count; x++)
                {
                    if (fields[x].TypeIndex == state.kTypeIndexArrayStart)
                    {
                        size += CalculateSizeFromArrayStart(state, ref x);
                    }
                    else
                    {
                        size += CalculateSize(state, fields[x]);
                    }
                }

                return(size);
            }
Exemple #15
0
            /// <summary>
            /// Calculates the block size in bytes via the field for this block
            /// eliminating the need for programmers to aid designers in creating
            /// the tag group definition files
            /// </summary>
            /// <returns></returns>
            public int CalculateSize(BlamLib.CheApe.ProjectState state)
            {
                int size = 0;

                int kUselessPadTypeIndex = state.Definition.GetTypeIndex("UselessPad");

                //int kStructTypeIndex = state.Definition.GetTypeIndex("Struct");

                for (int x = 0; x < fields.Count; x++)
                {
                    if (fields[x].TypeIndex == state.kTypeIndexArrayStart)
                    {
                        size += CalculateSizeFromArrayStart(state, ref x, kUselessPadTypeIndex);
                    }
                    else
                    {
                        size += CalculateSize(state, fields[x], kUselessPadTypeIndex);
                    }
                }

                return(size);
            }
Exemple #16
0
            int CalculateSizeFromArrayStart(BlamLib.CheApe.ProjectState state, ref int current_index)
            {
                int array_size  = 0;
                int array_count = fields[current_index++].ToInt();

                for (; ; current_index++)
                {
                    if (fields[current_index].TypeIndex == state.kTypeIndexArrayStart)
                    {
                        array_size += CalculateSizeFromArrayStart(state, ref current_index);
                    }
                    else if (fields[current_index].TypeIndex == state.kTypeIndexArrayEnd)
                    {
                        break;
                    }
                    else
                    {
                        array_size += CalculateSize(state, fields[current_index]);
                    }
                }

                return(array_size * array_count);
            }
Exemple #17
0
            public override void Read(BlamLib.CheApe.ProjectState state, IO.XmlStream s)
            {
                base.Read(state, s);

                mFields.Read(state, s);
            }
Exemple #18
0
 /// <summary>
 /// Calculates the block size in bytes via the field for this block
 /// eliminating the need for programmers to aid designers in creating
 /// the tag group definition files
 /// </summary>
 /// <returns></returns>
 public int CalculateSize(BlamLib.CheApe.ProjectState state)
 {
     return(mFields.CalculateSize(state));
 }
Exemple #19
0
 public void Read(BlamLib.CheApe.ProjectState state, IO.XmlStream s)
 {
     Fields.Read(state, s);
 }
        protected override void ProcessDefinition(XmlNode node, BlamLib.CheApe.ProjectState state, BlamLib.IO.XmlStream s)
        {
            StringIdFieldsInitialize(state);

            string name_str;

            switch (node.Name)
            {
                #region Tag Structs
            case "structs":
                s.SaveCursor(node);
                foreach (XmlNode n in s.Cursor.ChildNodes)
                {
                    if (n.Name != "Struct")
                    {
                        continue;
                    }

                    s.SaveCursor(n);
                    TagStruct block = new TagStruct(state, s);
                    s.RestoreCursor();
                    name_str = block.ToString();

                    try { Structs.Add(name_str, block); }
                    catch (ArgumentException) { Debug.LogFile.WriteLine(CheApe.Import.kDuplicateErrorStr, "tag struct definition", name_str); }
                }
                s.RestoreCursor();
                break;
                #endregion

                #region Tag Blocks
            case "blocks":
                s.SaveCursor(node);
                foreach (XmlNode n in s.Cursor.ChildNodes)
                {
                    if (n.Name != "TagBlock")
                    {
                        continue;
                    }

                    s.SaveCursor(n);
                    TagBlock block = new TagBlock(state, s);
                    s.RestoreCursor();
                    name_str = block.ToString();

                    try { Blocks.Add(name_str, block); }
                    catch (ArgumentException) { Debug.LogFile.WriteLine(CheApe.Import.kDuplicateErrorStr, "tag block definition", name_str); }
                }
                s.RestoreCursor();
                break;
                #endregion

                #region Tag Groups
            case "groups":
                s.SaveCursor(node);
                foreach (XmlNode n in s.Cursor.ChildNodes)
                {
                    if (n.Name != "TagGroup")
                    {
                        continue;
                    }

                    s.SaveCursor(n);
                    TagGroup group = new TagGroup(state, s);
                    s.RestoreCursor();
                    name_str = group.ToString();

                    try { Groups.Add(name_str, group); }
                    catch (ArgumentException) { Debug.LogFile.WriteLine(CheApe.Import.kDuplicateErrorStr, "tag group definition", name_str); }
                }
                s.RestoreCursor();
                break;
                #endregion
            }
        }
Exemple #21
0
 public TagBlock(BlamLib.CheApe.ProjectState state, IO.XmlStream s) : base(state, s)
 {
     s.ReadAttribute("maxElements", 10, ref maxElements);
 }