@@ -33,6 +33,8 @@ TfrmMain = class(TForm)
3333 itmSaveFileAs: TMenuItem;
3434 itmSaveSelectedFilesTo: TMenuItem;
3535 itmCopyMapToClipboard: TMenuItem;
36+ itmSaveFileWithHeaderAs: TMenuItem;
37+ itmSaveSelectedFilesWithHeadersTo: TMenuItem;
3638 mnuMain: TMainMenu;
3739 itmDisk: TMenuItem;
3840 itmOpen: TMenuItem;
@@ -49,6 +51,8 @@ TfrmMain = class(TForm)
4951 dlgSaveBinary: TSaveDialog;
5052 dlgSelectDirectory: TSelectDirectoryDialog;
5153 Separator1: TMenuItem;
54+ Separator2: TMenuItem;
55+ Separator3: TMenuItem;
5256 splVertical: TSplitter;
5357 staBar: TStatusBar;
5458 pnlRight: TPanel;
@@ -91,8 +95,10 @@ TfrmMain = class(TForm)
9195 procedure itmOpenClick (Sender: TObject);
9296 procedure FormCreate (Sender: TObject);
9397 procedure itmOpenRecentClick (Sender: TObject);
98+ procedure itmSaveFileWithHeaderAsClick (Sender: TObject);
9499 procedure itmSaveSelectedFilesToClick (Sender: TObject);
95100 procedure itmSaveFileAsClick (Sender: TObject);
101+ procedure itmSaveSelectedFilesWithHeadersToClick (Sender: TObject);
96102 procedure lvwMainDblClickFile (Sender: TObject);
97103 procedure popListItemPopup (Sender: TObject);
98104 procedure tvwMainChange (Sender: TObject; Node: TTreeNode);
@@ -136,6 +142,8 @@ TfrmMain = class(TForm)
136142 function FindTreeNodeFromData (Node: TTreeNode; Data: TObject): TTreeNode;
137143 function MapByte (Raw: byte): string;
138144
145+ procedure SaveExtractedFile (WithHeader: boolean);
146+ procedure SaveExtractedFilesToFolder (WithHeader: boolean);
139147 procedure WriteSectorLine (Offset: integer; SecHex: string; SecData: string);
140148 procedure SetListSimple ;
141149 procedure OnApplicationDropFiles (Sender: TObject; const FileNames: array of string);
@@ -235,7 +243,17 @@ procedure TfrmMain.itmOpenRecentClick(Sender: TObject);
235243 end ;
236244end ;
237245
246+ procedure TfrmMain.itmSaveSelectedFilesWithHeadersToClick (Sender: TObject);
247+ begin
248+ SaveExtractedFilesToFolder(true);
249+ end ;
250+
238251procedure TfrmMain.itmSaveSelectedFilesToClick (Sender: TObject);
252+ begin
253+ SaveExtractedFilesToFolder(false);
254+ end ;
255+
256+ procedure TfrmMain.SaveExtractedFilesToFolder (WithHeader: boolean);
239257var
240258 ListItem: TListItem;
241259 Folder: string;
@@ -251,7 +269,7 @@ procedure TfrmMain.itmSaveSelectedFilesToClick(Sender: TObject);
251269 begin
252270 DiskFile := TDSKFile(ListItem.Data);
253271 Stream := TFileStream.Create(Folder + DiskFile.FileName, fmCreate);
254- Data := DiskFile.GetData();
272+ Data := DiskFile.GetData(WithHeader );
255273 try
256274 Stream.WriteBuffer(Pointer(Data)^, Length(Data));
257275 finally
@@ -260,7 +278,17 @@ procedure TfrmMain.itmSaveSelectedFilesToClick(Sender: TObject);
260278 end ;
261279end ;
262280
281+ procedure TfrmMain.itmSaveFileWithHeaderAsClick (Sender: TObject);
282+ begin
283+ SaveExtractedFile(true);
284+ end ;
285+
263286procedure TfrmMain.itmSaveFileAsClick (Sender: TObject);
287+ begin
288+ SaveExtractedFile(false);
289+ end ;
290+
291+ procedure TfrmMain.SaveExtractedFile (WithHeader: boolean);
264292var
265293 DiskFile: TDSKFile;
266294 Data: TDiskByteArray;
@@ -275,7 +303,7 @@ procedure TfrmMain.itmSaveFileAsClick(Sender: TObject);
275303 if not dlgSaveBinary.Execute then exit;
276304
277305 Stream := TFileStream.Create(dlgSaveBinary.FileName, fmCreate);
278- Data := DiskFile.GetData();
306+ Data := DiskFile.GetData(WithHeader );
279307 try
280308 Stream.WriteBuffer(Pointer(Data)^, Length(Data));
281309 finally
@@ -301,13 +329,19 @@ procedure TfrmMain.popListItemPopup(Sender: TObject);
301329begin
302330 itmSaveSelectedFilesTo.Visible := tvwMain.Selected.Text = ' Files' ;
303331 itmSaveSelectedFilesTo.Enabled := lvwMain.SelCount > 0 ;
332+ itmSaveSelectedFilesWithHeadersTo.Visible := itmSaveSelectedFilesTo.Visible;
333+ itmSaveSelectedFilesWithHeadersTo.Enabled := itmSaveSelectedFilesTo.Enabled;
304334
305335 itmSaveFileAs.Visible := False;
336+ itmSaveFileWithHeaderAs.Visible := False;
337+
306338 if (lvwMain.SelCount = 1 ) and (lvwMain.Selected.Data <> nil ) and (TObject(lvwMain.Selected.Data).ClassType = TDSKFile) then
307339 begin
308340 itmSaveFileAs.Visible := True;
341+ itmSaveFileWithHeaderAs.Visible := True;
309342 DiskFile := TDSKFile((lvwMain.Selected).Data);
310343 itmSaveFileAs.Caption := Format(' Save %s as...' , [DiskFile.FileName]);
344+ itmSaveFileWithHeaderAs.Caption := Format(' Save %s with header as...' , [DiskFile.FileName]);
311345 end ;
312346end ;
313347
0 commit comments