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

View File

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