dmolony-DiskBrowser/src/com/bytezone/diskbrowser/applefile/FaddenHiResImage.java

54 lines
1.6 KiB
Java

package com.bytezone.diskbrowser.applefile;
// -----------------------------------------------------------------------------------//
public class FaddenHiResImage extends OriginalHiResImage
// -----------------------------------------------------------------------------------//
{
// https://github.com/fadden/fhpack/blob/master/fhpack.cpp
// ---------------------------------------------------------------------------------//
public FaddenHiResImage (String name, byte[] buffer, int fileType, int auxType,
int endOfFile)
// ---------------------------------------------------------------------------------//
{
super (name, buffer, fileType, auxType, endOfFile);
assert buffer[0] == 0x66;
this.buffer = new byte[0x2000];
int outPtr = 0;
int ptr = 1;
while (ptr < buffer.length)
{
int literalLen = (buffer[ptr] & 0xF0) >>> 4;
int matchLen = (buffer[ptr++] & 0x0F) + 4;
if (literalLen == 15)
literalLen = (buffer[ptr++] & 0xFF) + 15;
if (literalLen > 0)
{
System.arraycopy (buffer, ptr, this.buffer, outPtr, literalLen);
ptr += literalLen;
outPtr += literalLen;
}
if (matchLen == 19) // 15 + 4
{
matchLen = (buffer[ptr++] & 0xFF);
if (matchLen == 254) // eof
break;
if (matchLen == 253) // no match
continue;
matchLen += 19;
}
int offset = (buffer[ptr++] & 0xFF) | ((buffer[ptr++] & 0xFF) << 8);
while (matchLen-- > 0)
this.buffer[outPtr++] = this.buffer[offset++];
}
createImage ();
}
}