private void extractSelectedToolStripMenuItem_Click(object sender, EventArgs e)
        {
            int           vol_index        = Img.Volume_Index; // u need to pass this
            int           total_selected   = 0;
            List <int>    selected_offsets = new List <int>();
            List <int>    selected_Sizes   = new List <int>();
            List <string> Selected_Files   = new List <string>();


            for (int i = 0; i < AFS_LV.SelectedItems.Count; i++)
            {
                selected_offsets.Add(int.Parse(AFS_LV.Items[AFS_LV.SelectedIndices[i]].SubItems[1].Text));
                selected_Sizes.Add(int.Parse(AFS_LV.Items[AFS_LV.SelectedIndices[i]].SubItems[2].Text));
                Selected_Files.Add(AFS_LV.Items[AFS_LV.SelectedIndices[i]].SubItems[3].Text);

                Debug_Log.AppendText("\n\nIndex[" + i.ToString() + "]" + " Sel Off: " + selected_offsets[i].ToString() + " Sel File:  " + Selected_Files[i].ToString());
            }


            total_selected = Selected_Files.Count;


            if (File.Exists(Img.Image_Path))
            {
                using (FileStream fs = new FileStream(Img.Image_Path, FileMode.Open))
                {
                    if (Valid_Iso(fs))
                    {
                        Img.Read_Image     = new CDReader(fs, true, true);
                        Img.Root_FSys_Info = Img.Read_Image.Root.GetFileSystemInfos();
                        Stream       memStream = Img.Read_Image.OpenFile(Img.Selected_Volume, FileMode.Open);
                        BinaryReader br        = new BinaryReader(memStream);

                        int sel_off = int.Parse(AFS_LV.Items[AFS_LV.SelectedIndices[0]].SubItems[1].Text);
                        int sel_sz  = int.Parse(AFS_LV.Items[AFS_LV.SelectedIndices[0]].SubItems[2].Text);
                        relative_off = int.Parse(lbl_relativeOffset.Text);


                        // if total selected files is 1, export single file, else run multi export routine..
                        if (total_selected != 0 && total_selected == 1)
                        {
                            if (Img.Selected_Volume.ToUpper() == "DATA.BIN")
                            {
                                AFSIO.Export_File(memStream, AFS_LV, sel_off, relative_off, sel_sz, true, lbl_stats);
                            }
                            else
                            {
                                AFSIO.Export_File(memStream, AFS_LV, sel_off, relative_off, sel_sz, false, lbl_stats);
                            }
                        }
                        else
                        {
                            if (Img.Selected_Volume.ToUpper() == "DATA.BIN")
                            {
                                AFSIO.Export_SelectedFIles(memStream, AFS_LV, total_selected, sel_off, relative_off, selected_offsets, selected_Sizes, Selected_Files, true, ProgressBar00, lbl_stats);
                            }
                            else
                            {
                                AFSIO.Export_SelectedFIles(memStream, AFS_LV, total_selected, sel_off, relative_off, selected_offsets, selected_Sizes, Selected_Files, false, ProgressBar00, lbl_stats);
                            }
                        }



                        br.Close();
                        fs.Close();
                    }
                }
            }
        }             // selected extract
        public void Read_Image()
        {
            OpenFileDialog OFD = new OpenFileDialog();

            Stream sstream;

            List <string> Vol_List = new List <string>();

            OFD.Filter      = ".AFS()|*.afs|.iso(MHDOS)|*.iso|All Files (*.*)|*.*";;
            OFD.FilterIndex = 3;
            OFD.ShowDialog();


            try
            {
                if (File.Exists(OFD.FileName))
                {
                    using (FileStream fs = new FileStream(OFD.FileName, FileMode.Open))
                    {
                        if (Valid_Iso(fs))
                        {
                            Img.Read_Image = new CDReader(fs, true, true);
                            BinaryReader br = new BinaryReader(fs);
                            Img.VolumeManager = new DiscUtils.VolumeManager();
                            Img.Image_Path    = OFD.FileName;

                            int Dir_Count  = 0;
                            int File_Count = 0;

                            Img.VolumeManager.AddDisk(fs);



                            Array.Resize(ref Img.Logical_VolumeInfo, Img.VolumeManager.GetLogicalVolumes().Length);
                            Array.Resize(ref Img.Physical_VolumeInfo, Img.VolumeManager.GetPhysicalVolumes().Length);

                            Img.Logical_VolumeInfo  = Img.VolumeManager.GetLogicalVolumes();
                            Img.Physical_VolumeInfo = Img.VolumeManager.GetPhysicalVolumes();

                            Img.RootDirectory_Info = Img.Read_Image.Root.GetDirectories();
                            Img.Root_FInfo         = Img.Read_Image.Root.GetFiles();
                            Img.Root_FSystem_Opts  = Img.Read_Image.Root.FileSystem.Options;
                            Img.Root_FSys_Info     = Img.Read_Image.Root.GetFileSystemInfos();

                            Img.Volume_Label = Img.Read_Image.VolumeLabel;
                            //  Img.Volume_Box = Volume_List;
                            Img.Active_Variant = Img.Read_Image.ActiveVariant.ToString();
                            Img.HasBootIMage   = Img.Read_Image.HasBootImage;
                            Img.IsThreadSafe   = Img.Read_Image.IsThreadSafe;
                            Img.Root_Dir       = Img.Read_Image.Root.Name;
                            Img.Cluster_Count  = Img.Read_Image.TotalClusters;
                            //  Img.AFS_LIST = LV_AFS;
                            // Img.Folder_View = TV_FOLDERS;

                            //   LBL_Strip.Text = Img.Image_Path;

                            Array.Resize(ref Img.Root_Nodes, Img.Root_FSys_Info.Length);
                            Array.Resize(ref Root_Files, Img.Root_FSys_Info.Length);



                            byte[] sig_buffer = new byte[5];
                            fs.Seek(0x8000, SeekOrigin.Begin); // seek to PVD

                            PrimaryVolObj.type_flag = br.ReadByte();
                            PrimaryVolObj.STD_ID    = System.Text.Encoding.ASCII.GetString(br.ReadBytes(sig_buffer.Length), 0, sig_buffer.Length);


                            fs.Seek(0x8050, SeekOrigin.Begin);

                            PrimaryVolObj.Volume_Space = br.ReadInt32();

                            fs.Seek(0x8080, SeekOrigin.Begin);
                            PrimaryVolObj.LogicalBlockSz = br.ReadInt16();



                            for (int t = 0; t < Img.Physical_VolumeInfo.Length; t++)
                            {
                                Img.Physical_Size = Img.Physical_VolumeInfo[t].Length;
                            }

                            for (int i = 0; i < Img.Root_FSys_Info.Length; i++)
                            {
                                Debug_Log.AppendText("\nFSys: [ " + i.ToString() + "] " + Img.Root_FSys_Info[i].Name + " Attr " + Img.Root_FSys_Info[i].Attributes.ToString());

                                if (Img.Root_FSys_Info[i].Attributes.ToString().Contains("Directory"))
                                {
                                    Dir_Count++;

                                    Vol_List.Add(Img.Root_FSys_Info[i].Name);

                                    for (int x = 0; x < Img.RootDirectory_Info.Length; x++)
                                    {
                                        Img.Root_Nodes[i] = new TreeNode(Img.Root_FSys_Info[i].Name);

                                        Img.Root_Nodes[i].Nodes.Add(CreateDirNode(Img.RootDirectory_Info[x]));

                                        Img.Root_Nodes[i].ForeColor = GdiColor.White;
                                    }
                                }
                                else if (!Img.Root_FSys_Info[i].Attributes.ToString().Contains("Directory"))
                                {
                                    File_Count++;


                                    sstream = Img.Read_Image.GetFileInfo(Img.Root_FSys_Info[i].FullName).Open(FileMode.Open);

                                    br = new BinaryReader(sstream);

                                    sstream.Seek(0, SeekOrigin.Begin);


                                    // Set struct nodes to file name
                                    Img.Root_Nodes[i] = new TreeNode(Img.Root_FSys_Info[i].Name);
                                    Vol_List.Add(Img.Root_FSys_Info[i].Name);


                                    // if the files have a valid afs signature color code them..
                                    if (AFSIO.AfsValid(sstream, br))
                                    {
                                        Img.Root_Nodes[i].ForeColor = GdiColor.LimeGreen;
                                    }
                                    else
                                    {
                                        Img.Root_Nodes[i].ForeColor = GdiColor.IndianRed;
                                    }
                                }
                            }


                            Debug_Log.AppendText("\b [DEBUG] Total Directories: " + Dir_Count.ToString() + "\n Root_File_Count: " + File_Count.ToString());
                        }
                        else
                        {
                            MessageBox.Show("Invalid Signature.. ", "Invalid iso9660", MessageBoxButtons.OK);
                        }
                    }

                    foreach (var node in Img.Root_Nodes)
                    {
                        tv_root.Nodes.Add(node);
                    }
                }
            }

            catch (IOException ex)
            {
                MessageBox.Show(ex.Message, "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }