Class DosFormatDisk
- java.lang.Object
-
- com.webcodepro.applecommander.storage.Disk
-
- com.webcodepro.applecommander.storage.FormattedDisk
-
- com.webcodepro.applecommander.storage.os.dos33.DosFormatDisk
-
- All Implemented Interfaces:
DirectoryEntry
- Direct Known Subclasses:
OzDosFormatDisk
,UniDosFormatDisk
public class DosFormatDisk extends FormattedDisk
Manages a disk that is in Apple DOS 3.3 format.Date created: Oct 4, 2002 12:29:23 AM
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class com.webcodepro.applecommander.storage.FormattedDisk
FormattedDisk.DiskInformation, FormattedDisk.DiskUsage, FormattedDisk.FileColumnHeader
-
Nested classes/interfaces inherited from class com.webcodepro.applecommander.storage.Disk
Disk.FilenameFilter
-
-
Field Summary
Fields Modifier and Type Field Description static int
CATALOG_TRACK
The standard DOS 3.3 catalog track.static int
SECTOR_LOCATION_INDEX
Indicates the index of the sector in the location array.static int
TRACK_LOCATION_INDEX
Indicates the index of the track in the location array.static int
TRACK_SECTOR_PAIRS
The standard track/sector pairs in a track/sector list.static int
VTOC_SECTOR
The standard VTOC sector.-
Fields inherited from class com.webcodepro.applecommander.storage.FormattedDisk
FILE_DISPLAY_DETAIL, FILE_DISPLAY_NATIVE, FILE_DISPLAY_STANDARD
-
Fields inherited from class com.webcodepro.applecommander.storage.Disk
APPLE_10MB_HARDDISK, APPLE_140KB_DISK, APPLE_140KB_NIBBLE_DISK, APPLE_20MB_HARDDISK, APPLE_32MB_HARDDISK, APPLE_5MB_HARDDISK, APPLE_800KB_2IMG_DISK, APPLE_800KB_DISK, BLOCK_SIZE, DOS33_SECTORS_ON_140KB_DISK, PRODOS_BLOCKS_ON_140KB_DISK, SECTOR_SIZE
-
-
Constructor Summary
Constructors Constructor Description DosFormatDisk(java.lang.String filename, ImageOrder imageOrder)
Constructor for DosFormatDisk.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
canCreateDirectories()
Identify if additional directories can be created.boolean
canCreateFile()
Indicates if this disk image can create a file.boolean
canDeleteFile()
Indicates if this disk image can delete a file.boolean
canHaveDirectories()
Identify if this disk format as not capable of having directories.boolean
canReadFileData()
Indicates if this disk image can read data from a file.boolean
canWriteFileData()
Indicates if this disk image can write data to a file.void
changeImageOrder(ImageOrder imageOrder)
Change to a different ImageOrder.protected void
checkRange(int track, int sector)
Validate track/sector range.static DosFormatDisk[]
create(java.lang.String filename, ImageOrder imageOrder)
Create a DosFormatDisk.DirectoryEntry
createDirectory(java.lang.String name)
Create a new DirectoryEntry.DosFileEntry
createFile()
Create a FileEntry.void
format()
Format the disk as DOS 3.3.protected void
format(int firstCatalogSector, int tracksPerDisk, int sectorsPerTrack)
Format the disk as DOS 3.3 given the dynamic parameters.protected void
freeSectors(DosFileEntry dosFileEntry)
Free sectors used by a DosFileEntry.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.int[]
getBitmapDimensions()
Get suggested dimensions for display of bitmap.java.lang.String[]
getBitmapLabels()
Get the labels to use in the bitmap.int
getBitmapLength()
Get the length of the bitmap.DiskGeometry
getDiskGeometry()
Gives an indication on how this disk's geometry should be handled.java.util.List<FormattedDisk.DiskInformation>
getDiskInformation()
Get DOS-specific disk information.java.lang.String
getDiskName()
Return the DOS disk name.FormattedDisk.DiskUsage
getDiskUsage()
Get the disk usage iterator.java.util.List<FormattedDisk.FileColumnHeader>
getFileColumnHeaders(int displayMode)
Get the standard file column header information.byte[]
getFileData(FileEntry fileEntry)
Get the data associated with the specified FileEntry.java.util.List<FileEntry>
getFiles()
Retrieve a list of files.java.lang.String[]
getFiletypes()
Returns a list of possible file types.java.lang.String
getFormat()
Identify the operating system format of this disk as DOS 3.3.protected int
getFreeMapBit(int sector)
Compute the VTOC bit for the T/S map.protected int
getFreeMapByte(int track, int sector)
Compute the VTOC byte for the T/S map.int
getFreeSectors()
Compute the number of free sectors available on the disk.int
getFreeSpace()
Compute the amount of freespace available on the disk.int
getLogicalDiskNumber()
Returns the logical disk number.int
getSectors()
Get the number of sectors on this disk.java.lang.String
getSuggestedFilename(java.lang.String filename)
Returns a valid filename for the given filename.java.lang.String
getSuggestedFiletype(java.lang.String filename)
Returns a valid filetype for the given filename.int
getTotalSectors()
Compute the total number of sectors available on the disk.int
getTracks()
Get the number of tracks on this disk.int
getUsedSectors()
Compute the number of used sectors on the disk.int
getUsedSpace()
Return the amount of used space in bytes.boolean
isSectorFree(int track, int sector, byte[] vtoc)
Indicates if a specific track/sector is free.boolean
isSectorUsed(int track, int sector, byte[] vtoc)
Indicates if a specific track/sector is used.boolean
needsAddress(java.lang.String filetype)
Indicates if this filetype requires an address component.byte[]
readVtoc()
Return the VTOC (Volume Table Of Contents).void
setFileData(FileEntry fileEntry, byte[] fileData)
Writes the raw bytes into the file.protected void
setFileData(DosFileEntry fileEntry, byte[] data)
Set the data associated with the specified DosFileEntry into sectors on the disk.void
setSectorFree(int track, int sector, byte[] vtoc)
Sets the track/sector indicator to free.void
setSectorUsed(int track, int sector, byte[] vtoc)
Sets the track/sector indicator to used.boolean
supportsDeletedFiles()
Indicates if this disk format supports "deleted" files.boolean
supportsDiskMap()
Indicates if this FormattedDisk supports a disk map.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.void
writeVtoc(byte[] vtoc)
Save the VTOC (Volume Table Of Contents) to disk.-
Methods inherited from class com.webcodepro.applecommander.storage.FormattedDisk
getDirname, getFile, getFile, getFormattedDisk, resizeDiskImage, setDiskName, writeBootCode
-
Methods inherited from class com.webcodepro.applecommander.storage.Disk
getAllExtensions, getDiskImageManager, getFilename, getFilenameFilters, getFormattedDisks, getImageOrder, getOrderName, getPhysicalSize, hasChanged, is140KbDisk, is2ImgOrder, is800KbDisk, isBXY, isCompressed, isCpmFormat, isDC42, isDosFormat, isDosOrder, isNakedosFormat, isNewImage, isNibbleOrder, isOzDosFormat, isPascalFormat, isProdosFormat, isProdosOrder, isRdos33Format, isRdosFormat, isSDK, isSHK, isUniDosFormat, isWPFormat, makeDosOrder, makeProdosOrder, readBlock, readSector, resizeDiskImage, save, saveAs, setFilename, setImageOrder, sizeToFit, testImageOrder, writeBlock, writeSector
-
-
-
-
Field Detail
-
TRACK_LOCATION_INDEX
public static final int TRACK_LOCATION_INDEX
Indicates the index of the track in the location array.- See Also:
- Constant Field Values
-
SECTOR_LOCATION_INDEX
public static final int SECTOR_LOCATION_INDEX
Indicates the index of the sector in the location array.- See Also:
- Constant Field Values
-
CATALOG_TRACK
public static final int CATALOG_TRACK
The standard DOS 3.3 catalog track.- See Also:
- Constant Field Values
-
VTOC_SECTOR
public static final int VTOC_SECTOR
The standard VTOC sector.- See Also:
- Constant Field Values
-
TRACK_SECTOR_PAIRS
public static final int TRACK_SECTOR_PAIRS
The standard track/sector pairs in a track/sector list.- See Also:
- Constant Field Values
-
-
Constructor Detail
-
DosFormatDisk
public DosFormatDisk(java.lang.String filename, ImageOrder imageOrder)
Constructor for DosFormatDisk.
-
-
Method Detail
-
create
public static DosFormatDisk[] create(java.lang.String filename, ImageOrder imageOrder)
Create a DosFormatDisk. All DOS disk images are expected to be 140K in size.
-
getFormat
public java.lang.String getFormat()
Identify the operating system format of this disk as DOS 3.3.- Specified by:
getFormat
in classFormattedDisk
- See Also:
FormattedDisk.getFormat()
-
getFiles
public java.util.List<FileEntry> getFiles() throws DiskException
Retrieve a list of files.- Throws:
DiskException
- See Also:
DirectoryEntry.getFiles()
-
createFile
public DosFileEntry createFile() throws DiskFullException
Create a FileEntry.- Throws:
DiskFullException
-
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.
-
getFreeSpace
public int getFreeSpace()
Compute the amount of freespace available on the disk. This algorithm completely ignores tracks and sectors by running through the entire bitmap stored on the VTOC.- Specified by:
getFreeSpace
in classFormattedDisk
- See Also:
FormattedDisk.getFreeSpace()
-
getFreeSectors
public int getFreeSectors()
Compute the number of free sectors available on the disk.
-
getUsedSpace
public int getUsedSpace()
Return the amount of used space in bytes.- Specified by:
getUsedSpace
in classFormattedDisk
- See Also:
FormattedDisk.getUsedSpace()
-
getUsedSectors
public int getUsedSectors()
Compute the number of used sectors on the disk.
-
getTotalSectors
public int getTotalSectors()
Compute the total number of sectors available on the disk.
-
getDiskName
public java.lang.String getDiskName()
Return the DOS disk name. Basically, the DISK VOLUME #xxx that a CATALOG command would show. Note that Java bytes are signed, so a little mojo is in order.- Specified by:
getDiskName
in classFormattedDisk
- See Also:
FormattedDisk.getDiskName()
-
readVtoc
public byte[] readVtoc()
Return the VTOC (Volume Table Of Contents).
-
writeVtoc
public void writeVtoc(byte[] vtoc)
Save the VTOC (Volume Table Of Contents) to disk.
-
getDiskUsage
public FormattedDisk.DiskUsage getDiskUsage()
Get the disk usage iterator.- Specified by:
getDiskUsage
in classFormattedDisk
-
getTracks
public int getTracks()
Get the number of tracks on this disk.
-
getSectors
public int getSectors()
Get the number of sectors on this disk.
-
getBitmapDimensions
public int[] getBitmapDimensions()
Get suggested dimensions for display of bitmap. For DOS 3.3, that information is stored in the VTOC, and that information is fairly important.- Specified by:
getBitmapDimensions
in classFormattedDisk
- See Also:
FormattedDisk.getBitmapDimensions()
-
getBitmapLength
public int getBitmapLength()
Get the length of the bitmap.- Specified by:
getBitmapLength
in classFormattedDisk
-
getBitmapLabels
public java.lang.String[] getBitmapLabels()
Get the labels to use in the bitmap.- Specified by:
getBitmapLabels
in classFormattedDisk
-
getDiskInformation
public java.util.List<FormattedDisk.DiskInformation> getDiskInformation()
Get DOS-specific disk information.- Overrides:
getDiskInformation
in classFormattedDisk
-
getFileColumnHeaders
public java.util.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 classFormattedDisk
-
supportsDeletedFiles
public boolean supportsDeletedFiles()
Indicates if this disk format supports "deleted" files.- Specified by:
supportsDeletedFiles
in classFormattedDisk
-
canReadFileData
public boolean canReadFileData()
Indicates if this disk image can read data from a file.- Specified by:
canReadFileData
in classFormattedDisk
-
canWriteFileData
public boolean canWriteFileData()
Indicates if this disk image can write data to a file.- Specified by:
canWriteFileData
in classFormattedDisk
-
canHaveDirectories
public boolean canHaveDirectories()
Identify if this disk format as not capable of having directories.- Specified by:
canHaveDirectories
in classFormattedDisk
- See Also:
FormattedDisk.canHaveDirectories()
-
canDeleteFile
public boolean canDeleteFile()
Indicates if this disk image can delete a file.- Specified by:
canDeleteFile
in classFormattedDisk
-
getFileData
public byte[] getFileData(FileEntry fileEntry)
Get the data associated with the specified FileEntry.- Specified by:
getFileData
in classFormattedDisk
- See Also:
FileEntry.getFileData()
-
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 classFormattedDisk
- Throws:
DiskFullException
-
setFileData
protected void setFileData(DosFileEntry fileEntry, byte[] data) throws DiskFullException
Set the data associated with the specified DosFileEntry into sectors on the disk.- Throws:
DiskFullException
-
freeSectors
protected void freeSectors(DosFileEntry dosFileEntry)
Free sectors used by a DosFileEntry.
-
format
public void format()
Format the disk as DOS 3.3.- Specified by:
format
in classFormattedDisk
- See Also:
FormattedDisk.format()
-
format
protected void format(int firstCatalogSector, int tracksPerDisk, int sectorsPerTrack)
Format the disk as DOS 3.3 given the dynamic parameters. (Used for UniDOS and OzDOS.)
-
isSectorFree
public boolean isSectorFree(int track, int sector, byte[] vtoc)
Indicates if a specific track/sector is free.
-
isSectorUsed
public boolean isSectorUsed(int track, int sector, byte[] vtoc)
Indicates if a specific track/sector is used.
-
setSectorFree
public void setSectorFree(int track, int sector, byte[] vtoc)
Sets the track/sector indicator to free.
-
setSectorUsed
public void setSectorUsed(int track, int sector, byte[] vtoc)
Sets the track/sector indicator to used.
-
getFreeMapByte
protected int getFreeMapByte(int track, int sector)
Compute the VTOC byte for the T/S map.
-
getFreeMapBit
protected int getFreeMapBit(int sector)
Compute the VTOC bit for the T/S map.
-
checkRange
protected void checkRange(int track, int sector)
Validate track/sector range. This just validates the maximum values allowable for track and sector.
-
getLogicalDiskNumber
public int getLogicalDiskNumber()
Returns the logical disk number. Returns a 0 to indicate no numbering.- Specified by:
getLogicalDiskNumber
in classFormattedDisk
-
getSuggestedFilename
public java.lang.String getSuggestedFilename(java.lang.String filename)
Returns a valid filename for the given filename. DOS 3.3 pretty much allows anything - so it is cut to 30 characters and trimmed (trailing whitespace may cause confusion).- Specified by:
getSuggestedFilename
in classFormattedDisk
-
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 classFormattedDisk
-
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 classFormattedDisk
-
needsAddress
public boolean needsAddress(java.lang.String filetype)
Indicates if this filetype requires an address component. For DOS, only the Binary type needs an address.- Specified by:
needsAddress
in classFormattedDisk
-
supportsDiskMap
public boolean supportsDiskMap()
Indicates if this FormattedDisk supports a disk map.- Overrides:
supportsDiskMap
in classFormattedDisk
-
changeImageOrder
public void changeImageOrder(ImageOrder imageOrder)
Change to a different ImageOrder. Remains in DOS 3.3 format but the underlying order can change.- Specified by:
changeImageOrder
in classFormattedDisk
- See Also:
ImageOrder
-
createDirectory
public DirectoryEntry createDirectory(java.lang.String name) throws DiskFullException
Create a new DirectoryEntry.- Throws:
DiskFullException
- See Also:
DirectoryEntry.createDirectory(String)
-
getDiskGeometry
public DiskGeometry getDiskGeometry()
Gives an indication on how this disk's geometry should be handled.- Specified by:
getDiskGeometry
in classFormattedDisk
-
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 classFormattedDisk
-
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 classFormattedDisk
-
-