Migrate server from ASP.NET Webforms to MVC.

This commit is contained in:
2018-12-27 23:34:14 +00:00
parent 91b76a11d8
commit 0acb82b808
32 changed files with 2570 additions and 1707 deletions

View File

@@ -1784,6 +1784,7 @@
<e p="App.config" t="Include" /> <e p="App.config" t="Include" />
<e p="App_Start" t="Include"> <e p="App_Start" t="Include">
<e p="Ata.cs" t="Include" /> <e p="Ata.cs" t="Include" />
<e p="RouteConfig.cs" t="Include" />
<e p="ScsiEvpd.cs" t="Include" /> <e p="ScsiEvpd.cs" t="Include" />
<e p="ScsiInquiry.cs" t="Include" /> <e p="ScsiInquiry.cs" t="Include" />
<e p="ScsiMmcFeatures.cs" t="Include" /> <e p="ScsiMmcFeatures.cs" t="Include" />
@@ -1794,15 +1795,13 @@
<e p="TestedMedia.cs" t="Include" /> <e p="TestedMedia.cs" t="Include" />
<e p="WebApiConfig.cs" t="Include" /> <e p="WebApiConfig.cs" t="Include" />
</e> </e>
<e p="Changelog.aspx" t="Include" />
<e p="Controllers" t="Include"> <e p="Controllers" t="Include">
<e p="HomeController.cs" t="Include" />
<e p="ReportController.cs" t="Include" />
<e p="StatsController.cs" t="Include" />
<e p="UploadReportController.cs" t="Include" /> <e p="UploadReportController.cs" t="Include" />
<e p="UploadStatsController.cs" t="Include" /> <e p="UploadStatsController.cs" t="Include" />
</e> </e>
<e p="DONATING.aspx" t="Include" />
<e p="Default.aspx" t="Include" />
<e p="Default.aspx.cs" t="Include" />
<e p="Default.aspx.designer.cs" t="Include" />
<e p="DiscImageChef.Server.csproj" t="IncludeRecursive" /> <e p="DiscImageChef.Server.csproj" t="IncludeRecursive" />
<e p="Global.asax" t="Include" /> <e p="Global.asax" t="Include" />
<e p="Global.asax.cs" t="Include" /> <e p="Global.asax.cs" t="Include" />
@@ -1844,11 +1843,13 @@
<e p="Command.cs" t="Include" /> <e p="Command.cs" t="Include" />
<e p="Context.cs" t="Include" /> <e p="Context.cs" t="Include" />
<e p="Device.cs" t="Include" /> <e p="Device.cs" t="Include" />
<e p="DeviceItem.cs" t="Include" />
<e p="DeviceStat.cs" t="Include" /> <e p="DeviceStat.cs" t="Include" />
<e p="Filesystem.cs" t="Include" /> <e p="Filesystem.cs" t="Include" />
<e p="Filter.cs" t="Include" /> <e p="Filter.cs" t="Include" />
<e p="Media.cs" t="Include" /> <e p="Media.cs" t="Include" />
<e p="MediaFormat.cs" t="Include" /> <e p="MediaFormat.cs" t="Include" />
<e p="MediaItem.cs" t="Include" />
<e p="OperatingSystem.cs" t="Include" /> <e p="OperatingSystem.cs" t="Include" />
<e p="Partition.cs" t="Include" /> <e p="Partition.cs" t="Include" />
<e p="UploadedReport.cs" t="Include" /> <e p="UploadedReport.cs" t="Include" />
@@ -1859,19 +1860,30 @@
<e p="Reports" t="Include"> <e p="Reports" t="Include">
<e p=".htaccess" t="Include" /> <e p=".htaccess" t="Include" />
</e> </e>
<e p="Statistics.aspx" t="Include" /> <e p="Views" t="Include">
<e p="Statistics.aspx.cs" t="Include" /> <e p="Home" t="Include">
<e p="Statistics.aspx.designer.cs" t="Include" /> <e p="Changelog.cshtml" t="Include" />
<e p="TODO.aspx" t="Include" /> <e p="DONATING.cshtml" t="Include" />
<e p="ViewReport.aspx" t="Include" /> <e p="Index.cshtml" t="Include" />
<e p="ViewReport.aspx.cs" t="Include" /> <e p="TODO.cshtml" t="Include" />
<e p="ViewReport.aspx.designer.cs" t="Include" /> </e>
<e p="Report" t="Include">
<e p="View.cshtml" t="Include" />
</e>
<e p="Stats" t="Include">
<e p="Index.cshtml" t="Include" />
</e>
<e p="Web.config" t="Include" />
</e>
<e p="Web.Debug.config" t="Include" /> <e p="Web.Debug.config" t="Include" />
<e p="Web.Release.config" t="Include" /> <e p="Web.Release.config" t="Include" />
<e p="Web.config" t="Include" /> <e p="Web.config" t="Include" />
<e p="bin" t="ExcludeRecursive" /> <e p="bin" t="ExcludeRecursive" />
<e p="docs" t="Include"> <e p="docs" t="Include">
<e p="Changelog.md" t="Include" />
<e p="DONATING.md" t="Include" />
<e p="README.md" t="Include" /> <e p="README.md" t="Include" />
<e p="TODO.md" t="Include" />
</e> </e>
<e p="dos.css" t="Include" /> <e p="dos.css" t="Include" />
<e p="int10h.org" t="Include"> <e p="int10h.org" t="Include">

View File

@@ -0,0 +1,16 @@
using System.Web.Mvc;
using System.Web.Routing;
namespace DiscImageChef.Server
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("Default", "{controller}/{action}/{id}",
new {controller = "Home", action = "Index", id = UrlParameter.Optional});
}
}
}

View File

@@ -1,69 +0,0 @@
<%@ Page Language="C#" %>
<%@ Register TagPrefix="velyo" Namespace="Velyo.AspNet.Markdown" Assembly="Velyo.AspNet.Markdown" %>
<%--
// /***************************************************************************
// The Disc Image Chef
// ----------------------------------------------------------------------------
//
// Filename : Changelog.aspx
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// Component : DiscImageChef Server.
//
// --[ Description ] ----------------------------------------------------------
//
// Renders Changelog.md.
//
// --[ 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
// ****************************************************************************/
--%>
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<head runat="server">
<link href="dos.css"
rel="stylesheet"
type="text/css" />
<title>DiscImageChef's TODO</title>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async
src="https://www.googletagmanager.com/gtag/js?id=UA-111466173-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'UA-111466173-1');
</script>
</head>
<body id="body"
runat="server">
<p>
<a href="Default.aspx">Return to main page.</a><br />
DiscImageChef list of changes:
</p>
<div>
<velyo:MarkdownContent ID="todo"
Path="~/docs/Changelog.md"
runat="server" />
</div>
</body>
</html>

View File

@@ -0,0 +1,80 @@
using System;
using System.IO;
using System.Reflection;
using System.Web.Hosting;
using System.Web.Mvc;
using Markdig;
namespace DiscImageChef.Server.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
StreamReader sr =
new StreamReader(Path.Combine(HostingEnvironment.MapPath("~") ?? throw new InvalidOperationException(),
"docs", "README.md"));
string mdcontent = sr.ReadToEnd();
sr.Close();
mdcontent = mdcontent.Replace(".md)", ")");
ViewBag.Markdown = Markdown.ToHtml(mdcontent);
ViewBag.lblVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString();
return View();
}
public ActionResult Changelog()
{
StreamReader sr =
new StreamReader(Path.Combine(HostingEnvironment.MapPath("~") ?? throw new InvalidOperationException(),
"docs", "Changelog.md"));
string mdcontent = sr.ReadToEnd();
sr.Close();
mdcontent = mdcontent.Replace(".md)", ")");
ViewBag.Markdown = Markdown.ToHtml(mdcontent);
ViewBag.lblVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString();
return View();
}
public ActionResult DONATING()
{
StreamReader sr =
new StreamReader(Path.Combine(HostingEnvironment.MapPath("~") ?? throw new InvalidOperationException(),
"docs", "DONATING.md"));
string mdcontent = sr.ReadToEnd();
sr.Close();
mdcontent = mdcontent.Replace(".md)", ")");
ViewBag.Markdown = Markdown.ToHtml(mdcontent);
ViewBag.lblVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString();
return View();
}
public ActionResult TODO()
{
StreamReader sr =
new StreamReader(Path.Combine(HostingEnvironment.MapPath("~") ?? throw new InvalidOperationException(),
"docs", "TODO.md"));
string mdcontent = sr.ReadToEnd();
sr.Close();
mdcontent = mdcontent.Replace(".md)", ")");
ViewBag.Markdown = Markdown.ToHtml(mdcontent);
ViewBag.lblVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString();
return View();
}
}
}

View File

@@ -1,75 +1,37 @@
// /***************************************************************************
// The Disc Image Chef
// ----------------------------------------------------------------------------
//
// Filename : ViewReport.aspx.cs
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// Component : DiscImageChef Server.
//
// --[ Description ] ----------------------------------------------------------
//
// Renders a device report.
//
// --[ 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; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Web; using System.Web.Mvc;
using System.Web.UI; using System.Web.Routing;
using DiscImageChef.CommonTypes.Metadata; using DiscImageChef.CommonTypes.Metadata;
using DiscImageChef.Decoders.PCMCIA; using DiscImageChef.Decoders.PCMCIA;
using DiscImageChef.Decoders.SCSI; using DiscImageChef.Decoders.SCSI;
using DiscImageChef.Server.Models; using DiscImageChef.Server.Models;
using Tuple = DiscImageChef.Decoders.PCMCIA.Tuple; using Tuple = DiscImageChef.Decoders.PCMCIA.Tuple;
namespace DiscImageChef.Server namespace DiscImageChef.Server.Controllers
{ {
/// <summary> public class ReportController : Controller
/// Renders the specified report from the server
/// </summary>
public partial class ViewReport : Page
{ {
protected void Page_Load(object sender, EventArgs e) public ActionResult Index()
{ {
return RedirectToAction("View", "Report", new RouteValueDictionary {{"id", 1}});
}
public ActionResult View(int? id)
{
if(id == null || id <= 0) return Content("Incorrect device report request");
try try
{ {
if(!int.TryParse(Request.QueryString["id"], out int id) || id <= 0)
{
content.InnerHtml = "<b>Incorrect device report request</b>";
return;
}
DicServerContext ctx = new DicServerContext(); DicServerContext ctx = new DicServerContext();
Device report = ctx.Devices.FirstOrDefault(d => d.Id == id); Device report = ctx.Devices.FirstOrDefault(d => d.Id == id);
if(report is null) if(report is null) return Content("Cannot find requested report");
{
content.InnerHtml = "<b>Cannot find requested report</b>";
return;
}
lblManufacturer.Text = report.Manufacturer; ViewBag.lblManufacturer = report.Manufacturer;
lblModel.Text = report.Model; ViewBag.lblModel = report.Model;
lblRevision.Text = report.Revision; ViewBag.lblRevision = report.Revision;
if(report.USB != null) if(report.USB != null)
{ {
@@ -93,33 +55,40 @@ namespace DiscImageChef.Server
usbVendorDescription = dbProduct.Vendor.Vendor; usbVendorDescription = dbProduct.Vendor.Vendor;
} }
lblUsbManufacturer.Text = HttpUtility.HtmlEncode(report.USB.Manufacturer); ViewBag.UsbItem = new Item
lblUsbProduct.Text = HttpUtility.HtmlEncode(report.USB.Product); {
lblUsbVendor.Text = $"0x{report.USB.VendorID:x4}"; Manufacturer = report.USB.Manufacturer,
if(usbVendorDescription != null) Product = report.USB.Product,
lblUsbVendorDescription.Text = $"({HttpUtility.HtmlEncode(usbVendorDescription)})"; VendorDescription =
lblUsbProductId.Text = $"0x{report.USB.ProductID:x4}"; usbVendorDescription != null
if(usbProductDescription != null) ? $"0x{report.USB.VendorID:x4} ({usbVendorDescription})"
lblUsbProductDescription.Text = $"({HttpUtility.HtmlEncode(usbProductDescription)})"; : $"0x{report.USB.VendorID:x4}",
ProductDescription = usbProductDescription != null
? $"0x{report.USB.ProductID:x4} ({usbProductDescription})"
: $"0x{report.USB.ProductID:x4}"
};
} }
else divUsb.Visible = false;
if(report.FireWire != null) if(report.FireWire != null)
{ ViewBag.FireWireItem = new Item
lblFirewireManufacturer.Text = HttpUtility.HtmlEncode(report.FireWire.Manufacturer); {
lblFirewireProduct.Text = HttpUtility.HtmlEncode(report.FireWire.Product); Manufacturer = report.FireWire.Manufacturer,
lblFirewireVendor.Text = $"0x{report.FireWire.VendorID:x8}"; Product = report.FireWire.Product,
lblFirewireProductId.Text = $"0x{report.FireWire.ProductID:x8}"; VendorDescription = $"0x{report.FireWire.VendorID:x8}",
} ProductDescription = $"0x{report.FireWire.ProductID:x8}"
else divFirewire.Visible = false; };
if(report.PCMCIA != null) if(report.PCMCIA != null)
{ {
lblPcmciaManufacturer.Text = HttpUtility.HtmlEncode(report.PCMCIA.Manufacturer); ViewBag.PcmciaItem = new PcmciaItem
lblPcmciaProduct.Text = HttpUtility.HtmlEncode(report.PCMCIA.ProductName); {
lblPcmciaManufacturerCode.Text = $"0x{report.PCMCIA.ManufacturerCode:x4}"; Manufacturer = report.PCMCIA.Manufacturer,
lblPcmciaCardCode.Text = $"0x{report.PCMCIA.CardCode:x4}"; Product = report.PCMCIA.ProductName,
lblPcmciaCompliance.Text = HttpUtility.HtmlEncode(report.PCMCIA.Compliance); VendorDescription = $"0x{report.PCMCIA.ManufacturerCode:x4}",
ProductDescription = $"0x{report.PCMCIA.CardCode:x4}",
Compliance = report.PCMCIA.Compliance
};
Tuple[] tuples = CIS.GetTuples(report.PCMCIA.CIS); Tuple[] tuples = CIS.GetTuples(report.PCMCIA.CIS);
if(tuples != null) if(tuples != null)
{ {
@@ -191,16 +160,9 @@ namespace DiscImageChef.Server
break; break;
} }
if(decodedTuples.Count > 0) if(decodedTuples.Count > 0) ViewBag.repPcmciaTuples = decodedTuples;
{
repPcmciaTuples.DataSource = decodedTuples;
repPcmciaTuples.DataBind();
}
else repPcmciaTuples.Visible = false;
} }
else repPcmciaTuples.Visible = false;
} }
else divPcmcia.Visible = false;
bool removable = true; bool removable = true;
List<TestedMedia> testedMedia = null; List<TestedMedia> testedMedia = null;
@@ -217,26 +179,27 @@ namespace DiscImageChef.Server
if(report.ATAPI != null) if(report.ATAPI != null)
{ {
lblAtapi.Text = "PI"; ViewBag.AtaItem = "ATAPI";
ataReport = report.ATAPI; ataReport = report.ATAPI;
atapi = true; atapi = true;
}
else
{
ViewBag.AtaItem = "ATA";
ataReport = report.ATA;
} }
else ataReport = report.ATA;
bool cfa = report.CompactFlash; bool cfa = report.CompactFlash;
if(atapi && !cfa) lblAtaDeviceType.Text = "ATAPI device"; if(atapi && !cfa) ViewBag.lblAtaDeviceType = "ATAPI device";
else if(!atapi && cfa) lblAtaDeviceType.Text = "CompactFlash device"; else if(!atapi && cfa) ViewBag.lblAtaDeviceType = "CompactFlash device";
else lblAtaDeviceType.Text = "ATA device"; else ViewBag.lblAtaDeviceType = "ATA device";
Ata.Report(ataReport, cfa, atapi, ref removable, ref ataOneValue, ref ataTwoValue, ref testedMedia); Ata.Report(ataReport, cfa, atapi, ref removable, ref ataOneValue, ref ataTwoValue, ref testedMedia);
repAtaOne.DataSource = ataOneValue; ViewBag.repAtaOne = ataOneValue;
repAtaOne.DataBind(); ViewBag.repAtaTwo = ataTwoValue;
repAtaTwo.DataSource = ataTwoValue;
repAtaTwo.DataBind();
} }
else divAta.Visible = false;
if(report.SCSI != null) if(report.SCSI != null)
{ {
@@ -248,11 +211,11 @@ namespace DiscImageChef.Server
if(report.SCSI.Inquiry != null) if(report.SCSI.Inquiry != null)
{ {
Inquiry.SCSIInquiry inq = report.SCSI.Inquiry.Value; Inquiry.SCSIInquiry inq = report.SCSI.Inquiry.Value;
lblScsiVendor.Text = VendorString.Prettify(vendorId) != vendorId ViewBag.lblScsiVendor = VendorString.Prettify(vendorId) != vendorId
? $"{vendorId} ({VendorString.Prettify(vendorId)})" ? $"{vendorId} ({VendorString.Prettify(vendorId)})"
: vendorId; : vendorId;
lblScsiProduct.Text = StringHandlers.CToString(inq.ProductIdentification); ViewBag.lblScsiProduct = StringHandlers.CToString(inq.ProductIdentification);
lblScsiRevision.Text = StringHandlers.CToString(inq.ProductRevisionLevel); ViewBag.lblScsiRevision = StringHandlers.CToString(inq.ProductRevisionLevel);
} }
scsiOneValue.AddRange(ScsiInquiry.Report(report.SCSI.Inquiry)); scsiOneValue.AddRange(ScsiInquiry.Report(report.SCSI.Inquiry));
@@ -269,25 +232,11 @@ namespace DiscImageChef.Server
ScsiModeSense.Report(report.SCSI.ModeSense, vendorId, devType, ref scsiOneValue, ref modePages); ScsiModeSense.Report(report.SCSI.ModeSense, vendorId, devType, ref scsiOneValue, ref modePages);
} }
if(modePages.Count > 0) if(modePages.Count > 0) ViewBag.repModeSense = modePages;
{
repModeSense.DataSource = modePages;
repModeSense.DataBind();
}
else divScsiModeSense.Visible = false;
if(report.SCSI.EVPDPages != null) ScsiEvpd.Report(report.SCSI.EVPDPages, vendorId, ref evpdPages); if(report.SCSI.EVPDPages != null) ScsiEvpd.Report(report.SCSI.EVPDPages, vendorId, ref evpdPages);
if(evpdPages.Count > 0) if(evpdPages.Count > 0) ViewBag.repEvpd = evpdPages;
{
repEvpd.DataSource = evpdPages;
repEvpd.DataBind();
}
else divScsiEvpd.Visible = false;
divScsiMmcMode.Visible = false;
divScsiMmcFeatures.Visible = false;
divScsiSsc.Visible = false;
if(report.SCSI.MultiMediaDevice != null) if(report.SCSI.MultiMediaDevice != null)
{ {
@@ -297,52 +246,34 @@ namespace DiscImageChef.Server
{ {
List<string> mmcModeOneValue = new List<string>(); List<string> mmcModeOneValue = new List<string>();
ScsiMmcMode.Report(report.SCSI.MultiMediaDevice.ModeSense2A, ref mmcModeOneValue); ScsiMmcMode.Report(report.SCSI.MultiMediaDevice.ModeSense2A, ref mmcModeOneValue);
if(mmcModeOneValue.Count > 0) if(mmcModeOneValue.Count > 0) ViewBag.repScsiMmcMode = mmcModeOneValue;
{
divScsiMmcMode.Visible = true;
repScsiMmcMode.DataSource = mmcModeOneValue;
repScsiMmcMode.DataBind();
}
} }
if(report.SCSI.MultiMediaDevice.Features != null) if(report.SCSI.MultiMediaDevice.Features != null)
{ {
List<string> mmcFeaturesOneValue = new List<string>(); List<string> mmcFeaturesOneValue = new List<string>();
ScsiMmcFeatures.Report(report.SCSI.MultiMediaDevice.Features, ref mmcFeaturesOneValue); ScsiMmcFeatures.Report(report.SCSI.MultiMediaDevice.Features, ref mmcFeaturesOneValue);
if(mmcFeaturesOneValue.Count > 0) if(mmcFeaturesOneValue.Count > 0) ViewBag.repScsiMmcFeatures = mmcFeaturesOneValue;
{
divScsiMmcFeatures.Visible = true;
repScsiMmcFeatures.DataSource = mmcFeaturesOneValue;
repScsiMmcFeatures.DataBind();
}
} }
} }
else if(report.SCSI.SequentialDevice != null) else if(report.SCSI.SequentialDevice != null)
{ {
divScsiSsc.Visible = true; ViewBag.divScsiSscVisible = true;
lblScsiSscGranularity.Text = ViewBag.lblScsiSscGranularity =
report.SCSI.SequentialDevice.BlockSizeGranularity?.ToString() ?? "Unspecified"; report.SCSI.SequentialDevice.BlockSizeGranularity?.ToString() ?? "Unspecified";
lblScsiSscMaxBlock.Text = ViewBag.lblScsiSscMaxBlock =
report.SCSI.SequentialDevice.MaxBlockLength?.ToString() ?? "Unspecified"; report.SCSI.SequentialDevice.MaxBlockLength?.ToString() ?? "Unspecified";
lblScsiSscMinBlock.Text = ViewBag.lblScsiSscMinBlock =
report.SCSI.SequentialDevice.MinBlockLength?.ToString() ?? "Unspecified"; report.SCSI.SequentialDevice.MinBlockLength?.ToString() ?? "Unspecified";
if(report.SCSI.SequentialDevice.SupportedDensities != null) if(report.SCSI.SequentialDevice.SupportedDensities != null)
{ ViewBag.repScsiSscDensities = report.SCSI.SequentialDevice.SupportedDensities;
repScsiSscDensities.DataSource = report.SCSI.SequentialDevice.SupportedDensities;
repScsiSscDensities.DataBind();
}
else repScsiSscDensities.Visible = false;
if(report.SCSI.SequentialDevice.SupportedMediaTypes != null) if(report.SCSI.SequentialDevice.SupportedMediaTypes != null)
{ ViewBag.repScsiSscMedias = report.SCSI.SequentialDevice.SupportedMediaTypes;
repScsiSscMedias.DataSource = report.SCSI.SequentialDevice.SupportedMediaTypes;
repScsiSscMedias.DataBind();
}
else repScsiSscMedias.Visible = false;
if(report.SCSI.SequentialDevice.TestedMedia != null) if(report.SCSI.SequentialDevice.TestedMedia != null)
{ {
@@ -350,13 +281,10 @@ namespace DiscImageChef.Server
SscTestedMedia.Report(report.SCSI.SequentialDevice.TestedMedia, ref mediaOneValue); SscTestedMedia.Report(report.SCSI.SequentialDevice.TestedMedia, ref mediaOneValue);
if(mediaOneValue.Count > 0) if(mediaOneValue.Count > 0)
{ {
sscMedia = true; sscMedia = true;
repTestedMedia.DataSource = mediaOneValue; ViewBag.repTestedMedia = mediaOneValue;
repTestedMedia.DataBind();
} }
else divTestedMedia.Visible = false;
} }
else divTestedMedia.Visible = false;
} }
else if(report.SCSI.ReadCapabilities != null) else if(report.SCSI.ReadCapabilities != null)
{ {
@@ -410,10 +338,8 @@ namespace DiscImageChef.Server
} }
else testedMedia = report.SCSI.RemovableMedias; else testedMedia = report.SCSI.RemovableMedias;
repScsi.DataSource = scsiOneValue; ViewBag.repScsi = scsiOneValue;
repScsi.DataBind();
} }
else divScsi.Visible = false;
if(report.MultiMediaCard != null) if(report.MultiMediaCard != null)
{ {
@@ -447,10 +373,8 @@ namespace DiscImageChef.Server
mmcOneValue.Add(""); mmcOneValue.Add("");
} }
repMMC.DataSource = mmcOneValue; ViewBag.repMMC = mmcOneValue;
repMMC.DataBind();
} }
else divMMC.Visible = false;
if(report.SecureDigital != null) if(report.SecureDigital != null)
{ {
@@ -484,32 +408,38 @@ namespace DiscImageChef.Server
sdOneValue.Add(""); sdOneValue.Add("");
} }
repSD.DataSource = sdOneValue; ViewBag.repSD = sdOneValue;
repSD.DataBind();
} }
else divSD.Visible = false;
if(removable && !sscMedia && testedMedia != null) if(removable && !sscMedia && testedMedia != null)
{ {
List<string> mediaOneValue = new List<string>(); List<string> mediaOneValue = new List<string>();
App_Start.TestedMedia.Report(testedMedia, ref mediaOneValue); App_Start.TestedMedia.Report(testedMedia, ref mediaOneValue);
if(mediaOneValue.Count > 0) if(mediaOneValue.Count > 0) ViewBag.repTestedMedia = mediaOneValue;
{
divTestedMedia.Visible = true;
repTestedMedia.DataSource = mediaOneValue;
repTestedMedia.DataBind();
}
else divTestedMedia.Visible = false;
} }
else divTestedMedia.Visible &= sscMedia;
} }
catch(Exception) catch(Exception)
{ {
content.InnerHtml = "<b>Could not load device report</b>";
#if DEBUG #if DEBUG
throw; throw;
#endif #endif
return Content("Could not load device report");
} }
return View();
} }
} }
public class Item
{
public string Manufacturer;
public string Product;
public string ProductDescription;
public string VendorDescription;
}
public class PcmciaItem : Item
{
public string Compliance;
}
} }

