diff --git a/DiscImageChef.CommonTypes/ChangeLog b/DiscImageChef.CommonTypes/ChangeLog index 6dfb8846e..f490b109e 100644 --- a/DiscImageChef.CommonTypes/ChangeLog +++ b/DiscImageChef.CommonTypes/ChangeLog @@ -1,3 +1,8 @@ +2015-12-31 Natalia Portillo + + * DiskType.cs: + Added Acorn Archimedes and Commodore 15xx floppies. + 2015-12-03 Natalia Portillo * DiskType.cs: diff --git a/DiscImageChef.CommonTypes/DiskType.cs b/DiscImageChef.CommonTypes/DiskType.cs index 2a27177d2..0403712c3 100644 --- a/DiscImageChef.CommonTypes/DiskType.cs +++ b/DiscImageChef.CommonTypes/DiskType.cs @@ -294,6 +294,8 @@ namespace DiscImageChef.CommonTypes ACORN_525_SS_DD_80, /// 5,25", DS, DD, 80 tracks, 16 spt, 256 bytes/sector, MFM ACORN_525_DS_DD, + /// 3,5", DS, DD, 80 tracks, 10 spt, 512 bytes/sector, MFM + ACORN_35_DS_DD, // Atari standard floppy formats /// 5,25", SS, SD, 40 tracks, 18 spt, 128 bytes/sector, FM @@ -304,12 +306,14 @@ namespace DiscImageChef.CommonTypes ATARI_525_DD, // Commodore standard floppy formats - /// 3,5", DS, DD, 80 tracks, 10 spt, 512 bytes/sector, MFM + /// 3,5", DS, DD, 80 tracks, 10 spt, 512 bytes/sector, MFM (1581) CBM_35_DD, /// 3,5", DS, DD, 80 tracks, 11 spt, 512 bytes/sector, MFM (Amiga) CBM_AMIGA_35_DD, /// 3,5", DS, HD, 80 tracks, 22 spt, 512 bytes/sector, MFM (Amiga) CBM_AMIGA_35_HD, + /// 5,25", SS, DD, 35 tracks, GCR + CBM_1540, // NEC standard floppy formats /// 8", SS, SD, 77 tracks, 26 spt, 128 bytes/sector, FM @@ -378,9 +382,9 @@ namespace DiscImageChef.CommonTypes FDFORMAT_525_DD, /// 5,25", DS, HD, 82 tracks, 17 spt, 512 bytes/sector, MFM FDFORMAT_525_HD, - /// 5,25", DS, DD, 82 tracks, 10 spt, 512 bytes/sector, MFM + /// 3,5", DS, DD, 82 tracks, 10 spt, 512 bytes/sector, MFM FDFORMAT_35_DD, - /// 5,25", DS, HD, 82 tracks, 21 spt, 512 bytes/sector, MFM + /// 3,5", DS, HD, 82 tracks, 21 spt, 512 bytes/sector, MFM FDFORMAT_35_HD, // Generic hard disks diff --git a/DiscImageChef.DiscImages/ChangeLog b/DiscImageChef.DiscImages/ChangeLog index 60edbe009..d5039ebca 100644 --- a/DiscImageChef.DiscImages/ChangeLog +++ b/DiscImageChef.DiscImages/ChangeLog @@ -1,3 +1,9 @@ +2015-12-31 Natalia Portillo + + * ImagePlugin.cs: + Added DiskTag for PCMCIA CIS and SecureDigital/MMC CID, CSD + and extended CSD. + 2015-12-25 Natalia Portillo * GDI.cs: diff --git a/DiscImageChef.DiscImages/ImagePlugin.cs b/DiscImageChef.DiscImages/ImagePlugin.cs index 12bc092e1..20d500cbf 100644 --- a/DiscImageChef.DiscImages/ImagePlugin.cs +++ b/DiscImageChef.DiscImages/ImagePlugin.cs @@ -662,7 +662,15 @@ namespace DiscImageChef.ImagePlugins /// ATA IDENTIFY DEVICE response ATA_IDENTIFY, /// ATA IDENTIFY PACKET DEVICE response - ATAPI_IDENTIFY + ATAPI_IDENTIFY, + /// PCMCIA/CardBus Card Information Structure + PCMCIA_CIS, + /// SecureDigital / MMC CID + SD_CID, + /// SecureDigital / MMC CSD + SD_CSD, + /// SecureDigital Extended CSD + SD_ExtendedCSD }; /// diff --git a/DiscImageChef.Metadata/ChangeLog b/DiscImageChef.Metadata/ChangeLog index 3945b4e8c..a235b6ae9 100644 --- a/DiscImageChef.Metadata/ChangeLog +++ b/DiscImageChef.Metadata/ChangeLog @@ -1,3 +1,8 @@ +2015-12-31 Natalia Portillo + + * DiskType.cs: + Added known floppies and magneto-opticals. + 2015-12-13 Natalia Portillo * DiskType.cs: diff --git a/DiscImageChef.Metadata/DiskType.cs b/DiscImageChef.Metadata/DiskType.cs index d3a35e523..b78cbf519 100644 --- a/DiscImageChef.Metadata/DiskType.cs +++ b/DiscImageChef.Metadata/DiskType.cs @@ -341,6 +341,297 @@ namespace DiscImageChef.Metadata DiscType = "BD"; DiscSubType = "Xbox One Game Disc (XGD4)"; break; + case DiscImageChef.CommonTypes.DiskType.Apple32SS: + DiscType = "5.25\" floppy"; + DiscSubType = "Apple DOS 3.2"; + break; + case DiscImageChef.CommonTypes.DiskType.Apple32DS: + DiscType = "5.25\" floppy"; + DiscSubType = "Apple DOS 3.2 (double-sided)"; + break; + case DiscImageChef.CommonTypes.DiskType.Apple33SS: + DiscType = "5.25\" floppy"; + DiscSubType = "Apple DOS 3.3"; + break; + case DiscImageChef.CommonTypes.DiskType.Apple33DS: + DiscType = "5.25\" floppy"; + DiscSubType = "Apple DOS 3.3 (double-sided)"; + break; + case DiscImageChef.CommonTypes.DiskType.AppleSonySS: + DiscType = "3.5\" floppy"; + DiscSubType = "Apple 400K"; + break; + case DiscImageChef.CommonTypes.DiskType.AppleSonyDS: + DiscType = "3.5\" floppy"; + DiscSubType = "Apple 800K"; + break; + case DiscImageChef.CommonTypes.DiskType.AppleFileWare: + DiscType = "5.25\" floppy"; + DiscSubType = "Apple FileWare"; + break; + case DiscImageChef.CommonTypes.DiskType.DOS_525_SS_DD_8: + DiscType = "5.25\" floppy"; + DiscSubType = "IBM double-density, single-sided, 8 sectors"; + break; + case DiscImageChef.CommonTypes.DiskType.DOS_525_SS_DD_9: + DiscType = "5.25\" floppy"; + DiscSubType = "IBM double-density, single-sided, 9 sectors"; + break; + case DiscImageChef.CommonTypes.DiskType.DOS_525_DS_DD_8: + DiscType = "5.25\" floppy"; + DiscSubType = "IBM double-density, double-sided, 8 sectors"; + break; + case DiscImageChef.CommonTypes.DiskType.DOS_525_DS_DD_9: + DiscType = "5.25\" floppy"; + DiscSubType = "IBM double-density, double-sided, 9 sectors"; + break; + case DiscImageChef.CommonTypes.DiskType.DOS_525_HD: + DiscType = "5.25\" floppy"; + DiscSubType = "IBM high-density"; + break; + case DiscImageChef.CommonTypes.DiskType.DOS_35_SS_DD_8: + DiscType = "3.5\" floppy"; + DiscSubType = "IBM double-density, single-sided, 8 sectors"; + break; + case DiscImageChef.CommonTypes.DiskType.DOS_35_SS_DD_9: + DiscType = "3.5\" floppy"; + DiscSubType = "IBM double-density, single-sided, 9 sectors"; + break; + case DiscImageChef.CommonTypes.DiskType.DOS_35_DS_DD_8: + DiscType = "3.5\" floppy"; + DiscSubType = "IBM double-density, double-sided, 8 sectors"; + break; + case DiscImageChef.CommonTypes.DiskType.DOS_35_DS_DD_9: + DiscType = "3.5\" floppy"; + DiscSubType = "IBM double-density, double-sided, 9 sectors"; + break; + case DiscImageChef.CommonTypes.DiskType.DOS_35_HD: + DiscType = "3.5\" floppy"; + DiscSubType = "IBM high-density"; + break; + case DiscImageChef.CommonTypes.DiskType.DOS_35_ED: + DiscType = "3.5\" floppy"; + DiscSubType = "IBM extra-density"; + break; + case DiscImageChef.CommonTypes.DiskType.DMF: + DiscType = "3.5\" floppy"; + DiscSubType = "Microsoft DMF"; + break; + case DiscImageChef.CommonTypes.DiskType.DMF_82: + DiscType = "3.5\" floppy"; + DiscSubType = "Microsoft DMF (82-track)"; + break; + case DiscImageChef.CommonTypes.DiskType.XDF_35: + DiscType = "3.5\" floppy"; + DiscSubType = "IBM XDF"; + break; + case DiscImageChef.CommonTypes.DiskType.XDF_525: + DiscType = "5.25\" floppy"; + DiscSubType = "IBM XDF"; + break; + case DiscImageChef.CommonTypes.DiskType.IBM23FD: + DiscType = "8\" floppy"; + DiscSubType = "IBM 23FD"; + break; + case DiscImageChef.CommonTypes.DiskType.IBM33FD_128: + DiscType = "8\" floppy"; + DiscSubType = "IBM 33FD (128 bytes/sector)"; + break; + case DiscImageChef.CommonTypes.DiskType.IBM33FD_256: + DiscType = "8\" floppy"; + DiscSubType = "IBM 33FD (256 bytes/sector)"; + break; + case DiscImageChef.CommonTypes.DiskType.IBM33FD_512: + DiscType = "8\" floppy"; + DiscSubType = "IBM 33FD (512 bytes/sector)"; + break; + case DiscImageChef.CommonTypes.DiskType.IBM43FD_128: + DiscType = "8\" floppy"; + DiscSubType = "IBM 43FD (128 bytes/sector)"; + break; + case DiscImageChef.CommonTypes.DiskType.IBM43FD_256: + DiscType = "8\" floppy"; + DiscSubType = "IBM 43FD (256 bytes/sector)"; + break; + case DiscImageChef.CommonTypes.DiskType.IBM53FD_256: + DiscType = "8\" floppy"; + DiscSubType = "IBM 53FD (256 bytes/sector)"; + break; + case DiscImageChef.CommonTypes.DiskType.IBM53FD_512: + DiscType = "8\" floppy"; + DiscSubType = "IBM 53FD (512 bytes/sector)"; + break; + case DiscImageChef.CommonTypes.DiskType.IBM53FD_1024: + DiscType = "8\" floppy"; + DiscSubType = "IBM 53FD (1024 bytes/sector)"; + break; + case DiscImageChef.CommonTypes.DiskType.RX01: + DiscType = "8\" floppy"; + DiscSubType = "DEC RX-01"; + break; + case DiscImageChef.CommonTypes.DiskType.RX02: + DiscType = "8\" floppy"; + DiscSubType = "DEC RX-02"; + break; + case DiscImageChef.CommonTypes.DiskType.ACORN_525_SS_SD_40: + DiscType = "5.25\" floppy"; + DiscSubType = "BBC Micro 100K"; + break; + case DiscImageChef.CommonTypes.DiskType.ACORN_525_SS_SD_80: + DiscType = "5.25\" floppy"; + DiscSubType = "BBC Micro 200K"; + break; + case DiscImageChef.CommonTypes.DiskType.ACORN_525_SS_DD_40: + DiscType = "5.25\" floppy"; + DiscSubType = "Acorn S"; + break; + case DiscImageChef.CommonTypes.DiskType.ACORN_525_SS_DD_80: + DiscType = "5.25\" floppy"; + DiscSubType = "Acorn M"; + break; + case DiscImageChef.CommonTypes.DiskType.ACORN_525_DS_DD: + DiscType = "5.25\" floppy"; + DiscSubType = "Acorn L"; + break; + case DiscImageChef.CommonTypes.DiskType.ACORN_35_DS_DD: + DiscType = "3.5\" floppy"; + DiscSubType = "Acorn Archimedes"; + break; + case DiscImageChef.CommonTypes.DiskType.ATARI_525_SD: + DiscType = "5.25\" floppy"; + DiscSubType = "Atari single-density"; + break; + case DiscImageChef.CommonTypes.DiskType.ATARI_525_ED: + DiscType = "5.25\" floppy"; + DiscSubType = "Atari enhanced-density"; + break; + case DiscImageChef.CommonTypes.DiskType.ATARI_525_DD: + DiscType = "5.25\" floppy"; + DiscSubType = "Atari double-density"; + break; + case DiscImageChef.CommonTypes.DiskType.CBM_1540: + DiscType = "5.25\" floppy"; + DiscSubType = "Commodore 1540/1541"; + break; + case DiscImageChef.CommonTypes.DiskType.CBM_35_DD: + DiscType = "3.5\" floppy"; + DiscSubType = "Commodore 1581"; + break; + case DiscImageChef.CommonTypes.DiskType.CBM_AMIGA_35_DD: + DiscType = "3.5\" floppy"; + DiscSubType = "Amiga double-density"; + break; + case DiscImageChef.CommonTypes.DiskType.CBM_AMIGA_35_HD: + DiscType = "3.5\" floppy"; + DiscSubType = "Amiga high-density"; + break; + case DiscImageChef.CommonTypes.DiskType.NEC_8_SD: + DiscType = "8\" floppy"; + DiscSubType = "NEC single-sided"; + break; + case DiscImageChef.CommonTypes.DiskType.NEC_8_DD: + DiscType = "8\" floppy"; + DiscSubType = "NEC double-sided"; + break; + case DiscImageChef.CommonTypes.DiskType.NEC_525_HD: + DiscType = "5.25\" floppy"; + DiscSubType = "NEC high-density"; + break; + case DiscImageChef.CommonTypes.DiskType.NEC_35_HD_8: + DiscType = "3.5\" floppy"; + DiscSubType = "NEC high-density"; + break; + case DiscImageChef.CommonTypes.DiskType.NEC_35_HD_15: + DiscType = "3.5\" floppy"; + DiscSubType = "NEC floppy mode 3"; + break; + case DiscImageChef.CommonTypes.DiskType.SHARP_525: + DiscType = "5.25\" floppy"; + DiscSubType = "Sharp"; + break; + case DiscImageChef.CommonTypes.DiskType.SHARP_35: + DiscType = "3.5\" floppy"; + DiscSubType = "Sharp"; + break; + case DiscImageChef.CommonTypes.DiskType.ECMA_54: + DiscType = "8\" floppy"; + DiscSubType = "ECMA-54"; + break; + case DiscImageChef.CommonTypes.DiskType.ECMA_59: + DiscType = "8\" floppy"; + DiscSubType = "ECMA-59"; + break; + case DiscImageChef.CommonTypes.DiskType.ECMA_69_8: + case DiscImageChef.CommonTypes.DiskType.ECMA_69_15: + case DiscImageChef.CommonTypes.DiskType.ECMA_69_26: + DiscType = "8\" floppy"; + DiscSubType = "ECMA-69"; + break; + case DiscImageChef.CommonTypes.DiskType.ECMA_66: + DiscType = "5.25\" floppy"; + DiscSubType = "ECMA-66"; + break; + case DiscImageChef.CommonTypes.DiskType.ECMA_70: + DiscType = "5.25\" floppy"; + DiscSubType = "ECMA-70"; + break; + case DiscImageChef.CommonTypes.DiskType.ECMA_78: + case DiscImageChef.CommonTypes.DiskType.ECMA_78_2: + DiscType = "5.25\" floppy"; + DiscSubType = "ECMA-78"; + break; + case DiscImageChef.CommonTypes.DiskType.ECMA_99_8: + case DiscImageChef.CommonTypes.DiskType.ECMA_99_15: + case DiscImageChef.CommonTypes.DiskType.ECMA_99_26: + DiscType = "5.25\" floppy"; + DiscSubType = "ECMA-99"; + break; + case DiscImageChef.CommonTypes.DiskType.ECMA_100: + DiscType = "3.5\" floppy"; + DiscSubType = "ECMA-99"; + break; + case DiscImageChef.CommonTypes.DiskType.ECMA_125: + DiscType = "3.5\" floppy"; + DiscSubType = "ECMA-125"; + break; + case DiscImageChef.CommonTypes.DiskType.ECMA_147: + DiscType = "3.5\" floppy"; + DiscSubType = "ECMA-147"; + break; + case DiscImageChef.CommonTypes.DiskType.FDFORMAT_525_DD: + DiscType = "5.25\" floppy"; + DiscSubType = "FDFORMAT double-density"; + break; + case DiscImageChef.CommonTypes.DiskType.FDFORMAT_525_HD: + DiscType = "5.25\" floppy"; + DiscSubType = "FDFORMAT high-density"; + break; + case DiscImageChef.CommonTypes.DiskType.FDFORMAT_35_DD: + DiscType = "3.5\" floppy"; + DiscSubType = "FDFORMAT double-density"; + break; + case DiscImageChef.CommonTypes.DiskType.FDFORMAT_35_HD: + DiscType = "3.5\" floppy"; + DiscSubType = "FDFORMAT high-density"; + break; + case DiscImageChef.CommonTypes.DiskType.ECMA_183_512: + case DiscImageChef.CommonTypes.DiskType.ECMA_183_1024: + DiscType = "5.25\" magneto-optical"; + DiscSubType = "ECMA-183"; + break; + case DiscImageChef.CommonTypes.DiskType.ECMA_184_512: + case DiscImageChef.CommonTypes.DiskType.ECMA_184_1024: + DiscType = "5.25\" magneto-optical"; + DiscSubType = "ECMA-184"; + break; + case DiscImageChef.CommonTypes.DiskType.ECMA_154: + DiscType = "3.5\" magneto-optical"; + DiscSubType = "ECMA-154"; + break; + case DiscImageChef.CommonTypes.DiskType.ECMA_201: + DiscType = "3.5\" magneto-optical"; + DiscSubType = "ECMA-201"; + break; default: DiscType = "Unknown"; DiscSubType = "Unknown"; diff --git a/DiscImageChef/ChangeLog b/DiscImageChef/ChangeLog index 4881b2344..405d281bc 100644 --- a/DiscImageChef/ChangeLog +++ b/DiscImageChef/ChangeLog @@ -1,3 +1,8 @@ +2015-12-31 Natalia Portillo + + * Commands/CreateSidecar.cs: + Implemented most support for block media sidecars. + 2015-12-31 Natalia Portillo * Commands/DeviceInfo.cs: diff --git a/DiscImageChef/Commands/CreateSidecar.cs b/DiscImageChef/Commands/CreateSidecar.cs index 7792c3655..9bfe3d00f 100644 --- a/DiscImageChef/Commands/CreateSidecar.cs +++ b/DiscImageChef/Commands/CreateSidecar.cs @@ -1096,8 +1096,200 @@ namespace DiscImageChef.Commands } sidecar.BlockMedia[0].Sequence.MediaTitle = _imageFormat.GetImageName(); - //DiskType dskType = _imageFormat.ImageInfo.diskType; - // TODO: Complete it + foreach (DiskTagType tagType in _imageFormat.ImageInfo.readableDiskTags) + { + switch (tagType) + { + case DiskTagType.ATAPI_IDENTIFY: + sidecar.BlockMedia[0].ATA = new ATAType(); + sidecar.BlockMedia[0].ATA.Identify = new DumpType(); + sidecar.BlockMedia[0].ATA.Identify.Checksums = GetChecksums(_imageFormat.ReadDiskTag(DiskTagType.ATAPI_IDENTIFY)).ToArray(); + sidecar.BlockMedia[0].ATA.Identify.Size = _imageFormat.ReadDiskTag(DiskTagType.ATAPI_IDENTIFY).Length; + break; + case DiskTagType.ATA_IDENTIFY: + sidecar.BlockMedia[0].ATA = new ATAType(); + sidecar.BlockMedia[0].ATA.Identify = new DumpType(); + sidecar.BlockMedia[0].ATA.Identify.Checksums = GetChecksums(_imageFormat.ReadDiskTag(DiskTagType.ATA_IDENTIFY)).ToArray(); + sidecar.BlockMedia[0].ATA.Identify.Size = _imageFormat.ReadDiskTag(DiskTagType.ATA_IDENTIFY).Length; + break; + case DiskTagType.PCMCIA_CIS: + sidecar.BlockMedia[0].PCMCIA = new PCMCIAType(); + sidecar.BlockMedia[0].PCMCIA.CIS = new DumpType(); + sidecar.BlockMedia[0].PCMCIA.CIS.Checksums = GetChecksums(_imageFormat.ReadDiskTag(DiskTagType.PCMCIA_CIS)).ToArray(); + sidecar.BlockMedia[0].PCMCIA.CIS.Size = _imageFormat.ReadDiskTag(DiskTagType.PCMCIA_CIS).Length; + break; + case DiskTagType.SCSI_INQUIRY: + sidecar.BlockMedia[0].SCSI = new SCSIType(); + sidecar.BlockMedia[0].SCSI.Inquiry = new DumpType(); + sidecar.BlockMedia[0].SCSI.Inquiry.Checksums = GetChecksums(_imageFormat.ReadDiskTag(DiskTagType.SCSI_INQUIRY)).ToArray(); + sidecar.BlockMedia[0].SCSI.Inquiry.Size = _imageFormat.ReadDiskTag(DiskTagType.SCSI_INQUIRY).Length; + break; + case DiskTagType.SD_CID: + if(sidecar.BlockMedia[0].SecureDigital == null) + sidecar.BlockMedia[0].SecureDigital = new SecureDigitalType(); + sidecar.BlockMedia[0].SecureDigital.CID = new DumpType(); + sidecar.BlockMedia[0].SecureDigital.CID.Checksums = GetChecksums(_imageFormat.ReadDiskTag(DiskTagType.SD_CID)).ToArray(); + sidecar.BlockMedia[0].SecureDigital.CID.Size = _imageFormat.ReadDiskTag(DiskTagType.SD_CID).Length; + break; + case DiskTagType.SD_CSD: + if(sidecar.BlockMedia[0].SecureDigital == null) + sidecar.BlockMedia[0].SecureDigital = new SecureDigitalType(); + sidecar.BlockMedia[0].SecureDigital.CSD = new DumpType(); + sidecar.BlockMedia[0].SecureDigital.CSD.Checksums = GetChecksums(_imageFormat.ReadDiskTag(DiskTagType.SD_CSD)).ToArray(); + sidecar.BlockMedia[0].SecureDigital.CSD.Size = _imageFormat.ReadDiskTag(DiskTagType.SD_CSD).Length; + break; + case DiskTagType.SD_ExtendedCSD: + if(sidecar.BlockMedia[0].SecureDigital == null) + sidecar.BlockMedia[0].SecureDigital = new SecureDigitalType(); + sidecar.BlockMedia[0].SecureDigital.ExtendedCSD = new DumpType(); + sidecar.BlockMedia[0].SecureDigital.ExtendedCSD.Checksums = GetChecksums(_imageFormat.ReadDiskTag(DiskTagType.SD_ExtendedCSD)).ToArray(); + sidecar.BlockMedia[0].SecureDigital.ExtendedCSD.Size = _imageFormat.ReadDiskTag(DiskTagType.SD_ExtendedCSD).Length; + break; + } + } + + string dskType, dskSubType; + Metadata.DiskType.DiskTypeToString(_imageFormat.ImageInfo.diskType, out dskType, out dskSubType); + sidecar.BlockMedia[0].DiskType = dskType; + sidecar.BlockMedia[0].DiskSubType = dskSubType; + + switch(dskType) + { + case "8\" floppy": + // According to ECMA-59 et al + sidecar.BlockMedia[0].Dimensions = new DimensionsType(); + sidecar.BlockMedia[0].Dimensions.Height = 203.2; + sidecar.BlockMedia[0].Dimensions.HeightSpecified = true;; + sidecar.BlockMedia[0].Dimensions.Width = 203.2; + sidecar.BlockMedia[0].Dimensions.WidthSpecified = true;; + sidecar.BlockMedia[0].Dimensions.Thickness = 1.65; + break; + case "5.25\" floppy": + // According to ECMA-99 et al + sidecar.BlockMedia[0].Dimensions = new DimensionsType(); + sidecar.BlockMedia[0].Dimensions.Height = 133.3; + sidecar.BlockMedia[0].Dimensions.HeightSpecified = true;; + sidecar.BlockMedia[0].Dimensions.Width = 133.3; + sidecar.BlockMedia[0].Dimensions.WidthSpecified = true;; + sidecar.BlockMedia[0].Dimensions.Thickness = 1.65; + break; + case "3.5\" floppy": + // According to ECMA-100 et al + sidecar.BlockMedia[0].Dimensions = new DimensionsType(); + sidecar.BlockMedia[0].Dimensions.Height = 94; + sidecar.BlockMedia[0].Dimensions.HeightSpecified = true;; + sidecar.BlockMedia[0].Dimensions.Width = 90; + sidecar.BlockMedia[0].Dimensions.WidthSpecified = true;; + sidecar.BlockMedia[0].Dimensions.Thickness = 3.3; + break; + case "5.25\" magneto-optical": + // According to ECMA-183 et al + sidecar.BlockMedia[0].Dimensions = new DimensionsType(); + sidecar.BlockMedia[0].Dimensions.Height = 153; + sidecar.BlockMedia[0].Dimensions.HeightSpecified = true;; + sidecar.BlockMedia[0].Dimensions.Width = 135; + sidecar.BlockMedia[0].Dimensions.WidthSpecified = true;; + sidecar.BlockMedia[0].Dimensions.Thickness = 11; + break; + case "3.5\" magneto-optical": + // According to ECMA-154 et al + sidecar.BlockMedia[0].Dimensions = new DimensionsType(); + sidecar.BlockMedia[0].Dimensions.Height = 94; + sidecar.BlockMedia[0].Dimensions.HeightSpecified = true;; + sidecar.BlockMedia[0].Dimensions.Width = 90; + sidecar.BlockMedia[0].Dimensions.WidthSpecified = true;; + sidecar.BlockMedia[0].Dimensions.Thickness = 6; + break; + } + + sidecar.BlockMedia[0].LogicalBlocks = (long)_imageFormat.GetSectors(); + sidecar.BlockMedia[0].LogicalBlockSize = (int)_imageFormat.GetSectorSize(); + // TODO: Detect it + sidecar.BlockMedia[0].PhysicalBlockSize = (int)_imageFormat.GetSectorSize(); + + DicConsole.WriteLine("Checking filesystems..."); + + List partitions = new List(); + + foreach (PartPlugin _partplugin in plugins.PartPluginsList.Values) + { + List _partitions; + + if (_partplugin.GetInformation(_imageFormat, out _partitions)) + { + partitions = _partitions; + break; + } + } + + sidecar.BlockMedia[0].FileSystemInformation = new PartitionType[1]; + if (partitions.Count > 0) + { + sidecar.BlockMedia[0].FileSystemInformation = new PartitionType[partitions.Count]; + for (int i = 0; i < partitions.Count; i++) + { + sidecar.BlockMedia[0].FileSystemInformation[i] = new PartitionType(); + sidecar.BlockMedia[0].FileSystemInformation[i].Description = partitions[i].PartitionDescription; + sidecar.BlockMedia[0].FileSystemInformation[i].EndSector = (int)(partitions[i].PartitionStartSector + partitions[i].PartitionSectors - 1); + sidecar.BlockMedia[0].FileSystemInformation[i].Name = partitions[i].PartitionName; + sidecar.BlockMedia[0].FileSystemInformation[i].Sequence = (int)partitions[i].PartitionSequence; + sidecar.BlockMedia[0].FileSystemInformation[i].StartSector = (int)partitions[i].PartitionStartSector; + sidecar.BlockMedia[0].FileSystemInformation[i].Type = partitions[i].PartitionType; + + List lstFs = new List(); + + foreach (Plugin _plugin in plugins.PluginsList.Values) + { + try + { + if (_plugin.Identify(_imageFormat, partitions[i].PartitionStartSector, partitions[i].PartitionStartSector + partitions[i].PartitionSectors - 1)) + { + string foo; + _plugin.GetInformation(_imageFormat, partitions[i].PartitionStartSector, partitions[i].PartitionStartSector + partitions[i].PartitionSectors - 1, out foo); + lstFs.Add(_plugin.XmlFSType); + } + } + catch + { + //DicConsole.DebugWriteLine("Create-sidecar command", "Plugin {0} crashed", _plugin.Name); + } + } + + if (lstFs.Count > 0) + sidecar.BlockMedia[0].FileSystemInformation[i].FileSystems = lstFs.ToArray(); + } + } + else + { + sidecar.BlockMedia[0].FileSystemInformation[0] = new PartitionType(); + sidecar.BlockMedia[0].FileSystemInformation[0].StartSector = 0; + sidecar.BlockMedia[0].FileSystemInformation[0].EndSector = (int)(_imageFormat.GetSectors() - 1); + + List lstFs = new List(); + + foreach (Plugin _plugin in plugins.PluginsList.Values) + { + try + { + if (_plugin.Identify(_imageFormat, 0, _imageFormat.GetSectors() - 1)) + { + string foo; + _plugin.GetInformation(_imageFormat, 0, _imageFormat.GetSectors() - 1, out foo); + lstFs.Add(_plugin.XmlFSType); + } + } + catch + { + //DicConsole.DebugWriteLine("Create-sidecar command", "Plugin {0} crashed", _plugin.Name); + } + } + + if (lstFs.Count > 0) + sidecar.BlockMedia[0].FileSystemInformation[0].FileSystems = lstFs.ToArray(); + } + + + // TODO: Implement support for getting CHS break; } case XmlMediaType.LinearMedia: