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 %