Skip to content

Commit d2b189d

Browse files
committed
Fixed bug when saving a new disk image with an image type other than a basic sector Image
1 parent 2e5bf8c commit d2b189d

File tree

7 files changed

+89
-47
lines changed

7 files changed

+89
-47
lines changed

DiskImageTool/DiskImageTool.vbproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
<TargetCulture>en-US</TargetCulture>
3131
<ProductName>DiskImageTool</ProductName>
3232
<PublisherName>Digitoxin</PublisherName>
33-
<ApplicationRevision>0</ApplicationRevision>
33+
<ApplicationRevision>1</ApplicationRevision>
3434
<ApplicationVersion>2.9.0.%2a</ApplicationVersion>
3535
<UseApplicationTrust>false</UseApplicationTrust>
3636
<PublishWizardCompleted>true</PublishWizardCompleted>
@@ -272,6 +272,7 @@
272272
<SubType>Form</SubType>
273273
</Compile>
274274
<Compile Include="CopyProtection.vb" />
275+
<Compile Include="LoadedFiles.vb" />
275276
<Compile Include="SummaryPanel.vb" />
276277
<Compile Include="Testing\DebugScript.vb" />
277278
<Compile Include="DiskImage\SectorData.vb" />

DiskImageTool/FloppyDiskIO.vb

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,15 +55,23 @@ Module FloppyDiskIO
5555
End Sub
5656

5757
If Dialog.ShowDialog = DialogResult.OK Then
58+
Dim Success As Boolean
5859
Try
59-
IO.File.WriteAllBytes(Dialog.FileName, Buffer)
60+
Dim FloppyImage = New BasicSectorImage(Buffer)
61+
Dim Disk = New DiskImage.Disk(FloppyImage, 0)
62+
Dim Response = SaveDiskImageToFile(Disk, Dialog.FileName)
63+
Success = (Response = SaveImageResponse.Success)
6064
Catch ex As Exception
6165
DebugException(ex)
62-
MsgBox("An error has occurred while attempting to save the file.", MsgBoxStyle.Exclamation)
63-
Return ""
66+
Success = False
6467
End Try
6568

66-
Return Dialog.FileName
69+
If Success Then
70+
Return Dialog.FileName
71+
Else
72+
MsgBox("An error has occurred while attempting to save the file.", MsgBoxStyle.Exclamation)
73+
Return ""
74+
End If
6775
Else
6876
Return ""
6977
End If

DiskImageTool/Forms/ImageLoadForm.vb

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Public Class ImageLoadForm
77
Private Const MIN_FILE_SIZE As Long = 163840
88
Private Const MAX_FILE_SIZE As Long = 3000000
99
Private ReadOnly _Files() As String
10-
Private ReadOnly _LoadedFileNames As Dictionary(Of String, ImageData)
10+
Private ReadOnly _LoadedFiles As LoadedFiles
1111
Private ReadOnly _Parent As MainForm
1212
Private _Activated As Boolean = False
1313
Private _Counter As Integer = 0
@@ -16,15 +16,15 @@ Public Class ImageLoadForm
1616
Private _SelectedImageData As ImageData = Nothing
1717
Private _Visible As Boolean = False
1818

19-
Public Sub New(Parent As MainForm, Files() As String, LoadedFileNames As Dictionary(Of String, ImageData))
19+
Public Sub New(Parent As MainForm, Files() As String, LoadedFiles As LoadedFiles)
2020

2121
' This call is required by the designer.
2222
InitializeComponent()
2323

2424
' Add any initialization after the InitializeComponent() call.
2525
_Parent = Parent
2626
_Files = Files
27-
_LoadedFileNames = LoadedFileNames
27+
_LoadedFiles = LoadedFiles
2828
End Sub
2929

3030
Public ReadOnly Property SelectedImageData As ImageData
@@ -53,19 +53,17 @@ Public Class ImageLoadForm
5353
End Function
5454

5555
Private Sub LoadedFileAdd(bw As BackgroundWorker, Key As String, FileName As String, Compressed As Boolean, Optional CompressedFile As String = "")
56-
57-
If Not _LoadedFileNames.ContainsKey(Key) Then
58-
Dim ImageData = New ImageData(FileName)
59-
If Compressed Then
60-
ImageData.Compressed = True
61-
ImageData.CompressedFile = CompressedFile
62-
End If
63-
64-
_LoadedFileNames.Add(Key, ImageData)
56+
Dim ImageData = _LoadedFiles.Add(Key, FileName, Compressed, CompressedFile)
57+
If ImageData IsNot Nothing Then
6558
If _SelectedImageData Is Nothing Then
6659
_SelectedImageData = ImageData
6760
End If
68-
bw.ReportProgress(2, ImageData)
61+
62+
If bw Is Nothing Then
63+
_Parent.ComboImages.Items.Add(ImageData)
64+
Else
65+
bw.ReportProgress(2, ImageData)
66+
End If
6967
End If
7068
End Sub
7169

