diff --git a/Claunia.RsrcFork.CLI/Program.cs b/Claunia.RsrcFork.CLI/Program.cs
index a50dc4b..69d6048 100644
--- a/Claunia.RsrcFork.CLI/Program.cs
+++ b/Claunia.RsrcFork.CLI/Program.cs
@@ -23,16 +23,17 @@
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
+
using System;
using System.IO;
-using System.Text;
using System.Linq;
+using System.Text;
namespace Claunia.RsrcFork.CLI
{
class MainClass
{
- public static void Main (string [] args)
+ public static void Main(string[] args)
{
Console.WriteLine("Claunia.RsrcFork.CLI");
Console.WriteLine("© 2016 Natalia Portillo");
@@ -68,20 +69,17 @@ namespace Claunia.RsrcFork.CLI
typeBytes = typeBytes.Reverse().ToArray();
string typeName = Types.GetName(type);
if(typeName != null)
- Console.WriteLine("\"{0}\" (0x{1:X8}) - {2}", Encoding.ASCII.GetString(typeBytes), type, typeName);
- else
- Console.WriteLine("\"{0}\" (0x{1:X8})", Encoding.ASCII.GetString(typeBytes), type);
+ Console.WriteLine("\"{0}\" (0x{1:X8}) - {2}", Encoding.ASCII.GetString(typeBytes), type,
+ typeName);
+ else Console.WriteLine("\"{0}\" (0x{1:X8})", Encoding.ASCII.GetString(typeBytes), type);
Resource rez = rsrc.GetResource(type);
- Console.WriteLine("{0,6}{1,8}\t{2}", "ID", "Length", "Name");
+ Console.WriteLine("{0,6}{1,8}\t{2}", "ID", "Length", "Name");
Console.WriteLine("{0,6}{1,8}--{2}", "------", "--------", "----------------");
foreach(short id in rez.GetIds())
- {
if(rez.GetName(id) != null)
Console.WriteLine("{0,6}{1,8}\t\"{2}\"", id, rez.GetLength(id), rez.GetName(id));
- else
- Console.WriteLine("{0,6}{1,8}", id, rez.GetLength(id));
- }
+ else Console.WriteLine("{0,6}{1,8}", id, rez.GetLength(id));
Console.WriteLine();
}
@@ -130,14 +128,15 @@ namespace Claunia.RsrcFork.CLI
Resource rez = rsrc.GetResource(type);
foreach(short id in rez.GetIds())
{
- outStream = new FileStream(Path.Combine(args[2], Encoding.ASCII.GetString(typeBytes), string.Format("{0}", id)), FileMode.Create, FileAccess.ReadWrite);
+ outStream =
+ new
+ FileStream(Path.Combine(args[2], Encoding.ASCII.GetString(typeBytes), string.Format("{0}", id)),
+ FileMode.Create, FileAccess.ReadWrite);
byte[] rez_b = rez.GetResource(id);
outStream.Write(rez_b, 0, rez_b.Length);
outStream.Close();
}
}
-
- return;
}
}
@@ -149,4 +148,4 @@ namespace Claunia.RsrcFork.CLI
Console.WriteLine("\tClaunia.RsrcFork.CLI.EXE -x -o output.dir resourcefork.bin - Extracts all resources to output.dir");
}
}
-}
+}
\ No newline at end of file
diff --git a/Claunia.RsrcFork.CLI/Properties/AssemblyInfo.cs b/Claunia.RsrcFork.CLI/Properties/AssemblyInfo.cs
index cb23762..52b9ed4 100644
--- a/Claunia.RsrcFork.CLI/Properties/AssemblyInfo.cs
+++ b/Claunia.RsrcFork.CLI/Properties/AssemblyInfo.cs
@@ -23,30 +23,29 @@
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
+
using System.Reflection;
-using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
-[assembly: AssemblyTitle ("Claunia.RsrcFork.CLI")]
-[assembly: AssemblyDescription ("")]
-[assembly: AssemblyConfiguration ("")]
-[assembly: AssemblyCompany ("Claunia.com")]
-[assembly: AssemblyProduct ("")]
-[assembly: AssemblyCopyright ("© Claunia.com")]
-[assembly: AssemblyTrademark ("")]
-[assembly: AssemblyCulture ("")]
+[assembly: AssemblyTitle("Claunia.RsrcFork.CLI")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Claunia.com")]
+[assembly: AssemblyProduct("")]
+[assembly: AssemblyCopyright("© Claunia.com")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
-[assembly: AssemblyVersion ("1.0.*")]
+[assembly: AssemblyVersion("1.0.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.
//[assembly: AssemblyDelaySign(false)]
-//[assembly: AssemblyKeyFile("")]
-
+//[assembly: AssemblyKeyFile("")]
\ No newline at end of file
diff --git a/Claunia.RsrcFork.Test/Test.cs b/Claunia.RsrcFork.Test/Test.cs
index 0943bd8..1893e4f 100644
--- a/Claunia.RsrcFork.Test/Test.cs
+++ b/Claunia.RsrcFork.Test/Test.cs
@@ -33,15 +33,19 @@ namespace Claunia.RsrcFork.Test
[TestFixture]
public class Test
{
- readonly byte[] DC42_Vers = { 0x06, 0x40, 0x80, 0x00, 0x00, 0x00, 0x09, 0x44, 0x69, 0x73, 0x6B, 0x20, 0x43, 0x6F, 0x70, 0x79, 0x1C, 0x34, 0x2E, 0x32, 0x2C,
- 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6B, 0x73, 0x75, 0x6D, 0x3D, 0x24, 0x41, 0x35, 0x31, 0x34, 0x37, 0x46, 0x37, 0x45 };
- readonly byte[] DC42_Str = { 0x09, 0x44, 0x69, 0x73, 0x6B, 0x20, 0x43, 0x6F, 0x70, 0x79 };
+ readonly byte[] DC42_Vers =
+ {
+ 0x06, 0x40, 0x80, 0x00, 0x00, 0x00, 0x09, 0x44, 0x69, 0x73, 0x6B, 0x20, 0x43, 0x6F, 0x70, 0x79, 0x1C,
+ 0x34, 0x2E, 0x32, 0x2C, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6B, 0x73, 0x75,
+ 0x6D, 0x3D, 0x24, 0x41, 0x35, 0x31, 0x34, 0x37, 0x46, 0x37, 0x45
+ };
+ readonly byte[] DC42_Str = {0x09, 0x44, 0x69, 0x73, 0x6B, 0x20, 0x43, 0x6F, 0x70, 0x79};
[Test]
public void TestDC42()
{
- FileStream dc42Stream = new FileStream("Samples/DiskCopy42.rsrc", FileMode.Open, FileAccess.Read);
- ResourceFork rsrc = new ResourceFork(dc42Stream);
+ FileStream dc42Stream = new FileStream("Samples/DiskCopy42.rsrc", FileMode.Open, FileAccess.Read);
+ ResourceFork rsrc = new ResourceFork(dc42Stream);
uint[] types = rsrc.GetTypes();
Assert.AreEqual(0x53545220, types[0]);
@@ -52,7 +56,7 @@ namespace Claunia.RsrcFork.Test
short[] str_Ids = str_.GetIds();
Assert.AreEqual(-16396, str_Ids[0]);
- Assert.AreEqual(10, str_.GetLength(-16396));
+ Assert.AreEqual(10, str_.GetLength(-16396));
byte[] str1 = str_.GetResource(-16396);
Assert.AreEqual(DC42_Str, str1);
@@ -63,7 +67,7 @@ namespace Claunia.RsrcFork.Test
Resource vers = rsrc.GetResource(0x76657273);
Assert.IsNotNull(vers);
short[] versIds = vers.GetIds();
- Assert.AreEqual(1, versIds[0]);
+ Assert.AreEqual(1, versIds[0]);
Assert.AreEqual(45, vers.GetLength(1));
byte[] vers1 = vers.GetResource(1);
@@ -73,20 +77,20 @@ namespace Claunia.RsrcFork.Test
Assert.IsNull(versStr);
Version versDec = new Version(vers1);
- Assert.AreEqual(6, versDec.MajorVersion);
- Assert.AreEqual(40, versDec.MinorVersion);
+ Assert.AreEqual(6, versDec.MajorVersion);
+ Assert.AreEqual(40, versDec.MinorVersion);
Assert.AreEqual(Version.DevelopmentStage.Final, versDec.DevStage);
- Assert.AreEqual(0, versDec.PreReleaseVersion);
- Assert.AreEqual(0, versDec.RegionCode);
- Assert.AreEqual("Disk Copy", versDec.VersionString);
+ Assert.AreEqual(0, versDec.PreReleaseVersion);
+ Assert.AreEqual(0, versDec.RegionCode);
+ Assert.AreEqual("Disk Copy", versDec.VersionString);
Assert.AreEqual("4.2, data checksum=$A5147F7E", versDec.VersionMessage);
}
[Test]
public void TestDC6()
{
- FileStream dc6Stream = new FileStream("Samples/DiskCopy6.rsrc", FileMode.Open, FileAccess.Read);
- ResourceFork rsrc = new ResourceFork(dc6Stream);
+ FileStream dc6Stream = new FileStream("Samples/DiskCopy6.rsrc", FileMode.Open, FileAccess.Read);
+ ResourceFork rsrc = new ResourceFork(dc6Stream);
uint[] types = rsrc.GetTypes();
Assert.AreEqual(0x53545220, types[0]);
@@ -99,7 +103,7 @@ namespace Claunia.RsrcFork.Test
short[] str_Ids = str_.GetIds();
Assert.AreEqual(-16396, str_Ids[0]);
- Assert.AreEqual(10, str_.GetLength(-16396));
+ Assert.AreEqual(10, str_.GetLength(-16396));
byte[] str1 = str_.GetResource(-16396);
Assert.AreEqual(DC42_Str, str1);
@@ -110,7 +114,7 @@ namespace Claunia.RsrcFork.Test
Resource vers = rsrc.GetResource(0x76657273);
Assert.IsNotNull(vers);
short[] versIds = vers.GetIds();
- Assert.AreEqual(1, versIds[0]);
+ Assert.AreEqual(1, versIds[0]);
Assert.AreEqual(66, vers.GetLength(1));
string versStr = vers.GetName(1);
@@ -132,25 +136,25 @@ namespace Claunia.RsrcFork.Test
string bceSStr = bceS.GetName(128);
Assert.IsNull(bceSStr);
- byte[] vers1 = vers.GetResource(1);
+ byte[] vers1 = vers.GetResource(1);
Version versDec = new Version(vers1);
- Assert.AreEqual(6, versDec.MajorVersion);
- Assert.AreEqual(40, versDec.MinorVersion);
- Assert.AreEqual(Version.DevelopmentStage.Final, versDec.DevStage);
- Assert.AreEqual(0, versDec.PreReleaseVersion);
- Assert.AreEqual(0, versDec.RegionCode);
- Assert.AreEqual("6.4 Disk Copy", versDec.VersionString);
+ Assert.AreEqual(6, versDec.MajorVersion);
+ Assert.AreEqual(40, versDec.MinorVersion);
+ Assert.AreEqual(Version.DevelopmentStage.Final, versDec.DevStage);
+ Assert.AreEqual(0, versDec.PreReleaseVersion);
+ Assert.AreEqual(0, versDec.RegionCode);
+ Assert.AreEqual("6.4 Disk Copy", versDec.VersionString);
Assert.AreEqual("Mac? OS HFS 1680K disk image\rCRC28: $07213FB7", versDec.VersionMessage);
}
[Test]
public void TestSMI()
{
- FileStream smiStream = new FileStream("Samples/SelfMountingImage.rsrc", FileMode.Open, FileAccess.Read);
- ResourceFork rsrc = new ResourceFork(smiStream);
+ FileStream smiStream = new FileStream("Samples/SelfMountingImage.rsrc", FileMode.Open, FileAccess.Read);
+ ResourceFork rsrc = new ResourceFork(smiStream);
uint[] types = rsrc.GetTypes();
- Assert.AreEqual(29, types.Length);
+ Assert.AreEqual(29, types.Length);
Assert.AreEqual(0x424E444C, types[0]);
Assert.AreEqual(0x434F4445, types[1]);
Assert.AreEqual(0x44415441, types[2]);
@@ -166,8 +170,8 @@ namespace Claunia.RsrcFork.Test
Resource code = rsrc.GetResource(0x434F4445);
Assert.IsNotNull(code);
short[] codeIds = code.GetIds();
- Assert.AreEqual(0, codeIds[0]);
- Assert.AreEqual(1, codeIds[1]);
+ Assert.AreEqual(0, codeIds[0]);
+ Assert.AreEqual(1, codeIds[1]);
Assert.AreEqual(35130, code.GetLength(1));
string codeStr = code.GetName(1);
Assert.AreEqual("First Segment", codeStr); //"First Segment"
@@ -176,38 +180,38 @@ namespace Claunia.RsrcFork.Test
Assert.IsNotNull(bndl);
short[] bndlIds = bndl.GetIds();
Assert.AreEqual(128, bndlIds[0]);
- Assert.AreEqual(28, bndl.GetLength(128));
+ Assert.AreEqual(28, bndl.GetLength(128));
string bndlStr = bndl.GetName(128);
Assert.IsNull(bndlStr);
Resource vers = rsrc.GetResource(0x76657273);
Assert.IsNotNull(vers);
- byte[] vers1 = vers.GetResource(1);
+ byte[] vers1 = vers.GetResource(1);
Version versDec = new Version(vers1);
- Assert.AreEqual(1, versDec.MajorVersion);
- Assert.AreEqual(10, versDec.MinorVersion);
- Assert.AreEqual(Version.DevelopmentStage.Beta, versDec.DevStage);
- Assert.AreEqual(6, versDec.PreReleaseVersion);
- Assert.AreEqual(0, versDec.RegionCode);
- Assert.AreEqual("1.1b6", versDec.VersionString);
+ Assert.AreEqual(1, versDec.MajorVersion);
+ Assert.AreEqual(10, versDec.MinorVersion);
+ Assert.AreEqual(Version.DevelopmentStage.Beta, versDec.DevStage);
+ Assert.AreEqual(6, versDec.PreReleaseVersion);
+ Assert.AreEqual(0, versDec.RegionCode);
+ Assert.AreEqual("1.1b6", versDec.VersionString);
Assert.AreEqual("1.1b6, Copyright 1997-2001 Apple Computer, Inc.", versDec.VersionMessage);
}
[Test]
public void TestUDIF()
{
- FileStream udifStream = new FileStream("Samples/UDIF.rsrc", FileMode.Open, FileAccess.Read);
- ResourceFork rsrc = new ResourceFork(udifStream);
+ FileStream udifStream = new FileStream("Samples/UDIF.rsrc", FileMode.Open, FileAccess.Read);
+ ResourceFork rsrc = new ResourceFork(udifStream);
uint[] types = rsrc.GetTypes();
- Assert.AreEqual(2, types.Length);
+ Assert.AreEqual(2, types.Length);
Assert.AreEqual(0x626C6B78, types[0]);
Assert.AreEqual(0x706C7374, types[1]);
Resource blkx = rsrc.GetResource(0x626C6B78);
Assert.IsNotNull(blkx);
short[] blkxIds = blkx.GetIds();
- Assert.AreEqual(0, blkxIds[0]);
+ Assert.AreEqual(0, blkxIds[0]);
Assert.AreEqual(524, blkx.GetLength(0));
string blkxStr = blkx.GetName(0);
Assert.AreEqual("Whole Device (Apple_XXX : 0)", blkxStr); //"First Segment"
@@ -215,7 +219,7 @@ namespace Claunia.RsrcFork.Test
Resource plst = rsrc.GetResource(0x706C7374);
Assert.IsNotNull(plst);
short[] plstIds = plst.GetIds();
- Assert.AreEqual(0, plstIds[0]);
+ Assert.AreEqual(0, plstIds[0]);
Assert.AreEqual(1544, plst.GetLength(0));
string plstStr = plst.GetName(0);
Assert.IsNull(plstStr);
@@ -224,5 +228,4 @@ namespace Claunia.RsrcFork.Test
Assert.IsNull(vers);
}
}
-}
-
+}
\ No newline at end of file
diff --git a/Claunia.RsrcFork/PascalString.cs b/Claunia.RsrcFork/PascalString.cs
index 94430ad..d47fde5 100644
--- a/Claunia.RsrcFork/PascalString.cs
+++ b/Claunia.RsrcFork/PascalString.cs
@@ -23,51 +23,48 @@
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
+
using System;
using System.Text;
+
namespace Claunia.RsrcFork
{
///
- /// Contains convertes between .NET and Pascal strings. Only ASCII supported right now.
+ /// Contains convertes between .NET and Pascal strings. Only ASCII supported right now.
///
public static class PascalString
{
///
- /// Converts an ASCII Pascal string to a .NET string.
+ /// Converts an ASCII Pascal string to a .NET string.
///
/// The .NET string.
/// The ASCII Pascal string.
public static string GetString(byte[] PStr)
{
- if(PStr == null || PStr[0] >= PStr.Length)
- return null;
+ if(PStr == null || PStr[0] >= PStr.Length) return null;
return Encoding.ASCII.GetString(PStr, 1, PStr[0]);
}
///
- /// Converts a .NET string to an ASCII Pascal string.
+ /// Converts a .NET string to an ASCII Pascal string.
///
/// The ASCII Pascal string.
/// The .NET string.
public static byte[] GetBytes(string str)
{
- if(str == null)
- return new byte[1];
+ if(str == null) return new byte[1];
byte[] str_b = Encoding.ASCII.GetBytes(str);
byte[] PStr;
- if(str_b.Length >= 256)
- PStr = new byte[256];
- else
- PStr = new byte[str_b.Length + 1];
+ if(str_b.Length >= 256) PStr = new byte[256];
+ else PStr = new byte[str_b.Length + 1];
Array.Copy(str_b, 0, PStr, 1, PStr.Length - 1);
- PStr[0] = (byte)(PStr.Length - 1);
+ PStr[0] = (byte)(PStr.Length - 1);
return PStr;
}
}
-}
-
+}
\ No newline at end of file
diff --git a/Claunia.RsrcFork/Resource.cs b/Claunia.RsrcFork/Resource.cs
index ee3e826..c1ad1dd 100644
--- a/Claunia.RsrcFork/Resource.cs
+++ b/Claunia.RsrcFork/Resource.cs
@@ -33,24 +33,18 @@ using System.Text;
namespace Claunia.RsrcFork
{
///
- /// This class represents a resource type.
+ /// This class represents a resource type.
///
public class Resource
{
- readonly Dictionary resourceNames;
+ readonly List ids;
+ readonly Dictionary resourceCache;
+ readonly Dictionary resourceNames;
readonly Dictionary resources;
- readonly Dictionary resourceCache;
- readonly Stream rsrcStream;
- readonly List ids;
-
- struct ResourceData
- {
- public long offset;
- public long length;
- }
+ readonly Stream rsrcStream;
///
- /// Initializates the specified resource type.
+ /// Initializates the specified resource type.
///
/// Stream where the resources of this reside.
/// How many resource of this type are.
@@ -58,13 +52,15 @@ namespace Claunia.RsrcFork
/// Offset from start of stream to resource name list.
/// Offset from start of stream to resource data.
/// Resource type.
- internal Resource(Stream stream, ushort resources, long referenceListOff, long resourceNameOffset, long resourceDataOffset, uint OSType)
+ internal Resource(Stream stream, ushort resources, long referenceListOff, long resourceNameOffset,
+ long resourceDataOffset, uint OSType)
{
rsrcStream = stream;
- Dictionary referenceLists = new Dictionary();
- resourceNames = new Dictionary();
+ Dictionary referenceLists =
+ new Dictionary();
+ resourceNames = new Dictionary();
this.resources = new Dictionary();
- ids = new List();
+ ids = new List();
byte[] tmp;
rsrcStream.Seek(referenceListOff + 2, SeekOrigin.Begin);
@@ -76,11 +72,11 @@ namespace Claunia.RsrcFork
item.id = BitConverter.ToInt16(tmp.Reverse().ToArray(), 0);
rsrcStream.Read(tmp, 0, 2);
item.nameOff = BitConverter.ToInt16(tmp.Reverse().ToArray(), 0);
- tmp = new byte[4];
+ tmp = new byte[4];
rsrcStream.Read(tmp, 0, 4);
item.attributes = tmp[0];
- tmp[0] = 0;
- item.dataOff = BitConverter.ToInt32(tmp.Reverse().ToArray(), 0);
+ tmp[0] = 0;
+ item.dataOff = BitConverter.ToInt32(tmp.Reverse().ToArray(), 0);
rsrcStream.Read(tmp, 0, 4);
item.handle = BitConverter.ToUInt32(tmp.Reverse().ToArray(), 0);
@@ -90,15 +86,14 @@ namespace Claunia.RsrcFork
foreach(ResourceTypeReferenceListItem item in referenceLists.Values)
{
- string name;
+ string name;
ResourceData data = new ResourceData();
- if(item.nameOff == -1)
- name = null;
+ if(item.nameOff == -1) name = null;
else
{
rsrcStream.Seek(resourceNameOffset + item.nameOff, SeekOrigin.Begin);
- byte nameLen = (byte)rsrcStream.ReadByte();
+ byte nameLen = (byte)rsrcStream.ReadByte();
byte[] nameBytes = new byte[nameLen];
rsrcStream.Read(nameBytes, 0, nameLen);
// TODO: Use MacRoman
@@ -119,7 +114,7 @@ namespace Claunia.RsrcFork
}
///
- /// Gets the name of the specified resource id, or null if there is no name.
+ /// Gets the name of the specified resource id, or null if there is no name.
///
/// The name.
/// Identifier.
@@ -130,7 +125,7 @@ namespace Claunia.RsrcFork
}
///
- /// Gets the resource contents.
+ /// Gets the resource contents.
///
/// The resource.
/// Identifier.
@@ -138,13 +133,11 @@ namespace Claunia.RsrcFork
{
byte[] resource;
- if(resourceCache.TryGetValue(id, out resource))
- return resource;
+ if(resourceCache.TryGetValue(id, out resource)) return resource;
ResourceData data;
- if(!resources.TryGetValue(id, out data))
- return null;
+ if(!resources.TryGetValue(id, out data)) return null;
resource = new byte[data.length];
rsrcStream.Seek(data.offset, SeekOrigin.Begin);
@@ -156,7 +149,7 @@ namespace Claunia.RsrcFork
}
///
- /// Gets the length of the resource specified by ID.
+ /// Gets the length of the resource specified by ID.
///
/// The length.
/// Resource identifier.
@@ -167,23 +160,22 @@ namespace Claunia.RsrcFork
}
///
- /// Gets the IDs of all the resources contained by this instance.
+ /// Gets the IDs of all the resources contained by this instance.
///
/// The identifiers.
- public short[] GetIds()
- {
- return ids.ToArray();
- }
+ public short[] GetIds() => ids.ToArray();
///
- /// Checks if the resource specified by ID is contained by this instance.
+ /// Checks if the resource specified by ID is contained by this instance.
///
/// true, if the resource is contained in this instance, false otherwise.
/// Resource identifier.
- public bool ContainsId(short id)
+ public bool ContainsId(short id) => ids.Contains(id);
+
+ struct ResourceData
{
- return ids.Contains(id);
+ public long offset;
+ public long length;
}
}
-}
-
+}
\ No newline at end of file
diff --git a/Claunia.RsrcFork/ResourceFork.cs b/Claunia.RsrcFork/ResourceFork.cs
index 83cc594..c8f77e0 100644
--- a/Claunia.RsrcFork/ResourceFork.cs
+++ b/Claunia.RsrcFork/ResourceFork.cs
@@ -31,19 +31,19 @@ using System.Linq;
namespace Claunia.RsrcFork
{
///
- /// This class represents a resource fork.
+ /// This class represents a resource fork.
///
public class ResourceFork
{
- Stream rsrcStream;
- ResourceHeader header;
- ResourceMap map;
+ ResourceHeader header;
+ ResourceMap map;
+ List osTypes;
+ Dictionary resourceCache;
Dictionary resourceTypeList;
- Dictionary resourceCache;
- List osTypes;
+ readonly Stream rsrcStream;
///
- /// Initializates a resource fork using a byte array as backend.
+ /// Initializates a resource fork using a byte array as backend.
///
/// Buffer.
public ResourceFork(byte[] buffer)
@@ -53,7 +53,7 @@ namespace Claunia.RsrcFork
}
///
- /// Initializates a resource fork using a stream as backed.
+ /// Initializates a resource fork using a stream as backed.
///
/// Stream.
public ResourceFork(Stream stream)
@@ -63,16 +63,15 @@ namespace Claunia.RsrcFork
}
///
- /// Cleans up this instances and closes the underlying stream.
+ /// Cleans up this instances and closes the underlying stream.
///
~ResourceFork()
{
- if(rsrcStream != null)
- rsrcStream.Dispose();
+ if(rsrcStream != null) rsrcStream.Dispose();
}
///
- /// Initializes this instance.
+ /// Initializes this instance.
///
void Init()
{
@@ -88,14 +87,14 @@ namespace Claunia.RsrcFork
rsrcStream.Read(tmp, 0, 4);
header.resourceMapLen = BitConverter.ToInt32(tmp.Reverse().ToArray(), 0);
- if(header.resourceDataOff <= 0 || header.resourceMapOff <= 0 || header.resourceDataLen <= 0 || header.resourceMapLen <= 0)
- throw new InvalidCastException("Not a resource fork");
+ if(header.resourceDataOff <= 0 || header.resourceMapOff <= 0 || header.resourceDataLen <= 0 ||
+ header.resourceMapLen <= 0) throw new InvalidCastException("Not a resource fork");
if(header.resourceDataOff + header.resourceDataLen > rsrcStream.Length ||
- header.resourceMapOff + header.resourceMapLen > rsrcStream.Length)
+ header.resourceMapOff + header.resourceMapLen > rsrcStream.Length)
throw new InvalidCastException("Not a resource fork");
- map = new ResourceMap();
+ map = new ResourceMap();
map.header = new ResourceHeader();
rsrcStream.Seek(header.resourceMapOff, SeekOrigin.Begin);
rsrcStream.Read(tmp, 0, 4);
@@ -109,13 +108,13 @@ namespace Claunia.RsrcFork
if(map.header.resourceDataOff != header.resourceDataOff ||
map.header.resourceDataLen != header.resourceDataLen ||
- map.header.resourceMapOff != header.resourceMapOff ||
- map.header.resourceMapLen != header.resourceMapLen)
+ map.header.resourceMapOff != header.resourceMapOff ||
+ map.header.resourceMapLen != header.resourceMapLen)
throw new InvalidCastException("Header copy is not same as header.");
rsrcStream.Read(tmp, 0, 4);
map.handleToNextMap = BitConverter.ToUInt32(tmp.Reverse().ToArray(), 0);
- tmp = new byte[2];
+ tmp = new byte[2];
rsrcStream.Read(tmp, 0, 2);
map.fileRefNo = BitConverter.ToUInt16(tmp.Reverse().ToArray(), 0);
rsrcStream.Read(tmp, 0, 2);
@@ -132,14 +131,15 @@ namespace Claunia.RsrcFork
map.numberOfTypes = BitConverter.ToUInt16(tmp.Reverse().ToArray(), 0);
resourceTypeList = new Dictionary();
- osTypes = new List();
+ osTypes = new List();
- for(int i = 0; i <= map.numberOfTypes; i++) {
+ for(int i = 0; i <= map.numberOfTypes; i++)
+ {
ResourceTypeListItem typeList = new ResourceTypeListItem();
tmp = new byte[4];
rsrcStream.Read(tmp, 0, 4);
typeList.type = BitConverter.ToUInt32(tmp.Reverse().ToArray(), 0);
- tmp = new byte[2];
+ tmp = new byte[2];
rsrcStream.Read(tmp, 0, 2);
typeList.resources = BitConverter.ToUInt16(tmp.Reverse().ToArray(), 0);
rsrcStream.Read(tmp, 0, 2);
@@ -153,7 +153,7 @@ namespace Claunia.RsrcFork
}
///
- /// Gets the resources with indicated type
+ /// Gets the resources with indicated type
///
/// The resource.
/// OSType.
@@ -161,14 +161,15 @@ namespace Claunia.RsrcFork
{
Resource rsrc;
- if(resourceCache.TryGetValue(OSType, out rsrc))
- return rsrc;
+ if(resourceCache.TryGetValue(OSType, out rsrc)) return rsrc;
ResourceTypeListItem typeList;
- if(!resourceTypeList.TryGetValue(OSType, out typeList))
- return null;
+ if(!resourceTypeList.TryGetValue(OSType, out typeList)) return null;
- rsrc = new Resource(rsrcStream, (ushort)(typeList.resources + 1), header.resourceMapOff + map.typeListOff + typeList.referenceOff - 2, header.resourceMapOff + map.nameListOff, header.resourceDataOff, OSType);
+ rsrc = new Resource(rsrcStream, (ushort)(typeList.resources + 1),
+ header.resourceMapOff + map.typeListOff + typeList.referenceOff - 2,
+ header.resourceMapOff + map.nameListOff,
+ header.resourceDataOff, OSType);
resourceCache.Add(OSType, rsrc);
@@ -176,22 +177,15 @@ namespace Claunia.RsrcFork
}
///
- /// Gets all OSTypes stored in this resource fork
+ /// Gets all OSTypes stored in this resource fork
///
/// The types.
- public uint[] GetTypes()
- {
- return osTypes.ToArray();
- }
+ public uint[] GetTypes() => osTypes.ToArray();
///
- /// Returns true if the specified OSType is present in this resource fork.
+ /// Returns true if the specified OSType is present in this resource fork.
///
/// OSType.
- public bool ContainsKey(uint OSType)
- {
- return resourceTypeList.ContainsKey(OSType);
- }
+ public bool ContainsKey(uint OSType) => resourceTypeList.ContainsKey(OSType);
}
-}
-
+}
\ No newline at end of file
diff --git a/Claunia.RsrcFork/Resources/Version.cs b/Claunia.RsrcFork/Resources/Version.cs
index 7c4e193..fed9ff6 100644
--- a/Claunia.RsrcFork/Resources/Version.cs
+++ b/Claunia.RsrcFork/Resources/Version.cs
@@ -31,68 +31,35 @@ using Claunia.RsrcFork;
namespace Resources
{
///
- /// This class handles the "VERS" resource fork
+ /// This class handles the "VERS" resource fork
///
public class Version
{
- static uint ostype = 0x76657273;
-
- #region On-disk structure
///
- /// Major version.
- ///
- public byte MajorVersion;
- ///
- /// Minor version.
- ///
- public byte MinorVersion;
- ///
- /// Development stage.
- ///
- public DevelopmentStage DevStage;
- ///
- /// Pre-release version.
- ///
- public byte PreReleaseVersion;
- ///
- /// Region code.
- ///
- public ushort RegionCode;
- ///
- /// Version string.
- ///
- public string VersionString;
- ///
- /// Version message.
- ///
- public string VersionMessage;
- #endregion
-
- ///
- /// Known development stages
+ /// Known development stages
///
public enum DevelopmentStage : byte
{
///
- /// Pre-alpha.
+ /// Pre-alpha.
///
PreAlpha = 0x20,
///
- /// Alpha.
+ /// Alpha.
///
Alpha = 0x40,
///
- /// Beta.
+ /// Beta.
///
Beta = 0x60,
///
- /// Final release.
+ /// Final release.
///
Final = 0x80
}
///
- /// Initializes a new instance of the class.
+ /// Initializes a new instance of the class.
///
/// Byte array containing the "VERS" resource.
public Version(byte[] resource)
@@ -101,30 +68,36 @@ namespace Resources
tmpShort = new byte[2];
- MajorVersion = BCDToNumber(resource[0]);
- MinorVersion = BCDToNumber(resource[1]);
- DevStage = (DevelopmentStage)resource[2];
+ MajorVersion = BCDToNumber(resource[0]);
+ MinorVersion = BCDToNumber(resource[1]);
+ DevStage = (DevelopmentStage)resource[2];
PreReleaseVersion = BCDToNumber(resource[3]);
Array.Copy(resource, 4, tmpShort, 0, 2);
RegionCode = BitConverter.ToUInt16(tmpShort.Reverse().ToArray(), 0);
- tmpStr = new byte[resource[6] + 1];
+ tmpStr = new byte[resource[6] + 1];
Array.Copy(resource, 6, tmpStr, 0, tmpStr.Length);
VersionString = PascalString.GetString(tmpStr);
- tmpMsg = new byte[resource[6 + tmpStr.Length] + 1];
+ tmpMsg = new byte[resource[6 + tmpStr.Length] + 1];
Array.Copy(resource, 6 + tmpStr.Length, tmpMsg, 0, tmpMsg.Length);
VersionMessage = PascalString.GetString(tmpMsg);
}
///
- /// Gets a byte array with the "VERS" resource contained by this instance.
+ /// Gets the OSTYPE of this resource.
+ ///
+ /// The OSTYPE.
+ public static uint OSType { get; } = 0x76657273;
+
+ ///
+ /// Gets a byte array with the "VERS" resource contained by this instance.
///
/// The "VERS" resource.
public byte[] GetBytes()
{
byte[] tmpShort, tmpStr, tmpMsg;
tmpShort = BitConverter.GetBytes(RegionCode).Reverse().ToArray();
- tmpStr = PascalString.GetBytes(VersionString);
- tmpMsg = PascalString.GetBytes(VersionMessage);
+ tmpStr = PascalString.GetBytes(VersionString);
+ tmpMsg = PascalString.GetBytes(VersionMessage);
byte[] vers = new byte[6 + tmpStr.Length + tmpMsg.Length];
@@ -132,35 +105,51 @@ namespace Resources
vers[1] = NumberToBCD(MinorVersion);
vers[2] = (byte)DevStage;
vers[3] = NumberToBCD(PreReleaseVersion);
- Array.Copy(tmpShort, 0, vers, 4, 2);
- Array.Copy(tmpStr, 0, vers, 6, tmpStr.Length);
- Array.Copy(tmpMsg, 0, vers, 6 + tmpStr.Length, tmpMsg.Length);
+ Array.Copy(tmpShort, 0, vers, 4, 2);
+ Array.Copy(tmpStr, 0, vers, 6, tmpStr.Length);
+ Array.Copy(tmpMsg, 0, vers, 6 + tmpStr.Length, tmpMsg.Length);
return vers;
}
- ///
- /// Gets the OSTYPE of this resource.
- ///
- /// The OSTYPE.
- public static uint OSType {
- get {
- return ostype;
- }
- }
-
- byte BCDToNumber(byte bcd)
- {
- return Convert.ToByte(string.Format("{0:X2}", bcd), 10);
- }
+ byte BCDToNumber(byte bcd) => Convert.ToByte(string.Format("{0:X2}", bcd), 10);
byte NumberToBCD(byte number)
{
- if(number >= 100)
- number = 99;
+ if(number >= 100) number = 99;
return Convert.ToByte(string.Format("{0:D2}", number), 16);
}
- }
-}
+ #region On-disk structure
+ ///
+ /// Major version.
+ ///
+ public byte MajorVersion;
+ ///
+ /// Minor version.
+ ///
+ public byte MinorVersion;
+ ///
+ /// Development stage.
+ ///
+ public DevelopmentStage DevStage;
+ ///
+ /// Pre-release version.
+ ///
+ public byte PreReleaseVersion;
+ ///
+ /// Region code.
+ ///
+ public ushort RegionCode;
+ ///
+ /// Version string.
+ ///
+ public string VersionString;
+ ///
+ /// Version message.
+ ///
+ public string VersionMessage;
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/Claunia.RsrcFork/Structs.cs b/Claunia.RsrcFork/Structs.cs
index c67597a..6beae38 100644
--- a/Claunia.RsrcFork/Structs.cs
+++ b/Claunia.RsrcFork/Structs.cs
@@ -29,19 +29,19 @@ namespace Claunia.RsrcFork
struct ResourceHeader
{
///
- /// Offset from start of resource fork to resource data
+ /// Offset from start of resource fork to resource data
///
public int resourceDataOff;
///
- /// Offset from start of resource fork to resource map
+ /// Offset from start of resource fork to resource map
///
public int resourceMapOff;
///
- /// Length of resource data
+ /// Length of resource data
///
public int resourceDataLen;
///
- /// Length of resource map
+ /// Length of resource map
///
public int resourceMapLen;
}
@@ -49,31 +49,31 @@ namespace Claunia.RsrcFork
struct ResourceMap
{
///
- /// Copy of the resource fork header
+ /// Copy of the resource fork header
///
public ResourceHeader header;
///
- /// Reserved for handle to next resource map
+ /// Reserved for handle to next resource map
///
public uint handleToNextMap;
///
- /// Reserved for file reference number
+ /// Reserved for file reference number
///
public ushort fileRefNo;
///
- /// Resource fork attributes
+ /// Resource fork attributes
///
public ushort attributes;
///
- /// Offset from start of resource map to resource type list
+ /// Offset from start of resource map to resource type list
///
public short typeListOff;
///
- /// Offset from start of resource map to resource name list
+ /// Offset from start of resource map to resource name list
///
public short nameListOff;
///
- /// Number of types in the map minus 1
+ /// Number of types in the map minus 1
///
public ushort numberOfTypes;
}
@@ -81,15 +81,15 @@ namespace Claunia.RsrcFork
struct ResourceTypeListItem
{
///
- /// Resource type
+ /// Resource type
///
public uint type;
///
- /// Number of resources of this type minus 1
+ /// Number of resources of this type minus 1
///
public ushort resources;
///
- /// Offset from beginning of resource type list to reference list
+ /// Offset from beginning of resource type list to reference list
///
public short referenceOff;
}
@@ -97,25 +97,24 @@ namespace Claunia.RsrcFork
struct ResourceTypeReferenceListItem
{
///
- /// Resource ID
+ /// Resource ID
///
public short id;
///
- /// Offset from beginning of resource name list to resource name. -1 if it does not have a name
+ /// Offset from beginning of resource name list to resource name. -1 if it does not have a name
///
public short nameOff;
///
- /// Resource attributes
+ /// Resource attributes
///
public byte attributes;
///
- /// Offset from beginning of resource data to resource. First byte is .
+ /// Offset from beginning of resource data to resource. First byte is .
///
public int dataOff;
///
- /// Reserved for handle to resource
+ /// Reserved for handle to resource
///
public uint handle;
}
-}
-
+}
\ No newline at end of file
diff --git a/Claunia.RsrcFork/Types.cs b/Claunia.RsrcFork/Types.cs
index bec0402..52e744f 100644
--- a/Claunia.RsrcFork/Types.cs
+++ b/Claunia.RsrcFork/Types.cs
@@ -25,24 +25,25 @@
// THE SOFTWARE.
using System;
-using System.Text;
using System.Linq;
+using System.Text;
namespace Claunia.RsrcFork
{
///
- /// This class contains static methods for OSTYPE handling.
+ /// This class contains static methods for OSTYPE handling.
///
public static class Types
{
///
- /// Gets a descriptive name of a resource from its OSTYPE.
+ /// Gets a descriptive name of a resource from its OSTYPE.
///
/// The name corresponding to the specified OSTYPE.
/// The OSTYPE.
public static string GetName(uint OSType)
{
- switch(OSType) {
+ switch(OSType)
+ {
case 0x2E58534C: // ".XSL"
return "XML style sheet";
case 0x33444D46: // "3DMF"
@@ -683,26 +684,23 @@ namespace Claunia.RsrcFork
return "MC680x0 Code";
case 0x5F505043: // "_PPC"
return "PowerPC Code";
- default:
- return null;
+ default: return null;
}
}
///
- /// Gets a descriptive name of a resource from its OSTYPE.
+ /// Gets a descriptive name of a resource from its OSTYPE.
///
/// The name corresponding to the specified OSTYPE.
/// The OSTYPE.
public static string GetName(string OSType)
{
- if(OSType.Length != 4)
- return null;
+ if(OSType.Length != 4) return null;
byte[] typB = Encoding.ASCII.GetBytes(OSType);
- uint type = BitConverter.ToUInt32(typB.Reverse().ToArray(), 0);
+ uint type = BitConverter.ToUInt32(typB.Reverse().ToArray(), 0);
return GetName(type);
}
}
-}
-
+}
\ No newline at end of file