View File

@@ -1,8 +1,8 @@
// /*************************************************************************** // /***************************************************************************
// The Disc Image Chef // The Disc Image Chef
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// //
// Filename : Statistics.aspx.cs // Filename : StatisticsController.cs
// Author(s) : Natalia Portillo <claunia@claunia.com> // Author(s) : Natalia Portillo <claunia@claunia.com>
// //
// Component : DiscImageChef Server. // Component : DiscImageChef Server.
@@ -37,7 +37,7 @@ using System.Linq;
using System.Reflection; using System.Reflection;
using System.Threading; using System.Threading;
using System.Web.Hosting; using System.Web.Hosting;
using System.Web.UI; using System.Web.Mvc;
using System.Xml; using System.Xml;
using System.Xml.Serialization; using System.Xml.Serialization;
using DiscImageChef.CommonTypes.Interop; using DiscImageChef.CommonTypes.Interop;
@@ -47,12 +47,12 @@ using OperatingSystem = DiscImageChef.Server.Models.OperatingSystem;
using PlatformID = DiscImageChef.CommonTypes.Interop.PlatformID; using PlatformID = DiscImageChef.CommonTypes.Interop.PlatformID;
using Version = DiscImageChef.Server.Models.Version; using Version = DiscImageChef.Server.Models.Version;
namespace DiscImageChef.Server namespace DiscImageChef.Server.Controllers
{ {
/// <summary> /// <summary>
/// Renders a page with statistics, list of media type, devices, etc /// Renders a page with statistics, list of media type, devices, etc
/// </summary> /// </summary>
public partial class Statistics : Page public class StatsController : Controller
{ {
DicServerContext ctx = new DicServerContext(); DicServerContext ctx = new DicServerContext();
List<DeviceItem> devices; List<DeviceItem> devices;
@@ -61,14 +61,16 @@ namespace DiscImageChef.Server
List<NameValueStats> versions; List<NameValueStats> versions;
List<MediaItem> virtualMedia; List<MediaItem> virtualMedia;
protected void Page_Load(object sender, EventArgs e) public ActionResult Index()
{ {
lblVersion.Text = Assembly.GetExecutingAssembly().GetName().Version.ToString(); ViewBag.Version = Assembly.GetExecutingAssembly().GetName().Version.ToString();
try try
{ {
if(File.Exists(Path.Combine(HostingEnvironment.MapPath("~") ?? throw new InvalidOperationException(), if(
"Statistics", "Statistics.xml"))) System.IO.File
.Exists(Path.Combine(HostingEnvironment.MapPath("~") ?? throw new InvalidOperationException(),
"Statistics", "Statistics.xml")))
try try
{ {
Stats statistics = new Stats(); Stats statistics = new Stats();
@@ -82,8 +84,9 @@ namespace DiscImageChef.Server
StatsConverter.Convert(statistics); StatsConverter.Convert(statistics);
File.Delete(Path.Combine(HostingEnvironment.MapPath("~") ?? throw new InvalidOperationException(), System.IO.File
"Statistics", "Statistics.xml")); .Delete(Path.Combine(HostingEnvironment.MapPath("~") ?? throw new InvalidOperationException(),
"Statistics", "Statistics.xml"));
} }
catch(XmlException) catch(XmlException)
{ {
@@ -101,10 +104,8 @@ namespace DiscImageChef.Server
Value = nvs.Count Value = nvs.Count
}); });
repOperatingSystems.DataSource = operatingSystems.OrderBy(os => os.name).ToList(); ViewBag.repOperatingSystems = operatingSystems.OrderBy(os => os.name).ToList();
repOperatingSystems.DataBind();
} }
else divOperatingSystems.Visible = false;
if(ctx.Versions.Any()) if(ctx.Versions.Any())
{ {
@@ -116,76 +117,57 @@ namespace DiscImageChef.Server
Value = nvs.Count Value = nvs.Count
}); });
repVersions.DataSource = versions.OrderBy(ver => ver.name).ToList(); ViewBag.repVersions = versions.OrderBy(ver => ver.name).ToList();
repVersions.DataBind();
} }
else divVersions.Visible = false;
if(ctx.Commands.Any()) if(ctx.Commands.Any())
{ {
lblAnalyze.Text = ctx.Commands.FirstOrDefault(c => c.Name == "analyze")?.Count.ToString() ?? "0"; ViewBag.lblAnalyze = ctx.Commands.FirstOrDefault(c => c.Name == "analyze")?.Count.ToString() ?? "0";
lblCompare.Text = ctx.Commands.FirstOrDefault(c => c.Name == "compare")?.Count.ToString() ?? "0"; ViewBag.lblCompare = ctx.Commands.FirstOrDefault(c => c.Name == "compare")?.Count.ToString() ?? "0";
lblChecksum.Text = ctx.Commands.FirstOrDefault(c => c.Name == "checksum")?.Count.ToString() ?? "0"; ViewBag.lblChecksum =
lblEntropy.Text = ctx.Commands.FirstOrDefault(c => c.Name == "entropy")?.Count.ToString() ?? "0"; ctx.Commands.FirstOrDefault(c => c.Name == "checksum")?.Count.ToString() ?? "0";
lblVerify.Text = ctx.Commands.FirstOrDefault(c => c.Name == "verify")?.Count.ToString() ?? "0"; ViewBag.lblEntropy = ctx.Commands.FirstOrDefault(c => c.Name == "entropy")?.Count.ToString() ?? "0";
lblPrintHex.Text = ctx.Commands.FirstOrDefault(c => c.Name == "printhex")?.Count.ToString() ?? "0"; ViewBag.lblVerify = ctx.Commands.FirstOrDefault(c => c.Name == "verify")?.Count.ToString() ?? "0";
lblDecode.Text = ctx.Commands.FirstOrDefault(c => c.Name == "decode")?.Count.ToString() ?? "0"; ViewBag.lblPrintHex =
lblDeviceInfo.Text = ctx.Commands.FirstOrDefault(c => c.Name == "device-info")?.Count.ToString() ?? ctx.Commands.FirstOrDefault(c => c.Name == "printhex")?.Count.ToString() ?? "0";
"0"; ViewBag.lblDecode = ctx.Commands.FirstOrDefault(c => c.Name == "decode")?.Count.ToString() ?? "0";
lblMediaInfo.Text = ctx.Commands.FirstOrDefault(c => c.Name == "media-info")?.Count.ToString() ?? ViewBag.lblDeviceInfo =
"0"; ctx.Commands.FirstOrDefault(c => c.Name == "device-info")?.Count.ToString() ?? "0";
lblMediaScan.Text = ctx.Commands.FirstOrDefault(c => c.Name == "media-scan")?.Count.ToString() ?? ViewBag.lblMediaInfo = ctx.Commands.FirstOrDefault(c => c.Name == "media-info")?.Count.ToString() ??
"0"; "0";
lblFormats.Text = ctx.Commands.FirstOrDefault(c => c.Name == "formats")?.Count.ToString() ?? "0"; ViewBag.lblMediaScan = ctx.Commands.FirstOrDefault(c => c.Name == "media-scan")?.Count.ToString() ??
lblBenchmark.Text = "0";
ViewBag.lblFormats = ctx.Commands.FirstOrDefault(c => c.Name == "formats")?.Count.ToString() ?? "0";
ViewBag.lblBenchmark =
ctx.Commands.FirstOrDefault(c => c.Name == "benchmark")?.Count.ToString() ?? "0"; ctx.Commands.FirstOrDefault(c => c.Name == "benchmark")?.Count.ToString() ?? "0";
lblCreateSidecar.Text = ViewBag.lblCreateSidecar =
ctx.Commands.FirstOrDefault(c => c.Name == "create-sidecar")?.Count.ToString() ?? "0"; ctx.Commands.FirstOrDefault(c => c.Name == "create-sidecar")?.Count.ToString() ?? "0";
lblDumpMedia.Text = ctx.Commands.FirstOrDefault(c => c.Name == "dump-media")?.Count.ToString() ?? ViewBag.lblDumpMedia = ctx.Commands.FirstOrDefault(c => c.Name == "dump-media")?.Count.ToString() ??
"0"; "0";
lblDeviceReport.Text = ViewBag.lblDeviceReport =
ctx.Commands.FirstOrDefault(c => c.Name == "device-report")?.Count.ToString() ?? "0"; ctx.Commands.FirstOrDefault(c => c.Name == "device-report")?.Count.ToString() ?? "0";
lblLs.Text = ctx.Commands.FirstOrDefault(c => c.Name == "ls")?.Count.ToString() ?? "0"; ViewBag.lblLs = ctx.Commands.FirstOrDefault(c => c.Name == "ls")?.Count.ToString() ?? "0";
lblExtractFiles.Text = ViewBag.lblExtractFiles =
ctx.Commands.FirstOrDefault(c => c.Name == "extract-files")?.Count.ToString() ?? "0"; ctx.Commands.FirstOrDefault(c => c.Name == "extract-files")?.Count.ToString() ?? "0";
lblListDevices.Text = ViewBag.lblListDevices =
ctx.Commands.FirstOrDefault(c => c.Name == "list-devices")?.Count.ToString() ?? "0"; ctx.Commands.FirstOrDefault(c => c.Name == "list-devices")?.Count.ToString() ?? "0";
lblListEncodings.Text = ViewBag.lblListEncodings =
ctx.Commands.FirstOrDefault(c => c.Name == "list-encodings")?.Count.ToString() ?? "0"; ctx.Commands.FirstOrDefault(c => c.Name == "list-encodings")?.Count.ToString() ?? "0";
lblConvertImage.Text = ViewBag.lblConvertImage =
ctx.Commands.FirstOrDefault(c => c.Name == "convert-image")?.Count.ToString() ?? "0"; ctx.Commands.FirstOrDefault(c => c.Name == "convert-image")?.Count.ToString() ?? "0";
lblImageInfo.Text = ctx.Commands.FirstOrDefault(c => c.Name == "image-info")?.Count.ToString() ?? ViewBag.lblImageInfo = ctx.Commands.FirstOrDefault(c => c.Name == "image-info")?.Count.ToString() ??
"0"; "0";
} }
else divCommands.Visible = false;
if(ctx.Filters.Any()) if(ctx.Filters.Any()) ViewBag.repFilters = ctx.Filters.OrderBy(filter => filter.Name).ToList();
{
repFilters.DataSource = ctx.Filters.OrderBy(filter => filter.Name).ToList();
repFilters.DataBind();
}
else divFilters.Visible = false;
if(ctx.MediaFormats.Any()) if(ctx.MediaFormats.Any())
{ ViewBag.repMediaImages = ctx.MediaFormats.OrderBy(filter => filter.Name).ToList();
repMediaImages.DataSource = ctx.MediaFormats.OrderBy(filter => filter.Name).ToList();
repMediaImages.DataBind();
}
else divMediaImages.Visible = false;
if(ctx.Partitions.Any()) if(ctx.Partitions.Any()) ViewBag.repPartitions = ctx.Partitions.OrderBy(filter => filter.Name).ToList();
{
repPartitions.DataSource = ctx.Partitions.OrderBy(filter => filter.Name).ToList();
repPartitions.DataBind();
}
else divPartitions.Visible = false;
if(ctx.Filesystems.Any()) if(ctx.Filesystems.Any())
{ ViewBag.repFilesystems = ctx.Filesystems.OrderBy(filter => filter.Name).ToList();
repFilesystems.DataSource = ctx.Filesystems.OrderBy(filter => filter.Name).ToList();
repFilesystems.DataBind();
}
else divFilesystems.Visible = false;
if(ctx.Medias.Any()) if(ctx.Medias.Any())
{ {
@@ -210,25 +192,12 @@ namespace DiscImageChef.Server
} }
if(realMedia.Count > 0) if(realMedia.Count > 0)
{ ViewBag.repRealMedia =
repRealMedia.DataSource =
realMedia.OrderBy(media => media.Type).ThenBy(media => media.SubType).ToList(); realMedia.OrderBy(media => media.Type).ThenBy(media => media.SubType).ToList();
repRealMedia.DataBind();
}
else divRealMedia.Visible = false;
if(virtualMedia.Count > 0) if(virtualMedia.Count > 0)
{ ViewBag.repVirtualMedia =
repVirtualMedia.DataSource =
virtualMedia.OrderBy(media => media.Type).ThenBy(media => media.SubType).ToList(); virtualMedia.OrderBy(media => media.Type).ThenBy(media => media.SubType).ToList();
repVirtualMedia.DataBind();
}
else divVirtualMedia.Visible = false;
}
else
{
divRealMedia.Visible = false;
divVirtualMedia.Visible = false;
} }
if(ctx.DeviceStats.Any()) if(ctx.DeviceStats.Any())
@@ -250,7 +219,7 @@ namespace DiscImageChef.Server
xmlFile = xmlFile.Replace('/', '_').Replace('\\', '_').Replace('?', '_'); xmlFile = xmlFile.Replace('/', '_').Replace('\\', '_').Replace('?', '_');
if(File.Exists(Path.Combine(HostingEnvironment.MapPath("~"), "Reports", xmlFile))) if(System.IO.File.Exists(Path.Combine(HostingEnvironment.MapPath("~"), "Reports", xmlFile)))
{ {
DeviceReport deviceReport = new DeviceReport(); DeviceReport deviceReport = new DeviceReport();
@@ -266,39 +235,37 @@ namespace DiscImageChef.Server
device.Report = ctx.Devices.Add(new Device(deviceReportV2)); device.Report = ctx.Devices.Add(new Device(deviceReportV2));
ctx.SaveChanges(); ctx.SaveChanges();
File.Delete(Path.Combine(HostingEnvironment.MapPath("~") ?? throw new InvalidOperationException(), System.IO.File
"Reports", xmlFile)); .Delete(Path.Combine(HostingEnvironment.MapPath("~") ?? throw new InvalidOperationException(),
"Reports", xmlFile));
} }
string url = device.Report != null && device.Report.Id != 0
? $"ViewReport.aspx?id={device.Report.Id}"
: null;
devices.Add(new DeviceItem devices.Add(new DeviceItem
{ {
Manufacturer = device.Manufacturer, Manufacturer = device.Manufacturer,
Model = device.Model, Model = device.Model,
Revision = device.Revision, Revision = device.Revision,
Bus = device.Bus, Bus = device.Bus,
ReportLink = ReportId = device.Report != null && device.Report.Id != 0
url == null ? "No" : $"<a href=\"{url}\" target=\"_blank\">Yes</a>" ? device.Report.Id
: 0
}); });
} }
repDevices.DataSource = devices.OrderBy(device => device.Manufacturer) ViewBag.repDevices = devices.OrderBy(device => device.Manufacturer).ThenBy(device => device.Model)
.ThenBy(device => device.Model).ThenBy(device => device.Revision) .ThenBy(device => device.Revision).ThenBy(device => device.Bus)
.ThenBy(device => device.Bus).ToList(); .ToList();
repDevices.DataBind();
} }
else divDevices.Visible = false;
} }
catch(Exception) catch(Exception)
{ {
content.InnerHtml = "<b>Could not load statistics</b>";
#if DEBUG #if DEBUG
throw; throw;
#endif #endif
return Content("Could not read statistics");
} }
return View();
} }
static FileStream WaitForFile(string fullPath, FileMode mode, FileAccess access, FileShare share) static FileStream WaitForFile(string fullPath, FileMode mode, FileAccess access, FileShare share)
@@ -320,21 +287,5 @@ namespace DiscImageChef.Server
return null; return null;
} }
class MediaItem
{
public string Type { get; set; }
public string SubType { get; set; }
public long Count { get; set; }
}
class DeviceItem
{
public string Manufacturer { get; set; }
public string Model { get; set; }
public string Revision { get; set; }
public string Bus { get; set; }
public string ReportLink { get; set; }
}
} }
} }

