Add MagiC operating system detection.

This commit is contained in:
2018-03-02 12:27:53 +00:00
parent 90f178d5dd
commit 54edd46223
2 changed files with 13 additions and 9 deletions

View File

@@ -109,9 +109,8 @@ namespace libexeinfo
public bool Recognized { get; private set; }
public string Type { get; private set; }
public IEnumerable<Architecture> Architectures => new[] {Architecture.M68K};
public OperatingSystem RequiredOperatingSystem =>
new OperatingSystem {Name = Header.mint == MINT_SIGNATURE ? "MiNT" : "Atari TOS"};
public IEnumerable<string> Strings { get; private set; }
public OperatingSystem RequiredOperatingSystem { get; private set; }
public IEnumerable<string> Strings { get; private set; }
void Initialize()
{
@@ -122,8 +121,8 @@ namespace libexeinfo
byte[] buffer = new byte[Marshal.SizeOf(typeof(AtariHeader))];
BaseStream.Position = 0;
BaseStream.Read(buffer, 0, buffer.Length);
Header = BigEndianMarshal.ByteArrayToStructureBigEndian<AtariHeader>(buffer);
Recognized = Header.signature == SIGNATURE;
Header = BigEndianMarshal.ByteArrayToStructureBigEndian<AtariHeader>(buffer);
Recognized = Header.signature == SIGNATURE;
List<string> strings = new List<string>();
if(!Recognized) return;
@@ -145,6 +144,8 @@ namespace libexeinfo
}
}
RequiredOperatingSystem = new OperatingSystem {Name = Header.mint == MINT_SIGNATURE ? "MiNT" : "Atari TOS"};
if(ResourceStream == null) return;
buffer = new byte[Marshal.SizeOf(typeof(GEM.GemResourceHeader))];
@@ -161,7 +162,9 @@ namespace libexeinfo
buffer = new byte[Marshal.SizeOf(typeof(GEM.MagiCResourceHeader))];
ResourceStream.Position = 0;
ResourceStream.Read(buffer, 0, buffer.Length);
ResourceHeader = BigEndianMarshal.ByteArrayToStructureBigEndian<GEM.MagiCResourceHeader>(buffer);
ResourceHeader =
BigEndianMarshal.ByteArrayToStructureBigEndian<GEM.MagiCResourceHeader>(buffer);
RequiredOperatingSystem = new OperatingSystem {Name = "MagiC"};
}
else ResourceHeader = GEM.GemToMagiC(gemResourceHeader);

View File

@@ -29,7 +29,6 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Security;
using Claunia.Encoding;
namespace libexeinfo
@@ -135,7 +134,7 @@ namespace libexeinfo
if(!Recognized) return;
Type = "DOS Executable (MZ)";
Type = "DOS Executable (MZ)";
RequiredOperatingSystem = new OperatingSystem {Name = "DOS"};
if(ResourceStream == null) return;
@@ -156,7 +155,9 @@ namespace libexeinfo
buffer = new byte[Marshal.SizeOf(typeof(GEM.MagiCResourceHeader))];
ResourceStream.Position = 0;
ResourceStream.Read(buffer, 0, buffer.Length);
ResourceHeader = BigEndianMarshal.ByteArrayToStructureLittleEndian<GEM.MagiCResourceHeader>(buffer);
ResourceHeader =
BigEndianMarshal.ByteArrayToStructureLittleEndian<GEM.MagiCResourceHeader>(buffer);
RequiredOperatingSystem = new OperatingSystem {Name = "MagiC"};
}
else ResourceHeader = GEM.GemToMagiC(gemResourceHeader);