mirror of
https://github.com/dmolony/DiskBrowser.git
synced 2024-06-03 16:29:29 +00:00
tidying
This commit is contained in:
parent
0fe2a21f96
commit
bdbd837376
|
@ -67,7 +67,6 @@ public abstract class AbstractFile implements DataSource
|
|||
@Override
|
||||
public JComponent getComponent ()
|
||||
{
|
||||
// System.out.println ("In AbstractFile.getComponent()");
|
||||
JPanel panel = new JPanel ();
|
||||
return panel;
|
||||
}
|
||||
|
|
|
@ -378,14 +378,16 @@ public class BasicProgram extends AbstractFile
|
|||
int length = getLineLength (ptr);
|
||||
if (length == 0)
|
||||
{
|
||||
pgm.append (HexFormatter.formatNoHeader (buffer, ptr, 2, programLoadAddress));
|
||||
pgm.append (
|
||||
HexFormatter.formatNoHeader (buffer, ptr, 2, programLoadAddress + ptr));
|
||||
ptr += 2;
|
||||
break;
|
||||
}
|
||||
|
||||
if (ptr + length < buffer.length)
|
||||
pgm.append (HexFormatter.formatNoHeader (buffer, ptr, length, programLoadAddress)
|
||||
+ "\n\n");
|
||||
pgm.append (
|
||||
HexFormatter.formatNoHeader (buffer, ptr, length, programLoadAddress + ptr)
|
||||
+ "\n\n");
|
||||
ptr += length;
|
||||
}
|
||||
|
||||
|
@ -393,7 +395,8 @@ public class BasicProgram extends AbstractFile
|
|||
{
|
||||
int length = buffer.length - ptr;
|
||||
pgm.append ("\n\n");
|
||||
pgm.append (HexFormatter.formatNoHeader (buffer, ptr, length, programLoadAddress));
|
||||
pgm.append (
|
||||
HexFormatter.formatNoHeader (buffer, ptr, length, programLoadAddress + ptr));
|
||||
}
|
||||
|
||||
return pgm.toString ();
|
||||
|
|
|
@ -68,13 +68,13 @@ public class TextFile extends AbstractFile
|
|||
|
||||
// check whether file is spread over multiple buffers
|
||||
if (buffers != null)
|
||||
return treeFileText (text);
|
||||
return treeFileText (text); // calls knownLength()
|
||||
|
||||
// check whether the record length is known
|
||||
if (recordLength == 0)
|
||||
return unknownLength (text);
|
||||
|
||||
text.append ("Offset Record Text values\n");
|
||||
text.append ("Offset Record# Text values\n");
|
||||
text.append (
|
||||
"------ ------- -------------------------------------------------------\n");
|
||||
return knownLength (text, 0).toString ();
|
||||
|
@ -82,9 +82,12 @@ public class TextFile extends AbstractFile
|
|||
|
||||
private String treeFileText (StringBuilder text)
|
||||
{
|
||||
text.append (" Offset Record# Text values\n");
|
||||
text.append (
|
||||
"---------- ------- -------------------------------------------------------\n");
|
||||
for (TextBuffer tb : buffers)
|
||||
{
|
||||
this.buffer = tb.buffer;
|
||||
buffer = tb.buffer;
|
||||
knownLength (text, tb.firstRecNo);
|
||||
}
|
||||
return text.toString ();
|
||||
|
@ -105,7 +108,10 @@ public class TextFile extends AbstractFile
|
|||
while (buffer[ptr + bytes - 1] == 0)
|
||||
bytes--;
|
||||
|
||||
text.append (String.format ("%,6d %,8d %s%n", ptr, recNo++,
|
||||
if ((buffer[ptr + bytes - 1] & 0x7F) == 0x0D) // ignore CR
|
||||
bytes--;
|
||||
|
||||
text.append (String.format ("%,10d %,8d %s%n", recNo * recordLength, recNo++,
|
||||
HexFormatter.getString (buffer, ptr, bytes)));
|
||||
}
|
||||
return text;
|
||||
|
@ -118,20 +124,22 @@ public class TextFile extends AbstractFile
|
|||
int size = buffer.length;
|
||||
int lastVal = 0;
|
||||
boolean newFormat = true;
|
||||
boolean showAllOffsets = false;
|
||||
boolean showAllOffsets = true;
|
||||
|
||||
if (newFormat)
|
||||
{
|
||||
text.append ("Offset Text values\n");
|
||||
text.append ("------ -------------------------------------------------------"
|
||||
text.append (" Offset Text values\n");
|
||||
text.append ("---------- -------------------------------------------------------"
|
||||
+ "-------------------\n");
|
||||
if (size == 0)
|
||||
if (buffer.length == 0)
|
||||
return text.toString ();
|
||||
|
||||
if (buffer[ptr] != 0)
|
||||
text.append (String.format ("%6d ", ptr));
|
||||
if (buffer[0] != 0)
|
||||
text.append (String.format ("%,10d ", ptr));
|
||||
}
|
||||
|
||||
int gcd = 0;
|
||||
|
||||
while (ptr < size)
|
||||
{
|
||||
int val = buffer[ptr++] & 0x7F; // strip hi-order bit
|
||||
|
@ -144,24 +152,34 @@ public class TextFile extends AbstractFile
|
|||
if (nulls > 0)
|
||||
{
|
||||
if (newFormat)
|
||||
text.append (String.format ("%6d ", ptr - 1));
|
||||
text.append (String.format ("%,10d ", ptr - 1));
|
||||
else
|
||||
text.append ("\nNew record at : " + (ptr - 1) + "\n");
|
||||
nulls = 0;
|
||||
|
||||
gcd = gcd == 0 ? ptr - 1 : gcd (gcd, ptr - 1);
|
||||
}
|
||||
else if (lastVal == 0x0D && newFormat)
|
||||
if (showAllOffsets)
|
||||
text.append (String.format ("%6d ", ptr - 1));
|
||||
text.append (String.format ("%,10d ", ptr - 1));
|
||||
else
|
||||
text.append (" ");
|
||||
text.append (" ");
|
||||
|
||||
text.append ((char) val);
|
||||
}
|
||||
lastVal = val;
|
||||
}
|
||||
if (text.length () > 0 && text.charAt (text.length () - 1) == '\n')
|
||||
|
||||
if (gcd > 0)
|
||||
text.append ("\nGCD: " + gcd);
|
||||
else if (text.length () > 0 && text.charAt (text.length () - 1) == '\n')
|
||||
text.deleteCharAt (text.length () - 1);
|
||||
|
||||
return text.toString ();
|
||||
}
|
||||
|
||||
private int gcd (int a, int b)
|
||||
{
|
||||
return a == 0 ? b : gcd (b % a, a);
|
||||
}
|
||||
}
|
|
@ -166,7 +166,6 @@ abstract class AbstractCatalogEntry implements AppleFileSource
|
|||
if (reportedLength > buffer.length)
|
||||
reportedLength = buffer.length - 2;
|
||||
System.arraycopy (buffer, 2, exactBuffer, 0, reportedLength);
|
||||
// appleFile = new ApplesoftBasicProgram (name, exactBuffer);
|
||||
appleFile = new BasicProgram (name, exactBuffer);
|
||||
break;
|
||||
|
||||
|
|
|
@ -82,7 +82,8 @@ class DiskLayoutPanel extends JPanel
|
|||
verticalRuler.setLayout (layout);
|
||||
horizontalRuler.setLayout (layout);
|
||||
legendPanel.setDisk (disk, layout);
|
||||
sp.setViewportView (diskLayoutImage); // this is the only way I know of to force a refresh
|
||||
sp.setViewportView (diskLayoutImage); // this is the only way I know of to
|
||||
// force a refresh
|
||||
|
||||
setLayout (new BorderLayout ());
|
||||
if (disk.getGridLayout ().height == 35)
|
||||
|
@ -154,7 +155,6 @@ class DiskLayoutPanel extends JPanel
|
|||
// This can happen if a file is selected from a dual-dos disk
|
||||
checkCorrectDisk (event.file.getFormattedDisk ());
|
||||
|
||||
// This may need to allow for sparse text files with null DiskAddresses
|
||||
diskLayoutImage.setSelection (event.file.getSectors ());
|
||||
}
|
||||
|
||||
|
|
|
@ -148,11 +148,11 @@ class DiskLayoutSelection implements Iterable<DiskAddress>
|
|||
|
||||
public void setSelection (List<DiskAddress> list)
|
||||
{
|
||||
// for some reason list sometimes contains nulls
|
||||
// sparse files contain empty blocks
|
||||
highlights.clear ();
|
||||
if (list != null)
|
||||
for (DiskAddress da : list)
|
||||
if (da != null)
|
||||
if (da != null && da.getBlock () > 0)
|
||||
highlights.add (da);
|
||||
}
|
||||
|
||||
|
|
|
@ -20,36 +20,12 @@ public class FileEntry extends CatalogEntry
|
|||
int max = Math.min (lastBlock, parent.getDisk ().getTotalBlocks ());
|
||||
for (int i = firstBlock; i < max; i++)
|
||||
{
|
||||
switch (fileType)
|
||||
if (fileType < parent.sectors.length)
|
||||
parent.sectorTypes[i] = parent.sectors[fileType];
|
||||
else
|
||||
{
|
||||
case 2:
|
||||
parent.sectorTypes[i] = parent.codeSector;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
parent.sectorTypes[i] = parent.textSector;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
parent.sectorTypes[i] = parent.infoSector;
|
||||
break;
|
||||
|
||||
case 5:
|
||||
parent.sectorTypes[i] = parent.dataSector;
|
||||
break;
|
||||
|
||||
case 6:
|
||||
parent.sectorTypes[i] = parent.grafSector;
|
||||
break;
|
||||
|
||||
case 7:
|
||||
parent.sectorTypes[i] = parent.fotoSector;
|
||||
break;
|
||||
|
||||
default:
|
||||
System.out.println ("Unknown pascal file type : " + fileType);
|
||||
parent.sectorTypes[i] = parent.dataSector;
|
||||
break;
|
||||
System.out.println ("Unknown pascal file type : " + fileType);
|
||||
parent.sectorTypes[i] = parent.dataSector;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -109,10 +85,6 @@ public class FileEntry extends CatalogEntry
|
|||
case 5: // data
|
||||
if (name.equals ("SYSTEM.CHARSET"))
|
||||
file = new Charset (name, buffer);
|
||||
// else if (name.equals ("WT")) // only testing
|
||||
// file = new WizardryTitle (name, buffer);
|
||||
// else if (name.equals ("SYSTEM.RELOC"))
|
||||
// file = new Relocator (name, buffer);
|
||||
else
|
||||
file = new DefaultAppleFile (name, buffer);
|
||||
break;
|
||||
|
|
|
@ -25,7 +25,7 @@ public class PascalDisk extends AbstractFormattedDisk
|
|||
protected Relocator relocator;
|
||||
|
||||
final String[] fileTypes =
|
||||
{ "Volume", "Xdsk", "Code", "Text", "Info", "Data", "Graf", "Foto", "SecureDir" };
|
||||
{ "Volume", "Bad ", "Code", "Text", "Info", "Data", "Graf", "Foto", "SecureDir" };
|
||||
|
||||
SectorType diskBootSector = new SectorType ("Boot", Color.lightGray);
|
||||
SectorType catalogSector = new SectorType ("Catalog", Color.magenta);
|
||||
|
@ -35,6 +35,10 @@ public class PascalDisk extends AbstractFormattedDisk
|
|||
SectorType infoSector = new SectorType ("Info", Color.orange);
|
||||
SectorType grafSector = new SectorType ("Graf", Color.cyan);
|
||||
SectorType fotoSector = new SectorType ("Foto", Color.gray);
|
||||
SectorType badSector = new SectorType ("Bad", Color.darkGray);
|
||||
|
||||
SectorType[] sectors = { catalogSector, badSector, codeSector, textSector, infoSector,
|
||||
dataSector, grafSector, fotoSector };
|
||||
|
||||
public PascalDisk (Disk disk)
|
||||
{
|
||||
|
@ -48,6 +52,7 @@ public class PascalDisk extends AbstractFormattedDisk
|
|||
sectorTypesList.add (infoSector);
|
||||
sectorTypesList.add (grafSector);
|
||||
sectorTypesList.add (fotoSector);
|
||||
sectorTypesList.add (badSector);
|
||||
|
||||
List<DiskAddress> blocks = disk.getDiskAddressList (0, 1); // B0, B1
|
||||
this.bootSector = new BootSector (disk, disk.readSectors (blocks), "Pascal");
|
||||
|
|
|
@ -34,8 +34,8 @@ public interface ProdosConstants
|
|||
int TYPE_DIRECTORY_HEADER = 15;
|
||||
int TYPE_SUBDIRECTORY_HEADER = 14;
|
||||
int TYPE_SUBDIRECTORY = 13;
|
||||
int TYPE_GSOS_EXTENDED_FILE = 5;
|
||||
int TYPE_PASCAL_ON_PROFILE = 4;
|
||||
int TYPE_GSOS_EXTENDED_FILE = 5; // tech note #25
|
||||
int TYPE_PASCAL_ON_PROFILE = 4; // tech note #25
|
||||
int TYPE_TREE = 3;
|
||||
int TYPE_SAPLING = 2;
|
||||
int TYPE_SEEDLING = 1;
|
||||
|
|
|
@ -110,16 +110,4 @@ class LZW
|
|||
{
|
||||
return 32 - Integer.numberOfLeadingZeros (maximumValue);
|
||||
}
|
||||
|
||||
static int getLong (byte[] buffer, int ptr)
|
||||
{
|
||||
return getWord (buffer, ptr) + getWord (buffer, ptr + 2) * 0x10000;
|
||||
}
|
||||
|
||||
static int getWord (byte[] buffer, int ptr)
|
||||
{
|
||||
int a = (buffer[ptr + 1] & 0xFF) << 8;
|
||||
int b = buffer[ptr] & 0xFF;
|
||||
return a + b;
|
||||
}
|
||||
}
|
|
@ -8,7 +8,7 @@ class LZW1 extends LZW
|
|||
{
|
||||
bytes = Objects.requireNonNull (buffer);
|
||||
|
||||
crc = LZW.getWord (buffer, 0);
|
||||
crc = Utility.getWord (buffer, 0);
|
||||
crcBase = 0;
|
||||
|
||||
volume = buffer[2] & 0xFF;
|
||||
|
@ -17,7 +17,7 @@ class LZW1 extends LZW
|
|||
|
||||
while (ptr < buffer.length - 1) // what is in the last byte?
|
||||
{
|
||||
int rleLength = LZW.getWord (buffer, ptr);
|
||||
int rleLength = Utility.getWord (buffer, ptr);
|
||||
int lzwPerformed = buffer[ptr + 2] & 0xFF;
|
||||
ptr += 3;
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ class LZW2 extends LZW
|
|||
|
||||
while (ptr < buffer.length - 1) // what is in the last byte?
|
||||
{
|
||||
int rleLength = LZW.getWord (buffer, ptr);
|
||||
int rleLength = Utility.getWord (buffer, ptr);
|
||||
boolean lzwPerformed = (rleLength & 0x8000) != 0;
|
||||
ptr += 2;
|
||||
|
||||
|
@ -32,7 +32,7 @@ class LZW2 extends LZW
|
|||
if (rleLength == 0)
|
||||
rleLength = TRACK_LENGTH;
|
||||
|
||||
int chunkLength = LZW.getWord (buffer, ptr);
|
||||
int chunkLength = Utility.getWord (buffer, ptr);
|
||||
ptr += 2;
|
||||
|
||||
setBuffer (buffer, ptr); // prepare to read n-bit integers
|
||||
|
|
|
@ -129,12 +129,12 @@ public class NuFX
|
|||
throw new FileFormatException ("NuFile not found");
|
||||
}
|
||||
|
||||
crc = LZW.getWord (buffer, ptr + 6);
|
||||
totalRecords = LZW.getLong (buffer, ptr + 8);
|
||||
crc = Utility.getWord (buffer, ptr + 6);
|
||||
totalRecords = Utility.getLong (buffer, ptr + 8);
|
||||
created = new DateTime (buffer, ptr + 12);
|
||||
modified = new DateTime (buffer, ptr + 20);
|
||||
version = LZW.getWord (buffer, ptr + 28);
|
||||
eof = LZW.getLong (buffer, ptr + 38);
|
||||
version = Utility.getWord (buffer, ptr + 28);
|
||||
eof = Utility.getLong (buffer, ptr + 38);
|
||||
|
||||
byte[] crcBuffer = new byte[40];
|
||||
System.arraycopy (buffer, ptr + 8, crcBuffer, 0, crcBuffer.length);
|
||||
|
@ -203,21 +203,21 @@ public class NuFX
|
|||
if (!isNuFX (buffer, dataPtr))
|
||||
throw new FileFormatException ("NuFX not found");
|
||||
|
||||
crc = LZW.getWord (buffer, dataPtr + 4);
|
||||
attributes = LZW.getWord (buffer, dataPtr + 6);
|
||||
version = LZW.getWord (buffer, dataPtr + 8);
|
||||
totThreads = LZW.getLong (buffer, dataPtr + 10);
|
||||
fileSystemID = LZW.getWord (buffer, dataPtr + 14);
|
||||
crc = Utility.getWord (buffer, dataPtr + 4);
|
||||
attributes = Utility.getWord (buffer, dataPtr + 6);
|
||||
version = Utility.getWord (buffer, dataPtr + 8);
|
||||
totThreads = Utility.getLong (buffer, dataPtr + 10);
|
||||
fileSystemID = Utility.getWord (buffer, dataPtr + 14);
|
||||
separator = (char) (buffer[dataPtr + 16] & 0x00FF);
|
||||
access = LZW.getLong (buffer, dataPtr + 18);
|
||||
fileType = LZW.getLong (buffer, dataPtr + 22);
|
||||
auxType = LZW.getLong (buffer, dataPtr + 26);
|
||||
storType = LZW.getWord (buffer, dataPtr + 30);
|
||||
access = Utility.getLong (buffer, dataPtr + 18);
|
||||
fileType = Utility.getLong (buffer, dataPtr + 22);
|
||||
auxType = Utility.getLong (buffer, dataPtr + 26);
|
||||
storType = Utility.getWord (buffer, dataPtr + 30);
|
||||
created = new DateTime (buffer, dataPtr + 32);
|
||||
modified = new DateTime (buffer, dataPtr + 40);
|
||||
archived = new DateTime (buffer, dataPtr + 48);
|
||||
optionSize = LZW.getWord (buffer, dataPtr + 56);
|
||||
fileNameLength = LZW.getWord (buffer, dataPtr + attributes - 2);
|
||||
optionSize = Utility.getWord (buffer, dataPtr + 56);
|
||||
fileNameLength = Utility.getWord (buffer, dataPtr + attributes - 2);
|
||||
|
||||
int len = attributes + fileNameLength - 6;
|
||||
byte[] crcBuffer = new byte[len + totThreads * 16];
|
||||
|
|
|
@ -104,12 +104,12 @@ class Thread
|
|||
|
||||
public ThreadHeader (byte[] buffer, int offset)
|
||||
{
|
||||
threadClass = LZW.getWord (buffer, offset);
|
||||
format = LZW.getWord (buffer, offset + 2);
|
||||
threadKind = LZW.getWord (buffer, offset + 4);
|
||||
crc = LZW.getWord (buffer, offset + 6);
|
||||
uncompressedEOF = LZW.getLong (buffer, offset + 8);
|
||||
compressedEOF = LZW.getLong (buffer, offset + 12);
|
||||
threadClass = Utility.getWord (buffer, offset);
|
||||
format = Utility.getWord (buffer, offset + 2);
|
||||
threadKind = Utility.getWord (buffer, offset + 4);
|
||||
crc = Utility.getWord (buffer, offset + 6);
|
||||
uncompressedEOF = Utility.getLong (buffer, offset + 8);
|
||||
compressedEOF = Utility.getLong (buffer, offset + 12);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -31,6 +31,18 @@ public class Utility
|
|||
.equals (AffineTransform.getScaleInstance (2.0, 2.0));
|
||||
}
|
||||
|
||||
static int getLong (byte[] buffer, int ptr)
|
||||
{
|
||||
return getWord (buffer, ptr) + getWord (buffer, ptr + 2) * 0x10000;
|
||||
}
|
||||
|
||||
static int getWord (byte[] buffer, int ptr)
|
||||
{
|
||||
int a = (buffer[ptr + 1] & 0xFF) << 8;
|
||||
int b = buffer[ptr] & 0xFF;
|
||||
return a + b;
|
||||
}
|
||||
|
||||
public static boolean find (byte[] buffer, byte[] key)
|
||||
{
|
||||
for (int i = 0; i < buffer.length; i++)
|
||||
|
|
Loading…
Reference in New Issue
Block a user