View File

@@ -1,69 +0,0 @@
<%@ Page Language="C#" %>
<%@ Register TagPrefix="velyo" Namespace="Velyo.AspNet.Markdown" Assembly="Velyo.AspNet.Markdown" %>
<%--
// /***************************************************************************
// The Disc Image Chef
// ----------------------------------------------------------------------------
//
// Filename : DONATING.aspx
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// Component : DiscImageChef Server.
//
// --[ Description ] ----------------------------------------------------------
//
// Renders DONATING.md.
//
// --[ 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
// ****************************************************************************/
--%>
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<head runat="server">
<link href="dos.css"
rel="stylesheet"
type="text/css" />
<title>DiscImageChef's TODO</title>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async
src="https://www.googletagmanager.com/gtag/js?id=UA-111466173-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'UA-111466173-1');
</script>
</head>
<body id="body"
runat="server">
<p>
<a href="Default.aspx">Return to main page.</a><br />
DiscImageChef list of things to be donated:
</p>
<div>
<velyo:MarkdownContent ID="todo"
Path="~/docs/DONATING.md"
runat="server" />
</div>
</body>
</html>

View File

@@ -1,70 +0,0 @@
<%@ Page Language="C#" Inherits="DiscImageChef.Server.Default" %>
<%--
// /***************************************************************************
// The Disc Image Chef
// ----------------------------------------------------------------------------
//
// Filename : Default.aspx
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// Component : DiscImageChef Server.
//
// --[ Description ] ----------------------------------------------------------
//
// Renders README.md.
//
// --[ 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
// ****************************************************************************/
--%>
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<head runat="server">
<link href="dos.css"
rel="stylesheet"
type="text/css" />
<title>DiscImageChef</title>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async
src="https://www.googletagmanager.com/gtag/js?id=UA-111466173-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'UA-111466173-1');
</script>
</head>
<body id="body"
runat="server">
<h1 align="center">
Welcome to
<i>
<a href="http://github.com/claunia/discimagechef"
target="_blank">
DiscImageChef
</a>
</i> Server version
<asp:Label id="lblVersion"
runat="server" />
</h1>
</body>
</html>

View File

@@ -1,62 +0,0 @@
// /***************************************************************************
// The Disc Image Chef
// ----------------------------------------------------------------------------
//
// Filename : Default.aspx.cs
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// Component : DiscImageChef Server.
//
// --[ Description ] ----------------------------------------------------------
//
// Renders README.md.
//
// --[ 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;
using System.IO;
using System.Reflection;
using System.Web.Hosting;
using System.Web.UI;
using Velyo.AspNet.Markdown;
namespace DiscImageChef.Server
{
/// <summary>
/// Renders the README.md file
/// </summary>
public partial class Default : Page
{
protected void Page_Load(object sender, EventArgs e)
{
MarkdownContent mkdown = new MarkdownContent();
StreamReader sr =
new StreamReader(Path.Combine(HostingEnvironment.MapPath("~") ?? throw new InvalidOperationException(),
"docs", "README.md"));
string mdcontent = sr.ReadToEnd();
sr.Close();
mkdown.Content = mdcontent.Replace(".md)", ".aspx)");
body.Controls.Add(mkdown);
lblVersion.Text = Assembly.GetExecutingAssembly().GetName().Version.ToString();
}
}
}

View File

@@ -1,23 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
namespace DiscImageChef.Server {
public partial class Default {
protected HtmlGenericControl body;
protected Label lblVersion;
}
}

View File

@@ -73,7 +73,12 @@
<HintPath>..\packages\Google.Protobuf.3.5.1\lib\net45\Google.Protobuf.dll</HintPath> <HintPath>..\packages\Google.Protobuf.3.5.1\lib\net45\Google.Protobuf.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Markdig, Version=0.15.5.0, Culture=neutral, PublicKeyToken=null">
<HintPath>..\packages\Markdig.0.15.5\lib\net40\Markdig.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.CSharp" /> <Reference Include="Microsoft.CSharp" />
<Reference Include="mscorlib" />
<Reference Include="MySql.Data, Version=8.0.13.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"> <Reference Include="MySql.Data, Version=8.0.13.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
<HintPath>..\packages\MySql.Data.8.0.13\lib\net452\MySql.Data.dll</HintPath> <HintPath>..\packages\MySql.Data.8.0.13\lib\net452\MySql.Data.dll</HintPath>
<Private>True</Private> <Private>True</Private>
@@ -150,10 +155,6 @@
<Private>True</Private> <Private>True</Private>
<HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.4\lib\net45\System.Web.WebPages.Razor.dll</HintPath> <HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.4\lib\net45\System.Web.WebPages.Razor.dll</HintPath>
</Reference> </Reference>
<Reference Include="Velyo.AspNet.Markdown, Version=1.0.26.6184, Culture=neutral, PublicKeyToken=null">
<HintPath>..\packages\Velyo.AspNet.Markdown.1.0.26.6184\lib\net451\Velyo.AspNet.Markdown.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="WebGrease"> <Reference Include="WebGrease">
<Private>True</Private> <Private>True</Private>
<HintPath>..\packages\WebGrease.1.6.0\lib\WebGrease.dll</HintPath> <HintPath>..\packages\WebGrease.1.6.0\lib\WebGrease.dll</HintPath>
@@ -176,6 +177,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="App_Start\Ata.cs" /> <Compile Include="App_Start\Ata.cs" />
<Compile Include="App_Start\RouteConfig.cs" />
<Compile Include="App_Start\ScsiEvpd.cs" /> <Compile Include="App_Start\ScsiEvpd.cs" />
<Compile Include="App_Start\ScsiInquiry.cs" /> <Compile Include="App_Start\ScsiInquiry.cs" />
<Compile Include="App_Start\ScsiMmcFeatures.cs" /> <Compile Include="App_Start\ScsiMmcFeatures.cs" />
@@ -185,15 +187,11 @@
<Compile Include="App_Start\StatsConverter.cs" /> <Compile Include="App_Start\StatsConverter.cs" />
<Compile Include="App_Start\TestedMedia.cs" /> <Compile Include="App_Start\TestedMedia.cs" />
<Compile Include="App_Start\WebApiConfig.cs" /> <Compile Include="App_Start\WebApiConfig.cs" />
<Compile Include="Controllers\ReportController.cs" />
<Compile Include="Controllers\StatsController.cs" />
<Compile Include="Controllers\HomeController.cs" />
<Compile Include="Controllers\UploadReportController.cs" /> <Compile Include="Controllers\UploadReportController.cs" />
<Compile Include="Controllers\UploadStatsController.cs" /> <Compile Include="Controllers\UploadStatsController.cs" />
<Compile Include="Default.aspx.cs">
<DependentUpon>Default.aspx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="Default.aspx.designer.cs">
<DependentUpon>Default.aspx</DependentUpon>
</Compile>
<Compile Include="Global.asax.cs"> <Compile Include="Global.asax.cs">
<DependentUpon>Global.asax</DependentUpon> <DependentUpon>Global.asax</DependentUpon>
</Compile> </Compile>
@@ -242,44 +240,34 @@
<Compile Include="Models\Command.cs" /> <Compile Include="Models\Command.cs" />
<Compile Include="Models\Context.cs" /> <Compile Include="Models\Context.cs" />
<Compile Include="Models\Device.cs" /> <Compile Include="Models\Device.cs" />
<Compile Include="Models\DeviceItem.cs" />
<Compile Include="Models\DeviceStat.cs" /> <Compile Include="Models\DeviceStat.cs" />
<Compile Include="Models\Filesystem.cs" /> <Compile Include="Models\Filesystem.cs" />
<Compile Include="Models\Filter.cs" /> <Compile Include="Models\Filter.cs" />
<Compile Include="Models\Media.cs" /> <Compile Include="Models\Media.cs" />
<Compile Include="Models\MediaFormat.cs" /> <Compile Include="Models\MediaFormat.cs" />
<Compile Include="Models\MediaItem.cs" />
<Compile Include="Models\OperatingSystem.cs" /> <Compile Include="Models\OperatingSystem.cs" />
<Compile Include="Models\Partition.cs" /> <Compile Include="Models\Partition.cs" />
<Compile Include="Models\UploadedReport.cs" /> <Compile Include="Models\UploadedReport.cs" />
<Compile Include="Models\UsbProduct.cs" /> <Compile Include="Models\UsbProduct.cs" />
<Compile Include="Models\UsbVendor.cs" /> <Compile Include="Models\UsbVendor.cs" />
<Compile Include="Models\Version.cs" /> <Compile Include="Models\Version.cs" />
<Compile Include="Statistics.aspx.cs">
<DependentUpon>Statistics.aspx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="Statistics.aspx.designer.cs">
<DependentUpon>Statistics.aspx</DependentUpon>
</Compile>
<Compile Include="ViewReport.aspx.cs">
<DependentUpon>ViewReport.aspx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="ViewReport.aspx.designer.cs">
<DependentUpon>ViewReport.aspx</DependentUpon>
</Compile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Content Include="Changelog.aspx" /> <Content Include="docs\Changelog.md" />
<Content Include="Default.aspx" /> <Content Include="docs\DONATING.md" />
<Content Include="DONATING.aspx" /> <Content Include="docs\README.md" />
<Content Include="docs\TODO.md" />
<Content Include="dos.css" /> <Content Include="dos.css" />
<Content Include="Global.asax" /> <Content Include="Global.asax" />
<Content Include="int10h.org\vga_squarepx.eot" /> <Content Include="int10h.org\vga_squarepx.eot" />
<Content Include="int10h.org\vga_squarepx.ttf" /> <Content Include="int10h.org\vga_squarepx.ttf" />
<Content Include="int10h.org\vga_squarepx.woff" /> <Content Include="int10h.org\vga_squarepx.woff" />
<Content Include="Statistics.aspx" /> <Content Include="Views\Home\Changelog.cshtml" />
<Content Include="TODO.aspx" /> <Content Include="Views\Home\DONATING.cshtml" />
<Content Include="ViewReport.aspx" /> <Content Include="Views\Home\TODO.cshtml" />
<Content Include="Views\Report\View.cshtml" />
<Content Include="Web.config" /> <Content Include="Web.config" />
<Content Include="Web.Debug.config"> <Content Include="Web.Debug.config">
<DependentUpon>Web.config</DependentUpon> <DependentUpon>Web.config</DependentUpon>
@@ -287,23 +275,13 @@
<Content Include="Web.Release.config"> <Content Include="Web.Release.config">
<DependentUpon>Web.config</DependentUpon> <DependentUpon>Web.config</DependentUpon>
</Content> </Content>
<None Include="..\Changelog.md">
<Link>docs/Changelog.md</Link>
</None>
<None Include="..\DONATING.md">
<Link>docs/DONATING.md</Link>
</None>
<None Include="..\README.md">
<Link>docs/README.md</Link>
</None>
<None Include="..\TODO.md">
<Link>docs/TODO.md</Link>
</None>
<None Include="App.config" /> <None Include="App.config" />
<None Include="docs\README.md" />
<None Include="int10h.org\.htaccess" /> <None Include="int10h.org\.htaccess" />
<None Include="int10h.org\vga_squarepx.woff2" /> <None Include="int10h.org\vga_squarepx.woff2" />
<None Include="Reports\.htaccess" /> <None Include="Reports\.htaccess" />
<Content Include="Views\Home\Index.cshtml" />
<Content Include="Views\Web.config" />
<Content Include="Views\Stats\Index.cshtml" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="packages.config" /> <None Include="packages.config" />

View File

@@ -32,6 +32,7 @@
using System.Web; using System.Web;
using System.Web.Http; using System.Web.Http;
using System.Web.Routing;
namespace DiscImageChef.Server namespace DiscImageChef.Server
{ {
@@ -40,6 +41,7 @@ namespace DiscImageChef.Server
protected void Application_Start() protected void Application_Start()
{ {
GlobalConfiguration.Configure(WebApiConfig.Register); GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
} }
} }
} }

View File

@@ -0,0 +1,11 @@
namespace DiscImageChef.Server.Models
{
public class DeviceItem
{
public string Manufacturer { get; set; }
public string Model { get; set; }
public string Revision { get; set; }
public string Bus { get; set; }
public int ReportId { get; set; }
}
}

View File

@@ -0,0 +1,9 @@
namespace DiscImageChef.Server.Models
{
public class MediaItem
{
public string Type { get; set; }
public string SubType { get; set; }
public long Count { get; set; }
}
}

View File

