示例#1
0
 /// <summary>
 /// Updates the Node's icon to reflect the collapsed state.
 /// </summary>
 protected void BetterTreeView_AfterCollapse(object sender, TreeViewEventArgs e)
 {
     if (e.Node is BetterTreeNode)
     {
         BetterTreeNode n = (BetterTreeNode)e.Node;
         n.ImageIndex         = n.CollapsedImageIndex;
         n.SelectedImageIndex = n.CollapsedImageIndex;
     }
 }
示例#2
0
        public BetterTreeNode AddDir(string name, BetterTreeNode parent = null)
        {
            BetterTreeNode betterTreeNode = new BetterTreeNode(name);

            betterTreeNode.Offset = -1L;
            betterTreeNode.Size   = -1L;
            parent.Nodes.Add(betterTreeNode);
            return(betterTreeNode);
        }
        public BetterTreeNode AddFile(string name, BetterTreeNode parent, long offset, long size)
        {
            BetterTreeNode betterTreeNode = new BetterTreeNode(name);

            betterTreeNode.Offset = offset;
            betterTreeNode.Size   = size;
            parent.Nodes.Add(betterTreeNode);
            return(betterTreeNode);
        }
示例#4
0
        public BetterTreeNode AddFile(string name, BetterTreeNode parent, long offset, long size, long HashedRegionSize, string ExpectedHash, string ActualHash)
        {
            BetterTreeNode betterTreeNode = new BetterTreeNode(name);

            betterTreeNode.Offset           = offset;
            betterTreeNode.Size             = size;
            betterTreeNode.ExpectedHash     = ExpectedHash;
            betterTreeNode.ActualHash       = ActualHash;
            betterTreeNode.HashedRegionSize = HashedRegionSize;
            parent.Nodes.Add(betterTreeNode);
            return(betterTreeNode);
        }
示例#5
0
        private void AddZFileNodeFor(
            IZFile?zFile,
            BetterTreeNode <ZFileNode> treeNode)
        {
            var parentZFileNode = treeNode.Parent?.AssociatedData;

            var zFileNode = new ZFileNode {
                Parent = parentZFileNode,
                ZFile  = zFile,
            };

            treeNode.AssociatedData = zFileNode;

            this.zFileNodes_.AddLast(zFileNode);
            parentZFileNode?.AllChildZFileNodes?.Add(zFileNode);

            // Gathers keywords.
            var keywords = zFileNode.Keywords;

            if (zFile != null)
            {
                var fileName = zFile.FileName;
                keywords.Add(fileName !);

                var betterFileName = zFile.BetterFileName;
                if (!string.IsNullOrEmpty(betterFileName))
                {
                    keywords.Add(betterFileName !);
                }

                foreach (var keyword in keywords)
                {
                    this.filterImpl_.Add(keyword, zFileNode);
                }
            }
        }
示例#6
0
        private void TV_Partitions_AfterSelect(object sender, TreeViewEventArgs e)
        {
            BetterTreeNode betterTreeNode = (BetterTreeNode)TV_Partitions.SelectedNode;

            if (betterTreeNode.Offset != -1)
            {
                selectedOffset       = betterTreeNode.Offset;
                selectedSize         = betterTreeNode.Size;
                LB_DataOffset.Text   = "Offset: 0x" + selectedOffset.ToString("X");
                LB_SelectedData.Text = e.Node.Text;
                B_Extract.Enabled    = true;
                string[] array = new string[5]
                {
                    "B",
                    "KB",
                    "MB",
                    "GB",
                    "TB"
                };
                double num  = (double)selectedSize;
                int    num2 = 0;
                while (num >= 1024.0 && num2 < array.Length - 1)
                {
                    num2++;
                    num /= 1024.0;
                }
                LB_DataSize.Text = "Size:   0x" + selectedSize.ToString("X") + " (" + num.ToString() + array[num2] + ")";
            }
            else
            {
                LB_SelectedData.Text = "";
                LB_DataOffset.Text   = "";
                LB_DataSize.Text     = "";
                B_Extract.Enabled    = false;
            }
        }
