diff --git a/src/com/bytezone/diskbrowser/utilities/LZW.java b/src/com/bytezone/diskbrowser/utilities/LZW.java index 6f83bad..b40c78f 100644 --- a/src/com/bytezone/diskbrowser/utilities/LZW.java +++ b/src/com/bytezone/diskbrowser/utilities/LZW.java @@ -130,7 +130,10 @@ class LZW int calculatedCrc = Utility.getCRC (buffer, length, crcBase); if (crc != calculatedCrc) + { System.out.printf ("%n*** LZW CRC mismatch *** %04X %04X%n", crc, calculatedCrc); + // throw new FileFormatException ("File CRC failed"); + } return buffer; } diff --git a/src/com/bytezone/diskbrowser/utilities/LZW2.java b/src/com/bytezone/diskbrowser/utilities/LZW2.java index 29c9e1e..6cc33f2 100644 --- a/src/com/bytezone/diskbrowser/utilities/LZW2.java +++ b/src/com/bytezone/diskbrowser/utilities/LZW2.java @@ -17,9 +17,10 @@ class LZW2 extends LZW bytes = Objects.requireNonNull (buffer); this.crc = crc; + this.v3eof = eof; + crcBase = 0xFFFF; codeWord = 0; - v3eof = eof; volume = buffer[0] & 0xFF; runLengthChar = (byte) (buffer[1] & 0xFF); diff --git a/src/com/bytezone/diskbrowser/utilities/NuFX.java b/src/com/bytezone/diskbrowser/utilities/NuFX.java index 3a990fa..db3e7ca 100644 --- a/src/com/bytezone/diskbrowser/utilities/NuFX.java +++ b/src/com/bytezone/diskbrowser/utilities/NuFX.java @@ -44,11 +44,11 @@ public class NuFX for (int rec = 0; rec < masterHeader.getTotalRecords (); rec++) { Record record = new Record (buffer, dataPtr); - if (record.getFileSystemID () != 1) - { - System.out.println ("Not Prodos"); - break; - } + // if (record.getFileSystemID () != 1) + // { + // System.out.println ("Not Prodos: " + record.getFileSystemID ()); + // break; + // } records.add (record); if (debug) @@ -175,7 +175,7 @@ public class NuFX if (nameOffset > 0) // remove volume name from path fileName = fileName.substring (nameOffset); - if (true) + if (false) System.out.printf ("%3d %-35s %02X %,7d %,7d %,7d %s %s%n", ++count, fileName, fileType, auxType, eof, buffer.length, created, modified); diff --git a/src/com/bytezone/diskbrowser/utilities/Thread.java b/src/com/bytezone/diskbrowser/utilities/Thread.java index 3b2998a..f4021a8 100644 --- a/src/com/bytezone/diskbrowser/utilities/Thread.java +++ b/src/com/bytezone/diskbrowser/utilities/Thread.java @@ -37,7 +37,11 @@ class Thread lzw = switch (header.threadFormat) { case 2 -> new LZW1 (data); - case 3 -> new LZW2 (data, header.threadCrc, header.uncompressedEOF); + case 3 -> + { + int length = header.threadKind == 1 ? 0 : header.uncompressedEOF; + yield new LZW2 (data, header.threadCrc, length); + } default -> null; // 1 = Huffman Squeeze }; diff --git a/src/com/bytezone/diskbrowser/utilities/ThreadHeader.java b/src/com/bytezone/diskbrowser/utilities/ThreadHeader.java index 650dc5a..9848129 100644 --- a/src/com/bytezone/diskbrowser/utilities/ThreadHeader.java +++ b/src/com/bytezone/diskbrowser/utilities/ThreadHeader.java @@ -49,9 +49,8 @@ class ThreadHeader text.append (String.format (" kind .............. %d %s%n", threadKind, threadKindText[threadClass][threadKind])); text.append (String.format (" crc ............... %,d (%<04X)%n", threadCrc)); - text.append (String.format (" uncompressedEOF ... %,d%n", uncompressedEOF)); - text.append (String.format (" compressedEOF ..... %,d (%08X)", compressedEOF, - compressedEOF)); + text.append (String.format (" uncompressedEOF ... %,d (%<08X)%n", uncompressedEOF)); + text.append (String.format (" compressedEOF ..... %,d (%<08X)", compressedEOF)); return text.toString (); } }