@@ -58,6 +58,7 @@ TDSKFile = class(TObject)
5858 HeaderType: string;
5959 Checksum: boolean;
6060 Size: integer;
61+ HeaderSize: integer;
6162 Meta: string;
6263
6364 function GetData (WithHeader: boolean): TDiskByteArray;
@@ -198,6 +199,7 @@ function TDSKFileSystem.ReadFileEntry(Data: array of byte; Offset: integer): TDS
198199 ReadOnly := Data[Offset + READONLY_OFFSET] > 127 ;
199200 System := Data[Offset + SYSTEM_OFFSET] > 127 ;
200201 Archived := Data[Offset + ARCHIVED_OFFSET] > 127 ;
202+ HeaderSize := 0 ;
201203
202204 Extent := Data[Offset + EXTENT_LOW];
203205 AllocOffset := Offset + ALLOCATION_OFFSET;
@@ -250,6 +252,7 @@ procedure TDSKFileSystem.TryAMSDOSHeader(Data: array of byte; DiskFile: TDSKFile
250252 DiskFile.Checksum := True;
251253 DiskFile.HeaderType := ' AMSDOS' ;
252254 DiskFile.Size := Data[64 ] + (Data[65 ] << 8 ) + (Data[66 ] << 16 );
255+ DiskFile.HeaderSize := 128 ;
253256
254257 LoadAddr := Data[21 ] + (Data[22 ] << 8 );
255258 ExecAddr := Data[26 ] + (Data[27 ] << 8 );
@@ -286,6 +289,7 @@ procedure TDSKFileSystem.TryPlus3DOSHeader(Data: array of byte; DiskFile: TDSKFi
286289 DiskFile.Checksum := CalcChecksum = Data[127 ];
287290 DiskFile.HeaderType := Sig;
288291 DiskFile.Size := Data[11 ] + (Data[12 ] << 8 ) + (Data[13 ] << 16 ) + (Data[14 ] << 24 );
292+ DiskFile.HeaderSize := 128 ;
289293
290294 Length := Data[16 ] + (Data[17 ] << 8 );
291295 Param1 := Data[18 ] + (Data[19 ] << 8 );
@@ -322,7 +326,7 @@ destructor TDSKFile.Destroy;
322326 inherited Destroy;
323327end ;
324328
325- function TDSKFile.GetData (WithHeader:boolean): TDiskByteArray;
329+ function TDSKFile.GetData (WithHeader: boolean): TDiskByteArray;
326330var
327331 Block, BytesLeft, TargetIdx, BlockSize, SectorsLeft, SectorsPerBlock: integer;
328332 Disk: TDSKDisk;
@@ -332,7 +336,7 @@ function TDSKFile.GetData(WithHeader:boolean): TDiskByteArray;
332336 FileData := nil ;
333337 SetLength(FileData, Size);
334338
335- BytesLeft := Size;
339+ BytesLeft := Size + HeaderSize ;
336340 TargetIdx := 0 ;
337341 Disk := FParentFileSystem.FParentDisk;
338342 BlockSize := Disk.Specification.GetBlockSize();
@@ -366,9 +370,9 @@ function TDSKFile.GetData(WithHeader:boolean): TDiskByteArray;
366370
367371 // Strip any headers
368372 if (not WithHeader) and ((HeaderType = ' PLUS3DOS' ) or (HeaderType = ' AMSDOS' )) then
369- Result := Copy(FileData, 128 , Size - 128 )
373+ Result := Copy(FileData, HeaderSize , Size - HeaderSize )
370374 else
371- Result := FileData;
375+ Result := Copy( FileData, Size) ;
372376end ;
373377
374378end .
0 commit comments