Class ProdosFormatDisk
- java.lang.Object
-
- com.webcodepro.applecommander.storage.Disk
-
- 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
-
-
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 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 ProdosFormatDisk(java.lang.String filename, ImageOrder imageOrder)Constructor for ProdosFormatDisk.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description booleancanCompile(java.lang.String filetype)Indicates if this filetype can be compiled.booleancanCreateDirectories()Identify if additional directories can be created.booleancanCreateFile()Indicates if this disk image can create a file.booleancanDeleteFile()Indicates if this disk image can delete a file.booleancanHaveDirectories()Identify if this disk format is capable of having directories.booleancanReadFileData()Indicates if this disk image can read data from a file.booleancanWriteFileData()Indicates if this disk image can write data to a file.voidchangeImageOrder(ImageOrder imageOrder)Change to a different ImageOrder.static ProdosFormatDisk[]create(java.lang.String filename, java.lang.String diskName, ImageOrder imageOrder)Create a ProdosFormatDisk.DirectoryEntrycreateDirectory(ProdosCommonDirectoryHeader directory, java.lang.String name)Create a new DirectoryEntry.DirectoryEntrycreateDirectory(java.lang.String name)Create a new DirectoryEntry.ProdosFileEntrycreateFile()Create a FileEntry in the Volume Directory.ProdosFileEntrycreateFile(ProdosCommonDirectoryHeader directory)Create a FileEntry in the given directory.static com.webcodepro.applecommander.storage.os.prodos.ProdosFormatDisk.ProdosFileTypefindFileType(java.lang.String filetype)Locate the associated ProdosFileType.protected intfindFreeBlock(byte[] volumeBitmap)Locate a free block in the Volume Bitmap.voidformat()Format the ProDOS volume.protected voidfreeBlocks(ProdosFileEntry prodosFileEntry)Free blocks used by a ProdosFileEntry.int[]getBitmapDimensions()Get suggested dimensions for display of bitmap.java.lang.String[]getBitmapLabels()Get the labels to use in the bitmap.intgetBitmapLength()Get the length of the bitmap.DiskGeometrygetDiskGeometry()Gives an indication on how this disk's geometry should be handled.java.util.List<FormattedDisk.DiskInformation>getDiskInformation()Get Pascal-specific disk information.java.lang.StringgetDiskName()Return the name of the disk.FormattedDisk.DiskUsagegetDiskUsage()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.protected java.util.List<FileEntry>getFiles(int blockNumber)Build a list of files, starting in the given block number.static java.lang.StringgetFiletype(int filetype)Return the filetype of this file.bytegetFiletype(java.lang.String filetype)Get the numerical filetype.java.lang.String[]getFiletypes()Returns a list of possible file types.java.lang.StringgetFormat()Identify the operating system format of this disk.intgetFreeBlocks()Return the number of free blocks on the disk.intgetFreeSpace()Return the amount of free space in bytes.protected intgetIndexBlockData(byte[] fileData, byte[] indexBlock, int offset)Read file data from the given index block.intgetLogicalDiskNumber()Returns the logical disk number.java.lang.StringgetSuggestedFilename(java.lang.String filename)Returns a valid filename for the given filename.java.lang.StringgetSuggestedFiletype(java.lang.String filename)Returns a valid filetype for the given filename.intgetUsedBlocks()Return the number of used blocks on the disk.intgetUsedSpace()Return the amount of used space in bytes.protected ProdosVolumeDirectoryHeadergetVolumeHeader()booleanisBlockFree(byte[] data, int blockNumber)Determine if the specified block is free.booleanisBlockUsed(byte[] data, int blockNumber)Determine if the specified block is used.booleanneedsAddress(java.lang.String filetype)Indicates if this filetype requires an address component.byte[]readVolumeBitMap()Read the Volume Bit Map.voidsetBlockFree(byte[] data, int blockNumber)Set if the specified block is free.voidsetBlockUsed(byte[] data, int blockNumber)Set if the specified block is free.voidsetDiskName(java.lang.String volumeName)Set the name of the disk (volume name).voidsetFileData(FileEntry fileEntry, byte[] fileData)Writes the raw bytes into the file.protected voidsetFileData(ProdosFileEntry fileEntry, byte[] fileData)Set the data associated with the specified ProdosFileEntry into sectors on the disk.protected voidsetFileData(ProdosFileEntry fileEntry, byte[] dataFork, byte[] resourceFork)Set the data associated with the specified ProdosFileEntry into sectors on the disk.protected voidsetGEOSFileData(ProdosFileEntry fileEntry, byte[] fileData)Set the data associated with the specified ProdosFileEntry into sectors on the disk.protected voidsetGEOSSaplingData(byte[] bitmap, ProdosFileEntry fileEntry, byte[] fileData)Set the GEOS "sapling" file data.protected voidsetGEOSTreeData(byte[] bitmap, ProdosFileEntry fileEntry, byte[] fileData)Set the GEOS "tree" file data.booleansupportsDeletedFiles()Indicates if this disk format supports "deleted" files.booleansupportsDiskMap()Indicates if this FormattedDisk supports a disk map.voidwriteVolumeBitMap(byte[] data)Write the Volume Bit Map.-
Methods inherited from class com.webcodepro.applecommander.storage.FormattedDisk
getFile, getFile, getFormattedDisk, resizeDiskImage, 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, isRdosFormat, isSDK, isSHK, isUniDosFormat, isWPFormat, makeDosOrder, makeProdosOrder, readBlock, readSector, resizeDiskImage, save, saveAs, setFilename, setImageOrder, sizeToFit, testImageOrder, writeBlock, writeSector
-
-
-
-
Constructor Detail
-
ProdosFormatDisk
public ProdosFormatDisk(java.lang.String filename, ImageOrder imageOrder)Constructor for ProdosFormatDisk.- Parameters:
filename-
-
-
Method Detail
-
create
public static ProdosFormatDisk[] create(java.lang.String filename, java.lang.String diskName, ImageOrder imageOrder)
Create a ProdosFormatDisk.
-
getFormat
public java.lang.String getFormat()
Identify the operating system format of this disk.- Specified by:
getFormatin classFormattedDisk- See Also:
FormattedDisk.getFormat()
-
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 java.util.List<FileEntry> getFiles() throws DiskException
Retrieve a list of files.- Throws:
DiskException- See Also:
DirectoryEntry.getFiles()
-
getFiles
protected java.util.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:
getFreeSpacein classFormattedDisk- See Also:
FormattedDisk.getFreeSpace()
-
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:
getUsedSpacein classFormattedDisk- See Also:
FormattedDisk.getUsedSpace()
-
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 java.lang.String getDiskName()
Return the name of the disk.- Specified by:
getDiskNamein classFormattedDisk- See Also:
FormattedDisk.getDiskName()
-
setDiskName
public void setDiskName(java.lang.String volumeName)
Set the name of the disk (volume name).- Overrides:
setDiskNamein classFormattedDisk
-
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:
getBitmapDimensionsin classFormattedDisk
-
getBitmapLength
public int getBitmapLength()
Get the length of the bitmap.- Specified by:
getBitmapLengthin classFormattedDisk
-
getDiskUsage
public FormattedDisk.DiskUsage getDiskUsage()
Get the disk usage iterator.- Specified by:
getDiskUsagein classFormattedDisk
-
getBitmapLabels
public java.lang.String[] getBitmapLabels()
Get the labels to use in the bitmap.- Specified by:
getBitmapLabelsin classFormattedDisk
-
getDiskInformation
public java.util.List<FormattedDisk.DiskInformation> getDiskInformation()
Get Pascal-specific disk information.- Overrides:
getDiskInformationin 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:
getFileColumnHeadersin classFormattedDisk
-
supportsDeletedFiles
public boolean supportsDeletedFiles()
Indicates if this disk format supports "deleted" files.- Specified by:
supportsDeletedFilesin classFormattedDisk
-
canReadFileData
public boolean canReadFileData()
Indicates if this disk image can read data from a file.- Specified by:
canReadFileDatain classFormattedDisk
-
canHaveDirectories
public boolean canHaveDirectories()
Identify if this disk format is capable of having directories.- Specified by:
canHaveDirectoriesin classFormattedDisk- See Also:
FormattedDisk.canHaveDirectories()
-
canWriteFileData
public boolean canWriteFileData()
Indicates if this disk image can write data to a file.- Specified by:
canWriteFileDatain classFormattedDisk
-
canDeleteFile
public boolean canDeleteFile()
Indicates if this disk image can delete a file.- Specified by:
canDeleteFilein classFormattedDisk
-
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:
getFileDatain classFormattedDisk- See Also:
FileEntry.getFileData()
-
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 DiskFullExceptionSet the GEOS "sapling" file data.- Throws:
DiskFullException
-
setGEOSTreeData
protected void setGEOSTreeData(byte[] bitmap, ProdosFileEntry fileEntry, byte[] fileData) throws DiskFullExceptionSet the GEOS "tree" file data.- Throws:
DiskFullException
-
findFreeBlock
protected int findFreeBlock(byte[] volumeBitmap) throws DiskFullExceptionLocate 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:
formatin classFormattedDisk- See Also:
FormattedDisk.format()
-
getLogicalDiskNumber
public int getLogicalDiskNumber()
Returns the logical disk number. Returns a 0 to indicate no numbering.- Specified by:
getLogicalDiskNumberin classFormattedDisk
-
getSuggestedFilename
public java.lang.String getSuggestedFilename(java.lang.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:
getSuggestedFilenamein 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:
getSuggestedFiletypein classFormattedDisk
-
getFiletype
public static java.lang.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(java.lang.String filetype)
Get the numerical filetype.
-
findFileType
public static com.webcodepro.applecommander.storage.os.prodos.ProdosFormatDisk.ProdosFileType findFileType(java.lang.String filetype)
Locate the associated ProdosFileType.
-
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:
getFiletypesin classFormattedDisk
-
needsAddress
public boolean needsAddress(java.lang.String filetype)
Indicates if this filetype requires an address component.- Specified by:
needsAddressin classFormattedDisk
-
canCompile
public boolean canCompile(java.lang.String filetype)
Indicates if this filetype can be compiled.
-
supportsDiskMap
public boolean supportsDiskMap()
Indicates if this FormattedDisk supports a disk map.- Overrides:
supportsDiskMapin classFormattedDisk
-
changeImageOrder
public void changeImageOrder(ImageOrder imageOrder)
Change to a different ImageOrder. Remains in ProDOS format but the underlying order can change.- Specified by:
changeImageOrderin classFormattedDisk- 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:
setFileDatain classFormattedDisk- Throws:
DiskFullException
-
getVolumeHeader
protected ProdosVolumeDirectoryHeader getVolumeHeader()
-
createDirectory
public DirectoryEntry createDirectory(java.lang.String name) throws DiskFullException
Create a new DirectoryEntry.- Throws:
DiskFullException- See Also:
DirectoryEntry.createDirectory(String)
-
createDirectory
public DirectoryEntry createDirectory(ProdosCommonDirectoryHeader directory, java.lang.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:
getDiskGeometryin classFormattedDisk
-
-