This commit is contained in:
Denis Molony 2017-01-26 22:30:16 +11:00
parent d4908d91a9
commit c08a234fb3
3 changed files with 40 additions and 39 deletions

View File

@ -9,10 +9,11 @@ import com.bytezone.diskbrowser.utilities.HexFormatter;
public class SHRPictureFile extends HiResImage public class SHRPictureFile extends HiResImage
{ {
List<Block> blocks = new ArrayList<Block> (); private final List<Block> blocks = new ArrayList<Block> ();
Main mainBlock; private Main mainBlock;
Multipal multipalBlock; private Multipal multipalBlock;
// 0xC0 aux = 2
public SHRPictureFile (String name, byte[] buffer, int fileType, int auxType, int eof) public SHRPictureFile (String name, byte[] buffer, int fileType, int auxType, int eof)
{ {
super (name, buffer, fileType, auxType, eof); super (name, buffer, fileType, auxType, eof);
@ -21,9 +22,9 @@ public class SHRPictureFile extends HiResImage
while (ptr < buffer.length) while (ptr < buffer.length)
{ {
int len = HexFormatter.unsignedLong (buffer, ptr); int len = HexFormatter.unsignedLong (buffer, ptr);
int nameLen = buffer[ptr + 4] & 0xFF; // int nameLen = buffer[ptr + 4] & 0xFF;
String kind = HexFormatter.getPascalString (buffer, ptr + 4); String kind = HexFormatter.getPascalString (buffer, ptr + 4);
byte[] data = new byte[Math.min (len - (nameLen + 5), buffer.length - ptr)]; byte[] data = new byte[Math.min (len, buffer.length - ptr)];
System.arraycopy (buffer, ptr, data, 0, data.length); System.arraycopy (buffer, ptr, data, 0, data.length);
if ("MAIN".equals (kind)) if ("MAIN".equals (kind))
@ -37,7 +38,10 @@ public class SHRPictureFile extends HiResImage
blocks.add (multipalBlock); blocks.add (multipalBlock);
} }
else else
{
blocks.add (new Block (kind, data)); blocks.add (new Block (kind, data));
System.out.println ("Unknown block type: " + kind + " in " + name);
}
ptr += len; ptr += len;
} }
@ -47,7 +51,6 @@ public class SHRPictureFile extends HiResImage
@Override @Override
protected void createMonochromeImage () protected void createMonochromeImage ()
{ {
// makeScreen (unpackedBuffer);
image = new BufferedImage (320, 200, BufferedImage.TYPE_BYTE_GRAY); image = new BufferedImage (320, 200, BufferedImage.TYPE_BYTE_GRAY);
DataBuffer db = image.getRaster ().getDataBuffer (); DataBuffer db = image.getRaster ().getDataBuffer ();
@ -83,8 +86,8 @@ public class SHRPictureFile extends HiResImage
ColorTable colorTable = multipalBlock != null ? multipalBlock.colorTables[row] ColorTable colorTable = multipalBlock != null ? multipalBlock.colorTables[row]
: mainBlock.colorTables[lo & 0x0F]; : mainBlock.colorTables[lo & 0x0F];
boolean fillMode = (lo & 0x20) != 0;
boolean fillMode = (lo & 0x20) != 0;
if (fillMode) if (fillMode)
System.out.println ("fillmode " + fillMode); System.out.println ("fillmode " + fillMode);
@ -121,7 +124,7 @@ public class SHRPictureFile extends HiResImage
return text.toString (); return text.toString ();
} }
class Block private class Block
{ {
String kind; String kind;
byte[] data; byte[] data;
@ -144,7 +147,7 @@ public class SHRPictureFile extends HiResImage
} }
} }
class Multipal extends Block private class Multipal extends Block
{ {
int numPalettes; int numPalettes;
ColorTable[] colorTables; ColorTable[] colorTables;
@ -169,7 +172,7 @@ public class SHRPictureFile extends HiResImage
} }
} }
class Main extends Block private class Main extends Block
{ {
int masterMode; int masterMode;
int pixelsPerScanLine; int pixelsPerScanLine;

View File

@ -14,7 +14,21 @@ public class SHRPictureFile2 extends HiResImage
{ {
super (name, buffer, fileType, auxType, eof); super (name, buffer, fileType, auxType, eof);
if (fileType == ProdosConstants.FILE_TYPE_PIC) // 0xC1 if (fileType == ProdosConstants.FILE_TYPE_PNT) // 0xC0
{
if (auxType == 0)
{
System.out.println ("0xC0 aux 0 not written");
}
else if (auxType == 1) // Eagle/PackBytes
{
// this unpacks directly to the screen locations
System.out.println ("0xC0 aux 1 not written");
}
else
System.out.println ("unknown aux " + auxType);
}
else if (fileType == ProdosConstants.FILE_TYPE_PIC) // 0xC1
{ {
if (auxType == 0) if (auxType == 0)
{ {
@ -41,19 +55,6 @@ public class SHRPictureFile2 extends HiResImage
else else
System.out.println ("unknown aux " + auxType); System.out.println ("unknown aux " + auxType);
} }
else if (fileType == ProdosConstants.FILE_TYPE_PNT) // 0xC0
{
if (auxType == 0)
{
System.out.println ("0xC0 aux 0 not written");
}
else if (auxType == 1)
{
System.out.println ("0xC0 aux 1 not written");
}
else
System.out.println ("unknown aux " + auxType);
}
else else
System.out.println ("unknown filetype " + fileType); System.out.println ("unknown filetype " + fileType);
@ -98,8 +99,16 @@ public class SHRPictureFile2 extends HiResImage
text.append ("\n\n"); text.append ("\n\n");
if (scb != null) if (scb != null)
for (int i = 0; i < scb.length; i++) {
text.append (String.format ("%3d %02X%n", i, scb[i])); text.append ("SCB\n---\n");
for (int i = 0; i < scb.length; i += 8)
{
for (int j = 0; j < 8; j++)
text.append (String.format (" %3d: %02X ", i + j, scb[i + j]));
text.append ("\n");
}
text.append ("\n");
}
for (ColorTable colorTable : colorTables) for (ColorTable colorTable : colorTables)
{ {

View File

@ -352,24 +352,13 @@ class FileEntry extends CatalogEntry implements ProdosConstants
file = new IconFile (name, exactBuffer); file = new IconFile (name, exactBuffer);
break; break;
case FILE_TYPE_PNT: case FILE_TYPE_PNT:
if (auxType == 0) if (auxType == 2)
file = new SHRPictureFile2 (name, exactBuffer, fileType, auxType, endOfFile);
else if (auxType == 1)
file = new SHRPictureFile2 (name, exactBuffer, fileType, auxType, endOfFile);
else if (auxType == 2)
file = new SHRPictureFile (name, exactBuffer, fileType, auxType, endOfFile); file = new SHRPictureFile (name, exactBuffer, fileType, auxType, endOfFile);
else else
file = file = new SHRPictureFile2 (name, exactBuffer, fileType, auxType, endOfFile);
new OriginalHiResImage (name, exactBuffer, fileType, auxType, endOfFile);
break; break;
case FILE_TYPE_PIC: case FILE_TYPE_PIC:
// if (auxType == 1)
file = new SHRPictureFile2 (name, exactBuffer, fileType, auxType, endOfFile); file = new SHRPictureFile2 (name, exactBuffer, fileType, auxType, endOfFile);
// else if (auxType == 2)
// file = new SHRPictureFile2 (name, exactBuffer, fileType, auxType, endOfFile);
// else
// file =
// new OriginalHiResImage (name, exactBuffer, fileType, auxType, endOfFile);
break; break;
case FILE_TYPE_FONT: case FILE_TYPE_FONT:
file = new QuickDrawFont (name, exactBuffer, fileType, auxType); file = new QuickDrawFont (name, exactBuffer, fileType, auxType);