@@ -1,412 +0,0 @@
<%@ Page Language="C#" Inherits="DiscImageChef.Server.Statistics" %>
<%--
// /***************************************************************************
// The Disc Image Chef
// ----------------------------------------------------------------------------
//
// Filename : Statistics.aspx
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// Component : DiscImageChef Server.
//
// --[ Description ] ----------------------------------------------------------
//
// Renders statistics and links to reports.
//
// --[ 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
// ****************************************************************************/
--%>
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<head runat="server">
<link href="dos.css"
rel="stylesheet"
type="text/css" />
<title>DiscImageChef Statistics</title>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async
src="https://www.googletagmanager.com/gtag/js?id=UA-111466173-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'UA-111466173-1');
</script>
</head>
<body id="body"
runat="server">
<h1 align="center">
Welcome to
<i>
<a href="http://github.com/claunia/discimagechef"
target="_blank">
DiscImageChef
</a>
</i> Server version
<asp:Label id="lblVersion"
runat="server" />
</h1>
<br />
<div id="content"
runat="server">
<div id="divOperatingSystems"
runat="server">
<table>
<asp:Repeater id="repOperatingSystems"
runat="server">
<ItemTemplate>
<tr>
<td>
DiscImageChef has run on
<i>
<asp:Label runat="server"
Text='<%# Eval("name") %>' />
</i>
<asp:Label runat="server"
Text='<%# Eval("Value") %>' /> times.
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
<br />
</div>
<div id="divVersions"
runat="server">
<table>
<asp:Repeater id="repVersions"
runat="server">
<ItemTemplate>
<tr>
<td>
DiscImageChef version
<i>
<asp:Label runat="server"
Text='<%# Eval("name") %>' />
</i> has been used
<asp:Label runat="server"
Text='<%# Eval("Value") %>' /> times.
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
<br />
</div>
<div id="divCommands"
runat="server">
<h4>Commands run:</h4>
<p>
<i>analyze</i> command has been run
<asp:Label id="lblAnalyze"
runat="server" /> times<br />
<i>benchmark</i> command has been run
<asp:Label id="lblBenchmark"
runat="server" /> times<br />
<i>checksum</i> command has been run
<asp:Label id="lblChecksum"
runat="server" /> times<br />
<i>compare</i> command has been run
<asp:Label id="lblCompare"
runat="server" /> times<br />
<i>convert-image</i> command has been run
<asp:Label id="lblConvertImage"
runat="server" /> times<br />
<i>create-sidecar</i> command has been run
<asp:Label id="lblCreateSidecar"
runat="server" /> times<br />
<i>decode</i> command has been run
<asp:Label id="lblDecode"
runat="server" /> times<br />
<i>device-info</i> command has been run
<asp:Label id="lblDeviceInfo"
runat="server" /> times<br />
<i>device-report</i> command has been run
<asp:Label id="lblDeviceReport"
runat="server" /> times<br />
<i>dump-media</i> command has been run
<asp:Label id="lblDumpMedia"
runat="server" /> times<br />
<i>entropy</i> command has been run
<asp:Label id="lblEntropy"
runat="server" /> times<br />
<i>extract-files</i> command has been run
<asp:Label id="lblExtractFiles"
runat="server" /> times<br />
<i>formats</i> command has been run
<asp:Label id="lblFormats"
runat="server" /> times<br />
<i>image-info</i> command has been run
<asp:Label id="lblImageInfo"
runat="server" /> times<br />
<i>list-devices</i> command has been run
<asp:Label id="lblListDevices"
runat="server" /> times<br />
<i>list-encodings</i> command has been run
<asp:Label id="lblListEncodings"
runat="server" /> times<br />
<i>ls</i> command has been run
<asp:Label id="lblLs"
runat="server" /> times<br />
<i>media-info</i> command has been run
<asp:Label id="lblMediaInfo"
runat="server" /> times<br />
<i>media-scan</i> command has been run
<asp:Label id="lblMediaScan"
runat="server" /> times<br />
<i>printhex</i> command has been run
<asp:Label id="lblPrintHex"
runat="server" /> times<br />
<i>verify</i> command has been run
<asp:Label id="lblVerify"
runat="server" /> times
</p>
</div>
<div id="divFilters"
runat="server">
<h3>Filters found:</h3>
<table align="center"
border="1">
<tr>
<th>Filter</th>
<th>Times</th>
</tr>
<asp:Repeater ID="repFilters"
runat="server">
<ItemTemplate>
<tr>
<td>
<asp:Label runat="server"
Text='<%# Eval("Name") %>' />
</td>
<td>
<asp:Label runat="server"
Text='<%# string.Format("{0}", Eval("Count")) %>' />
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
</div>
<div id="divMediaImages"
runat="server">
<h3>Media image formats found:</h3>
<table align="center"
border="1">
<tr>
<th>Media image format</th>
<th>Times</th>
</tr>
<asp:Repeater ID="repMediaImages"
runat="server">
<ItemTemplate>
<tr>
<td>
<asp:Label runat="server"
Text='<%# Eval("Name") %>' />
</td>
<td>
<asp:Label runat="server"
Text='<%# string.Format("{0}", Eval("Count")) %>' />
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
</div>
<div id="divPartitions"
runat="server">
<h3>Partition schemes found:</h3>
<table align="center"
border="1">
<tr>
<th>Partition scheme</th>
<th>Times</th>
</tr>
<asp:Repeater ID="repPartitions"
runat="server">
<ItemTemplate>
<tr>
<td>
<asp:Label runat="server"
Text='<%# Eval("Name") %>' />
</td>
<td>
<asp:Label runat="server"
Text='<%# string.Format("{0}", Eval("Count")) %>' />
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
</div>
<div id="divFilesystems"
runat="server">
<h3>Filesystems found:</h3>
<table align="center"
border="1">
<tr>
<th>Filesystem name</th>
<th>Times</th>
</tr>
<asp:Repeater ID="repFilesystems"
runat="server">
<ItemTemplate>
<tr>
<td>
<asp:Label runat="server"
Text='<%# Eval("Name") %>' />
</td>
<td>
<asp:Label runat="server"
Text='<%# string.Format("{0}", Eval("Count")) %>' />
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
</div>
<div id="divVirtualMedia"
runat="server">
<h3>Media types found in images:</h3>
<table align="center"
border="1">
<tr>
<th>Physical type</th>
<th>Logical type</th>
<th>Times</th>
</tr>
<asp:Repeater ID="repVirtualMedia"
runat="server">
<ItemTemplate>
<tr>
<td>
<asp:Label runat="server"
Text='<%# Eval("Type") %>' />
</td>
<td>
<asp:Label runat="server"
Text='<%# Eval("SubType") %>' />
</td>
<td>
<asp:Label runat="server"
Text='<%# string.Format("{0}", Eval("Count")) %>' />
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
</div>
<div id="divRealMedia"
runat="server">
<h3>Media types found in devices:</h3>
<table align="center"
border="1">
<tr>
<th>Physical type</th>
<th>Logical type</th>
<th>Times</th>
</tr>
<asp:Repeater ID="repRealMedia"
runat="server">
<ItemTemplate>
<tr>
<td>
<asp:Label runat="server"
Text='<%# Eval("Type") %>' />
</td>
<td>
<asp:Label runat="server"
Text='<%# Eval("SubType") %>' />
</td>
<td>
<asp:Label runat="server"
Text='<%# string.Format("{0}", Eval("Count")) %>' />
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
</div>
<div id="divDevices"
runat="server">
<h3>Found devices:</h3>
<table align="center"
border="1">
<tr>
<th>Manufacturer</th>
<th>Model</th>
<th>Revision</th>
<th>Bus</th>
<th>Report</th>
</tr>
<asp:Repeater ID="repDevices"
runat="server">
<ItemTemplate>
<tr>
<td>
<asp:Label runat="server"
Text='<%# Eval("Manufacturer") %>' />
</td>
<td>
<asp:Label runat="server"
Text='<%# Eval("Model") %>' />
</td>
<td>
<asp:Label runat="server"
Text='<%# Eval("Revision") %>' />
</td>
<td>
<asp:Label runat="server"
Text='<%# Eval("Bus") %>' />
</td>
<td>
<asp:Label runat="server"
Text='<%# Eval("ReportLink") %>' />
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
</div>
</div>
<hr />
<footer>
© 2011-2018
<a href="http://www.claunia.com"
target="_blank">
Claunia.com
</a><br />
Fonts are © 2015-2016
<a href="http://int10h.org"
target="_blank">
VileR
</a><br />
CSS © 2017
<a href="http://www.freedos.org"
target="_blank">
The FreeDOS Project
</a>
</footer>
</body>
</html>

View File

@@ -1,105 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
namespace DiscImageChef.Server {
public partial class Statistics {
protected HtmlGenericControl body;
protected Label lblVersion;
protected HtmlGenericControl content;
protected HtmlGenericControl divOperatingSystems;
protected Repeater repOperatingSystems;
protected HtmlGenericControl divVersions;
protected Repeater repVersions;
protected HtmlGenericControl divCommands;
protected Label lblAnalyze;
protected Label lblBenchmark;
protected Label lblChecksum;
protected Label lblCompare;
protected Label lblConvertImage;
protected Label lblCreateSidecar;
protected Label lblDecode;
protected Label lblDeviceInfo;
protected Label lblDeviceReport;
protected Label lblDumpMedia;
protected Label lblEntropy;
protected Label lblExtractFiles;
protected Label lblFormats;
protected Label lblImageInfo;
protected Label lblListDevices;
protected Label lblListEncodings;
protected Label lblLs;
protected Label lblMediaInfo;
protected Label lblMediaScan;
protected Label lblPrintHex;
protected Label lblVerify;
protected HtmlGenericControl divFilters;
protected Repeater repFilters;
protected HtmlGenericControl divMediaImages;
protected Repeater repMediaImages;
protected HtmlGenericControl divPartitions;
protected Repeater repPartitions;
protected HtmlGenericControl divFilesystems;
protected Repeater repFilesystems;
protected HtmlGenericControl divVirtualMedia;
protected Repeater repVirtualMedia;
protected HtmlGenericControl divRealMedia;
protected Repeater repRealMedia;
protected HtmlGenericControl divDevices;
protected Repeater repDevices;
}
}

View File

@@ -1,69 +0,0 @@
<%@ Page Language="C#" %>
<%@ Register TagPrefix="velyo" Namespace="Velyo.AspNet.Markdown" Assembly="Velyo.AspNet.Markdown" %>
<%--
// /***************************************************************************
// The Disc Image Chef
// ----------------------------------------------------------------------------
//
// Filename : TODO.aspx
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// Component : DiscImageChef Server.
//
// --[ Description ] ----------------------------------------------------------
//
// Renders TODO.md.
//
// --[ 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
// ****************************************************************************/
--%>
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<head runat="server">
<link href="dos.css"
rel="stylesheet"
type="text/css" />
<title>DiscImageChef's TODO</title>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async
src="https://www.googletagmanager.com/gtag/js?id=UA-111466173-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'UA-111466173-1');
</script>
</head>
<body id="body"
runat="server">
<p>
<a href="Default.aspx">Return to main page.</a><br />
DiscImageChef list of things to do:
</p>
<div>
<velyo:MarkdownContent ID="todo"
Path="~/docs/TODO.md"
runat="server" />
</div>
</body>
</html>

View File

@@ -1,369 +0,0 @@
<%@ Page Language="C#" Inherits="DiscImageChef.Server.ViewReport" %>
<%--
// /***************************************************************************
// The Disc Image Chef
// ----------------------------------------------------------------------------
//
// Filename : ViewReport.aspx
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// Component : DiscImageChef Server.
//
// --[ Description ] ----------------------------------------------------------
//
// Renders a device report.
//
// --[ 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
// ****************************************************************************/
--%>
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<head runat="server">
<link href="dos.css"
rel="stylesheet"
type="text/css" />
<title>DiscImageChef Device Report</title>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async
src="https://www.googletagmanager.com/gtag/js?id=UA-111466173-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'UA-111466173-1');
</script>
</head>
<body id="content"
runat="server">
DiscImageChef Report for
<asp:Label id="lblManufacturer"
runat="server" />
<asp:Label id="lblModel"
runat="server" />
<asp:Label id="lblRevision"
runat="server" />
<div id="divUsb"
runat="server">
<br />
<b>USB characteristics:</b><br />
<i>Manufacturer:</i>
<asp:Label id="lblUsbManufacturer"
runat="server" /><br />
<i>Product:</i>
<asp:Label id="lblUsbProduct"
runat="server" /><br />
<i>Vendor ID:</i>
<asp:Label id="lblUsbVendor"
runat="server" />
<asp:Label id="lblUsbVendorDescription"
runat="server" /><br />
<i>Product ID:</i>
<asp:Label id="lblUsbProductId"
runat="server" />
<asp:Label id="lblUsbProductDescription"
runat="server" />
</div>
<div id="divFirewire"
runat="server">
<br />
<b>FireWire characteristics:</b><br />
<i>Manufacturer:</i>
<asp:Label id="lblFirewireManufacturer"
runat="server" /><br />
<i>Product:</i>
<asp:Label id="lblFirewireProduct"
runat="server" /><br />
<i>Vendor ID:</i>
<asp:Label id="lblFirewireVendor"
runat="server" /><br />
<i>Product ID:</i>
<asp:Label id="lblFirewireProductId"
runat="server" />
</div>
<div id="divPcmcia"
runat="server">
<br />
<b>PCMCIA characteristics:</b><br />
<i>Manufacturer:</i>
<asp:Label id="lblPcmciaManufacturer"
runat="server" /><br />
<i>Product:</i>
<asp:Label id="lblPcmciaProduct"
runat="server" /><br />
<i>Manufacturer code:</i>
<asp:Label id="lblPcmciaManufacturerCode"
runat="server" /><br />
<i>Card code:</i>
<asp:Label id="lblPcmciaCardCode"
runat="server" /><br />
<i>Compliance:</i>
<asp:Label id="lblPcmciaCompliance"
runat="server" />
<asp:Repeater ID="repPcmciaTuples"
runat="server">
<ItemTemplate>
<i>
<asp:Label runat="server"
Text='<%# Eval("key") %>' />
</i>:
<asp:Label runat="server"
Text='<%# Eval("value") %>' /><br />
</ItemTemplate>
</asp:Repeater>
</div>
<div id="divAta"
runat="server">
<br />
<b>
ATA
<asp:Label id="lblAtapi"
runat="server" /> characteristics:
</b><br />
<asp:Label id="lblAtaDeviceType"
runat="server" /><br />
<asp:Repeater ID="repAtaTwo"
runat="server">
<ItemTemplate>
<i>
<asp:Label runat="server"
Text='<%# Eval("key") %>' />
</i>:
<asp:Label runat="server"
Text='<%# Eval("value") %>' /><br />
</ItemTemplate>
</asp:Repeater>
<br />
<asp:Repeater ID="repAtaOne"
runat="server">
<ItemTemplate>
<%# Container.DataItem?.ToString() ?? string.Empty %><br />
</ItemTemplate>
</asp:Repeater>
</div>
<div id="divScsi"
runat="server">
<br />
<b>SCSI characteristics:</b><br />
<i>Vendor:</i>
<asp:Label id="lblScsiVendor"
runat="server" /><br />
<i>Product:</i>
<asp:Label id="lblScsiProduct"
runat="server" /><br />
<i>Revision:</i>
<asp:Label id="lblScsiRevision"
runat="server" /><br />
<asp:Repeater ID="repScsi"
runat="server">
<ItemTemplate>
<%# Container.DataItem?.ToString() ?? string.Empty %><br />
</ItemTemplate>
</asp:Repeater>
<div id="divScsiModeSense"
runat="server">
<br /><i>SCSI mode sense pages:</i>
<table border="1">
<tr>
<th>Mode</th>
<th>Contents</th>
</tr>
<asp:Repeater ID="repModeSense"
runat="server">
<ItemTemplate>
<tr>
<td>
<asp:Label runat="server"
Text='<%# Eval("key") %>' />
</td>
<td>
<asp:Label runat="server"
Text='<%# Eval("value") %>' />
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
</div>
<div id="divScsiEvpd"
runat="server">
<br /><i>SCSI extended vital product data pages:</i>
<table border="1">
<tr>
<th>EVPD</th>
<th>Contents</th>
</tr>
<asp:Repeater ID="repEvpd"
runat="server">
<ItemTemplate>
<tr>
<td>
<asp:Label runat="server"
Text='<%# Eval("key") %>' />
</td>
<td>
<asp:Label runat="server"
Text='<%# Eval("value") %>' />
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
</div>
<div id="divScsiMmcMode"
runat="server">
<br /><b>SCSI CD-ROM capabilities:</b><br />
<asp:Repeater ID="repScsiMmcMode"
runat="server">
<ItemTemplate>
<%# Container.DataItem?.ToString() ?? string.Empty %><br />
</ItemTemplate>
</asp:Repeater>
</div>
<div id="divScsiMmcFeatures"
runat="server">
<br /><b>SCSI MMC features:</b><br />
<asp:Repeater ID="repScsiMmcFeatures"
runat="server">
<ItemTemplate>
<%# Container.DataItem?.ToString() ?? string.Empty %><br />
</ItemTemplate>
</asp:Repeater>
</div>
<div id="divScsiSsc"
runat="server">
<br /><b>SCSI Streaming device capabilities:</b><br />
Block size granularity:
<asp:Label id="lblScsiSscGranularity"
runat="server" /><br />
Maximum block length:
<asp:Label id="lblScsiSscMaxBlock"
runat="server" /> bytes<br />
Minimum block length:
<asp:Label id="lblScsiSscMinBlock"
runat="server" /> bytes<br />
<asp:Repeater ID="repScsiSscDensities"
runat="server">
<ItemTemplate>
<br />
<b>
Information for supported density with primary code
<asp:Label runat="server"
Text='<%# string.Format("{0:X2}h", Eval("PrimaryCode")) %>' /> and secondary code
<asp:Label runat="server"
Text='<%# string.Format("{0:X2}h", Eval("SecondaryCode")) %>' />
</b><br />
Drive can write this density:
<asp:Label runat="server"
Text='<%# string.Format("{0}", Eval("Writable")) %>' /><br />
Duplicate density:
<asp:Label runat="server"
Text='<%# string.Format("{0}", Eval("Duplicate")) %>' /><br />
Default density:
<asp:Label runat="server"
Text='<%# string.Format("{0}", Eval("DefaultDensity")) %>' /><br />
Density has
<asp:Label runat="server"
Text='<%# Eval("BitsPerMm") %>' /> bits per mm, with
<asp:Label runat="server"
Text='<%# Eval("Tracks") %>' /> tracks in a
<asp:Label runat="server"
Text='<%# Eval("Width") %>' /> mm width tape
Name:
<asp:Label runat="server"
Text='<%# Eval("Name") %>' /><br />
Organization:
<asp:Label runat="server"
Text='<%# Eval("Organization") %>' /><br />
Description:
<asp:Label runat="server"
Text='<%# Eval("Description") %>' /><br />
Maximum capacity:
<asp:Label runat="server"
Text='<%# Eval("Capacity") %>' /> megabytes<br />
</ItemTemplate>
</asp:Repeater>
<asp:Repeater ID="repScsiSscMedias"
runat="server">
<ItemTemplate>
<br />
<b>
Information for supported media with type code
<asp:Label runat="server"
Text='<%# string.Format("{0:X2}h", Eval("MediumType")) %>' />
</b><br />
Drive can write this density:
<asp:Label runat="server"
Text='<%# string.Format("{0}", Eval("Writable")) %>' /><br />
Media is
<asp:Label runat="server"
Text='<%# Eval("Length") %>' /> meters long in a
<asp:Label runat="server"
Text='<%# Eval("Width") %>' /> mm width tape
Name:
<asp:Label runat="server"
Text='<%# Eval("Name") %>' /><br />
Organization:
<asp:Label runat="server"
Text='<%# Eval("Organization") %>' /><br />
Description:
<asp:Label runat="server"
Text='<%# Eval("Description") %>' /><br />
</ItemTemplate>
</asp:Repeater>
</div>
</div>
<div id="divTestedMedia"
runat="server">
<br /><b>Tested media:</b><br />
<asp:Repeater ID="repTestedMedia"
runat="server">
<ItemTemplate>
<%# Container.DataItem?.ToString() ?? string.Empty %><br />
</ItemTemplate>
</asp:Repeater>
</div>
<div id="divMMC"
runat="server">
<br />
<b>MultiMediaCard device:</b><br />
<asp:Repeater ID="repMMC"
runat="server">
<ItemTemplate>
<%# Container.DataItem?.ToString() ?? string.Empty %><br />
</ItemTemplate>
</asp:Repeater>
</div>
<div id="divSD"
runat="server">
<br />
<b>SecureDigital device:</b><br />
<asp:Repeater ID="repSD"
runat="server">
<ItemTemplate>
<%# Container.DataItem?.ToString() ?? string.Empty %><br />
</ItemTemplate>
</asp:Repeater>
</div>
</body>
</html>