@@ -111,34 +109,34 @@ Public Class ImageLoadForm
111109
End If
112110
End Sub
113111

114-
Private Function ProcessScan(bw As BackgroundWorker) As Boolean
112+
Public Function ProcessScan(bw As BackgroundWorker) As Boolean
115113
If _Files.Count = 0 Then
116114
Return True
117115
End If
118116

119117
For Each FilePath In _Files.OrderBy(Function(f) f)
120-
If bw.CancellationPending Then
118+
If bw IsNot Nothing AndAlso bw.CancellationPending Then
121119
Return True
122120
End If
123121
Dim FAttributes = IO.File.GetAttributes(FilePath)
124122
If (FAttributes And IO.FileAttributes.Directory) > 0 Then
125123
Dim DirectoryInfo As New IO.DirectoryInfo(FilePath)
126124
Dim Files = DirectoryInfo.GetFiles("*.*", IO.SearchOption.AllDirectories)
127125
For Each FileInfo In Files
128-
If bw.CancellationPending Then
126+
If bw IsNot Nothing AndAlso bw.CancellationPending Then
129127
Return True
130128
End If
131129
Dim Extension = FileInfo.Extension.ToLower
132130
If AllFileExtensions.Contains(Extension) OrElse ArchiveFileExtensions.Contains(Extension) Then
133131
ProcessFile(bw, FileInfo.FullName, Extension)
134132
End If
135-
bw.ReportProgress(1)
133+
bw?.ReportProgress(1)
136134
Next
137135
Else
138136
Dim Extension = Path.GetExtension(FilePath).ToLower
139137
ProcessFile(bw, FilePath, Extension)
140138
End If
141-
bw.ReportProgress(1)
139+
bw?.ReportProgress(1)
142140
Next
143141

144142
Return True

DiskImageTool/ImageFormats/ImageConversion.vb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -611,17 +611,17 @@ Namespace ImageFormats
611611
Case FloppyDiskFormat.Floppy1200
612612
DriveSpeed.SetValue(360, 500)
613613
Case FloppyDiskFormat.Floppy1440
614-
DriveSpeed.SetValue(360, 500)
614+
DriveSpeed.SetValue(300, 500)
615615
Case FloppyDiskFormat.Floppy2880
616616
DriveSpeed.SetValue(300, 1000)
617617
Case FloppyDiskFormat.FloppyDMF1024
618-
DriveSpeed.SetValue(360, 500)
618+
DriveSpeed.SetValue(300, 500)
619619
Case FloppyDiskFormat.FloppyDMF2048
620-
DriveSpeed.SetValue(360, 500)
620+
DriveSpeed.SetValue(300, 500)
621621
Case FloppyDiskFormat.FloppyXDF525
622622
DriveSpeed.SetValue(360, 500)
623623
Case FloppyDiskFormat.FloppyXDF35
624-
DriveSpeed.SetValue(360, 500)
624+
DriveSpeed.SetValue(300, 500)
625625
Case Else
626626
DriveSpeed.SetValue(300, 250)
627627
End Select

DiskImageTool/LoadedFiles.vb

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
Public Class LoadedFiles
2+
Private ReadOnly _FileNames As Dictionary(Of String, ImageData)
3+
4+
Public Sub New()
5+
_FileNames = New Dictionary(Of String, ImageData)
6+
End Sub
7+
8+
Public ReadOnly Property FileNames As Dictionary(Of String, ImageData)
9+
Get
10+
Return _FileNames
11+
End Get
12+
End Property
13+
14+
Public Function Add(Key As String, FileName As String, Compressed As Boolean, Optional CompressedFile As String = "") As ImageData
15+
If Not _FileNames.ContainsKey(Key) Then
16+
Dim ImageData = New ImageData(FileName)
17+
If Compressed Then
18+
ImageData.Compressed = True
19+
ImageData.CompressedFile = CompressedFile
20+
End If
21+
22+
_FileNames.Add(Key, ImageData)
23+
24+
Return ImageData
25+
End If
26+
27+
Return Nothing
28+
End Function
29+
End Class