示例#7
0
 public BetterTreeNode AddFile(string name, BetterTreeNode parent, long offset, long size)
 {
     return(AddFile(name, parent, offset, size, 0, "", ""));
 }
示例#8
0
 public int Compare(
     BetterTreeNode <ZFileNode> lhs,
     BetterTreeNode <ZFileNode> rhs)
 => - Asserts.Assert(lhs.AssociatedData).MatchPercentage.CompareTo(
     Asserts.Assert(rhs.AssociatedData).MatchPercentage);
示例#9
0
        private void LoadPartitons()
        {
            bool msgFlag = false;

            TV_Partitions.Nodes.Clear();
            TV_Parti        = new TreeViewFileSystem(TV_Partitions);
            rootNode        = new BetterTreeNode("root");
            rootNode.Offset = -1L;
            rootNode.Size   = -1L;
            TV_Partitions.Nodes.Add(rootNode);
            FileStream fileStream = new FileStream(TB_File.Text, FileMode.Open, FileAccess.Read);

            HFS0.HSF0_Entry[] array = new HFS0.HSF0_Entry[HFS0.HFS0_Headers[0].FileCount];
            fileStream.Position = XCI.XCI_Headers[0].HFS0OffsetPartition + 16 + 64 * HFS0.HFS0_Headers[0].FileCount;
            long num = XCI.XCI_Headers[0].HFS0OffsetPartition + XCI.XCI_Headers[0].HFS0SizeParition;

            byte[] array2 = new byte[64];
            byte[] array3 = new byte[16];
            byte[] array4 = new byte[24];
            for (int i = 0; i < HFS0.HFS0_Headers[0].FileCount; i++)
            {
                fileStream.Position = XCI.XCI_Headers[0].HFS0OffsetPartition + 16 + 64 * i;
                fileStream.Read(array2, 0, 64);
                array[i]            = new HFS0.HSF0_Entry(array2);
                fileStream.Position = XCI.XCI_Headers[0].HFS0OffsetPartition + 16 + 64 * HFS0.HFS0_Headers[0].FileCount + array[i].Name_ptr;
                int num2;
                while ((num2 = fileStream.ReadByte()) != 0 && num2 != 0)
                {
                    chars.Add((char)num2);
                }
                array[i].Name = new string(chars.ToArray());
                chars.Clear();
                TV_Parti.AddFile(array[i].Name + ".hfs0", rootNode, num + array[i].Offset, array[i].Size);
                BetterTreeNode     betterTreeNode = TV_Parti.AddDir(array[i].Name, rootNode);
                HFS0.HFS0_Header[] array5         = new HFS0.HFS0_Header[1];
                fileStream.Position = array[i].Offset + num;
                fileStream.Read(array3, 0, 16);
                array5[0] = new HFS0.HFS0_Header(array3);
                if (array[i].Name == "secure")
                {
                    SecureSize   = new long[array5[0].FileCount];
                    SecureOffset = new long[array5[0].FileCount];
                }
                if (array[i].Name == "normal")
                {
                    NormalSize   = new long[array5[0].FileCount];
                    NormalOffset = new long[array5[0].FileCount];
                }
                HFS0.HSF0_Entry[] array6 = new HFS0.HSF0_Entry[array5[0].FileCount];
                for (int j = 0; j < array5[0].FileCount; j++)
                {
                    fileStream.Position = array[i].Offset + num + 16 + 64 * j;
                    fileStream.Read(array2, 0, 64);
                    array6[j]           = new HFS0.HSF0_Entry(array2);
                    fileStream.Position = array[i].Offset + num + 16 + 64 * array5[0].FileCount + array6[j].Name_ptr;
                    if (array[i].Name == "secure")
                    {
                        SecureSize[j]   = array6[j].Size;
                        SecureOffset[j] = array[i].Offset + array6[j].Offset + num + 16 + array5[0].StringTableSize + array5[0].FileCount * 64;
                    }
                    if (array[i].Name == "normal")
                    {
                        NormalSize[j]   = array6[j].Size;
                        NormalOffset[j] = array[i].Offset + array6[j].Offset + num + 16 + array5[0].StringTableSize + array5[0].FileCount * 64;
                    }
                    while ((num2 = fileStream.ReadByte()) != 0 && num2 != 0)
                    {
                        chars.Add((char)num2);
                    }
                    array6[j].Name = new string(chars.ToArray());
                    chars.Clear();
                    TV_Parti.AddFile(array6[j].Name, betterTreeNode, array[i].Offset + array6[j].Offset + num + 16 + array5[0].StringTableSize + array5[0].FileCount * 64, array6[j].Size);
                    TreeNode[] array7 = TV_Partitions.Nodes.Find(betterTreeNode.Text, true);
                    if (array7.Length != 0)
                    {
                        TV_Parti.AddFile(array6[j].Name, (BetterTreeNode)array7[0], 0L, 0L);
                    }
                }
            }
            long num3 = -9223372036854775808L;

            for (int k = 0; k < SecureSize.Length; k++)
            {
                if (SecureSize[k] > num3)
                {
                    gameNcaSize   = SecureSize[k];
                    gameNcaOffset = SecureOffset[k];
                    num3          = SecureOffset[k];
                }
            }
            PFS0Offset          = gameNcaOffset + 32768;
            fileStream.Position = PFS0Offset;
            fileStream.Read(array3, 0, 16);
            PFS0.PFS0_Headers[0] = new PFS0.PFS0_Header(array3);
            PFS0.PFS0_Entry[] array8;
            try
            {
                array8 = new PFS0.PFS0_Entry[PFS0.PFS0_Headers[0].FileCount];
            }
            catch
            {
                // another temporary fix until someone can understand the real problem
                // I am just taking shots in the dark using any method to get it not to crash
                // Problem: Overflow issue
                array8  = new PFS0.PFS0_Entry[0];
                msgFlag = true;
            }
            for (int m = 0; m < PFS0.PFS0_Headers[0].FileCount; m++)
            {
                fileStream.Position = PFS0Offset + 16 + 24 * m;
                fileStream.Read(array4, 0, 24);
                array8[m] = new PFS0.PFS0_Entry(array4);
                PFS0Size += array8[m].Size;
            }
            TV_Parti.AddFile("boot.psf0", rootNode, PFS0Offset, 16 + 24 * PFS0.PFS0_Headers[0].FileCount + 64 + PFS0Size);
            BetterTreeNode betterTreeNode2 = TV_Parti.AddDir("boot", rootNode);

            for (int n = 0; n < PFS0.PFS0_Headers[0].FileCount; n++)
            {
                fileStream.Position = PFS0Offset + 16 + 24 * PFS0.PFS0_Headers[0].FileCount + array8[n].Name_ptr;
                int num4;
                while ((num4 = fileStream.ReadByte()) != 0 && num4 != 0)
                {
                    chars.Add((char)num4);
                }
                array8[n].Name = new string(chars.ToArray());
                chars.Clear();
                TV_Parti.AddFile(array8[n].Name, betterTreeNode2, PFS0Offset + array8[n].Offset + 16 + PFS0.PFS0_Headers[0].StringTableSize + PFS0.PFS0_Headers[0].FileCount * 24, array8[n].Size);
                TreeNode[] array9 = TV_Partitions.Nodes.Find(betterTreeNode2.Text, true);
                if (array9.Length != 0)
                {
                    TV_Parti.AddFile(array8[n].Name, (BetterTreeNode)array9[0], 0L, 0L);
                }
            }
            fileStream.Close();
            if (msgFlag)
            {
                MessageBox.Show("Trim/extract functions may not be supported for this release [PARTITION]");
            }
        }