Added UniDosFormatDisk - which is essentially a DOS disk except that

the physical disk supports two logical disks. Added a logical disk number
which returns 0 when there are no logical disks or the specific logical
disk number if they exist. Currently, only UniDosFormatDisk does this.
In the future, Pascal disk may support this and possibly ProDOS disks
that have sections set aside (ie, a Pascal partition) - if they exist in the
real world.
This commit is contained in:
Robert Greene 2002-12-14 05:45:08 +00:00
parent 8460989781
commit 6a59567b16
6 changed files with 132 additions and 0 deletions

View File

@ -474,4 +474,11 @@ public class DosFormatDisk extends FormattedDisk {
+ ") combination.");
}
}
/**
* Returns the logical disk number. Returns a 0 to indicate no numbering.
*/
public int getLogicalDiskNumber() {
return 0;
}
}

View File

@ -322,4 +322,12 @@ public abstract class FormattedDisk extends Disk {
}
}
}
/**
* Returns the logical disk number. This can be used to identify
* between disks when a format supports multiple logical volumes.
* If a value of 0 is returned, there is not multiple logical
* volumes to distinguish.
*/
public abstract int getLogicalDiskNumber();
}

View File

@ -417,4 +417,10 @@ public class PascalFormatDisk extends FormattedDisk {
writeDirectory(directory);
}
/**
* Returns the logical disk number. Returns a 0 to indicate no numbering.
*/
public int getLogicalDiskNumber() {
return 0;
}
}

View File

@ -487,4 +487,10 @@ public class ProdosFormatDisk extends FormattedDisk {
writeVolumeBitMap(bitmap);
}
/**
* Returns the logical disk number. Returns a 0 to indicate no numbering.
*/
public int getLogicalDiskNumber() {
return 0;
}
}

View File

@ -391,4 +391,10 @@ public class RdosFormatDisk extends FormattedDisk {
writeRdosBlock(13, data);
}
/**
* Returns the logical disk number. Returns a 0 to indicate no numbering.
*/
public int getLogicalDiskNumber() {
return 0;
}
}

View File

@ -0,0 +1,99 @@
/*
* AppleCommander - An Apple ][ image utility.
* Copyright (C) 2002 by Robert Greene
* robgreene at users.sourceforge.net
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package com.webcodepro.applecommander.storage;
/**
* Manages a disk that is in UniDOS format.
* This is basically DOS 3.3 except that the disk has two volumes of
* each 400K.
* <br>
* Created on Dec 13, 2002.
* @author Rob
*/
public class UniDosFormatDisk extends DosFormatDisk {
/**
* Use this indicator to work with logical disk #1.
* It is essentially the offset into the disk image.
*/
public static final int UNIDOS_DISK_1 = 0;
/**
* Use this indicator to work with logical disk #2.
* It is essentially the offset into the disk image.
*/
public static final int UNIDOS_DISK_2 = 409600;
/**
* Indicates which logical disk to work with (by offset
* into the disk image itself).
*/
private int logicalOffset;
/**
* Constructor for UniDosFormatDisk.
* @param filename
* @param diskImage
*/
public UniDosFormatDisk(String filename, byte[] diskImage, int logicalOffset) {
super(filename, diskImage);
this.logicalOffset = logicalOffset;
}
/**
* Constructor for UniDosFormatDisk.
* @param filename
*/
public UniDosFormatDisk(String filename, int logicalOffset) {
super(filename);
this.logicalOffset = logicalOffset;
}
/**
* Answer with the name of this disk.
* @see com.webcodepro.applecommander.storage.FormattedDisk#getDiskName()
*/
public String getDiskName() {
if (logicalOffset == UNIDOS_DISK_1) {
return super.getDiskName() + " (Disk 1)";
} else if (logicalOffset == UNIDOS_DISK_2) {
return super.getDiskName() + " (Disk 2)";
} else {
return super.getDiskName();
}
}
/**
* Modify the disk offset by the logical disk offset. This allows
* simple support for two DOS volumes on a UniDOS disk.
* @see com.webcodepro.applecommander.storage.Disk#getOffset(int, int)
*/
protected int getOffset(int track, int sector) throws IllegalArgumentException {
return super.getOffset(track, sector) + logicalOffset;
}
/**
* Returns the logical disk number. This can be used to identify
* between disks when a format supports multiple logical volumes.
*/
public int getLogicalDiskNumber() {
if (logicalOffset == UNIDOS_DISK_1) {
return 1;
} else if (logicalOffset == UNIDOS_DISK_2) {
return 2;
} else {
return 0;
}
}
}