From 1b570013155fdab411d17129f43b49b1eff44e83 Mon Sep 17 00:00:00 2001 From: Denis Molony Date: Wed, 28 Oct 2020 15:42:48 +1000 Subject: [PATCH] allow empty pascal files --- .../diskbrowser/applefile/ExoBuffer.java | 19 +++++++++++++++++++ .../diskbrowser/pascal/FileEntry.java | 5 +++++ .../diskbrowser/utilities/HexFormatter.java | 6 ++++++ 3 files changed, 30 insertions(+) diff --git a/src/com/bytezone/diskbrowser/applefile/ExoBuffer.java b/src/com/bytezone/diskbrowser/applefile/ExoBuffer.java index 9024fc6..f0a5ec2 100644 --- a/src/com/bytezone/diskbrowser/applefile/ExoBuffer.java +++ b/src/com/bytezone/diskbrowser/applefile/ExoBuffer.java @@ -31,6 +31,8 @@ public class ExoBuffer private int tableLo[] = new int[100]; private int tableHi[] = new int[100]; + private static boolean debug = false; + // ---------------------------------------------------------------------------------// public ExoBuffer (byte[] inBuffer) // ---------------------------------------------------------------------------------// @@ -43,12 +45,21 @@ public class ExoBuffer case 0x6000: outBuffer = new byte[0x2000]; // HGR break; + case 0x8000: outBuffer = new byte[0x4000]; // DHGR break; + case 0xA000: outBuffer = new byte[0x8000]; // SHR break; + + case 0x5FF8: // this is not working correctly - see CLODE019 + return; + + default: + System.out.printf ("Invalid buffer size: %04X%n", + Utility.getShortBigEndian (inBuffer, 0)); } decrunch (); @@ -67,12 +78,20 @@ public class ExoBuffer // ---------------------------------------------------------------------------------// { if (auxType != 0x1FF8 && auxType != 0x3FF8) + { + if (debug) + System.out.println ("wrong auxType"); return false; + } int address = Utility.unsignedShort (buffer, buffer.length - 2); if (address != 0x6000 && address != 0x8000 && address != 0xA000) + { + if (debug) + System.out.printf ("wrong address: %04X%n", address); return false; + } return true; } diff --git a/src/com/bytezone/diskbrowser/pascal/FileEntry.java b/src/com/bytezone/diskbrowser/pascal/FileEntry.java index e463667..ba1ab59 100644 --- a/src/com/bytezone/diskbrowser/pascal/FileEntry.java +++ b/src/com/bytezone/diskbrowser/pascal/FileEntry.java @@ -65,6 +65,11 @@ public class FileEntry extends CatalogEntry return file; byte[] buffer = getExactBuffer (); + if (buffer.length == 0) + { + file = new AssemblerProgram (name, buffer, 0); // see DC16.dsk + return file; + } switch (fileType) { diff --git a/src/com/bytezone/diskbrowser/utilities/HexFormatter.java b/src/com/bytezone/diskbrowser/utilities/HexFormatter.java index ed3e249..52bad88 100755 --- a/src/com/bytezone/diskbrowser/utilities/HexFormatter.java +++ b/src/com/bytezone/diskbrowser/utilities/HexFormatter.java @@ -167,6 +167,12 @@ public class HexFormatter { StringBuilder text = new StringBuilder (); + // if (buffer.length == 0) + // { + // System.out.println ("empty buffer"); + // return text.toString (); + // } + for (int i = offset; i < offset + length; i++) { int c = buffer[i] & 0xFF;