dmolony-DiskBrowser/src/com/bytezone/diskbrowser/applefile/TextBuffer.java
2017-07-09 19:26:13 +10:00

48 lines
1.4 KiB
Java

package com.bytezone.diskbrowser.applefile;
import com.bytezone.diskbrowser.utilities.HexFormatter;
// only used by Prodos text files - note the fixed block size of 512 - bad!
public class TextBuffer
{
public final byte[] buffer;
public final int reclen;
public final int firstRecNo;
public TextBuffer (byte[] tempBuffer, int reclen, int firstBlock)
{
this.reclen = reclen;
// calculate recNo of first full record
int firstByte = firstBlock * 512; // logical byte #
int rem = firstByte % reclen;
firstRecNo = firstByte / reclen + (rem > 0 ? 1 : 0);
int offset = (rem > 0) ? reclen - rem : 0;
int availableBytes = tempBuffer.length - offset;
int totalRecords = (availableBytes - 1) / reclen + 1;
// should check whether the two buffers are identical, and maybe skip this
// step
buffer = new byte[totalRecords * reclen];
int copyBytes = Math.min (availableBytes, buffer.length);
if (copyBytes < 0)
System.out.printf ("offset %d len %d copy %d%n", offset, buffer.length,
copyBytes);
else
System.arraycopy (tempBuffer, offset, buffer, 0, copyBytes);
}
@Override
public String toString ()
{
StringBuilder text = new StringBuilder ();
text.append ("Record length : " + reclen + "\n");
text.append ("First record : " + firstRecNo + "\n\n");
text.append (HexFormatter.format (buffer, 0, buffer.length) + "\n");
return text.toString ();
}
}