/* * 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.os.prodos; import com.webcodepro.applecommander.util.AppleUtil; /** * Provides common subdirectory attributes. *

* Date created: Oct 5, 2002 11:17:57 PM * @author Rob Greene */ public class ProdosSubdirectoryHeader extends ProdosCommonDirectoryHeader { private ProdosDirectoryEntry directoryEntry; /** * Constructor for ProdosSubdirectoryHeader. */ public ProdosSubdirectoryHeader(ProdosFormatDisk disk, int block) { super(disk, block); } /** * Return the name of this subdirectory. */ public String getSubdirectoryName() { return AppleUtil.getProdosString(readFileEntry(), 0); } /** * Return the block number of the parent directory which contains the * file entry for this subdirectory. */ public int getParentPointer() { return AppleUtil.getWordValue(readFileEntry(), 0x23); } /** * Set the block number of the parent directory which contains the * file entry for this subdirectory. */ public void setParentPointer(int block) { byte[] data = readFileEntry(); AppleUtil.setWordValue(data, 0x23, block); writeFileEntry(data); } /** * Return the number of the file entry within the parent block. */ public int getParentEntry() { return AppleUtil.getUnsignedByte(readFileEntry()[0x25]); } /** * Sets the number of the file entry within the parent block. */ public void setParentEntry(int entryNum) { byte[] data = readFileEntry(); data[0x25] = (byte) entryNum; writeFileEntry(data); } /** * Return the length of the parent entry. */ public int getParentEntryLength() { return AppleUtil.getWordValue(readFileEntry(), 0x26); } /** * Sets the number of the file entry within the parent block. */ public void setParentEntryLength(int length) { byte[] data = readFileEntry(); data[0x26] = (byte) length; writeFileEntry(data); } /** * Set the related ProDOS directory entry. */ public void setProdosDirectoryEntry(ProdosDirectoryEntry directoryEntry) { this.directoryEntry = directoryEntry; } /** * Get the related ProDOS directory entry. */ public ProdosDirectoryEntry getProdosDirectoryEntry() { return directoryEntry; } /** * Set up some housekeeping bits */ public void setHousekeeping() { byte[] data = readFileEntry(); data[0x00] = (byte) (0xe0 | (data[0x00] & 0x0f)); // Subdirectories have the high nibble set to 0x0e data[0x10] = 0x75; // Reserved - must be $75 data[0x1f] = (byte) ENTRY_LENGTH; data[0x20] = 0x0d; AppleUtil.setWordValue(data, 0x21, 0); // Set file count to zero writeFileEntry(data); } }