mirror of
https://github.com/dmolony/DiskBrowser.git
synced 2024-09-28 00:54:28 +00:00
54 lines
1.6 KiB
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 ();
|
|
}
|
|
}
|