Class RdosFormatDisk

  • All Implemented Interfaces:
    DirectoryEntry

    public class RdosFormatDisk
    extends FormattedDisk
    Manages a disk that is in the RDOS format.

    Note that the RDOS 2.1/3.2 block interleave is different than the standard DOS 3.3 format. Thus, when the image is made, the sectors are skewed differently - use readRdosBlock to read the appropriate block number.

    Also note that the operating system is itself the first file. Block #0 is really track 0, sector 0 - meaning that the first file should not (cannot) be deleted.

    RDOS 2.1/3.2 was placed on 13 sector disks. This limits the number of blocks to 455. It also may also cause incompatibilities with other formats and other cracks.

    Date created: Oct 7, 2002 2:03:58 PM

    • Field Detail

      • ENTRY_LENGTH

        public static final int ENTRY_LENGTH
        Specifies the length of a file entry.
        See Also:
        Constant Field Values
      • TRACKS_ON_DISK

        public static final int TRACKS_ON_DISK
        Specifies the number of tracks on the disk. RDOS apparantly only worked on 5.25" disks.
        See Also:
        Constant Field Values
      • CATALOG_SECTORS

        public static final int CATALOG_SECTORS
        Number of sectors used by catalog. FIXME: some sources say 10, others say 11. RDOS 3.3 may support 16.
        See Also:
        Constant Field Values
      • FILE_TYPES

        public static final java.lang.String[] FILE_TYPES
        The known filetypes for a RDOS disk.
    • Constructor Detail

      • RdosFormatDisk

        public RdosFormatDisk​(java.lang.String filename,
                              ImageOrder imageOrder)
        Constructor for RdosFormatDisk.
    • Method Detail

      • create

        public static RdosFormatDisk[] create​(java.lang.String filename,
                                              ImageOrder imageOrder)
        Create a RdosFormatDisk.
      • readRdosBlock

        public byte[] readRdosBlock​(int block)
        Read an RDOS block. The sector skewing for RDOS 2.1/3.2 is different. This routine will convert the block number to a DOS track and sector, handling the sector change-over. The readSector method then should take care of various image formats.

        Note that sectorSkew has the full 16 sectors, even though RDOS 2.1/3.2 itself is a 13 sector format.

      • writeRdosBlock

        public void writeRdosBlock​(int block,
                                   byte[] data)
        Write an RDOS block. The sector skewing for RDOS2.1/3/2 is different. This routine will convert the block number to a DOS track and sector, handling the sector change-over. The writeSector method then should take care of various image formats.

        Note that sectorSkew has the full 16 sectors, even though RDOS itself is a 13 sector format.

      • getDiskName

        public java.lang.String getDiskName()
        RDOS really does not have a disk name. Fake one.
        Specified by:
        getDiskName in class FormattedDisk
      • getFiles

        public java.util.List<FileEntry> getFiles()
        Retrieve a list of files.
      • 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 been implemented to something specific about the disk.
      • getFormat

        public java.lang.String getFormat()
        Identify the operating system format of this disk.
        Specified by:
        getFormat in class FormattedDisk
      • getFreeBlocks

        public int getFreeBlocks()
        Return the number of free blocks.
      • getUsedBlocks

        public int getUsedBlocks()
        Return the number of used blocks.
      • getFreeSpace

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

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

        public int[] getBitmapDimensions()
        Get suggested dimensions for display of bitmap. Since RDOS uses blocks, a null is returned indicating no suggestions.
        Specified by:
        getBitmapDimensions in class FormattedDisk
      • getBitmapLabels

        public java.lang.String[] getBitmapLabels()
        Get the labels to use in the bitmap.
        Specified by:
        getBitmapLabels 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
      • 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
      • format

        public void format()
        Format the disk as an RDOS disk. FIXME - RDOS does not "like" an AppleCommander formatted disk. This appears to be because the &CAT command reads from track 1 sector 9 (whatever RDOS block that would be) and executes that code for the directory. AppleCommander will need to either clone the code or write its own routine. This is RDOS block #25. FIXME - Doesn't handle native 16-sector (RDOS 3.3) format.
        Specified by:
        format in class FormattedDisk
        See Also:
        FormattedDisk.format()
      • getLogicalDiskNumber

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

        public java.lang.String getSuggestedFilename​(java.lang.String filename)
        Returns a valid filename for the given filename. RDOS pretty much allows anything - so it is cut to 24 characters and trimmed (trailing whitespace may cause confusion).
        Specified by:
        getSuggestedFilename in class FormattedDisk
      • getSuggestedFiletype

        public java.lang.String getSuggestedFiletype​(java.lang.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
      • getFiletypes

        public java.lang.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​(java.lang.String filetype)
        Indicates if this filetype requires an address component. Presumably, the "B" filetype is binary and will need an address.
        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 RDOS format but the underlying order can change.
        Specified by:
        changeImageOrder in class FormattedDisk
        See Also:
        ImageOrder
      • 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
      • fromProdosFiletype

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

        public java.lang.String toProdosFiletype​(java.lang.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