diff --git a/UIX/Microsoft/Iris/Markup/ByteCodeReader.cs b/UIX/Microsoft/Iris/Markup/ByteCodeReader.cs
index b2719ad..5566e48 100644
--- a/UIX/Microsoft/Iris/Markup/ByteCodeReader.cs
+++ b/UIX/Microsoft/Iris/Markup/ByteCodeReader.cs
@@ -12,7 +12,7 @@ using System.Runtime.InteropServices;
namespace Microsoft.Iris.Markup
{
- internal class ByteCodeReader : DisposableObject
+ internal class ManagedByteCodeReader : DisposableObject
{
private static char[] s_scratchCharArray = new char[100];
private BinaryReader _reader;
@@ -20,13 +20,13 @@ namespace Microsoft.Iris.Markup
private byte[] _bytes;
private bool _inFixedMemory;
- public unsafe ByteCodeReader(IntPtr buffer, long size, bool ownsAllocation)
+ public unsafe ManagedByteCodeReader(IntPtr buffer, long size, bool ownsAllocation)
{
byte[] bytes = new byte[size];
Marshal.Copy(buffer, bytes, 0, (int)size);
_bytes = bytes;
- this._reader = new BinaryReader(new MemoryStream(_bytes));
+ _reader = new BinaryReader(new MemoryStream(_bytes));
_buffer = buffer;
}
@@ -42,9 +42,9 @@ namespace Microsoft.Iris.Markup
public unsafe IntPtr CurrentAddress => new IntPtr(_buffer.ToInt64() + _reader.BaseStream.Position);
- public bool IsInFixedMemory => this._inFixedMemory;
+ public bool IsInFixedMemory => _inFixedMemory;
- public void MarkAsInFixedMemory() => this._inFixedMemory = true;
+ public void MarkAsInFixedMemory() => _inFixedMemory = true;
public bool ReadBool() => _reader.ReadBoolean();
@@ -80,7 +80,7 @@ namespace Microsoft.Iris.Markup
public unsafe string ReadString()
{
- uint num1 = this.ReadUInt16();
+ uint num1 = ReadUInt16();
if (num1 == ushort.MaxValue)
return null;
bool flag;
@@ -96,10 +96,10 @@ namespace Microsoft.Iris.Markup
flag = false;
num2 = num1 * 2U;
}
- if (this.CurrentOffset + num2 > this.Size)
- this.ThrowReadError();
+ if (CurrentOffset + num2 > Size)
+ ThrowReadError();
char[] chArray = num1 >= s_scratchCharArray.Length ? new char[num1] : s_scratchCharArray;
- byte* numPtr1 = (byte*)(_buffer.ToInt32() + (int)CurrentOffset);
+ byte* numPtr1 = (byte*)(_buffer.ToInt64() + CurrentOffset);
if (flag)
{
for (int index = 0; index < num1; ++index)
@@ -139,4 +139,176 @@ namespace Microsoft.Iris.Markup
_buffer = IntPtr.Zero;
}
}
+
+ internal class ByteCodeReader : DisposableObject
+ {
+ private static char[] s_scratchCharArray = new char[100];
+ private unsafe byte* _buffer;
+ private uint _offset;
+ private uint _size;
+ private bool _ownsAllocation;
+ private bool _inFixedMemory;
+
+ public unsafe ByteCodeReader(IntPtr buffer, uint size, bool ownsAllocation)
+ {
+ _buffer = (byte*)buffer.ToPointer();
+ _size = size;
+ _offset = 0U;
+ _ownsAllocation = ownsAllocation;
+ int num = _ownsAllocation ? 1 : 0;
+ }
+
+ public uint Size => _size;
+
+ public uint CurrentOffset
+ {
+ get => _offset;
+ set => _offset = value <= _size ? value : throw new Exception("Invalid offset");
+ }
+
+ public unsafe IntPtr CurrentAddress => new IntPtr(_buffer + (int)_offset);
+
+ public void MarkAsInFixedMemory() => _inFixedMemory = true;
+
+ public bool IsInFixedMemory => _inFixedMemory;
+
+ public bool ReadBool() => ReadByte() != 0;
+
+ public unsafe byte ReadByte()
+ {
+ if (_offset >= _size)
+ ThrowReadError();
+ byte num = _buffer[(int)_offset];
+ ++_offset;
+ return num;
+ }
+
+ public char ReadChar() => (char)ReadUInt16();
+
+ public unsafe ushort ReadUInt16()
+ {
+ if (_offset + 2U > _size)
+ ThrowReadError();
+ byte* numPtr = _buffer + (int)_offset;
+ byte num1 = *numPtr;
+ byte num2 = numPtr[1];
+ _offset += 2U;
+ return (ushort)(num1 | (uint)num2 << 8);
+ }
+
+ public int ReadInt32() => (int)ReadUInt32();
+
+ public unsafe uint ReadUInt32()
+ {
+ if (_offset + 4U > _size)
+ ThrowReadError();
+ byte* numPtr = _buffer + (int)_offset;
+ byte num1 = *numPtr;
+ byte num2 = numPtr[1];
+ byte num3 = numPtr[2];
+ byte num4 = numPtr[3];
+ _offset += 4U;
+ return (uint)(num1 | num2 << 8 | num3 << 16 | num4 << 24);
+ }
+
+ public static unsafe ushort ReadUInt16(IntPtr pData)
+ {
+ byte* pointer = (byte*)pData.ToPointer();
+ return (ushort)(*pointer | (uint)pointer[1] << 8);
+ }
+
+ public static unsafe uint ReadUInt32(IntPtr pData)
+ {
+ byte* pointer = (byte*)pData.ToPointer();
+ return (uint)(*pointer | pointer[1] << 8 | pointer[2] << 16 | pointer[3] << 24);
+ }
+
+ public long ReadInt64() => (long)ReadUInt64();
+
+ public unsafe ulong ReadUInt64()
+ {
+ if (_offset + 8U > _size)
+ ThrowReadError();
+ byte* numPtr = _buffer + (int)_offset;
+ byte num1 = *numPtr;
+ byte num2 = numPtr[1];
+ byte num3 = numPtr[2];
+ byte num4 = numPtr[3];
+ byte num5 = numPtr[4];
+ byte num6 = numPtr[5];
+ byte num7 = numPtr[6];
+ byte num8 = numPtr[7];
+ _offset += 8U;
+ uint num9 = (uint)(num1 | num2 << 8 | num3 << 16 | num4 << 24);
+ return (ulong)(uint)(num5 | num6 << 8 | num7 << 16 | num8 << 24) << 32 | num9;
+ }
+
+ //public unsafe float ReadSingle() => *(float*)&ReadUInt32();
+ public unsafe float ReadSingle() => BitConverter.ToSingle(BitConverter.GetBytes(ReadUInt32()), 0);
+
+ //public unsafe double ReadDouble() => *(double*)&ReadInt64();
+ public unsafe double ReadDouble() => BitConverter.ToSingle(BitConverter.GetBytes(ReadUInt64()), 0);
+
+ public unsafe string ReadString()
+ {
+ uint num1 = ReadUInt16();
+ if (num1 == ushort.MaxValue)
+ return null;
+ bool flag;
+ uint num2;
+ if (((int)num1 & 32768) != 0)
+ {
+ flag = true;
+ num1 &= (uint)short.MaxValue;
+ num2 = num1;
+ }
+ else
+ {
+ flag = false;
+ num2 = num1 * 2U;
+ }
+ if (_offset + num2 > _size)
+ ThrowReadError();
+ char[] chArray = num1 >= s_scratchCharArray.Length ? new char[num1] : ByteCodeReader.s_scratchCharArray;
+ byte* numPtr1 = _buffer + (int)_offset;
+ if (flag)
+ {
+ for (int index = 0; index < num1; ++index)
+ chArray[index] = (char)*numPtr1++;
+ }
+ else
+ {
+ for (int index = 0; index < num1; ++index)
+ {
+ byte* numPtr2 = numPtr1;
+ byte* numPtr3 = numPtr2 + 1;
+ byte num3 = *numPtr2;
+ byte* numPtr4 = numPtr3;
+ numPtr1 = numPtr4 + 1;
+ byte num4 = *numPtr4;
+ chArray[index] = (char)(num3 | (uint)num4 << 8);
+ }
+ }
+ _offset += num2;
+ return new string(chArray, 0, (int)num1);
+ }
+
+ public unsafe IntPtr ToIntPtr(out uint size)
+ {
+ size = _size;
+ return new IntPtr(_buffer);
+ }
+
+ public unsafe IntPtr GetAddress(uint offset) => new IntPtr(_buffer + (int)offset);
+
+ private void ThrowReadError() => throw new Exception("Attempted to read past the end of the buffer.");
+
+ protected override unsafe void OnDispose()
+ {
+ base.OnDispose();
+ if (_ownsAllocation)
+ NativeApi.MemFree(new IntPtr(_buffer));
+ _buffer = null;
+ }
+ }
}
diff --git a/UIX/Microsoft/Iris/Markup/ByteCodeWriter.cs b/UIX/Microsoft/Iris/Markup/ByteCodeWriter.cs
index 4dde483..b1ea953 100644
--- a/UIX/Microsoft/Iris/Markup/ByteCodeWriter.cs
+++ b/UIX/Microsoft/Iris/Markup/ByteCodeWriter.cs
@@ -153,7 +153,7 @@ namespace Microsoft.Iris.Markup
public unsafe void Write(ByteCodeReader value, uint offset)
{
- IntPtr intPtr = value.ToIntPtr(out long size);
+ IntPtr intPtr = value.ToIntPtr(out uint size);
if (offset > size)
throw new ArgumentOutOfRangeException(nameof(offset));
this.Write(new IntPtr(intPtr.ToInt64() + offset), (uint)(size - offset));
diff --git a/UIX/Microsoft/Iris/Markup/CompiledMarkupLoader.cs b/UIX/Microsoft/Iris/Markup/CompiledMarkupLoader.cs
index 9ffa8f1..b7c7c77 100644
--- a/UIX/Microsoft/Iris/Markup/CompiledMarkupLoader.cs
+++ b/UIX/Microsoft/Iris/Markup/CompiledMarkupLoader.cs
@@ -542,7 +542,8 @@ namespace Microsoft.Iris.Markup
if (this._reader.IsInFixedMemory)
{
typeExport.SetAddressOfInheritableSymbolTable(this._reader.CurrentAddress);
- this._reader.CurrentOffset += this._reader.ReadUInt32();
+ uint num = this._reader.ReadUInt32();
+ this._reader.CurrentOffset += num;
}
else
DecodeInheritableSymbolTable(typeExport, this._reader, IntPtr.Zero);
diff --git a/UIX/Microsoft/Iris/Markup/MarkupCompiler.cs b/UIX/Microsoft/Iris/Markup/MarkupCompiler.cs
index f1e54c1..30d4005 100644
--- a/UIX/Microsoft/Iris/Markup/MarkupCompiler.cs
+++ b/UIX/Microsoft/Iris/Markup/MarkupCompiler.cs
@@ -91,10 +91,10 @@ namespace Microsoft.Iris.Markup
ErrorManager.ReportError("Unable to open output file '{0}'. Error code {1}", outputFile, Marshal.GetLastWin32Error());
if (!watermark.ErrorsDetected)
{
- long size = 0;
+ uint size = 0;
IntPtr intPtr = reader.ToIntPtr(out size);
uint lpNumberOfBytesWritten = 0;
- if (!Win32Api.WriteFile(file, intPtr, (uint)size, out lpNumberOfBytesWritten, IntPtr.Zero))
+ if (!Win32Api.WriteFile(file, intPtr, size, out lpNumberOfBytesWritten, IntPtr.Zero))
ErrorManager.ReportError("An error occurred while saving data to output file '{0}'. Error code {1}", outputFile, Marshal.GetLastWin32Error());
}
if (file != Win32Api.INVALID_HANDLE_VALUE)
@@ -487,7 +487,7 @@ namespace Microsoft.Iris.Markup
{
this._writer.Overwrite(this._objectSectionStartFixup, this._writer.DataSize);
this._writer.Write(this._loadResult.ObjectSection);
- this._loadResult.ObjectSection.ToIntPtr(out long _);
+ this._loadResult.ObjectSection.ToIntPtr(out uint _);
this._writer.Overwrite(this._objectSectionEndFixup, this._writer.DataSize);
}
diff --git a/UIX/Microsoft/Iris/Markup/ReflectionHelper.cs b/UIX/Microsoft/Iris/Markup/ReflectionHelper.cs
index 69a3ca8..302b1a7 100644
--- a/UIX/Microsoft/Iris/Markup/ReflectionHelper.cs
+++ b/UIX/Microsoft/Iris/Markup/ReflectionHelper.cs
@@ -31,16 +31,16 @@ namespace Microsoft.Iris.Markup
{
DynamicMethod dynamicMethod = new DynamicMethod("MethodInvoker", typeof(object), new Type[2]
{
- typeof (object),
- typeof (object[])
+ typeof (object),
+ typeof (object[])
}, s_irisModule, true);
ILGenerator ilGenerator = dynamicMethod.GetILGenerator();
ParameterInfo[] parameters = methodBase.GetParameters();
Type[] typeArray = new Type[parameters.Length];
for (int index = 0; index < parameters.Length; ++index)
typeArray[index] = parameters[index].ParameterType;
- MethodInfo methodInfo = null;
- if (methodBase is MethodInfo && !methodInfo.IsStatic)
+ MethodInfo methodInfo = methodBase as MethodInfo;
+ if (methodInfo != null && !methodInfo.IsStatic)
{
methodInfo = (MethodInfo)methodBase;
ilGenerator.Emit(OpCodes.Ldarg_0);
diff --git a/ZuneShell.csproj b/ZuneShell.csproj
index d722f60..f52e80e 100644
--- a/ZuneShell.csproj
+++ b/ZuneShell.csproj
@@ -40,6 +40,10 @@
+
+ False
+ C:\Program Files\Zune\UIXcontrols.dll
+
lib\ZuneDBApi.dll
@@ -869,10 +873,6 @@
-
- {56ae007d-b441-4294-8582-d5c63cc1c206}
- UIXControls
-
{5681a1bd-b3ec-450b-bf6e-38187204b6be}
UIX