mirror of
https://github.com/dmolony/DiskBrowser.git
synced 2024-09-28 00:54:28 +00:00
68 lines
2.1 KiB
Java
68 lines
2.1 KiB
Java
|
package com.bytezone.diskbrowser.prodos.write;
|
||
|
|
||
|
import static com.bytezone.diskbrowser.prodos.write.ProdosDisk.BLOCK_SIZE;
|
||
|
|
||
|
// -----------------------------------------------------------------------------------//
|
||
|
public class IndexBlock
|
||
|
// -----------------------------------------------------------------------------------//
|
||
|
{
|
||
|
int blockNo;
|
||
|
int[] blocks = new int[BLOCK_SIZE / 2];
|
||
|
int totalBlocks;
|
||
|
|
||
|
// ---------------------------------------------------------------------------------//
|
||
|
public IndexBlock (int dataBlockNo)
|
||
|
// ---------------------------------------------------------------------------------//
|
||
|
{
|
||
|
this.blockNo = dataBlockNo;
|
||
|
}
|
||
|
|
||
|
// ---------------------------------------------------------------------------------//
|
||
|
void set (int position, int actualBlockNo)
|
||
|
// ---------------------------------------------------------------------------------//
|
||
|
{
|
||
|
if (blocks[position] == 0)
|
||
|
totalBlocks++;
|
||
|
|
||
|
blocks[position] = actualBlockNo;
|
||
|
}
|
||
|
|
||
|
// ---------------------------------------------------------------------------------//
|
||
|
int get (int position)
|
||
|
// ---------------------------------------------------------------------------------//
|
||
|
{
|
||
|
return blocks[position];
|
||
|
}
|
||
|
|
||
|
// ---------------------------------------------------------------------------------//
|
||
|
void write (byte[] buffer)
|
||
|
// ---------------------------------------------------------------------------------//
|
||
|
{
|
||
|
int ptr = blockNo * BLOCK_SIZE;
|
||
|
|
||
|
for (int i = 0; i < blocks.length; i++)
|
||
|
{
|
||
|
if (blocks[i] == 0)
|
||
|
{
|
||
|
buffer[ptr + i] = 0;
|
||
|
buffer[ptr + i + 0x100] = 0;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
int blockNo = blocks[i];
|
||
|
buffer[ptr + i] = (byte) (blockNo & 0xFF);
|
||
|
buffer[ptr + i + 0x100] = (byte) ((blockNo & 0xFF00) >>> 8);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// ---------------------------------------------------------------------------------//
|
||
|
@Override
|
||
|
public String toString ()
|
||
|
// ---------------------------------------------------------------------------------//
|
||
|
{
|
||
|
return String.format ("Index Block: %04X contains %d entries%n", blockNo,
|
||
|
totalBlocks);
|
||
|
}
|
||
|
}
|