dmolony-DiskBrowser/src/com/bytezone/diskbrowser/disk/Prefix2mg.java

87 lines
3.2 KiB
Java

package com.bytezone.diskbrowser.disk;
import com.bytezone.diskbrowser.utilities.Utility;
// http://apple2.org.za/gswv/a2zine/Docs/DiskImage_2MG_Info.txt
// -----------------------------------------------------------------------------------//
public class Prefix2mg
// -----------------------------------------------------------------------------------//
{
String[] creators = { "!nfc", "B2TR", "CTKG", "CdrP", "ShIm", "WOOF", "XGS!" };
String[] images = { "Dos3.3", "Prodos", "Nibbized" };
String prefix;
String creator;
int headerSize;
int version;
int format;
int flags;
int length;
int blocks;
int offset;
int commentOffset;
int commentLength;
int creatorOffset;
int creatorLength;
boolean flagsLocked;
int flagsVolume;
// ---------------------------------------------------------------------------------//
public Prefix2mg (byte[] buffer)
// ---------------------------------------------------------------------------------//
{
prefix = new String (buffer, 0, 4);
creator = new String (buffer, 4, 4);
headerSize = Utility.getShort (buffer, 0x08);
version = Utility.getShort (buffer, 0x0A);
format = Utility.getLong (buffer, 0x0C);
flags = Utility.getLong (buffer, 0x10);
blocks = Utility.getLong (buffer, 0x14); // 1600
offset = Utility.getLong (buffer, 0x18);
length = Utility.getLong (buffer, 0x1C);
commentOffset = Utility.getLong (buffer, 0x20);
commentLength = Utility.getLong (buffer, 0x24);
creatorOffset = Utility.getLong (buffer, 0x28);
creatorLength = Utility.getLong (buffer, 0x2C);
flagsLocked = (flags & 0x80000000) != 0;
if ((flags & 0x0100) != 0)
flagsVolume = flags & 0xFF;
if (format == 0 && flagsVolume == 0)
flagsVolume = 254;
if (length == 0)
length = 512 * blocks;
// see /Asimov disks/images/gs/os/prodos16/ProDOS 16v1_3.2mg
// System.out.println (this);
}
// ---------------------------------------------------------------------------------//
@Override
public String toString ()
// ---------------------------------------------------------------------------------//
{
StringBuilder text = new StringBuilder ();
text.append (String.format ("Prefix : %s%n", prefix));
text.append (String.format ("Creator : %s%n", creator));
text.append (String.format ("Header : %d%n", headerSize));
text.append (String.format ("Version : %d%n", version));
text.append (String.format ("Format : %02X%n", format));
text.append (String.format ("Flags : %,d%n", flags));
text.append (String.format ("Locked : %s%n", flagsLocked));
text.append (String.format ("DOS Volume : %,d%n", flagsVolume));
text.append (String.format ("Blocks : %,d%n", blocks));
text.append (String.format ("Offset : %,d%n", offset));
text.append (String.format ("Length : %08X (%<,d)%n", length));
text.append (String.format ("Comment Offset : %,d%n", commentOffset));
text.append (String.format ("Comment Length : %08X (%<,d)%n", commentLength));
text.append (String.format ("Creator Offset : %,d%n", creatorOffset));
text.append (String.format ("Creator Length : %08X (%<,d)", creatorLength));
return text.toString ();
}
}