diff --git a/.idea/.idea.DiscImageChef/.idea/contentModel.xml b/.idea/.idea.DiscImageChef/.idea/contentModel.xml
index cfec869cc..1787ded17 100644
--- a/.idea/.idea.DiscImageChef/.idea/contentModel.xml
+++ b/.idea/.idea.DiscImageChef/.idea/contentModel.xml
@@ -1622,6 +1622,8 @@
+
+
diff --git a/DiscImageChef.Gui/Panels/pnlDeviceInfo.xeto b/DiscImageChef.Gui/Panels/pnlDeviceInfo.xeto
index cdedb54b3..621eed037 100644
--- a/DiscImageChef.Gui/Panels/pnlDeviceInfo.xeto
+++ b/DiscImageChef.Gui/Panels/pnlDeviceInfo.xeto
@@ -156,27 +156,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/DiscImageChef.Gui/Panels/pnlDeviceInfo.xeto.cs b/DiscImageChef.Gui/Panels/pnlDeviceInfo.xeto.cs
index 94ca5a3fc..deb987292 100644
--- a/DiscImageChef.Gui/Panels/pnlDeviceInfo.xeto.cs
+++ b/DiscImageChef.Gui/Panels/pnlDeviceInfo.xeto.cs
@@ -86,86 +86,9 @@ namespace DiscImageChef.Gui.Panels
if(devInfo.IsPcmcia)
{
- tabPcmcia.Visible = true;
-
- TreeGridItemCollection cisList = new TreeGridItemCollection();
-
- treePcmcia.Columns.Add(new GridColumn {HeaderText = "CIS", DataCell = new TextBoxCell(0)});
-
- treePcmcia.AllowMultipleSelection = false;
- treePcmcia.ShowHeader = false;
- treePcmcia.DataStore = cisList;
-
- Tuple[] tuples = CIS.GetTuples(devInfo.Cis);
- if(tuples != null)
- foreach(Tuple tuple in tuples)
- {
- string tupleCode;
- string tupleDescription;
-
- switch(tuple.Code)
- {
- case TupleCodes.CISTPL_NULL:
- case TupleCodes.CISTPL_END: continue;
- case TupleCodes.CISTPL_DEVICEGEO:
- case TupleCodes.CISTPL_DEVICEGEO_A:
- tupleCode = "Device Geometry Tuples";
- tupleDescription = CIS.PrettifyDeviceGeometryTuple(tuple);
- break;
- case TupleCodes.CISTPL_MANFID:
- tupleCode = "Manufacturer Identification Tuple";
- tupleDescription = CIS.PrettifyManufacturerIdentificationTuple(tuple);
- break;
- case TupleCodes.CISTPL_VERS_1:
- tupleCode = "Level 1 Version / Product Information Tuple";
- tupleDescription = CIS.PrettifyLevel1VersionTuple(tuple);
- break;
- case TupleCodes.CISTPL_ALTSTR:
- case TupleCodes.CISTPL_BAR:
- case TupleCodes.CISTPL_BATTERY:
- case TupleCodes.CISTPL_BYTEORDER:
- case TupleCodes.CISTPL_CFTABLE_ENTRY:
- case TupleCodes.CISTPL_CFTABLE_ENTRY_CB:
- case TupleCodes.CISTPL_CHECKSUM:
- case TupleCodes.CISTPL_CONFIG:
- case TupleCodes.CISTPL_CONFIG_CB:
- case TupleCodes.CISTPL_DATE:
- case TupleCodes.CISTPL_DEVICE:
- case TupleCodes.CISTPL_DEVICE_A:
- case TupleCodes.CISTPL_DEVICE_OA:
- case TupleCodes.CISTPL_DEVICE_OC:
- case TupleCodes.CISTPL_EXTDEVIC:
- case TupleCodes.CISTPL_FORMAT:
- case TupleCodes.CISTPL_FORMAT_A:
- case TupleCodes.CISTPL_FUNCE:
- case TupleCodes.CISTPL_FUNCID:
- case TupleCodes.CISTPL_GEOMETRY:
- case TupleCodes.CISTPL_INDIRECT:
- case TupleCodes.CISTPL_JEDEC_A:
- case TupleCodes.CISTPL_JEDEC_C:
- case TupleCodes.CISTPL_LINKTARGET:
- case TupleCodes.CISTPL_LONGLINK_A:
- case TupleCodes.CISTPL_LONGLINK_C:
- case TupleCodes.CISTPL_LONGLINK_CB:
- case TupleCodes.CISTPL_LONGLINK_MFC:
- case TupleCodes.CISTPL_NO_LINK:
- case TupleCodes.CISTPL_ORG:
- case TupleCodes.CISTPL_PWR_MGMNT:
- case TupleCodes.CISTPL_SPCL:
- case TupleCodes.CISTPL_SWIL:
- case TupleCodes.CISTPL_VERS_2:
- tupleCode = $"Undecoded tuple ID {tuple.Code}";
- tupleDescription = $"Undecoded tuple ID {tuple.Code}";
- break;
- default:
- tupleCode = $"0x{(byte)tuple.Code:X2}";
- tupleDescription = $"Found unknown tuple ID 0x{(byte)tuple.Code:X2}";
- break;
- }
-
- cisList.Add(new TreeGridItem {Values = new object[] {tupleCode, tupleDescription}});
- }
- else DicConsole.DebugWriteLine("Device-Info command", "PCMCIA CIS returned no tuples");
+ tabPcmciaInfo tabPcmciaInfo = new tabPcmciaInfo();
+ tabPcmciaInfo.LoadData(devInfo.Cis);
+ tabInfos.Pages.Add(tabPcmciaInfo);
}
if(devInfo.AtaIdentify != null || devInfo.AtapiIdentify != null)
diff --git a/DiscImageChef.Gui/Panels/pnlImageInfo.xeto.cs b/DiscImageChef.Gui/Panels/pnlImageInfo.xeto.cs
index d921c52e2..34bc1d825 100644
--- a/DiscImageChef.Gui/Panels/pnlImageInfo.xeto.cs
+++ b/DiscImageChef.Gui/Panels/pnlImageInfo.xeto.cs
@@ -563,6 +563,16 @@ namespace DiscImageChef.Gui.Panels
tabXboxInfo tabXboxInfo = new tabXboxInfo();
tabXboxInfo.LoadData(null, xboxDmi, xboxSecuritySector, decodedXboxSecuritySector);
tabInfos.Pages.Add(tabXboxInfo);
+
+ byte[] pcmciaCis = null;
+
+ if(imageFormat.Info.ReadableMediaTags != null &&
+ imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.PCMCIA_CIS))
+ pcmciaCis = imageFormat.ReadDiskTag(MediaTagType.PCMCIA_CIS);
+
+ tabPcmciaInfo tabPcmciaInfo = new tabPcmciaInfo();
+ tabPcmciaInfo.LoadData(pcmciaCis);
+ tabInfos.Pages.Add(tabPcmciaInfo);
}
#region XAML controls
diff --git a/DiscImageChef.Gui/Tabs/tabPcmciaInfo.xeto b/DiscImageChef.Gui/Tabs/tabPcmciaInfo.xeto
new file mode 100644
index 000000000..faae41665
--- /dev/null
+++ b/DiscImageChef.Gui/Tabs/tabPcmciaInfo.xeto
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/DiscImageChef.Gui/Tabs/tabPcmciaInfo.xeto.cs b/DiscImageChef.Gui/Tabs/tabPcmciaInfo.xeto.cs
new file mode 100644
index 000000000..287e1a0da
--- /dev/null
+++ b/DiscImageChef.Gui/Tabs/tabPcmciaInfo.xeto.cs
@@ -0,0 +1,170 @@
+// /***************************************************************************
+// The Disc Image Chef
+// ----------------------------------------------------------------------------
+//
+// Filename : pnlDeviceInfo.xeto.cs
+// Author(s) : Natalia Portillo
+//
+// Component : Device information.
+//
+// --[ Description ] ----------------------------------------------------------
+//
+// Implements the device information panel.
+//
+// --[ License ] --------------------------------------------------------------
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General public License for more details.
+//
+// You should have received a copy of the GNU General public License
+// along with this program. If not, see .
+//
+// ----------------------------------------------------------------------------
+// Copyright © 2011-2018 Natalia Portillo
+// ****************************************************************************/
+
+using System;
+using System.IO;
+using DiscImageChef.Console;
+using DiscImageChef.Decoders.PCMCIA;
+using Eto.Forms;
+using Eto.Serialization.Xaml;
+using Tuple = DiscImageChef.Decoders.PCMCIA.Tuple;
+
+namespace DiscImageChef.Gui.Panels
+{
+ public class tabPcmciaInfo : TabPage
+ {
+ byte[] cis;
+
+ public tabPcmciaInfo()
+ {
+ XamlReader.Load(this);
+ }
+
+ internal void LoadData(byte[] pcmciaCis)
+ {
+ if(pcmciaCis == null) return;
+
+ cis = pcmciaCis;
+ Visible = true;
+
+ TreeGridItemCollection cisList = new TreeGridItemCollection();
+
+ treePcmcia.Columns.Add(new GridColumn {HeaderText = "CIS", DataCell = new TextBoxCell(0)});
+
+ treePcmcia.AllowMultipleSelection = false;
+ treePcmcia.ShowHeader = false;
+ treePcmcia.DataStore = cisList;
+
+ Tuple[] tuples = CIS.GetTuples(cis);
+ if(tuples != null)
+ foreach(Tuple tuple in tuples)
+ {
+ string tupleCode;
+ string tupleDescription;
+
+ switch(tuple.Code)
+ {
+ case TupleCodes.CISTPL_NULL:
+ case TupleCodes.CISTPL_END: continue;
+ case TupleCodes.CISTPL_DEVICEGEO:
+ case TupleCodes.CISTPL_DEVICEGEO_A:
+ tupleCode = "Device Geometry Tuples";
+ tupleDescription = CIS.PrettifyDeviceGeometryTuple(tuple);
+ break;
+ case TupleCodes.CISTPL_MANFID:
+ tupleCode = "Manufacturer Identification Tuple";
+ tupleDescription = CIS.PrettifyManufacturerIdentificationTuple(tuple);
+ break;
+ case TupleCodes.CISTPL_VERS_1:
+ tupleCode = "Level 1 Version / Product Information Tuple";
+ tupleDescription = CIS.PrettifyLevel1VersionTuple(tuple);
+ break;
+ case TupleCodes.CISTPL_ALTSTR:
+ case TupleCodes.CISTPL_BAR:
+ case TupleCodes.CISTPL_BATTERY:
+ case TupleCodes.CISTPL_BYTEORDER:
+ case TupleCodes.CISTPL_CFTABLE_ENTRY:
+ case TupleCodes.CISTPL_CFTABLE_ENTRY_CB:
+ case TupleCodes.CISTPL_CHECKSUM:
+ case TupleCodes.CISTPL_CONFIG:
+ case TupleCodes.CISTPL_CONFIG_CB:
+ case TupleCodes.CISTPL_DATE:
+ case TupleCodes.CISTPL_DEVICE:
+ case TupleCodes.CISTPL_DEVICE_A:
+ case TupleCodes.CISTPL_DEVICE_OA:
+ case TupleCodes.CISTPL_DEVICE_OC:
+ case TupleCodes.CISTPL_EXTDEVIC:
+ case TupleCodes.CISTPL_FORMAT:
+ case TupleCodes.CISTPL_FORMAT_A:
+ case TupleCodes.CISTPL_FUNCE:
+ case TupleCodes.CISTPL_FUNCID:
+ case TupleCodes.CISTPL_GEOMETRY:
+ case TupleCodes.CISTPL_INDIRECT:
+ case TupleCodes.CISTPL_JEDEC_A:
+ case TupleCodes.CISTPL_JEDEC_C:
+ case TupleCodes.CISTPL_LINKTARGET:
+ case TupleCodes.CISTPL_LONGLINK_A:
+ case TupleCodes.CISTPL_LONGLINK_C:
+ case TupleCodes.CISTPL_LONGLINK_CB:
+ case TupleCodes.CISTPL_LONGLINK_MFC:
+ case TupleCodes.CISTPL_NO_LINK:
+ case TupleCodes.CISTPL_ORG:
+ case TupleCodes.CISTPL_PWR_MGMNT:
+ case TupleCodes.CISTPL_SPCL:
+ case TupleCodes.CISTPL_SWIL:
+ case TupleCodes.CISTPL_VERS_2:
+ tupleCode = $"Undecoded tuple ID {tuple.Code}";
+ tupleDescription = $"Undecoded tuple ID {tuple.Code}";
+ break;
+ default:
+ tupleCode = $"0x{(byte)tuple.Code:X2}";
+ tupleDescription = $"Found unknown tuple ID 0x{(byte)tuple.Code:X2}";
+ break;
+ }
+
+ cisList.Add(new TreeGridItem {Values = new object[] {tupleCode, tupleDescription}});
+ }
+ else DicConsole.DebugWriteLine("Device-Info command", "PCMCIA CIS returned no tuples");
+ }
+
+ protected void OnTreePcmciaSelectedItemChanged(object sender, EventArgs e)
+ {
+ if(!(treePcmcia.SelectedItem is TreeGridItem item)) return;
+
+ txtPcmciaCis.Text = item.Values[1] as string;
+ }
+
+ protected void OnBtnSavePcmciaCis(object sender, EventArgs e)
+ {
+ SaveFileDialog dlgSaveBinary = new SaveFileDialog();
+ dlgSaveBinary.Filters.Add(new FileFilter {Extensions = new[] {"*.bin"}, Name = "Binary"});
+ DialogResult result = dlgSaveBinary.ShowDialog(this);
+
+ if(result != DialogResult.Ok) return;
+
+ FileStream saveFs = new FileStream(dlgSaveBinary.FileName, FileMode.Create);
+ saveFs.Write(cis, 0, cis.Length);
+
+ saveFs.Close();
+ }
+
+ #region XAML controls
+ #pragma warning disable 169
+ #pragma warning disable 649
+ TreeGridView treePcmcia;
+ TextArea txtPcmciaCis;
+ Button btnSavePcmciaCis;
+ #pragma warning restore 169
+ #pragma warning restore 649
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/DiscImageChef.Gui/Tabs/tabXboxInfo.xeto.cs b/DiscImageChef.Gui/Tabs/tabXboxInfo.xeto.cs
index d6a39185a..1cfc3fd40 100644
--- a/DiscImageChef.Gui/Tabs/tabXboxInfo.xeto.cs
+++ b/DiscImageChef.Gui/Tabs/tabXboxInfo.xeto.cs
@@ -41,7 +41,7 @@ namespace DiscImageChef.Gui.Panels
{
public class tabXboxInfo : TabPage
{
- byte[] XboxSecuritySector;
+ byte[] xboxSecuritySector;
public tabXboxInfo()
{
@@ -51,7 +51,7 @@ namespace DiscImageChef.Gui.Panels
internal void LoadData(XgdInfo xgdInfo, byte[] dmi, byte[] securitySector,
SS.SecuritySector? decodedSecuritySector)
{
- XboxSecuritySector = securitySector;
+ xboxSecuritySector = securitySector;
if(xgdInfo != null)
{
@@ -105,7 +105,7 @@ namespace DiscImageChef.Gui.Panels
protected void OnBtnSaveXboxSsClick(object sender, EventArgs e)
{
- SaveElement(XboxSecuritySector);
+ SaveElement(xboxSecuritySector);
}
#region XAML controls