mirror of
https://github.com/dmolony/DiskBrowser.git
synced 2024-09-24 03:57:36 +00:00
105 lines
3.0 KiB
Java
105 lines
3.0 KiB
Java
package com.bytezone.diskbrowser.applefile;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
// -----------------------------------------------------------------------------------//
|
|
public class Selector extends AbstractFile
|
|
// -----------------------------------------------------------------------------------//
|
|
{
|
|
int numRunListEntries;
|
|
int numOtherRunListEntries;
|
|
List<Entry> entries = new ArrayList<> ();
|
|
List<Path> paths = new ArrayList<> ();
|
|
|
|
// ---------------------------------------------------------------------------------//
|
|
public Selector (String name, byte[] buffer)
|
|
// ---------------------------------------------------------------------------------//
|
|
{
|
|
super (name, buffer);
|
|
|
|
numRunListEntries = buffer[0] & 0xFF;
|
|
numOtherRunListEntries = buffer[1] & 0xFF;
|
|
|
|
int ptr = 2;
|
|
for (int i = 0; i < 24; i++)
|
|
{
|
|
entries.add (new Entry (buffer, ptr));
|
|
ptr += 16;
|
|
}
|
|
|
|
ptr = 386;
|
|
for (int i = 0; i < 24; i++)
|
|
{
|
|
paths.add (new Path (buffer, ptr));
|
|
ptr += 64;
|
|
}
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------------//
|
|
@Override
|
|
public String getText ()
|
|
// ---------------------------------------------------------------------------------//
|
|
{
|
|
StringBuilder text = new StringBuilder ();
|
|
|
|
text.append ("Name : " + name + "\n");
|
|
text.append (String.format ("Length : $%04X (%<,d)%n%n", buffer.length));
|
|
text.append (String.format ("NumRunListEntries ....... %d%n", buffer[0]));
|
|
text.append (String.format ("NumOtherRunListEntries .. %d%n%n", buffer[1]));
|
|
text.append ("Name Copy Path\n");
|
|
text.append ("-------------- ---------- ------------------------------------\n");
|
|
|
|
for (int i = 0; i < entries.size (); i++)
|
|
{
|
|
Entry entry = entries.get (i);
|
|
Path path = paths.get (i);
|
|
|
|
if (entry.labelLength > 0)
|
|
text.append (String.format ("%-14s %-10s %s%n", entry.label, entry.copyText,
|
|
path.pathName));
|
|
}
|
|
|
|
return text.toString ();
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------------//
|
|
class Entry
|
|
// ---------------------------------------------------------------------------------//
|
|
{
|
|
int labelLength;
|
|
String label;
|
|
byte copyFlags;
|
|
String copyText;
|
|
|
|
public Entry (byte[] buffer, int ptr)
|
|
{
|
|
labelLength = buffer[ptr] & 0xFF;
|
|
label = new String (buffer, ptr + 1, labelLength);
|
|
copyFlags = buffer[ptr + 15];
|
|
|
|
copyText = switch (copyFlags & 0xFF)
|
|
{
|
|
case 0x00 -> "First boot";
|
|
case 0x80 -> "First use";
|
|
case 0xC0 -> "Never";
|
|
default -> "Unknown";
|
|
};
|
|
}
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------------//
|
|
class Path
|
|
// ---------------------------------------------------------------------------------//
|
|
{
|
|
int length;
|
|
String pathName;
|
|
|
|
public Path (byte[] buffer, int ptr)
|
|
{
|
|
length = buffer[ptr] & 0xFF;
|
|
pathName = new String (buffer, ptr + 1, length);
|
|
}
|
|
}
|
|
}
|