mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
1774 lines
95 KiB
C#
1774 lines
95 KiB
C#
// /***************************************************************************
|
|
// The Disc Image Chef
|
|
// ----------------------------------------------------------------------------
|
|
//
|
|
// Filename : Headers.cs
|
|
// Author(s) : Natalia Portillo <claunia@claunia.com>
|
|
//
|
|
// Component : Device structures decoders.
|
|
//
|
|
// --[ Description ] ----------------------------------------------------------
|
|
//
|
|
// Prettifies SCSI MODE headers.
|
|
//
|
|
// --[ License ] --------------------------------------------------------------
|
|
//
|
|
// This library is free software; you can redistribute it and/or modify
|
|
// it under the terms of the GNU Lesser General Public License as
|
|
// published by the Free Software Foundation; either version 2.1 of the
|
|
// License, or (at your option) any later version.
|
|
//
|
|
// This library 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
|
|
// Lesser General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU Lesser General Public
|
|
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
|
//
|
|
// ----------------------------------------------------------------------------
|
|
// Copyright © 2011-2018 Natalia Portillo
|
|
// ****************************************************************************/
|
|
|
|
using System.Text;
|
|
|
|
namespace DiscImageChef.Decoders.SCSI
|
|
{
|
|
public static partial class Modes
|
|
{
|
|
public static string GetMediumTypeDescription(MediumTypes type)
|
|
{
|
|
switch(type)
|
|
{
|
|
case MediumTypes.ECMA54:
|
|
return
|
|
"ECMA-54: 200 mm Flexible Disk Cartridge using Two-Frequency Recording at 13262 ftprad on One Side";
|
|
case MediumTypes.ECMA59:
|
|
return
|
|
"ECMA-59 & ANSI X3.121-1984: 200 mm Flexible Disk Cartridge using Two-Frequency Recording at 13262 ftprad on Both Sides";
|
|
case MediumTypes.ECMA69:
|
|
return "ECMA-69: 200 mm Flexible Disk Cartridge using MFM Recording at 13262 ftprad on Both Sides";
|
|
case MediumTypes.ECMA66:
|
|
return
|
|
"ECMA-66: 130 mm Flexible Disk Cartridge using Two-Frequency Recording at 7958 ftprad on One Side";
|
|
case MediumTypes.ECMA70:
|
|
return
|
|
"ECMA-70 & ANSI X3.125-1985: 130 mm Flexible Disk Cartridge using MFM Recording at 7958 ftprad on Both Sides; 1,9 Tracks per mm";
|
|
case MediumTypes.ECMA78:
|
|
return
|
|
"ECMA-78 & ANSI X3.126-1986: 130 mm Flexible Disk Cartridge using MFM Recording at 7958 ftprad on Both Sides; 3,8 Tracks per mm";
|
|
case MediumTypes.ECMA99:
|
|
return
|
|
"ECMA-99 & ISO 8630-1985: 130 mm Flexible Disk Cartridge using MFM Recording at 13262 ftprad on Both Sides; 3,8 Tracks per mm";
|
|
case MediumTypes.ECMA100:
|
|
return
|
|
"ECMA-100 & ANSI X3.137: 90 mm Flexible Disk Cartridge using MFM Recording at 7859 ftprad on Both Sides; 5,3 Tracks per mm";
|
|
// Most probably they will never appear, but magneto-opticals use these codes
|
|
/*
|
|
case MediumTypes.Unspecified_SS:
|
|
return "Unspecified single sided flexible disk";
|
|
case MediumTypes.Unspecified_DS:
|
|
return "Unspecified double sided flexible disk";
|
|
*/
|
|
case MediumTypes.X3_73: return "ANSI X3.73-1980: 200 mm, 6631 ftprad, 1,9 Tracks per mm, 1 side";
|
|
case MediumTypes.X3_73_DS: return "ANSI X3.73-1980: 200 mm, 6631 ftprad, 1,9 Tracks per mm, 2 sides";
|
|
case MediumTypes.X3_82: return "ANSI X3.80-1980: 130 mm, 3979 ftprad, 1,9 Tracks per mm, 1 side";
|
|
case MediumTypes.Type3Floppy:
|
|
return "3.5-inch, 135 tpi, 12362 bits/radian, double-sided MFM (aka 1.25Mb)";
|
|
case MediumTypes.HDFloppy: return "3.5-inch, 135 tpi, 15916 bits/radian, double-sided MFM (aka 1.44Mb)";
|
|
case MediumTypes.ReadOnly: return "a Read-only optical";
|
|
case MediumTypes.WORM: return "a Write-once Read-many optical";
|
|
case MediumTypes.Erasable: return "a Erasable optical";
|
|
case MediumTypes.RO_WORM: return "a combination of read-only and write-once optical";
|
|
// These magneto-opticals were never manufactured
|
|
/*
|
|
case MediumTypes.RO_RW:
|
|
return "a combination of read-only and erasable optical";
|
|
break;
|
|
case MediumTypes.WORM_RW:
|
|
return "a combination of write-once and erasable optical";
|
|
*/
|
|
case MediumTypes.DOW: return "a direct-overwrite optical";
|
|
default: return $"Unknown medium type 0x{(byte)type:X2}";
|
|
}
|
|
}
|
|
|
|
public static string PrettifyModeHeader(ModeHeader? header, PeripheralDeviceTypes deviceType)
|
|
{
|
|
if(!header.HasValue) return null;
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
sb.AppendLine("SCSI Mode Sense Header:");
|
|
|
|
switch(deviceType)
|
|
{
|
|
#region Direct access device mode header
|
|
case PeripheralDeviceTypes.DirectAccess:
|
|
{
|
|
if(header.Value.MediumType != MediumTypes.Default)
|
|
sb.AppendFormat("\tMedium is {0}", GetMediumTypeDescription(header.Value.MediumType))
|
|
.AppendLine();
|
|
|
|
if(header.Value.WriteProtected) sb.AppendLine("\tMedium is write protected");
|
|
|
|
if(header.Value.DPOFUA) sb.AppendLine("\tDrive supports DPO and FUA bits");
|
|
|
|
if(header.Value.BlockDescriptors != null)
|
|
foreach(BlockDescriptor descriptor in header.Value.BlockDescriptors)
|
|
{
|
|
string density = "";
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Default: break;
|
|
case DensityType.Flux7958:
|
|
density = "7958 flux transitions per radian";
|
|
break;
|
|
case DensityType.Flux13262:
|
|
density = "13262 flux transitions per radian";
|
|
break;
|
|
case DensityType.Flux15916:
|
|
density = "15916 flux transitions per radian";
|
|
break;
|
|
default:
|
|
density = $"with unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
|
|
if(density != "")
|
|
if(descriptor.Blocks == 0)
|
|
sb.AppendFormat("\tAll remaining blocks have {0} and are {1} bytes each", density,
|
|
descriptor.BlockLength).AppendLine();
|
|
else
|
|
sb.AppendFormat("\t{0} blocks have {1} and are {2} bytes each", descriptor.Blocks,
|
|
density, descriptor.BlockLength).AppendLine();
|
|
else
|
|
if(descriptor.Blocks == 0)
|
|
sb.AppendFormat("\tAll remaining blocks are {0} bytes each", descriptor.BlockLength)
|
|
.AppendLine();
|
|
else
|
|
sb.AppendFormat("\t{0} blocks are {1} bytes each", descriptor.Blocks,
|
|
descriptor.BlockLength).AppendLine();
|
|
}
|
|
|
|
break;
|
|
}
|
|
#endregion Direct access device mode header
|
|
|
|
#region Sequential access device mode header
|
|
case PeripheralDeviceTypes.SequentialAccess:
|
|
{
|
|
switch(header.Value.BufferedMode)
|
|
{
|
|
case 0:
|
|
sb.AppendLine("\tDevice writes directly to media");
|
|
break;
|
|
case 1:
|
|
sb.AppendLine("\tDevice uses a write cache");
|
|
break;
|
|
case 2:
|
|
sb.AppendLine("\tDevice uses a write cache but doesn't return until cache is flushed");
|
|
break;
|
|
default:
|
|
sb.AppendFormat("\tUnknown buffered mode code 0x{0:X2}", header.Value.BufferedMode)
|
|
.AppendLine();
|
|
break;
|
|
}
|
|
|
|
if(header.Value.Speed == 0) sb.AppendLine("\tDevice uses default speed");
|
|
else sb.AppendFormat("\tDevice uses speed {0}", header.Value.Speed).AppendLine();
|
|
|
|
if(header.Value.WriteProtected) sb.AppendLine("\tMedium is write protected");
|
|
|
|
string medium;
|
|
|
|
switch(header.Value.MediumType)
|
|
{
|
|
case MediumTypes.Default:
|
|
medium = "undefined";
|
|
break;
|
|
case MediumTypes.Tape12:
|
|
medium = "6,3 mm tape with 12 tracks at 394 ftpmm or DC-9250";
|
|
break;
|
|
case MediumTypes.Tape24:
|
|
medium = "6,3 mm tape with 24 tracks at 394 ftpmm or MLR1-26GBSL";
|
|
break;
|
|
case MediumTypes.LTOWORM:
|
|
medium = "LTO Ultrium WORM or cleaning cartridge";
|
|
break;
|
|
case MediumTypes.LTO:
|
|
medium = "LTO Ultrium";
|
|
break;
|
|
case MediumTypes.LTO2:
|
|
medium = "LTO Ultrium-2";
|
|
break;
|
|
case MediumTypes.DC2900SL:
|
|
medium = "DC-2900SL";
|
|
break;
|
|
case MediumTypes.MLR1:
|
|
medium = "MLR1-26GB or DDS-3";
|
|
break;
|
|
case MediumTypes.DC9200:
|
|
medium = "DC-9200 or DDS-4";
|
|
break;
|
|
case MediumTypes.DAT72:
|
|
medium = "DAT-72";
|
|
break;
|
|
case MediumTypes.LTO3:
|
|
medium = "LTO Ultrium-3";
|
|
break;
|
|
case MediumTypes.LTO3WORM:
|
|
medium = "LTO Ultrium-3 WORM";
|
|
break;
|
|
case MediumTypes.DDSCleaning:
|
|
medium = "DDS cleaning cartridge";
|
|
break;
|
|
case MediumTypes.SLR32:
|
|
medium = "SLR-32";
|
|
break;
|
|
case MediumTypes.SLRtape50:
|
|
medium = "SLRtape-50";
|
|
break;
|
|
case MediumTypes.LTO4:
|
|
medium = "LTO Ultrium-4";
|
|
break;
|
|
case MediumTypes.LTO4WORM:
|
|
medium = "LTO Ultrium-4 WORM";
|
|
break;
|
|
case MediumTypes.SLRtape50SL:
|
|
medium = "SLRtape-50 SL";
|
|
break;
|
|
case MediumTypes.SLR32SL:
|
|
medium = "SLR-32SL";
|
|
break;
|
|
case MediumTypes.SLR5:
|
|
medium = "SLR-5";
|
|
break;
|
|
case MediumTypes.SLR5SL:
|
|
medium = "SLR-5SL";
|
|
break;
|
|
case MediumTypes.LTO5:
|
|
medium = "LTO Ultrium-5";
|
|
break;
|
|
case MediumTypes.LTO5WORM:
|
|
medium = "LTO Ultrium-5 WORM";
|
|
break;
|
|
case MediumTypes.SLRtape7:
|
|
medium = "SLRtape-7";
|
|
break;
|
|
case MediumTypes.SLRtape7SL:
|
|
medium = "SLRtape-7 SL";
|
|
break;
|
|
case MediumTypes.SLRtape24:
|
|
medium = "SLRtape-24";
|
|
break;
|
|
case MediumTypes.SLRtape24SL:
|
|
medium = "SLRtape-24 SL";
|
|
break;
|
|
case MediumTypes.LTO6:
|
|
medium = "LTO Ultrium-6";
|
|
break;
|
|
case MediumTypes.LTO6WORM:
|
|
medium = "LTO Ultrium-6 WORM";
|
|
break;
|
|
case MediumTypes.SLRtape140:
|
|
medium = "SLRtape-140";
|
|
break;
|
|
case MediumTypes.SLRtape40:
|
|
medium = "SLRtape-40";
|
|
break;
|
|
case MediumTypes.SLRtape60:
|
|
medium = "SLRtape-60 or SLRtape-75";
|
|
break;
|
|
case MediumTypes.SLRtape100:
|
|
medium = "SLRtape-100";
|
|
break;
|
|
case MediumTypes.SLR40_60_100:
|
|
medium = "SLR-40, SLR-60 or SLR-100";
|
|
break;
|
|
case MediumTypes.LTO7:
|
|
medium = "LTO Ultrium-7";
|
|
break;
|
|
case MediumTypes.LTO7WORM:
|
|
medium = "LTO Ultrium-7 WORM";
|
|
break;
|
|
case MediumTypes.LTOCD:
|
|
medium = "LTO Ultrium";
|
|
break;
|
|
case MediumTypes.Exatape15m:
|
|
medium = "Exatape 15m, IBM MagStar or VXA";
|
|
break;
|
|
case MediumTypes.CT1:
|
|
medium = "CompactTape I, Exatape 28m, CompactTape II, VXA-2 or VXA-3";
|
|
break;
|
|
case MediumTypes.Exatape54m:
|
|
medium = "Exatape 54m or DLTtape III";
|
|
break;
|
|
case MediumTypes.Exatape80m:
|
|
medium = "Exatape 80m or DLTtape IIIxt";
|
|
break;
|
|
case MediumTypes.Exatape106m:
|
|
medium = "Exatape 106m, DLTtape IV or Travan 5";
|
|
break;
|
|
case MediumTypes.Exatape106mXL:
|
|
medium = "Exatape 160m XL or Super DLTtape I";
|
|
break;
|
|
case MediumTypes.SDLT2:
|
|
medium = "Super DLTtape II";
|
|
break;
|
|
case MediumTypes.VStapeI:
|
|
medium = "VStape I";
|
|
break;
|
|
case MediumTypes.DLTtapeS4:
|
|
medium = "DLTtape S4";
|
|
break;
|
|
case MediumTypes.Travan7:
|
|
medium = "Travan 7";
|
|
break;
|
|
case MediumTypes.Exatape22m:
|
|
medium = "Exatape 22m";
|
|
break;
|
|
case MediumTypes.Exatape40m:
|
|
medium = "Exatape 40m";
|
|
break;
|
|
case MediumTypes.Exatape76m:
|
|
medium = "Exatape 76m";
|
|
break;
|
|
case MediumTypes.Exatape112m:
|
|
medium = "Exatape 112m";
|
|
break;
|
|
case MediumTypes.Exatape22mAME:
|
|
medium = "Exatape 22m AME";
|
|
break;
|
|
case MediumTypes.Exatape170m:
|
|
medium = "Exatape 170m";
|
|
break;
|
|
case MediumTypes.Exatape125m:
|
|
medium = "Exatape 125m";
|
|
break;
|
|
case MediumTypes.Exatape45m:
|
|
medium = "Exatape 45m";
|
|
break;
|
|
case MediumTypes.Exatape225m:
|
|
medium = "Exatape 225m";
|
|
break;
|
|
case MediumTypes.Exatape150m:
|
|
medium = "Exatape 150m";
|
|
break;
|
|
case MediumTypes.Exatape75m:
|
|
medium = "Exatape 75m";
|
|
break;
|
|
default:
|
|
medium = $"unknown medium type 0x{(byte)header.Value.MediumType:X2}";
|
|
break;
|
|
}
|
|
|
|
sb.AppendFormat("\tMedium is {0}", medium).AppendLine();
|
|
|
|
if(header.Value.BlockDescriptors != null)
|
|
foreach(BlockDescriptor descriptor in header.Value.BlockDescriptors)
|
|
{
|
|
string density = "";
|
|
switch(header.Value.MediumType)
|
|
{
|
|
case MediumTypes.Default:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Default: break;
|
|
case DensityType.ECMA62:
|
|
density =
|
|
"ECMA-62 & ANSI X3.22-1983: 12,7 mm 9-Track Magnetic Tape, 32 ftpmm, NRZI, 32 cpmm";
|
|
break;
|
|
case DensityType.ECMA62_Phase:
|
|
density =
|
|
"ECMA-62 & ANSI X3.39-1986: 12,7 mm 9-Track Magnetic Tape, 126 ftpmm, Phase Encoding, 63 cpmm";
|
|
break;
|
|
case DensityType.ECMA62_GCR:
|
|
density =
|
|
"ECMA-62 & ANSI X3.54-1986: 12,7 mm 9-Track Magnetic Tape, 356 ftpmm, NRZI, 245 cpmm GCR";
|
|
break;
|
|
case DensityType.ECMA79:
|
|
density =
|
|
"ECMA-79 & ANSI X3.116-1986: 6,30 mm Magnetic Tape Cartridge, 252 ftpmm, MFM";
|
|
break;
|
|
case DensityType.IBM3480:
|
|
density =
|
|
"Draft ECMA & ANSI X3B5/87-099: 12,7 mm 18-Track Magnetic Tape Cartridge, 1944 ftpmm, IFM, GCR (IBM 3480, 3490, 3490E)";
|
|
break;
|
|
case DensityType.ECMA46:
|
|
density =
|
|
"ECMA-46 & ANSI X3.56-1986: 6,30 mm Magnetic Tape Cartridge, Phase Encoding, 63 bpmm";
|
|
break;
|
|
case DensityType.ECMA98:
|
|
density = "ECMA-98: 6,30 mm Magnetic Tape Cartridge, NRZI, 394 ftpmm";
|
|
break;
|
|
case DensityType.X3_136:
|
|
density =
|
|
"ANXI X3.136-1986: 6,3 mm 4 or 9-Track Magnetic Tape Cartridge, 315 bpmm, GCR (QIC-24)";
|
|
break;
|
|
case DensityType.X3_157:
|
|
density =
|
|
"ANXI X3.157-1987: 12,7 mm 9-Track Magnetic Tape, 126 bpmm, Phase Encoding";
|
|
break;
|
|
case DensityType.X3_158:
|
|
density =
|
|
"ANXI X3.158-1987: 3,81 mm 4-Track Magnetic Tape Cassette, 315 bpmm, GCR";
|
|
break;
|
|
case DensityType.X3B5_86:
|
|
density =
|
|
"ANXI X3B5/86-199: 12,7 mm 22-Track Magnetic Tape Cartridge, 262 bpmm, MFM";
|
|
break;
|
|
case DensityType.HiTC1:
|
|
density = "HI-TC1: 12,7 mm 24-Track Magnetic Tape Cartridge, 500 bpmm, GCR";
|
|
break;
|
|
case DensityType.HiTC2:
|
|
density = "HI-TC2: 12,7 mm 24-Track Magnetic Tape Cartridge, 999 bpmm, GCR";
|
|
break;
|
|
case DensityType.QIC120:
|
|
density = "QIC-120: 6,3 mm 15-Track Magnetic Tape Cartridge, 394 bpmm, GCR";
|
|
break;
|
|
case DensityType.QIC150:
|
|
density = "QIC-150: 6,3 mm 18-Track Magnetic Tape Cartridge, 394 bpmm, GCR";
|
|
break;
|
|
case DensityType.QIC320:
|
|
density = "QIC-320: 6,3 mm 26-Track Magnetic Tape Cartridge, 630 bpmm, GCR";
|
|
break;
|
|
case DensityType.QIC1350:
|
|
density =
|
|
"QIC-1350: 6,3 mm 30-Track Magnetic Tape Cartridge, 2034 bpmm, RLL";
|
|
break;
|
|
case DensityType.X3B5_88:
|
|
density =
|
|
"ANXI X3B5/88-185A: 3,81 mm Magnetic Tape Cassette, 2400 bpmm, DDS";
|
|
break;
|
|
case DensityType.X3_202:
|
|
density = "ANXI X3.202-1991: 8 mm Magnetic Tape Cassette, 1703 bpmm, RLL";
|
|
break;
|
|
case DensityType.ECMA_TC17:
|
|
density = "ECMA TC17: 8 mm Magnetic Tape Cassette, 1789 bpmm, RLL";
|
|
break;
|
|
case DensityType.X3_193:
|
|
density =
|
|
"ANXI X3.193-1990: 12,7 mm 48-Track Magnetic Tape Cartridge, 394 bpmm, MFM";
|
|
break;
|
|
case DensityType.X3B5_91:
|
|
density =
|
|
"ANXI X3B5/97-174: 12,7 mm 48-Track Magnetic Tape Cartridge, 1673 bpmm, MFM";
|
|
break;
|
|
case DensityType.QIC11:
|
|
density = "QIC-11";
|
|
break;
|
|
case DensityType.IBM3490E:
|
|
density = "IBM 3490E";
|
|
break;
|
|
case DensityType.LTO1:
|
|
//case DensityType.SAIT1:
|
|
density = "LTO Ultrium or Super AIT-1";
|
|
break;
|
|
case DensityType.LTO2Old:
|
|
density = "LTO Ultrium-2";
|
|
break;
|
|
case DensityType.LTO2:
|
|
//case DensityType.T9840:
|
|
density = "LTO Ultrium-2 or T9840";
|
|
break;
|
|
case DensityType.T9940:
|
|
density = "T9940";
|
|
break;
|
|
case DensityType.LTO3:
|
|
//case DensityType.T9940:
|
|
density = "LTO Ultrium-3 or T9940";
|
|
break;
|
|
case DensityType.T9840C:
|
|
density = "T9840C";
|
|
break;
|
|
case DensityType.LTO4:
|
|
//case DensityType.T9840D:
|
|
density = "LTO Ultrium-4 or T9840D";
|
|
break;
|
|
case DensityType.T10000A:
|
|
density = "T10000A";
|
|
break;
|
|
case DensityType.T10000B:
|
|
density = "T10000B";
|
|
break;
|
|
case DensityType.T10000C:
|
|
density = "T10000C";
|
|
break;
|
|
case DensityType.T10000D:
|
|
density = "T10000D";
|
|
break;
|
|
case DensityType.AIT1:
|
|
density = "AIT-1";
|
|
break;
|
|
case DensityType.AIT2:
|
|
density = "AIT-2";
|
|
break;
|
|
case DensityType.AIT3:
|
|
density = "AIT-3";
|
|
break;
|
|
case DensityType.DDS2:
|
|
density = "DDS-2";
|
|
break;
|
|
case DensityType.DDS3:
|
|
density = "DDS-3";
|
|
break;
|
|
case DensityType.DDS4:
|
|
density = "DDS-4";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.LTOWORM:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Default:
|
|
density = "LTO Ultrium cleaning cartridge";
|
|
break;
|
|
case DensityType.LTO3:
|
|
density = "LTO Ultrium-3 WORM";
|
|
break;
|
|
case DensityType.LTO4:
|
|
density = "LTO Ultrium-4 WORM";
|
|
break;
|
|
case DensityType.LTO5:
|
|
density = "LTO Ultrium-5 WORM";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.LTO:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.LTO1:
|
|
density = "LTO Ultrium";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.LTO2:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.LTO2:
|
|
density = "LTO Ultrium-2";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.DDS3:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Default:
|
|
density = "MLR1-26GB";
|
|
break;
|
|
case DensityType.DDS3:
|
|
density = "DDS-3";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.DDS4:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Default:
|
|
density = "DC-9200";
|
|
break;
|
|
case DensityType.DDS4:
|
|
density = "DDS-4";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.DAT72:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.DAT72:
|
|
density = "DAT-72";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.LTO3:
|
|
case MediumTypes.LTO3WORM:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.LTO3:
|
|
density = "LTO Ultrium-3";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.DDSCleaning:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Default:
|
|
density = "DDS cleaning cartridge";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.LTO4:
|
|
case MediumTypes.LTO4WORM:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.LTO4:
|
|
density = "LTO Ultrium-4";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.LTO5:
|
|
case MediumTypes.LTO5WORM:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.LTO5:
|
|
density = "LTO Ultrium-5";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.LTO6:
|
|
case MediumTypes.LTO6WORM:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.LTO6:
|
|
density = "LTO Ultrium-6";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.LTO7:
|
|
case MediumTypes.LTO7WORM:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.LTO7:
|
|
density = "LTO Ultrium-7";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.LTOCD:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.LTO2:
|
|
density = "LTO Ultrium-2 in CD emulation mode";
|
|
break;
|
|
case DensityType.LTO3:
|
|
density = "LTO Ultrium-3 in CD emulation mode";
|
|
break;
|
|
case DensityType.LTO4:
|
|
density = "LTO Ultrium-4 in CD emulation mode";
|
|
break;
|
|
case DensityType.LTO5:
|
|
density = "LTO Ultrium-5 in CD emulation mode";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.Exatape15m:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Ex8200:
|
|
density = "EXB-8200";
|
|
break;
|
|
case DensityType.Ex8200c:
|
|
density = "EXB-8200 compressed";
|
|
break;
|
|
case DensityType.Ex8500:
|
|
density = "EXB-8500";
|
|
break;
|
|
case DensityType.Ex8500c:
|
|
density = "EXB-8500 compressed";
|
|
break;
|
|
case DensityType.Mammoth:
|
|
density = "Mammoth";
|
|
break;
|
|
case DensityType.IBM3590:
|
|
density = "IBM 3590";
|
|
break;
|
|
case DensityType.IBM3590E:
|
|
density = "IBM 3590E";
|
|
break;
|
|
case DensityType.VXA1:
|
|
density = "VXA-1";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.Exatape28m:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Ex8200:
|
|
density = "EXB-8200";
|
|
break;
|
|
case DensityType.Ex8200c:
|
|
density = "EXB-8200 compressed";
|
|
break;
|
|
case DensityType.Ex8500:
|
|
density = "EXB-8500";
|
|
break;
|
|
case DensityType.Ex8500c:
|
|
density = "EXB-8500 compressed";
|
|
break;
|
|
case DensityType.Mammoth:
|
|
density = "Mammoth";
|
|
break;
|
|
case DensityType.CT1:
|
|
density = "CompactTape I";
|
|
break;
|
|
case DensityType.CT2:
|
|
density = "CompactTape II";
|
|
break;
|
|
case DensityType.IBM3590:
|
|
density = "IBM 3590 extended";
|
|
break;
|
|
case DensityType.IBM3590E:
|
|
density = "IBM 3590E extended";
|
|
break;
|
|
case DensityType.VXA2:
|
|
density = "VXA-2";
|
|
break;
|
|
case DensityType.VXA3:
|
|
density = "VXA-3";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.Exatape54m:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Ex8200:
|
|
density = "EXB-8200";
|
|
break;
|
|
case DensityType.Ex8200c:
|
|
density = "EXB-8200 compressed";
|
|
break;
|
|
case DensityType.Ex8500:
|
|
density = "EXB-8500";
|
|
break;
|
|
case DensityType.Ex8500c:
|
|
density = "EXB-8500 compressed";
|
|
break;
|
|
case DensityType.Mammoth:
|
|
density = "Mammoth";
|
|
break;
|
|
case DensityType.DLT3_42k:
|
|
density = "DLTtape III at 42500 bpi";
|
|
break;
|
|
case DensityType.DLT3_56t:
|
|
density = "DLTtape III with 56 tracks";
|
|
break;
|
|
case DensityType.DLT3_62k:
|
|
case DensityType.DLT3_62kAlt:
|
|
density = "DLTtape III at 62500 bpi";
|
|
break;
|
|
case DensityType.DLT3c:
|
|
density = "DLTtape III compressed";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.Exatape80m:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Ex8200:
|
|
density = "EXB-8200";
|
|
break;
|
|
case DensityType.Ex8200c:
|
|
density = "EXB-8200 compressed";
|
|
break;
|
|
case DensityType.Ex8500:
|
|
density = "EXB-8500";
|
|
break;
|
|
case DensityType.Ex8500c:
|
|
density = "EXB-8500 compressed";
|
|
break;
|
|
case DensityType.Mammoth:
|
|
density = "Mammoth";
|
|
break;
|
|
case DensityType.DLT3_62k:
|
|
case DensityType.DLT3_62kAlt:
|
|
density = "DLTtape IIIxt";
|
|
break;
|
|
case DensityType.DLT3c:
|
|
density = "DLTtape IIIxt compressed";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.Exatape106m:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Ex8200:
|
|
density = "EXB-8200";
|
|
break;
|
|
case DensityType.Ex8200c:
|
|
density = "EXB-8200 compressed";
|
|
break;
|
|
case DensityType.Ex8500:
|
|
density = "EXB-8500";
|
|
break;
|
|
case DensityType.Ex8500c:
|
|
density = "EXB-8500 compressed";
|
|
break;
|
|
case DensityType.Mammoth:
|
|
density = "Mammoth";
|
|
break;
|
|
case DensityType.DLT4:
|
|
case DensityType.DLT4Alt:
|
|
density = "DLTtape IV";
|
|
break;
|
|
case DensityType.DLT4_123k:
|
|
case DensityType.DLT4_123kAlt:
|
|
density = "DLTtape IV at 123090 bpi";
|
|
break;
|
|
case DensityType.DLT4_98k:
|
|
density = "DLTtape IV at 98250 bpi";
|
|
break;
|
|
case DensityType.Travan5:
|
|
density = "Travan 5";
|
|
break;
|
|
case DensityType.DLT4c:
|
|
density = "DLTtape IV compressed";
|
|
break;
|
|
case DensityType.DLT4_85k:
|
|
density = "DLTtape IV at 85937 bpi";
|
|
break;
|
|
case DensityType.DLT4c_85k:
|
|
density = "DLTtape IV at 85937 bpi compressed";
|
|
break;
|
|
case DensityType.DLT4c_123k:
|
|
density = "DLTtape IV at 123090 bpi compressed";
|
|
break;
|
|
case DensityType.DLT4c_98k:
|
|
density = "DLTtape IV at 98250 bpi compressed";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.Exatape106mXL:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Ex8200:
|
|
density = "EXB-8200";
|
|
break;
|
|
case DensityType.Ex8200c:
|
|
density = "EXB-8200 compressed";
|
|
break;
|
|
case DensityType.Ex8500:
|
|
density = "EXB-8500";
|
|
break;
|
|
case DensityType.Ex8500c:
|
|
density = "EXB-8500 compressed";
|
|
break;
|
|
case DensityType.Mammoth:
|
|
density = "Mammoth";
|
|
break;
|
|
case DensityType.SDLT1_133k:
|
|
case DensityType.SDLT1_133kAlt:
|
|
density = "Super DLTtape I at 133000 bpi";
|
|
break;
|
|
case DensityType.SDLT1:
|
|
//case DensityType.SDLT1Alt:
|
|
density = "Super DLTtape I";
|
|
break;
|
|
case DensityType.SDLT1c:
|
|
density = "Super DLTtape I compressed";
|
|
break;
|
|
/*case DensityType.SDLT1_133kAlt:
|
|
density = "Super DLTtape I at 133000 bpi compressed";
|
|
break;*/
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.SDLT2:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.SDLT2:
|
|
density = "Super DLTtape II";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.VStapeI:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.VStape1:
|
|
case DensityType.VStape1Alt:
|
|
density = "VStape I";
|
|
break;
|
|
case DensityType.VStape1c:
|
|
density = "VStape I compressed";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.DLTtapeS4:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.DLTS4:
|
|
density = "DLTtape S4";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.Exatape22m:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Ex8200:
|
|
density = "EXB-8200";
|
|
break;
|
|
case DensityType.Ex8200c:
|
|
density = "EXB-8200 compressed";
|
|
break;
|
|
case DensityType.Ex8500:
|
|
density = "EXB-8500";
|
|
break;
|
|
case DensityType.Ex8500c:
|
|
density = "EXB-8500 compressed";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.Exatape40m:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Ex8200:
|
|
density = "EXB-8200";
|
|
break;
|
|
case DensityType.Ex8200c:
|
|
density = "EXB-8200 compressed";
|
|
break;
|
|
case DensityType.Ex8500:
|
|
density = "EXB-8500";
|
|
break;
|
|
case DensityType.Ex8500c:
|
|
density = "EXB-8500 compressed";
|
|
break;
|
|
case DensityType.Mammoth:
|
|
density = "Mammoth";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.Exatape76m:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Ex8200:
|
|
density = "EXB-8200";
|
|
break;
|
|
case DensityType.Ex8200c:
|
|
density = "EXB-8200 compressed";
|
|
break;
|
|
case DensityType.Ex8500:
|
|
density = "EXB-8500";
|
|
break;
|
|
case DensityType.Ex8500c:
|
|
density = "EXB-8500 compressed";
|
|
break;
|
|
case DensityType.Mammoth:
|
|
density = "Mammoth";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.Exatape112m:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Ex8200:
|
|
density = "EXB-8200";
|
|
break;
|
|
case DensityType.Ex8200c:
|
|
density = "EXB-8200 compressed";
|
|
break;
|
|
case DensityType.Ex8500:
|
|
density = "EXB-8500";
|
|
break;
|
|
case DensityType.Ex8500c:
|
|
density = "EXB-8500 compressed";
|
|
break;
|
|
case DensityType.Mammoth:
|
|
density = "Mammoth";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.Exatape22mAME:
|
|
case MediumTypes.Exatape170m:
|
|
case MediumTypes.Exatape125m:
|
|
case MediumTypes.Exatape45m:
|
|
case MediumTypes.Exatape225m:
|
|
case MediumTypes.Exatape150m:
|
|
case MediumTypes.Exatape75m:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Mammoth:
|
|
density = "Mammoth";
|
|
break;
|
|
case DensityType.Mammoth2:
|
|
density = "Mammoth-2";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.DC2900SL:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Default:
|
|
density = "DC-2900SL";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.DC9250:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Default:
|
|
density = "DC-9250";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.SLR32:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Default:
|
|
density = "SLR-32";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.MLR1SL:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Default:
|
|
density = "MRL1-26GBSL";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.SLRtape50:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Default:
|
|
density = "SLRtape-50";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.SLRtape50SL:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Default:
|
|
density = "SLRtape-50 SL";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.SLR32SL:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Default:
|
|
density = "SLR-32 SL";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.SLR5:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Default:
|
|
density = "SLR-5";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.SLR5SL:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Default:
|
|
density = "SLR-5 SL";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.SLRtape7:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Default:
|
|
density = "SLRtape-7";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.SLRtape7SL:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Default:
|
|
density = "SLRtape-7 SL";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.SLRtape24:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Default:
|
|
density = "SLRtape-24";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.SLRtape24SL:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Default:
|
|
density = "SLRtape-24 SL";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.SLRtape140:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Default:
|
|
density = "SLRtape-140";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.SLRtape40:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Default:
|
|
density = "SLRtape-40";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.SLRtape60:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Default:
|
|
density = "SLRtape-60 or SLRtape-75";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.SLRtape100:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Default:
|
|
density = "SLRtape-100";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case MediumTypes.SLR40_60_100:
|
|
{
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Default:
|
|
density = "SLR40, SLR60 or SLR100";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
|
|
if(density != "")
|
|
if(descriptor.Blocks == 0)
|
|
if(descriptor.BlockLength == 0)
|
|
sb
|
|
.AppendFormat("\tAll remaining blocks conform to {0} and have a variable length",
|
|
density).AppendLine();
|
|
else
|
|
sb.AppendFormat("\tAll remaining blocks conform to {0} and are {1} bytes each",
|
|
density, descriptor.BlockLength).AppendLine();
|
|
else
|
|
if(descriptor.BlockLength == 0)
|
|
sb.AppendFormat("\t{0} blocks conform to {1} and have a variable length",
|
|
descriptor.Blocks, density).AppendLine();
|
|
else
|
|
sb.AppendFormat("\t{0} blocks conform to {1} and are {2} bytes each",
|
|
descriptor.Blocks, density, descriptor.BlockLength)
|
|
.AppendLine();
|
|
else
|
|
if(descriptor.Blocks == 0)
|
|
if(descriptor.BlockLength == 0)
|
|
sb.AppendFormat("\tAll remaining blocks have a variable length").AppendLine();
|
|
else
|
|
sb.AppendFormat("\tAll remaining blocks are {0} bytes each",
|
|
descriptor.BlockLength).AppendLine();
|
|
else
|
|
if(descriptor.BlockLength == 0)
|
|
sb.AppendFormat("\t{0} blocks have a variable length", descriptor.Blocks)
|
|
.AppendLine();
|
|
else
|
|
sb.AppendFormat("\t{0} blocks are {1} bytes each", descriptor.Blocks,
|
|
descriptor.BlockLength).AppendLine();
|
|
}
|
|
|
|
break;
|
|
}
|
|
#endregion Sequential access device mode header
|
|
|
|
#region Printer device mode header
|
|
case PeripheralDeviceTypes.PrinterDevice:
|
|
{
|
|
switch(header.Value.BufferedMode)
|
|
{
|
|
case 0:
|
|
sb.AppendLine("\tDevice prints directly");
|
|
break;
|
|
case 1:
|
|
sb.AppendLine("\tDevice uses a print cache");
|
|
break;
|
|
default:
|
|
sb.AppendFormat("\tUnknown buffered mode code 0x{0:X2}", header.Value.BufferedMode)
|
|
.AppendLine();
|
|
break;
|
|
}
|
|
|
|
break;
|
|
}
|
|
#endregion Printer device mode header
|
|
|
|
#region Optical device mode header
|
|
case PeripheralDeviceTypes.OpticalDevice:
|
|
{
|
|
if(header.Value.MediumType != MediumTypes.Default)
|
|
{
|
|
sb.Append("\tMedium is ");
|
|
|
|
switch(header.Value.MediumType)
|
|
{
|
|
case MediumTypes.ReadOnly:
|
|
sb.AppendLine("a Read-only optical");
|
|
break;
|
|
case MediumTypes.WORM:
|
|
sb.AppendLine("a Write-once Read-many optical");
|
|
break;
|
|
case MediumTypes.Erasable:
|
|
sb.AppendLine("a Erasable optical");
|
|
break;
|
|
case MediumTypes.RO_WORM:
|
|
sb.AppendLine("a combination of read-only and write-once optical");
|
|
break;
|
|
case MediumTypes.RO_RW:
|
|
sb.AppendLine("a combination of read-only and erasable optical");
|
|
break;
|
|
case MediumTypes.WORM_RW:
|
|
sb.AppendLine("a combination of write-once and erasable optical");
|
|
break;
|
|
case MediumTypes.DOW:
|
|
sb.AppendLine("a direct-overwrite optical");
|
|
break;
|
|
default:
|
|
sb.AppendFormat("an unknown medium type 0x{0:X2}", header.Value.MediumType)
|
|
.AppendLine();
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(header.Value.WriteProtected) sb.AppendLine("\tMedium is write protected");
|
|
if(header.Value.EBC) sb.AppendLine("\tBlank checking during write is enabled");
|
|
if(header.Value.DPOFUA) sb.AppendLine("\tDrive supports DPO and FUA bits");
|
|
|
|
if(header.Value.BlockDescriptors != null)
|
|
foreach(BlockDescriptor descriptor in header.Value.BlockDescriptors)
|
|
{
|
|
string density = "";
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Default: break;
|
|
case DensityType.ISO10090:
|
|
density =
|
|
"ISO/IEC 10090: 86 mm Read/Write single-sided optical disc with 12500 tracks";
|
|
break;
|
|
case DensityType.D581:
|
|
density = "89 mm Read/Write double-sided optical disc with 12500 tracks";
|
|
break;
|
|
case DensityType.X3_212:
|
|
density =
|
|
"ANSI X3.212: 130 mm Read/Write double-sided optical disc with 18750 tracks";
|
|
break;
|
|
case DensityType.X3_191:
|
|
density =
|
|
"ANSI X3.191: 130 mm Write-Once double-sided optical disc with 30000 tracks";
|
|
break;
|
|
case DensityType.X3_214:
|
|
density =
|
|
"ANSI X3.214: 130 mm Write-Once double-sided optical disc with 20000 tracks";
|
|
break;
|
|
case DensityType.X3_211:
|
|
density =
|
|
"ANSI X3.211: 130 mm Write-Once double-sided optical disc with 18750 tracks";
|
|
break;
|
|
case DensityType.D407:
|
|
density = "200 mm optical disc";
|
|
break;
|
|
case DensityType.ISO13614:
|
|
density = "ISO/IEC 13614: 300 mm double-sided optical disc";
|
|
break;
|
|
case DensityType.X3_200:
|
|
density = "ANSI X3.200: 356 mm double-sided optical disc with 56350 tracks";
|
|
break;
|
|
default:
|
|
density = $"unknown density code 0x{(byte)descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
|
|
if(density != "")
|
|
if(descriptor.Blocks == 0)
|
|
if(descriptor.BlockLength == 0)
|
|
sb.AppendFormat("\tAll remaining blocks are {0} and have a variable length",
|
|
density).AppendLine();
|
|
else
|
|
sb.AppendFormat("\tAll remaining blocks are {0} and are {1} bytes each",
|
|
density, descriptor.BlockLength).AppendLine();
|
|
else
|
|
if(descriptor.BlockLength == 0)
|
|
sb.AppendFormat("\t{0} blocks are {1} and have a variable length",
|
|
descriptor.Blocks, density).AppendLine();
|
|
else
|
|
sb.AppendFormat("\t{0} blocks are {1} and are {2} bytes each",
|
|
descriptor.Blocks, density, descriptor.BlockLength)
|
|
.AppendLine();
|
|
else
|
|
if(descriptor.Blocks == 0)
|
|
if(descriptor.BlockLength == 0)
|
|
sb.AppendFormat("\tAll remaining blocks have a variable length").AppendLine();
|
|
else
|
|
sb.AppendFormat("\tAll remaining blocks are {0} bytes each",
|
|
descriptor.BlockLength).AppendLine();
|
|
else
|
|
if(descriptor.BlockLength == 0)
|
|
sb.AppendFormat("\t{0} blocks have a variable length", descriptor.Blocks)
|
|
.AppendLine();
|
|
else
|
|
sb.AppendFormat("\t{0} blocks are {1} bytes each", descriptor.Blocks,
|
|
descriptor.BlockLength).AppendLine();
|
|
}
|
|
|
|
break;
|
|
}
|
|
#endregion Optical device mode header
|
|
|
|
#region Multimedia device mode header
|
|
case PeripheralDeviceTypes.MultiMediaDevice:
|
|
{
|
|
sb.Append("\tMedium is ");
|
|
|
|
switch(header.Value.MediumType)
|
|
{
|
|
case MediumTypes.CDROM:
|
|
sb.AppendLine("120 mm CD-ROM");
|
|
break;
|
|
case MediumTypes.CDDA:
|
|
sb.AppendLine("120 mm Compact Disc Digital Audio");
|
|
break;
|
|
case MediumTypes.MixedCD:
|
|
sb.AppendLine("120 mm Compact Disc with data and audio");
|
|
break;
|
|
case MediumTypes.CDROM_80:
|
|
sb.AppendLine("80 mm CD-ROM");
|
|
break;
|
|
case MediumTypes.CDDA_80:
|
|
sb.AppendLine("80 mm Compact Disc Digital Audio");
|
|
break;
|
|
case MediumTypes.MixedCD_80:
|
|
sb.AppendLine("80 mm Compact Disc with data and audio");
|
|
break;
|
|
case MediumTypes.Unknown_CD:
|
|
sb.AppendLine("Unknown medium type");
|
|
break;
|
|
case MediumTypes.HybridCD:
|
|
sb.AppendLine("120 mm Hybrid disc (Photo CD)");
|
|
break;
|
|
case MediumTypes.Unknown_CDR:
|
|
sb.AppendLine("Unknown size CD-R");
|
|
break;
|
|
case MediumTypes.CDR:
|
|
sb.AppendLine("120 mm CD-R with data only");
|
|
break;
|
|
case MediumTypes.CDR_DA:
|
|
sb.AppendLine("120 mm CD-R with audio only");
|
|
break;
|
|
case MediumTypes.CDR_Mixed:
|
|
sb.AppendLine("120 mm CD-R with data and audio");
|
|
break;
|
|
case MediumTypes.HybridCDR:
|
|
sb.AppendLine("120 mm Hybrid CD-R (Photo CD)");
|
|
break;
|
|
case MediumTypes.CDR_80:
|
|
sb.AppendLine("80 mm CD-R with data only");
|
|
break;
|
|
case MediumTypes.CDR_DA_80:
|
|
sb.AppendLine("80 mm CD-R with audio only");
|
|
break;
|
|
case MediumTypes.CDR_Mixed_80:
|
|
sb.AppendLine("80 mm CD-R with data and audio");
|
|
break;
|
|
case MediumTypes.HybridCDR_80:
|
|
sb.AppendLine("80 mm Hybrid CD-R (Photo CD)");
|
|
break;
|
|
case MediumTypes.Unknown_CDRW:
|
|
sb.AppendLine("Unknown size CD-RW");
|
|
break;
|
|
case MediumTypes.CDRW:
|
|
sb.AppendLine("120 mm CD-RW with data only");
|
|
break;
|
|
case MediumTypes.CDRW_DA:
|
|
sb.AppendLine("120 mm CD-RW with audio only");
|
|
break;
|
|
case MediumTypes.CDRW_Mixed:
|
|
sb.AppendLine("120 mm CD-RW with data and audio");
|
|
break;
|
|
case MediumTypes.HybridCDRW:
|
|
sb.AppendLine("120 mm Hybrid CD-RW (Photo CD)");
|
|
break;
|
|
case MediumTypes.CDRW_80:
|
|
sb.AppendLine("80 mm CD-RW with data only");
|
|
break;
|
|
case MediumTypes.CDRW_DA_80:
|
|
sb.AppendLine("80 mm CD-RW with audio only");
|
|
break;
|
|
case MediumTypes.CDRW_Mixed_80:
|
|
sb.AppendLine("80 mm CD-RW with data and audio");
|
|
break;
|
|
case MediumTypes.HybridCDRW_80:
|
|
sb.AppendLine("80 mm Hybrid CD-RW (Photo CD)");
|
|
break;
|
|
case MediumTypes.Unknown_HD:
|
|
sb.AppendLine("Unknown size HD disc");
|
|
break;
|
|
case MediumTypes.HD:
|
|
sb.AppendLine("120 mm HD disc");
|
|
break;
|
|
case MediumTypes.HD_80:
|
|
sb.AppendLine("80 mm HD disc");
|
|
break;
|
|
case MediumTypes.NoDisc:
|
|
sb.AppendLine("No disc inserted, tray closed or caddy inserted");
|
|
break;
|
|
case MediumTypes.TrayOpen:
|
|
sb.AppendLine("Tray open or no caddy inserted");
|
|
break;
|
|
case MediumTypes.MediumError:
|
|
sb.AppendLine("Tray closed or caddy inserted but medium error");
|
|
break;
|
|
case MediumTypes.UnknownBlockDevice:
|
|
sb.AppendLine("Unknown block device");
|
|
break;
|
|
case MediumTypes.ReadOnlyBlockDevice:
|
|
sb.AppendLine("Read-only block device");
|
|
break;
|
|
case MediumTypes.ReadWriteBlockDevice:
|
|
sb.AppendLine("Read/Write block device");
|
|
break;
|
|
case MediumTypes.LTOCD:
|
|
sb.AppendLine("LTO in CD-ROM emulation mode");
|
|
break;
|
|
default:
|
|
sb.AppendFormat("Unknown medium type 0x{0:X2}", header.Value.MediumType).AppendLine();
|
|
break;
|
|
}
|
|
|
|
if(header.Value.WriteProtected) sb.AppendLine("\tMedium is write protected");
|
|
|
|
if(header.Value.DPOFUA) sb.AppendLine("\tDrive supports DPO and FUA bits");
|
|
|
|
if(header.Value.BlockDescriptors != null)
|
|
foreach(BlockDescriptor descriptor in header.Value.BlockDescriptors)
|
|
{
|
|
string density = "";
|
|
switch(descriptor.Density)
|
|
{
|
|
case DensityType.Default: break;
|
|
case DensityType.User:
|
|
density = "user data only";
|
|
break;
|
|
case DensityType.UserAuxiliary:
|
|
density = "user data plus auxiliary data";
|
|
break;
|
|
case DensityType.UserAuxiliaryTag:
|
|
density = "4-byte tag, user data plus auxiliary data";
|
|
break;
|
|
case DensityType.Audio:
|
|
density = "audio information only";
|
|
break;
|
|
case DensityType.LTO2:
|
|
density = "LTO Ultrium-2";
|
|
break;
|
|
case DensityType.LTO3:
|
|
density = "LTO Ultrium-3";
|
|
break;
|
|
case DensityType.LTO4:
|
|
density = "LTO Ultrium-4";
|
|
break;
|
|
case DensityType.LTO5:
|
|
density = "LTO Ultrium-5";
|
|
break;
|
|
default:
|
|
density = $"with unknown density code 0x{descriptor.Density:X2}";
|
|
break;
|
|
}
|
|
|
|
if(density != "")
|
|
if(descriptor.Blocks == 0)
|
|
sb.AppendFormat("\tAll remaining blocks have {0} and are {1} bytes each", density,
|
|
descriptor.BlockLength).AppendLine();
|
|
else
|
|
sb.AppendFormat("\t{0} blocks have {1} and are {2} bytes each", descriptor.Blocks,
|
|
density, descriptor.BlockLength).AppendLine();
|
|
else
|
|
if(descriptor.Blocks == 0)
|
|
sb.AppendFormat("\tAll remaining blocks are {0} bytes each", descriptor.BlockLength)
|
|
.AppendLine();
|
|
else
|
|
sb.AppendFormat("\t{0} blocks are {1} bytes each", descriptor.Blocks,
|
|
descriptor.BlockLength).AppendLine();
|
|
}
|
|
|
|
break;
|
|
}
|
|
#endregion Multimedia device mode header
|
|
}
|
|
|
|
return sb.ToString();
|
|
}
|
|
}
|
|
} |