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

155 lines
5.4 KiB
Java
Executable File

package com.bytezone.diskbrowser.disk;
import java.awt.image.BufferedImage;
import javax.swing.JComponent;
import javax.swing.JPanel;
import com.bytezone.diskbrowser.applefile.AssemblerProgram;
import com.bytezone.diskbrowser.gui.DataSource;
import com.bytezone.diskbrowser.utilities.HexFormatter;
import com.bytezone.diskbrowser.utilities.Utility;
// -----------------------------------------------------------------------------------//
public abstract class AbstractSector implements DataSource
// -----------------------------------------------------------------------------------//
{
final public byte[] buffer;
protected Disk disk;
protected DiskAddress diskAddress;
AssemblerProgram assembler;
// ---------------------------------------------------------------------------------//
public AbstractSector (Disk disk, byte[] buffer, DiskAddress diskAddress)
// ---------------------------------------------------------------------------------//
{
this.buffer = buffer;
this.disk = disk;
this.diskAddress = diskAddress;
}
// ---------------------------------------------------------------------------------//
public AbstractSector (Disk disk, byte[] buffer)
// ---------------------------------------------------------------------------------//
{
this.buffer = buffer;
this.disk = disk;
}
// ---------------------------------------------------------------------------------//
@Override
public String getAssembler ()
// ---------------------------------------------------------------------------------//
{
if (assembler == null)
assembler = new AssemblerProgram ("noname", buffer, 0);
return assembler.getText ();
}
// ---------------------------------------------------------------------------------//
@Override
public String getHexDump ()
// ---------------------------------------------------------------------------------//
{
return HexFormatter.format (buffer, 0, buffer.length);
}
// ---------------------------------------------------------------------------------//
@Override
public byte[] getBuffer ()
// ---------------------------------------------------------------------------------//
{
return buffer;
}
// ---------------------------------------------------------------------------------//
@Override
public BufferedImage getImage ()
// ---------------------------------------------------------------------------------//
{
return null;
}
// ---------------------------------------------------------------------------------//
@Override
public String getText ()
// ---------------------------------------------------------------------------------//
{
return createText ();
}
// ---------------------------------------------------------------------------------//
public abstract String createText ();
// ---------------------------------------------------------------------------------//
// ---------------------------------------------------------------------------------//
protected StringBuilder getHeader (String title)
// ---------------------------------------------------------------------------------//
{
StringBuilder text = new StringBuilder ();
text.append (title + "\n\n");
text.append ("Offset Value Description\n");
text.append ("======= =========== "
+ "===============================================================\n");
return text;
}
// ---------------------------------------------------------------------------------//
@Override
public JComponent getComponent ()
// ---------------------------------------------------------------------------------//
{
JPanel panel = new JPanel ();
return panel;
}
// ---------------------------------------------------------------------------------//
protected void addText (StringBuilder text, byte[] buffer, int offset, int size,
String desc)
// ---------------------------------------------------------------------------------//
{
if ((offset + size - 1) > buffer.length)
return;
switch (size)
{
case 1:
text.append (String.format ("%03X %02X %s%n", offset,
buffer[offset], desc));
break;
case 2:
text.append (String.format ("%03X-%03X %02X %02X %s%n", offset,
offset + 1, buffer[offset], buffer[offset + 1], desc));
break;
case 3:
text.append (String.format ("%03X-%03X %02X %02X %02X %s%n", offset,
offset + 2, buffer[offset], buffer[offset + 1], buffer[offset + 2], desc));
break;
case 4:
text.append (String.format ("%03X-%03X %02X %02X %02X %02X %s%n", offset,
offset + 3, buffer[offset], buffer[offset + 1], buffer[offset + 2],
buffer[offset + 3], desc));
break;
default:
System.out.println ("Invalid length : " + size);
}
}
// ---------------------------------------------------------------------------------//
protected void addTextAndDecimal (StringBuilder text, byte[] b, int offset, int size,
String desc)
// ---------------------------------------------------------------------------------//
{
desc += switch (size)
{
case 1 -> " (" + (b[offset] & 0xFF) + ")";
case 2 -> String.format (" (%,d)", Utility.getShort (b, offset));
case 3 -> String.format (" (%,d)", Utility.readTriple (b, offset));
default -> "";
};
addText (text, b, offset, size, desc);
}
}