예제 #1
0
 private void LoadTag()
 {
     //Create a new Tag object from file
     Tag = new Tag(txbFilename.Text);
     Loaded = true;
     DisplayTagInformation();
 }
 private void LoadTags(string Folder)
 {
     LoadedTagMeta = null;
     LoadedTags = new List<Tag>();
     tagList.Items.Clear();
     bitmapExplorer.Items.Clear();
     string[] Files = Directory.GetFiles(Folder, "*.bitm.h2tag", SearchOption.AllDirectories);
     foreach (string s in Files)
     {
         Tag t = new Tag(s);
         LoadedTags.Add(t);
         string label = CleanFilename(t.Filename, Folder); 
         tagList.Items.Add(label);
     }
 }
예제 #3
0
 void ProcessPointersAndValues(Tag tag, int offset, int magic)
 {
     valueCache.Clear();
     pointerCache.Clear();
     rawCache.Clear();
     Block block = Blocks.Types[tag.Type];
     binReader = new BinaryReader(tag.TagStream);
     binWriter = new BinaryWriter(tag.TagStream);
     ProcessBlock(block, 1, 0, tag.TagStream);
     for (int i = 0; i < valueCache.Count; i++)
     {
         int index;
         switch (valueCache.Values[i].Type)
         {
             case ValueType.StringId:
                 tag.TagStream.Position = valueCache.Values[i].Offset;
                 index = binReader.ReadInt32();
                 tag.TagStream.Position -= 4;
                 binWriter.Write(GetStringId(tag.StringIdNames[index]));
                 break;
             case ValueType.TagId:
                 tag.TagStream.Position = valueCache.Values[i].Offset;
                 index = binReader.ReadInt32();
                 if (index == -1) continue;
                 tag.TagStream.Position -= 4;
                 binWriter.Write(GetTagId(tag.TagReferences[index]));
                 break;
             case ValueType.TagReference:
                 tag.TagStream.Position = valueCache.Values[i].Offset + 4;
                 index = binReader.ReadInt32();
                 if (index == -1) continue;
                 tag.TagStream.Position -= 8;
                 byte[] bytes = Encoding.UTF8.GetBytes(Globals.GetDirtyType(Path.GetExtension(tag.TagReferences[index]).Substring(1)));
                 binWriter.Write(bytes, 0, 4);
                 binWriter.Write(GetTagId(tag.TagReferences[index]));
                 break;
         }
     }
     for (int i = 0; i < pointerCache.Count; i++)
     {
         tag.TagStream.Position = pointerCache.Values[i].Offset;
         binWriter.Write(pointerCache.Values[i].Address + offset + magic);
     }
     binWriter = new BinaryWriter(file);
 }
예제 #4
0
 void LoadTag(string filename)
 {
     if (!loadedTagnames.ContainsKey(filename)) loadedTagnames.Add(filename, loadedTagnames.Count);
     else return;
     filename += ".h2tag";
     Tag tag = new Tag(filename);
     this.tags.Add(tag);
     foreach (string s in tag.TagReferences)
         LoadTag(s);
 }
예제 #5
0
 void ProcessRaw(Tag tag, int rawOffset)
 {
     rawCache.Clear();
     valueCache.Clear();
     pointerCache.Clear();
     Block block = Blocks.Types[tag.Type];
     binReader = new BinaryReader(tag.TagStream);
     binWriter = new BinaryWriter(tag.TagStream);
     ProcessBlock(block, 1, 0, tag.TagStream);
     for (int i = 0; i < rawCache.Count; i++)
     {
         tag.TagStream.Position = rawCache.Values[i].Offset1;
         int index = binReader.ReadInt32();
         if ((index & 0xC0000000) == 0)
         {
             tag.TagStream.Position = rawCache.Values[i].Offset0;
             binWriter.Write(tag.RawOffsets[index].Length);
             tag.TagStream.Position = rawCache.Values[i].Offset1;
             binWriter.Write((int)(tag.RawOffsets[index].Address + rawOffset));
         }
     }
     binWriter = new BinaryWriter(file);
 }
예제 #6
0
 /// <summary>
 /// Loads tag from filename and then loads all referenced tags tag references
 /// </summary>
 /// <param name="filename">filename in format of dir/filename.class, where class is CLEAN. Do NOT include file extension .h2tag</param>
 private void LoadTagsRecursively(string filename)
 {
     if (!filenames.ContainsKey(filename))
     {
         filenames.Add(filename, filenames.Count);
         Tag tag = new Tag(filename + Tag.Path.Extension);
         this.tags.Add(tag);
         foreach (string s in tag.TagReferences)
             LoadTagsRecursively(s);
     }
 }
