Class ProdosFormatDisk

java.lang.Object
com.webcodepro.applecommander.storage.FormattedDisk
com.webcodepro.applecommander.storage.os.prodos.ProdosFormatDisk
All Implemented Interfaces:
DirectoryEntry

public class ProdosFormatDisk extends FormattedDisk
Manages a disk that is in the ProDOS format.

Date created: Oct 3, 2002 11:45:25 PM

  • Constructor Details

    • ProdosFormatDisk

      public ProdosFormatDisk(String filename, ImageOrder imageOrder)
      Constructor for ProdosFormatDisk.
      Parameters:
      filename -
  • Method Details

    • create

      public static ProdosFormatDisk[] create(String filename, String diskName, ImageOrder imageOrder)
      Create a ProdosFormatDisk.
    • getFormat

      public String getFormat()
      Identify the operating system format of this disk.
      Specified by:
      getFormat in class FormattedDisk
      See Also:
    • createFile

      public ProdosFileEntry createFile() throws DiskFullException
      Create a FileEntry in the Volume Directory.
      Throws:
      DiskFullException
    • createFile

      public ProdosFileEntry createFile(ProdosCommonDirectoryHeader directory) throws DiskFullException
      Create a FileEntry in the given directory.
      Throws:
      DiskFullException
    • getFiles

      public List<FileEntry> getFiles() throws DiskException
      Retrieve a list of files.
      Throws:
      DiskException
      See Also:
    • getFiles

      protected List<FileEntry> getFiles(int blockNumber) throws DiskException
      Build a list of files, starting in the given block number. This works for the master as well as the subdirectories.
      Throws:
      DiskException
    • getFreeSpace

      public int getFreeSpace()
      Return the amount of free space in bytes.
      Specified by:
      getFreeSpace in class FormattedDisk
      See Also:
    • getFreeBlocks

      public int getFreeBlocks()
      Return the number of free blocks on the disk.
    • getUsedSpace

      public int getUsedSpace()
      Return the amount of used space in bytes.
      Specified by:
      getUsedSpace in class FormattedDisk
      See Also:
    • getUsedBlocks

      public int getUsedBlocks()
      Return the number of used blocks on the disk.
    • canCreateDirectories

      public boolean canCreateDirectories()
      Identify if additional directories can be created. This may indicate that directories are not available to this operating system or simply that the disk image is "locked" to writing.
    • canCreateFile

      public boolean canCreateFile()
      Indicates if this disk image can create a file. If not, the reason may be as simple as it has not beem implemented to something specific about the disk.
    • getDiskName

      public String getDiskName()
      Return the name of the disk.
      Specified by:
      getDiskName in class FormattedDisk
      See Also:
    • setDiskName

      public void setDiskName(String volumeName)
      Set the name of the disk (volume name).
      Overrides:
      setDiskName in class FormattedDisk
    • getBitmapDimensions

      public int[] getBitmapDimensions()
      Get suggested dimensions for display of bitmap. There is no suggestion for a ProDOS volume - it is just a series of blocks.
      Specified by:
      getBitmapDimensions in class FormattedDisk
    • getBitmapLength

      public int getBitmapLength()
      Get the length of the bitmap.
      Specified by:
      getBitmapLength in class FormattedDisk
    • getDiskUsage

      public FormattedDisk.DiskUsage getDiskUsage()
      Get the disk usage iterator.
      Specified by:
      getDiskUsage in class FormattedDisk
    • getBitmapLabels

      public String[] getBitmapLabels()
      Get the labels to use in the bitmap.
      Specified by:
      getBitmapLabels in class FormattedDisk
    • getDiskInformation

      public List<FormattedDisk.DiskInformation> getDiskInformation()
      Get Pascal-specific disk information.
      Overrides:
      getDiskInformation in class FormattedDisk
    • getFileColumnHeaders

      public List<FormattedDisk.FileColumnHeader> getFileColumnHeaders(int displayMode)
      Get the standard file column header information. This default implementation is intended only for standard mode.
      Overrides:
      getFileColumnHeaders in class FormattedDisk
    • supportsDeletedFiles

      public boolean supportsDeletedFiles()
      Indicates if this disk format supports "deleted" files.
      Specified by:
      supportsDeletedFiles in class FormattedDisk
    • canReadFileData

      public boolean canReadFileData()
      Indicates if this disk image can read data from a file.
      Specified by:
      canReadFileData in class FormattedDisk
    • canHaveDirectories

      public boolean canHaveDirectories()
      Identify if this disk format is capable of having directories.
      Specified by:
      canHaveDirectories in class FormattedDisk
      See Also:
    • canWriteFileData

      public boolean canWriteFileData()
      Indicates if this disk image can write data to a file.
      Specified by:
      canWriteFileData in class FormattedDisk
    • canDeleteFile

      public boolean canDeleteFile()
      Indicates if this disk image can delete a file.
      Specified by:
      canDeleteFile in class FormattedDisk
    • getFileData

      public byte[] getFileData(FileEntry fileEntry)
      Get the data associated with the specified FileEntry. Note that this could return a 16MB file! Sparse files are not treated specially.
      Specified by:
      getFileData in class FormattedDisk
      See Also:
    • freeBlocks

      protected void freeBlocks(ProdosFileEntry prodosFileEntry)
      Free blocks used by a ProdosFileEntry.
    • getIndexBlockData

      protected int getIndexBlockData(byte[] fileData, byte[] indexBlock, int offset)
      Read file data from the given index block. Note that block number 0 is an unused block.
    • setFileData

      protected void setFileData(ProdosFileEntry fileEntry, byte[] fileData) throws DiskFullException
      Set the data associated with the specified ProdosFileEntry into sectors on the disk. Automatically grows the filesystem structures from seedling to sapling to tree.
      Throws:
      DiskFullException
    • setFileData

      protected void setFileData(ProdosFileEntry fileEntry, byte[] dataFork, byte[] resourceFork) throws DiskFullException
      Set the data associated with the specified ProdosFileEntry into sectors on the disk. Automatically grows the filesystem structures from seedling to sapling to tree.
      Throws:
      DiskFullException
    • setGEOSFileData

      protected void setGEOSFileData(ProdosFileEntry fileEntry, byte[] fileData) throws DiskFullException
      Set the data associated with the specified ProdosFileEntry into sectors on the disk. Take GEOS file structures into account.
      Throws:
      DiskFullException
    • setGEOSSaplingData

      protected void setGEOSSaplingData(byte[] bitmap, ProdosFileEntry fileEntry, byte[] fileData) throws DiskFullException
      Set the GEOS "sapling" file data.
      Throws:
      DiskFullException
    • setGEOSTreeData

      protected void setGEOSTreeData(byte[] bitmap, ProdosFileEntry fileEntry, byte[] fileData) throws DiskFullException
      Set the GEOS "tree" file data.
      Throws:
      DiskFullException
    • findFreeBlock

      protected int findFreeBlock(byte[] volumeBitmap) throws DiskFullException
      Locate a free block in the Volume Bitmap.
      Throws:
      DiskFullException
    • readVolumeBitMap

      public byte[] readVolumeBitMap()
      Read the Volume Bit Map.
    • writeVolumeBitMap

      public void writeVolumeBitMap(byte[] data)
      Write the Volume Bit Map.
    • isBlockFree

      public boolean isBlockFree(byte[] data, int blockNumber)
      Determine if the specified block is free.
    • setBlockFree

      public void setBlockFree(byte[] data, int blockNumber)
      Set if the specified block is free.
    • isBlockUsed

      public boolean isBlockUsed(byte[] data, int blockNumber)
      Determine if the specified block is used.
    • setBlockUsed

      public void setBlockUsed(byte[] data, int blockNumber)
      Set if the specified block is free.
    • format

      public void format()
      Format the ProDOS volume.
      Specified by:
      format in class FormattedDisk
      See Also:
    • getLogicalDiskNumber

      public int getLogicalDiskNumber()
      Returns the logical disk number. Returns a 0 to indicate no numbering.
      Specified by:
      getLogicalDiskNumber in class FormattedDisk
    • getSuggestedFilename

      public String getSuggestedFilename(String filename)
      Returns a valid filename for the given filename. ProDOS filenames have a maximum length of 15 characters, must start with a character and may contain characters (A-Z), digits (0-9), or the period (.).
      Specified by:
      getSuggestedFilename in class FormattedDisk
    • getSuggestedFiletype

      public String getSuggestedFiletype(String filename)
      Returns a valid filetype for the given filename. The most simple format will just assume a filetype of binary. This method is available for the interface to make an intelligent first guess as to the filetype.
      Specified by:
      getSuggestedFiletype in class FormattedDisk
    • getFiletype

      public static String getFiletype(int filetype)
      Return the filetype of this file. This will be three characters, according to ProDOS - a "$xx" if unknown.
    • getFiletype

      public byte getFiletype(String filetype)
      Get the numerical filetype.
    • fileTypeNeedsAddress

      public static boolean fileTypeNeedsAddress(String filetype)
      Utility method to indicate if this file type needs an address.
    • getFiletypes

      public String[] getFiletypes()
      Returns a list of possible file types. Since the filetype is specific to each operating system, a simple String is used.
      Specified by:
      getFiletypes in class FormattedDisk
    • needsAddress

      public boolean needsAddress(String filetype)
      Indicates if this filetype requires an address component.
      Specified by:
      needsAddress in class FormattedDisk
    • supportsDiskMap

      public boolean supportsDiskMap()
      Indicates if this FormattedDisk supports a disk map.
      Overrides:
      supportsDiskMap in class FormattedDisk
    • changeImageOrder

      public void changeImageOrder(ImageOrder imageOrder)
      Change to a different ImageOrder. Remains in ProDOS format but the underlying order can change.
      Specified by:
      changeImageOrder in class FormattedDisk
      See Also:
    • setFileData

      public void setFileData(FileEntry fileEntry, byte[] fileData) throws DiskFullException
      Writes the raw bytes into the file. This bypasses any special formatting of the data (such as prepending the data with a length and/or an address). Typically, the FileEntry.setFileData method should be used.
      Specified by:
      setFileData in class FormattedDisk
      Throws:
      DiskFullException
    • getVolumeHeader

      protected ProdosVolumeDirectoryHeader getVolumeHeader()
    • createDirectory

      public DirectoryEntry createDirectory(String name) throws DiskFullException
      Create a new DirectoryEntry.
      Throws:
      DiskFullException
      See Also:
    • createDirectory

      public DirectoryEntry createDirectory(ProdosCommonDirectoryHeader directory, String name) throws DiskFullException
      Create a new DirectoryEntry.
      Throws:
      DiskFullException
    • getDiskGeometry

      public DiskGeometry getDiskGeometry()
      Gives an indication on how this disk's geometry should be handled.
      Specified by:
      getDiskGeometry in class FormattedDisk
    • toNativeFiletype

      public String toNativeFiletype(String prodosFiletype)
      Provides conversation from a given ProDOS file type since as it is common across many archiving tools.
      Specified by:
      toNativeFiletype in class FormattedDisk
    • toProdosFiletype

      public String toProdosFiletype(String nativeFiletype)
      Provides conversation to a given ProDOS file type since as it is common across many archiving tools.
      Specified by:
      toProdosFiletype in class FormattedDisk