AppleCommander/src/com/webcodepro/applecommander/storage/UniDosFormatDisk.java
Robert Greene 6a59567b16 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.
2002-12-14 05:45:08 +00:00

100 lines
3.0 KiB
Java

/*
* 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;
}
}
}