private void NewImage(object sender, EventArgs e)
        {
            if (Image != null && Image.Modified)
            {
                if (MessageBox.Show("Образ не был сохранен. Продолжить?", "", MessageBoxButtons.YesNo) != DialogResult.Yes)
                {
                    return;
                }
            }
            string value = newImageName;

            if (!InputBox.Query("", "Введите имя образа", ref value))
            {
                return;
            }
            int size = newImageSize;

            if (!InputBox.InputInt32("", "Введите размер в треках", ref size, 1, MainForm.MaxTrack))
            {
                return;
            }
            newImageName = value;
            newImageSize = size;
            Image        = new TrDosImage(size * SectorsOnTrack, map)
            {
                Name = value
            };
            map.Image   = Image;
            stats.Image = Image;
            map.Repaint();
            stats.Repaint();
            SetEnabled();
            Log.Info?.Out($"Образ диска создан. Имя: {value} | Размер: {size} треков ({size * SectorsOnTrack} секторов).");
        }
        private void LoadImage(object sender, EventArgs e)
        {
            if (Image != null && Image.Modified)
            {
                if (MessageBox.Show("Образ не был сохранен. Продолжить?", "", MessageBoxButtons.YesNo) != DialogResult.Yes)
                {
                    return;
                }
            }
            OpenFileDialog openDialog = new OpenFileDialog()
            {
                Filter = "TRD (*.trd)|*.trd|Modified TRD (*.trd)|*.trd|FDI (*.fdi)|*.fdi|All Files (*.*)|*.*"
            };

            if (openDialog.ShowDialog() != DialogResult.OK)
            {
                return;
            }
            TrDosImage image = new TrDosImage();
            int        result;

            if (openDialog.FilterIndex == 1)
            {
                result = image.LoadTrd(openDialog.FileName, File.ReadAllBytes(openDialog.FileName), false, map);
            }
            else if (openDialog.FilterIndex == 2)
            {
                result = image.LoadTrd(openDialog.FileName, File.ReadAllBytes(openDialog.FileName), true, map);
            }
            else if (openDialog.FilterIndex == 3)
            {
                string text;
                result = image.LoadFdi(openDialog.FileName, File.ReadAllBytes(openDialog.FileName), out text, map);
            }
            else
            {
                result = image.LoadAutodetect(openDialog.FileName, map);
            }
            if (result != 0)
            {
                Log.Error?.Out($"Ошибка при чтении файла: {openDialog.FileName}");
                return;
            }
            Image       = image;
            map.Image   = Image;
            stats.Image = Image;
            map.Repaint();
            stats.Repaint();
            SetEnabled();
            int loadedSize = Image.SizeTracks;

            Log.Info?.Out($"Образ загружен. Имя: {Image.Name} | Размер: {loadedSize} треков | FileName: {openDialog.FileName}");
        }
        private void MergeImage(object sender, EventArgs e)
        {
            OpenFileDialog openDialog = new OpenFileDialog()
            {
                Filter = "TRD (*.trd)|*.trd|Modified TRD (*.trd)|*.trd|FDI (*.fdi)|*.fdi|All Files (*.*)|*.*"
            };

            if (openDialog.ShowDialog() != DialogResult.OK)
            {
                return;
            }
            TrDosImage image = new TrDosImage();
            int        result;

            if (openDialog.FilterIndex == 1)
            {
                result = image.LoadTrd(openDialog.FileName, File.ReadAllBytes(openDialog.FileName), false);
            }
            else if (openDialog.FilterIndex == 2)
            {
                result = image.LoadTrd(openDialog.FileName, File.ReadAllBytes(openDialog.FileName), true);
            }
            else if (openDialog.FilterIndex == 3)
            {
                string text;
                result = image.LoadFdi(openDialog.FileName, File.ReadAllBytes(openDialog.FileName), out text);
            }
            else
            {
                result = image.LoadAutodetect(openDialog.FileName);
            }
            if (result != 0)
            {
                Log.Warn?.Out($"Ошибка при чтении файла: {openDialog.FileName}");
                return;
            }
            int addedReadSectors;

            Image.Merge(image, out addedReadSectors);
            map.Repaint();
            stats.Repaint();
            Log.Info?.Out($"Образ слит с образом из файла: {openDialog.FileName}. Добавлено прочитанных секторов: {addedReadSectors}");
        }
