2020-02-07 11:44:51 +00:00
|
|
|
package com.bytezone.diskbrowser.applefile;
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
import com.bytezone.diskbrowser.utilities.HexFormatter;
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------------------//
|
|
|
|
public class SimpleText2 extends AbstractFile
|
|
|
|
// -----------------------------------------------------------------------------------//
|
|
|
|
{
|
|
|
|
List<Integer> lineStarts = new ArrayList<> ();
|
|
|
|
int loadAddress;
|
|
|
|
boolean showByte = false;
|
|
|
|
|
|
|
|
public SimpleText2 (String name, byte[] buffer, int loadAddress)
|
|
|
|
{
|
|
|
|
super (name, buffer);
|
|
|
|
this.loadAddress = loadAddress;
|
|
|
|
|
|
|
|
// store a pointer to each new line
|
|
|
|
int ptr = 0;
|
|
|
|
while (ptr < buffer.length && buffer[ptr] != -1)
|
|
|
|
{
|
|
|
|
int length = buffer[ptr] & 0xFF;
|
|
|
|
lineStarts.add (ptr);
|
|
|
|
ptr += length + 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// ---------------------------------------------------------------------------------//
|
|
|
|
@Override
|
|
|
|
public String getText ()
|
|
|
|
// ---------------------------------------------------------------------------------//
|
|
|
|
{
|
|
|
|
StringBuilder text = new StringBuilder ();
|
|
|
|
|
|
|
|
text.append ("Name : " + name + "\n");
|
|
|
|
text.append (String.format ("Length : $%04X (%d)%n", buffer.length, buffer.length));
|
|
|
|
text.append (String.format ("Load at : $%04X%n%n", loadAddress));
|
|
|
|
|
|
|
|
for (Integer i : lineStarts)
|
|
|
|
text.append (String.format ("%05X %s%n", i, getLine (i)));
|
|
|
|
if (text.charAt (text.length () - 1) == '\n')
|
|
|
|
text.deleteCharAt (text.length () - 1);
|
|
|
|
return text.toString ();
|
|
|
|
}
|
|
|
|
|
|
|
|
// ---------------------------------------------------------------------------------//
|
|
|
|
@Override
|
|
|
|
public String getHexDump ()
|
|
|
|
// ---------------------------------------------------------------------------------//
|
|
|
|
{
|
|
|
|
StringBuilder text = new StringBuilder ();
|
|
|
|
|
|
|
|
for (Integer i : lineStarts)
|
|
|
|
text.append (
|
|
|
|
HexFormatter.formatNoHeader (buffer, i, (buffer[i] & 0xFF) + 1) + "\n");
|
|
|
|
text.append (HexFormatter.formatNoHeader (buffer, buffer.length - 2, 2) + "\n");
|
|
|
|
|
|
|
|
return text.toString ();
|
|
|
|
}
|
|
|
|
|
|
|
|
// convert buffer to text, ignore line-break at the end
|
|
|
|
// ---------------------------------------------------------------------------------//
|
|
|
|
private String getLine (int ptr)
|
|
|
|
// ---------------------------------------------------------------------------------//
|
|
|
|
{
|
|
|
|
StringBuilder line = new StringBuilder ();
|
|
|
|
int length = buffer[ptr] & 0xFF;
|
|
|
|
while (--length > 0)
|
|
|
|
{
|
|
|
|
int val = buffer[++ptr] & 0xFF;
|
|
|
|
if (val == 0xBB)
|
|
|
|
{
|
|
|
|
while (line.length () < 35)
|
|
|
|
line.append (' ');
|
|
|
|
line.append (';');
|
|
|
|
}
|
|
|
|
else if (val >= 0x80)
|
|
|
|
{
|
|
|
|
while (line.length () < 10)
|
|
|
|
line.append (' ');
|
|
|
|
if (val == 0xDC)
|
|
|
|
line.append (String.format ("EQU %02X", val));
|
|
|
|
else if (val == 0xD0)
|
|
|
|
line.append (String.format ("STA %02X", val));
|
|
|
|
else if (val == 0xD2)
|
|
|
|
line.append (String.format ("STY %02X", val));
|
|
|
|
else if (val == 0xD4)
|
|
|
|
line.append (String.format ("LSR %02X", val));
|
|
|
|
else if (val == 0xD5)
|
|
|
|
line.append (String.format ("ROR %02X", val));
|
|
|
|
else if (val == 0xD7)
|
|
|
|
line.append (String.format ("ASL %02X", val));
|
|
|
|
else if (val == 0xD9)
|
|
|
|
line.append (String.format ("EQ %02X", val));
|
|
|
|
else if (val == 0xDB)
|
|
|
|
line.append (String.format ("TGT %02X", val));
|
|
|
|
else if (val == 0xDA)
|
|
|
|
line.append (String.format ("ORG %02X", val));
|
|
|
|
else if (val == 0xB1)
|
|
|
|
line.append (String.format ("TYA %02X", val));
|
|
|
|
else if (val == 0xC1)
|
|
|
|
line.append (String.format ("AND %02X", val));
|
|
|
|
else if (val == 0xC4)
|
|
|
|
line.append (String.format ("CMP %02X", val));
|
|
|
|
else if (val == 0xC8)
|
|
|
|
line.append (String.format ("EOR %02X", val));
|
|
|
|
else if (val == 0xCA)
|
|
|
|
line.append (String.format ("JMP %02X", val));
|
|
|
|
else if (val == 0xCB)
|
|
|
|
line.append (String.format ("JSR %02X", val));
|
|
|
|
else if (val == 0xCD)
|
|
|
|
line.append (String.format ("LDA %02X", val));
|
|
|
|
else if (val == 0xCE)
|
|
|
|
line.append (String.format ("LDX %02X", val));
|
|
|
|
else if (val == 0xCF)
|
|
|
|
line.append (String.format ("LDY %02X", val));
|
|
|
|
else if (val == 0xA1)
|
|
|
|
line.append (String.format ("PHA %02X", val));
|
|
|
|
else if (val == 0xA2)
|
|
|
|
line.append (String.format ("PLA %02X", val));
|
|
|
|
else if (val == 0xA5)
|
|
|
|
line.append (String.format ("RTS %02X", val));
|
|
|
|
else if (val == 0xA9)
|
|
|
|
line.append (String.format ("SEC %02X", val));
|
|
|
|
else if (val == 0xAD)
|
|
|
|
line.append (String.format ("TAY %02X", val));
|
|
|
|
else if (val == 0x82)
|
|
|
|
line.append (String.format ("BMI %02X", val));
|
|
|
|
else if (val == 0x84)
|
|
|
|
line.append (String.format ("BCS %02X", val));
|
|
|
|
else if (val == 0x85)
|
|
|
|
line.append (String.format ("BPL %02X", val));
|
|
|
|
else if (val == 0x86)
|
|
|
|
line.append (String.format ("BNE %02X", val));
|
|
|
|
else if (val == 0x87)
|
|
|
|
line.append (String.format ("BEQ %02X", val));
|
|
|
|
else if (val == 0x99)
|
|
|
|
line.append (String.format ("CLC %02X", val));
|
|
|
|
else if (val == 0x9C)
|
|
|
|
line.append (String.format ("DEX %02X", val));
|
|
|
|
else if (val == 0x9F)
|
|
|
|
line.append (String.format ("INY %02X", val));
|
|
|
|
else
|
|
|
|
line.append (String.format (".%02X.", val));
|
|
|
|
|
|
|
|
line.append (' ');
|
|
|
|
++ptr;
|
|
|
|
if (buffer[ptr] < 0x20 && showByte)
|
|
|
|
{
|
|
|
|
val = buffer[ptr] & 0xFF;
|
|
|
|
line.append (String.format (".%02X. ", val));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
line.append ((char) val);
|
|
|
|
}
|
|
|
|
return line.toString ();
|
|
|
|
}
|
2015-06-01 09:35:51 +00:00
|
|
|
}
|