mirror of
https://github.com/dmolony/DiskBrowser.git
synced 2025-02-20 04:29:02 +00:00
more SHR
This commit is contained in:
parent
0a5fba86b0
commit
a23d4b5a2c
@ -9,7 +9,6 @@ import java.util.List;
|
|||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
|
|
||||||
import com.bytezone.diskbrowser.prodos.ProdosConstants;
|
import com.bytezone.diskbrowser.prodos.ProdosConstants;
|
||||||
import com.bytezone.diskbrowser.utilities.HexFormatter;
|
|
||||||
|
|
||||||
public abstract class HiResImage extends AbstractFile
|
public abstract class HiResImage extends AbstractFile
|
||||||
{
|
{
|
||||||
@ -146,7 +145,7 @@ public abstract class HiResImage extends AbstractFile
|
|||||||
if (auxType == 1)
|
if (auxType == 1)
|
||||||
auxText = "Packed Super Hi-Res Image";
|
auxText = "Packed Super Hi-Res Image";
|
||||||
else if (auxType == 2)
|
else if (auxType == 2)
|
||||||
auxText = "Super Hi-Res Image";
|
auxText = "Super Hi-Res Image (Apple Preferred)";
|
||||||
else if (auxType == 3)
|
else if (auxType == 3)
|
||||||
auxText = "Packed QuickDraw II PICT File";
|
auxText = "Packed QuickDraw II PICT File";
|
||||||
break;
|
break;
|
||||||
@ -167,7 +166,7 @@ public abstract class HiResImage extends AbstractFile
|
|||||||
if (unpackedBuffer != null)
|
if (unpackedBuffer != null)
|
||||||
{
|
{
|
||||||
text.append (String.format ("%nUnpacked : %,d%n%n", unpackedBuffer.length));
|
text.append (String.format ("%nUnpacked : %,d%n%n", unpackedBuffer.length));
|
||||||
text.append (HexFormatter.format (unpackedBuffer));
|
// text.append (HexFormatter.format (unpackedBuffer));
|
||||||
}
|
}
|
||||||
|
|
||||||
return text.toString ();
|
return text.toString ();
|
||||||
|
@ -6,6 +6,8 @@ public class PackedSHR extends HiResImage
|
|||||||
public PackedSHR (String name, byte[] buffer, int fileType, int auxType)
|
public PackedSHR (String name, byte[] buffer, int fileType, int auxType)
|
||||||
{
|
{
|
||||||
super (name, buffer, fileType, auxType);
|
super (name, buffer, fileType, auxType);
|
||||||
|
|
||||||
|
System.out.println ("SHR aux=1");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
package com.bytezone.diskbrowser.applefile;
|
package com.bytezone.diskbrowser.applefile;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.awt.image.DataBuffer;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -8,6 +11,7 @@ import com.bytezone.diskbrowser.utilities.HexFormatter;
|
|||||||
public class SHRPictureFile extends HiResImage
|
public class SHRPictureFile extends HiResImage
|
||||||
{
|
{
|
||||||
List<Block> blocks = new ArrayList<Block> ();
|
List<Block> blocks = new ArrayList<Block> ();
|
||||||
|
Main mainBlock;
|
||||||
|
|
||||||
public SHRPictureFile (String name, byte[] buffer, int fileType, int auxType)
|
public SHRPictureFile (String name, byte[] buffer, int fileType, int auxType)
|
||||||
{
|
{
|
||||||
@ -23,29 +27,58 @@ public class SHRPictureFile extends HiResImage
|
|||||||
System.arraycopy (buffer, ptr, data, 0, data.length);
|
System.arraycopy (buffer, ptr, data, 0, data.length);
|
||||||
|
|
||||||
if ("MAIN".equals (kind))
|
if ("MAIN".equals (kind))
|
||||||
blocks.add (new Main (kind, data));
|
{
|
||||||
|
mainBlock = new Main (kind, data);
|
||||||
|
blocks.add (mainBlock);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
blocks.add (new Block (kind, data));
|
blocks.add (new Block (kind, data));
|
||||||
|
|
||||||
ptr += len;
|
ptr += len;
|
||||||
}
|
}
|
||||||
|
createImage ();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void createMonochromeImage ()
|
protected void createMonochromeImage ()
|
||||||
{
|
{
|
||||||
|
makeScreen (unpackedBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void createColourImage ()
|
protected void createColourImage ()
|
||||||
{
|
{
|
||||||
|
image = new BufferedImage (320, 200, BufferedImage.TYPE_INT_RGB);
|
||||||
|
DataBuffer dataBuffer = image.getRaster ().getDataBuffer ();
|
||||||
|
|
||||||
|
int element = 0;
|
||||||
|
int ptr = 0;
|
||||||
|
for (int row = 0; row < 200; row++)
|
||||||
|
{
|
||||||
|
DirEntry dirEntry = mainBlock.scanLineDirectory[row];
|
||||||
|
int hi = dirEntry.mode & 0xFF00;
|
||||||
|
int lo = dirEntry.mode & 0x00FF;
|
||||||
|
ColorTable colorTable = mainBlock.colorTables[lo & 0x0F];
|
||||||
|
boolean fillMode = (lo & 0x20) != 0;
|
||||||
|
|
||||||
|
if (fillMode)
|
||||||
|
System.out.println ("fillmode " + fillMode);
|
||||||
|
|
||||||
|
for (int col = 0; col < 160; col++)
|
||||||
|
{
|
||||||
|
int left = (unpackedBuffer[ptr] & 0xF0) >> 4;
|
||||||
|
int right = unpackedBuffer[ptr] & 0x0F;
|
||||||
|
dataBuffer.setElem (element++, colorTable.entries[left].color.getRGB ());
|
||||||
|
dataBuffer.setElem (element++, colorTable.entries[right].color.getRGB ());
|
||||||
|
ptr++;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getText ()
|
public String getText ()
|
||||||
{
|
{
|
||||||
StringBuilder text = new StringBuilder (super.getText ());
|
StringBuilder text = new StringBuilder (super.getText ());
|
||||||
text.append ("\n\n");
|
|
||||||
|
|
||||||
for (Block block : blocks)
|
for (Block block : blocks)
|
||||||
{
|
{
|
||||||
@ -53,8 +86,11 @@ public class SHRPictureFile extends HiResImage
|
|||||||
text.append ("\n\n");
|
text.append ("\n\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (blocks.size () > 0)
|
||||||
|
{
|
||||||
text.deleteCharAt (text.length () - 1);
|
text.deleteCharAt (text.length () - 1);
|
||||||
text.deleteCharAt (text.length () - 1);
|
text.deleteCharAt (text.length () - 1);
|
||||||
|
}
|
||||||
|
|
||||||
return text.toString ();
|
return text.toString ();
|
||||||
}
|
}
|
||||||
@ -134,7 +170,7 @@ public class SHRPictureFile extends HiResImage
|
|||||||
|
|
||||||
if (true)
|
if (true)
|
||||||
{
|
{
|
||||||
byte[] newBuf = new byte[32768];
|
unpackedBuffer = new byte[32768];
|
||||||
ptr = 0;
|
ptr = 0;
|
||||||
for (int line = 0; line < numScanLines; line++)
|
for (int line = 0; line < numScanLines; line++)
|
||||||
{
|
{
|
||||||
@ -144,9 +180,8 @@ public class SHRPictureFile extends HiResImage
|
|||||||
System.out.println ("Odd number of bytes in empty buffer in " + name);
|
System.out.println ("Odd number of bytes in empty buffer in " + name);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ptr = unpackLine (lineBuffer, newBuf, ptr);
|
ptr = unpackLine (lineBuffer, unpackedBuffer, ptr);
|
||||||
}
|
}
|
||||||
makeScreen (newBuf);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -309,10 +344,15 @@ public class SHRPictureFile extends HiResImage
|
|||||||
class ColorEntry
|
class ColorEntry
|
||||||
{
|
{
|
||||||
int value; // 0RGB
|
int value; // 0RGB
|
||||||
|
Color color;
|
||||||
|
|
||||||
public ColorEntry (byte[] data, int offset)
|
public ColorEntry (byte[] data, int offset)
|
||||||
{
|
{
|
||||||
value = HexFormatter.unsignedShort (data, offset);
|
value = HexFormatter.unsignedShort (data, offset);
|
||||||
|
int red = (value & 0x0F00) >>> 8 | (value & 0x0F00) >>> 4;
|
||||||
|
int green = (value & 0x00F0) | (value & 0x00F0) >>> 4;
|
||||||
|
int blue = (value & 0x000F) | (value & 0x000F) << 4;
|
||||||
|
color = new Color (red, green, blue);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -35,6 +35,7 @@ class DataPanel extends JTabbedPane
|
|||||||
|
|
||||||
JTextArea formattedText;
|
JTextArea formattedText;
|
||||||
ImagePanel imagePanel; // internal class
|
ImagePanel imagePanel; // internal class
|
||||||
|
boolean debug;
|
||||||
|
|
||||||
boolean imageVisible = false;
|
boolean imageVisible = false;
|
||||||
|
|
||||||
@ -180,12 +181,18 @@ class DataPanel extends JTabbedPane
|
|||||||
|
|
||||||
public void setDebug (boolean value)
|
public void setDebug (boolean value)
|
||||||
{
|
{
|
||||||
|
debug = value;
|
||||||
|
|
||||||
if (currentDataSource instanceof VisicalcFile)
|
if (currentDataSource instanceof VisicalcFile)
|
||||||
{
|
{
|
||||||
VisicalcFile visicalcFile = (VisicalcFile) currentDataSource;
|
VisicalcFile visicalcFile = (VisicalcFile) currentDataSource;
|
||||||
VisicalcFile.setDebug (value);
|
VisicalcFile.setDebug (value);
|
||||||
setText (formattedText, visicalcFile.getText ());
|
setText (formattedText, visicalcFile.getText ());
|
||||||
}
|
}
|
||||||
|
else if (currentDataSource instanceof HiResImage)
|
||||||
|
{
|
||||||
|
setDataSource (currentDataSource); // toggles text/image
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setTabsFont (Font font)
|
private void setTabsFont (Font font)
|
||||||
@ -261,7 +268,7 @@ class DataPanel extends JTabbedPane
|
|||||||
}
|
}
|
||||||
|
|
||||||
BufferedImage image = dataSource.getImage ();
|
BufferedImage image = dataSource.getImage ();
|
||||||
if (image == null)
|
if (image == null || debug)
|
||||||
removeImage ();
|
removeImage ();
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -330,7 +337,7 @@ class DataPanel extends JTabbedPane
|
|||||||
|
|
||||||
if (true)
|
if (true)
|
||||||
{
|
{
|
||||||
if (width < 400)
|
if (width < 400 && width > 0)
|
||||||
scale = (400 - 1) / width + 1;
|
scale = (400 - 1) / width + 1;
|
||||||
else
|
else
|
||||||
scale = 1;
|
scale = 1;
|
||||||
|
@ -203,7 +203,7 @@ public class MenuHandler
|
|||||||
prefs.putBoolean (PREFS_SHOW_FREE_SECTORS, showFreeSectorsItem.isSelected ());
|
prefs.putBoolean (PREFS_SHOW_FREE_SECTORS, showFreeSectorsItem.isSelected ());
|
||||||
prefs.putBoolean (PREFS_COLOUR_QUIRKS, colourQuirksItem.isSelected ());
|
prefs.putBoolean (PREFS_COLOUR_QUIRKS, colourQuirksItem.isSelected ());
|
||||||
prefs.putBoolean (PREFS_MONOCHROME, monochromeItem.isSelected ());
|
prefs.putBoolean (PREFS_MONOCHROME, monochromeItem.isSelected ());
|
||||||
prefs.putBoolean (PREFS_DEBUGGING, debuggingItem.isSelected ());
|
// prefs.putBoolean (PREFS_DEBUGGING, debuggingItem.isSelected ());
|
||||||
prefs.putInt (PREFS_PALETTE,
|
prefs.putInt (PREFS_PALETTE,
|
||||||
HiResImage.getPaletteFactory ().getCurrentPaletteIndex ());
|
HiResImage.getPaletteFactory ().getCurrentPaletteIndex ());
|
||||||
}
|
}
|
||||||
@ -217,7 +217,7 @@ public class MenuHandler
|
|||||||
showFreeSectorsItem.setSelected (prefs.getBoolean (PREFS_SHOW_FREE_SECTORS, false));
|
showFreeSectorsItem.setSelected (prefs.getBoolean (PREFS_SHOW_FREE_SECTORS, false));
|
||||||
colourQuirksItem.setSelected (prefs.getBoolean (PREFS_COLOUR_QUIRKS, false));
|
colourQuirksItem.setSelected (prefs.getBoolean (PREFS_COLOUR_QUIRKS, false));
|
||||||
monochromeItem.setSelected (prefs.getBoolean (PREFS_MONOCHROME, false));
|
monochromeItem.setSelected (prefs.getBoolean (PREFS_MONOCHROME, false));
|
||||||
debuggingItem.setSelected (prefs.getBoolean (PREFS_DEBUGGING, false));
|
// debuggingItem.setSelected (prefs.getBoolean (PREFS_DEBUGGING, false));
|
||||||
|
|
||||||
int paletteIndex = prefs.getInt (PREFS_PALETTE, 0);
|
int paletteIndex = prefs.getInt (PREFS_PALETTE, 0);
|
||||||
PaletteFactory paletteFactory = HiResImage.getPaletteFactory ();
|
PaletteFactory paletteFactory = HiResImage.getPaletteFactory ();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user