2020-02-09 13:13:33 +00:00
|
|
|
package com.bytezone.diskbrowser.prodos;
|
|
|
|
|
2020-06-26 03:29:46 +00:00
|
|
|
import com.bytezone.diskbrowser.utilities.Utility;
|
2020-02-09 13:13:33 +00:00
|
|
|
|
|
|
|
// -----------------------------------------------------------------------------------//
|
2021-05-01 23:38:24 +00:00
|
|
|
public abstract class DirectoryHeader extends CatalogEntry implements ProdosConstants
|
2020-02-09 13:13:33 +00:00
|
|
|
// -----------------------------------------------------------------------------------//
|
|
|
|
{
|
|
|
|
final int entryLength;
|
|
|
|
final int entriesPerBlock;
|
|
|
|
final int fileCount;
|
|
|
|
|
|
|
|
// ---------------------------------------------------------------------------------//
|
2021-04-27 11:26:09 +00:00
|
|
|
DirectoryHeader (ProdosDisk parentDisk, byte[] entryBuffer, int blockNo, int entryNo)
|
2020-02-09 13:13:33 +00:00
|
|
|
// ---------------------------------------------------------------------------------//
|
|
|
|
{
|
2021-04-27 11:26:09 +00:00
|
|
|
super (parentDisk, entryBuffer, blockNo, entryNo);
|
2020-02-09 13:13:33 +00:00
|
|
|
|
|
|
|
entryLength = entryBuffer[31] & 0xFF;
|
|
|
|
entriesPerBlock = entryBuffer[32] & 0xFF;
|
2021-05-19 08:13:17 +00:00
|
|
|
fileCount = Utility.getShort (entryBuffer, 33);
|
2020-02-09 13:13:33 +00:00
|
|
|
}
|
2021-04-27 11:26:09 +00:00
|
|
|
|
|
|
|
// ---------------------------------------------------------------------------------//
|
|
|
|
@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);
|
2021-05-19 08:13:17 +00:00
|
|
|
int blocksUsed = Utility.getShort (buffer, ptr + 0x13);
|
2021-04-27 11:26:09 +00:00
|
|
|
int fileType = buffer[ptr + 0x10] & 0xFF;
|
2021-05-19 08:13:17 +00:00
|
|
|
int keyPointer = Utility.getShort (buffer, ptr + 0x11);
|
|
|
|
int headerPointer = Utility.getShort (buffer, ptr + 0x25);
|
2021-05-01 23:38:24 +00:00
|
|
|
text.append (String.format ("%04X:%02X %-15s %s %04X %s %04X %04X%n",
|
|
|
|
blockNo, entryNo, name, storageTypes[storageType], blocksUsed,
|
|
|
|
fileTypes[fileType], keyPointer, headerPointer));
|
2021-04-27 11:26:09 +00:00
|
|
|
}
|
|
|
|
ptr += 0x27;
|
|
|
|
++entryNo;
|
|
|
|
}
|
|
|
|
|
2021-05-19 08:13:17 +00:00
|
|
|
blockNo = Utility.getShort (buffer, 2);
|
2021-04-27 11:26:09 +00:00
|
|
|
} while (blockNo != 0);
|
|
|
|
}
|
2015-06-01 09:35:51 +00:00
|
|
|
}
|