com.webcodepro.applecommander.storage.os.dos33
Class DosFormatDisk

java.lang.Object
  extended by com.webcodepro.applecommander.storage.Disk
      extended by com.webcodepro.applecommander.storage.FormattedDisk
          extended by 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

Author:
Rob Greene

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
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
DosFormatDisk(java.lang.String filename, ImageOrder imageOrder)
          Constructor for DosFormatDisk.
 
Method Summary
 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()
          Create a new DirectoryEntry.
 FileEntry 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 dymanic parameters.
protected  void freeSectors(DosFileEntry dosFileEntry)
          Free sectors used by a DosFileEntry.
 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.
 java.util.List 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 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 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()
          Comput 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.
protected  byte[] readVtoc()
          Return the VTOC (Volume Table Of Contents).
protected  void setFileData(DosFileEntry fileEntry, byte[] data)
          Set the data associated with the specified DosFileEntry into sectors on the disk.
 void setFileData(FileEntry fileEntry, byte[] fileData)
          Writes the raw bytes into the file.
 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.
protected  void writeVtoc(byte[] vtoc)
          Save the VTOC (Volume Table Of Contents) to disk.
 
Methods inherited from class com.webcodepro.applecommander.storage.FormattedDisk
getFile, getFile, getFormattedDisk, resizeDiskImage, writeBootCode
 
Methods inherited from class com.webcodepro.applecommander.storage.Disk
getDiskImageManager, getFilename, getFilenameFilters, getFormattedDisks, getImageOrder, getPhysicalSize, hasChanged, is140KbDisk, is2ImgOrder, is800KbDisk, isCompressed, isCpmFormat, isDosFormat, isDosOrder, isNewImage, isNibbleOrder, isOzDosFormat, isPascalFormat, isProdosFormat, isProdosOrder, isRdosFormat, isUniDosFormat, readBlock, readSector, resizeDiskImage, save, saveAs, setFilename, setImageOrder, writeBlock, writeSector
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

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 class FormattedDisk
See Also:
FormattedDisk.getFormat()

getFiles

public java.util.List getFiles()
Retrieve a list of files.

See Also:
DirectoryEntry.getFiles()

createFile

public FileEntry 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 beem 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 class FormattedDisk
See Also:
FormattedDisk.getFreeSpace()

getFreeSectors

public int getFreeSectors()
Comput 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 class FormattedDisk
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 class FormattedDisk
See Also:
FormattedDisk.getDiskName()

readVtoc

protected byte[] readVtoc()
Return the VTOC (Volume Table Of Contents).


writeVtoc

protected 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 class FormattedDisk

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 class FormattedDisk
See Also:
FormattedDisk.getBitmapDimensions()

getBitmapLength

public int getBitmapLength()
Get the length of the bitmap.

Specified by:
getBitmapLength in class FormattedDisk

getBitmapLabels

public java.lang.String[] getBitmapLabels()
Get the labels to use in the bitmap.

Specified by:
getBitmapLabels in class FormattedDisk

getDiskInformation

public java.util.List getDiskInformation()
Get DOS-specific disk information.

Overrides:
getDiskInformation in class FormattedDisk

getFileColumnHeaders

public java.util.List 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

canWriteFileData

public boolean canWriteFileData()
Indicates if this disk image can write data to a file.

Specified by:
canWriteFileData in class FormattedDisk

canHaveDirectories

public boolean canHaveDirectories()
Identify if this disk format as not capable of having directories.

Specified by:
canHaveDirectories in class FormattedDisk
See Also:
FormattedDisk.canHaveDirectories()

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.

Specified by:
getFileData in class FormattedDisk
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 class FormattedDisk
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 class FormattedDisk
See Also:
FormattedDisk.format()

format

protected void format(int firstCatalogSector,
                      int tracksPerDisk,
                      int sectorsPerTrack)
Format the disk as DOS 3.3 given the dymanic 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 class FormattedDisk

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 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. For DOS, only the Binary type needs 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 DOS 3.3 format but the underlying order can chage.

Specified by:
changeImageOrder in class FormattedDisk
See Also:
ImageOrder

createDirectory

public DirectoryEntry createDirectory()
                               throws DiskFullException
Create a new DirectoryEntry.

Throws:
DiskFullException
See Also:
DirectoryEntry.createDirectory()