dmolony-DiskBrowser/src/com/bytezone/diskbrowser/prodos/DirectoryHeader.java

65 lines
2.4 KiB
Java
Executable File

package com.bytezone.diskbrowser.prodos;
import com.bytezone.diskbrowser.utilities.Utility;
// -----------------------------------------------------------------------------------//
public abstract class DirectoryHeader extends CatalogEntry implements ProdosConstants
// -----------------------------------------------------------------------------------//
{
final int entryLength;
final int entriesPerBlock;
final int fileCount;
// ---------------------------------------------------------------------------------//
DirectoryHeader (ProdosDisk parentDisk, byte[] entryBuffer, int blockNo, int entryNo)
// ---------------------------------------------------------------------------------//
{
super (parentDisk, entryBuffer, blockNo, entryNo);
entryLength = entryBuffer[31] & 0xFF;
entriesPerBlock = entryBuffer[32] & 0xFF;
fileCount = Utility.getShort (entryBuffer, 33);
}
// ---------------------------------------------------------------------------------//
@Override
public String getText ()
// ---------------------------------------------------------------------------------//
{
return String.format ("%s %04X", super.getText (), fileCount);
}
// ---------------------------------------------------------------------------------//
public void listFileEntries (StringBuilder text)
// ---------------------------------------------------------------------------------//
{
int blockNo = this.blockNo;
do
{
byte[] buffer = disk.readBlock (blockNo);
int ptr = 4;
int entryNo = 1;
for (int i = 0; i < 13; i++)
{
int nameLength = buffer[ptr] & 0x0F;
int storageType = (buffer[ptr] & 0xF0) >>> 4;
if (nameLength > 0 && storageType < 0x0E)
{
String name = new String (buffer, ptr + 1, nameLength);
int blocksUsed = Utility.getShort (buffer, ptr + 0x13);
int fileType = buffer[ptr + 0x10] & 0xFF;
int keyPointer = Utility.getShort (buffer, ptr + 0x11);
int headerPointer = Utility.getShort (buffer, ptr + 0x25);
text.append (String.format ("%04X:%02X %-15s %s %04X %s %04X %04X%n",
blockNo, entryNo, name, storageTypes[storageType], blocksUsed,
fileTypes[fileType], keyPointer, headerPointer));
}
ptr += 0x27;
++entryNo;
}
blockNo = Utility.getShort (buffer, 2);
} while (blockNo != 0);
}
}