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}"); }
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; }
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); }