示例#4
0
        public override object Clone()
        {
            TrDosImage image = new TrDosImage();

            image.Data = new byte[Data.Length];
            Data.CopyTo(image.Data, 0);
            image.Sectors = new SectorProcessResult[Sectors.Length];
            Sectors.CopyTo(image.Sectors, 0);
            image.Name = Name;
            if (Files != null)
            {
                image.Files = new MList <FileData>(Files, true, true);
            }
            image.Title               = Title;
            image.Free8Sector         = Free8Sector;
            image.FileCount8Sector    = FileCount8Sector;
            image.DiskType            = DiskType;
            image.DeletedFiles8Sector = DeletedFiles8Sector;
            image.FileName            = FileName;
            return(image);
        }
 public TrDosReader(Control parent, DiskReaderParams dparams) : base(parent, 256, 16, dparams)
 {
     Image = new TrDosImage(160 * SectorsOnTrack, map)
     {
         Name = ""
     };
     map.Image   = Image;
     stats.Image = Image;
     map.Repaint();
     stats.Repaint();
     saveImage.Click         += SaveImage;
     readCatalogue.Click     += ReadCatalogue;
     showCatalogue.Click     += ShowCatalogue;
     showCatFromTrack.Click  += ShowCatFromTrack;
     loadImage.Click         += LoadImage;
     mergeImage.Click        += MergeImage;
     newImage.Click          += NewImage;
     readForward.Click       += ReadForward;
     readBackward.Click      += ReadBackward;
     readRandomSectors.Click += ReadRandomSectors;
 }
示例#6
0
        public void ShowForm(TrDosImage image, bool showBad, int sectorNumber = 0)
        {
            this.image = image;
            image.ParseCatalogue(sectorNumber);
            Text = image.Name;
            StringBuilder sb = new StringBuilder();

            sb.AppendLine(MakeStr($"Title:   {image.Title}", 20));
            sb.AppendLine(MakeStr($"Files:   {image.FileCount8Sector}", 20));
            sb.AppendLine(MakeStr($"Deleted: {image.DeletedFiles8Sector}", 20));
            sb.AppendLine(MakeStr($"Free:    {image.Free8Sector}", 20));
            sb.AppendLine(MakeStr($"Type:    {image.DiskType}", 20));
            string h = "\n" + new string('-', showBad ? 74 : 49);

            sb.AppendLine(h);
            sb.Append(MakeStr("Filename", 9) + MakeStr("Ext", 5) + MakeStr("Size", 5) + MakeStr("Start", 8) + MakeStr("Length", 8) + MakeStr("Track", 7)
                      + MakeStr("Sector", 7));
            if (showBad)
            {
                sb.Append(MakeStr("Good", 7) + MakeStr("Bad", 5) + MakeStr("Unprocessed", 13));
            }
            sb.AppendLine(h);
            for (int i = 0; i < image.Files.Cnt; i++)
            {
                FileData file = image.Files[i];
                sb.Append(MakeStr(file.FileName, 9) + MakeStr(file.Extension.ToString(), 5) + MakeStr(file.Size, 5) + MakeStr(file.Start, 8) +
                          MakeStr(file.Length, 8) + MakeStr(file.Track, 7) + MakeStr(file.Sector, 7));
                if (showBad)
                {
                    sb.Append(MakeStr(file.GoodSectors, 7) + MakeStr(file.BadSectors, 5) + MakeStr(file.UnprocessedSectors, 13));
                }
                sb.AppendLine();
            }
            richTextBox1.Text = sb.ToString();
            image.ParseCatalogue();
            ShowDialog();
        }
 private void BuildStrings()
 {
     for (int i = 0; i < cvalues.Length; i++)
     {
         cvalues[i].Length = 0;
     }
     if (Image == null)
     {
         return;
     }
     cvalues[0].Append(Image.Name);
     AppendInt(cvalues[1], Image.SizeTracks);
     AppendInt(cvalues[2], Image.SizeSectors);
     AppendInt(cvalues[3], Image.FileSectorsSize);
     cvalues[3].Append(' ');
     cvalues[3].Append('(');
     AppendInt(cvalues[3], (int)Math.Ceiling((double)Image.FileSectorsSize / Image.SectorsOnTrack));
     cvalues[3].Append(tracks);
     AppendInt(cvalues[4], Image.ProcessedSectors);
     AppendInt(cvalues[5], Image.UnprocessedSectors);
     AppendInt(cvalues[6], Image.GoodSectors);
     AppendInt(cvalues[7], Image.NotGoodSectors);
     if (Image is TrDosImage)
     {
         TrDosImage image = (TrDosImage)Image;
         if (image.CatIsRead)
         {
             cvalues[8].Append(yes);
         }
         else
         {
             if (image.Sectors.Length >= 9)
             {
                 for (int i = 0; i < 9; i++)
                 {
                     if (Image.Sectors[i] != SectorProcessResult.Good)
                     {
                         continue;
                     }
                     for (int u = 0; u < 9; u++)
                     {
                         if (image.Sectors[u] == SectorProcessResult.Good)
                         {
                             if (cvalues[8].Length > 0)
                             {
                                 cvalues[8].Append(',');
                                 cvalues[8].Append(' ');
                             }
                             AppendInt(cvalues[8], u);
                         }
                     }
                     goto skip;
                 }
                 cvalues[8].Append(no);
                 skip :;
             }
         }
         AppendInt(cvalues[9], image.DamagedFiles);
         cvalues[9].Append(from);
         AppendInt(cvalues[9], image.FileCountUntil0);
     }
     cvalues[10].Append(Image.Modified ? yes : no);
 }