View File

@@ -1,125 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
namespace DiscImageChef.Server {
public partial class ViewReport {
protected HtmlGenericControl content;
protected Label lblManufacturer;
protected Label lblModel;
protected Label lblRevision;
protected HtmlGenericControl divUsb;
protected Label lblUsbManufacturer;
protected Label lblUsbProduct;
protected Label lblUsbVendor;
protected Label lblUsbVendorDescription;
protected Label lblUsbProductId;
protected Label lblUsbProductDescription;
protected HtmlGenericControl divFirewire;
protected Label lblFirewireManufacturer;
protected Label lblFirewireProduct;
protected Label lblFirewireVendor;
protected Label lblFirewireProductId;
protected HtmlGenericControl divPcmcia;
protected Label lblPcmciaManufacturer;
protected Label lblPcmciaProduct;
protected Label lblPcmciaManufacturerCode;
protected Label lblPcmciaCardCode;
protected Label lblPcmciaCompliance;
protected Repeater repPcmciaTuples;
protected HtmlGenericControl divAta;
protected Label lblAtapi;
protected Label lblAtaDeviceType;
protected Repeater repAtaTwo;
protected Repeater repAtaOne;
protected HtmlGenericControl divScsi;
protected Label lblScsiVendor;
protected Label lblScsiProduct;
protected Label lblScsiRevision;
protected Repeater repScsi;
protected HtmlGenericControl divScsiModeSense;
protected Repeater repModeSense;
protected HtmlGenericControl divScsiEvpd;
protected Repeater repEvpd;
protected HtmlGenericControl divScsiMmcMode;
protected Repeater repScsiMmcMode;
protected HtmlGenericControl divScsiMmcFeatures;
protected Repeater repScsiMmcFeatures;
protected HtmlGenericControl divScsiSsc;
protected Label lblScsiSscGranularity;
protected Label lblScsiSscMaxBlock;
protected Label lblScsiSscMinBlock;
protected Repeater repScsiSscDensities;
protected Repeater repScsiSscMedias;
protected HtmlGenericControl divTestedMedia;
protected Repeater repTestedMedia;
protected HtmlGenericControl divMMC;
protected Repeater repMMC;
protected HtmlGenericControl divSD;
protected Repeater repSD;
}
}

View File

