mirror of
https://github.com/dmolony/DiskBrowser.git
synced 2024-11-29 11:49:29 +00:00
tidying
This commit is contained in:
parent
428767d853
commit
f6562b9ce2
@ -41,15 +41,15 @@ public class Huffman extends AbstractFile
|
|||||||
|
|
||||||
private byte getChar ()
|
private byte getChar ()
|
||||||
{
|
{
|
||||||
int treePtr = 0; // start at the root
|
int treePtr = 0; // start at the root
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
if ((depth++ & 0x07) == 0) // every 8th bit
|
if ((depth++ & 0x07) == 0) // every 8th bit...
|
||||||
currentByte = message[msgPtr++]; // get a new byte
|
currentByte = message[msgPtr++]; // ...get a new byte
|
||||||
|
|
||||||
int currentBit = currentByte & 0x01; // extract the next bit to process
|
int currentBit = currentByte & 0x01; // extract the next bit to process
|
||||||
currentByte >>= 1; // and remove it from the byte
|
currentByte >>= 1; // and remove it from the current byte
|
||||||
|
|
||||||
// use currentBit to determine whether to use the left or right node
|
// use currentBit to determine whether to use the left or right node
|
||||||
byte nodeValue = buffer[treePtr + offset[currentBit]];
|
byte nodeValue = buffer[treePtr + offset[currentBit]];
|
||||||
|
@ -8,16 +8,13 @@ import com.bytezone.common.Utility;
|
|||||||
|
|
||||||
public class MessageBlock implements Iterable<MessageDataBlock>
|
public class MessageBlock implements Iterable<MessageDataBlock>
|
||||||
{
|
{
|
||||||
// private final byte[] buffer;
|
|
||||||
private final int indexOffset;
|
private final int indexOffset;
|
||||||
private final int indexLength;
|
private final int indexLength;
|
||||||
|
|
||||||
private final List<MessageDataBlock> messageDataBlocks =
|
private final List<MessageDataBlock> messageDataBlocks =
|
||||||
new ArrayList<MessageDataBlock> ();
|
new ArrayList<MessageDataBlock> ();
|
||||||
|
|
||||||
private Huffman huffman;
|
public MessageBlock (byte[] buffer, Huffman huffman)
|
||||||
|
|
||||||
public MessageBlock (byte[] buffer)
|
|
||||||
{
|
{
|
||||||
indexOffset = Utility.getWord (buffer, 0);
|
indexOffset = Utility.getWord (buffer, 0);
|
||||||
indexLength = Utility.getWord (buffer, 2);
|
indexLength = Utility.getWord (buffer, 2);
|
||||||
@ -29,19 +26,12 @@ public class MessageBlock implements Iterable<MessageDataBlock>
|
|||||||
int firstMessageNo = Utility.getWord (buffer, ptr + i * 2);
|
int firstMessageNo = Utility.getWord (buffer, ptr + i * 2);
|
||||||
byte[] data = new byte[512];
|
byte[] data = new byte[512];
|
||||||
System.arraycopy (buffer, i * 512, data, 0, data.length);
|
System.arraycopy (buffer, i * 512, data, 0, data.length);
|
||||||
MessageDataBlock messageDataBlock =
|
MessageDataBlock messageDataBlock = new MessageDataBlock (
|
||||||
new MessageDataBlock ("Block " + firstMessageNo, data, firstMessageNo);
|
"Block " + i + " Msg " + firstMessageNo, data, firstMessageNo, huffman);
|
||||||
messageDataBlocks.add (messageDataBlock);
|
messageDataBlocks.add (messageDataBlock);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setHuffman (Huffman huffman)
|
|
||||||
{
|
|
||||||
this.huffman = huffman;
|
|
||||||
for (MessageDataBlock messageDataBlock : messageDataBlocks)
|
|
||||||
messageDataBlock.setHuffman (huffman);
|
|
||||||
}
|
|
||||||
|
|
||||||
public byte[] getMessage (int messageNo)
|
public byte[] getMessage (int messageNo)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < messageDataBlocks.size (); i++)
|
for (int i = 0; i < messageDataBlocks.size (); i++)
|
||||||
|
@ -8,20 +8,19 @@ import com.bytezone.diskbrowser.applefile.AbstractFile;
|
|||||||
|
|
||||||
public class MessageDataBlock extends AbstractFile
|
public class MessageDataBlock extends AbstractFile
|
||||||
{
|
{
|
||||||
// private final byte[] buffer;
|
|
||||||
// private final int offset;
|
|
||||||
final int firstMessageNo;
|
final int firstMessageNo;
|
||||||
// private final int lastMessageNo;
|
|
||||||
|
|
||||||
private final int groupCount;
|
private final int groupCount;
|
||||||
private final List<Message> messages = new ArrayList<Message> ();
|
private final List<Message> messages = new ArrayList<Message> ();
|
||||||
|
|
||||||
private Huffman huffman;
|
private final Huffman huffman;
|
||||||
|
|
||||||
public MessageDataBlock (String name, byte[] buffer, int firstMessageNo)
|
public MessageDataBlock (String name, byte[] buffer, int firstMessageNo,
|
||||||
|
Huffman huffman)
|
||||||
{
|
{
|
||||||
super (name, buffer);
|
super (name, buffer);
|
||||||
this.firstMessageNo = firstMessageNo;
|
this.firstMessageNo = firstMessageNo;
|
||||||
|
this.huffman = huffman;
|
||||||
|
|
||||||
int ptr = 0x1FF; // last byte in block
|
int ptr = 0x1FF; // last byte in block
|
||||||
groupCount = buffer[ptr--] & 0xFF;
|
groupCount = buffer[ptr--] & 0xFF;
|
||||||
@ -77,11 +76,6 @@ public class MessageDataBlock extends AbstractFile
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setHuffman (Huffman huffman)
|
|
||||||
{
|
|
||||||
this.huffman = huffman;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getText ()
|
public String getText ()
|
||||||
{
|
{
|
||||||
@ -98,8 +92,8 @@ public class MessageDataBlock extends AbstractFile
|
|||||||
lastMessageNo = message.msgNo;
|
lastMessageNo = message.msgNo;
|
||||||
byte[] returnMessage = new byte[message.length];
|
byte[] returnMessage = new byte[message.length];
|
||||||
System.arraycopy (buffer, message.offset, returnMessage, 0, message.length);
|
System.arraycopy (buffer, message.offset, returnMessage, 0, message.length);
|
||||||
text.append (
|
text.append (String.format ("%5d %s%n", message.msgNo,
|
||||||
String.format ("%5d %s%n", message.msgNo, huffman.decodeMessage (returnMessage)));
|
huffman.decodeMessage (returnMessage)));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (text.length () > 0)
|
if (text.length () > 0)
|
||||||
|
@ -20,9 +20,9 @@ public class Wizardry4BootDisk extends PascalDisk
|
|||||||
{
|
{
|
||||||
public Header scenarioHeader;
|
public Header scenarioHeader;
|
||||||
List<AppleDisk> disks = new ArrayList<AppleDisk> ();
|
List<AppleDisk> disks = new ArrayList<AppleDisk> ();
|
||||||
// protected Disk[] dataDisks;
|
|
||||||
private Relocator relocator;
|
private Relocator relocator;
|
||||||
private MessageBlock messageBlock;
|
private MessageBlock messageBlock;
|
||||||
|
private Huffman huffman;
|
||||||
|
|
||||||
public Wizardry4BootDisk (AppleDisk[] dataDisks)
|
public Wizardry4BootDisk (AppleDisk[] dataDisks)
|
||||||
{
|
{
|
||||||
@ -74,19 +74,6 @@ public class Wizardry4BootDisk extends PascalDisk
|
|||||||
linkMonsterImages (monstersNode, fileEntry);
|
linkMonsterImages (monstersNode, fileEntry);
|
||||||
}
|
}
|
||||||
|
|
||||||
DefaultMutableTreeNode messagesNode = findNode (currentRoot, "ASCII.KRN");
|
|
||||||
fileEntry = (FileEntry) messagesNode.getUserObject ();
|
|
||||||
if (fileEntry != null)
|
|
||||||
{
|
|
||||||
messageBlock = new MessageBlock (fileEntry.getDataSource ().buffer);
|
|
||||||
messagesNode.setAllowsChildren (true);
|
|
||||||
for (MessageDataBlock mdb : messageBlock)
|
|
||||||
{
|
|
||||||
List<DiskAddress> messageBlocks = new ArrayList<DiskAddress> ();
|
|
||||||
addToNode (mdb, messagesNode, messageBlocks);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
DefaultMutableTreeNode huffNode = findNode (currentRoot, "ASCII.HUFF");
|
DefaultMutableTreeNode huffNode = findNode (currentRoot, "ASCII.HUFF");
|
||||||
fileEntry = (FileEntry) huffNode.getUserObject ();
|
fileEntry = (FileEntry) huffNode.getUserObject ();
|
||||||
if (fileEntry != null)
|
if (fileEntry != null)
|
||||||
@ -94,10 +81,22 @@ public class Wizardry4BootDisk extends PascalDisk
|
|||||||
|
|
||||||
byte[] buffer = fileEntry.getDataSource ().buffer;
|
byte[] buffer = fileEntry.getDataSource ().buffer;
|
||||||
|
|
||||||
Huffman huffman = new Huffman ("Huffman tree", buffer);
|
huffman = new Huffman ("Huffman tree", buffer);
|
||||||
messageBlock.setHuffman (huffman);
|
|
||||||
fileEntry.setFile (huffman);
|
fileEntry.setFile (huffman);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DefaultMutableTreeNode messagesNode = findNode (currentRoot, "ASCII.KRN");
|
||||||
|
fileEntry = (FileEntry) messagesNode.getUserObject ();
|
||||||
|
if (fileEntry != null)
|
||||||
|
{
|
||||||
|
messageBlock = new MessageBlock (fileEntry.getDataSource ().buffer, huffman);
|
||||||
|
messagesNode.setAllowsChildren (true);
|
||||||
|
for (MessageDataBlock mdb : messageBlock)
|
||||||
|
{
|
||||||
|
List<DiskAddress> messageBlocks = new ArrayList<DiskAddress> ();
|
||||||
|
addToNode (mdb, messagesNode, messageBlocks);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void linkMazeLevels (DefaultMutableTreeNode scenarioNode, FileEntry fileEntry)
|
private void linkMazeLevels (DefaultMutableTreeNode scenarioNode, FileEntry fileEntry)
|
||||||
|
Loading…
Reference in New Issue
Block a user