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

129 lines
3.6 KiB
Java
Raw Normal View History

2015-06-01 09:35:51 +00:00
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;
2016-02-24 21:11:14 +00:00
import com.bytezone.diskbrowser.utilities.HexFormatter;
2015-06-01 09:35:51 +00:00
public abstract class AbstractSector implements DataSource
{
private static String newLine = String.format ("%n");
private static String newLine2 = newLine + newLine;
2016-08-06 10:00:01 +00:00
final public byte[] buffer;
2015-06-01 09:35:51 +00:00
protected Disk disk;
protected DiskAddress diskAddress;
2016-08-06 10:00:01 +00:00
// private List<DiskAddress> diskAddressList;
2015-06-01 09:35:51 +00:00
AssemblerProgram assembler;
String description;
public AbstractSector (Disk disk, byte[] buffer, DiskAddress diskAddress)
2015-06-01 09:35:51 +00:00
{
this.buffer = buffer;
this.disk = disk;
this.diskAddress = diskAddress;
}
2016-08-06 10:00:01 +00:00
public AbstractSector (Disk disk, byte[] buffer)//, List<DiskAddress> diskAddressList)
{
this.buffer = buffer;
this.disk = disk;
2016-08-06 10:00:01 +00:00
// this.diskAddressList = diskAddressList;
2015-06-01 09:35:51 +00:00
}
@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 BufferedImage getImage ()
{
return null;
}
@Override
public String getText ()
{
if (description == null)
description = createText ();
return description;
}
public abstract String createText ();
protected StringBuilder getHeader (String title)
{
StringBuilder text = new StringBuilder ();
text.append (title + newLine2);
text.append ("Offset Value Description" + newLine);
text.append ("======= =========== "
2015-12-13 10:02:16 +00:00
+ "===============================================================" + newLine);
2015-06-01 09:35:51 +00:00
return text;
}
@Override
public JComponent getComponent ()
{
JPanel panel = new JPanel ();
return panel;
}
2017-06-12 09:09:19 +00:00
protected void addText (StringBuilder text, byte[] buffer, int offset, int size,
String desc)
2015-06-01 09:35:51 +00:00
{
2017-06-12 09:09:19 +00:00
if ((offset + size - 1) > buffer.length)
2015-06-01 09:35:51 +00:00
return;
switch (size)
{
case 1:
2017-06-12 09:09:19 +00:00
text.append (String.format ("%03X %02X %s%n", offset,
buffer[offset], desc));
2015-06-01 09:35:51 +00:00
break;
case 2:
2015-12-13 10:02:16 +00:00
text.append (String.format ("%03X-%03X %02X %02X %s%n", offset,
2017-06-12 09:09:19 +00:00
offset + 1, buffer[offset], buffer[offset + 1], desc));
2015-06-01 09:35:51 +00:00
break;
case 3:
text.append (String.format ("%03X-%03X %02X %02X %02X %s%n", offset,
2017-06-12 09:09:19 +00:00
offset + 2, buffer[offset], buffer[offset + 1], buffer[offset + 2], desc));
2015-06-01 09:35:51 +00:00
break;
case 4:
text.append (String.format ("%03X-%03X %02X %02X %02X %02X %s%n", offset,
2017-06-12 09:09:19 +00:00
offset + 3, buffer[offset], buffer[offset + 1], buffer[offset + 2],
buffer[offset + 3], desc));
2015-06-01 09:35:51 +00:00
break;
default:
System.out.println ("Invalid length : " + size);
}
}
protected void addTextAndDecimal (StringBuilder text, byte[] b, int offset, int size,
2015-12-13 10:02:16 +00:00
String desc)
2015-06-01 09:35:51 +00:00
{
if (size == 1)
desc += " (" + (b[offset] & 0xFF) + ")";
else if (size == 2)
2019-01-26 20:06:13 +00:00
desc +=
String.format (" (%,d)", ((b[offset + 1] & 0xFF) * 256 + (b[offset] & 0xFF)));
2015-06-01 09:35:51 +00:00
else if (size == 3)
2015-12-13 10:02:16 +00:00
desc += String.format (" (%,d)", ((b[offset + 2] & 0xFF) * 65536)
+ ((b[offset + 1] & 0xFF) * 256) + (b[offset] & 0xFF));
2015-06-01 09:35:51 +00:00
addText (text, b, offset, size, desc);
}
}