@@ -0,0 +1,66 @@
@{
ViewBag.Title = "DiscImageChef";
}
@{
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : Changelog.aspx
Author(s) : Natalia Portillo <claunia@claunia.com>
Component : DiscImageChef Server.
--[ Description ] ----------------------------------------------------------
Renders Changelog.md.
--[ 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
****************************************************************************/
}
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<head>
<link href="../../dos.css"
rel="stylesheet"
type="text/css" />
<meta charset="utf-8" />
<title>@ViewBag.Title</title>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async
src="https://www.googletagmanager.com/gtag/js?id=UA-111466173-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'UA-111466173-1');
</script>
</head>
<body>
<p>
@Html.ActionLink("Return to main page.", "Index")<br />
DiscImageChef list of changes:
</p>
<div>@Html.Raw(ViewBag.Markdown)</div>
</body>
</html>

View File

@@ -0,0 +1,66 @@
@{
ViewBag.Title = "DiscImageChef";
}
@{
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : DONATING.aspx
Author(s) : Natalia Portillo <claunia@claunia.com>
Component : DiscImageChef Server.
--[ Description ] ----------------------------------------------------------
Renders DONATING.md.
--[ 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
****************************************************************************/
}
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<head>
<link href="../../dos.css"
rel="stylesheet"
type="text/css" />
<title>@ViewBag.Title</title>
<meta charset="utf-8" />
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async
src="https://www.googletagmanager.com/gtag/js?id=UA-111466173-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'UA-111466173-1');
</script>
</head>
<body>
<p>
@Html.ActionLink("Return to main page.", "Index")<br />
DiscImageChef list of things to be donated:
</p>
<div>@Html.Raw(ViewBag.Markdown)</div>
</body>
</html>

View File

@@ -0,0 +1,71 @@
@{
ViewBag.Title = "DiscImageChef";
}
@{
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : Default.aspx
Author(s) : Natalia Portillo <claunia@claunia.com>
Component : DiscImageChef Server.
--[ Description ] ----------------------------------------------------------
Renders README.md.
--[ 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
****************************************************************************/
}
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<head>
<link href="../../dos.css"
rel="stylesheet"
type="text/css" />
<meta charset="utf-8" />
<title>@ViewBag.Title</title>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async
src="https://www.googletagmanager.com/gtag/js?id=UA-111466173-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'UA-111466173-1');
</script>
</head>
<body>
<h1 align="center">
Welcome to
<i>
<a href="http://github.com/claunia/discimagechef"
target="_blank">
DiscImageChef
</a>
</i> Server version @ViewBag.lblVersion
</h1>
<div>@Html.Raw(ViewBag.Markdown)</div>
</body>
</html>

View File

@@ -0,0 +1,66 @@
@{
ViewBag.Title = "DiscImageChef";
}
@{
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : Changelog.aspx
Author(s) : Natalia Portillo <claunia@claunia.com>
Component : DiscImageChef Server.
--[ Description ] ----------------------------------------------------------
Renders Changelog.md.
--[ 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
****************************************************************************/
}
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<head>
<link href="../../dos.css"
rel="stylesheet"
type="text/css" />
<meta charset="utf-8" />
<title>@ViewBag.Title</title>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async
src="https://www.googletagmanager.com/gtag/js?id=UA-111466173-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'UA-111466173-1');
</script>
</head>
<body>
<p>
@Html.ActionLink("Return to main page.", "Index")<br />
DiscImageChef list of things to do:
</p>
<div>@Html.Raw(ViewBag.Markdown)</div>
</body>
</html>

View File

@@ -0,0 +1,250 @@
@using DiscImageChef.CommonTypes.Metadata
<!DOCTYPE html>
<html lang="en">
<head>
<link href="../../dos.css"
rel="stylesheet"
type="text/css" />
<title>DiscImageChef Device Report</title>
<meta charset="utf-8" />
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async
src="https://www.googletagmanager.com/gtag/js?id=UA-111466173-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'UA-111466173-1');
</script>
</head>
<body>
DiscImageChef Report for
@ViewBag.lblManufacturer
@ViewBag.lblModel
@ViewBag.lblRevision
@if(ViewBag.UsbItem != null)
{
<div id="divUsb">
<br />
<b>USB characteristics:</b><br />
<i>Manufacturer:</i> @ViewBag.UsbItem.Manufacturer<br />
<i>Product:</i> @ViewBag.UsbItem.Product<br />
<i>Vendor ID:</i> @ViewBag.UsbItem.VendorDescription<br />
<i>Product ID:</i> @ViewBag.UsbItem.ProductDescription
</div>
}
@if(ViewBag.FireWireItem != null)
{
<div id="divFireWire">
<br />
<b>FireWire characteristics:</b><br />
<i>Manufacturer:</i> @ViewBag.FireWire.Manufacturer<br />
<i>Product:</i> @ViewBag.FireWire.Product<br />
<i>Vendor ID:</i> @ViewBag.FireWire.VendorDescription<br />
<i>Product ID:</i> @ViewBag.FireWire.ProductDescription
</div>
}
@if(ViewBag.PcmciaItem != null)
{
<div id="divPcmcia">
<br />
<b>PCMCIA characteristics:</b><br />
<i>Manufacturer:</i> @ViewBag.PcmciaItem.Manufacturer<br />
<i>Product:</i> @ViewBag.PcmciaItem.ProductName<br />
<i>Manufacturer code:</i> @ViewBag.PcmciaItem.VendorDescription<br />
<i>Card code:</i> @ViewBag.PcmciaItem.CardCode<br />
<i>Compliance:</i> @ViewBag.PcmciaItem.Compliance<br />
@if(ViewBag.repPcmciaTuples != null)
{
foreach(KeyValuePair<string, string> kvp in ViewBag.repPcmciaTuples)
{
<text><i>@kvp.Key</i>: @kvp.Value<br /></text>
}
}
</div>
}
@if(ViewBag.AtaItem != null)
{
<div id="divAta">
<br />
<b>
@ViewBag.AtaItem characteristics:
</b><br />
@ViewBag.lblAtaDeviceType<br />
@foreach(KeyValuePair<string, string> kvp in ViewBag.repAtaTwo)
{
<text><i>@kvp.Key</i>: @kvp.Value<br /></text>
}
<br />
@foreach(string item in ViewBag.repAtaOne)
{
@Html.Raw(item)<br />
}
</div>
}
@if(ViewBag.repScsi != null)
{
<div id="divScsi">
<br />
<b>SCSI characteristics:</b><br />
<i>Vendor:</i>@ViewBag.lblScsiVendor<br />
<i>Product:</i>@ViewBag.lblScsiProduct<br />
<i>Revision:</i>@ViewBag.lblScsiRevision<br />
@foreach(string item in ViewBag.repScsi)
{
@Html.Raw(item)<br />
}
@if(ViewBag.repModeSense != null)
{
<div id="divScsiModeSense">
<br /><i>SCSI mode sense pages:</i>
<table border="1">
<tr>
<th>Mode</th>
<th>Contents</th>
</tr>
@foreach(KeyValuePair<string, string> kvp in ViewBag.repModeSense)
{
<tr>
<td>
@kvp.Key
</td>
<td>
@Html.Raw(kvp.Value)
</td>
</tr>
}
</table>
</div>
}
@if(ViewBag.repEvpd != null)
{
<div id="divScsiEvpd">
<br /><i>SCSI extended vital product data pages:</i>
<table border="1">
<tr>
<th>EVPD</th>
<th>Contents</th>
</tr>
@foreach(KeyValuePair<string, string> kvp in ViewBag.repEvpd)
{
<tr>
<td>
@kvp.Key
</td>
<td>
@Html.Raw(kvp.Value)
</td>
</tr>
}
</table>
</div>
}
@if(ViewBag.repScsiMmcMode != null)
{
<div id="divScsiMmcMode">
<br /><b>SCSI CD-ROM capabilities:</b><br />
@foreach(string item in ViewBag.repScsiMmcMode)
{
@Html.Raw(item)<br />
}
</div>
}
@if(ViewBag.repScsiMmcFeatures != null)
{
<div id="divScsiMmcFeatures">
<br /><b>SCSI MMC features:</b><br />
@foreach(string item in ViewBag.repScsiMmcFeatures)
{
@Html.Raw(item)<br />
}
</div>
}
@if(ViewBag.divScsiSscVisible == true)
{
<div id="divScsiSsc">
<br /><b>SCSI Streaming device capabilities:</b><br />
Block size granularity: @ViewBag.lblScsiSscGranularity<br />
Maximum block length: @ViewBag.lblScsiSscMaxBlock bytes<br />
Minimum block length: @ViewBag.lblScsiSscMinBlock bytes<br />
@if(ViewBag.repScsiSscDensities != null)
{
foreach(SupportedDensity density in ViewBag.repScsiSscDensities)
{
<text>
<br />
<b>
Information for supported density with primary code @($"{density.PrimaryCode:X2h}") and secondary code @($"{density.SecondaryCode:X2h}")
</b><br />
Drive can write this density: @density.Writable<br />
Duplicate density: @density.Duplicate<br />
Default density: @density.DefaultDensity<br />
Density has @density.BitsPerMm bits per mm, with @density.Tracks tracks in a @density.Width mm width tape
Name: @density.Name<br />
Organization: @density.Organization<br />
Description: @density.Description<br />
Maximum capacity: @density.Capacity megabytes<br />
</text>
}
}
@if(ViewBag.repScsiSscMedias != null)
{
foreach(SscSupportedMedia media in ViewBag.repScsiSscMedias)
{
<text>
<br />
<b>
Information for supported media with type code @($"{media.MediumType:X2h}")
</b><br />
Media is @media.Length m long in a @media.Width mm width tape
Name: @media.Name<br />
Organization: @media.Organization<br />
Description: @media.Description<br />
</text>
}
}
</div>
}
</div>
}
@if(ViewBag.repTestedMedia != null)
{
<div id="divTestedMedia">
<br /><b>Tested media:</b><br />
@foreach(string item in ViewBag.repTestedMedia)
{
@Html.Raw(item)<br />
}
</div>
}
@if(ViewBag.repMMC != null)
{
<div id="divMMC">
<br />
<b>MultiMediaCard device:</b><br />
@foreach(string item in ViewBag.repMMC)
{
@Html.Raw(item)<br />
}
</div>
}
@if(ViewBag.repSD != null)
{
<div id="divSD">
<br />
<b>SecureDigital device:</b><br />
@foreach(string item in ViewBag.repSD)
{
@Html.Raw(item)<br />
}
</div>
}
</body>
</html>

View File

@@ -0,0 +1,315 @@
@using DiscImageChef.CommonTypes.Metadata
@using DiscImageChef.Server.Models
@using Filter = DiscImageChef.Server.Models.Filter
@{
ViewBag.Title = "DiscImageChef Statistics";
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta content="width=device-width, initial-scale=1.0"
name="viewport">
<title>@ViewBag.Title</title>
<link href="../../dos.css"
rel="stylesheet"
type="text/css" />
<meta charset="utf-8" />
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async
src="https://www.googletagmanager.com/gtag/js?id=UA-111466173-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'UA-111466173-1');
</script>
</head>
<body>
<h1 align="center">
Welcome to
<i>
<a href="http://github.com/claunia/discimagechef"
target="_blank">
DiscImageChef
</a>
</i> Server version @ViewBag.Version
</h1>
<br />
<div>
@if(ViewBag.repOperatingSystems != null)
{
<div id="divOperatingSystems">
<table>
@foreach(NameValueStats os in ViewBag.repOperatingSystems)
{
<tr>
<td>
DiscImageChef has run on <i>@os.name</i> @os.Value times.
</td>
</tr>
}
</table>
<br />
</div>
}
@if(ViewBag.repVersions != null)
{
<div id="divVersions">
<table>
@foreach(NameValueStats version in ViewBag.repVersions)
{
<tr>
<td>
DiscImageChef version <i>@version.name</i> has been used @version.Value times.
</td>
</tr>
}
</table>
<br />
</div>
}
<div id="divCommands">
<h4>Commands run:</h4>
<p>
<i>analyze</i> command has been run @ViewBag.lblAnalyze times<br />
<i>benchmark</i> command has been run @ViewBag.lblBenchmark times<br />
<i>checksum</i> command has been run @ViewBag.lblChecksum times<br />
<i>compare</i> command has been run @ViewBag.lblCompare times<br />
<i>convert-image</i> command has been run @ViewBag.lblConvertImage times<br />
<i>create-sidecar</i> command has been run @ViewBag.lblCreateSidecar times<br />
<i>decode</i> command has been run @ViewBag.lblDecode times<br />
<i>device-info</i> command has been run @ViewBag.lblDeviceInfo times<br />
<i>device-report</i> command has been run @ViewBag.lblDeviceReport times<br />
<i>dump-media</i> command has been run @ViewBag.lblDumpMedia times<br />
<i>entropy</i> command has been run @ViewBag.lblEntropy times<br />
<i>extract-files</i> command has been run @ViewBag.lblExtractFiles times<br />
<i>formats</i> command has been run @ViewBag.lblFormats times<br />
<i>image-info</i> command has been run @ViewBag.lblImageInfo times<br />
<i>list-devices</i> command has been run @ViewBag.lblListDevices times<br />
<i>list-encodings</i> command has been run @ViewBag.lblListEncodings times<br />
<i>ls</i> command has been run @ViewBag.lblLs times<br />
<i>media-info</i> command has been run @ViewBag.lblMediaInfo times<br />
<i>media-scan</i> command has been run @ViewBag.lblMediaScan times<br />
<i>printhex</i> command has been run @ViewBag.lblPrintHex times<br />
<i>verify</i> command has been run @ViewBag.lblVerify times
</p>
</div>
@if(ViewBag.repFilters != null)
{
<div id="divFilters">
<h3>Filters found:</h3>
<table align="center"
border="1">
<tr>
<th>Filter</th>
<th>Times</th>
</tr>
@foreach(Filter filter in ViewBag.repFilters)
{
<tr>
<td>
@filter.Name
</td>
<td>
@($"{filter.Count}")
</td>
</tr>
}
</table>
</div>
}
@if(ViewBag.repMediaImages != null)
{
<div id="divMediaImages">
<h3>Media image formats found:</h3>
<table align="center"
border="1">
<tr>
<th>Media image format</th>
<th>Times</th>
</tr>
@foreach(MediaFormat format in ViewBag.repMediaImages)
{
<tr>
<td>
@format.Name
</td>
<td>
@($"{format.Count}")
</td>
</tr>
}
</table>
</div>
}
@if(ViewBag.repPartitions != null)
{
<div id="divPartitions">
<h3>Partition schemes found:</h3>
<table align="center"
border="1">
<tr>
<th>Partition scheme</th>
<th>Times</th>
</tr>
@foreach(Partition partition in ViewBag.repPartitions)
{
<tr>
<td>
@partition.Name
</td>
<td>
@($"{partition.Count}")
</td>
</tr>
}
</table>
</div>
}
@if(ViewBag.repFilesystems != null)
{
<div id="divFilesystems">
<h3>Filesystems found:</h3>
<table align="center"
border="1">
<tr>
<th>Filesystem name</th>
<th>Times</th>
</tr>
@foreach(Filesystem filesystem in ViewBag.repFilesystems)
{
<tr>
<td>
@filesystem.Name
</td>
<td>
@($"{filesystem.Count}")
</td>
</tr>
}
</table>
</div>
}
@if(ViewBag.repVirtualMedia != null)
{
<div id="divVirtualMedia">
<h3>Media types found in images:</h3>
<table align="center"
border="1">
<tr>
<th>Physical type</th>
<th>Logical type</th>
<th>Times</th>
</tr>
@foreach(MediaItem media in ViewBag.repVirtualMedia)
{
<tr>
<td>
@media.Type
</td>
<td>
@media.SubType
</td>
<td>
@($"{media.Count}")
</td>
</tr>
}
</table>
</div>
}
@if(ViewBag.repRealMedia != null)
{
<div id="divRealMedia">
<h3>Media types found in devices:</h3>
<table align="center"
border="1">
<tr>
<th>Physical type</th>
<th>Logical type</th>
<th>Times</th>
</tr>
@foreach(MediaItem media in ViewBag.repRealMedia)
{
<tr>
<td>
@media.Type
</td>
<td>
@media.SubType
</td>
<td>
@($"{media.Count}")
</td>
</tr>
}
</table>
</div>
}
@if(ViewBag.repDevices != null)
{
<div id="divDevices">
<h3>Found devices:</h3>
<table align="center"
border="1">
<tr>
<th>Manufacturer</th>
<th>Model</th>
<th>Revision</th>
<th>Bus</th>
<th>Report</th>
</tr>
@foreach(DeviceItem device in ViewBag.repDevices)
{
<tr>
<td>
@device.Manufacturer
</td>
<td>
@device.Model
</td>
<td>
@device.Revision
</td>
<td>
@device.Bus
</td>
<td>
@if(device.ReportId != 0)
{
<text>@Html.ActionLink("Yes", "View", "Report", new {id = device.ReportId}, new {target = "_blank"})</text>
}
else
{ <text>No</text> }
</td>
</tr>
}
</table>
</div>
}
</div>
<hr />
<footer>
© 2011-2018
<a href="http://www.claunia.com"
target="_blank">
Claunia.com
</a><br />
Fonts are © 2015-2016
<a href="http://int10h.org"
target="_blank">
VileR
</a><br />
CSS © 2017
<a href="http://www.freedos.org"
target="_blank">
The FreeDOS Project
</a>
</footer>
</body>
</html>

View File

@@ -0,0 +1,43 @@
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Optimization"/>
<add namespace="System.Web.Routing" />
<add namespace="DiscImageChef.Server" />
</namespaces>
</pages>
</system.web.webPages.razor>
<appSettings>
<add key="webpages:Enabled" value="false" />
</appSettings>
<system.webServer>
<handlers>
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
</system.webServer>
<system.web>
<compilation>
<assemblies>
<add assembly="System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>
</compilation>
</system.web>
</configuration>

View File

@@ -0,0 +1,857 @@
# [4.5.1.1692] - 2018-07-19
## Fixed
### - Alcohol 120% disc image
- Correct writing images of Compact Disc >= 60 min
- Correct writing MODE2 tracks to image
- Correct writing TOC to image
- Generation of multisession images
- Generation of pregaps changing tracks
# [4.5.0.1663] - 2018-06-24
## Added
### - Alcohol 120% disc image
- 010editor template.
- Support for creating images.
### - Apple New Disk Image Format
- Support RLE compressed images.
### - Blindwrite 4 disc image
- 010editor template.
- Information about why this format cannot support writing.
### - Blindwrite 5 disc image
- 010editor template.
- Information about why this format cannot support writing.
### - DART disk image
- Support RLE compressed images.
### - Decoders
- Added Blu-ray DI decoders.
- Support decoding 2048 bytes PFI.
### - Devices
- On Linux try to open in read/write and exclusive mode, if not retry in readonly.
- On Linux use direct SG_IO.
- Workaround some Blu-ray drives not reporting correct size on READ DISC STRUCTURE.
### - DiscJuggler disc image
- Information about why this format cannot support writing.
### - Dumping
- Added support for CD drives that don't return a TOC.
- Added support for CD drives that don't support READ CD command.
- Added support for Compact Disc that don't report tracks.
- Add support for dumping media in any of the now supported writable formats.
- Dump ISRC.
- Dump MCN.
- Fix reading PW subchannels.
- Separate trimming from error retry.
- When dumping CDs in persistent mode, try disabling L-EC check if drive doesn't support TB bit, or doesn't return data with TB bit enabled.
- When dumping, print bad sectors to dump log.
### - FAT filesystem
- Add list of known boot sector hashes.
- Support Human68k FAT16 BPB.
### - Filesystems
- Detecting High Performance Optical File System (HPOFS).
- Detecting Microsoft Resilient filesystem (ReFS).
- Detecting PC-FX executable tracks.
- Detecting Xia filesystem.
### - Apple 2IMG disk image
- Support for creating images.
### - Anex86 disk image
- Support for creating images.
### - Apple II interleaved disk image
- Support for creating images.
### - Apple Universal Disk Image Format
- Support for creating images.
- Support RLE compressed images.
### - Apridisk disk image
- Support for creating images.
### - Basic Lisa Utility disk image
- Support for creating images.
### - cdrdao disc image
- Support for creating images.
### - CDRWin cuesheet disc image
- Support for creating images.
### - CisCopy disk image
- Support for creating images.
### - CloneCD disc image
- Support for creating images.
### - Digital Research DISKCOPY disk image
- Support for creating images.
### - DiskCopy 4.2 disk image
- Support for creating images.
### - IBM SaveDskF disk image
- Support for creating images.
### - MaxiDisk disk image
- Support for creating images.
### - NHDr0 disk image
- Support for creating images.
### - Parallels disk image
- Support for creating images.
### - QEMU Copy-On-Write disk image
- Support for creating images.
### - QEMU Copy-On-Write v2 disk image
- Support for creating images.
### - QEMU Enhanced Disk image
- Support for creating images.
### - RAW (sector by sector) disk image
- Added geometry and size for ZIP100 and ZIP250.
- Support 2448 bytes/sector and 2352 bytes/sector CD images.
- Support media tags.
### - Ray Arachelian's disk image
- Support for creating images.
### - RS-IDE disk image
- Support for creating images.
### - T98 Hard Disk Image
- Support for creating images.
### - Virtual98 disk image
- Support for creating images.
### - VirtualBox disk image
- Added image type and flags.
- Support for creating images.
### - VirtualPC disk image
- Support for creating images.
### - VMware disk image
- Support for creating images.
## Fixes
### - Apple DOS filesystem
- Use Apple II character set encoding.
### - Apple ProDOS filesystem
- Use Apple IIc character set encoding.
### - BlindWrite 4 disc image
- Fix incorrect pregap calculation preventing images from showing correct data.
### - CICM metadata
- Can now get dump hardware information from images.
### - cdrdao disc image
- Fix audio track endian.
- Fix when disc catalog number uses whole ASCII and not only numeric digits.
### - CDRWin disc image
- Fix when disc catalog number uses whole ASCII and not only numeric digits.
### - CloneCD disc image
- Fix when disc catalog number uses whole ASCII and not only numeric digits.
### - Checksums
- Correct CD ECC.
- Correct CD EDC.
- Fix CRC16 returning a 32-bit value.
- Fix CRC64 endian.
- Fix Fletcher-16.
- Fix Fletcher-32.
### - Create sidecar
- Add filesystems only to the appropriate partition and track.
- Fix CD Lead-in, TOC and XGD tags.
- Fix diameter setting.
- Fix SCSI MODE SENSE.
- Fix USB descriptors.
### - DART disk image
- Fixed endian.
### - Devices
- Fix sending READ LONG commands to ATA devices.
- Fixed crashing with some rogue SCSI MMC firmwares.
### - Dumping
- Correctly detect CD-i, CD+ and CD-ROM XA.
- Correctly detect Mode 2 Form 1 and Form 2.
- Do not retry when retry passes are zero.
- Do not try to read multisession lead-out/lead-in as they result in errors that are not really there.
- Get correct track flags.
- Retry only the number of times requested.
- Return drive to previous error correction status.
- Send error recovery MODE before retrying sectors.
### - HDCopy disk image
- Fix sector calculation.
### - Image comparison
- Fix when sessions are null.
### - Image verification
- Corrected status printing.
### - ISO9660 filesystem
- Do not try to read past partition if El Torito indicates image goes beyond limits.
- Fix when root directory is outside of device.
- Skip null terminated strings in ISO9660 fields.
### - Lisa filesystem
- Corrected character set encoding.
### - Macintosh filesystem
- Corrected character set encoding.
### - PC-98 Partition Table
- Prevent some FAT BPBs to false positive as PC-98 partition tables.
### - RT-11 filesystem
- Use Radix-50 character set encoding.
### - System V filesystem
- Fix partition bounds.
### - VirtualPC disk image
- Corrected reading non-allocated blocks.
## Changes
- Added command to convert disc images.
- Added command to get information about an image and its contents.
- Added D/CAS-25, D/CAS-85 and D/CAS-103 formats.
- Added IRC notifications for Travis CI.
- Added measured dimensions from an UMD.
- Added media types for NEO GEO CD, PC-FX.
- Added new image format designed to store as much information about media as a drive returns: dicformat.
- Added numeric values to media types.
- Added project to create test filesystems on 16-bit OS/2.
- Added project to create test filesystems on 32-bit OS/2.
- Added project to create test filesystems on DOS.
- Added project to create test filesystems on Mac OS.
- Added size of 640MiB magneto-optical disk.
- Added support for writing disc images.
- Compliant with GDPR.
- Corrected floptical geometry to data according to IRIX.
- Do not assume pointers are 32-bit in several Windows device calls.
- Fixed when statistics settings are null.
- Minimum .NET Framework version is now 4.6.1.
- Sort verbs list.
- Support newest XDG Base Directory Specification for Linux.
# [4.0.1.0] - 2018-01-06
## Fixes
### Apple DOS and ProDOS interleaved disk images
- Fixed interleaving values.
### Apple Nibble disk image
- Fixed detection of DOS vs ProDOS sector order.
### Apple 2IMG disk image
- Fixed deinterleaving of DOS and ProDOS sector order.
- Fixed denibblizing images.
### Apple ProDOS filesystem
- Fixed detection on Apple II disks.
### UCSD Pascal filesystem
- Added support for Apple II variants (two physical sectors per logical sector and little endian fields).
# [4.0.0.0] - 2017-12-25
## Added
### - Advanced Disc Filing System
- Added support for ADFS-S, ADFS-M, ADFS-L, ADFS-D, ADFS-E, ADFS-E+, ADFS-F, ADFS-F+ and ADFS-G.
### - Apple Partition Map
- Added support for decoding Driver Description Map.
- Added support for maps without Driver Description Map.
- Added support for old partition table.
### - Commands
- Added separate application to debug commands sent to devices.
- list-devices: Lists devices that can be used for device dependent commands.
- list-encodings: Lists supported character encodings.
### - Create Sidecar command
- Added support for hashing DiscFerret flux images.
- Added support for hashing KryoFlux STREAM flux images.
- Added support for hashing SuperCardPro flux images.
- Added support for tape dumps where each tape-file is a separate dumped file.
- Calculate checksum of contents not only of image file.
- Consider each optical disc track as a separate partition.
- Store superblock modification time on sidecar.
- Support tracks.
- Use dump drive information from images that support it.
### - Decoders
- Xbox DMI.
- Xbox Security Sectors.
### - Devices
- MMC.
- PCMCIA block devices.
- SCSI Streaming Devices (aka "tapes").
- SecureDigital.
### - Device commands
- Add ATA and SCSI commands support for FreeBSD.
- Add ATA commands support for Windows.
- Add retrieval of USB information on Windows.
- Add SecureDigital/MMC commands support for Windows.
### - Disc images.
- Alcohol 120%.
- Anex86.
- Apple DOS interleaved (.do).
- Apple New Disk Image Format (aka NDIF, aka img, aka DiskCopy 6).
- Apple Nibble (aka NIB).
- Apple ProDOS interleaved (.po).
- Apple Universal Disk Image Format (aka UDIF, aka dmg).
- BlindWrite 4.
- BlindWrite 5.
- CisCopy (aka DC-File or DCF).
- CloneCD.
- CopyQM.
- CPCEMU Disk File.
- CPCEMU Extended Disk File.
- D64.
- D71.
- D81.
- Digital Research's DiskCopy.
- DiscJuggler.
- HD-Copy.
- IBM SaveDskF.
- IMD.
- MAME Compressed Hunks of Data (aka CHD).
- Parallels Hard Disk Image (aka HDD).
- Partclone disk images
- Partimage disk images
- QEMU Copy-On-Write (aka QCOW).
- QEMU Copy-On-Write v2.
- QEMU Enhanced Disk (aka QED).
- Quasi88 (.D77/.D88).
- Ray Arachelian's Disk IMage (.DIM).
- RS-IDE hard disk images.
- Spectrum floppy disk image (.FDI)
- T98.
- VHDX.
- Virtual98.
- VMware.
- X68k .DIM.
### - DiskCopy 4.2 disk image
- Added support for invalid images that use little-endian values.
- Added support for images created by macOS that don't have a format byte set.
- Use resource fork to get DiskCopy version used to create them.
### - Dumping
- Added the ability to resume a partially done dump, even on a separate drive.
- Added the ability to skip dumping the Lead-in.
- Allow creation of a separate subchannel file.
- Create dump log.
- Dumping optical media creates an Alcohol 120% descriptor file.
- Raw dump of DVD with Matshita recorders.
- XGD with Kreon drives.
### - ext2/3/4 filesystem
- Added new superblock fields.
- Added support for devices with sectors bigger than 512 bytes.
### - FAT filesystem
- Added DEC Rainbow's hard-wired BPB.
- Added support for volumes with 256 bytes/sector.
- Added support for ACT Apricot BPB.
- Gets volume label, creation time and modification time from root directory if available.
### - Filesystems
- Apple DOS.
- CP/M.
- Detecting AO-DOS.
- Detecting AtheOS.
- Detecting CD-i.
- Detecting Commodore 1540/1541/1571/1581.
- Detecting cram.
- Detecting Cray UNICOS.
- Detecting dump(8) (Old historic BSD, AIX, UFS and UFS2 types).
- Detecting ECMA-67.
- Detecting exFAT.
- Detecting Extent File System (aka SGI EFS).
- Detecting F2FS.
- Detecting FAT+.
- Detecting fossil.
- Detecting HAMMER.
- Detecting High Sierra Format.
- Detecting HP Logical Interchange Format.
- Detecting IBM JFS.
- Detecting Locus.
- Detecting MicroDOS file system.
- Detecting NILFS2.
- Detecting OS-9 Random Block File (aka RBF).
- Detecting Professional File System (aka PFS).
- Detecting QNX 4.
- Detecting QNX 6.
- Detecting Reiser.
- Detecting Reiser4.
- Detecting RT-11.
- Detecting SmartFileSystem (aka SFS, aka Standard File System).
- Detecting Squash.
- Detecting Universal Disk Format (aka UDF).
- Detecting Veritas.
- Detecting VMware.
- Detecting Xbox.
- Detecting XFS.
- Detecting Zettabyte File System (aka ZFS).
- UCSD Pascal.
### - Filters
- AppleDouble.
- Apple PCExchange.
- AppleSingle.
- BZIP2.
- GZIP.
- LZIP.
- MacBinary.
- XZ.
### - GUID Partition Table
- New type GUIDs.
### - ISO9660 filesystem
- Added detection of AAIP extensions.
- Added detection of Apple extensions.
- Added detection of EFI Platform ID for El Torito.
- Added detection of RRIP extensions.
- Added detection of SUSP extensions.
- Added detection of XA extensions.
- Added detection of ziso extensions.
### - Lisa filesystem
- Full read-only support.
### - Media types
- DDS, DDS-2, DDS-3, DDS-4.
- HiFD.
- IOMEGA Clik! (aka PocketZip).
- IOMEGA JAZ.
- LS-120, LS-240, FD32MB.
- NEC floppies.
- Old DEC hard disks
- SHARP floppies.
- XGD3.
### - Partitions
- Acorn FileCore.
- ACT Apricot.
- BSD disklabels.
- DEC disklabels.
- DragonFly BSD.
- Human68k.
- MINIX subpartitions.
- NEC PC-9800.
- Plan9 partition table.
- Rio Karma.
- SGI Disk Volume Headers.
- UNIX hardwired partition tables.
- UNIX VTOC.
- XENIX partition table.
### - SCSI decoding
- Handling of EVPDs smaller than length field.
- Handling of modes 02h, 04h and 1Ch smaller than expected.
- Prettyfying of mode 0Bh.
### - SmartFileSystem
- Added support for version 2.
### - Statistics
- Added version and operating system statistics.
### - Sun disklabel
- Added bound checks.
- Added support for 16-entries VTOC.
- Added support for pre-VTOC disklabels.
- Corrected structures for 8-entries VTOC.
### - System V filesystem
- Added COHERENT offsets.
- Check for it starting on second cylinder.
- Corrected cluster size calculation.
- Corrected detection between Release 2 and Release 4.
- Corrected Release 2 superblock parameters.
- Enlarged NICFREE for Version 7.
### TeleDisk images
- Added support for Advanced Compression.
- Added support for floppy lead-out.
- Added variable sectors per track support.
## Fixes
### - AmigaDOS filesystem
- Corrected checksum calculation.
- Corrected cluster size calculation.
- Corrected root block location.
- Corrected support for AROS i386 variant that has a PC bootblock before the AmigaDOS bootblock itself.
- Detection on hard disks or with clusters bigger than 1 sector.
- Tested FFS2.
### - Apple Partition Map
- Added bound checks.
- Added support for decoding Driver Description Map.
- Added support for maps without Driver Description Map.
- Added support for old partition table.
- Corrected partition start when map it's not on start of device.
- Corrected support for misaligned maps, like on CDs.
- Cut partitions that span outside the device.
### - cdrdao
- Audio track matching.
- Corrected images that start with comments.
- Prevent reading binary files.
### - CDRWin
- CD-Text detection.
- CD+G data return.
- Fixed composer parsing.
- Prevent reading binary files.
### - CP/M filesystem
- Corrected cluster count calculation.
- Corrected directory location on CP/M-86.
- Corrected sector reading.
- Skip media types that were never used as a CP/M disk.
### - Create Sidecar command
- Corrected creation when path is absolute.
### - Device commands
- Do not send SCSI INQUIRY to non-SCSI paths on Linux.
### - Device reports
- Call ATA READ LONG last, as it confuses some drives.
- Try SCSI READ LONG (10) until max block size (65535).
### - DiskCopy 4.2
- Corrected track order for Lisa and Macintosh Twiggy.
### - Dreamcast GDI images
- Prevent reading binary files.
### - Dumping
- Calculation of streaming device dumping speed.
- Corrected dumping CD-R and CD-RW.
- Optical media with 2048 bytes/sector now get ".iso" file extension.
- Retry when SCSI devices return reset status.
- Streaming Devices now store block size changes in metadata sidecar.
- Wait for SCSI devices to exit ASC 28h (MEDIUM CHANGE) status.
### - ext2/3/4 filesystem
- Use os type as XML system identifier.
### - FAT filesystem
- Behaviour with some non-compliant media descriptors.
- Corrected 5.25" MD1DD detection.
- Corrected boot code detection.
- Corrected misaligned volumes on optical media.
- Rewritten to better detect Atari, MSX, *-DOS and ANDOS variants.
- Use OEM name as XML system identifier.
### - Guid Partition Table
- Added bound checks.
- Corrected misaligned tables on optical media.
- Corrected when table is smaller than one sector.
### - HFS filesystem
- Corrected detection of a PowerPC only bootable volume (no boot sector).
- Corrected misaligned volumes on optical media.
- Corrected volume serial number case.
### - HFS+ filesystem
- Corrected misaligned volumes on optical media.
- Corrected misalignment of fields in Volume Header.
- Use last mount version as XML system identifier.
### - HPFS filesystem
- Corrected cluster size.
- Detect boot code.
- Show NT flags.
- Use OEM name as XML system identifier.
### - ISO9660 filesystem
- Complete rewrite.
- Check that date fields start with a number.
### - Master Boot Record partitioning scheme
- Check real presence of a GPT.
- Corrected infinite looping on extended partitions.
- Remove disklabels support.
- Support misaligned MBRs on optical media.
- Support NEC extensions.
- Support OnTrack extensions.
### - MINIX filesystem
- Added support for v1 and v2 created on MINIX 3.
- Corrected misaligned volumes on optical media.
### - Nero Burning ROM
- Corrected track handling.
- Corrected typo on parsing v2 images.
- Disc types.
- Do not identify positively if footer version is unknown.
- Lead-In handling.
- Mode2 RAW sectors.
- Session count.
### - NeXT partition table
- Added missing fields.
- Corrected offsets.
- Cut partitions that span outside the device.
### - ODS filesystem
- Corrected cluster size calculation.
- Corrected misaligned volumes on optical media.
### - ProDOS filesystem
- Corrected cluster size calculation.
- Corrected misaligned volumes on optical media.
- Volume size.
### - Rigid Disk Block partition scheme
- Corrected AMIX mappings.
### - SCSI decoding
- Handling of EVPDs smaller than length field.
- Handling of modes 02h, 04h and 1Ch smaller than expected.
- Prevented overflow on MMC FEATURES decoding.
- Prevented overflow on SCSI MODE PAGE decoding.
### - SmartFileSystem
- Added support for version 2.
### - Sun disklabel
- Added bound checks.
- Corrected structures for 8-entries VTOC.
### - System V filesystem
- Check for it starting on second cylinder.
- Corrected cluster size calculation.
- Corrected detection between Release 2 and Release 4.
- Corrected Release 2 superblock parameters.
- Enlarged NICFREE for Version 7.
### - UFS filesystem
- Corrected superblock locations.
- Move superblock to a single structure and marshal it, corrects detection of several variants.
## Changes
- Added a public changelog.
- Added a side application to create device reports under Linux without a .NET environment.
- Added operating system version statistics.
- Added partitioning scheme name to partition structures.
- Added several internal tests to prevent regression on changes.
- Added support for different character encodings.
- Added support for filters.
- Added support for nested partitioning schemes.
- Added support for propagating disk geometry, needed by PC-98 partitions and old MBRs.
- Better support for decoding multibyte encodings from C, Pascal and space-padded strings.
- Changed handling of compressed files, using temporary files and caching.
- Corrected casting on big-endian marshalling that was failing on some .NET Framework versions.
- Corrected filter list reuse.
- Disabled EDC check on CDs because it is not working (TODO).
- Filesystems now have access to full partition structure.
- Filters no longer return their own extension when requested for filename.
- Moved Claunia.RsrcFork to NuGet.
- Priam tags.
- Support drive firmware inside disc images.
- Support subchannel with only Q channel.
# [3.0.0.0] - 2016-07-19
## Added
### - Commands
- benchmark: Tests speed for checksum algorithms.
- create-sidecar: Creates an XML sidecar with metadata.
- decode: Decodes and prints a disk tag present on the image.
- device-info: Prints device information.
- dump-media: Dumps media to a disk image.
- entropy: Calculates disk entropy.
- media-info: Prints media information.
- scan-media: Scans media for errors.
### - Checksums
- Adler-32
- SpamSum
### - Devices
- ATA on Linux.
- ATA on Windows (untested).
- FireWire on Linux.
- SCSI on Linux.
- SCSI on Windows (untested).
- USB on Linux.
### - Disc images
- Apple 2IMG.
- CDRDAO.
- Dreamcast GDI.
- VirtualPC.
### - Fast File System (FFS)
- Atari UNIX variant.
### - Filesystems
- Acorn ADFS.
- AmigaDOS.
- Apple File System, aka APFS.
- Apple ProDOS.
- btrfs.
- Nintendo Gamecube.
- Nintendo Wii.
### - Partitions
- Amiga Rigid Disk Block (aka RDB).
- Atari.
- Sun.
- (U)EFI GPT.
## Changes
### - PrintHex command
- Allow to print several sectors.
## Fixes
### - Be filesystem
- Endianness.
- Support for Be CDs.
### - CDRWin disk image
- Behaviour on .NET Framework.
- Detection of CD-ROM XA.
- Flags.
- Partition calculations.
### - Fast File System (FFS)
- False positives with 7th Edition.
### - ISO9660
- Dreamcast IP.BIN decoding.
- Sega CD IP.BIN decoding.
### - System V Filesystem
- Big endian support
# [2.20] - 2014-08-28
## Added
### - Checksums
- Reed Solomon.
## Fixes
### - Apple Partition Map
- Disks with 2048 bytes/sector but a 512 bytes/sector map.
### - HFS
- Disks with 2048 bytes/sector but a 512 bytes/sector filesystem.
# [2.10] - 2014-08-25
## Added
### - Checksums
- CD EDC and ECC.
- CRC16.
### - Commands
- Verify: Verifies disk image contents, if supported.
### - Disc images
- Nero Burning ROM.
# [2.0] - 2014-07-03
## Added
### - Commands
- analyze: Gives informatio about disk image contents as well as detecting partitions and filesystems.
- checksum: Generates CRC32, CRC64, RIPEMD160, MD5, SHA1, SHA256, SHA384 and SHA512 checksums of disk image contents.
- compare: Compares two media images.
- printhex: Prints a hexadecimal output of a sector.
### - Disc images
- RAW (sector by sector).
### - Media types
- BD-R.
- BD-RE XL.
- FDFORMAT.
## Fixes
### - FAT filesystem
- Workaround FAT12 without BIOS Parameter Block.
### - MBR partitions
- Do not search for them on disks with less than 512 bytes/sector.
### - ODS-11 filesystem
- Do not search for them on disks with less than 512 bytes/sector.
# [1.10] - 2014-04-21
## Added
### - Disc images
- Sydex TeleDisk.
# [1.0] - 2014-04-17
## Added
### - Filesystems
- Detecting BeFS.
- Detecting ext.
- Detecting ext2.
- Detecting ext3.
- Detecting ext4.
- Detecting FAT12.
- Detecting FAT16.
- Detecting FAT32.
- Detecting FFS.
- Detecting HFS+.
- Detecting HFS.
- Detecting HPFS.
- Detecting ISO9660.
- Detecting LisaFS.
- Detecting MFS.
- Detecting MinixFS.
- Detecting NTFS.
- Detecting ODS-11.
- Detecting Opera.
- Detecting PCEngine.
- Detecting SolarFS.
- Detecting System V.
- Detecting UFS.
- Detecting UFS2.
- Detecting UnixWare boot.
### - Disc images
- Apple DiskCopy 4.2.
- CDRWin.
### - Partitions
- Apple Partition Map (aka APM).
- Master Boot Record (aka MBR).
- NeXT disklabels.
[4.5.1.1692]: https://github.com/claunia/DiscImageChef/releases/tag/v4.5.1.1692
[4.5.0.1663]: https://github.com/claunia/DiscImageChef/releases/tag/v4.5.0.1663
[4.0.1.0]: https://github.com/claunia/DiscImageChef/releases/tag/v4.0.1.0
[4.0.0.0]: https://github.com/claunia/DiscImageChef/releases/tag/v4.0.0.0
[3.0.0.0]: https://github.com/claunia/DiscImageChef/releases/tag/v3.0.0.0
[2.20]: https://github.com/claunia/DiscImageChef/releases/tag/v2.2
[2.10]: https://github.com/claunia/DiscImageChef/releases/tag/v2.1
[2.0]: https://github.com/claunia/DiscImageChef/releases/tag/v2.0

View File

@@ -0,0 +1,174 @@
Hardware donations
==================
This is a list of hardware that I'm searching but is too rare or too expensive for me to get them.
The reason I want this hardware is because having it is the only way to add enhanced support for them (e.g. media detection, ECC support, raw dumping, etc.).
After adding enhanced support all drives will be given to the Canary Islands Computer Museum.
- 3.5" magneto-optical media: 540MiB, 1.3GiB
- 5.25" magneto-optical drive and media
- 8" shugart drive
- ADR drive and tapes
- AIT drive and tapes
- Apple twiggy and media
- Caleb UHD144 drive
- Castlewood Orb 2.2 and 5.7
- DLT drive and tapes
- DiscFerret
- HD-DVD media
- Host-aware and host-controller SAS and SATA zoned hard disks
- Insite floptical drive
- Iomega Bernoulli
- Iomega Ditto drive and tapes
- Iomega JAZ and JAZ 2
- Iomega REV
- Iomega ZIP750 drive
- LD-ROM drive and media
- LTO drive and tapes
- LV-ROM drive and media
- Mammoth drive and tapes
- Panasonic Blu-ray recorder
- Plasmon UDO and UDO2 drives and media
- SCSI floppy drive (e.g. Teac FD235JS806-U)
- SLR drive and tapes
- Sony Hi-MD and media
- Sony HiFD
- Sony MD-DATA and media
- Sony Professional Disc for DATA
- Stringy floppy
- Syquest EZ135 drive and media
- Syquest EZFlyer drive and media
- Syquest Quest drive and media
- Syquest SQ2542 drive and media
- Syquest SQ306RD drive and SQ100 media
- Syquest SQ3105 drive and SQ310 media
- Syquest SQ312RD drive and SQ200 media
- Syquest SQ319RD drive and SQ300 media
- Syquest SQ3270 drive and SQ327 media
- Syquest SQ5110 drive and SQ800 media
- Syquest SQ5200C drive and SQ2000 media
- Syquest SQ555 drive and SQ400 media
- Syquest SparQ drive and media
- Syquest SyJet drive and media
- T9840, T9940, T10000 drive and tapes
- Travan drive and tapes
- Triton drive and media
- VXA drive and tapes
Software donations
==================
This is a list of software whose physical media has some characteristics that needs
to be investigated to allow correct dumping of such characteristics. Usually those
are copy protections.
- CD-V
- CD-i Ready
- A Christmas Songbook
- Accelerator
- Alien Gate
- Beyond Limits
- Escape
- Lucky Luke
- Louis Armstrong
- Dark Fables of Aesop
- More Dark Fables of Aesop
- Mozart
- Opera Imaginaire
- Pavarotti
- Steel Machine
- The Apprentice
- Dimo's Quest
- The Worlds of...
- SafeDisc
- Age of Wonders II: The Wizard's Throne
- Beowulf
- Black & White 2
- Brothers in Arms: Road to Hill 30
- Call of Duty: World at War
- Carmageddon II: Carpocalypse Now
- Close Combat: Invasion Normandy
- Codename: Eagle
- Command & Conquer: Generals
- FIFA Football 2002
- Football Manager 2007
- SecuROM
- Arabian Nights
- Arcania: Gothic 4
- Boiling Point: Road to Hell
- Caesar IV
- Cars 2
- Clive Barker's Jericho
- Colin McRae Rally 04
- Colin McRae Rally 2.0
- Colin McRae Rally 3
- Command & Conquer: Red Alert 3 - Uprising
- Commandos: Strike Force
- Devil May Cry 4
- Die Hard: Nakatomi Plaza
- Disney Planes
- Divinity II: Developer's Cut
- StarForce
- Anno 1701
- Black Mirror 3
- BloodRayne 2
- Chronostorm: Siberian Border
- Codename: Outbreak
- Dead to Rights
- Disciples III: Renaissance
- Game of Thrones
- Gothic 3
- Gothic 3: Forsaken Gods
- Mass Effect
- Mount & Blade
- Pac-Man World 2
- Tages
- Act of War: High Treason
- Anno 1701
- Beyond Good & Evil
- Codename: Panzers - Cold War
- Darkstar One
- Desperados 2: Cooper's Revenge
- Driver: Parallel Lines
- Faery: Legends of Avalon
- Fahrenheit
- Fantasy Wars
- Glory of the Roman Empire
- Gothic 3
- Hard to Be a God
- Helldorado
- Moto Racer 3
- Nail'd
- Nostradamus: The Last Prophecy
- Rag Doll Kung Fu
- Rayman Origins
- RoboCop (2003)
- Runaway 2: The Dream of the Turtle
- S.T.A.L.K.E.R.: Shadow of Chernobyl
- Secret Files: Tunguska
- Silverfall
- SpellForce 2: Shadow Wars
- Still Life 2
- The Chronicles of Riddick: Assault on Dark Athena
- War Front: Turning Point
- XIII
- Solidshield
- A-Train 8
- Anno 2070
- Assassin's Creed: Brotherhood
- Crysis 2
- Dead Mountaineer's Hotel
- Dead Space 2
- Hard to Be a God
- Helldorado
- I Am Alive
- Jack Keane
- James Cameron's Avatar: The Game
- Medal of Honor: Airborne
- Need for Speed: Hot Pursuit
- ObsCure II
- Risen
- Shift 2 Unleashed
- Still Life 2
- Warfare
- X3: Terran Conflict

View File

@@ -0,0 +1,254 @@
DiscImageChef v4.5.99.1693
Disc Image Chef (because "swiss-army-knife" is used too much)
Copyright © 2011-2018 Natalia Portillo <claunia@claunia.com>
[![Build status](https://dev.azure.com/DiscImageChef/DiscImageChef/_apis/build/status/DiscImageChef-.NET%20Desktop-CI)](https://dev.azure.com/DiscImageChef/DiscImageChef/_build/latest?definitionId=4)
[![Build Status](https://travis-ci.org/claunia/DiscImageChef.svg?branch=master)](https://travis-ci.org/claunia/DiscImageChef)
[![Build status](https://ci.appveyor.com/api/projects/status/vim4c8h028pn5oys?svg=true)](https://ci.appveyor.com/project/claunia/discimagechef)
[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fclaunia%2FDiscImageChef.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Fclaunia%2FDiscImageChef?ref=badge_shield)
You can see statistics and device reports [here](http://discimagechef.claunia.com/Statistics.aspx)
DiscImageChef is a fully featured media dump management solution. You usually know media dumps
as disc images, disk images, tape images, etc.
With DiscImageChef you can analyze a media dump, extract files from it (for supported
filesystems), compare two of them, create them from real media using the appropriate drive,
create a sidecar metadata with information about the media dump, and a lot of other features
that commonly would require you to use separate applications.
To see last changes, check the [changelog](Changelog.md).
To see list of pending things to do, check the [TODO list](TODO.md).
If you want to contribute in any way please read the [contributing guide](CONTRIBUTING.md).
System requirements
===================
DiscImageChef should work under any operating system where there is [Mono](http://www.mono-project.com/)
or [.NET Framework](https://www.microsoft.com/net/download).
It has been tested using Mono 5.0 and .NET Framework 4.6.1. However recommended versions are
Mono 5.8 and .NET Framework 4.7.1. .NET Core is unsupported.
Usage
=====
DiscImageChef.exe
And read help.
Or read the [wiki](https://github.com/claunia/DiscImageChef/wiki).
Features
========
* Analyzes a disk image getting information about the disk itself and analyzes partitions and filesystems inside them
* Can checksum the disks (and if optical disc, separate tracks) user-data (tags and metadata coming soon)
* Can compare two disk images, even different formats, for different sectors and/or metadata
* Can list and extract contents from filesystems that support that
* Can read several disk image formats.
* Can read several known sector by sector formats with variable bytes per sector.
* Can read standard sector by sector copies for optical and magnetic discs with constant bytes per sector.
* Can verify sectors or disk images if supported by the underlying format
Supported disk image formats (read-only)
========================================
* Apple Disk Archival/Retrieval Tool (DART)
* Apple II nibble images (NIB)
* BlindWrite 4 TOC files (.BWT/.BWI/.BWS)
* BlindWrite 5/6 TOC files (.B5T/.B5I and .B6T/.B6I)
* CopyQM
* CPCEMU Disk file and Extended Disk File
* Dave Dunfield IMD
* DiscJuggler images
* Dreamcast GDI
* HD-Copy disk images
* MAME Compressed Hunks of Data (CHD)
* Microsoft VHDX
* Nero Burning ROM (both image formats)
* Partclone disk images
* Partimage disk images
* Quasi88 disk images (.D77/.D88)
* Spectrum floppy disk image (.FDI)
* TeleDisk
* X68k DIM disk image files (.DIM)
Supported disk image formats (read and write)
=============================================
* Alcohol 120% Media Descriptor Structure (.MDS/.MDF)
* Anex86 disk images (.FDI for floppies, .HDI for hard disks)
* Any 512 bytes/sector disk image format (sector by sector copy, aka raw)
* Apple 2IMG (used with Apple // emulators)
* Apple DiskCopy 4.2
* Apple ][ Interleaved Disk Image
* Apple Universal Disk Image Format (UDIF), including obsolete (previous than DiskCopy 6) versions
* Apridisk disk image formats (for ACT Apricot disks)
* Basic Lisa Utility
* CDRDAO TOC sheets
* CDRWin cue/bin cuesheets, including ones with ISOBuster extensions
* CisCopy disk image (aka DC-File, .DCF)
* CloneCD
* DataPackRat's d2f/f2d disk image format ("WC DISK IMAGE")
* Digital Research DiskCopy
* DiscImageChef format
* IBM SaveDskF
* MAXI Disk disk images (HDK)
* Most known sector by sector copies of floppies with 128, 256, 319 and 1024 bytes/sector.
* Most known sector by sector copies with different bytes/sector on track 0.
* Parallels Hard Disk Image (HDD) version 2
* QEMU Copy-On-Write versions 1, 2 and 3 (QCOW and QCOW2)
* QEMU Enhanced Disk (QED)
* Ray Arachelian's Disk IMage (.DIM)
* RS-IDE hard disk images
* Sector by sector copies of Microsoft's DMF floppies
* T98 hard disk images (.THD)
* T98-Next hard disk images (.NHD)
* Virtual98 disk images
* VirtualBox Disk Image (VDI)
* Virtual PC fixed size, dynamic size and differencing (undo) disk images
* VMware VMDK and COWD images
* XDF disk images (as created by IBM's XDFCOPY)
Supported partitioning schemes
==============================
* Acorn Linux and RISCiX partitions
* ACT Apricot partitions
* Amiga Rigid Disk Block (RDB)
* Apple Partition Map
* Atari AHDI and ICDPro
* BSD disklabels
* BSD slices inside MBR
* DEC disklabels
* DragonFly BSD 64-bit disklabel
* EFI GUID Partition Table (GPT)
* Human68k (Sharp X68000) partitions table
* Microsoft/IBM/Intel Master Boot Record (MBR)
* Minix subpartitions inside MBR
* NEC PC9800 partitions
* NeXT disklabel
* Plan9 partition table
* Rio Karma partitions
* SGI volume headers
* Solaris slices inside MBR
* Sun disklabel
* UNIX VTOC and disklabel
* UNIX VTOC inside MBR
* Xbox 360 hard coded partitions
* XENIX partition table
Supported file systems for read-only operations
===============================================
* Apple DOS file system
* Apple Lisa file system
* Apple Macintosh File System (MFS)
* CP/M file system
* U.C.S.D Pascal file system
Supported file systems for identification and information only
==============================================================
* 3DO Opera file system
* Acorn Advanced Disc Filing System
* Alexander Osipov DOS (AO-DOS for Electronika BK-0011) file system
* Amiga Fast File System v2, untested
* Amiga Fast File System, with international characters, directory cache and multi-user patches
* Amiga Original File System, with international characters, directory cache and multi-user patches
* Apple File System (preliminary detection until on-disk layout is stable)
* Apple Hierarchical File System (HFS)
* Apple Hierarchical File System+ (HFS+)
* Apple ProDOS / SOS file system
* AtheOS file system
* BeOS filesystem
* BSD Fast File System (FFS) / Unix File System (UFS)
* BSD Unix File System 2 (UFS2)
* B-tree file system (btrfs)
* CD-i file system
* Coherent UNIX file system
* Commodore 1540/1541/1571/1581 filesystems
* Cram file system
* DEC Files-11 (only checked with On Disk Structure 2, ODS-2)
* DEC RT-11 file system
* dump(8) (Old historic BSD, AIX, UFS and UFS2 types)
* ECMA-67: 130mm Flexible Disk Cartridge Labelling and File Structure for Information Interchange
* Flash-Friendly File System (F2FS)
* Fossil file system (from Plan9)
* HAMMER file system
* High Performance Optical File System (HPOFS)
* High Sierra Format
* HP Logical Interchange Format
* IBM Journaling File System (JFS)
* ISO9660
* Linux extended file system
* Linux extended file system 2
* Linux extended file system 3
* Linux extended file system 4
* Locus file system
* MicroDOS file system
* Microsoft 12-bit File Allocation Table (FAT12), including Atari ST extensions
* Microsoft 16-bit File Allocation Table (FAT16)
* Microsoft 32-bit File Allocation Table (FAT32), including FAT+ extension
* Microsoft Extended File Allocation Table (exFAT)
* Microsoft/IBM High Performance File System (HPFS)
* Microsoft New Technology File System (NTFS)
* Microsoft Resilient File System (ReFS)
* Minix v2 file system
* Minix v3 file system
* NEC PC-Engine executable
* NEC PC-FX executable
* NILFS2
* Nintendo optical filesystems (GameCube and Wii)
* OS-9 Random Block File
* Professional File System
* QNX4 and QNX6 filesystems
* Reiser file systems
* SGI Extent File System (EFS)
* SGI XFS
* SmartFileSystem
* SolarOS file system
* Squash file system
* UNICOS file system
* Universal Disk Format (UDF)
* UNIX System V file system
* UNIX Version 7 file system
* UnixWare boot file system
* Veritas file system
* VMware file system (VMFS)
* Xbox filesystems
* Xenix file system
* Xia filesystem
* Zettabyte File System (ZFS)
Supported checksums
===================
* Adler-32
* CRC-16
* CRC-32
* CRC-64
* Fletcher-16
* Fletcher-32
* MD5
* RMD160
* SHA-1
* SHA-2 (256, 384 and 512 bits)
* SpamSum (fuzzy hashing)
Supported filters
=================
* Apple PCExchange (FINDER.DAT & RESOURCE.FRK)
* AppleDouble
* AppleSingle
* BZip2
* GZip
* LZip
* MacBinary I, II, III
* XZ
Partially supported disk image formats
======================================
These disk image formats cannot be read, but their contents can be checksummed on sidecar creation
* DiscFerret
* KryoFlux STREAM
* SuperCardPro
## License
[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fclaunia%2FDiscImageChef.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fclaunia%2FDiscImageChef?ref=badge_large)

View File

@@ -0,0 +1,83 @@
* Add checksum support for Apple NIB images. (https://github.com/claunia/DiscImageChef/issues/105)
* Add checksum support for NDIF images. (https://github.com/claunia/DiscImageChef/issues/88)
* Add checksum support for partclone images. (https://github.com/claunia/DiscImageChef/issues/89)
* Add checksum support for partimage images. (https://github.com/claunia/DiscImageChef/issues/90)
* Add detection of bootable UDF filesystems. (https://github.com/claunia/DiscImageChef/issues/91)
* Add filter for 7-Zip archives. (https://github.com/claunia/DiscImageChef/issues/92)
* Add filter for ZIP archives. (https://github.com/claunia/DiscImageChef/issues/93)
* Add flux decoding for DiscFerret images. (https://github.com/claunia/DiscImageChef/issues/49)
* Add flux decoding for KryoFlux images. (https://github.com/claunia/DiscImageChef/issues/50)
* Add flux decoding for SuperCardPro images. (https://github.com/claunia/DiscImageChef/issues/99)
* Add interface for floppy bitstream decoding. (https://github.com/claunia/DiscImageChef/issues/94)
* Add raw dump for Plextor recorders. (https://github.com/claunia/DiscImageChef/issues/100)
* Add support for 82077 floppy controllers. (https://github.com/claunia/DiscImageChef/issues/101)
* Add support for AIX partitioning scheme. (https://github.com/claunia/DiscImageChef/issues/7)
* Add support for CD-Text in Nero images. (https://github.com/claunia/DiscImageChef/issues/104)
* Add support for compressed Ciscopy images. (https://github.com/claunia/DiscImageChef/issues/127)
* Add support for compressed DART images. (https://github.com/claunia/DiscImageChef/issues/68)
* Add support for compressed MAME CHD version 5 images. (https://github.com/claunia/DiscImageChef/issues/106)
* Add support for compressed MAME CompactDisc images. (https://github.com/claunia/DiscImageChef/issues/107)
* Add support for compressed NDIF images. (https://github.com/claunia/DiscImageChef/issues/68)
* Add support for compressed SaveDskF images. (https://github.com/claunia/DiscImageChef/issues/108)
* Add support for compressed UDIF images. (https://github.com/claunia/DiscImageChef/issues/70)
* Add support for compressed VMware images. (https://github.com/claunia/DiscImageChef/issues/109)
* Add support for CSS encrypted DVD dumping. (https://github.com/claunia/DiscImageChef/issues/110)
* Add support for decoding Apple GCR bitstreams. (https://github.com/claunia/DiscImageChef/issues/95)
* Add support for decoding Commodore GCR bitstreams. (https://github.com/claunia/DiscImageChef/issues/96)
* Add support for decoding FM bitstreams. (https://github.com/claunia/DiscImageChef/issues/97)
* Add support for decoding MFM bitstreams. (https://github.com/claunia/DiscImageChef/issues/98)
* Add support for detecting FireWire devices in FreeBSD. (https://github.com/claunia/DiscImageChef/issues/111)
* Add support for detecting FireWire devices in Windows. (https://github.com/claunia/DiscImageChef/issues/125)
* Add support for detecting USB devices in FreeBSD. (https://github.com/claunia/DiscImageChef/issues/112)
* Add support for differencing QCOW2 images. (https://github.com/claunia/DiscImageChef/issues/142)
* Add support for differencing QCOW images. (https://github.com/claunia/DiscImageChef/issues/143)
* Add support for differencing QED images. (https://github.com/claunia/DiscImageChef/issues/144)
* Add support for DiscFerret devices. (https://github.com/claunia/DiscImageChef/issues/140)
* Add support for dumping CD Lead-In in FreeBSD. (https://github.com/claunia/DiscImageChef/issues/113)
* Add support for encrypted NDIF images. (https://github.com/claunia/DiscImageChef/issues/149)
* Add support for encrypted QCOW2 images. (https://github.com/claunia/DiscImageChef/issues/145)
* Add support for encrypted QCOW images. (https://github.com/claunia/DiscImageChef/issues/146)
* Add support for encrypted VMware images. (https://github.com/claunia/DiscImageChef/issues/147)
* Add support for KryoFlux devices. (https://github.com/claunia/DiscImageChef/issues/141)
* Add support for Linear Media PCMCIA devices. (https://github.com/claunia/DiscImageChef/issues/148)
* Add support for MAME CHD images of PCMCIA devices. (https://github.com/claunia/DiscImageChef/issues/150)
* Add support for NetApp WAFL filesystem. (https://github.com/claunia/DiscImageChef/issues/61)
* Add support for NetWare 286 filesystem. (https://github.com/claunia/DiscImageChef/issues/117)
* Add support for NetWare 386 filesystem. (https://github.com/claunia/DiscImageChef/issues/118)
* Add support for Novell Storage Services filesystem. (https://github.com/claunia/DiscImageChef/issues/119)
* Add support for NVMe devices. (https://github.com/claunia/DiscImageChef/issues/151)
* Add support for OCFS2 filesystem. (https://github.com/claunia/DiscImageChef/issues/153)
* Add support for packed subchannel in BlindWrite 4 images. (https://github.com/claunia/DiscImageChef/issues/154)
* Add support for packed subchannel in BlindWrite 5 images. (https://github.com/claunia/DiscImageChef/issues/155)
* Add support for Parallel ATA devices in FreeBSD. (https://github.com/claunia/DiscImageChef/issues/114)
* Add support for PCMCIA devices in FreeBSD. (https://github.com/claunia/DiscImageChef/issues/115)
* Add support for PCMCIA devices in Windows. (https://github.com/claunia/DiscImageChef/issues/126)
* Add support for reading resource fork in macOS. (https://github.com/claunia/DiscImageChef/issues/156)
* Add support for reading resource fork in Windows. (https://github.com/claunia/DiscImageChef/issues/157)
* Add support for SecureDigital and MultiMediaCard devices in FreeBSD. (https://github.com/claunia/DiscImageChef/issues/116)
* Add support for SuperCardPro devices. (https://github.com/claunia/DiscImageChef/issues/139)
* Add support for XPACK images. (https://github.com/claunia/DiscImageChef/issues/45)
* Checksum disk tags
* Checksum long sectors
* Checksum sector tags
* Compare sector tags
* Finish support for reading sectors of variable bytes/sector images
* Graphical User Interface
* Handle UDIF image comments. (https://github.com/claunia/DiscImageChef/issues/137)
* Implement Apple KenCode compression algorithm. (https://github.com/claunia/DiscImageChef/issues/122)
* Implement Apple LZFSE compression algorithm. (https://github.com/claunia/DiscImageChef/issues/124)
* Implement Apple LZH compression algorithm. (https://github.com/claunia/DiscImageChef/issues/121)
* Implement COLUMBIA ordering in CP/M filesystem. (https://github.com/claunia/DiscImageChef/issues/133)
* Implement CYLINDERS ordering in CP/M filesystem. (https://github.com/claunia/DiscImageChef/issues/132)
* Implement dumping GameCube discs. (https://github.com/claunia/DiscImageChef/issues/135)
* Implement dumping Wii discs. (https://github.com/claunia/DiscImageChef/issues/136)
* Implement EAGLE ordering in CP/M filesystem. (https://github.com/claunia/DiscImageChef/issues/131)
* Implement ODS checksum. (https://github.com/claunia/DiscImageChef/issues/130)
* Implement StuffIt compression algorithm. (https://github.com/claunia/DiscImageChef/issues/123)
* Offer the option to see differing values
* Optimize and multithread image comparison
* Optimize current checksum multithreading
* Support AAP extensions in MBR. (https://github.com/claunia/DiscImageChef/issues/159)
* Support IBM boot manager in MBR. (https://github.com/claunia/DiscImageChef/issues/128)
* Support MMC feature codes FF33h
* Support SCSI mode pages 18h, 1Dh, 20h, 31h, 32h

View File

@@ -3,6 +3,7 @@
<package id="Antlr" version="3.5.0.2" targetFramework="net461" /> <package id="Antlr" version="3.5.0.2" targetFramework="net461" />
<package id="EntityFramework" version="6.2.0" targetFramework="net461" /> <package id="EntityFramework" version="6.2.0" targetFramework="net461" />
<package id="Google.Protobuf" version="3.5.1" targetFramework="net461" /> <package id="Google.Protobuf" version="3.5.1" targetFramework="net461" />
<package id="Markdig" version="0.15.5" targetFramework="net461" />
<package id="Microsoft.AspNet.Mvc" version="5.2.4" targetFramework="net461" /> <package id="Microsoft.AspNet.Mvc" version="5.2.4" targetFramework="net461" />
<package id="Microsoft.AspNet.Razor" version="3.2.4" targetFramework="net461" /> <package id="Microsoft.AspNet.Razor" version="3.2.4" targetFramework="net461" />
<package id="Microsoft.AspNet.TelemetryCorrelation" version="1.0.0" targetFramework="net461" /> <package id="Microsoft.AspNet.TelemetryCorrelation" version="1.0.0" targetFramework="net461" />
@@ -20,6 +21,5 @@
<package id="Newtonsoft.Json" version="11.0.1" targetFramework="net461" /> <package id="Newtonsoft.Json" version="11.0.1" targetFramework="net461" />
<package id="System.Diagnostics.DiagnosticSource" version="4.4.1" targetFramework="net461" /> <package id="System.Diagnostics.DiagnosticSource" version="4.4.1" targetFramework="net461" />
<package id="Unclassified.NetRevisionTask" version="0.2.5" targetFramework="net461" developmentDependency="true" /> <package id="Unclassified.NetRevisionTask" version="0.2.5" targetFramework="net461" developmentDependency="true" />
<package id="Velyo.AspNet.Markdown" version="1.0.26.6184" targetFramework="net461" />
<package id="WebGrease" version="1.6.0" targetFramework="net461" /> <package id="WebGrease" version="1.6.0" targetFramework="net461" />
</packages> </packages>

View File

@@ -1,4 +1,5 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> <wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/HtmlFormatter/DeleteQuotesInSpaceFreeText/@EntryValue">False</s:Boolean>
<s:String x:Key="/Default/CodeStyle/CSharpFileLayoutPatterns/Pattern/@EntryValue">&lt;?xml version="1.0" encoding="utf-16"?&gt;&#xD; <s:String x:Key="/Default/CodeStyle/CSharpFileLayoutPatterns/Pattern/@EntryValue">&lt;?xml version="1.0" encoding="utf-16"?&gt;&#xD;
&lt;Patterns xmlns="urn:schemas-jetbrains-com:member-reordering-patterns"&gt;&#xD; &lt;Patterns xmlns="urn:schemas-jetbrains-com:member-reordering-patterns"&gt;&#xD;
&lt;TypePattern DisplayName="Non-reorderable types"&gt;&#xD; &lt;TypePattern DisplayName="Non-reorderable types"&gt;&#xD;
@@ -178,5 +179,6 @@
&lt;/Patterns&gt;</s:String> &lt;/Patterns&gt;</s:String>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EAlwaysTreatStructAsNotReorderableMigration/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EAlwaysTreatStructAsNotReorderableMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=ATAPI/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=ATAPI/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Claunia/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=EVPD/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=EVPD/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Portillo/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary> <s:Boolean x:Key="/Default/UserDictionary/Words/=Portillo/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>