dmolony-DiskBrowser/src/com/bytezone/diskbrowser/cpm/CPMCatalogSector.java

71 lines
2.4 KiB
Java
Raw Normal View History

2016-02-26 03:09:14 +00:00
package com.bytezone.diskbrowser.cpm;
import com.bytezone.diskbrowser.disk.AbstractSector;
import com.bytezone.diskbrowser.disk.Disk;
import com.bytezone.diskbrowser.disk.DiskAddress;
2016-02-26 03:09:14 +00:00
2020-02-08 08:13:28 +00:00
// -----------------------------------------------------------------------------------//
class CPMCatalogSector extends AbstractSector
// -----------------------------------------------------------------------------------//
2016-02-26 03:09:14 +00:00
{
private static int CATALOG_ENTRY_SIZE = 32;
2020-02-08 08:13:28 +00:00
// ---------------------------------------------------------------------------------//
CPMCatalogSector (Disk disk, byte[] buffer, DiskAddress diskAddress)
// ---------------------------------------------------------------------------------//
2016-02-26 03:09:14 +00:00
{
super (disk, buffer, diskAddress);
2016-02-26 03:09:14 +00:00
}
2020-02-08 08:13:28 +00:00
// ---------------------------------------------------------------------------------//
2016-02-26 03:09:14 +00:00
@Override
public String createText ()
2020-02-08 08:13:28 +00:00
// ---------------------------------------------------------------------------------//
2016-02-26 03:09:14 +00:00
{
StringBuilder text = getHeader ("Catalog Sector");
for (int i = 0; i <= 255; i += CATALOG_ENTRY_SIZE)
{
if (buffer[i] == (byte) 0xE5)
break;
2016-02-26 03:51:15 +00:00
2016-02-26 23:10:00 +00:00
boolean readOnly = (buffer[i + 9] & 0x80) != 0;
boolean systemFile = (buffer[i + 10] & 0x80) != 0;
String type;
String extra;
if (readOnly || systemFile)
{
byte[] typeBuffer = new byte[3];
typeBuffer[0] = (byte) (buffer[i + 9] & 0x7F);
typeBuffer[1] = (byte) (buffer[i + 10] & 0x7F);
typeBuffer[2] = buffer[i + 11];
type = new String (typeBuffer).trim ();
extra = String.format (" (%s%s)", readOnly ? "read only" : "",
2020-02-08 08:13:28 +00:00
systemFile ? "system file" : "");
2016-02-26 23:10:00 +00:00
}
else
{
type = new String (buffer, i + 9, 3).trim ();
extra = "";
}
2016-02-26 03:09:14 +00:00
addText (text, buffer, i, 1, "User number");
addText (text, buffer, i + 1, 4, "File name : " + new String (buffer, i + 1, 8));
2016-02-26 03:51:15 +00:00
addText (text, buffer, i + 5, 4, "");
2016-02-26 23:10:00 +00:00
addText (text, buffer, i + 9, 3, "File type : " + type + extra);
2016-02-26 03:09:14 +00:00
addText (text, buffer, i + 12, 1, "Extent counter LO");
addText (text, buffer, i + 13, 1, "Reserved");
addText (text, buffer, i + 14, 1, "Extent counter HI");
addText (text, buffer, i + 15, 1, "Record count");
2016-02-26 03:51:15 +00:00
for (int j = 0; j < 4; j++)
addText (text, buffer, i + 16 + j * 4, 4, "");
2016-02-26 03:09:14 +00:00
text.append ("\n");
}
text.deleteCharAt (text.length () - 1);
return text.toString ();
}
}