예제 #7
0
 private void ProcessTagRawValues(Tag tag, int rawOffset)
 {
     rawCache.Clear();
     binReader = new BinaryReader(tag.TagStream);
     binWriter = new BinaryWriter(tag.TagStream);
     Block block = Blocks.Types[tag.Type];
     ProcessBlockRaw(block, 1, 0, tag.TagStream);
     for (int i = 0; i < rawCache.Count; i++)
     {
         tag.TagStream.Position = rawCache.Values[i].Offset1;
         int index = binReader.ReadInt32();
         if ((index & 0xC0000000) == 0)
         {
             tag.TagStream.Position = rawCache.Values[i].Offset0;
             binWriter.Write(tag.ResourceInformation[index].Length);
             tag.TagStream.Position = rawCache.Values[i].Offset1;
             binWriter.Write((int)(tag.ResourceInformation[index].Address + rawOffset));
         }
     }
     binWriter = new BinaryWriter(output);
 }
예제 #8
0
        private void LoadTag(ClassTreeNode node)
        {
            foreach (DockContent dc in this.PrimaryDock.Documents)
                if ((string)(dc.Tag) == node.Path)
                {
                    dc.Activate();
                    return;
                }
            switch (Sunfish.Tag.Path.GetTagType(node.Path))
            {

                case "scnr":
                    MetaTool mt = new MetaTool();
                    mt.Text = Explorer.treeView1.SelectedNode.Text;
                    mt.Show(this.PrimaryDock, WeifenLuo.WinFormsUI.Docking.DockState.Document);
                    Sunfish.Tag scnr = new Tag(node.Path);
                    mt.LoadTag(scnr);
                    break;

                case "bitm":
                    BitmapTool bt = new BitmapTool();
                    bt.Text = Explorer.treeView1.SelectedNode.Text;
                    bt.Show(this.PrimaryDock, WeifenLuo.WinFormsUI.Docking.DockState.Document);
                    break;

                case "mode":
                    ModelEditor modeEdit = new ModelEditor();
                    modeEdit.Text = Explorer.treeView1.SelectedNode.Text;
                    modeEdit.Show(this.PrimaryDock, WeifenLuo.WinFormsUI.Docking.DockState.Document);
                    modeEdit.LoadTag(node.Path);
                    break;
                case "coll":
                    ModelEditor collEdit = new ModelEditor();
                    collEdit.Text = Explorer.treeView1.SelectedNode.Text;
                    collEdit.Show(this.PrimaryDock, WeifenLuo.WinFormsUI.Docking.DockState.Document);
                    collEdit.LoadTag(node.Path);
                    break;
                default:
                    mt = new MetaTool();
                    mt.Text = Explorer.treeView1.SelectedNode.Text;
                    mt.Show(this.PrimaryDock, WeifenLuo.WinFormsUI.Docking.DockState.Document);
                    Sunfish.Tag tag = new Tag(node.Path);
                    mt.LoadTag(tag);
                    break;
            }
        }
예제 #9
0
        public void UpdateScenario(Tag scenariotag)
        {
            List<Tag> tags = new List<Tag>(2);
            if (Tags[0].Type == "sbsp")
                tags.AddRange(Tags);
            else
            {
                tags.Add(Tags[1]);
                tags.Add(Tags[0]);
            }
            Tags = tags;

            BinaryWriter bw = new BinaryWriter(Stream);
            foreach (CompilerTag tag in Tags)
            {
                bw.Write(Padding.GetBytes(Stream.Position));
                Entry entry = new Entry()
                {
                    Offset = (int)Stream.Position,
                    Length = (int)tag.TagStream.Length,
                    PointerOffsets = tag.PointerOffsets,
                    RawOffsets = tag.RawOffsets,
                    StringIDOffsets = tag.StringIdOffsets,
                    TagIDOffsets = tag.TagReferenceOffsets
                };
                tag.TagStream.WriteTo(Stream);
                bw.Write(Padding.GetBytes(Stream.Position));
                bw.Flush();
                Entries.Add(entry);
                TagIndexers.Add(tag.ID);
            }
            BinaryReader br = new BinaryReader(scenariotag.TagStream);
            bw = new BinaryWriter(scenariotag.TagStream);
            scenariotag.TagStream.Position = 532;
            int address = br.ReadInt32();
            scenariotag.TagStream.Position = address;
            bw.Write(Offset);
            bw.Write(Length);
            bw.Write(VirtualOffset);
        }