DiskImageTool/MainForm.vb

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,12 @@ Public Class MainForm
3636
Private _DriveAEnabled As Boolean = False
3737
Private _DriveBEnabled As Boolean = False
3838
Private _ExportUnknownImages As Boolean = False
39-
Private _FileNames As Dictionary(Of String, ImageData)
4039
Private _FileVersion As String = ""
4140
Private _ListViewCheckAll As Boolean = False
4241
Private _ListViewClickedGroup As ListViewGroup = Nothing
4342
Private _ListViewHeader As ListViewHeader
4443
Private _ListViewWidths() As Integer
44+
Private _LoadedFiles As LoadedFiles
4545
Private _ScanRun As Boolean = False
4646
Private _SubFilterDiskType As ComboFilter
4747
Private _SubFilterOEMName As ComboFilter
@@ -1271,7 +1271,7 @@ Public Class MainForm
12711271

12721272
Private Sub FileClose(ImageData As ImageData)
12731273
ItemFiltersRemove(ImageData)
1274-
_FileNames.Remove(ImageData.DisplayPath)
1274+
_LoadedFiles.FileNames.Remove(ImageData.DisplayPath)
12751275

12761276
Dim ActiveComboBox As ComboBox = IIf(ImageFilters.FiltersApplied, ComboImagesFiltered, ComboImages)
12771277

@@ -1381,7 +1381,7 @@ Public Class MainForm
13811381
Exit Sub
13821382
End If
13831383

1384-
ProcessFileDrop(Dialog.FileNames)
1384+
ProcessFileDrop(Dialog.FileNames, True)
13851385
End Sub
13861386

13871387
Private Sub FiltersApply(ResetSubFilters As Boolean)
@@ -1643,7 +1643,7 @@ Public Class MainForm
16431643
}
16441644

16451645
AddHandler Dialog.FileOk, Sub(sender As Object, e As CancelEventArgs)
1646-
If Dialog.FileName <> FilePath AndAlso _FileNames.ContainsKey(Dialog.FileName) Then
1646+
If Dialog.FileName <> FilePath AndAlso _LoadedFiles.FileNames.ContainsKey(Dialog.FileName) Then
16471647
Dim Msg As String = IO.Path.GetFileName(Dialog.FileName) &
16481648
$"{vbCrLf}This file is currently open in {Application.ProductName}." &
16491649
$"Try again with a different file name."
@@ -2257,7 +2257,7 @@ Public Class MainForm
22572257
Dim DiskFormat = frmImageCreationForm.DiskFormat
22582258

22592259
If Data IsNot Nothing Then
2260-
Dim FileName = FloppyDiskSaveFile(Data, DiskFormat, _FileNames)
2260+
Dim FileName = FloppyDiskSaveFile(Data, DiskFormat, _LoadedFiles.FileNames)
22612261
If FileName.Length > 0 Then
22622262
ProcessFileDrop(FileName)
22632263
End If
@@ -2934,10 +2934,10 @@ Public Class MainForm
29342934
Dim Files(0) As String
29352935
Files(0) = File
29362936

2937-
ProcessFileDrop(Files)
2937+
ProcessFileDrop(Files, False)
29382938
End Sub
29392939

2940-
Private Sub ProcessFileDrop(Files() As String)
2940+
Private Sub ProcessFileDrop(Files() As String, ShowDialog As Boolean)
29412941
Cursor.Current = Cursors.WaitCursor
29422942
Dim T = Stopwatch.StartNew
29432943

@@ -2951,12 +2951,18 @@ Public Class MainForm
29512951

29522952
ImageData.StringOffset = 0
29532953

2954-
Dim ImageLoadForm As New ImageLoadForm(Me, Files, _FileNames)
2955-
ImageLoadForm.ShowDialog(Me)
2954+
Dim ImageLoadForm As New ImageLoadForm(Me, Files, _LoadedFiles)
2955+
If ShowDialog Then
2956+
ImageLoadForm.ShowDialog(Me)
2957+
Else
2958+
ImageLoadForm.ProcessScan(Nothing)
2959+
End If
29562960

29572961
ImageData.StringOffset = GetPathOffset()
29582962

29592963
If ImageLoadForm.SelectedImageData IsNot Nothing Then
2964+
LabelDropMessage.Visible = False
2965+
29602966
RefreshSubFilterEnabled(ComboImages)
29612967
ComboImagesRefreshItemText()
29622968
ImageCountUpdate()
@@ -3353,7 +3359,7 @@ Public Class MainForm
33533359
Me.Text = GetWindowCaption()
33543360
ImageFilters.FiltersApplied = False
33553361
_ListViewCheckAll = False
3356-
_FileNames.Clear()
3362+
_LoadedFiles.FileNames.Clear()
33573363
_ScanRun = False
33583364

33593365
MenuOptionsCreateBackup.Checked = My.Settings.CreateBackups
@@ -3589,18 +3595,18 @@ Public Class MainForm
35893595

