From 54f037b2aab3ca5f0450117c4156cc80c4a32254 Mon Sep 17 00:00:00 2001 From: Denis Molony Date: Fri, 26 Feb 2016 10:43:44 +1100 Subject: [PATCH] show empty blocks --- src/com/bytezone/diskbrowser/cpm/CPMDisk.java | 13 +++++++------ .../bytezone/diskbrowser/cpm/DirectoryEntry.java | 5 ++++- .../diskbrowser/disk/AbstractFormattedDisk.java | 3 ++- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/com/bytezone/diskbrowser/cpm/CPMDisk.java b/src/com/bytezone/diskbrowser/cpm/CPMDisk.java index 468ac20..fb452b2 100644 --- a/src/com/bytezone/diskbrowser/cpm/CPMDisk.java +++ b/src/com/bytezone/diskbrowser/cpm/CPMDisk.java @@ -35,9 +35,6 @@ public class CPMDisk extends AbstractFormattedDisk getDisk ().setEmptyByte ((byte) 0xE5); setSectorTypes (); - // byte[] sectorBuffer = disk.readSector (0, 0); // Boot sector - // bootSector = new BootSector (disk, sectorBuffer, "CPM"); - byte[] buffer = disk.readSector (0, 8); String text = new String (buffer, 16, 24); if ("DIR ERA TYPESAVEREN USER".equals (text)) @@ -48,9 +45,12 @@ public class CPMDisk extends AbstractFormattedDisk for (int sector = 0; sector < 8; sector++) { DiskAddress da = disk.getDiskAddress (3, sector); - sectorTypes[da.getBlock ()] = catalogSector; + if (disk.isSectorEmpty (da)) + break; + sectorTypes[da.getBlock ()] = catalogSector; buffer = disk.readSector (da); + for (int i = 0; i < buffer.length; i += 32) { if (buffer[i] != 0 && buffer[i] != (byte) 0xE5) @@ -60,7 +60,8 @@ public class CPMDisk extends AbstractFormattedDisk DirectoryEntry entry = new DirectoryEntry (this, buffer, i); SectorType sectorType = getSectorType (entry.getType ()); for (DiskAddress block : entry.getSectors ()) - sectorTypes[block.getBlock ()] = sectorType; + if (!disk.isSectorEmpty (block)) + sectorTypes[block.getBlock ()] = sectorType; DirectoryEntry parent = findParent (entry); if (parent == null) @@ -76,7 +77,7 @@ public class CPMDisk extends AbstractFormattedDisk } } - root.setUserObject (getCatalog ()); + root.setUserObject (getCatalog ()); // override the disk's default display makeNodeVisible (root.getFirstLeaf ()); } diff --git a/src/com/bytezone/diskbrowser/cpm/DirectoryEntry.java b/src/com/bytezone/diskbrowser/cpm/DirectoryEntry.java index 25e6190..caa4423 100644 --- a/src/com/bytezone/diskbrowser/cpm/DirectoryEntry.java +++ b/src/com/bytezone/diskbrowser/cpm/DirectoryEntry.java @@ -50,7 +50,10 @@ public class DirectoryEntry implements AppleFileSource int blockNumber = b * 4 + 48; for (int i = 0; i < 4; i++) - blocks.add (new AppleDiskAddress (blockNumber + i, disk)); + { + AppleDiskAddress da = new AppleDiskAddress (blockNumber + i, disk); + blocks.add (da); + } } } diff --git a/src/com/bytezone/diskbrowser/disk/AbstractFormattedDisk.java b/src/com/bytezone/diskbrowser/disk/AbstractFormattedDisk.java index 8c042a6..9eebcfe 100755 --- a/src/com/bytezone/diskbrowser/disk/AbstractFormattedDisk.java +++ b/src/com/bytezone/diskbrowser/disk/AbstractFormattedDisk.java @@ -158,7 +158,8 @@ public abstract class AbstractFormattedDisk implements FormattedDisk (DefaultMutableTreeNode) catalogTree.getModel ().getRoot (); DefaultAppleFileSource afs = new DefaultAppleFileSource (getName (), disk.toString (), this); - root.setUserObject (afs); + if (root.getUserObject () == null) + root.setUserObject (afs); } @Override