From ddadfd31981de50f1eef1a0784f27527bcf77b58 Mon Sep 17 00:00:00 2001 From: Denis Molony Date: Mon, 17 May 2021 21:07:09 +1000 Subject: [PATCH] display resource forks --- .../diskbrowser/applefile/ResourceFork.java | 222 ++++++++++++++++++ .../bytezone/diskbrowser/disk/Prefix2mg.java | 2 +- .../diskbrowser/prodos/FileEntry.java | 5 +- 3 files changed, 227 insertions(+), 2 deletions(-) create mode 100644 src/com/bytezone/diskbrowser/applefile/ResourceFork.java diff --git a/src/com/bytezone/diskbrowser/applefile/ResourceFork.java b/src/com/bytezone/diskbrowser/applefile/ResourceFork.java new file mode 100644 index 0000000..8578b14 --- /dev/null +++ b/src/com/bytezone/diskbrowser/applefile/ResourceFork.java @@ -0,0 +1,222 @@ +package com.bytezone.diskbrowser.applefile; + +import java.util.ArrayList; +import java.util.List; + +import com.bytezone.diskbrowser.utilities.HexFormatter; +import com.bytezone.diskbrowser.utilities.Utility; + +// -----------------------------------------------------------------------------------// +public class ResourceFork +// -----------------------------------------------------------------------------------// +{ + byte[] buffer; + ResourceFileHeader resourceFileHeader; + + // ---------------------------------------------------------------------------------// + public ResourceFork (byte[] buffer) + // ---------------------------------------------------------------------------------// + { + this.buffer = buffer; + + resourceFileHeader = new ResourceFileHeader (buffer); + System.out.println (resourceFileHeader); + } + + // ---------------------------------------------------------------------------------// + class ResourceFileHeader + // ---------------------------------------------------------------------------------// + { + int fileVersion; + int fileToMap; + int fileMapSize; + ResourceMap resourceMap; + + // -------------------------------------------------------------------------------// + ResourceFileHeader (byte[] buffer) + // -------------------------------------------------------------------------------// + { + fileVersion = Utility.getLong (buffer, 0); + fileToMap = Utility.getLong (buffer, 4); + fileMapSize = Utility.getLong (buffer, 8); + + resourceMap = new ResourceMap (buffer, fileToMap, fileMapSize); + } + + // -------------------------------------------------------------------------------// + @Override + public String toString () + // -------------------------------------------------------------------------------// + { + StringBuilder text = new StringBuilder (); + + text.append (String.format ("Version ....... %04X % resourceFreeBlocks = new ArrayList<> (); + List resourceReferenceRecords = new ArrayList<> (); + + // -------------------------------------------------------------------------------// + ResourceMap (byte[] buffer, int ptr, int size) + // -------------------------------------------------------------------------------// + { + int offset = ptr; + + mapNext = Utility.getLong (buffer, ptr); + mapFlags = Utility.getWord (buffer, ptr + 4); + mapOffset = Utility.getLong (buffer, ptr + 6); + mapSize = Utility.getLong (buffer, ptr + 10); + mapToIndex = Utility.getWord (buffer, ptr + 14); + mapFileNum = Utility.getWord (buffer, ptr + 16); + mapId = Utility.getWord (buffer, ptr + 18); + mapIndexSize = Utility.getLong (buffer, ptr + 20); + mapIndexUsed = Utility.getLong (buffer, ptr + 24); + mapFreeListSize = Utility.getWord (buffer, ptr + 28); + mapFreeListUsed = Utility.getWord (buffer, ptr + 30); + + ptr = offset + 32; + for (int i = 0; i < mapFreeListUsed; i++) + { + resourceFreeBlocks.add (new ResourceFreeBlock (buffer, ptr)); + ptr += 8; + } + + ptr = offset + mapToIndex; + for (int i = 0; i < mapIndexUsed; i++) + { + resourceReferenceRecords.add (new ResourceReferenceRecord (buffer, ptr)); + ptr += 20; + } + } + + // -------------------------------------------------------------------------------// + @Override + public String toString () + // -------------------------------------------------------------------------------// + { + StringBuilder text = new StringBuilder (); + + text.append (String.format ("Map next ............ %04X %