35903596
Private Sub SetNewFilePath(ImageData As ImageData, NewFilePath As String)
35913597
If ImageData.SourceFile <> NewFilePath Then
3592-
_FileNames.Remove(ImageData.DisplayPath)
3598+
_LoadedFiles.FileNames.Remove(ImageData.DisplayPath)
35933599

35943600
ImageData.SourceFile = NewFilePath
35953601
ImageData.Compressed = False
35963602
ImageData.CompressedFile = ""
35973603
ImageData.ReadOnly = IsFileReadOnly(NewFilePath)
35983604

3599-
If _FileNames.ContainsKey(ImageData.DisplayPath) Then
3600-
FileClose(_FileNames.Item(ImageData.DisplayPath))
3605+
If _LoadedFiles.FileNames.ContainsKey(ImageData.DisplayPath) Then
3606+
FileClose(_LoadedFiles.FileNames.Item(ImageData.DisplayPath))
36013607
End If
36023608

3603-
_FileNames.Add(ImageData.DisplayPath, ImageData)
3609+
_LoadedFiles.FileNames.Add(ImageData.DisplayPath, ImageData)
36043610

36053611
ComboImagesRefreshPaths()
36063612
End If
@@ -3911,14 +3917,14 @@ Public Class MainForm
39113917
End Sub
39123918

39133919
Private Sub BtnReadFloppyA_Click(sender As Object, e As EventArgs) Handles MenuDiskReadFloppyA.Click
3914-
Dim FileName = FloppyDiskRead(Me, FloppyDriveEnum.FloppyDriveA, _FileNames)
3920+
Dim FileName = FloppyDiskRead(Me, FloppyDriveEnum.FloppyDriveA, _LoadedFiles.FileNames)
39153921
If FileName.Length > 0 Then
39163922
ProcessFileDrop(FileName)
39173923
End If
39183924
End Sub
39193925

39203926
Private Sub BtnReadFloppyB_Click(sender As Object, e As EventArgs) Handles MenuDiskReadFloppyB.Click
3921-
Dim FileName = FloppyDiskRead(Me, FloppyDriveEnum.FloppyDriveB, _FileNames)
3927+
Dim FileName = FloppyDiskRead(Me, FloppyDriveEnum.FloppyDriveB, _LoadedFiles.FileNames)
39223928
If FileName.Length > 0 Then
39233929
ProcessFileDrop(FileName)
39243930
End If
@@ -4133,7 +4139,7 @@ Public Class MainForm
41334139

41344140
Private Sub File_DragDrop(sender As Object, e As DragEventArgs) Handles ComboImages.DragDrop, ComboImagesFiltered.DragDrop, LabelDropMessage.DragDrop, ListViewFiles.DragDrop, ListViewHashes.DragDrop, ListViewSummary.DragDrop
41354141
Dim Files As String() = e.Data.GetData(DataFormats.FileDrop)
4136-
ProcessFileDrop(Files)
4142+
ProcessFileDrop(Files, True)
41374143
End Sub
41384144

41394145
Private Sub File_DragEnter(sender As Object, e As DragEventArgs) Handles ComboImages.DragEnter, ComboImagesFiltered.DragEnter, LabelDropMessage.DragEnter, ListViewFiles.DragEnter, ListViewHashes.DragEnter, ListViewSummary.DragEnter
@@ -4286,7 +4292,7 @@ Public Class MainForm
42864292
ListViewSummary.AutoResizeColumnsContstrained(ColumnHeaderAutoResizeStyle.None)
42874293
ImageFilters = New Filters.ImageFilters(ContextMenuFilters)
42884294
SubFiltersInitialize()
4289-
_FileNames = New Dictionary(Of String, ImageData)
4295+
_LoadedFiles = New LoadedFiles
42904296
_BootStrapDB = New BootstrapDB
42914297
_TitleDB = New FloppyDB
42924298
Debounce = New Timer With {
@@ -4312,7 +4318,7 @@ Public Class MainForm
43124318
Dim Args = Environment.GetCommandLineArgs.Skip(1).ToArray
43134319

43144320
If Args.Length > 0 Then
4315-
ProcessFileDrop(Args)
4321+
ProcessFileDrop(Args, True)
43164322
End If
43174323

43184324
If My.Settings.CheckUpdateOnStartup Then

DiskImageTool/My Project/AssemblyInfo.vb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,4 @@ Imports System.Runtime.InteropServices
3131
' <Assembly: AssemblyVersion("1.0.*")>
3232

3333
<Assembly: AssemblyVersion("1.0.0.0")>
34-
<Assembly: AssemblyFileVersion("2.9.0.0")>
34+
<Assembly: AssemblyFileVersion("2.9.0.1")>

0 commit comments

Comments
 (0)