diff --git a/src/com/bytezone/diskbrowser/disk/AbstractFormattedDisk.java b/src/com/bytezone/diskbrowser/disk/AbstractFormattedDisk.java index 838f740..85f6f9f 100755 --- a/src/com/bytezone/diskbrowser/disk/AbstractFormattedDisk.java +++ b/src/com/bytezone/diskbrowser/disk/AbstractFormattedDisk.java @@ -557,4 +557,15 @@ public abstract class AbstractFormattedDisk implements FormattedDisk actionListenerList .actionPerformed (new ActionEvent (this, ActionEvent.ACTION_PERFORMED, text)); } + + // ---------------------------------------------------------------------------------// + @Override + public String toString () + // ---------------------------------------------------------------------------------// + { + StringBuilder text = new StringBuilder (); + text.append (String.format ("Block size..... %d%n", disk.getBlockSize ())); + text.append (String.format ("Interleave..... %d", disk.getInterleave ())); + return text.toString (); + } } \ No newline at end of file diff --git a/src/com/bytezone/diskbrowser/disk/AppleDisk2.java b/src/com/bytezone/diskbrowser/disk/AppleDisk2.java deleted file mode 100644 index ae07fd8..0000000 --- a/src/com/bytezone/diskbrowser/disk/AppleDisk2.java +++ /dev/null @@ -1,137 +0,0 @@ -package com.bytezone.diskbrowser.disk; - -import java.io.BufferedInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import com.bytezone.diskbrowser.utilities.FileFormatException; - -// -----------------------------------------------------------------------------------// -public class AppleDisk2 implements Disk2 -// -----------------------------------------------------------------------------------// -{ - File file; - int totalBlocks; - int fileOffset; - int blockSize; - BlockReader blockReader; - - List addressList = new ArrayList<> (); - private final byte[] diskBuffer; // contains the disk contents in memory - - // ---------------------------------------------------------------------------------// - public AppleDisk2 (File file, int blocks, int blockSize) throws FileFormatException - // ---------------------------------------------------------------------------------// - { - this (file, blocks, blockSize, 0); - } - - // ---------------------------------------------------------------------------------// - public AppleDisk2 (File file, int totalBlocks, int blockSize, int fileOffset) - throws FileFormatException - // ---------------------------------------------------------------------------------// - { - this.file = file; - this.totalBlocks = totalBlocks; - this.fileOffset = fileOffset; - - diskBuffer = new byte[totalBlocks * blockSize]; - - try (BufferedInputStream in = new BufferedInputStream (new FileInputStream (file))) - { - - if (fileOffset > 0) - in.skip (fileOffset); - int bytesRead = in.read (diskBuffer); - } - catch (IOException e) - { - e.printStackTrace (); - throw new FileFormatException (e.getMessage ()); - } - } - - // ---------------------------------------------------------------------------------// - @Override - public Iterator iterator () - // ---------------------------------------------------------------------------------// - { - return addressList.iterator (); - } - - // ---------------------------------------------------------------------------------// - @Override - public File getFile () - // ---------------------------------------------------------------------------------// - { - return file; - } - - // ---------------------------------------------------------------------------------// - @Override - public int getBlockSize () - // ---------------------------------------------------------------------------------// - { - return blockSize; - } - - // ---------------------------------------------------------------------------------// - @Override - public boolean isValidAddress (int blockNo) - // ---------------------------------------------------------------------------------// - { - return blockNo >= 0 && blockNo < totalBlocks; - } - - // ---------------------------------------------------------------------------------// - @Override - public int getTotalBlocks () - // ---------------------------------------------------------------------------------// - { - return totalBlocks; - } - - // ---------------------------------------------------------------------------------// - @Override - public byte[] getBlock (int blockNo) - // ---------------------------------------------------------------------------------// - { - return blockReader.readBlock (blockNo); - } - - // ---------------------------------------------------------------------------------// - @Override - public byte[] getDiskBuffer () - // ---------------------------------------------------------------------------------// - { - return diskBuffer; - } - - // ---------------------------------------------------------------------------------// - @Override - public void setBlockReader (BlockReader blockReader) - // ---------------------------------------------------------------------------------// - { - this.blockReader = blockReader; - } - - // ---------------------------------------------------------------------------------// - @Override - public void read (byte[] buffer, int diskOffset, int length) - // ---------------------------------------------------------------------------------// - { - System.arraycopy (diskBuffer, diskOffset, buffer, 0, length); - } - - // ---------------------------------------------------------------------------------// - @Override - public void read (byte[] buffer, int diskOffset, int bufferOffset, int length) - // ---------------------------------------------------------------------------------// - { - System.arraycopy (diskBuffer, diskOffset, buffer, bufferOffset, length); - } -} diff --git a/src/com/bytezone/diskbrowser/disk/AppleDisk2Address.java b/src/com/bytezone/diskbrowser/disk/AppleDisk2Address.java deleted file mode 100644 index 8f88e81..0000000 --- a/src/com/bytezone/diskbrowser/disk/AppleDisk2Address.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.bytezone.diskbrowser.disk; - -// -----------------------------------------------------------------------------------// -public class AppleDisk2Address implements Disk2Address -//-----------------------------------------------------------------------------------// -{ - private Disk2 disk; - private int blockNo; - private byte[] buffer; - - // ---------------------------------------------------------------------------------// - public AppleDisk2Address (Disk2 disk, int blockNo) throws Exception - // ---------------------------------------------------------------------------------// - { - this.disk = disk; - this.blockNo = blockNo; - } - - // ---------------------------------------------------------------------------------// - @Override - public int getBlockNo () - // ---------------------------------------------------------------------------------// - { - return blockNo; - } - - // ---------------------------------------------------------------------------------// - @Override - public byte[] getBlock () - // ---------------------------------------------------------------------------------// - { - if (buffer == null) - buffer = disk.getBlock (blockNo); - - return buffer; - } -} diff --git a/src/com/bytezone/diskbrowser/disk/BasicBlockReader.java b/src/com/bytezone/diskbrowser/disk/BasicBlockReader.java deleted file mode 100644 index 5de6546..0000000 --- a/src/com/bytezone/diskbrowser/disk/BasicBlockReader.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.bytezone.diskbrowser.disk; - -import java.util.List; - -// -----------------------------------------------------------------------------------// -public class BasicBlockReader implements BlockReader -// -----------------------------------------------------------------------------------// -{ - Disk2 disk; - - // ---------------------------------------------------------------------------------// - public BasicBlockReader (Disk2 disk) - // ---------------------------------------------------------------------------------// - { - this.disk = disk; - } - - // ---------------------------------------------------------------------------------// - @Override - public byte[] readBlock (int blockNo) - // ---------------------------------------------------------------------------------// - { - byte[] buffer = new byte[disk.getBlockSize ()]; - int offset = disk.getBlockSize () * blockNo; - System.arraycopy (disk.getDiskBuffer (), offset, buffer, offset, buffer.length); - return buffer; - } - - // ---------------------------------------------------------------------------------// - @Override - public byte[] readBlock (Disk2Address diskAddress) - // ---------------------------------------------------------------------------------// - { - return readBlock (diskAddress.getBlockNo ()); - } - - // ---------------------------------------------------------------------------------// - @Override - public byte[] readBlocks (List diskAddresses) - // ---------------------------------------------------------------------------------// - { - int blockSize = disk.getBlockSize (); - byte[] buffer = new byte[diskAddresses.size () * blockSize]; - int ptr = 0; - for (Disk2Address diskAddress : diskAddresses) - { - disk.read (buffer, diskAddress.getBlockNo () * disk.getBlockSize (), ptr, - blockSize); - ptr += blockSize; - } - return buffer; - } -} diff --git a/src/com/bytezone/diskbrowser/disk/BlockReader.java b/src/com/bytezone/diskbrowser/disk/BlockReader.java deleted file mode 100644 index ee7d611..0000000 --- a/src/com/bytezone/diskbrowser/disk/BlockReader.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.bytezone.diskbrowser.disk; - -import java.util.List; - -public interface BlockReader -{ - public byte[] readBlock (int blockNo); - - public byte[] readBlock (Disk2Address diskAddress); - - public byte[] readBlocks (List diskAddresses); -} diff --git a/src/com/bytezone/diskbrowser/disk/Disk2.java b/src/com/bytezone/diskbrowser/disk/Disk2.java deleted file mode 100644 index e398c69..0000000 --- a/src/com/bytezone/diskbrowser/disk/Disk2.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.bytezone.diskbrowser.disk; - -import java.io.File; - -// -----------------------------------------------------------------------------------// -public interface Disk2 extends Iterable -//-----------------------------------------------------------------------------------// -{ - public File getFile (); - - public int getBlockSize (); // bytes per block - 256 or 512 - - public int getTotalBlocks (); // blocks per disk - usually 560 or 280 - - public boolean isValidAddress (int blockNo); - - public byte[] getDiskBuffer (); - - public byte[] getBlock (int blockNo); - - public void setBlockReader (BlockReader blockReader); - - public void read (byte[] buffer, int diskOffset, int length); - - public void read (byte[] buffer, int diskOffset, int bufferOffset, int length); -} diff --git a/src/com/bytezone/diskbrowser/disk/Disk2Address.java b/src/com/bytezone/diskbrowser/disk/Disk2Address.java deleted file mode 100644 index 56036e4..0000000 --- a/src/com/bytezone/diskbrowser/disk/Disk2Address.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.bytezone.diskbrowser.disk; - -// -----------------------------------------------------------------------------------// -public interface Disk2Address -//-----------------------------------------------------------------------------------// -{ - public int getBlockNo (); - - public byte[] getBlock (); -} diff --git a/src/com/bytezone/diskbrowser/disk/DiskFactory.java b/src/com/bytezone/diskbrowser/disk/DiskFactory.java index 87a5ba0..914db9c 100755 --- a/src/com/bytezone/diskbrowser/disk/DiskFactory.java +++ b/src/com/bytezone/diskbrowser/disk/DiskFactory.java @@ -48,6 +48,19 @@ public class DiskFactory // ---------------------------------------------------------------------------------// public static FormattedDisk createDisk (String path) // ---------------------------------------------------------------------------------// + { + FormattedDisk disk = create (path); + if (disk.getDisk ().getInterleave () > 0) + { + System.out.println (disk); + System.out.println (); + } + return disk; + } + + // ---------------------------------------------------------------------------------// + private static FormattedDisk create (String path) + // ---------------------------------------------------------------------------------// { if (debug) System.out.println ("\nFactory : " + path); diff --git a/src/com/bytezone/diskbrowser/dos/DosDisk.java b/src/com/bytezone/diskbrowser/dos/DosDisk.java index 751eaae..e62b5fe 100755 --- a/src/com/bytezone/diskbrowser/dos/DosDisk.java +++ b/src/com/bytezone/diskbrowser/dos/DosDisk.java @@ -277,14 +277,20 @@ public class DosDisk extends AbstractFormattedDisk return true; } - if (disk.getBlocksPerTrack () > 16) + int blocksPerTrack = disk.getBlocksPerTrack (); + if (blocksPerTrack > 16 && blocksPerTrack != 32) // 32 = unidos + { + if (debug) + System.out.printf ("Blocks per track: %d", blocksPerTrack); return false; + } int[] cb = new int[3]; int best = 0; int il = -1; + int max = disk.getBlocksPerTrack () == 16 ? 3 : 1; // no interleave for 13 sector? - for (int interleave = 0; interleave < 3; interleave++) + for (int interleave = 0; interleave < max; interleave++) { if (debug) System.out.printf ("Checking interleave %d%n", interleave); @@ -442,15 +448,15 @@ public class DosDisk extends AbstractFormattedDisk public String toString () // ---------------------------------------------------------------------------------// { - // StringBuffer text = new StringBuffer (dosVTOCSector.toString ()); - // return text.toString (); - StringBuffer text = new StringBuffer (); + StringBuilder text = new StringBuilder (); + text.append (String.format ("Disk name ............. %s%n", getDisplayPath ())); text.append ( String.format ("DOS version ........... %s%n", dosVTOCSector.dosVersion)); text.append ( String.format ("Sectors per track ..... %d%n", dosVTOCSector.maxSectors)); - text.append (String.format ("Volume no ............. %d", volumeNo)); + text.append (String.format ("Volume no ............. %d%n", volumeNo)); + text.append (String.format ("Interleave ............ %d", disk.getInterleave ())); return text.toString (); } diff --git a/src/com/bytezone/diskbrowser/prodos/ProdosDisk.java b/src/com/bytezone/diskbrowser/prodos/ProdosDisk.java index 0928075..9676fd1 100755 --- a/src/com/bytezone/diskbrowser/prodos/ProdosDisk.java +++ b/src/com/bytezone/diskbrowser/prodos/ProdosDisk.java @@ -335,12 +335,14 @@ public class ProdosDisk extends AbstractFormattedDisk public String toString () // ---------------------------------------------------------------------------------// { - StringBuffer text = new StringBuffer (); + StringBuilder text = new StringBuilder (); String newLine = String.format ("%n"); VolumeDirectoryHeader volumeDirectory = (VolumeDirectoryHeader) headerEntries.get (0); String timeC = volumeDirectory.created == null ? "" : df.format (volumeDirectory.created.getTime ()); + + text.append (String.format ("Disk name : %s%n", getDisplayPath ())); text.append ("Volume name : " + volumeDirectory.name + newLine); text.append ("Creation date : " + timeC + newLine); text.append ("ProDOS version : " + volumeDirectory.version + newLine); @@ -351,6 +353,7 @@ public class ProdosDisk extends AbstractFormattedDisk text.append ("File count : " + volumeDirectory.fileCount + newLine); text.append ("Bitmap block : " + volumeDirectory.bitMapBlock + newLine); text.append ("Total blocks : " + volumeDirectory.totalBlocks + newLine); + text.append (String.format ("Interleave : %d", disk.getInterleave ())); return text.toString (); }