2002-12-01 02:21:00 +00:00
|
|
|
/*
|
|
|
|
* AppleCommander - An Apple ][ image utility.
|
|
|
|
* Copyright (C) 2002 by Robert Greene
|
|
|
|
* robgreene at users.sourceforge.net
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
|
|
* under the terms of the GNU General Public License as published by the
|
|
|
|
* Free Software Foundation; either version 2 of the License, or (at your
|
|
|
|
* option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful, but
|
|
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
|
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
|
|
* for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License along
|
|
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
|
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
*/
|
|
|
|
package com.webcodepro.applecommander.storage;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Provide common directory attributes.
|
|
|
|
* <p>
|
|
|
|
* Date created: Oct 5, 2002 11:17:00 PM
|
|
|
|
* @author: Rob Greene
|
|
|
|
*/
|
|
|
|
public class ProdosCommonDirectoryHeader extends ProdosCommonEntry {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Constructor for ProdosCommonDirectoryHeader.
|
|
|
|
* @param fileEntry
|
|
|
|
*/
|
2002-12-12 01:46:14 +00:00
|
|
|
public ProdosCommonDirectoryHeader(ProdosFormatDisk disk, int block) {
|
|
|
|
super(disk, block, 4); // directory entries are always offset 4, right?
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the length of each entry. Expected to be 0x27.
|
|
|
|
*/
|
|
|
|
public int getEntryLength() {
|
2002-12-12 01:46:14 +00:00
|
|
|
return AppleUtil.getUnsignedByte(readFileEntry()[0x1f]);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Set the length of each entry.
|
|
|
|
*/
|
|
|
|
public void setEntryLength() {
|
|
|
|
byte[] data = readFileEntry();
|
|
|
|
data[0x1f] = (byte) ENTRY_LENGTH;
|
|
|
|
writeFileEntry(data);
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the number of entries per block. Expected to be 0x0d.
|
|
|
|
*/
|
|
|
|
public int getEntriesPerBlock() {
|
2002-12-12 01:46:14 +00:00
|
|
|
return AppleUtil.getUnsignedByte(readFileEntry()[0x20]);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Set the number of entries per block.
|
|
|
|
*/
|
|
|
|
public void setEntriesPerBlock() {
|
|
|
|
byte[] data = readFileEntry();
|
|
|
|
data[0x20] = 0x0d;
|
|
|
|
writeFileEntry(data);
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the number of active entries in the volume directory.
|
|
|
|
*/
|
|
|
|
public int getFileCount() {
|
2002-12-12 01:46:14 +00:00
|
|
|
return AppleUtil.getWordValue(readFileEntry(), 0x21);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Set the number of active entries in the volume directory.
|
|
|
|
*/
|
|
|
|
public void setFileCount(int fileCount) {
|
|
|
|
byte[] data = readFileEntry();
|
|
|
|
AppleUtil.setWordValue(data, 0x21, fileCount);
|
|
|
|
writeFileEntry(data);
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
|
2003-01-11 22:05:21 +00:00
|
|
|
/**
|
|
|
|
* Increment the number of active entries by one.
|
|
|
|
*/
|
|
|
|
public void incrementFileCount() {
|
|
|
|
byte[] data = readFileEntry();
|
|
|
|
data[0x21]++;
|
|
|
|
writeFileEntry(data);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Decrement the number of active entries by one.
|
|
|
|
*/
|
|
|
|
public void decrementFileCount() {
|
|
|
|
byte[] data = readFileEntry();
|
|
|
|
if (data[0x21] != 0) data[0x21]--;
|
|
|
|
writeFileEntry(data);
|
|
|
|
}
|
|
|
|
|
2002-12-01 02:21:00 +00:00
|
|
|
/**
|
|
|
|
* Get the block number of the bit map.
|
|
|
|
*/
|
|
|
|
public int getBitMapPointer() {
|
2002-12-12 01:46:14 +00:00
|
|
|
return AppleUtil.getWordValue(readFileEntry(), 0x23);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Set the block number of the bit map.
|
|
|
|
*/
|
|
|
|
public void setBitMapPointer(int blockNumber) {
|
|
|
|
byte[] data = readFileEntry();
|
|
|
|
AppleUtil.setWordValue(data, 0x23, blockNumber);
|
|
|
|
writeFileEntry(data);
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the total number of blocks on this volume.
|
|
|
|
*/
|
|
|
|
public int getTotalBlocks() {
|
2002-12-12 01:46:14 +00:00
|
|
|
return AppleUtil.getWordValue(readFileEntry(), 0x25);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Set the total number of blocks on this volume.
|
|
|
|
*/
|
|
|
|
public void setTotalBlocks(int totalBlocks) {
|
|
|
|
byte[] data = readFileEntry();
|
|
|
|
AppleUtil.setWordValue(data, 0x25, totalBlocks);
|
|
|
|
writeFileEntry(data);
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
}
|