diff --git a/CSharp/Plugins/UniversalEditor.Plugins.InstallShield/DataFormats/FileSystem/InstallShield/Cabinet/CABDataFormat.cs b/CSharp/Plugins/UniversalEditor.Plugins.InstallShield/DataFormats/FileSystem/InstallShield/Cabinet/CABDataFormat.cs
new file mode 100644
index 00000000..fe16a491
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.InstallShield/DataFormats/FileSystem/InstallShield/Cabinet/CABDataFormat.cs
@@ -0,0 +1,161 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using UniversalEditor.IO;
+using UniversalEditor.ObjectModels.FileSystem;
+
+namespace UniversalEditor.DataFormats.FileSystem.InstallShield.Cabinet
+{
+ public class CABDataFormat : DataFormat
+ {
+ private static DataFormatReference _dfr = null;
+ public override DataFormatReference MakeReference()
+ {
+ if (_dfr == null)
+ {
+ _dfr = base.MakeReference();
+ _dfr.Capabilities.Add(typeof(FileSystemObjectModel), DataFormatCapabilities.All);
+ _dfr.Filters.Add("InstallShield cabinet", new byte?[][] { new byte?[] { (byte)'I', (byte)'S', (byte)'c', (byte)'(' } }, new string[] { "*.cab" });
+ }
+ return _dfr;
+ }
+
+ private const int MAX_FILE_GROUP_COUNT = 71;
+ private const int MAX_COMPONENT_COUNT = 71;
+
+ private const int OFFSET_COUNT = 0x47;
+
+ private const int CAB_SIGNATURE = 0x28635349;
+ private const int MSCF_SIGNATURE = 0x4643534d;
+
+ private const int COMMON_HEADER_SIZE = 20;
+ private const int VOLUME_HEADER_SIZE_V5 = 40;
+ private const int VOLUME_HEADER_SIZE_V6 = 64;
+
+ protected override void LoadInternal(ref ObjectModel objectModel)
+ {
+ FileSystemObjectModel fsom = (objectModel as FileSystemObjectModel);
+ if (fsom == null) return;
+
+ Reader br = base.Accessor.Reader;
+ br.Accessor.Seek(0, SeekOrigin.Begin);
+ br.Endianness = Endianness.LittleEndian;
+
+ string ISc_ = br.ReadFixedLengthString(4);
+ if (ISc_ != "ISc(") throw new InvalidDataFormatException();
+
+ uint version = br.ReadUInt32();
+ int majorVersion = 0;
+ if (version >> 24 == 1)
+ {
+ majorVersion = (int)((version >> 12) & 0xf);
+ }
+ else if (version >> 24 == 2 || version >> 24 == 4)
+ {
+ majorVersion = (int)(version & 0xffff);
+ if (majorVersion != 0)
+ {
+ majorVersion = (int)(majorVersion / 100);
+ }
+ }
+
+ uint volumeInfo = br.ReadUInt32();
+ uint cabinetDescriptorOffset = br.ReadUInt32();
+ uint cabinetDescriptorSize = br.ReadUInt32();
+
+ br.Accessor.Seek(cabinetDescriptorOffset, SeekOrigin.Begin);
+
+
+ int unknown1 = br.ReadInt32();
+ int unknown2 = br.ReadInt32();
+ int unknown3 = br.ReadInt32();
+
+ uint fileTableOffset = br.ReadUInt32();
+ uint unknown4 = br.ReadUInt32();
+ uint fileTableSize = br.ReadUInt32();
+ uint fileTableSize2 = br.ReadUInt32();
+ uint directoryCount = br.ReadUInt32();
+ uint unknown5 = br.ReadUInt32();
+ uint unknown6 = br.ReadUInt32();
+ uint fileCount = br.ReadUInt32();
+ uint fileTableOffset2 = br.ReadUInt32();
+
+ if (br.Accessor.Position != 0x30) throw new InvalidDataFormatException();
+ if (fileTableSize != fileTableSize2) throw new InvalidDataFormatException("File table sizes do not match");
+
+ uint unknown7 = br.ReadUInt32();
+ uint unknown8 = br.ReadUInt32();
+ uint unknown9 = br.ReadUInt32();
+ ushort unknown10 = br.ReadUInt16();
+
+ uint[] fileGroupOffsets = new uint[MAX_FILE_GROUP_COUNT];
+ for (int i = 0; i < MAX_FILE_GROUP_COUNT; i++)
+ {
+ fileGroupOffsets[i] = br.ReadUInt32();
+ }
+ uint[] componentOffsets = new uint[MAX_COMPONENT_COUNT];
+ for (int i = 0; i < MAX_COMPONENT_COUNT; i++)
+ {
+ componentOffsets[i] = br.ReadUInt32();
+ }
+
+
+
+ }
+
+ protected override void SaveInternal(ObjectModel objectModel)
+ {
+ FileSystemObjectModel fsom = (objectModel as FileSystemObjectModel);
+ if (fsom == null) return;
+
+ Writer bw = base.Accessor.Writer;
+ bw.WriteFixedLengthString("ISc(");
+
+ int unknown1 = 0;
+ int unknown2 = 0;
+ uint fileTableOffset = 0;
+ uint unknown3 = 0;
+ uint fileTableSize = 0;
+ uint fileTableSize2 = 0;
+ uint directoryCount = 0;
+ uint unknown4 = 0;
+ uint unknown5 = 0;
+ uint fileCount = 0;
+ uint fileTableOffset2 = 0;
+ uint unknown6 = 0;
+ uint unknown7 = 0;
+ uint unknown8 = 0;
+ ushort unknown9 = 0;
+
+ bw.WriteInt32(unknown1);
+ bw.WriteInt32(unknown2);
+ bw.WriteUInt32(fileTableOffset);
+ bw.WriteUInt32(unknown3);
+ bw.WriteUInt32(fileTableSize);
+ bw.WriteUInt32(fileTableSize2);
+ bw.WriteUInt32(directoryCount);
+ bw.WriteUInt32(unknown4);
+ bw.WriteUInt32(unknown5);
+ bw.WriteUInt32(fileCount);
+ bw.WriteUInt32(fileTableOffset2);
+ bw.WriteUInt32(unknown6);
+ bw.WriteUInt32(unknown7);
+ bw.WriteUInt32(unknown8);
+ bw.WriteUInt16(unknown9);
+
+ uint[] fileGroupOffsets = new uint[MAX_FILE_GROUP_COUNT];
+ uint[] componentOffsets = new uint[MAX_COMPONENT_COUNT];
+
+ for (int i = 0; i < MAX_FILE_GROUP_COUNT; i++)
+ {
+ bw.WriteUInt32(fileGroupOffsets[i]);
+ }
+ for (int i = 0; i < MAX_COMPONENT_COUNT; i++)
+ {
+ bw.WriteUInt32(componentOffsets[i]);
+ }
+ bw.Flush();
+ }
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.InstallShield/DataFormats/FileSystem/InstallShield/Cabinet/HDRDataFormat.cs b/CSharp/Plugins/UniversalEditor.Plugins.InstallShield/DataFormats/FileSystem/InstallShield/Cabinet/HDRDataFormat.cs
new file mode 100644
index 00000000..509e609c
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.InstallShield/DataFormats/FileSystem/InstallShield/Cabinet/HDRDataFormat.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using UniversalEditor.ObjectModels.FileSystem;
+
+namespace UniversalEditor.DataFormats.FileSystem.InstallShield.Cabinet
+{
+ public class HDRDataFormat : DataFormat
+ {
+ private static DataFormatReference _dfr = null;
+ public override DataFormatReference MakeReference()
+ {
+ if (_dfr == null)
+ {
+ _dfr = base.MakeReference();
+ _dfr.Capabilities.Add(typeof(FileSystemObjectModel), DataFormatCapabilities.All);
+ _dfr.Filters.Add("InstallShield cabinet header", new byte?[][] { new byte?[] { (byte)'I', (byte)'S', (byte)'c', (byte)'(' } }, new string[] { "*.hdr" });
+ }
+ return _dfr;
+ }
+
+ protected override void LoadInternal(ref ObjectModel objectModel)
+ {
+ }
+
+ protected override void SaveInternal(ObjectModel objectModel)
+ {
+ }
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.InstallShield/DataFormats/FileSystem/InstallShield/PKG/PKGDataFormat.cs b/CSharp/Plugins/UniversalEditor.Plugins.InstallShield/DataFormats/FileSystem/InstallShield/PKG/PKGDataFormat.cs
new file mode 100644
index 00000000..fa430e72
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.InstallShield/DataFormats/FileSystem/InstallShield/PKG/PKGDataFormat.cs
@@ -0,0 +1,79 @@
+/*
+ * Created by SharpDevelop.
+ * User: Mike Becker
+ * Date: 5/12/2013
+ * Time: 1:35 PM
+ *
+ * To change this template use Tools | Options | Coding | Edit Standard Headers.
+ */
+using System;
+using UniversalEditor.IO;
+using UniversalEditor.ObjectModels.FileSystem;
+
+namespace UniversalEditor.DataFormats.FileSystem.InstallShield.PKG
+{
+ ///
+ /// Description of PKGDataFormat.
+ ///
+ public class PKGDataFormat : DataFormat
+ {
+ private static DataFormatReference _dfr = null;
+ public override DataFormatReference MakeReference()
+ {
+ if (_dfr == null)
+ {
+ _dfr = base.MakeReference();
+ _dfr.Capabilities.Add(typeof(FileSystemObjectModel), DataFormatCapabilities.All);
+ _dfr.Filters.Add("InstallShield installation package", new byte?[][] { new byte?[] { 0x4A, 0xA3 } }, new string[] { "*.pkg" });
+ }
+ return _dfr;
+ }
+
+ protected override void LoadInternal(ref ObjectModel objectModel)
+ {
+ FileSystemObjectModel fsom = (objectModel as FileSystemObjectModel);
+ if (fsom == null) return;
+
+ Reader br = base.Accessor.Reader;
+ ushort signature = br.ReadUInt16();
+ if (signature != 0xA34A) throw new InvalidDataFormatException("File does not begin with 0xA34A");
+
+ ushort unknown1a = br.ReadUInt16();
+ ushort unknown1b = br.ReadUInt16();
+ uint unknown2 = br.ReadUInt32();
+ uint unknown3 = br.ReadUInt32();
+ uint unknown4 = br.ReadUInt32();
+ ushort unknown5 = br.ReadUInt16();
+ ushort unknown6 = br.ReadUInt16();
+ ushort unknown7 = br.ReadUInt16();
+ ushort fileCount = br.ReadUInt16();
+ for (ushort i = 0; i < fileCount; i++)
+ {
+ string FileName = br.ReadLengthPrefixedString();
+ byte unknown8 = br.ReadByte();
+ uint unknown9 = br.ReadUInt32();
+ ushort unknown10 = br.ReadUInt16();
+
+ File file = new File();
+ file.Name = FileName;
+ file.Size = unknown10;
+ file.DataRequest += new DataRequestEventHandler(file_DataRequest);
+ fsom.Files.Add(file);
+
+ if (file.Name == "OP.Z")
+ {
+
+ }
+ }
+ }
+
+ private void file_DataRequest(object sender, DataRequestEventArgs e)
+ {
+ }
+
+ protected override void SaveInternal(ObjectModel objectModel)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.InstallShield/DataFormats/InstallShield/Cabinet/CABDataFormat.cs b/CSharp/Plugins/UniversalEditor.Plugins.InstallShield/DataFormats/InstallShield/Cabinet/CABDataFormat.cs
new file mode 100644
index 00000000..77119d29
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.InstallShield/DataFormats/InstallShield/Cabinet/CABDataFormat.cs
@@ -0,0 +1,160 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using UniversalEditor.ObjectModels.FileSystem;
+
+namespace UniversalEditor.DataFormats.InstallShield.Cabinet
+{
+ public class CABDataFormat : DataFormat
+ {
+ private static DataFormatReference _dfr = null;
+ public override DataFormatReference MakeReference()
+ {
+ if (_dfr == null)
+ {
+ _dfr = base.MakeReference();
+ _dfr.Capabilities.Add(typeof(FileSystemObjectModel), DataFormatCapabilities.All);
+ _dfr.Filters.Add("InstallShield cabinet", new byte?[][] { new byte?[] { (byte)'I', (byte)'S', (byte)'c', (byte)'(' } }, new string[] { "*.cab" });
+ }
+ return _dfr;
+ }
+
+ private const int MAX_FILE_GROUP_COUNT = 71;
+ private const int MAX_COMPONENT_COUNT = 71;
+
+ private const int OFFSET_COUNT = 0x47;
+
+ private const int CAB_SIGNATURE = 0x28635349;
+ private const int MSCF_SIGNATURE = 0x4643534d;
+
+ private const int COMMON_HEADER_SIZE = 20;
+ private const int VOLUME_HEADER_SIZE_V5 = 40;
+ private const int VOLUME_HEADER_SIZE_V6 = 64;
+
+ protected override void LoadInternal(ref ObjectModel objectModel)
+ {
+ FileSystemObjectModel fsom = (objectModel as FileSystemObjectModel);
+ if (fsom == null) return;
+
+ IO.BinaryReader br = base.Stream.BinaryReader;
+ br.BaseStream.Position = 0;
+ br.Endianness = IO.Endianness.LittleEndian;
+
+ string ISc_ = br.ReadFixedLengthString(4);
+ if (ISc_ != "ISc(") throw new InvalidDataFormatException();
+
+ uint version = br.ReadUInt32();
+ int majorVersion = 0;
+ if (version >> 24 == 1)
+ {
+ majorVersion = (int)((version >> 12) & 0xf);
+ }
+ else if (version >> 24 == 2 || version >> 24 == 4)
+ {
+ majorVersion = (int)(version & 0xffff);
+ if (majorVersion != 0)
+ {
+ majorVersion = (int)(majorVersion / 100);
+ }
+ }
+
+ uint volumeInfo = br.ReadUInt32();
+ uint cabinetDescriptorOffset = br.ReadUInt32();
+ uint cabinetDescriptorSize = br.ReadUInt32();
+
+ br.BaseStream.Seek(cabinetDescriptorOffset, System.IO.SeekOrigin.Begin);
+
+
+ int unknown1 = br.ReadInt32();
+ int unknown2 = br.ReadInt32();
+ int unknown3 = br.ReadInt32();
+
+ uint fileTableOffset = br.ReadUInt32();
+ uint unknown4 = br.ReadUInt32();
+ uint fileTableSize = br.ReadUInt32();
+ uint fileTableSize2 = br.ReadUInt32();
+ uint directoryCount = br.ReadUInt32();
+ uint unknown5 = br.ReadUInt32();
+ uint unknown6 = br.ReadUInt32();
+ uint fileCount = br.ReadUInt32();
+ uint fileTableOffset2 = br.ReadUInt32();
+
+ if (br.BaseStream.Position != 0x30) throw new InvalidDataFormatException();
+ if (fileTableSize != fileTableSize2) throw new InvalidDataFormatException("File table sizes do not match");
+
+ uint unknown7 = br.ReadUInt32();
+ uint unknown8 = br.ReadUInt32();
+ uint unknown9 = br.ReadUInt32();
+ ushort unknown10 = br.ReadUInt16();
+
+ uint[] fileGroupOffsets = new uint[MAX_FILE_GROUP_COUNT];
+ for (int i = 0; i < MAX_FILE_GROUP_COUNT; i++)
+ {
+ fileGroupOffsets[i] = br.ReadUInt32();
+ }
+ uint[] componentOffsets = new uint[MAX_COMPONENT_COUNT];
+ for (int i = 0; i < MAX_COMPONENT_COUNT; i++)
+ {
+ componentOffsets[i] = br.ReadUInt32();
+ }
+
+
+
+ }
+
+ protected override void SaveInternal(ObjectModel objectModel)
+ {
+ FileSystemObjectModel fsom = (objectModel as FileSystemObjectModel);
+ if (fsom == null) return;
+
+ IO.BinaryWriter bw = base.Stream.BinaryWriter;
+ bw.WriteFixedLengthString("ISc(");
+
+ int unknown1 = 0;
+ int unknown2 = 0;
+ uint fileTableOffset = 0;
+ uint unknown3 = 0;
+ uint fileTableSize = 0;
+ uint fileTableSize2 = 0;
+ uint directoryCount = 0;
+ uint unknown4 = 0;
+ uint unknown5 = 0;
+ uint fileCount = 0;
+ uint fileTableOffset2 = 0;
+ uint unknown6 = 0;
+ uint unknown7 = 0;
+ uint unknown8 = 0;
+ ushort unknown9 = 0;
+
+ bw.Write(unknown1);
+ bw.Write(unknown2);
+ bw.Write(fileTableOffset);
+ bw.Write(unknown3 );
+ bw.Write(fileTableSize );
+ bw.Write(fileTableSize2 );
+ bw.Write(directoryCount );
+ bw.Write(unknown4 );
+ bw.Write(unknown5 );
+ bw.Write(fileCount );
+ bw.Write(fileTableOffset2);
+ bw.Write(unknown6);
+ bw.Write(unknown7);
+ bw.Write(unknown8);
+ bw.Write(unknown9);
+
+ uint[] fileGroupOffsets = new uint[MAX_FILE_GROUP_COUNT];
+ uint[] componentOffsets = new uint[MAX_COMPONENT_COUNT];
+
+ for (int i = 0; i < MAX_FILE_GROUP_COUNT; i++)
+ {
+ bw.Write(fileGroupOffsets[i]);
+ }
+ for (int i = 0; i < MAX_COMPONENT_COUNT; i++)
+ {
+ bw.Write(componentOffsets[i]);
+ }
+ bw.Flush();
+ }
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.InstallShield/DataFormats/InstallShield/Cabinet/HDRDataFormat.cs b/CSharp/Plugins/UniversalEditor.Plugins.InstallShield/DataFormats/InstallShield/Cabinet/HDRDataFormat.cs
new file mode 100644
index 00000000..2cdc7eb1
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.InstallShield/DataFormats/InstallShield/Cabinet/HDRDataFormat.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using UniversalEditor.ObjectModels.FileSystem;
+
+namespace UniversalEditor.DataFormats.InstallShield.Cabinet
+{
+ public class HDRDataFormat : DataFormat
+ {
+ private static DataFormatReference _dfr = null;
+ public override DataFormatReference MakeReference()
+ {
+ if (_dfr == null)
+ {
+ _dfr = base.MakeReference();
+ _dfr.Capabilities.Add(typeof(FileSystemObjectModel), DataFormatCapabilities.All);
+ _dfr.Filters.Add("InstallShield cabinet header", new byte?[][] { new byte?[] { (byte)'I', (byte)'S', (byte)'c', (byte)'(' } }, new string[] { "*.hdr" });
+ }
+ return _dfr;
+ }
+
+ protected override void LoadInternal(ref ObjectModel objectModel)
+ {
+ }
+
+ protected override void SaveInternal(ObjectModel objectModel)
+ {
+ }
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.InstallShield/DataFormats/InstallShield/Script/InstallShieldCompiledScriptDataFormat.cs b/CSharp/Plugins/UniversalEditor.Plugins.InstallShield/DataFormats/InstallShield/Script/InstallShieldCompiledScriptDataFormat.cs
new file mode 100644
index 00000000..37c638da
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.InstallShield/DataFormats/InstallShield/Script/InstallShieldCompiledScriptDataFormat.cs
@@ -0,0 +1,112 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using UniversalEditor.IO;
+using UniversalEditor.ObjectModels.InstallShield;
+
+namespace UniversalEditor.DataFormats.InstallShield.Script
+{
+ public class InstallShieldCompiledScriptDataFormat : DataFormat
+ {
+ private static DataFormatReference _dfr = null;
+ public override DataFormatReference MakeReference()
+ {
+ if (_dfr == null)
+ {
+ _dfr = base.MakeReference();
+ _dfr.Filters.Add("InstallShield compiled script", new byte?[][] { new byte?[] { null, null, null, null, null, null, null, null, null, null, null, null, 48, 13, 10, (byte)'S', (byte)'t', (byte)'i', (byte)'r', (byte)'l', (byte)'i', (byte)'n', (byte)'g', (byte)' ', (byte)'T', (byte)'e', (byte)'c', (byte)'h', (byte)'n', (byte)'o', (byte)'l', (byte)'o', (byte)'g', (byte)'i', (byte)'e', (byte)'s', (byte)',', (byte)' ', (byte)'I', (byte)'n', (byte)'c', (byte)'.', (byte)' ', (byte)' ', (byte)'(', (byte)'c', (byte)')', (byte)' ', (byte)'1', (byte)'9', (byte)'9', (byte)'0', (byte)'-', (byte)'1', (byte)'9', (byte)'9', (byte)'4' } }, new string[] { "*.ins" });
+ _dfr.Capabilities.Add(typeof(InstallShieldScriptObjectModel), DataFormatCapabilities.All);
+ }
+ return _dfr;
+ }
+
+ protected override void LoadInternal(ref ObjectModel objectModel)
+ {
+ Reader br = base.Accessor.Reader;
+ short u0 = br.ReadInt16();
+ short u1 = br.ReadInt16();
+ short u2 = br.ReadInt16();
+ short u3 = br.ReadInt16();
+ short u4 = br.ReadInt16();
+ short u5 = br.ReadInt16();
+ string comment = br.ReadLengthPrefixedString();
+
+ short u6 = br.ReadInt16();
+ short u7 = br.ReadInt16();
+
+ byte[] unknowns = br.ReadBytes(102);
+
+ List variableNames1 = new List();
+
+ short variableCount = br.ReadInt16();
+ for (short i = 0; i < variableCount; i++)
+ {
+ short variableIndex = br.ReadInt16();
+
+ short variableNameLength = br.ReadInt16();
+ string variableName = br.ReadFixedLengthString(variableNameLength);
+ variableNames1.Add(variableName);
+ }
+
+ short u8 = br.ReadInt16();
+
+ List variableNames2 = new List();
+
+ short u9 = br.ReadInt16();
+ for (short i = 0; i < u9; i++)
+ {
+ short variableIndex = br.ReadInt16();
+
+ short variableNameLength = br.ReadInt16();
+ string variableName = br.ReadFixedLengthString(variableNameLength);
+ variableNames2.Add(variableName);
+ }
+
+ byte[] unknown_3 = br.ReadBytes(170);
+ short u_ct0 = br.ReadInt16();
+ for (short i = 0; i < u_ct0; i++)
+ {
+ short index = br.ReadInt16();
+
+ short nameLength = br.ReadInt16();
+ string name = br.ReadFixedLengthString(nameLength);
+
+ short valueLength = br.ReadInt16();
+ string value = br.ReadFixedLengthString(valueLength);
+ }
+
+ short u12 = br.ReadInt16();
+ short u13 = br.ReadInt16();
+ short u14 = br.ReadInt16();
+ short u15 = br.ReadInt16();
+ short u16 = br.ReadInt16();
+
+ short u_ct1 = br.ReadInt16();
+ for (short i = 0; i < u_ct1; i++)
+ {
+ short index = br.ReadInt16();
+
+ short nameLength = br.ReadInt16();
+ string name = br.ReadFixedLengthString(nameLength);
+
+ short valueLength = br.ReadInt16();
+ string value = br.ReadFixedLengthString(valueLength);
+ }
+
+ byte[] unknown1000 = br.ReadBytes(80);
+
+ while (!br.EndOfStream)
+ {
+ byte j0 = br.ReadByte();
+ if (j0 == 0) break;
+ short len = br.ReadInt16();
+ string val = br.ReadFixedLengthString(len);
+ }
+ }
+ protected override void SaveInternal(ObjectModel objectModel)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.InstallShield/DataFormats/InstallShield/Script/InstallShieldScriptV2DataFormat.cs b/CSharp/Plugins/UniversalEditor.Plugins.InstallShield/DataFormats/InstallShield/Script/InstallShieldScriptV2DataFormat.cs
new file mode 100644
index 00000000..f7d4a121
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.InstallShield/DataFormats/InstallShield/Script/InstallShieldScriptV2DataFormat.cs
@@ -0,0 +1,67 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using UniversalEditor.IO;
+using UniversalEditor.ObjectModels.InstallShield;
+
+namespace UniversalEditor.DataFormats.InstallShield.Script
+{
+ public class InstallShieldScriptV2DataFormat : DataFormat
+ {
+ #region DataFormat members
+ private static DataFormatReference _dfr = null;
+ public override DataFormatReference MakeReference()
+ {
+ if (_dfr == null)
+ {
+ _dfr = base.MakeReference();
+ _dfr.Capabilities.Add(typeof(InstallShieldScriptObjectModel), DataFormatCapabilities.All);
+ _dfr.Filters.Add("InstallShield script (INX)", new byte?[][] { new byte?[] { (byte)'a', (byte)'L', (byte)'u', (byte)'Z' } }, new string[] { "*.inx" });
+ }
+ return _dfr;
+ }
+ protected override void LoadInternal(ref ObjectModel objectModel)
+ {
+ Reader br = base.Accessor.Reader;
+
+ string aLuZ = br.ReadFixedLengthString(4);
+ if (aLuZ != "aLuZ") throw new InvalidDataFormatException("File does not begin with \"aLuZ\"");
+
+ short u0 = br.ReadInt16();
+ mvarComment = br.ReadFixedLengthString(98);
+ if (mvarComment.Contains('\0')) mvarComment = mvarComment.Substring(0, mvarComment.IndexOf('\0'));
+
+ int u1 = br.ReadInt32();
+ int u2 = br.ReadInt32();
+ int u3 = br.ReadInt32();
+ int u4 = br.ReadInt32();
+ int u5 = br.ReadInt32();
+ int u6 = br.ReadInt32();
+
+ short w0 = br.ReadInt16();
+
+ }
+ protected override void SaveInternal(ObjectModel objectModel)
+ {
+ Writer bw = base.Accessor.Writer;
+ bw.WriteFixedLengthString("aLuZ");
+ bw.WriteInt16(0);
+ bw.WriteFixedLengthString(mvarComment, 98);
+
+
+ }
+ #endregion
+
+ public const string COMMENT_V1 = "Copyright (c) 1990-1999 Stirling Technologies, Ltd. All Rights Reserved.";
+ public const string COMMENT_V2 = "Copyright (c) 1990-2002 InstallShield Software Corp. All Rights Reserved.";
+
+ private string mvarComment = COMMENT_V1;
+ public string Comment
+ {
+ get { return mvarComment; }
+ set { mvarComment = value; }
+ }
+
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.InstallShield/ObjectModels/InstallShield/InstallShieldScriptObjectModel.cs b/CSharp/Plugins/UniversalEditor.Plugins.InstallShield/ObjectModels/InstallShield/InstallShieldScriptObjectModel.cs
new file mode 100644
index 00000000..31b094eb
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.InstallShield/ObjectModels/InstallShield/InstallShieldScriptObjectModel.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace UniversalEditor.ObjectModels.InstallShield
+{
+ public class InstallShieldScriptObjectModel : ObjectModel
+ {
+ public override void Clear()
+ {
+ throw new NotImplementedException();
+ }
+
+ public override void CopyTo(ObjectModel where)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.InstallShield/Properties/AssemblyInfo.cs b/CSharp/Plugins/UniversalEditor.Plugins.InstallShield/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..a3650122
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.InstallShield/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Universal Editor plugin for InstallShield solutions")]
+[assembly: AssemblyDescription("Provides data formats and object models to manipulate InstallShield installation data")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Mike Becker's Software")]
+[assembly: AssemblyProduct("Universal Editor Plugin Pack")]
+[assembly: AssemblyCopyright("Copyright ©2012 Mike Becker's Software")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("cf18e3c9-07f5-49bc-9f9a-55658380368c")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.InstallShield/UniversalEditor.Plugins.InstallShield.csproj b/CSharp/Plugins/UniversalEditor.Plugins.InstallShield/UniversalEditor.Plugins.InstallShield.csproj
new file mode 100644
index 00000000..822d8a2c
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.InstallShield/UniversalEditor.Plugins.InstallShield.csproj
@@ -0,0 +1,65 @@
+
+
+
+ Debug
+ AnyCPU
+ 8.0.30703
+ 2.0
+ {04674541-23C2-4308-A9DF-DBC43AE99814}
+ Library
+ Properties
+ UniversalEditor
+ UniversalEditor.Plugins.InstallShield
+ v3.5
+ 512
+
+
+ true
+ full
+ false
+ ..\..\Output\Debug\Plugins\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ ..\..\Output\Release\Plugins\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {A92D520B-FFA3-4464-8CF6-474D18959E03}
+ UniversalEditor.Core
+
+
+ {30467e5c-05bc-4856-aadc-13906ef4cadd}
+ UniversalEditor.Essential
+
+
+
+
+
\ No newline at end of file
diff --git a/CSharp/UniversalEditor.WindowsForms.sln b/CSharp/UniversalEditor.WindowsForms.sln
index 58187536..bdb032b0 100644
--- a/CSharp/UniversalEditor.WindowsForms.sln
+++ b/CSharp/UniversalEditor.WindowsForms.sln
@@ -113,6 +113,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversalEditor.Plugins.Exe
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversalEditor.Plugins.Microsoft", "Plugins\UniversalEditor.Plugins.Microsoft\UniversalEditor.Plugins.Microsoft.csproj", "{4698BC3F-EC29-42EB-9AED-3D8F9983A108}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversalEditor.Plugins.InstallShield", "Plugins\UniversalEditor.Plugins.InstallShield\UniversalEditor.Plugins.InstallShield.csproj", "{04674541-23C2-4308-A9DF-DBC43AE99814}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -299,6 +301,10 @@ Global
{4698BC3F-EC29-42EB-9AED-3D8F9983A108}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4698BC3F-EC29-42EB-9AED-3D8F9983A108}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4698BC3F-EC29-42EB-9AED-3D8F9983A108}.Release|Any CPU.Build.0 = Release|Any CPU
+ {04674541-23C2-4308-A9DF-DBC43AE99814}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {04674541-23C2-4308-A9DF-DBC43AE99814}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {04674541-23C2-4308-A9DF-DBC43AE99814}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {04674541-23C2-4308-A9DF-DBC43AE99814}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -337,6 +343,7 @@ Global
{E0B0223C-3E44-4D2A-9FED-F1A319D84D39} = {71CFF024-26F7-4626-A526-B435FDF8D64E}
{791A36F8-5D96-452B-89D2-78BA74596A1E} = {71CFF024-26F7-4626-A526-B435FDF8D64E}
{4698BC3F-EC29-42EB-9AED-3D8F9983A108} = {71CFF024-26F7-4626-A526-B435FDF8D64E}
+ {04674541-23C2-4308-A9DF-DBC43AE99814} = {71CFF024-26F7-4626-A526-B435FDF8D64E}
{FE016EA3-DC31-4A92-8B0A-8C746EC117E1} = {46041F27-7C1C-4209-B72B-251EDB5D4C61}
{ED627DF7-3E78-4428-AB31-810BA1586E62} = {46041F27-7C1C-4209-B72B-251EDB5D4C61}
{C1F34183-7A2F-41A6-9958-F6F329099654} = {A846CA33-9CAA-4237-B14F-8721DBA89442}