aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/LSOEngine
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/ScriptEngine/LSOEngine')
-rw-r--r--OpenSim/Region/ScriptEngine/LSOEngine/LSO/Common.cs170
-rw-r--r--OpenSim/Region/ScriptEngine/LSOEngine/LSO/Engine.cs584
-rw-r--r--OpenSim/Region/ScriptEngine/LSOEngine/LSO/IL_common_functions.cs100
-rw-r--r--OpenSim/Region/ScriptEngine/LSOEngine/LSO/LSL_BaseClass_OPCODES.cs788
-rw-r--r--OpenSim/Region/ScriptEngine/LSOEngine/LSO/LSL_CLRInterface.cs148
-rw-r--r--OpenSim/Region/ScriptEngine/LSOEngine/LSO/LSL_OPCODE_IL_processor.cs868
-rw-r--r--OpenSim/Region/ScriptEngine/LSOEngine/LSO/LSO_Enums.cs1118
-rw-r--r--OpenSim/Region/ScriptEngine/LSOEngine/LSO/LSO_Parser.cs1456
-rw-r--r--OpenSim/Region/ScriptEngine/LSOEngine/LSO/LSO_Struct.cs284
-rw-r--r--OpenSim/Region/ScriptEngine/LSOEngine/Properties/AssemblyInfo.cs74
-rw-r--r--OpenSim/Region/ScriptEngine/LSOEngine/ScriptEngine.cs108
-rw-r--r--OpenSim/Region/ScriptEngine/LSOEngine/ScriptManager.cs314
12 files changed, 3006 insertions, 3006 deletions
diff --git a/OpenSim/Region/ScriptEngine/LSOEngine/LSO/Common.cs b/OpenSim/Region/ScriptEngine/LSOEngine/LSO/Common.cs
index 02f63d2..d1bc21d 100644
--- a/OpenSim/Region/ScriptEngine/LSOEngine/LSO/Common.cs
+++ b/OpenSim/Region/ScriptEngine/LSOEngine/LSO/Common.cs
@@ -1,86 +1,86 @@
1/* 1/*
2* Copyright (c) Contributors, http://opensimulator.org/ 2* Copyright (c) Contributors, http://opensimulator.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders. 3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4* 4*
5* Redistribution and use in source and binary forms, with or without 5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met: 6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright 7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer. 8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright 9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the 10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution. 11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the 12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products 13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission. 14* derived from this software without specific prior written permission.
15* 15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY 16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY 19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26* 26*
27*/ 27*/
28/* Original code: Tedd Hansen */ 28/* Original code: Tedd Hansen */
29using System; 29using System;
30 30
31namespace OpenSim.Region.ScriptEngine.LSOEngine.LSO 31namespace OpenSim.Region.ScriptEngine.LSOEngine.LSO
32{ 32{
33 public static class Common 33 public static class Common
34 { 34 {
35 public static bool Debug = true; 35 public static bool Debug = true;
36 public static bool IL_UseTryCatch = true; 36 public static bool IL_UseTryCatch = true;
37 public static bool IL_CreateConstructor = true; 37 public static bool IL_CreateConstructor = true;
38 public static bool IL_CreateFunctionList = true; 38 public static bool IL_CreateFunctionList = true;
39 public static bool IL_ProcessCodeChunks = true; 39 public static bool IL_ProcessCodeChunks = true;
40 40
41 public delegate void SendToDebugEventDelegate(string Message); 41 public delegate void SendToDebugEventDelegate(string Message);
42 42
43 public delegate void SendToLogEventDelegate(string Message); 43 public delegate void SendToLogEventDelegate(string Message);
44 44
45 public static event SendToDebugEventDelegate SendToDebugEvent; 45 public static event SendToDebugEventDelegate SendToDebugEvent;
46 public static event SendToLogEventDelegate SendToLogEvent; 46 public static event SendToLogEventDelegate SendToLogEvent;
47 47
48 public static void SendToDebug(string Message) 48 public static void SendToDebug(string Message)
49 { 49 {
50 //if (Debug == true) 50 //if (Debug == true)
51 Console.WriteLine("COMPILER:Debug: " + Message); 51 Console.WriteLine("COMPILER:Debug: " + Message);
52 SendToDebugEvent("\r\n" + DateTime.Now.ToString("[HH:mm:ss] ") + Message); 52 SendToDebugEvent("\r\n" + DateTime.Now.ToString("[HH:mm:ss] ") + Message);
53 } 53 }
54 54
55 public static void SendToLog(string Message) 55 public static void SendToLog(string Message)
56 { 56 {
57 //if (Debug == true) 57 //if (Debug == true)
58 Console.WriteLine("COMPILER:LOG: " + Message); 58 Console.WriteLine("COMPILER:LOG: " + Message);
59 SendToLogEvent("\r\n" + DateTime.Now.ToString("[HH:mm:ss] ") + Message); 59 SendToLogEvent("\r\n" + DateTime.Now.ToString("[HH:mm:ss] ") + Message);
60 } 60 }
61 } 61 }
62 62
63 public static class IL_Helper 63 public static class IL_Helper
64 { 64 {
65 public static string ReverseFormatString(string text1, string format) 65 public static string ReverseFormatString(string text1, string format)
66 { 66 {
67 Common.SendToDebug("ReverseFormatString text1: " + text1); 67 Common.SendToDebug("ReverseFormatString text1: " + text1);
68 Common.SendToDebug("ReverseFormatString format: " + format); 68 Common.SendToDebug("ReverseFormatString format: " + format);
69 return string.Format(format, text1); 69 return string.Format(format, text1);
70 } 70 }
71 71
72 public static string ReverseFormatString(string text1, UInt32 text2, string format) 72 public static string ReverseFormatString(string text1, UInt32 text2, string format)
73 { 73 {
74 Common.SendToDebug("ReverseFormatString text1: " + text1); 74 Common.SendToDebug("ReverseFormatString text1: " + text1);
75 Common.SendToDebug("ReverseFormatString text2: " + text2.ToString()); 75 Common.SendToDebug("ReverseFormatString text2: " + text2.ToString());
76 Common.SendToDebug("ReverseFormatString format: " + format); 76 Common.SendToDebug("ReverseFormatString format: " + format);
77 return string.Format(format, text1, text2.ToString()); 77 return string.Format(format, text1, text2.ToString());
78 } 78 }
79 79
80 public static string Cast_ToString(object obj) 80 public static string Cast_ToString(object obj)
81 { 81 {
82 Common.SendToDebug("OBJECT TO BE CASTED: " + obj.GetType().ToString()); 82 Common.SendToDebug("OBJECT TO BE CASTED: " + obj.GetType().ToString());
83 return "ABCDEFGIHJKLMNOPQ123"; 83 return "ABCDEFGIHJKLMNOPQ123";
84 } 84 }
85 } 85 }
86} \ No newline at end of file 86} \ No newline at end of file
diff --git a/OpenSim/Region/ScriptEngine/LSOEngine/LSO/Engine.cs b/OpenSim/Region/ScriptEngine/LSOEngine/LSO/Engine.cs
index 27acc9c..6dde3e5 100644
--- a/OpenSim/Region/ScriptEngine/LSOEngine/LSO/Engine.cs
+++ b/OpenSim/Region/ScriptEngine/LSOEngine/LSO/Engine.cs
@@ -1,293 +1,293 @@
1/* 1/*
2* Copyright (c) Contributors, http://opensimulator.org/ 2* Copyright (c) Contributors, http://opensimulator.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders. 3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4* 4*
5* Redistribution and use in source and binary forms, with or without 5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met: 6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright 7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer. 8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright 9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the 10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution. 11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the 12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products 13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission. 14* derived from this software without specific prior written permission.
15* 15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY 16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY 19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26* 26*
27*/ 27*/
28/* Original code: Tedd Hansen */ 28/* Original code: Tedd Hansen */
29using System; 29using System;
30using System.IO; 30using System.IO;
31using System.Reflection; 31using System.Reflection;
32using System.Reflection.Emit; 32using System.Reflection.Emit;
33using System.Text; 33using System.Text;
34using System.Threading; 34using System.Threading;
35using OpenSim.Region.ScriptEngine.Common; 35using OpenSim.Region.ScriptEngine.Common;
36using OpenSim.Region.ScriptEngine.LSOEngine.LSO; 36using OpenSim.Region.ScriptEngine.LSOEngine.LSO;
37 37
38namespace OpenSim.Region.ScriptEngine.LSOEngine.LSO 38namespace OpenSim.Region.ScriptEngine.LSOEngine.LSO
39{ 39{
40 public class Engine 40 public class Engine
41 { 41 {
42 //private string LSO_FileName = @"LSO\AdditionTest.lso"; 42 //private string LSO_FileName = @"LSO\AdditionTest.lso";
43 private string LSO_FileName; // = @"LSO\CloseToDefault.lso"; 43 private string LSO_FileName; // = @"LSO\CloseToDefault.lso";
44 private AppDomain appDomain; 44 private AppDomain appDomain;
45 45
46 public string Compile(string LSOFileName) 46 public string Compile(string LSOFileName)
47 { 47 {
48 LSO_FileName = LSOFileName; 48 LSO_FileName = LSOFileName;
49 49
50 50
51 //appDomain = AppDomain.CreateDomain("AlternateAppDomain"); 51 //appDomain = AppDomain.CreateDomain("AlternateAppDomain");
52 appDomain = Thread.GetDomain(); 52 appDomain = Thread.GetDomain();
53 53
54 // Create Assembly Name 54 // Create Assembly Name
55 AssemblyName asmName = new AssemblyName(); 55 AssemblyName asmName = new AssemblyName();
56 asmName.Name = Path.GetFileNameWithoutExtension(LSO_FileName); 56 asmName.Name = Path.GetFileNameWithoutExtension(LSO_FileName);
57 //asmName.Name = "TestAssembly"; 57 //asmName.Name = "TestAssembly";
58 58
59 string DLL_FileName = asmName.Name + ".dll"; 59 string DLL_FileName = asmName.Name + ".dll";
60 string DLL_FileName_WithPath = Path.GetDirectoryName(LSO_FileName) + @"\" + DLL_FileName; 60 string DLL_FileName_WithPath = Path.GetDirectoryName(LSO_FileName) + @"\" + DLL_FileName;
61 61
62 LSOEngine.LSO.Common.SendToLog("LSO File Name: " + Path.GetFileName(LSO_FileName)); 62 LSOEngine.LSO.Common.SendToLog("LSO File Name: " + Path.GetFileName(LSO_FileName));
63 LSOEngine.LSO.Common.SendToLog("Assembly name: " + asmName.Name); 63 LSOEngine.LSO.Common.SendToLog("Assembly name: " + asmName.Name);
64 LSOEngine.LSO.Common.SendToLog("Assembly File Name: " + asmName.Name + ".dll"); 64 LSOEngine.LSO.Common.SendToLog("Assembly File Name: " + asmName.Name + ".dll");
65 LSOEngine.LSO.Common.SendToLog("Starting processing of LSL ByteCode..."); 65 LSOEngine.LSO.Common.SendToLog("Starting processing of LSL ByteCode...");
66 LSOEngine.LSO.Common.SendToLog(""); 66 LSOEngine.LSO.Common.SendToLog("");
67 67
68 68
69 // Create Assembly 69 // Create Assembly
70 AssemblyBuilder asmBuilder = appDomain.DefineDynamicAssembly( 70 AssemblyBuilder asmBuilder = appDomain.DefineDynamicAssembly(
71 asmName, 71 asmName,
72 AssemblyBuilderAccess.RunAndSave 72 AssemblyBuilderAccess.RunAndSave
73 ); 73 );
74 //// Create Assembly 74 //// Create Assembly
75 //AssemblyBuilder asmBuilder = 75 //AssemblyBuilder asmBuilder =
76 // Thread.GetDomain().DefineDynamicAssembly 76 // Thread.GetDomain().DefineDynamicAssembly
77 //(asmName, AssemblyBuilderAccess.RunAndSave); 77 //(asmName, AssemblyBuilderAccess.RunAndSave);
78 78
79 // Create a module (and save to disk) 79 // Create a module (and save to disk)
80 ModuleBuilder modBuilder = asmBuilder.DefineDynamicModule 80 ModuleBuilder modBuilder = asmBuilder.DefineDynamicModule
81 (asmName.Name, 81 (asmName.Name,
82 DLL_FileName); 82 DLL_FileName);
83 83
84 //Common.SendToDebug("asmName.Name is still \"" + asmName.Name + "\""); 84 //Common.SendToDebug("asmName.Name is still \"" + asmName.Name + "\"");
85 // Create a Class (/Type) 85 // Create a Class (/Type)
86 TypeBuilder typeBuilder = modBuilder.DefineType( 86 TypeBuilder typeBuilder = modBuilder.DefineType(
87 "LSL_ScriptObject", 87 "LSL_ScriptObject",
88 TypeAttributes.Public | TypeAttributes.BeforeFieldInit, 88 TypeAttributes.Public | TypeAttributes.BeforeFieldInit,
89 typeof (LSL_BaseClass)); 89 typeof (LSL_BaseClass));
90 //, 90 //,
91 // typeof()); 91 // typeof());
92 //, typeof(LSL_BuiltIn_Commands_Interface)); 92 //, typeof(LSL_BuiltIn_Commands_Interface));
93 //, 93 //,
94 // typeof(object), 94 // typeof(object),
95 // new Type[] { typeof(LSL_CLRInterface.LSLScript) }); 95 // new Type[] { typeof(LSL_CLRInterface.LSLScript) });
96 96
97 97
98 /* 98 /*
99 * Generate the IL itself 99 * Generate the IL itself
100 */ 100 */
101 101
102 LSO_Parser LSOP = new LSO_Parser(LSO_FileName, typeBuilder); 102 LSO_Parser LSOP = new LSO_Parser(LSO_FileName, typeBuilder);
103 LSOP.OpenFile(); 103 LSOP.OpenFile();
104 LSOP.Parse(); 104 LSOP.Parse();
105 105
106 // Constructor has to be created AFTER LSO_Parser because of accumulated variables 106 // Constructor has to be created AFTER LSO_Parser because of accumulated variables
107 if (LSOEngine.LSO.Common.IL_CreateConstructor) 107 if (LSOEngine.LSO.Common.IL_CreateConstructor)
108 IL_CREATE_CONSTRUCTOR(typeBuilder, LSOP); 108 IL_CREATE_CONSTRUCTOR(typeBuilder, LSOP);
109 109
110 LSOP.CloseFile(); 110 LSOP.CloseFile();
111 /* 111 /*
112 * Done generating. Create a type and run it. 112 * Done generating. Create a type and run it.
113 */ 113 */
114 114
115 115
116 LSOEngine.LSO.Common.SendToLog("Attempting to compile assembly..."); 116 LSOEngine.LSO.Common.SendToLog("Attempting to compile assembly...");
117 // Compile it 117 // Compile it
118 Type type = typeBuilder.CreateType(); 118 Type type = typeBuilder.CreateType();
119 LSOEngine.LSO.Common.SendToLog("Compilation successful!"); 119 LSOEngine.LSO.Common.SendToLog("Compilation successful!");
120 120
121 LSOEngine.LSO.Common.SendToLog("Saving assembly: " + DLL_FileName); 121 LSOEngine.LSO.Common.SendToLog("Saving assembly: " + DLL_FileName);
122 asmBuilder.Save(DLL_FileName); 122 asmBuilder.Save(DLL_FileName);
123 123
124 LSOEngine.LSO.Common.SendToLog("Returning assembly filename: " + DLL_FileName); 124 LSOEngine.LSO.Common.SendToLog("Returning assembly filename: " + DLL_FileName);
125 125
126 126
127 return DLL_FileName; 127 return DLL_FileName;
128 128
129 129
130 //Common.SendToLog("Creating an instance of new assembly..."); 130 //Common.SendToLog("Creating an instance of new assembly...");
131 //// Create an instance we can play with 131 //// Create an instance we can play with
132 ////LSLScript hello = (LSLScript)Activator.CreateInstance(type); 132 ////LSLScript hello = (LSLScript)Activator.CreateInstance(type);
133 ////LSL_CLRInterface.LSLScript MyScript = (LSL_CLRInterface.LSLScript)Activator.CreateInstance(type); 133 ////LSL_CLRInterface.LSLScript MyScript = (LSL_CLRInterface.LSLScript)Activator.CreateInstance(type);
134 //object MyScript = (object)Activator.CreateInstance(type); 134 //object MyScript = (object)Activator.CreateInstance(type);
135 135
136 136
137 //System.Reflection.MemberInfo[] Members = type.GetMembers(); 137 //System.Reflection.MemberInfo[] Members = type.GetMembers();
138 138
139 //Common.SendToLog("Members of assembly " + type.ToString() + ":"); 139 //Common.SendToLog("Members of assembly " + type.ToString() + ":");
140 //foreach (MemberInfo member in Members) 140 //foreach (MemberInfo member in Members)
141 // Common.SendToLog(member.ToString()); 141 // Common.SendToLog(member.ToString());
142 142
143 143
144 //// Play with it 144 //// Play with it
145 ////MyScript.event_state_entry("Test"); 145 ////MyScript.event_state_entry("Test");
146 //object[] args = { null }; 146 //object[] args = { null };
147 ////System.Collections.Generic.List<string> Functions = (System.Collections.Generic.List<string>)type.InvokeMember("GetFunctions", BindingFlags.InvokeMethod, null, MyScript, null); 147 ////System.Collections.Generic.List<string> Functions = (System.Collections.Generic.List<string>)type.InvokeMember("GetFunctions", BindingFlags.InvokeMethod, null, MyScript, null);
148 148
149 //string[] ret = { }; 149 //string[] ret = { };
150 //if (Common.IL_CreateFunctionList) 150 //if (Common.IL_CreateFunctionList)
151 // ret = (string[])type.InvokeMember("GetFunctions", BindingFlags.InvokeMethod, null, MyScript, null); 151 // ret = (string[])type.InvokeMember("GetFunctions", BindingFlags.InvokeMethod, null, MyScript, null);
152 152
153 //foreach (string s in ret) 153 //foreach (string s in ret)
154 //{ 154 //{
155 // Common.SendToLog(""); 155 // Common.SendToLog("");
156 // Common.SendToLog("*** Executing LSL Server Event: " + s); 156 // Common.SendToLog("*** Executing LSL Server Event: " + s);
157 // //object test = type.GetMember(s); 157 // //object test = type.GetMember(s);
158 // //object runner = type.InvokeMember(s, BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Instance, null, MyScript, args); 158 // //object runner = type.InvokeMember(s, BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Instance, null, MyScript, args);
159 // //runner(); 159 // //runner();
160 // //objBooks_Late = type.InvokeMember(s, BindingFlags.CreateInstance, null, objApp_Late, null); 160 // //objBooks_Late = type.InvokeMember(s, BindingFlags.CreateInstance, null, objApp_Late, null);
161 // type.InvokeMember(s, BindingFlags.InvokeMethod, null, MyScript, new object[] { "Test" }); 161 // type.InvokeMember(s, BindingFlags.InvokeMethod, null, MyScript, new object[] { "Test" });
162 162
163 //} 163 //}
164 } 164 }
165 165
166 166
167 private static void IL_CREATE_CONSTRUCTOR(TypeBuilder typeBuilder, LSO_Parser LSOP) 167 private static void IL_CREATE_CONSTRUCTOR(TypeBuilder typeBuilder, LSO_Parser LSOP)
168 { 168 {
169 LSOEngine.LSO.Common.SendToDebug("IL_CREATE_CONSTRUCTOR()"); 169 LSOEngine.LSO.Common.SendToDebug("IL_CREATE_CONSTRUCTOR()");
170 //ConstructorBuilder constructor = typeBuilder.DefineConstructor( 170 //ConstructorBuilder constructor = typeBuilder.DefineConstructor(
171 // MethodAttributes.Public, 171 // MethodAttributes.Public,
172 // CallingConventions.Standard, 172 // CallingConventions.Standard,
173 // new Type[0]); 173 // new Type[0]);
174 ConstructorBuilder constructor = typeBuilder.DefineConstructor( 174 ConstructorBuilder constructor = typeBuilder.DefineConstructor(
175 MethodAttributes.Public | 175 MethodAttributes.Public |
176 MethodAttributes.SpecialName | 176 MethodAttributes.SpecialName |
177 MethodAttributes.RTSpecialName, 177 MethodAttributes.RTSpecialName,
178 CallingConventions.Standard, 178 CallingConventions.Standard,
179 new Type[0]); 179 new Type[0]);
180 180
181 //Define the reflection ConstructorInfor for System.Object 181 //Define the reflection ConstructorInfor for System.Object
182 ConstructorInfo conObj = typeof (LSL_BaseClass).GetConstructor(new Type[0]); 182 ConstructorInfo conObj = typeof (LSL_BaseClass).GetConstructor(new Type[0]);
183 183
184 //call constructor of base object 184 //call constructor of base object
185 ILGenerator il = constructor.GetILGenerator(); 185 ILGenerator il = constructor.GetILGenerator();
186 186
187 il.Emit(OpCodes.Ldarg_0); 187 il.Emit(OpCodes.Ldarg_0);
188 il.Emit(OpCodes.Call, conObj); 188 il.Emit(OpCodes.Call, conObj);
189 189
190 190
191 //Common.SendToDebug("IL_CREATE_CONSTRUCTOR: Creating global: UInt32 State = 0;"); 191 //Common.SendToDebug("IL_CREATE_CONSTRUCTOR: Creating global: UInt32 State = 0;");
192 //string FieldName; 192 //string FieldName;
193 //// Create state object 193 //// Create state object
194 //FieldName = "State"; 194 //FieldName = "State";
195 //FieldBuilder State_fb = typeBuilder.DefineField( 195 //FieldBuilder State_fb = typeBuilder.DefineField(
196 // FieldName, 196 // FieldName,
197 // typeof(UInt32), 197 // typeof(UInt32),
198 // FieldAttributes.Public); 198 // FieldAttributes.Public);
199 //il.Emit(OpCodes.Ldarg_0); 199 //il.Emit(OpCodes.Ldarg_0);
200 //il.Emit(OpCodes.Ldc_I4, 0); 200 //il.Emit(OpCodes.Ldc_I4, 0);
201 //il.Emit(OpCodes.Stfld, State_fb); 201 //il.Emit(OpCodes.Stfld, State_fb);
202 202
203 203
204 //Common.SendToDebug("IL_CREATE_CONSTRUCTOR: Creating global: LSL_BuiltIn_Commands_TestImplementation LSL_BuiltIns = New LSL_BuiltIn_Commands_TestImplementation();"); 204 //Common.SendToDebug("IL_CREATE_CONSTRUCTOR: Creating global: LSL_BuiltIn_Commands_TestImplementation LSL_BuiltIns = New LSL_BuiltIn_Commands_TestImplementation();");
205 ////Type objType1 = typeof(object); 205 ////Type objType1 = typeof(object);
206 //Type objType1 = typeof(LSL_BuiltIn_Commands_TestImplementation); 206 //Type objType1 = typeof(LSL_BuiltIn_Commands_TestImplementation);
207 207
208 //FieldName = "LSL_BuiltIns"; 208 //FieldName = "LSL_BuiltIns";
209 //FieldBuilder LSL_BuiltIns_fb = typeBuilder.DefineField( 209 //FieldBuilder LSL_BuiltIns_fb = typeBuilder.DefineField(
210 // FieldName, 210 // FieldName,
211 // objType1, 211 // objType1,
212 // FieldAttributes.Public); 212 // FieldAttributes.Public);
213 213
214 ////LSL_BuiltIn_Commands_TestImplementation _ti = new LSL_BuiltIn_Commands_TestImplementation(); 214 ////LSL_BuiltIn_Commands_TestImplementation _ti = new LSL_BuiltIn_Commands_TestImplementation();
215 //il.Emit(OpCodes.Ldarg_0); 215 //il.Emit(OpCodes.Ldarg_0);
216 ////il.Emit(OpCodes.Ldstr, "Test 123"); 216 ////il.Emit(OpCodes.Ldstr, "Test 123");
217 //il.Emit(OpCodes.Newobj, objType1.GetConstructor(new Type[] { })); 217 //il.Emit(OpCodes.Newobj, objType1.GetConstructor(new Type[] { }));
218 //il.Emit(OpCodes.Stfld, LSL_BuiltIns_fb); 218 //il.Emit(OpCodes.Stfld, LSL_BuiltIns_fb);
219 219
220 foreach (UInt32 pos in LSOP.StaticBlocks.Keys) 220 foreach (UInt32 pos in LSOP.StaticBlocks.Keys)
221 { 221 {
222 LSO_Struct.StaticBlock sb; 222 LSO_Struct.StaticBlock sb;
223 LSOP.StaticBlocks.TryGetValue(pos, out sb); 223 LSOP.StaticBlocks.TryGetValue(pos, out sb);
224 224
225 if (sb.ObjectType > 0 && sb.ObjectType < 8) 225 if (sb.ObjectType > 0 && sb.ObjectType < 8)
226 { 226 {
227 // We don't want void or null's 227 // We don't want void or null's
228 228
229 il.Emit(OpCodes.Ldarg_0); 229 il.Emit(OpCodes.Ldarg_0);
230 // Push position to stack 230 // Push position to stack
231 il.Emit(OpCodes.Ldc_I4, pos); 231 il.Emit(OpCodes.Ldc_I4, pos);
232 //il.Emit(OpCodes.Box, typeof(UInt32)); 232 //il.Emit(OpCodes.Box, typeof(UInt32));
233 233
234 234
235 Type datatype = null; 235 Type datatype = null;
236 236
237 // Push data to stack 237 // Push data to stack
238 LSOEngine.LSO.Common.SendToDebug("Adding to static (" + pos + ") type: " + 238 LSOEngine.LSO.Common.SendToDebug("Adding to static (" + pos + ") type: " +
239 ((LSO_Enums.Variable_Type_Codes) sb.ObjectType).ToString() + " (" + sb.ObjectType + 239 ((LSO_Enums.Variable_Type_Codes) sb.ObjectType).ToString() + " (" + sb.ObjectType +
240 ")"); 240 ")");
241 switch ((LSO_Enums.Variable_Type_Codes) sb.ObjectType) 241 switch ((LSO_Enums.Variable_Type_Codes) sb.ObjectType)
242 { 242 {
243 case LSO_Enums.Variable_Type_Codes.Float: 243 case LSO_Enums.Variable_Type_Codes.Float:
244 case LSO_Enums.Variable_Type_Codes.Integer: 244 case LSO_Enums.Variable_Type_Codes.Integer:
245 //UInt32 245 //UInt32
246 il.Emit(OpCodes.Ldc_I4, BitConverter.ToUInt32(sb.BlockVariable, 0)); 246 il.Emit(OpCodes.Ldc_I4, BitConverter.ToUInt32(sb.BlockVariable, 0));
247 datatype = typeof (UInt32); 247 datatype = typeof (UInt32);
248 il.Emit(OpCodes.Box, datatype); 248 il.Emit(OpCodes.Box, datatype);
249 break; 249 break;
250 case LSO_Enums.Variable_Type_Codes.String: 250 case LSO_Enums.Variable_Type_Codes.String:
251 case LSO_Enums.Variable_Type_Codes.Key: 251 case LSO_Enums.Variable_Type_Codes.Key:
252 //String 252 //String
253 LSO_Struct.HeapBlock hb = 253 LSO_Struct.HeapBlock hb =
254 LSOP.GetHeap(LSOP.myHeader.HR + BitConverter.ToUInt32(sb.BlockVariable, 0) - 1); 254 LSOP.GetHeap(LSOP.myHeader.HR + BitConverter.ToUInt32(sb.BlockVariable, 0) - 1);
255 il.Emit(OpCodes.Ldstr, Encoding.UTF8.GetString(hb.Data)); 255 il.Emit(OpCodes.Ldstr, Encoding.UTF8.GetString(hb.Data));
256 datatype = typeof (string); 256 datatype = typeof (string);
257 break; 257 break;
258 case LSO_Enums.Variable_Type_Codes.Vector: 258 case LSO_Enums.Variable_Type_Codes.Vector:
259 datatype = typeof (LSO_Enums.Vector); 259 datatype = typeof (LSO_Enums.Vector);
260 //TODO: Not implemented 260 //TODO: Not implemented
261 break; 261 break;
262 case LSO_Enums.Variable_Type_Codes.Rotation: 262 case LSO_Enums.Variable_Type_Codes.Rotation:
263 //Object 263 //Object
264 //TODO: Not implemented 264 //TODO: Not implemented
265 datatype = typeof (LSO_Enums.Rotation); 265 datatype = typeof (LSO_Enums.Rotation);
266 break; 266 break;
267 default: 267 default:
268 datatype = typeof (object); 268 datatype = typeof (object);
269 break; 269 break;
270 } 270 }
271 271
272 272
273 // Make call 273 // Make call
274 il.Emit(OpCodes.Call, 274 il.Emit(OpCodes.Call,
275 typeof (LSL_BaseClass).GetMethod("AddToStatic", new Type[] {typeof (UInt32), datatype})); 275 typeof (LSL_BaseClass).GetMethod("AddToStatic", new Type[] {typeof (UInt32), datatype}));
276 } 276 }
277 } 277 }
278 278
279 279
280 ////il.Emit(OpCodes.Newobj, typeof(UInt32)); 280 ////il.Emit(OpCodes.Newobj, typeof(UInt32));
281 //il.Emit(OpCodes.Starg_0); 281 //il.Emit(OpCodes.Starg_0);
282 //// Create LSL function library 282 //// Create LSL function library
283 //FieldBuilder LSL_BuiltIns_fb = typeBuilder.DefineField("LSL_BuiltIns", typeof(LSL_BuiltIn_Commands_Interface), FieldAttributes.Public); 283 //FieldBuilder LSL_BuiltIns_fb = typeBuilder.DefineField("LSL_BuiltIns", typeof(LSL_BuiltIn_Commands_Interface), FieldAttributes.Public);
284 //il.Emit(OpCodes.Newobj, typeof(LSL_BuiltIn_Commands_Interface)); 284 //il.Emit(OpCodes.Newobj, typeof(LSL_BuiltIn_Commands_Interface));
285 //il.Emit(OpCodes.Stloc_1); 285 //il.Emit(OpCodes.Stloc_1);
286 286
287 il.Emit(OpCodes.Ret); 287 il.Emit(OpCodes.Ret);
288 } 288 }
289 289
290 290
291 // End of class 291 // End of class
292 } 292 }
293} \ No newline at end of file 293} \ No newline at end of file
diff --git a/OpenSim/Region/ScriptEngine/LSOEngine/LSO/IL_common_functions.cs b/OpenSim/Region/ScriptEngine/LSOEngine/LSO/IL_common_functions.cs
index 5125c80..9c57bcd 100644
--- a/OpenSim/Region/ScriptEngine/LSOEngine/LSO/IL_common_functions.cs
+++ b/OpenSim/Region/ScriptEngine/LSOEngine/LSO/IL_common_functions.cs
@@ -1,51 +1,51 @@
1/* 1/*
2* Copyright (c) Contributors, http://opensimulator.org/ 2* Copyright (c) Contributors, http://opensimulator.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders. 3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4* 4*
5* Redistribution and use in source and binary forms, with or without 5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met: 6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright 7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer. 8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright 9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the 10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution. 11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the 12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products 13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission. 14* derived from this software without specific prior written permission.
15* 15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY 16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY 19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26* 26*
27*/ 27*/
28/* Original code: Tedd Hansen */ 28/* Original code: Tedd Hansen */
29using System; 29using System;
30using System.Reflection; 30using System.Reflection;
31using System.Reflection.Emit; 31using System.Reflection.Emit;
32 32
33namespace OpenSim.Region.ScriptEngine.LSOEngine.LSO 33namespace OpenSim.Region.ScriptEngine.LSOEngine.LSO
34{ 34{
35 internal partial class LSO_Parser 35 internal partial class LSO_Parser
36 { 36 {
37 private static TypeBuilder CreateType(ModuleBuilder modBuilder, string typeName) 37 private static TypeBuilder CreateType(ModuleBuilder modBuilder, string typeName)
38 { 38 {
39 TypeBuilder typeBuilder = modBuilder.DefineType(typeName, 39 TypeBuilder typeBuilder = modBuilder.DefineType(typeName,
40 TypeAttributes.Public | 40 TypeAttributes.Public |
41 TypeAttributes.Class | 41 TypeAttributes.Class |
42 TypeAttributes.AutoClass | 42 TypeAttributes.AutoClass |
43 TypeAttributes.AnsiClass | 43 TypeAttributes.AnsiClass |
44 TypeAttributes.BeforeFieldInit | 44 TypeAttributes.BeforeFieldInit |
45 TypeAttributes.AutoLayout, 45 TypeAttributes.AutoLayout,
46 typeof (object), 46 typeof (object),
47 new Type[] {typeof (object)}); 47 new Type[] {typeof (object)});
48 return typeBuilder; 48 return typeBuilder;
49 } 49 }
50 } 50 }
51} \ No newline at end of file 51} \ No newline at end of file
diff --git a/OpenSim/Region/ScriptEngine/LSOEngine/LSO/LSL_BaseClass_OPCODES.cs b/OpenSim/Region/ScriptEngine/LSOEngine/LSO/LSL_BaseClass_OPCODES.cs
index 339a99f..54cc5c5 100644
--- a/OpenSim/Region/ScriptEngine/LSOEngine/LSO/LSL_BaseClass_OPCODES.cs
+++ b/OpenSim/Region/ScriptEngine/LSOEngine/LSO/LSL_BaseClass_OPCODES.cs
@@ -1,395 +1,395 @@
1/* 1/*
2* Copyright (c) Contributors, http://opensimulator.org/ 2* Copyright (c) Contributors, http://opensimulator.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders. 3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4* 4*
5* Redistribution and use in source and binary forms, with or without 5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met: 6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright 7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer. 8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright 9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the 10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution. 11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the 12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products 13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission. 14* derived from this software without specific prior written permission.
15* 15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY 16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY 19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26* 26*
27*/ 27*/
28 28
29using System; 29using System;
30using System.Collections.Generic; 30using System.Collections.Generic;
31 31
32namespace OpenSim.Region.ScriptEngine.LSOEngine.LSO 32namespace OpenSim.Region.ScriptEngine.LSOEngine.LSO
33{ 33{
34 //public partial class LSL_BaseClass 34 //public partial class LSL_BaseClass
35 //{ 35 //{
36 // /* 36 // /*
37 // * OPCODES 37 // * OPCODES
38 // * 38 // *
39 // * These are internal "assembly" commands, 39 // * These are internal "assembly" commands,
40 // * basic operators like "ADD", "PUSH" and "POP" 40 // * basic operators like "ADD", "PUSH" and "POP"
41 // * 41 // *
42 // * It also contains managed stack and keeps track of internal variables, etc. 42 // * It also contains managed stack and keeps track of internal variables, etc.
43 // * 43 // *
44 // */ 44 // */
45 45
46 46
47 // public void StoreToLocal(UInt32 index) 47 // public void StoreToLocal(UInt32 index)
48 // { 48 // {
49 // // TODO: How to determine local? 49 // // TODO: How to determine local?
50 // LSOEngine.LSO.Common.SendToDebug("::StoreToLocal " + index); 50 // LSOEngine.LSO.Common.SendToDebug("::StoreToLocal " + index);
51 // if (LocalVariables.ContainsKey(index)) 51 // if (LocalVariables.ContainsKey(index))
52 // LocalVariables.Remove(index); 52 // LocalVariables.Remove(index);
53 // LocalVariables.Add(index, LSLStack.Peek()); 53 // LocalVariables.Add(index, LSLStack.Peek());
54 // } 54 // }
55 55
56 // public void StoreToGlobal(UInt32 index) 56 // public void StoreToGlobal(UInt32 index)
57 // { 57 // {
58 // LSOEngine.LSO.Common.SendToDebug("::StoreToGlobal " + index); 58 // LSOEngine.LSO.Common.SendToDebug("::StoreToGlobal " + index);
59 // if (GlobalVariables.ContainsKey(index)) 59 // if (GlobalVariables.ContainsKey(index))
60 // GlobalVariables.Remove(index); 60 // GlobalVariables.Remove(index);
61 // GlobalVariables.Add(index, LSLStack.Peek()); 61 // GlobalVariables.Add(index, LSLStack.Peek());
62 // } 62 // }
63 63
64 // public void StoreToStatic(UInt32 index) 64 // public void StoreToStatic(UInt32 index)
65 // { 65 // {
66 // LSOEngine.LSO.Common.SendToDebug("::StoreToStatic " + index); 66 // LSOEngine.LSO.Common.SendToDebug("::StoreToStatic " + index);
67 // //if (StaticVariables.ContainsKey(index)) 67 // //if (StaticVariables.ContainsKey(index))
68 // // StaticVariables.Remove(index); 68 // // StaticVariables.Remove(index);
69 // StaticVariables.Add(index, LSLStack.Peek()); 69 // StaticVariables.Add(index, LSLStack.Peek());
70 // } 70 // }
71 71
72 // public void GetFromLocal(UInt32 index) 72 // public void GetFromLocal(UInt32 index)
73 // { 73 // {
74 // // TODO: How to determine local? 74 // // TODO: How to determine local?
75 // LSOEngine.LSO.Common.SendToDebug("::GetFromLocal " + index); 75 // LSOEngine.LSO.Common.SendToDebug("::GetFromLocal " + index);
76 // object ret; 76 // object ret;
77 // LocalVariables.TryGetValue(index, out ret); 77 // LocalVariables.TryGetValue(index, out ret);
78 // LSLStack.Push(ret); 78 // LSLStack.Push(ret);
79 // //return ret; 79 // //return ret;
80 // } 80 // }
81 81
82 // public void GetFromGlobal(UInt32 index) 82 // public void GetFromGlobal(UInt32 index)
83 // { 83 // {
84 // LSOEngine.LSO.Common.SendToDebug("::GetFromGlobal " + index); 84 // LSOEngine.LSO.Common.SendToDebug("::GetFromGlobal " + index);
85 // object ret; 85 // object ret;
86 // GlobalVariables.TryGetValue(index, out ret); 86 // GlobalVariables.TryGetValue(index, out ret);
87 // LSLStack.Push(ret); 87 // LSLStack.Push(ret);
88 // //return ret; 88 // //return ret;
89 // } 89 // }
90 90
91 // public void GetFromStatic(UInt32 index) 91 // public void GetFromStatic(UInt32 index)
92 // { 92 // {
93 // LSOEngine.LSO.Common.SendToDebug("::GetFromStatic " + index); 93 // LSOEngine.LSO.Common.SendToDebug("::GetFromStatic " + index);
94 // object ret; 94 // object ret;
95 // StaticVariables.TryGetValue(index, out ret); 95 // StaticVariables.TryGetValue(index, out ret);
96 // LSOEngine.LSO.Common.SendToDebug("::GetFromStatic - ObjectType: " + ret.GetType().ToString()); 96 // LSOEngine.LSO.Common.SendToDebug("::GetFromStatic - ObjectType: " + ret.GetType().ToString());
97 // LSLStack.Push(ret); 97 // LSLStack.Push(ret);
98 // //return ret; 98 // //return ret;
99 // } 99 // }
100 100
101 // public object POPToStack() 101 // public object POPToStack()
102 // { 102 // {
103 // LSOEngine.LSO.Common.SendToDebug("::POPToStack"); 103 // LSOEngine.LSO.Common.SendToDebug("::POPToStack");
104 // //return LSLStack.Pop(); 104 // //return LSLStack.Pop();
105 // object p = LSLStack.Pop(); 105 // object p = LSLStack.Pop();
106 // if (p.GetType() == typeof (UInt32)) 106 // if (p.GetType() == typeof (UInt32))
107 // return (UInt32) p; 107 // return (UInt32) p;
108 // if (p.GetType() == typeof (string)) 108 // if (p.GetType() == typeof (string))
109 // return (string) p; 109 // return (string) p;
110 // if (p.GetType() == typeof (Int32)) 110 // if (p.GetType() == typeof (Int32))
111 // return (Int32) p; 111 // return (Int32) p;
112 // if (p.GetType() == typeof (UInt16)) 112 // if (p.GetType() == typeof (UInt16))
113 // return (UInt16) p; 113 // return (UInt16) p;
114 // if (p.GetType() == typeof (float)) 114 // if (p.GetType() == typeof (float))
115 // return (float) p; 115 // return (float) p;
116 // if (p.GetType() == typeof (LSO_Enums.Vector)) 116 // if (p.GetType() == typeof (LSO_Enums.Vector))
117 // return (LSO_Enums.Vector) p; 117 // return (LSO_Enums.Vector) p;
118 // if (p.GetType() == typeof (LSO_Enums.Rotation)) 118 // if (p.GetType() == typeof (LSO_Enums.Rotation))
119 // return (LSO_Enums.Rotation) p; 119 // return (LSO_Enums.Rotation) p;
120 // if (p.GetType() == typeof (LSO_Enums.Key)) 120 // if (p.GetType() == typeof (LSO_Enums.Key))
121 // return (LSO_Enums.Key) p; 121 // return (LSO_Enums.Key) p;
122 122
123 // return p; 123 // return p;
124 // } 124 // }
125 125
126 // //public object POPToStack(UInt32 count) 126 // //public object POPToStack(UInt32 count)
127 // //{ 127 // //{
128 // // // POP NUMBER FROM TOP OF STACK 128 // // // POP NUMBER FROM TOP OF STACK
129 // // //LSLStack.SetLength(LSLStack.Length - 4); 129 // // //LSLStack.SetLength(LSLStack.Length - 4);
130 // // Common.SendToDebug("::POPToStack " + count); 130 // // Common.SendToDebug("::POPToStack " + count);
131 // // if (count < 2) 131 // // if (count < 2)
132 // // return LSLStack.Pop(); 132 // // return LSLStack.Pop();
133 133
134 // // Stack<object> s = new Stack<object>(); 134 // // Stack<object> s = new Stack<object>();
135 // // for (int i = 0; i < count; i++) 135 // // for (int i = 0; i < count; i++)
136 // // { 136 // // {
137 // // s.Push(LSLStack.Pop); 137 // // s.Push(LSLStack.Pop);
138 138
139 // // } 139 // // }
140 140
141 // //} 141 // //}
142 142
143 // public void POP() 143 // public void POP()
144 // { 144 // {
145 // // POP NUMBER FROM TOP OF STACK 145 // // POP NUMBER FROM TOP OF STACK
146 // //LSLStack.SetLength(LSLStack.Length - 4); 146 // //LSLStack.SetLength(LSLStack.Length - 4);
147 // LSOEngine.LSO.Common.SendToDebug("::POP"); 147 // LSOEngine.LSO.Common.SendToDebug("::POP");
148 // if (LSLStack.Count < 1) 148 // if (LSLStack.Count < 1)
149 // { 149 // {
150 // //TODO: Temporary fix 150 // //TODO: Temporary fix
151 // LSOEngine.LSO.Common.SendToDebug("ERROR: TRYING TO POP EMPTY STACK!"); 151 // LSOEngine.LSO.Common.SendToDebug("ERROR: TRYING TO POP EMPTY STACK!");
152 // } 152 // }
153 // else 153 // else
154 // { 154 // {
155 // LSLStack.Pop(); 155 // LSLStack.Pop();
156 // } 156 // }
157 // } 157 // }
158 158
159 // public void PUSH(object Param) 159 // public void PUSH(object Param)
160 // { 160 // {
161 // if (Param == null) 161 // if (Param == null)
162 // { 162 // {
163 // LSOEngine.LSO.Common.SendToDebug("::PUSH: <null>"); 163 // LSOEngine.LSO.Common.SendToDebug("::PUSH: <null>");
164 // } 164 // }
165 // else 165 // else
166 // { 166 // {
167 // //Common.SendToDebug("::PUSH: " + Param.GetType()); 167 // //Common.SendToDebug("::PUSH: " + Param.GetType());
168 // } 168 // }
169 169
170 // LSLStack.Push(Param); 170 // LSLStack.Push(Param);
171 // } 171 // }
172 172
173 // public void ADD(UInt32 Param) 173 // public void ADD(UInt32 Param)
174 // { 174 // {
175 // LSOEngine.LSO.Common.SendToDebug("::ADD: " + Param); 175 // LSOEngine.LSO.Common.SendToDebug("::ADD: " + Param);
176 // object o2 = LSLStack.Pop(); 176 // object o2 = LSLStack.Pop();
177 // object o1 = LSLStack.Pop(); 177 // object o1 = LSLStack.Pop();
178 // LSOEngine.LSO.Common.SendToDebug("::ADD: Debug: o1: " + o1.GetType() + " (" + o1.ToString() + "), o2: " + o2.GetType() + 178 // LSOEngine.LSO.Common.SendToDebug("::ADD: Debug: o1: " + o1.GetType() + " (" + o1.ToString() + "), o2: " + o2.GetType() +
179 // " (" + o2.ToString() + ")"); 179 // " (" + o2.ToString() + ")");
180 // if (o2.GetType() == typeof (string)) 180 // if (o2.GetType() == typeof (string))
181 // { 181 // {
182 // LSLStack.Push((string) o1 + (string) o2); 182 // LSLStack.Push((string) o1 + (string) o2);
183 // return; 183 // return;
184 // } 184 // }
185 // if (o2.GetType() == typeof (UInt32)) 185 // if (o2.GetType() == typeof (UInt32))
186 // { 186 // {
187 // LSLStack.Push((UInt32) o1 + (UInt32) o2); 187 // LSLStack.Push((UInt32) o1 + (UInt32) o2);
188 // return; 188 // return;
189 // } 189 // }
190 // } 190 // }
191 191
192 // public void SUB(UInt32 Param) 192 // public void SUB(UInt32 Param)
193 // { 193 // {
194 // LSOEngine.LSO.Common.SendToDebug("::SUB: " + Param); 194 // LSOEngine.LSO.Common.SendToDebug("::SUB: " + Param);
195 // UInt32 i2 = (UInt32) LSLStack.Pop(); 195 // UInt32 i2 = (UInt32) LSLStack.Pop();
196 // UInt32 i1 = (UInt32) LSLStack.Pop(); 196 // UInt32 i1 = (UInt32) LSLStack.Pop();
197 // LSLStack.Push((UInt32) (i1 - i2)); 197 // LSLStack.Push((UInt32) (i1 - i2));
198 // } 198 // }
199 199
200 // public void MUL(UInt32 Param) 200 // public void MUL(UInt32 Param)
201 // { 201 // {
202 // LSOEngine.LSO.Common.SendToDebug("::SUB: " + Param); 202 // LSOEngine.LSO.Common.SendToDebug("::SUB: " + Param);
203 // UInt32 i2 = (UInt32) LSLStack.Pop(); 203 // UInt32 i2 = (UInt32) LSLStack.Pop();
204 // UInt32 i1 = (UInt32) LSLStack.Pop(); 204 // UInt32 i1 = (UInt32) LSLStack.Pop();
205 // LSLStack.Push((UInt32) (i1*i2)); 205 // LSLStack.Push((UInt32) (i1*i2));
206 // } 206 // }
207 207
208 // public void DIV(UInt32 Param) 208 // public void DIV(UInt32 Param)
209 // { 209 // {
210 // LSOEngine.LSO.Common.SendToDebug("::DIV: " + Param); 210 // LSOEngine.LSO.Common.SendToDebug("::DIV: " + Param);
211 // UInt32 i2 = (UInt32) LSLStack.Pop(); 211 // UInt32 i2 = (UInt32) LSLStack.Pop();
212 // UInt32 i1 = (UInt32) LSLStack.Pop(); 212 // UInt32 i1 = (UInt32) LSLStack.Pop();
213 // LSLStack.Push((UInt32) (i1/i2)); 213 // LSLStack.Push((UInt32) (i1/i2));
214 // } 214 // }
215 215
216 216
217 // public void MOD(UInt32 Param) 217 // public void MOD(UInt32 Param)
218 // { 218 // {
219 // LSOEngine.LSO.Common.SendToDebug("::MOD: " + Param); 219 // LSOEngine.LSO.Common.SendToDebug("::MOD: " + Param);
220 // UInt32 i2 = (UInt32) LSLStack.Pop(); 220 // UInt32 i2 = (UInt32) LSLStack.Pop();
221 // UInt32 i1 = (UInt32) LSLStack.Pop(); 221 // UInt32 i1 = (UInt32) LSLStack.Pop();
222 // LSLStack.Push((UInt32) (i1%i2)); 222 // LSLStack.Push((UInt32) (i1%i2));
223 // } 223 // }
224 224
225 // public void EQ(UInt32 Param) 225 // public void EQ(UInt32 Param)
226 // { 226 // {
227 // LSOEngine.LSO.Common.SendToDebug("::EQ: " + Param); 227 // LSOEngine.LSO.Common.SendToDebug("::EQ: " + Param);
228 // UInt32 i2 = (UInt32) LSLStack.Pop(); 228 // UInt32 i2 = (UInt32) LSLStack.Pop();
229 // UInt32 i1 = (UInt32) LSLStack.Pop(); 229 // UInt32 i1 = (UInt32) LSLStack.Pop();
230 // if (i1 == i2) 230 // if (i1 == i2)
231 // { 231 // {
232 // LSLStack.Push((UInt32) 1); 232 // LSLStack.Push((UInt32) 1);
233 // } 233 // }
234 // else 234 // else
235 // { 235 // {
236 // LSLStack.Push((UInt32) 0); 236 // LSLStack.Push((UInt32) 0);
237 // } 237 // }
238 // } 238 // }
239 239
240 // public void NEQ(UInt32 Param) 240 // public void NEQ(UInt32 Param)
241 // { 241 // {
242 // LSOEngine.LSO.Common.SendToDebug("::NEQ: " + Param); 242 // LSOEngine.LSO.Common.SendToDebug("::NEQ: " + Param);
243 // UInt32 i2 = (UInt32) LSLStack.Pop(); 243 // UInt32 i2 = (UInt32) LSLStack.Pop();
244 // UInt32 i1 = (UInt32) LSLStack.Pop(); 244 // UInt32 i1 = (UInt32) LSLStack.Pop();
245 // if (i1 != i2) 245 // if (i1 != i2)
246 // { 246 // {
247 // LSLStack.Push((UInt32) 1); 247 // LSLStack.Push((UInt32) 1);
248 // } 248 // }
249 // else 249 // else
250 // { 250 // {
251 // LSLStack.Push((UInt32) 0); 251 // LSLStack.Push((UInt32) 0);
252 // } 252 // }
253 // } 253 // }
254 254
255 // public void LEQ(UInt32 Param) 255 // public void LEQ(UInt32 Param)
256 // { 256 // {
257 // LSOEngine.LSO.Common.SendToDebug("::LEQ: " + Param); 257 // LSOEngine.LSO.Common.SendToDebug("::LEQ: " + Param);
258 // UInt32 i2 = (UInt32) LSLStack.Pop(); 258 // UInt32 i2 = (UInt32) LSLStack.Pop();
259 // UInt32 i1 = (UInt32) LSLStack.Pop(); 259 // UInt32 i1 = (UInt32) LSLStack.Pop();
260 // if (i1 <= i2) 260 // if (i1 <= i2)
261 // { 261 // {
262 // LSLStack.Push((UInt32) 1); 262 // LSLStack.Push((UInt32) 1);
263 // } 263 // }
264 // else 264 // else
265 // { 265 // {
266 // LSLStack.Push((UInt32) 0); 266 // LSLStack.Push((UInt32) 0);
267 // } 267 // }
268 // } 268 // }
269 269
270 // public void GEQ(UInt32 Param) 270 // public void GEQ(UInt32 Param)
271 // { 271 // {
272 // LSOEngine.LSO.Common.SendToDebug("::GEQ: " + Param); 272 // LSOEngine.LSO.Common.SendToDebug("::GEQ: " + Param);
273 // UInt32 i2 = (UInt32) LSLStack.Pop(); 273 // UInt32 i2 = (UInt32) LSLStack.Pop();
274 // UInt32 i1 = (UInt32) LSLStack.Pop(); 274 // UInt32 i1 = (UInt32) LSLStack.Pop();
275 // if (i1 >= i2) 275 // if (i1 >= i2)
276 // { 276 // {
277 // LSLStack.Push((UInt32) 1); 277 // LSLStack.Push((UInt32) 1);
278 // } 278 // }
279 // else 279 // else
280 // { 280 // {
281 // LSLStack.Push((UInt32) 0); 281 // LSLStack.Push((UInt32) 0);
282 // } 282 // }
283 // } 283 // }
284 284
285 // public void LESS(UInt32 Param) 285 // public void LESS(UInt32 Param)
286 // { 286 // {
287 // LSOEngine.LSO.Common.SendToDebug("::LESS: " + Param); 287 // LSOEngine.LSO.Common.SendToDebug("::LESS: " + Param);
288 // UInt32 i2 = (UInt32) LSLStack.Pop(); 288 // UInt32 i2 = (UInt32) LSLStack.Pop();
289 // UInt32 i1 = (UInt32) LSLStack.Pop(); 289 // UInt32 i1 = (UInt32) LSLStack.Pop();
290 // if (i1 < i2) 290 // if (i1 < i2)
291 // { 291 // {
292 // LSLStack.Push((UInt32) 1); 292 // LSLStack.Push((UInt32) 1);
293 // } 293 // }
294 // else 294 // else
295 // { 295 // {
296 // LSLStack.Push((UInt32) 0); 296 // LSLStack.Push((UInt32) 0);
297 // } 297 // }
298 // } 298 // }
299 299
300 // public void GREATER(UInt32 Param) 300 // public void GREATER(UInt32 Param)
301 // { 301 // {
302 // LSOEngine.LSO.Common.SendToDebug("::GREATER: " + Param); 302 // LSOEngine.LSO.Common.SendToDebug("::GREATER: " + Param);
303 // UInt32 i2 = (UInt32) LSLStack.Pop(); 303 // UInt32 i2 = (UInt32) LSLStack.Pop();
304 // UInt32 i1 = (UInt32) LSLStack.Pop(); 304 // UInt32 i1 = (UInt32) LSLStack.Pop();
305 // if (i1 > i2) 305 // if (i1 > i2)
306 // { 306 // {
307 // LSLStack.Push((UInt32) 1); 307 // LSLStack.Push((UInt32) 1);
308 // } 308 // }
309 // else 309 // else
310 // { 310 // {
311 // LSLStack.Push((UInt32) 0); 311 // LSLStack.Push((UInt32) 0);
312 // } 312 // }
313 // } 313 // }
314 314
315 315
316 // public void BITAND() 316 // public void BITAND()
317 // { 317 // {
318 // LSOEngine.LSO.Common.SendToDebug("::BITAND"); 318 // LSOEngine.LSO.Common.SendToDebug("::BITAND");
319 // UInt32 i2 = (UInt32) LSLStack.Pop(); 319 // UInt32 i2 = (UInt32) LSLStack.Pop();
320 // UInt32 i1 = (UInt32) LSLStack.Pop(); 320 // UInt32 i1 = (UInt32) LSLStack.Pop();
321 // LSLStack.Push((UInt32) (i1 & i2)); 321 // LSLStack.Push((UInt32) (i1 & i2));
322 // } 322 // }
323 323
324 // public void BITOR() 324 // public void BITOR()
325 // { 325 // {
326 // LSOEngine.LSO.Common.SendToDebug("::BITOR"); 326 // LSOEngine.LSO.Common.SendToDebug("::BITOR");
327 // UInt32 i2 = (UInt32) LSLStack.Pop(); 327 // UInt32 i2 = (UInt32) LSLStack.Pop();
328 // UInt32 i1 = (UInt32) LSLStack.Pop(); 328 // UInt32 i1 = (UInt32) LSLStack.Pop();
329 // LSLStack.Push((UInt32) (i1 | i2)); 329 // LSLStack.Push((UInt32) (i1 | i2));
330 // } 330 // }
331 331
332 // public void BITXOR() 332 // public void BITXOR()
333 // { 333 // {
334 // LSOEngine.LSO.Common.SendToDebug("::BITXOR"); 334 // LSOEngine.LSO.Common.SendToDebug("::BITXOR");
335 // UInt32 i2 = (UInt32) LSLStack.Pop(); 335 // UInt32 i2 = (UInt32) LSLStack.Pop();
336 // UInt32 i1 = (UInt32) LSLStack.Pop(); 336 // UInt32 i1 = (UInt32) LSLStack.Pop();
337 // LSLStack.Push((UInt32) (i1 ^ i2)); 337 // LSLStack.Push((UInt32) (i1 ^ i2));
338 // } 338 // }
339 339
340 // public void BOOLAND() 340 // public void BOOLAND()
341 // { 341 // {
342 // LSOEngine.LSO.Common.SendToDebug("::BOOLAND"); 342 // LSOEngine.LSO.Common.SendToDebug("::BOOLAND");
343 // bool b2 = bool.Parse((string) LSLStack.Pop()); 343 // bool b2 = bool.Parse((string) LSLStack.Pop());
344 // bool b1 = bool.Parse((string) LSLStack.Pop()); 344 // bool b1 = bool.Parse((string) LSLStack.Pop());
345 // if (b1 && b2) 345 // if (b1 && b2)
346 // { 346 // {
347 // LSLStack.Push((UInt32) 1); 347 // LSLStack.Push((UInt32) 1);
348 // } 348 // }
349 // else 349 // else
350 // { 350 // {
351 // LSLStack.Push((UInt32) 0); 351 // LSLStack.Push((UInt32) 0);
352 // } 352 // }
353 // } 353 // }
354 354
355 // public void BOOLOR() 355 // public void BOOLOR()
356 // { 356 // {
357 // LSOEngine.LSO.Common.SendToDebug("::BOOLOR"); 357 // LSOEngine.LSO.Common.SendToDebug("::BOOLOR");
358 // bool b2 = bool.Parse((string) LSLStack.Pop()); 358 // bool b2 = bool.Parse((string) LSLStack.Pop());
359 // bool b1 = bool.Parse((string) LSLStack.Pop()); 359 // bool b1 = bool.Parse((string) LSLStack.Pop());
360 360
361 // if (b1 || b2) 361 // if (b1 || b2)
362 // { 362 // {
363 // LSLStack.Push((UInt32) 1); 363 // LSLStack.Push((UInt32) 1);
364 // } 364 // }
365 // else 365 // else
366 // { 366 // {
367 // LSLStack.Push((UInt32) 0); 367 // LSLStack.Push((UInt32) 0);
368 // } 368 // }
369 // } 369 // }
370 370
371 // public void NEG(UInt32 Param) 371 // public void NEG(UInt32 Param)
372 // { 372 // {
373 // LSOEngine.LSO.Common.SendToDebug("::NEG: " + Param); 373 // LSOEngine.LSO.Common.SendToDebug("::NEG: " + Param);
374 // //UInt32 i2 = (UInt32)LSLStack.Pop(); 374 // //UInt32 i2 = (UInt32)LSLStack.Pop();
375 // UInt32 i1 = (UInt32) LSLStack.Pop(); 375 // UInt32 i1 = (UInt32) LSLStack.Pop();
376 // LSLStack.Push((UInt32) (i1*-1)); 376 // LSLStack.Push((UInt32) (i1*-1));
377 // } 377 // }
378 378
379 // public void BITNOT() 379 // public void BITNOT()
380 // { 380 // {
381 // //Common.SendToDebug("::BITNOT"); 381 // //Common.SendToDebug("::BITNOT");
382 // //UInt32 i2 = (UInt32)LSLStack.Pop(); 382 // //UInt32 i2 = (UInt32)LSLStack.Pop();
383 // //UInt32 i1 = (UInt32)LSLStack.Pop(); 383 // //UInt32 i1 = (UInt32)LSLStack.Pop();
384 // //LSLStack.Push((UInt32)(i1 / i2)); 384 // //LSLStack.Push((UInt32)(i1 / i2));
385 // } 385 // }
386 386
387 // public void BOOLNOT() 387 // public void BOOLNOT()
388 // { 388 // {
389 // //Common.SendToDebug("::BOOLNOT"); 389 // //Common.SendToDebug("::BOOLNOT");
390 // ////UInt32 i2 = (UInt32)LSLStack.Pop(); 390 // ////UInt32 i2 = (UInt32)LSLStack.Pop();
391 // //UInt32 i1 = (UInt32)LSLStack.Pop(); 391 // //UInt32 i1 = (UInt32)LSLStack.Pop();
392 // //LSLStack.Push((UInt32)(i1)); 392 // //LSLStack.Push((UInt32)(i1));
393 // } 393 // }
394 //} 394 //}
395} \ No newline at end of file 395} \ No newline at end of file
diff --git a/OpenSim/Region/ScriptEngine/LSOEngine/LSO/LSL_CLRInterface.cs b/OpenSim/Region/ScriptEngine/LSOEngine/LSO/LSL_CLRInterface.cs
index 8454266..8bb7712 100644
--- a/OpenSim/Region/ScriptEngine/LSOEngine/LSO/LSL_CLRInterface.cs
+++ b/OpenSim/Region/ScriptEngine/LSOEngine/LSO/LSL_CLRInterface.cs
@@ -1,75 +1,75 @@
1/* 1/*
2* Copyright (c) Contributors, http://opensimulator.org/ 2* Copyright (c) Contributors, http://opensimulator.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders. 3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4* 4*
5* Redistribution and use in source and binary forms, with or without 5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met: 6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright 7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer. 8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright 9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the 10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution. 11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the 12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products 13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission. 14* derived from this software without specific prior written permission.
15* 15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY 16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY 19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26* 26*
27*/ 27*/
28/* Original code: Tedd Hansen */ 28/* Original code: Tedd Hansen */
29namespace OpenSim.Region.ScriptEngine.LSOEngine.LSO 29namespace OpenSim.Region.ScriptEngine.LSOEngine.LSO
30{ 30{
31 public class LSL_CLRInterface 31 public class LSL_CLRInterface
32 { 32 {
33 public interface LSLScript 33 public interface LSLScript
34 { 34 {
35 //public virtual void Run(object arg) 35 //public virtual void Run(object arg)
36 //{ 36 //{
37 //} 37 //}
38 //void Run(object arg); 38 //void Run(object arg);
39 39
40 //void event_state_entry(object arg); 40 //void event_state_entry(object arg);
41 //void event_state_exit(); 41 //void event_state_exit();
42 //void event_touch_start(object arg); 42 //void event_touch_start(object arg);
43 //void event_touch(); 43 //void event_touch();
44 //void event_touch_end(); 44 //void event_touch_end();
45 //void event_collision_start(); 45 //void event_collision_start();
46 //void event_collision(); 46 //void event_collision();
47 //void event_collision_end(); 47 //void event_collision_end();
48 //void event_land_collision_start(); 48 //void event_land_collision_start();
49 //void event_land_collision(); 49 //void event_land_collision();
50 //void event_land_collision_end(); 50 //void event_land_collision_end();
51 //void event_timer(); 51 //void event_timer();
52 //void event_listen(); 52 //void event_listen();
53 //void event_on_rez(); 53 //void event_on_rez();
54 //void event_sensor(); 54 //void event_sensor();
55 //void event_no_sensor(); 55 //void event_no_sensor();
56 //void event_control(); 56 //void event_control();
57 //void event_money(); 57 //void event_money();
58 //void event_email(); 58 //void event_email();
59 //void event_at_target(); 59 //void event_at_target();
60 //void event_not_at_target(); 60 //void event_not_at_target();
61 //void event_at_rot_target(); 61 //void event_at_rot_target();
62 //void event_not_at_rot_target(); 62 //void event_not_at_rot_target();
63 //void event_run_time_permissions(); 63 //void event_run_time_permissions();
64 //void event_changed(); 64 //void event_changed();
65 //void event_attach(); 65 //void event_attach();
66 //void event_dataserver(); 66 //void event_dataserver();
67 //void event_link_message(); 67 //void event_link_message();
68 //void event_moving_start(); 68 //void event_moving_start();
69 //void event_moving_end(); 69 //void event_moving_end();
70 //void event_object_rez(); 70 //void event_object_rez();
71 //void event_remote_data(); 71 //void event_remote_data();
72 //void event_http_response(); 72 //void event_http_response();
73 } 73 }
74 } 74 }
75} \ No newline at end of file 75} \ No newline at end of file
diff --git a/OpenSim/Region/ScriptEngine/LSOEngine/LSO/LSL_OPCODE_IL_processor.cs b/OpenSim/Region/ScriptEngine/LSOEngine/LSO/LSL_OPCODE_IL_processor.cs
index 68ecdca..30d3890 100644
--- a/OpenSim/Region/ScriptEngine/LSOEngine/LSO/LSL_OPCODE_IL_processor.cs
+++ b/OpenSim/Region/ScriptEngine/LSOEngine/LSO/LSL_OPCODE_IL_processor.cs
@@ -1,435 +1,435 @@
1/* 1/*
2* Copyright (c) Contributors, http://opensimulator.org/ 2* Copyright (c) Contributors, http://opensimulator.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders. 3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4* 4*
5* Redistribution and use in source and binary forms, with or without 5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met: 6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright 7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer. 8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright 9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the 10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution. 11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the 12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products 13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission. 14* derived from this software without specific prior written permission.
15* 15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY 16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY 19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26* 26*
27*/ 27*/
28/* Original code: Tedd Hansen */ 28/* Original code: Tedd Hansen */
29using System; 29using System;
30using System.Reflection; 30using System.Reflection;
31using System.Reflection.Emit; 31using System.Reflection.Emit;
32using OpenSim.Region.ScriptEngine.Common; 32using OpenSim.Region.ScriptEngine.Common;
33 33
34namespace OpenSim.Region.ScriptEngine.LSOEngine.LSO 34namespace OpenSim.Region.ScriptEngine.LSOEngine.LSO
35{ 35{
36 internal partial class LSO_Parser 36 internal partial class LSO_Parser
37 { 37 {
38 //internal Stack<Type> ILStack = new Stack<Type>(); 38 //internal Stack<Type> ILStack = new Stack<Type>();
39 //LSO_Enums MyLSO_Enums = new LSO_Enums(); 39 //LSO_Enums MyLSO_Enums = new LSO_Enums();
40 40
41 internal bool LSL_PROCESS_OPCODE(ILGenerator il) 41 internal bool LSL_PROCESS_OPCODE(ILGenerator il)
42 { 42 {
43 byte bp1; 43 byte bp1;
44 UInt32 u32p1; 44 UInt32 u32p1;
45 float fp1; 45 float fp1;
46 UInt16 opcode = br_read(1)[0]; 46 UInt16 opcode = br_read(1)[0];
47 Common.SendToDebug("OPCODE: " + ((LSO_Enums.Operation_Table) opcode).ToString()); 47 Common.SendToDebug("OPCODE: " + ((LSO_Enums.Operation_Table) opcode).ToString());
48 string idesc = ((LSO_Enums.Operation_Table) opcode).ToString(); 48 string idesc = ((LSO_Enums.Operation_Table) opcode).ToString();
49 switch ((LSO_Enums.Operation_Table) opcode) 49 switch ((LSO_Enums.Operation_Table) opcode)
50 { 50 {
51 /*************** 51 /***************
52 * IMPLEMENTED * 52 * IMPLEMENTED *
53 ***************/ 53 ***************/
54 case LSO_Enums.Operation_Table.NOOP: 54 case LSO_Enums.Operation_Table.NOOP:
55 break; 55 break;
56 case LSO_Enums.Operation_Table.PUSHSP: 56 case LSO_Enums.Operation_Table.PUSHSP:
57 // Push Stack Top (Memory Address) to stack 57 // Push Stack Top (Memory Address) to stack
58 Common.SendToDebug("Instruction " + idesc); 58 Common.SendToDebug("Instruction " + idesc);
59 Common.SendToDebug("Instruction " + idesc + 59 Common.SendToDebug("Instruction " + idesc +
60 ": Description: Pushing Stack Top (Memory Address from header) to stack"); 60 ": Description: Pushing Stack Top (Memory Address from header) to stack");
61 IL_Push(il, (UInt32) myHeader.SP); 61 IL_Push(il, (UInt32) myHeader.SP);
62 break; 62 break;
63 // BYTE 63 // BYTE
64 case LSO_Enums.Operation_Table.PUSHARGB: 64 case LSO_Enums.Operation_Table.PUSHARGB:
65 Common.SendToDebug("Param1: " + br_read(1)[0]); 65 Common.SendToDebug("Param1: " + br_read(1)[0]);
66 break; 66 break;
67 // INTEGER 67 // INTEGER
68 case LSO_Enums.Operation_Table.PUSHARGI: 68 case LSO_Enums.Operation_Table.PUSHARGI:
69 u32p1 = BitConverter.ToUInt32(br_read(4), 0); 69 u32p1 = BitConverter.ToUInt32(br_read(4), 0);
70 Common.SendToDebug("Instruction " + idesc + ", Param1: " + u32p1); 70 Common.SendToDebug("Instruction " + idesc + ", Param1: " + u32p1);
71 IL_Push(il, u32p1); 71 IL_Push(il, u32p1);
72 break; 72 break;
73 // FLOAT 73 // FLOAT
74 case LSO_Enums.Operation_Table.PUSHARGF: 74 case LSO_Enums.Operation_Table.PUSHARGF:
75 fp1 = BitConverter.ToUInt32(br_read(4), 0); 75 fp1 = BitConverter.ToUInt32(br_read(4), 0);
76 Common.SendToDebug("Instruction " + idesc + ", Param1: " + fp1); 76 Common.SendToDebug("Instruction " + idesc + ", Param1: " + fp1);
77 IL_Push(il, fp1); 77 IL_Push(il, fp1);
78 break; 78 break;
79 // STRING 79 // STRING
80 case LSO_Enums.Operation_Table.PUSHARGS: 80 case LSO_Enums.Operation_Table.PUSHARGS:
81 string s = Read_String(); 81 string s = Read_String();
82 Common.SendToDebug("Instruction " + idesc + ", Param1: " + s); 82 Common.SendToDebug("Instruction " + idesc + ", Param1: " + s);
83 IL_Debug(il, "OPCODE: " + idesc + ":" + s); 83 IL_Debug(il, "OPCODE: " + idesc + ":" + s);
84 IL_Push(il, s); 84 IL_Push(il, s);
85 break; 85 break;
86 // VECTOR z,y,x 86 // VECTOR z,y,x
87 case LSO_Enums.Operation_Table.PUSHARGV: 87 case LSO_Enums.Operation_Table.PUSHARGV:
88 LSO_Enums.Vector v = new LSO_Enums.Vector(); 88 LSO_Enums.Vector v = new LSO_Enums.Vector();
89 v.Z = BitConverter.ToUInt32(br_read(4), 0); 89 v.Z = BitConverter.ToUInt32(br_read(4), 0);
90 v.Y = BitConverter.ToUInt32(br_read(4), 0); 90 v.Y = BitConverter.ToUInt32(br_read(4), 0);
91 v.X = BitConverter.ToUInt32(br_read(4), 0); 91 v.X = BitConverter.ToUInt32(br_read(4), 0);
92 Common.SendToDebug("Param1 Z: " + v.Z); 92 Common.SendToDebug("Param1 Z: " + v.Z);
93 Common.SendToDebug("Param1 Y: " + v.Y); 93 Common.SendToDebug("Param1 Y: " + v.Y);
94 Common.SendToDebug("Param1 X: " + v.X); 94 Common.SendToDebug("Param1 X: " + v.X);
95 IL_Push(il, v); 95 IL_Push(il, v);
96 break; 96 break;
97 // ROTATION s,z,y,x 97 // ROTATION s,z,y,x
98 case LSO_Enums.Operation_Table.PUSHARGQ: 98 case LSO_Enums.Operation_Table.PUSHARGQ:
99 LSO_Enums.Rotation r = new LSO_Enums.Rotation(); 99 LSO_Enums.Rotation r = new LSO_Enums.Rotation();
100 r.S = BitConverter.ToUInt32(br_read(4), 0); 100 r.S = BitConverter.ToUInt32(br_read(4), 0);
101 r.Z = BitConverter.ToUInt32(br_read(4), 0); 101 r.Z = BitConverter.ToUInt32(br_read(4), 0);
102 r.Y = BitConverter.ToUInt32(br_read(4), 0); 102 r.Y = BitConverter.ToUInt32(br_read(4), 0);
103 r.X = BitConverter.ToUInt32(br_read(4), 0); 103 r.X = BitConverter.ToUInt32(br_read(4), 0);
104 Common.SendToDebug("Param1 S: " + r.S); 104 Common.SendToDebug("Param1 S: " + r.S);
105 Common.SendToDebug("Param1 Z: " + r.Z); 105 Common.SendToDebug("Param1 Z: " + r.Z);
106 Common.SendToDebug("Param1 Y: " + r.Y); 106 Common.SendToDebug("Param1 Y: " + r.Y);
107 Common.SendToDebug("Param1 X: " + r.X); 107 Common.SendToDebug("Param1 X: " + r.X);
108 IL_Push(il, r); 108 IL_Push(il, r);
109 break; 109 break;
110 110
111 case LSO_Enums.Operation_Table.PUSHE: 111 case LSO_Enums.Operation_Table.PUSHE:
112 IL_Push(il, (UInt32) 0); 112 IL_Push(il, (UInt32) 0);
113 break; 113 break;
114 114
115 case LSO_Enums.Operation_Table.PUSHARGE: 115 case LSO_Enums.Operation_Table.PUSHARGE:
116 u32p1 = BitConverter.ToUInt32(br_read(4), 0); 116 u32p1 = BitConverter.ToUInt32(br_read(4), 0);
117 Common.SendToDebug("Param1: " + u32p1); 117 Common.SendToDebug("Param1: " + u32p1);
118 //IL_Push(il, new string(" ".ToCharArray()[0], Convert.ToInt32(u32p1))); 118 //IL_Push(il, new string(" ".ToCharArray()[0], Convert.ToInt32(u32p1)));
119 IL_Push(il, u32p1); 119 IL_Push(il, u32p1);
120 break; 120 break;
121 // BYTE 121 // BYTE
122 case LSO_Enums.Operation_Table.ADD: 122 case LSO_Enums.Operation_Table.ADD:
123 case LSO_Enums.Operation_Table.SUB: 123 case LSO_Enums.Operation_Table.SUB:
124 case LSO_Enums.Operation_Table.MUL: 124 case LSO_Enums.Operation_Table.MUL:
125 case LSO_Enums.Operation_Table.DIV: 125 case LSO_Enums.Operation_Table.DIV:
126 case LSO_Enums.Operation_Table.EQ: 126 case LSO_Enums.Operation_Table.EQ:
127 case LSO_Enums.Operation_Table.NEQ: 127 case LSO_Enums.Operation_Table.NEQ:
128 case LSO_Enums.Operation_Table.LEQ: 128 case LSO_Enums.Operation_Table.LEQ:
129 case LSO_Enums.Operation_Table.GEQ: 129 case LSO_Enums.Operation_Table.GEQ:
130 case LSO_Enums.Operation_Table.LESS: 130 case LSO_Enums.Operation_Table.LESS:
131 case LSO_Enums.Operation_Table.GREATER: 131 case LSO_Enums.Operation_Table.GREATER:
132 case LSO_Enums.Operation_Table.NEG: 132 case LSO_Enums.Operation_Table.NEG:
133 case LSO_Enums.Operation_Table.MOD: 133 case LSO_Enums.Operation_Table.MOD:
134 bp1 = br_read(1)[0]; 134 bp1 = br_read(1)[0];
135 Common.SendToDebug("Param1: " + bp1); 135 Common.SendToDebug("Param1: " + bp1);
136 IL_CallBaseFunction(il, idesc, (UInt32) bp1); 136 IL_CallBaseFunction(il, idesc, (UInt32) bp1);
137 break; 137 break;
138 138
139 // NO ARGUMENTS 139 // NO ARGUMENTS
140 case LSO_Enums.Operation_Table.BITAND: 140 case LSO_Enums.Operation_Table.BITAND:
141 case LSO_Enums.Operation_Table.BITOR: 141 case LSO_Enums.Operation_Table.BITOR:
142 case LSO_Enums.Operation_Table.BITXOR: 142 case LSO_Enums.Operation_Table.BITXOR:
143 case LSO_Enums.Operation_Table.BOOLAND: 143 case LSO_Enums.Operation_Table.BOOLAND:
144 case LSO_Enums.Operation_Table.BOOLOR: 144 case LSO_Enums.Operation_Table.BOOLOR:
145 case LSO_Enums.Operation_Table.BITNOT: 145 case LSO_Enums.Operation_Table.BITNOT:
146 case LSO_Enums.Operation_Table.BOOLNOT: 146 case LSO_Enums.Operation_Table.BOOLNOT:
147 IL_CallBaseFunction(il, idesc); 147 IL_CallBaseFunction(il, idesc);
148 break; 148 break;
149 // SHORT 149 // SHORT
150 case LSO_Enums.Operation_Table.CALLLIB_TWO_BYTE: 150 case LSO_Enums.Operation_Table.CALLLIB_TWO_BYTE:
151 // TODO: What is size of short? 151 // TODO: What is size of short?
152 UInt16 U16p1 = BitConverter.ToUInt16(br_read(2), 0); 152 UInt16 U16p1 = BitConverter.ToUInt16(br_read(2), 0);
153 Common.SendToDebug("Instruction " + idesc + ": Builtin Command: " + 153 Common.SendToDebug("Instruction " + idesc + ": Builtin Command: " +
154 ((LSO_Enums.BuiltIn_Functions) U16p1).ToString()); 154 ((LSO_Enums.BuiltIn_Functions) U16p1).ToString());
155 //Common.SendToDebug("Param1: " + U16p1); 155 //Common.SendToDebug("Param1: " + U16p1);
156 string fname = ((LSO_Enums.BuiltIn_Functions) U16p1).ToString(); 156 string fname = ((LSO_Enums.BuiltIn_Functions) U16p1).ToString();
157 157
158 bool cmdFound = false; 158 bool cmdFound = false;
159 foreach (MethodInfo mi in typeof (LSL_BuiltIn_Commands_Interface).GetMethods()) 159 foreach (MethodInfo mi in typeof (LSL_BuiltIn_Commands_Interface).GetMethods())
160 { 160 {
161 // Found command 161 // Found command
162 if (mi.Name == fname) 162 if (mi.Name == fname)
163 { 163 {
164 il.Emit(OpCodes.Ldarg_0); 164 il.Emit(OpCodes.Ldarg_0);
165 il.Emit(OpCodes.Call, typeof (LSL_BaseClass).GetMethod("GetLSL_BuiltIn", new Type[] {})); 165 il.Emit(OpCodes.Call, typeof (LSL_BaseClass).GetMethod("GetLSL_BuiltIn", new Type[] {}));
166 // Pop required number of items from my stack to .Net stack 166 // Pop required number of items from my stack to .Net stack
167 IL_PopToStack(il, mi.GetParameters().Length); 167 IL_PopToStack(il, mi.GetParameters().Length);
168 il.Emit(OpCodes.Callvirt, mi); 168 il.Emit(OpCodes.Callvirt, mi);
169 cmdFound = true; 169 cmdFound = true;
170 break; 170 break;
171 } 171 }
172 } 172 }
173 if (cmdFound == false) 173 if (cmdFound == false)
174 { 174 {
175 Common.SendToDebug("ERROR: UNABLE TO LOCATE OPCODE " + idesc + " IN BASECLASS"); 175 Common.SendToDebug("ERROR: UNABLE TO LOCATE OPCODE " + idesc + " IN BASECLASS");
176 } 176 }
177 177
178 break; 178 break;
179 179
180 // RETURN 180 // RETURN
181 case LSO_Enums.Operation_Table.RETURN: 181 case LSO_Enums.Operation_Table.RETURN:
182 182
183 Common.SendToDebug("OPCODE: RETURN"); 183 Common.SendToDebug("OPCODE: RETURN");
184 return true; 184 return true;
185 185
186 case LSO_Enums.Operation_Table.POP: 186 case LSO_Enums.Operation_Table.POP:
187 case LSO_Enums.Operation_Table.POPS: 187 case LSO_Enums.Operation_Table.POPS:
188 case LSO_Enums.Operation_Table.POPL: 188 case LSO_Enums.Operation_Table.POPL:
189 case LSO_Enums.Operation_Table.POPV: 189 case LSO_Enums.Operation_Table.POPV:
190 case LSO_Enums.Operation_Table.POPQ: 190 case LSO_Enums.Operation_Table.POPQ:
191 // Pops a specific datatype from the stack 191 // Pops a specific datatype from the stack
192 // We just ignore the datatype for now 192 // We just ignore the datatype for now
193 IL_Pop(il); 193 IL_Pop(il);
194 break; 194 break;
195 195
196 // LONG 196 // LONG
197 case LSO_Enums.Operation_Table.STORE: 197 case LSO_Enums.Operation_Table.STORE:
198 case LSO_Enums.Operation_Table.STORES: 198 case LSO_Enums.Operation_Table.STORES:
199 case LSO_Enums.Operation_Table.STOREL: 199 case LSO_Enums.Operation_Table.STOREL:
200 case LSO_Enums.Operation_Table.STOREV: 200 case LSO_Enums.Operation_Table.STOREV:
201 case LSO_Enums.Operation_Table.STOREQ: 201 case LSO_Enums.Operation_Table.STOREQ:
202 u32p1 = BitConverter.ToUInt32(br_read(4), 0); 202 u32p1 = BitConverter.ToUInt32(br_read(4), 0);
203 Common.SendToDebug("Param1: " + u32p1.ToString()); 203 Common.SendToDebug("Param1: " + u32p1.ToString());
204 IL_CallBaseFunction(il, "StoreToLocal", u32p1); 204 IL_CallBaseFunction(il, "StoreToLocal", u32p1);
205 break; 205 break;
206 206
207 case LSO_Enums.Operation_Table.STOREG: 207 case LSO_Enums.Operation_Table.STOREG:
208 case LSO_Enums.Operation_Table.STOREGS: 208 case LSO_Enums.Operation_Table.STOREGS:
209 case LSO_Enums.Operation_Table.STOREGL: 209 case LSO_Enums.Operation_Table.STOREGL:
210 case LSO_Enums.Operation_Table.STOREGV: 210 case LSO_Enums.Operation_Table.STOREGV:
211 case LSO_Enums.Operation_Table.STOREGQ: 211 case LSO_Enums.Operation_Table.STOREGQ:
212 u32p1 = BitConverter.ToUInt32(br_read(4), 0); 212 u32p1 = BitConverter.ToUInt32(br_read(4), 0);
213 Common.SendToDebug("Param1: " + u32p1.ToString()); 213 Common.SendToDebug("Param1: " + u32p1.ToString());
214 IL_CallBaseFunction(il, "StoreToGlobal", u32p1); 214 IL_CallBaseFunction(il, "StoreToGlobal", u32p1);
215 break; 215 break;
216 216
217 case LSO_Enums.Operation_Table.LOADP: 217 case LSO_Enums.Operation_Table.LOADP:
218 case LSO_Enums.Operation_Table.LOADSP: 218 case LSO_Enums.Operation_Table.LOADSP:
219 case LSO_Enums.Operation_Table.LOADLP: 219 case LSO_Enums.Operation_Table.LOADLP:
220 case LSO_Enums.Operation_Table.LOADVP: 220 case LSO_Enums.Operation_Table.LOADVP:
221 case LSO_Enums.Operation_Table.LOADQP: 221 case LSO_Enums.Operation_Table.LOADQP:
222 u32p1 = BitConverter.ToUInt32(br_read(4), 0); 222 u32p1 = BitConverter.ToUInt32(br_read(4), 0);
223 Common.SendToDebug("Param1: " + u32p1.ToString()); 223 Common.SendToDebug("Param1: " + u32p1.ToString());
224 IL_CallBaseFunction(il, "StoreToLocal", u32p1); 224 IL_CallBaseFunction(il, "StoreToLocal", u32p1);
225 IL_Pop(il); 225 IL_Pop(il);
226 break; 226 break;
227 227
228 case LSO_Enums.Operation_Table.LOADGP: 228 case LSO_Enums.Operation_Table.LOADGP:
229 case LSO_Enums.Operation_Table.LOADGSP: 229 case LSO_Enums.Operation_Table.LOADGSP:
230 case LSO_Enums.Operation_Table.LOADGLP: 230 case LSO_Enums.Operation_Table.LOADGLP:
231 case LSO_Enums.Operation_Table.LOADGVP: 231 case LSO_Enums.Operation_Table.LOADGVP:
232 case LSO_Enums.Operation_Table.LOADGQP: 232 case LSO_Enums.Operation_Table.LOADGQP:
233 u32p1 = BitConverter.ToUInt32(br_read(4), 0); 233 u32p1 = BitConverter.ToUInt32(br_read(4), 0);
234 Common.SendToDebug("Param1: " + u32p1.ToString()); 234 Common.SendToDebug("Param1: " + u32p1.ToString());
235 IL_CallBaseFunction(il, "StoreToStatic", u32p1 - 6 + myHeader.GVR); 235 IL_CallBaseFunction(il, "StoreToStatic", u32p1 - 6 + myHeader.GVR);
236 IL_Pop(il); 236 IL_Pop(il);
237 break; 237 break;
238 238
239 // PUSH FROM LOCAL FRAME 239 // PUSH FROM LOCAL FRAME
240 case LSO_Enums.Operation_Table.PUSH: 240 case LSO_Enums.Operation_Table.PUSH:
241 case LSO_Enums.Operation_Table.PUSHS: 241 case LSO_Enums.Operation_Table.PUSHS:
242 case LSO_Enums.Operation_Table.PUSHL: 242 case LSO_Enums.Operation_Table.PUSHL:
243 case LSO_Enums.Operation_Table.PUSHV: 243 case LSO_Enums.Operation_Table.PUSHV:
244 case LSO_Enums.Operation_Table.PUSHQ: 244 case LSO_Enums.Operation_Table.PUSHQ:
245 u32p1 = BitConverter.ToUInt32(br_read(4), 0); 245 u32p1 = BitConverter.ToUInt32(br_read(4), 0);
246 Common.SendToDebug("Param1: " + u32p1.ToString()); 246 Common.SendToDebug("Param1: " + u32p1.ToString());
247 IL_CallBaseFunction(il, "GetFromLocal", u32p1); 247 IL_CallBaseFunction(il, "GetFromLocal", u32p1);
248 248
249 break; 249 break;
250 250
251 // PUSH FROM STATIC FRAME 251 // PUSH FROM STATIC FRAME
252 case LSO_Enums.Operation_Table.PUSHG: 252 case LSO_Enums.Operation_Table.PUSHG:
253 case LSO_Enums.Operation_Table.PUSHGS: 253 case LSO_Enums.Operation_Table.PUSHGS:
254 case LSO_Enums.Operation_Table.PUSHGL: 254 case LSO_Enums.Operation_Table.PUSHGL:
255 case LSO_Enums.Operation_Table.PUSHGV: 255 case LSO_Enums.Operation_Table.PUSHGV:
256 case LSO_Enums.Operation_Table.PUSHGQ: 256 case LSO_Enums.Operation_Table.PUSHGQ:
257 u32p1 = BitConverter.ToUInt32(br_read(4), 0); 257 u32p1 = BitConverter.ToUInt32(br_read(4), 0);
258 Common.SendToDebug("Param1: " + u32p1.ToString()); 258 Common.SendToDebug("Param1: " + u32p1.ToString());
259 IL_CallBaseFunction(il, "GetFromStatic", u32p1 - 6 + myHeader.GVR); 259 IL_CallBaseFunction(il, "GetFromStatic", u32p1 - 6 + myHeader.GVR);
260 break; 260 break;
261 261
262 262
263 /*********************** 263 /***********************
264 * NOT IMPLEMENTED YET * 264 * NOT IMPLEMENTED YET *
265 ***********************/ 265 ***********************/
266 266
267 267
268 case LSO_Enums.Operation_Table.POPIP: 268 case LSO_Enums.Operation_Table.POPIP:
269 case LSO_Enums.Operation_Table.POPSP: 269 case LSO_Enums.Operation_Table.POPSP:
270 case LSO_Enums.Operation_Table.POPSLR: 270 case LSO_Enums.Operation_Table.POPSLR:
271 case LSO_Enums.Operation_Table.POPARG: 271 case LSO_Enums.Operation_Table.POPARG:
272 case LSO_Enums.Operation_Table.POPBP: 272 case LSO_Enums.Operation_Table.POPBP:
273 //Common.SendToDebug("Instruction " + idesc + ": Ignored"); 273 //Common.SendToDebug("Instruction " + idesc + ": Ignored");
274 Common.SendToDebug("Instruction " + idesc + 274 Common.SendToDebug("Instruction " + idesc +
275 ": Description: Drop x bytes from the stack (TODO: Only popping 1)"); 275 ": Description: Drop x bytes from the stack (TODO: Only popping 1)");
276 //Common.SendToDebug("Param1: " + BitConverter.ToUInt32(br_read(4), 0)); 276 //Common.SendToDebug("Param1: " + BitConverter.ToUInt32(br_read(4), 0));
277 IL_Pop(il); 277 IL_Pop(il);
278 break; 278 break;
279 279
280 280
281 // None 281 // None
282 case LSO_Enums.Operation_Table.PUSHIP: 282 case LSO_Enums.Operation_Table.PUSHIP:
283 // PUSH INSTRUCTION POINTER 283 // PUSH INSTRUCTION POINTER
284 break; 284 break;
285 case LSO_Enums.Operation_Table.PUSHBP: 285 case LSO_Enums.Operation_Table.PUSHBP:
286 286
287 case LSO_Enums.Operation_Table.PUSHEV: 287 case LSO_Enums.Operation_Table.PUSHEV:
288 break; 288 break;
289 case LSO_Enums.Operation_Table.PUSHEQ: 289 case LSO_Enums.Operation_Table.PUSHEQ:
290 break; 290 break;
291 291
292 292
293 // LONG 293 // LONG
294 case LSO_Enums.Operation_Table.JUMP: 294 case LSO_Enums.Operation_Table.JUMP:
295 Common.SendToDebug("Param1: " + BitConverter.ToUInt32(br_read(4), 0)); 295 Common.SendToDebug("Param1: " + BitConverter.ToUInt32(br_read(4), 0));
296 break; 296 break;
297 // BYTE, LONG 297 // BYTE, LONG
298 case LSO_Enums.Operation_Table.JUMPIF: 298 case LSO_Enums.Operation_Table.JUMPIF:
299 case LSO_Enums.Operation_Table.JUMPNIF: 299 case LSO_Enums.Operation_Table.JUMPNIF:
300 Common.SendToDebug("Param1: " + br_read(1)[0]); 300 Common.SendToDebug("Param1: " + br_read(1)[0]);
301 Common.SendToDebug("Param2: " + BitConverter.ToUInt32(br_read(4), 0)); 301 Common.SendToDebug("Param2: " + BitConverter.ToUInt32(br_read(4), 0));
302 break; 302 break;
303 // LONG 303 // LONG
304 case LSO_Enums.Operation_Table.STATE: 304 case LSO_Enums.Operation_Table.STATE:
305 bp1 = br_read(1)[0]; 305 bp1 = br_read(1)[0];
306 //il.Emit(OpCodes.Ld); // Load local variable 0 onto stack 306 //il.Emit(OpCodes.Ld); // Load local variable 0 onto stack
307 //il.Emit(OpCodes.Ldc_I4, 0); // Push index position 307 //il.Emit(OpCodes.Ldc_I4, 0); // Push index position
308 //il.Emit(OpCodes.Ldstr, EventList[p1]); // Push value 308 //il.Emit(OpCodes.Ldstr, EventList[p1]); // Push value
309 //il.Emit(OpCodes.Stelem_Ref); // Perform array[index] = value 309 //il.Emit(OpCodes.Stelem_Ref); // Perform array[index] = value
310 break; 310 break;
311 case LSO_Enums.Operation_Table.CALL: 311 case LSO_Enums.Operation_Table.CALL:
312 Common.SendToDebug("Param1: " + BitConverter.ToUInt32(br_read(4), 0)); 312 Common.SendToDebug("Param1: " + BitConverter.ToUInt32(br_read(4), 0));
313 Common.SendToDebug("ERROR: Function CALL not implemented yet."); 313 Common.SendToDebug("ERROR: Function CALL not implemented yet.");
314 break; 314 break;
315 // BYTE 315 // BYTE
316 case LSO_Enums.Operation_Table.CAST: 316 case LSO_Enums.Operation_Table.CAST:
317 bp1 = br_read(1)[0]; 317 bp1 = br_read(1)[0];
318 Common.SendToDebug("Instruction " + idesc + ": Cast to type: " + 318 Common.SendToDebug("Instruction " + idesc + ": Cast to type: " +
319 ((LSO_Enums.OpCode_Cast_TypeDefs) bp1)); 319 ((LSO_Enums.OpCode_Cast_TypeDefs) bp1));
320 Common.SendToDebug("Param1: " + bp1); 320 Common.SendToDebug("Param1: " + bp1);
321 switch ((LSO_Enums.OpCode_Cast_TypeDefs) bp1) 321 switch ((LSO_Enums.OpCode_Cast_TypeDefs) bp1)
322 { 322 {
323 case LSO_Enums.OpCode_Cast_TypeDefs.String: 323 case LSO_Enums.OpCode_Cast_TypeDefs.String:
324 Common.SendToDebug("Instruction " + idesc + ": il.Emit(OpCodes.Box, ILStack.Pop());"); 324 Common.SendToDebug("Instruction " + idesc + ": il.Emit(OpCodes.Box, ILStack.Pop());");
325 break; 325 break;
326 default: 326 default:
327 Common.SendToDebug("Instruction " + idesc + ": Unknown cast type!"); 327 Common.SendToDebug("Instruction " + idesc + ": Unknown cast type!");
328 break; 328 break;
329 } 329 }
330 break; 330 break;
331 // LONG 331 // LONG
332 case LSO_Enums.Operation_Table.STACKTOS: 332 case LSO_Enums.Operation_Table.STACKTOS:
333 case LSO_Enums.Operation_Table.STACKTOL: 333 case LSO_Enums.Operation_Table.STACKTOL:
334 Common.SendToDebug("Param1: " + BitConverter.ToUInt32(br_read(4), 0)); 334 Common.SendToDebug("Param1: " + BitConverter.ToUInt32(br_read(4), 0));
335 break; 335 break;
336 // BYTE 336 // BYTE
337 case LSO_Enums.Operation_Table.PRINT: 337 case LSO_Enums.Operation_Table.PRINT:
338 case LSO_Enums.Operation_Table.CALLLIB: 338 case LSO_Enums.Operation_Table.CALLLIB:
339 Common.SendToDebug("Param1: " + br_read(1)[0]); 339 Common.SendToDebug("Param1: " + br_read(1)[0]);
340 break; 340 break;
341 } 341 }
342 return false; 342 return false;
343 } 343 }
344 344
345 private void IL_PopToStack(ILGenerator il) 345 private void IL_PopToStack(ILGenerator il)
346 { 346 {
347 IL_PopToStack(il, 1); 347 IL_PopToStack(il, 1);
348 } 348 }
349 349
350 private void IL_PopToStack(ILGenerator il, int count) 350 private void IL_PopToStack(ILGenerator il, int count)
351 { 351 {
352 Common.SendToDebug("IL_PopToStack();"); 352 Common.SendToDebug("IL_PopToStack();");
353 for (int i = 0; i < count; i++) 353 for (int i = 0; i < count; i++)
354 { 354 {
355 IL_CallBaseFunction(il, "POPToStack"); 355 IL_CallBaseFunction(il, "POPToStack");
356 //il.Emit(OpCodes.Ldarg_0); 356 //il.Emit(OpCodes.Ldarg_0);
357 //il.Emit(OpCodes.Call, 357 //il.Emit(OpCodes.Call,
358 // typeof(LSL_BaseClass).GetMethod("POPToStack", 358 // typeof(LSL_BaseClass).GetMethod("POPToStack",
359 // new Type[] { })); 359 // new Type[] { }));
360 } 360 }
361 } 361 }
362 362
363 private void IL_Pop(ILGenerator il) 363 private void IL_Pop(ILGenerator il)
364 { 364 {
365 Common.SendToDebug("IL_Pop();"); 365 Common.SendToDebug("IL_Pop();");
366 IL_CallBaseFunction(il, "POP"); 366 IL_CallBaseFunction(il, "POP");
367 } 367 }
368 368
369 private void IL_Debug(ILGenerator il, string text) 369 private void IL_Debug(ILGenerator il, string text)
370 { 370 {
371 il.Emit(OpCodes.Ldstr, text); 371 il.Emit(OpCodes.Ldstr, text);
372 il.Emit(OpCodes.Call, typeof (Common).GetMethod("SendToDebug", 372 il.Emit(OpCodes.Call, typeof (Common).GetMethod("SendToDebug",
373 new Type[] {typeof (string)} 373 new Type[] {typeof (string)}
374 )); 374 ));
375 } 375 }
376 376
377 private void IL_CallBaseFunction(ILGenerator il, string methodname) 377 private void IL_CallBaseFunction(ILGenerator il, string methodname)
378 { 378 {
379 il.Emit(OpCodes.Ldarg_0); 379 il.Emit(OpCodes.Ldarg_0);
380 il.Emit(OpCodes.Call, typeof (LSL_BaseClass).GetMethod(methodname, new Type[] {})); 380 il.Emit(OpCodes.Call, typeof (LSL_BaseClass).GetMethod(methodname, new Type[] {}));
381 } 381 }
382 382
383 private void IL_CallBaseFunction(ILGenerator il, string methodname, object data) 383 private void IL_CallBaseFunction(ILGenerator il, string methodname, object data)
384 { 384 {
385 il.Emit(OpCodes.Ldarg_0); 385 il.Emit(OpCodes.Ldarg_0);
386 if (data.GetType() == typeof (string)) 386 if (data.GetType() == typeof (string))
387 il.Emit(OpCodes.Ldstr, (string) data); 387 il.Emit(OpCodes.Ldstr, (string) data);
388 if (data.GetType() == typeof (UInt32)) 388 if (data.GetType() == typeof (UInt32))
389 il.Emit(OpCodes.Ldc_I4, (UInt32) data); 389 il.Emit(OpCodes.Ldc_I4, (UInt32) data);
390 il.Emit(OpCodes.Call, typeof (LSL_BaseClass).GetMethod(methodname, new Type[] {data.GetType()})); 390 il.Emit(OpCodes.Call, typeof (LSL_BaseClass).GetMethod(methodname, new Type[] {data.GetType()}));
391 } 391 }
392 392
393 private void IL_Push(ILGenerator il, object data) 393 private void IL_Push(ILGenerator il, object data)
394 { 394 {
395 il.Emit(OpCodes.Ldarg_0); 395 il.Emit(OpCodes.Ldarg_0);
396 Common.SendToDebug("PUSH datatype: " + data.GetType()); 396 Common.SendToDebug("PUSH datatype: " + data.GetType());
397 397
398 IL_PushDataTypeToILStack(il, data); 398 IL_PushDataTypeToILStack(il, data);
399 399
400 il.Emit(OpCodes.Call, typeof (LSL_BaseClass).GetMethod("PUSH", new Type[] {data.GetType()})); 400 il.Emit(OpCodes.Call, typeof (LSL_BaseClass).GetMethod("PUSH", new Type[] {data.GetType()}));
401 } 401 }
402 402
403 private void IL_PushDataTypeToILStack(ILGenerator il, object data) 403 private void IL_PushDataTypeToILStack(ILGenerator il, object data)
404 { 404 {
405 if (data.GetType() == typeof (UInt16)) 405 if (data.GetType() == typeof (UInt16))
406 { 406 {
407 il.Emit(OpCodes.Ldc_I4, (UInt16) data); 407 il.Emit(OpCodes.Ldc_I4, (UInt16) data);
408 il.Emit(OpCodes.Box, data.GetType()); 408 il.Emit(OpCodes.Box, data.GetType());
409 } 409 }
410 if (data.GetType() == typeof (UInt32)) 410 if (data.GetType() == typeof (UInt32))
411 { 411 {
412 il.Emit(OpCodes.Ldc_I4, (UInt32) data); 412 il.Emit(OpCodes.Ldc_I4, (UInt32) data);
413 il.Emit(OpCodes.Box, data.GetType()); 413 il.Emit(OpCodes.Box, data.GetType());
414 } 414 }
415 if (data.GetType() == typeof (Int32)) 415 if (data.GetType() == typeof (Int32))
416 { 416 {
417 il.Emit(OpCodes.Ldc_I4, (Int32) data); 417 il.Emit(OpCodes.Ldc_I4, (Int32) data);
418 il.Emit(OpCodes.Box, data.GetType()); 418 il.Emit(OpCodes.Box, data.GetType());
419 } 419 }
420 if (data.GetType() == typeof (float)) 420 if (data.GetType() == typeof (float))
421 { 421 {
422 il.Emit(OpCodes.Ldc_I4, (float) data); 422 il.Emit(OpCodes.Ldc_I4, (float) data);
423 il.Emit(OpCodes.Box, data.GetType()); 423 il.Emit(OpCodes.Box, data.GetType());
424 } 424 }
425 if (data.GetType() == typeof (string)) 425 if (data.GetType() == typeof (string))
426 il.Emit(OpCodes.Ldstr, (string) data); 426 il.Emit(OpCodes.Ldstr, (string) data);
427 //if (data.GetType() == typeof(LSO_Enums.Rotation)) 427 //if (data.GetType() == typeof(LSO_Enums.Rotation))
428 // il.Emit(OpCodes.Ldobj, (LSO_Enums.Rotation)data); 428 // il.Emit(OpCodes.Ldobj, (LSO_Enums.Rotation)data);
429 //if (data.GetType() == typeof(LSO_Enums.Vector)) 429 //if (data.GetType() == typeof(LSO_Enums.Vector))
430 // il.Emit(OpCodes.Ldobj, (LSO_Enums.Vector)data); 430 // il.Emit(OpCodes.Ldobj, (LSO_Enums.Vector)data);
431 //if (data.GetType() == typeof(LSO_Enums.Key)) 431 //if (data.GetType() == typeof(LSO_Enums.Key))
432 // il.Emit(OpCodes.Ldobj, (LSO_Enums.Key)data); 432 // il.Emit(OpCodes.Ldobj, (LSO_Enums.Key)data);
433 } 433 }
434 } 434 }
435} \ No newline at end of file 435} \ No newline at end of file
diff --git a/OpenSim/Region/ScriptEngine/LSOEngine/LSO/LSO_Enums.cs b/OpenSim/Region/ScriptEngine/LSOEngine/LSO/LSO_Enums.cs
index c7bce4a..ea84efd 100644
--- a/OpenSim/Region/ScriptEngine/LSOEngine/LSO/LSO_Enums.cs
+++ b/OpenSim/Region/ScriptEngine/LSOEngine/LSO/LSO_Enums.cs
@@ -1,560 +1,560 @@
1/* 1/*
2* Copyright (c) Contributors, http://opensimulator.org/ 2* Copyright (c) Contributors, http://opensimulator.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders. 3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4* 4*
5* Redistribution and use in source and binary forms, with or without 5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met: 6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright 7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer. 8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright 9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the 10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution. 11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the 12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products 13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission. 14* derived from this software without specific prior written permission.
15* 15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY 16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY 19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26* 26*
27*/ 27*/
28/* Original code: Tedd Hansen */ 28/* Original code: Tedd Hansen */
29using System; 29using System;
30 30
31namespace OpenSim.Region.ScriptEngine.LSOEngine.LSO 31namespace OpenSim.Region.ScriptEngine.LSOEngine.LSO
32{ 32{
33 public static class LSO_Enums 33 public static class LSO_Enums
34 { 34 {
35 //public System.Collections.Generic.Dictionary<Byte, Type> OpCode_Add_Types; 35 //public System.Collections.Generic.Dictionary<Byte, Type> OpCode_Add_Types;
36 36
37 //LSO_Enums() { 37 //LSO_Enums() {
38 // OpCode_Add_Types.Add(51, typeof(String)); 38 // OpCode_Add_Types.Add(51, typeof(String));
39 // OpCode_Add_Types.Add(17, typeof(UInt32)); 39 // OpCode_Add_Types.Add(17, typeof(UInt32));
40 //} 40 //}
41 41
42 [Serializable] 42 [Serializable]
43 public enum OpCode_Add_TypeDefs 43 public enum OpCode_Add_TypeDefs
44 { 44 {
45 String = 51, 45 String = 51,
46 UInt32 = 17 46 UInt32 = 17
47 } 47 }
48 48
49 [Serializable] 49 [Serializable]
50 public enum OpCode_Cast_TypeDefs 50 public enum OpCode_Cast_TypeDefs
51 { 51 {
52 String = 19 52 String = 19
53 } 53 }
54 54
55 [Serializable] 55 [Serializable]
56 public struct Key 56 public struct Key
57 { 57 {
58 public string KeyString; 58 public string KeyString;
59 } 59 }
60 60
61 [Serializable] 61 [Serializable]
62 public struct Vector 62 public struct Vector
63 { 63 {
64 public UInt32 Z; 64 public UInt32 Z;
65 public UInt32 Y; 65 public UInt32 Y;
66 public UInt32 X; 66 public UInt32 X;
67 } 67 }
68 68
69 [Serializable] 69 [Serializable]
70 public struct Rotation 70 public struct Rotation
71 { 71 {
72 public UInt32 S; 72 public UInt32 S;
73 public UInt32 Z; 73 public UInt32 Z;
74 public UInt32 Y; 74 public UInt32 Y;
75 public UInt32 X; 75 public UInt32 X;
76 } 76 }
77 77
78 [Serializable] 78 [Serializable]
79 public enum Variable_Type_Codes 79 public enum Variable_Type_Codes
80 { 80 {
81 Void = 0, 81 Void = 0,
82 Integer = 1, 82 Integer = 1,
83 Float = 2, 83 Float = 2,
84 String = 3, 84 String = 3,
85 Key = 4, 85 Key = 4,
86 Vector = 5, 86 Vector = 5,
87 Rotation = 6, 87 Rotation = 6,
88 List = 7, 88 List = 7,
89 Null = 8 89 Null = 8
90 } 90 }
91 91
92 [Serializable] 92 [Serializable]
93 public enum Event_Mask_Values 93 public enum Event_Mask_Values
94 { 94 {
95 state_entry = 0, 95 state_entry = 0,
96 state_exit = 1, 96 state_exit = 1,
97 touch_start = 2, 97 touch_start = 2,
98 touch = 3, 98 touch = 3,
99 touch_end = 4, 99 touch_end = 4,
100 collision_start = 5, 100 collision_start = 5,
101 collision = 6, 101 collision = 6,
102 collision_end = 7, 102 collision_end = 7,
103 land_collision_start = 8, 103 land_collision_start = 8,
104 land_collision = 9, 104 land_collision = 9,
105 land_collision_end = 10, 105 land_collision_end = 10,
106 timer = 11, 106 timer = 11,
107 listen = 12, 107 listen = 12,
108 on_rez = 13, 108 on_rez = 13,
109 sensor = 14, 109 sensor = 14,
110 no_sensor = 15, 110 no_sensor = 15,
111 control = 16, 111 control = 16,
112 money = 17, 112 money = 17,
113 email = 18, 113 email = 18,
114 at_target = 19, 114 at_target = 19,
115 not_at_target = 20, 115 not_at_target = 20,
116 at_rot_target = 21, 116 at_rot_target = 21,
117 not_at_rot_target = 22, 117 not_at_rot_target = 22,
118 run_time_permissions = 23, 118 run_time_permissions = 23,
119 changed = 24, 119 changed = 24,
120 attach = 25, 120 attach = 25,
121 dataserver = 26, 121 dataserver = 26,
122 link_message = 27, 122 link_message = 27,
123 moving_start = 28, 123 moving_start = 28,
124 moving_end = 29, 124 moving_end = 29,
125 object_rez = 30, 125 object_rez = 30,
126 remote_data = 31, 126 remote_data = 31,
127 http_response = 32 127 http_response = 32
128 } 128 }
129 129
130 [Serializable] 130 [Serializable]
131 public enum Operation_Table 131 public enum Operation_Table
132 { 132 {
133 NOOP = 0x0, 133 NOOP = 0x0,
134 POP = 0x1, 134 POP = 0x1,
135 POPS = 0x2, 135 POPS = 0x2,
136 POPL = 0x3, 136 POPL = 0x3,
137 POPV = 0x4, 137 POPV = 0x4,
138 POPQ = 0x5, 138 POPQ = 0x5,
139 POPARG = 0x6, 139 POPARG = 0x6,
140 POPIP = 0x7, 140 POPIP = 0x7,
141 POPBP = 0x8, 141 POPBP = 0x8,
142 POPSP = 0x9, 142 POPSP = 0x9,
143 POPSLR = 0xa, 143 POPSLR = 0xa,
144 DUP = 0x20, 144 DUP = 0x20,
145 DUPS = 0x21, 145 DUPS = 0x21,
146 DUPL = 0x22, 146 DUPL = 0x22,
147 DUPV = 0x23, 147 DUPV = 0x23,
148 DUPQ = 0x24, 148 DUPQ = 0x24,
149 STORE = 0x30, 149 STORE = 0x30,
150 STORES = 0x31, 150 STORES = 0x31,
151 STOREL = 0x32, 151 STOREL = 0x32,
152 STOREV = 0x33, 152 STOREV = 0x33,
153 STOREQ = 0x34, 153 STOREQ = 0x34,
154 STOREG = 0x35, 154 STOREG = 0x35,
155 STOREGS = 0x36, 155 STOREGS = 0x36,
156 STOREGL = 0x37, 156 STOREGL = 0x37,
157 STOREGV = 0x38, 157 STOREGV = 0x38,
158 STOREGQ = 0x39, 158 STOREGQ = 0x39,
159 LOADP = 0x3a, 159 LOADP = 0x3a,
160 LOADSP = 0x3b, 160 LOADSP = 0x3b,
161 LOADLP = 0x3c, 161 LOADLP = 0x3c,
162 LOADVP = 0x3d, 162 LOADVP = 0x3d,
163 LOADQP = 0x3e, 163 LOADQP = 0x3e,
164 LOADGP = 0x3f, 164 LOADGP = 0x3f,
165 LOADGSP = 0x40, 165 LOADGSP = 0x40,
166 LOADGLP = 0x41, 166 LOADGLP = 0x41,
167 LOADGVP = 0x42, 167 LOADGVP = 0x42,
168 LOADGQP = 0x43, 168 LOADGQP = 0x43,
169 PUSH = 0x50, 169 PUSH = 0x50,
170 PUSHS = 0x51, 170 PUSHS = 0x51,
171 PUSHL = 0x52, 171 PUSHL = 0x52,
172 PUSHV = 0x53, 172 PUSHV = 0x53,
173 PUSHQ = 0x54, 173 PUSHQ = 0x54,
174 PUSHG = 0x55, 174 PUSHG = 0x55,
175 PUSHGS = 0x56, 175 PUSHGS = 0x56,
176 PUSHGL = 0x57, 176 PUSHGL = 0x57,
177 PUSHGV = 0x58, 177 PUSHGV = 0x58,
178 PUSHGQ = 0x59, 178 PUSHGQ = 0x59,
179 PUSHIP = 0x5a, 179 PUSHIP = 0x5a,
180 PUSHBP = 0x5b, 180 PUSHBP = 0x5b,
181 PUSHSP = 0x5c, 181 PUSHSP = 0x5c,
182 PUSHARGB = 0x5d, 182 PUSHARGB = 0x5d,
183 PUSHARGI = 0x5e, 183 PUSHARGI = 0x5e,
184 PUSHARGF = 0x5f, 184 PUSHARGF = 0x5f,
185 PUSHARGS = 0x60, 185 PUSHARGS = 0x60,
186 PUSHARGV = 0x61, 186 PUSHARGV = 0x61,
187 PUSHARGQ = 0x62, 187 PUSHARGQ = 0x62,
188 PUSHE = 0x63, 188 PUSHE = 0x63,
189 PUSHEV = 0x64, 189 PUSHEV = 0x64,
190 PUSHEQ = 0x65, 190 PUSHEQ = 0x65,
191 PUSHARGE = 0x66, 191 PUSHARGE = 0x66,
192 ADD = 0x70, 192 ADD = 0x70,
193 SUB = 0x71, 193 SUB = 0x71,
194 MUL = 0x72, 194 MUL = 0x72,
195 DIV = 0x73, 195 DIV = 0x73,
196 MOD = 0x74, 196 MOD = 0x74,
197 EQ = 0x75, 197 EQ = 0x75,
198 NEQ = 0x76, 198 NEQ = 0x76,
199 LEQ = 0x77, 199 LEQ = 0x77,
200 GEQ = 0x78, 200 GEQ = 0x78,
201 LESS = 0x79, 201 LESS = 0x79,
202 GREATER = 0x7a, 202 GREATER = 0x7a,
203 BITAND = 0x7b, 203 BITAND = 0x7b,
204 BITOR = 0x7c, 204 BITOR = 0x7c,
205 BITXOR = 0x7d, 205 BITXOR = 0x7d,
206 BOOLAND = 0x7e, 206 BOOLAND = 0x7e,
207 BOOLOR = 0x7f, 207 BOOLOR = 0x7f,
208 NEG = 0x80, 208 NEG = 0x80,
209 BITNOT = 0x81, 209 BITNOT = 0x81,
210 BOOLNOT = 0x82, 210 BOOLNOT = 0x82,
211 JUMP = 0x90, 211 JUMP = 0x90,
212 JUMPIF = 0x91, 212 JUMPIF = 0x91,
213 JUMPNIF = 0x92, 213 JUMPNIF = 0x92,
214 STATE = 0x93, 214 STATE = 0x93,
215 CALL = 0x94, 215 CALL = 0x94,
216 RETURN = 0x95, 216 RETURN = 0x95,
217 CAST = 0xa0, 217 CAST = 0xa0,
218 STACKTOS = 0xb0, 218 STACKTOS = 0xb0,
219 STACKTOL = 0xb1, 219 STACKTOL = 0xb1,
220 PRINT = 0xc0, 220 PRINT = 0xc0,
221 CALLLIB = 0xd0, 221 CALLLIB = 0xd0,
222 CALLLIB_TWO_BYTE = 0xd1, 222 CALLLIB_TWO_BYTE = 0xd1,
223 SHL = 0xe0, 223 SHL = 0xe0,
224 SHR = 0xe1 224 SHR = 0xe1
225 } 225 }
226 226
227 [Serializable] 227 [Serializable]
228 public enum BuiltIn_Functions 228 public enum BuiltIn_Functions
229 { 229 {
230 llSin = 0, 230 llSin = 0,
231 llCos = 1, 231 llCos = 1,
232 llTan = 2, 232 llTan = 2,
233 llAtan2 = 3, 233 llAtan2 = 3,
234 llSqrt = 4, 234 llSqrt = 4,
235 llPow = 5, 235 llPow = 5,
236 llAbs = 6, 236 llAbs = 6,
237 llFabs = 7, 237 llFabs = 7,
238 llFrand = 8, 238 llFrand = 8,
239 llFloor = 9, 239 llFloor = 9,
240 llCeil = 10, 240 llCeil = 10,
241 llRound = 11, 241 llRound = 11,
242 llVecMag = 12, 242 llVecMag = 12,
243 llVecNorm = 13, 243 llVecNorm = 13,
244 llVecDist = 14, 244 llVecDist = 14,
245 llRot2Euler = 15, 245 llRot2Euler = 15,
246 llEuler2Rot = 16, 246 llEuler2Rot = 16,
247 llAxes2Rot = 17, 247 llAxes2Rot = 17,
248 llRot2Fwd = 18, 248 llRot2Fwd = 18,
249 llRot2Left = 19, 249 llRot2Left = 19,
250 llRot2Up = 20, 250 llRot2Up = 20,
251 llRotBetween = 21, 251 llRotBetween = 21,
252 llWhisper = 22, 252 llWhisper = 22,
253 llSay = 23, 253 llSay = 23,
254 llShout = 24, 254 llShout = 24,
255 llListen = 25, 255 llListen = 25,
256 llListenControl = 26, 256 llListenControl = 26,
257 llListenRemove = 27, 257 llListenRemove = 27,
258 llSensor = 28, 258 llSensor = 28,
259 llSensorRepeat = 29, 259 llSensorRepeat = 29,
260 llSensorRemove = 30, 260 llSensorRemove = 30,
261 llDetectedName = 31, 261 llDetectedName = 31,
262 llDetectedKey = 32, 262 llDetectedKey = 32,
263 llDetectedOwner = 33, 263 llDetectedOwner = 33,
264 llDetectedType = 34, 264 llDetectedType = 34,
265 llDetectedPos = 35, 265 llDetectedPos = 35,
266 llDetectedVel = 36, 266 llDetectedVel = 36,
267 llDetectedGrab = 37, 267 llDetectedGrab = 37,
268 llDetectedRot = 38, 268 llDetectedRot = 38,
269 llDetectedGroup = 39, 269 llDetectedGroup = 39,
270 llDetectedLinkNumber = 40, 270 llDetectedLinkNumber = 40,
271 llDie = 41, 271 llDie = 41,
272 llGround = 42, 272 llGround = 42,
273 llCloud = 43, 273 llCloud = 43,
274 llWind = 44, 274 llWind = 44,
275 llSetStatus = 45, 275 llSetStatus = 45,
276 llGetStatus = 46, 276 llGetStatus = 46,
277 llSetScale = 47, 277 llSetScale = 47,
278 llGetScale = 48, 278 llGetScale = 48,
279 llSetColor = 49, 279 llSetColor = 49,
280 llGetAlpha = 50, 280 llGetAlpha = 50,
281 llSetAlpha = 51, 281 llSetAlpha = 51,
282 llGetColor = 52, 282 llGetColor = 52,
283 llSetTexture = 53, 283 llSetTexture = 53,
284 llScaleTexture = 54, 284 llScaleTexture = 54,
285 llOffsetTexture = 55, 285 llOffsetTexture = 55,
286 llRotateTexture = 56, 286 llRotateTexture = 56,
287 llGetTexture = 57, 287 llGetTexture = 57,
288 llSetPos = 58, 288 llSetPos = 58,
289 llGetPos = 59, 289 llGetPos = 59,
290 llGetLocalPos = 60, 290 llGetLocalPos = 60,
291 llSetRot = 61, 291 llSetRot = 61,
292 llGetRot = 62, 292 llGetRot = 62,
293 llGetLocalRot = 63, 293 llGetLocalRot = 63,
294 llSetForce = 64, 294 llSetForce = 64,
295 llGetForce = 65, 295 llGetForce = 65,
296 llTarget = 66, 296 llTarget = 66,
297 llTargetRemove = 67, 297 llTargetRemove = 67,
298 llRotTarget = 68, 298 llRotTarget = 68,
299 llRotTargetRemove = 69, 299 llRotTargetRemove = 69,
300 llMoveToTarget = 70, 300 llMoveToTarget = 70,
301 llStopMoveToTarget = 71, 301 llStopMoveToTarget = 71,
302 llApplyImpulse = 72, 302 llApplyImpulse = 72,
303 llApplyRotationalImpulse = 73, 303 llApplyRotationalImpulse = 73,
304 llSetTorque = 74, 304 llSetTorque = 74,
305 llGetTorque = 75, 305 llGetTorque = 75,
306 llSetForceAndTorque = 76, 306 llSetForceAndTorque = 76,
307 llGetVel = 77, 307 llGetVel = 77,
308 llGetAccel = 78, 308 llGetAccel = 78,
309 llGetOmega = 79, 309 llGetOmega = 79,
310 llGetTimeOfDay = 80, 310 llGetTimeOfDay = 80,
311 llGetWallclock = 81, 311 llGetWallclock = 81,
312 llGetTime = 82, 312 llGetTime = 82,
313 llResetTime = 83, 313 llResetTime = 83,
314 llGetAndResetTime = 84, 314 llGetAndResetTime = 84,
315 llSound = 85, 315 llSound = 85,
316 llPlaySound = 86, 316 llPlaySound = 86,
317 llLoopSound = 87, 317 llLoopSound = 87,
318 llLoopSoundMaster = 88, 318 llLoopSoundMaster = 88,
319 llLoopSoundSlave = 89, 319 llLoopSoundSlave = 89,
320 llPlaySoundSlave = 90, 320 llPlaySoundSlave = 90,
321 llTriggerSound = 91, 321 llTriggerSound = 91,
322 llStopSound = 92, 322 llStopSound = 92,
323 llPreloadSound = 93, 323 llPreloadSound = 93,
324 llGetSubString = 94, 324 llGetSubString = 94,
325 llDeleteSubString = 95, 325 llDeleteSubString = 95,
326 llInsertString = 96, 326 llInsertString = 96,
327 llToUpper = 97, 327 llToUpper = 97,
328 llToLower = 98, 328 llToLower = 98,
329 llGiveMoney = 99, 329 llGiveMoney = 99,
330 llMakeExplosion = 100, 330 llMakeExplosion = 100,
331 llMakeFountain = 101, 331 llMakeFountain = 101,
332 llMakeSmoke = 102, 332 llMakeSmoke = 102,
333 llMakeFire = 103, 333 llMakeFire = 103,
334 llRezObject = 104, 334 llRezObject = 104,
335 llLookAt = 105, 335 llLookAt = 105,
336 llStopLookAt = 106, 336 llStopLookAt = 106,
337 llSetTimerEvent = 107, 337 llSetTimerEvent = 107,
338 llSleep = 108, 338 llSleep = 108,
339 llGetMass = 109, 339 llGetMass = 109,
340 llCollisionFilter = 110, 340 llCollisionFilter = 110,
341 llTakeControls = 111, 341 llTakeControls = 111,
342 llReleaseControls = 112, 342 llReleaseControls = 112,
343 llAttachToAvatar = 113, 343 llAttachToAvatar = 113,
344 llDetachFromAvatar = 114, 344 llDetachFromAvatar = 114,
345 llTakeCamera = 115, 345 llTakeCamera = 115,
346 llReleaseCamera = 116, 346 llReleaseCamera = 116,
347 llGetOwner = 117, 347 llGetOwner = 117,
348 llInstantMessage = 118, 348 llInstantMessage = 118,
349 llEmail = 119, 349 llEmail = 119,
350 llGetNextEmail = 120, 350 llGetNextEmail = 120,
351 llGetKey = 121, 351 llGetKey = 121,
352 llSetBuoyancy = 122, 352 llSetBuoyancy = 122,
353 llSetHoverHeight = 123, 353 llSetHoverHeight = 123,
354 llStopHover = 124, 354 llStopHover = 124,
355 llMinEventDelay = 125, 355 llMinEventDelay = 125,
356 llSoundPreload = 126, 356 llSoundPreload = 126,
357 llRotLookAt = 127, 357 llRotLookAt = 127,
358 llStringLength = 128, 358 llStringLength = 128,
359 llStartAnimation = 129, 359 llStartAnimation = 129,
360 llStopAnimation = 130, 360 llStopAnimation = 130,
361 llPointAt = 131, 361 llPointAt = 131,
362 llStopPointAt = 132, 362 llStopPointAt = 132,
363 llTargetOmega = 133, 363 llTargetOmega = 133,
364 llGetStartParameter = 134, 364 llGetStartParameter = 134,
365 llGodLikeRezObject = 135, 365 llGodLikeRezObject = 135,
366 llRequestPermissions = 136, 366 llRequestPermissions = 136,
367 llGetPermissionsKey = 137, 367 llGetPermissionsKey = 137,
368 llGetPermissions = 138, 368 llGetPermissions = 138,
369 llGetLinkNumber = 139, 369 llGetLinkNumber = 139,
370 llSetLinkColor = 140, 370 llSetLinkColor = 140,
371 llCreateLink = 141, 371 llCreateLink = 141,
372 llBreakLink = 142, 372 llBreakLink = 142,
373 llBreakAllLinks = 143, 373 llBreakAllLinks = 143,
374 llGetLinkKey = 144, 374 llGetLinkKey = 144,
375 llGetLinkName = 145, 375 llGetLinkName = 145,
376 llGetInventoryNumber = 146, 376 llGetInventoryNumber = 146,
377 llGetInventoryName = 147, 377 llGetInventoryName = 147,
378 llSetScriptState = 148, 378 llSetScriptState = 148,
379 llGetEnergy = 149, 379 llGetEnergy = 149,
380 llGiveInventory = 150, 380 llGiveInventory = 150,
381 llRemoveInventory = 151, 381 llRemoveInventory = 151,
382 llSetText = 152, 382 llSetText = 152,
383 llWater = 153, 383 llWater = 153,
384 llPassTouches = 154, 384 llPassTouches = 154,
385 llRequestAgentData = 155, 385 llRequestAgentData = 155,
386 llRequestInventoryData = 156, 386 llRequestInventoryData = 156,
387 llSetDamage = 157, 387 llSetDamage = 157,
388 llTeleportAgentHome = 158, 388 llTeleportAgentHome = 158,
389 llModifyLand = 159, 389 llModifyLand = 159,
390 llCollisionSound = 160, 390 llCollisionSound = 160,
391 llCollisionSprite = 161, 391 llCollisionSprite = 161,
392 llGetAnimation = 162, 392 llGetAnimation = 162,
393 llResetScript = 163, 393 llResetScript = 163,
394 llMessageLinked = 164, 394 llMessageLinked = 164,
395 llPushObject = 165, 395 llPushObject = 165,
396 llPassCollisions = 166, 396 llPassCollisions = 166,
397 llGetScriptName = 167, 397 llGetScriptName = 167,
398 llGetNumberOfSides = 168, 398 llGetNumberOfSides = 168,
399 llAxisAngle2Rot = 169, 399 llAxisAngle2Rot = 169,
400 llRot2Axis = 170, 400 llRot2Axis = 170,
401 llRot2Angle = 171, 401 llRot2Angle = 171,
402 llAcos = 172, 402 llAcos = 172,
403 llAsin = 173, 403 llAsin = 173,
404 llAngleBetween = 174, 404 llAngleBetween = 174,
405 llGetInventoryKey = 175, 405 llGetInventoryKey = 175,
406 llAllowInventoryDrop = 176, 406 llAllowInventoryDrop = 176,
407 llGetSunDirection = 177, 407 llGetSunDirection = 177,
408 llGetTextureOffset = 178, 408 llGetTextureOffset = 178,
409 llGetTextureScale = 179, 409 llGetTextureScale = 179,
410 llGetTextureRot = 180, 410 llGetTextureRot = 180,
411 llSubStringIndex = 181, 411 llSubStringIndex = 181,
412 llGetOwnerKey = 182, 412 llGetOwnerKey = 182,
413 llGetCenterOfMass = 183, 413 llGetCenterOfMass = 183,
414 llListSort = 184, 414 llListSort = 184,
415 llGetListLength = 185, 415 llGetListLength = 185,
416 llList2Integer = 186, 416 llList2Integer = 186,
417 llList2Float = 187, 417 llList2Float = 187,
418 llList2String = 188, 418 llList2String = 188,
419 llList2Key = 189, 419 llList2Key = 189,
420 llList2Vector = 190, 420 llList2Vector = 190,
421 llList2Rot = 191, 421 llList2Rot = 191,
422 llList2List = 192, 422 llList2List = 192,
423 llDeleteSubList = 193, 423 llDeleteSubList = 193,
424 llGetListEntryType = 194, 424 llGetListEntryType = 194,
425 llList2CSV = 195, 425 llList2CSV = 195,
426 llCSV2List = 196, 426 llCSV2List = 196,
427 llListRandomize = 197, 427 llListRandomize = 197,
428 llList2ListStrided = 198, 428 llList2ListStrided = 198,
429 llGetRegionCorner = 199, 429 llGetRegionCorner = 199,
430 llListInsertList = 200, 430 llListInsertList = 200,
431 llListFindList = 201, 431 llListFindList = 201,
432 llGetObjectName = 202, 432 llGetObjectName = 202,
433 llSetObjectName = 203, 433 llSetObjectName = 203,
434 llGetDate = 204, 434 llGetDate = 204,
435 llEdgeOfWorld = 205, 435 llEdgeOfWorld = 205,
436 llGetAgentInfo = 206, 436 llGetAgentInfo = 206,
437 llAdjustSoundVolume = 207, 437 llAdjustSoundVolume = 207,
438 llSetSoundQueueing = 208, 438 llSetSoundQueueing = 208,
439 llSetSoundRadius = 209, 439 llSetSoundRadius = 209,
440 llKey2Name = 210, 440 llKey2Name = 210,
441 llSetTextureAnim = 211, 441 llSetTextureAnim = 211,
442 llTriggerSoundLimited = 212, 442 llTriggerSoundLimited = 212,
443 llEjectFromLand = 213, 443 llEjectFromLand = 213,
444 llParseString2List = 214, 444 llParseString2List = 214,
445 llOverMyLand = 215, 445 llOverMyLand = 215,
446 llGetLandOwnerAt = 216, 446 llGetLandOwnerAt = 216,
447 llGetNotecardLine = 217, 447 llGetNotecardLine = 217,
448 llGetAgentSize = 218, 448 llGetAgentSize = 218,
449 llSameGroup = 219, 449 llSameGroup = 219,
450 llUnSit = 220, 450 llUnSit = 220,
451 llGroundSlope = 221, 451 llGroundSlope = 221,
452 llGroundNormal = 222, 452 llGroundNormal = 222,
453 llGroundContour = 223, 453 llGroundContour = 223,
454 llGetAttached = 224, 454 llGetAttached = 224,
455 llGetFreeMemory = 225, 455 llGetFreeMemory = 225,
456 llGetRegionName = 226, 456 llGetRegionName = 226,
457 llGetRegionTimeDilation = 227, 457 llGetRegionTimeDilation = 227,
458 llGetRegionFPS = 228, 458 llGetRegionFPS = 228,
459 llParticleSystem = 229, 459 llParticleSystem = 229,
460 llGroundRepel = 230, 460 llGroundRepel = 230,
461 llGiveInventoryList = 231, 461 llGiveInventoryList = 231,
462 llSetVehicleType = 232, 462 llSetVehicleType = 232,
463 llSetVehicleFloatParam = 233, 463 llSetVehicleFloatParam = 233,
464 llSetVehicleVectorParam = 234, 464 llSetVehicleVectorParam = 234,
465 llSetVehicleRotationParam = 235, 465 llSetVehicleRotationParam = 235,
466 llSetVehicleFlags = 236, 466 llSetVehicleFlags = 236,
467 llRemoveVehicleFlags = 237, 467 llRemoveVehicleFlags = 237,
468 llSitTarget = 238, 468 llSitTarget = 238,
469 llAvatarOnSitTarget = 239, 469 llAvatarOnSitTarget = 239,
470 llAddToLandPassList = 240, 470 llAddToLandPassList = 240,
471 llSetTouchText = 241, 471 llSetTouchText = 241,
472 llSetSitText = 242, 472 llSetSitText = 242,
473 llSetCameraEyeOffset = 243, 473 llSetCameraEyeOffset = 243,
474 llSetCameraAtOffset = 244, 474 llSetCameraAtOffset = 244,
475 llDumpList2String = 245, 475 llDumpList2String = 245,
476 llScriptDanger = 246, 476 llScriptDanger = 246,
477 llDialog = 247, 477 llDialog = 247,
478 llVolumeDetect = 248, 478 llVolumeDetect = 248,
479 llResetOtherScript = 249, 479 llResetOtherScript = 249,
480 llGetScriptState = 250, 480 llGetScriptState = 250,
481 llRemoteLoadScript = 251, 481 llRemoteLoadScript = 251,
482 llSetRemoteScriptAccessPin = 252, 482 llSetRemoteScriptAccessPin = 252,
483 llRemoteLoadScriptPin = 253, 483 llRemoteLoadScriptPin = 253,
484 llOpenRemoteDataChannel = 254, 484 llOpenRemoteDataChannel = 254,
485 llSendRemoteData = 255, 485 llSendRemoteData = 255,
486 llRemoteDataReply = 256, 486 llRemoteDataReply = 256,
487 llCloseRemoteDataChannel = 257, 487 llCloseRemoteDataChannel = 257,
488 llMD5String = 258, 488 llMD5String = 258,
489 llSetPrimitiveParams = 259, 489 llSetPrimitiveParams = 259,
490 llStringToBase64 = 260, 490 llStringToBase64 = 260,
491 llBase64ToString = 261, 491 llBase64ToString = 261,
492 llXorBase64Strings = 262, 492 llXorBase64Strings = 262,
493 llRemoteDataSetRegion = 263, 493 llRemoteDataSetRegion = 263,
494 llLog10 = 264, 494 llLog10 = 264,
495 llLog = 265, 495 llLog = 265,
496 llGetAnimationList = 266, 496 llGetAnimationList = 266,
497 llSetParcelMusicURL = 267, 497 llSetParcelMusicURL = 267,
498 llGetRootPosition = 268, 498 llGetRootPosition = 268,
499 llGetRootRotation = 269, 499 llGetRootRotation = 269,
500 llGetObjectDesc = 270, 500 llGetObjectDesc = 270,
501 llSetObjectDesc = 271, 501 llSetObjectDesc = 271,
502 llGetCreator = 272, 502 llGetCreator = 272,
503 llGetTimestamp = 273, 503 llGetTimestamp = 273,
504 llSetLinkAlpha = 274, 504 llSetLinkAlpha = 274,
505 llGetNumberOfPrims = 275, 505 llGetNumberOfPrims = 275,
506 llGetNumberOfNotecardLines = 276, 506 llGetNumberOfNotecardLines = 276,
507 llGetBoundingBox = 277, 507 llGetBoundingBox = 277,
508 llGetGeometricCenter = 278, 508 llGetGeometricCenter = 278,
509 llGetPrimitiveParams = 279, 509 llGetPrimitiveParams = 279,
510 llIntegerToBase64 = 280, 510 llIntegerToBase64 = 280,
511 llBase64ToInteger = 281, 511 llBase64ToInteger = 281,
512 llGetGMTclock = 282, 512 llGetGMTclock = 282,
513 llGetSimulatorHostname = 283, 513 llGetSimulatorHostname = 283,
514 llSetLocalRot = 284, 514 llSetLocalRot = 284,
515 llParseStringKeepNulls = 285, 515 llParseStringKeepNulls = 285,
516 llRezAtRoot = 286, 516 llRezAtRoot = 286,
517 llGetObjectPermMask = 287, 517 llGetObjectPermMask = 287,
518 llSetObjectPermMask = 288, 518 llSetObjectPermMask = 288,
519 llGetInventoryPermMask = 289, 519 llGetInventoryPermMask = 289,
520 llSetInventoryPermMask = 290, 520 llSetInventoryPermMask = 290,
521 llGetInventoryCreator = 291, 521 llGetInventoryCreator = 291,
522 llOwnerSay = 292, 522 llOwnerSay = 292,
523 llRequestSimulatorData = 293, 523 llRequestSimulatorData = 293,
524 llForceMouselook = 294, 524 llForceMouselook = 294,
525 llGetObjectMass = 295, 525 llGetObjectMass = 295,
526 llListReplaceList = 296, 526 llListReplaceList = 296,
527 llLoadURL = 297, 527 llLoadURL = 297,
528 llParcelMediaCommandList = 298, 528 llParcelMediaCommandList = 298,
529 llParcelMediaQuery = 299, 529 llParcelMediaQuery = 299,
530 llModPow = 300, 530 llModPow = 300,
531 llGetInventoryType = 301, 531 llGetInventoryType = 301,
532 llSetPayPrice = 302, 532 llSetPayPrice = 302,
533 llGetCameraPos = 303, 533 llGetCameraPos = 303,
534 llGetCameraRot = 304, 534 llGetCameraRot = 304,
535 llSetPrimURL = 305, 535 llSetPrimURL = 305,
536 llRefreshPrimURL = 306, 536 llRefreshPrimURL = 306,
537 llEscapeURL = 307, 537 llEscapeURL = 307,
538 llUnescapeURL = 308, 538 llUnescapeURL = 308,
539 llMapDestination = 309, 539 llMapDestination = 309,
540 llAddToLandBanList = 310, 540 llAddToLandBanList = 310,
541 llRemoveFromLandPassList = 311, 541 llRemoveFromLandPassList = 311,
542 llRemoveFromLandBanList = 312, 542 llRemoveFromLandBanList = 312,
543 llSetCameraParams = 313, 543 llSetCameraParams = 313,
544 llClearCameraParams = 314, 544 llClearCameraParams = 314,
545 llListStatistics = 315, 545 llListStatistics = 315,
546 llGetUnixTime = 316, 546 llGetUnixTime = 316,
547 llGetParcelFlags = 317, 547 llGetParcelFlags = 317,
548 llGetRegionFlags = 318, 548 llGetRegionFlags = 318,
549 llXorBase64StringsCorrect = 319, 549 llXorBase64StringsCorrect = 319,
550 llHTTPRequest = 320, 550 llHTTPRequest = 320,
551 llResetLandBanList = 321, 551 llResetLandBanList = 321,
552 llResetLandPassList = 322, 552 llResetLandPassList = 322,
553 llGetParcelPrimCount = 323, 553 llGetParcelPrimCount = 323,
554 llGetParcelPrimOwners = 324, 554 llGetParcelPrimOwners = 324,
555 llGetObjectPrimCount = 325, 555 llGetObjectPrimCount = 325,
556 llGetParcelMaxPrims = 326, 556 llGetParcelMaxPrims = 326,
557 llGetParcelDetails = 327 557 llGetParcelDetails = 327
558 } 558 }
559 } 559 }
560} \ No newline at end of file 560} \ No newline at end of file
diff --git a/OpenSim/Region/ScriptEngine/LSOEngine/LSO/LSO_Parser.cs b/OpenSim/Region/ScriptEngine/LSOEngine/LSO/LSO_Parser.cs
index 1d3992f..d0cc0f9 100644
--- a/OpenSim/Region/ScriptEngine/LSOEngine/LSO/LSO_Parser.cs
+++ b/OpenSim/Region/ScriptEngine/LSOEngine/LSO/LSO_Parser.cs
@@ -1,729 +1,729 @@
1/* 1/*
2* Copyright (c) Contributors, http://opensimulator.org/ 2* Copyright (c) Contributors, http://opensimulator.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders. 3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4* 4*
5* Redistribution and use in source and binary forms, with or without 5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met: 6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright 7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer. 8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright 9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the 10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution. 11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the 12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products 13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission. 14* derived from this software without specific prior written permission.
15* 15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY 16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY 19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26* 26*
27*/ 27*/
28/* Original code: Tedd Hansen */ 28/* Original code: Tedd Hansen */
29using System; 29using System;
30using System.Collections; 30using System.Collections;
31using System.Collections.Generic; 31using System.Collections.Generic;
32using System.IO; 32using System.IO;
33using System.Reflection; 33using System.Reflection;
34using System.Reflection.Emit; 34using System.Reflection.Emit;
35using System.Text; 35using System.Text;
36using OpenSim.Region.ScriptEngine.LSOEngine.LSO; 36using OpenSim.Region.ScriptEngine.LSOEngine.LSO;
37 37
38namespace OpenSim.Region.ScriptEngine.LSOEngine.LSO 38namespace OpenSim.Region.ScriptEngine.LSOEngine.LSO
39{ 39{
40 internal partial class LSO_Parser 40 internal partial class LSO_Parser
41 { 41 {
42 private string FileName; 42 private string FileName;
43 private FileStream fs; 43 private FileStream fs;
44 private BinaryReader br; 44 private BinaryReader br;
45 internal LSO_Struct.Header myHeader; 45 internal LSO_Struct.Header myHeader;
46 internal Dictionary<long, LSO_Struct.StaticBlock> StaticBlocks = new Dictionary<long, LSO_Struct.StaticBlock>(); 46 internal Dictionary<long, LSO_Struct.StaticBlock> StaticBlocks = new Dictionary<long, LSO_Struct.StaticBlock>();
47 //private System.Collections.Hashtable StaticBlocks = new System.Collections.Hashtable(); 47 //private System.Collections.Hashtable StaticBlocks = new System.Collections.Hashtable();
48 48
49 private TypeBuilder typeBuilder; 49 private TypeBuilder typeBuilder;
50 private List<string> EventList = new List<string>(); 50 private List<string> EventList = new List<string>();
51 51
52 public LSO_Parser(string _FileName, TypeBuilder _typeBuilder) 52 public LSO_Parser(string _FileName, TypeBuilder _typeBuilder)
53 { 53 {
54 FileName = _FileName; 54 FileName = _FileName;
55 typeBuilder = _typeBuilder; 55 typeBuilder = _typeBuilder;
56 } 56 }
57 57
58 internal void OpenFile() 58 internal void OpenFile()
59 { 59 {
60 // Open 60 // Open
61 Common.SendToDebug("Opening filename: " + FileName); 61 Common.SendToDebug("Opening filename: " + FileName);
62 fs = File.Open(FileName, FileMode.Open, FileAccess.Read, FileShare.Read); 62 fs = File.Open(FileName, FileMode.Open, FileAccess.Read, FileShare.Read);
63 br = new BinaryReader(fs, Encoding.BigEndianUnicode); 63 br = new BinaryReader(fs, Encoding.BigEndianUnicode);
64 } 64 }
65 65
66 internal void CloseFile() 66 internal void CloseFile()
67 { 67 {
68 // Close 68 // Close
69 br.Close(); 69 br.Close();
70 fs.Close(); 70 fs.Close();
71 } 71 }
72 72
73 73
74 /// <summary> 74 /// <summary>
75 /// Parse LSO file. 75 /// Parse LSO file.
76 /// </summary> 76 /// </summary>
77 public void Parse() 77 public void Parse()
78 { 78 {
79 // The LSO Format consist of 6 major blocks: header, statics, functions, states, heap, and stack. 79 // The LSO Format consist of 6 major blocks: header, statics, functions, states, heap, and stack.
80 80
81 81
82 // HEADER BLOCK 82 // HEADER BLOCK
83 Common.SendToDebug("Reading HEADER BLOCK at: 0"); 83 Common.SendToDebug("Reading HEADER BLOCK at: 0");
84 fs.Seek(0, SeekOrigin.Begin); 84 fs.Seek(0, SeekOrigin.Begin);
85 myHeader = new LSO_Struct.Header(); 85 myHeader = new LSO_Struct.Header();
86 myHeader.TM = BitConverter.ToUInt32(br_read(4), 0); 86 myHeader.TM = BitConverter.ToUInt32(br_read(4), 0);
87 myHeader.IP = BitConverter.ToUInt32(br_read(4), 0); 87 myHeader.IP = BitConverter.ToUInt32(br_read(4), 0);
88 myHeader.VN = BitConverter.ToUInt32(br_read(4), 0); 88 myHeader.VN = BitConverter.ToUInt32(br_read(4), 0);
89 myHeader.BP = BitConverter.ToUInt32(br_read(4), 0); 89 myHeader.BP = BitConverter.ToUInt32(br_read(4), 0);
90 myHeader.SP = BitConverter.ToUInt32(br_read(4), 0); 90 myHeader.SP = BitConverter.ToUInt32(br_read(4), 0);
91 myHeader.HR = BitConverter.ToUInt32(br_read(4), 0); 91 myHeader.HR = BitConverter.ToUInt32(br_read(4), 0);
92 myHeader.HP = BitConverter.ToUInt32(br_read(4), 0); 92 myHeader.HP = BitConverter.ToUInt32(br_read(4), 0);
93 myHeader.CS = BitConverter.ToUInt32(br_read(4), 0); 93 myHeader.CS = BitConverter.ToUInt32(br_read(4), 0);
94 myHeader.NS = BitConverter.ToUInt32(br_read(4), 0); 94 myHeader.NS = BitConverter.ToUInt32(br_read(4), 0);
95 myHeader.CE = BitConverter.ToUInt32(br_read(4), 0); 95 myHeader.CE = BitConverter.ToUInt32(br_read(4), 0);
96 myHeader.IE = BitConverter.ToUInt32(br_read(4), 0); 96 myHeader.IE = BitConverter.ToUInt32(br_read(4), 0);
97 myHeader.ER = BitConverter.ToUInt32(br_read(4), 0); 97 myHeader.ER = BitConverter.ToUInt32(br_read(4), 0);
98 myHeader.FR = BitConverter.ToUInt32(br_read(4), 0); 98 myHeader.FR = BitConverter.ToUInt32(br_read(4), 0);
99 myHeader.SLR = BitConverter.ToUInt32(br_read(4), 0); 99 myHeader.SLR = BitConverter.ToUInt32(br_read(4), 0);
100 myHeader.GVR = BitConverter.ToUInt32(br_read(4), 0); 100 myHeader.GVR = BitConverter.ToUInt32(br_read(4), 0);
101 myHeader.GFR = BitConverter.ToUInt32(br_read(4), 0); 101 myHeader.GFR = BitConverter.ToUInt32(br_read(4), 0);
102 myHeader.PR = BitConverter.ToUInt32(br_read(4), 0); 102 myHeader.PR = BitConverter.ToUInt32(br_read(4), 0);
103 myHeader.ESR = BitConverter.ToUInt32(br_read(4), 0); 103 myHeader.ESR = BitConverter.ToUInt32(br_read(4), 0);
104 myHeader.SR = BitConverter.ToUInt32(br_read(4), 0); 104 myHeader.SR = BitConverter.ToUInt32(br_read(4), 0);
105 myHeader.NCE = BitConverter.ToUInt64(br_read(8), 0); 105 myHeader.NCE = BitConverter.ToUInt64(br_read(8), 0);
106 myHeader.NIE = BitConverter.ToUInt64(br_read(8), 0); 106 myHeader.NIE = BitConverter.ToUInt64(br_read(8), 0);
107 myHeader.NER = BitConverter.ToUInt64(br_read(8), 0); 107 myHeader.NER = BitConverter.ToUInt64(br_read(8), 0);
108 108
109 // Print Header Block to debug 109 // Print Header Block to debug
110 Common.SendToDebug("TM - Top of memory (size): " + myHeader.TM); 110 Common.SendToDebug("TM - Top of memory (size): " + myHeader.TM);
111 Common.SendToDebug("IP - Instruction Pointer (0=not running): " + myHeader.IP); 111 Common.SendToDebug("IP - Instruction Pointer (0=not running): " + myHeader.IP);
112 Common.SendToDebug("VN - Version number: " + myHeader.VN); 112 Common.SendToDebug("VN - Version number: " + myHeader.VN);
113 Common.SendToDebug("BP - Local Frame Pointer: " + myHeader.BP); 113 Common.SendToDebug("BP - Local Frame Pointer: " + myHeader.BP);
114 Common.SendToDebug("SP - Stack Pointer: " + myHeader.SP); 114 Common.SendToDebug("SP - Stack Pointer: " + myHeader.SP);
115 Common.SendToDebug("HR - Heap Register: " + myHeader.HR); 115 Common.SendToDebug("HR - Heap Register: " + myHeader.HR);
116 Common.SendToDebug("HP - Heap Pointer: " + myHeader.HP); 116 Common.SendToDebug("HP - Heap Pointer: " + myHeader.HP);
117 Common.SendToDebug("CS - Current State: " + myHeader.CS); 117 Common.SendToDebug("CS - Current State: " + myHeader.CS);
118 Common.SendToDebug("NS - Next State: " + myHeader.NS); 118 Common.SendToDebug("NS - Next State: " + myHeader.NS);
119 Common.SendToDebug("CE - Current Events: " + myHeader.CE); 119 Common.SendToDebug("CE - Current Events: " + myHeader.CE);
120 Common.SendToDebug("IE - In Event: " + myHeader.IE); 120 Common.SendToDebug("IE - In Event: " + myHeader.IE);
121 Common.SendToDebug("ER - Event Register: " + myHeader.ER); 121 Common.SendToDebug("ER - Event Register: " + myHeader.ER);
122 Common.SendToDebug("FR - Fault Register: " + myHeader.FR); 122 Common.SendToDebug("FR - Fault Register: " + myHeader.FR);
123 Common.SendToDebug("SLR - Sleep Register: " + myHeader.SLR); 123 Common.SendToDebug("SLR - Sleep Register: " + myHeader.SLR);
124 Common.SendToDebug("GVR - Global Variable Register: " + myHeader.GVR); 124 Common.SendToDebug("GVR - Global Variable Register: " + myHeader.GVR);
125 Common.SendToDebug("GFR - Global Function Register: " + myHeader.GFR); 125 Common.SendToDebug("GFR - Global Function Register: " + myHeader.GFR);
126 Common.SendToDebug("PR - Parameter Register: " + myHeader.PR); 126 Common.SendToDebug("PR - Parameter Register: " + myHeader.PR);
127 Common.SendToDebug("ESR - Energy Supply Register: " + myHeader.ESR); 127 Common.SendToDebug("ESR - Energy Supply Register: " + myHeader.ESR);
128 Common.SendToDebug("SR - State Register: " + myHeader.SR); 128 Common.SendToDebug("SR - State Register: " + myHeader.SR);
129 Common.SendToDebug("NCE - 64-bit Current Events: " + myHeader.NCE); 129 Common.SendToDebug("NCE - 64-bit Current Events: " + myHeader.NCE);
130 Common.SendToDebug("NIE - 64-bit In Events: " + myHeader.NIE); 130 Common.SendToDebug("NIE - 64-bit In Events: " + myHeader.NIE);
131 Common.SendToDebug("NER - 64-bit Event Register: " + myHeader.NER); 131 Common.SendToDebug("NER - 64-bit Event Register: " + myHeader.NER);
132 Common.SendToDebug("Read position when exiting HEADER BLOCK: " + fs.Position); 132 Common.SendToDebug("Read position when exiting HEADER BLOCK: " + fs.Position);
133 133
134 // STATIC BLOCK 134 // STATIC BLOCK
135 Common.SendToDebug("Reading STATIC BLOCK at: " + myHeader.GVR); 135 Common.SendToDebug("Reading STATIC BLOCK at: " + myHeader.GVR);
136 fs.Seek(myHeader.GVR, SeekOrigin.Begin); 136 fs.Seek(myHeader.GVR, SeekOrigin.Begin);
137 int StaticBlockCount = 0; 137 int StaticBlockCount = 0;
138 // Read function blocks until we hit GFR 138 // Read function blocks until we hit GFR
139 while (fs.Position < myHeader.GFR) 139 while (fs.Position < myHeader.GFR)
140 { 140 {
141 StaticBlockCount++; 141 StaticBlockCount++;
142 long startReadPos = fs.Position; 142 long startReadPos = fs.Position;
143 Common.SendToDebug("Reading Static Block " + StaticBlockCount + " at: " + startReadPos); 143 Common.SendToDebug("Reading Static Block " + StaticBlockCount + " at: " + startReadPos);
144 144
145 //fs.Seek(myHeader.GVR, SeekOrigin.Begin); 145 //fs.Seek(myHeader.GVR, SeekOrigin.Begin);
146 LSO_Struct.StaticBlock myStaticBlock = new LSO_Struct.StaticBlock(); 146 LSO_Struct.StaticBlock myStaticBlock = new LSO_Struct.StaticBlock();
147 myStaticBlock.Static_Chunk_Header_Size = BitConverter.ToUInt32(br_read(4), 0); 147 myStaticBlock.Static_Chunk_Header_Size = BitConverter.ToUInt32(br_read(4), 0);
148 myStaticBlock.ObjectType = br_read(1)[0]; 148 myStaticBlock.ObjectType = br_read(1)[0];
149 Common.SendToDebug("Static Block ObjectType: " + 149 Common.SendToDebug("Static Block ObjectType: " +
150 ((LSO_Enums.Variable_Type_Codes) myStaticBlock.ObjectType).ToString()); 150 ((LSO_Enums.Variable_Type_Codes) myStaticBlock.ObjectType).ToString());
151 myStaticBlock.Unknown = br_read(1)[0]; 151 myStaticBlock.Unknown = br_read(1)[0];
152 // Size of datatype varies -- what about strings? 152 // Size of datatype varies -- what about strings?
153 if (myStaticBlock.ObjectType != 0) 153 if (myStaticBlock.ObjectType != 0)
154 myStaticBlock.BlockVariable = br_read(getObjectSize(myStaticBlock.ObjectType)); 154 myStaticBlock.BlockVariable = br_read(getObjectSize(myStaticBlock.ObjectType));
155 155
156 StaticBlocks.Add((UInt32) startReadPos, myStaticBlock); 156 StaticBlocks.Add((UInt32) startReadPos, myStaticBlock);
157 } 157 }
158 Common.SendToDebug("Number of Static Blocks read: " + StaticBlockCount); 158 Common.SendToDebug("Number of Static Blocks read: " + StaticBlockCount);
159 159
160 160
161 // FUNCTION BLOCK 161 // FUNCTION BLOCK
162 // Always right after STATIC BLOCK 162 // Always right after STATIC BLOCK
163 LSO_Struct.FunctionBlock myFunctionBlock = new LSO_Struct.FunctionBlock(); 163 LSO_Struct.FunctionBlock myFunctionBlock = new LSO_Struct.FunctionBlock();
164 if (myHeader.GFR == myHeader.SR) 164 if (myHeader.GFR == myHeader.SR)
165 { 165 {
166 // If GFR and SR are at same position then there is no fuction block 166 // If GFR and SR are at same position then there is no fuction block
167 Common.SendToDebug("No FUNCTION BLOCK found"); 167 Common.SendToDebug("No FUNCTION BLOCK found");
168 } 168 }
169 else 169 else
170 { 170 {
171 Common.SendToDebug("Reading FUNCTION BLOCK at: " + myHeader.GFR); 171 Common.SendToDebug("Reading FUNCTION BLOCK at: " + myHeader.GFR);
172 fs.Seek(myHeader.GFR, SeekOrigin.Begin); 172 fs.Seek(myHeader.GFR, SeekOrigin.Begin);
173 myFunctionBlock.FunctionCount = BitConverter.ToUInt32(br_read(4), 0); 173 myFunctionBlock.FunctionCount = BitConverter.ToUInt32(br_read(4), 0);
174 Common.SendToDebug("Number of functions in Fuction Block: " + myFunctionBlock.FunctionCount); 174 Common.SendToDebug("Number of functions in Fuction Block: " + myFunctionBlock.FunctionCount);
175 if (myFunctionBlock.FunctionCount > 0) 175 if (myFunctionBlock.FunctionCount > 0)
176 { 176 {
177 myFunctionBlock.CodeChunkPointer = new UInt32[myFunctionBlock.FunctionCount]; 177 myFunctionBlock.CodeChunkPointer = new UInt32[myFunctionBlock.FunctionCount];
178 for (int i = 0; i < myFunctionBlock.FunctionCount; i++) 178 for (int i = 0; i < myFunctionBlock.FunctionCount; i++)
179 { 179 {
180 Common.SendToDebug("Reading function " + i + " at: " + fs.Position); 180 Common.SendToDebug("Reading function " + i + " at: " + fs.Position);
181 // TODO: ADD TO FUNCTION LIST (How do we identify it later?) 181 // TODO: ADD TO FUNCTION LIST (How do we identify it later?)
182 // Note! Absolute position 182 // Note! Absolute position
183 myFunctionBlock.CodeChunkPointer[i] = BitConverter.ToUInt32(br_read(4), 0) + myHeader.GFR; 183 myFunctionBlock.CodeChunkPointer[i] = BitConverter.ToUInt32(br_read(4), 0) + myHeader.GFR;
184 Common.SendToDebug("Fuction " + i + " code chunk position: " + 184 Common.SendToDebug("Fuction " + i + " code chunk position: " +
185 myFunctionBlock.CodeChunkPointer[i]); 185 myFunctionBlock.CodeChunkPointer[i]);
186 } 186 }
187 } 187 }
188 } 188 }
189 189
190 190
191 // STATE FRAME BLOCK 191 // STATE FRAME BLOCK
192 // Always right after FUNCTION BLOCK 192 // Always right after FUNCTION BLOCK
193 Common.SendToDebug("Reading STATE BLOCK at: " + myHeader.SR); 193 Common.SendToDebug("Reading STATE BLOCK at: " + myHeader.SR);
194 fs.Seek(myHeader.SR, SeekOrigin.Begin); 194 fs.Seek(myHeader.SR, SeekOrigin.Begin);
195 LSO_Struct.StateFrameBlock myStateFrameBlock = new LSO_Struct.StateFrameBlock(); 195 LSO_Struct.StateFrameBlock myStateFrameBlock = new LSO_Struct.StateFrameBlock();
196 myStateFrameBlock.StateCount = BitConverter.ToUInt32(br_read(4), 0); 196 myStateFrameBlock.StateCount = BitConverter.ToUInt32(br_read(4), 0);
197 if (myStateFrameBlock.StateCount > 0) 197 if (myStateFrameBlock.StateCount > 0)
198 { 198 {
199 // Initialize array 199 // Initialize array
200 myStateFrameBlock.StatePointer = new LSO_Struct.StatePointerBlock[myStateFrameBlock.StateCount]; 200 myStateFrameBlock.StatePointer = new LSO_Struct.StatePointerBlock[myStateFrameBlock.StateCount];
201 for (int i = 0; i < myStateFrameBlock.StateCount; i++) 201 for (int i = 0; i < myStateFrameBlock.StateCount; i++)
202 { 202 {
203 Common.SendToDebug("Reading STATE POINTER BLOCK " + (i + 1) + " at: " + fs.Position); 203 Common.SendToDebug("Reading STATE POINTER BLOCK " + (i + 1) + " at: " + fs.Position);
204 // Position is relative to state frame 204 // Position is relative to state frame
205 myStateFrameBlock.StatePointer[i].Location = myHeader.SR + BitConverter.ToUInt32(br_read(4), 0); 205 myStateFrameBlock.StatePointer[i].Location = myHeader.SR + BitConverter.ToUInt32(br_read(4), 0);
206 myStateFrameBlock.StatePointer[i].EventMask = new BitArray(br_read(8)); 206 myStateFrameBlock.StatePointer[i].EventMask = new BitArray(br_read(8));
207 Common.SendToDebug("Pointer: " + myStateFrameBlock.StatePointer[i].Location); 207 Common.SendToDebug("Pointer: " + myStateFrameBlock.StatePointer[i].Location);
208 Common.SendToDebug("Total potential EventMask bits: " + 208 Common.SendToDebug("Total potential EventMask bits: " +
209 myStateFrameBlock.StatePointer[i].EventMask.Count); 209 myStateFrameBlock.StatePointer[i].EventMask.Count);
210 210
211 //// Read STATE BLOCK 211 //// Read STATE BLOCK
212 //long CurPos = fs.Position; 212 //long CurPos = fs.Position;
213 //fs.Seek(CurPos, SeekOrigin.Begin); 213 //fs.Seek(CurPos, SeekOrigin.Begin);
214 } 214 }
215 } 215 }
216 216
217 217
218 // STATE BLOCK 218 // STATE BLOCK
219 // For each StateFrameBlock there is one StateBlock with multiple event handlers 219 // For each StateFrameBlock there is one StateBlock with multiple event handlers
220 220
221 if (myStateFrameBlock.StateCount > 0) 221 if (myStateFrameBlock.StateCount > 0)
222 { 222 {
223 // Go through all State Frame Pointers found 223 // Go through all State Frame Pointers found
224 for (int i = 0; i < myStateFrameBlock.StateCount; i++) 224 for (int i = 0; i < myStateFrameBlock.StateCount; i++)
225 { 225 {
226 fs.Seek(myStateFrameBlock.StatePointer[i].Location, SeekOrigin.Begin); 226 fs.Seek(myStateFrameBlock.StatePointer[i].Location, SeekOrigin.Begin);
227 Common.SendToDebug("Reading STATE BLOCK " + (i + 1) + " at: " + fs.Position); 227 Common.SendToDebug("Reading STATE BLOCK " + (i + 1) + " at: " + fs.Position);
228 228
229 // READ: STATE BLOCK HEADER 229 // READ: STATE BLOCK HEADER
230 myStateFrameBlock.StatePointer[i].StateBlock = new LSO_Struct.StateBlock(); 230 myStateFrameBlock.StatePointer[i].StateBlock = new LSO_Struct.StateBlock();
231 myStateFrameBlock.StatePointer[i].StateBlock.StartPos = (UInt32) fs.Position; // Note 231 myStateFrameBlock.StatePointer[i].StateBlock.StartPos = (UInt32) fs.Position; // Note
232 myStateFrameBlock.StatePointer[i].StateBlock.HeaderSize = BitConverter.ToUInt32(br_read(4), 0); 232 myStateFrameBlock.StatePointer[i].StateBlock.HeaderSize = BitConverter.ToUInt32(br_read(4), 0);
233 myStateFrameBlock.StatePointer[i].StateBlock.Unknown = br_read(1)[0]; 233 myStateFrameBlock.StatePointer[i].StateBlock.Unknown = br_read(1)[0];
234 myStateFrameBlock.StatePointer[i].StateBlock.EndPos = (UInt32) fs.Position; // Note 234 myStateFrameBlock.StatePointer[i].StateBlock.EndPos = (UInt32) fs.Position; // Note
235 Common.SendToDebug("State block Start Pos: " + myStateFrameBlock.StatePointer[i].StateBlock.StartPos); 235 Common.SendToDebug("State block Start Pos: " + myStateFrameBlock.StatePointer[i].StateBlock.StartPos);
236 Common.SendToDebug("State block Header Size: " + 236 Common.SendToDebug("State block Header Size: " +
237 myStateFrameBlock.StatePointer[i].StateBlock.HeaderSize); 237 myStateFrameBlock.StatePointer[i].StateBlock.HeaderSize);
238 Common.SendToDebug("State block Header End Pos: " + 238 Common.SendToDebug("State block Header End Pos: " +
239 myStateFrameBlock.StatePointer[i].StateBlock.EndPos); 239 myStateFrameBlock.StatePointer[i].StateBlock.EndPos);
240 240
241 // We need to count number of bits flagged in EventMask? 241 // We need to count number of bits flagged in EventMask?
242 242
243 243
244 // for each bit in myStateFrameBlock.StatePointer[i].EventMask 244 // for each bit in myStateFrameBlock.StatePointer[i].EventMask
245 245
246 // ADDING TO ALL RIGHT NOW, SHOULD LIMIT TO ONLY THE ONES IN USE 246 // ADDING TO ALL RIGHT NOW, SHOULD LIMIT TO ONLY THE ONES IN USE
247 //TODO: Create event hooks 247 //TODO: Create event hooks
248 myStateFrameBlock.StatePointer[i].StateBlock.StateBlockHandlers = 248 myStateFrameBlock.StatePointer[i].StateBlock.StateBlockHandlers =
249 new LSO_Struct.StateBlockHandler[myStateFrameBlock.StatePointer[i].EventMask.Count - 1]; 249 new LSO_Struct.StateBlockHandler[myStateFrameBlock.StatePointer[i].EventMask.Count - 1];
250 for (int ii = 0; ii < myStateFrameBlock.StatePointer[i].EventMask.Count - 1; ii++) 250 for (int ii = 0; ii < myStateFrameBlock.StatePointer[i].EventMask.Count - 1; ii++)
251 { 251 {
252 if (myStateFrameBlock.StatePointer[i].EventMask.Get(ii) == true) 252 if (myStateFrameBlock.StatePointer[i].EventMask.Get(ii) == true)
253 { 253 {
254 // We got an event 254 // We got an event
255 // READ: STATE BLOCK HANDLER 255 // READ: STATE BLOCK HANDLER
256 Common.SendToDebug("Reading STATE BLOCK " + (i + 1) + " HANDLER matching EVENT MASK " + ii + 256 Common.SendToDebug("Reading STATE BLOCK " + (i + 1) + " HANDLER matching EVENT MASK " + ii +
257 " (" + ((LSO_Enums.Event_Mask_Values) ii).ToString() + ") at: " + 257 " (" + ((LSO_Enums.Event_Mask_Values) ii).ToString() + ") at: " +
258 fs.Position); 258 fs.Position);
259 myStateFrameBlock.StatePointer[i].StateBlock.StateBlockHandlers[ii].CodeChunkPointer = 259 myStateFrameBlock.StatePointer[i].StateBlock.StateBlockHandlers[ii].CodeChunkPointer =
260 myStateFrameBlock.StatePointer[i].StateBlock.EndPos + 260 myStateFrameBlock.StatePointer[i].StateBlock.EndPos +
261 BitConverter.ToUInt32(br_read(4), 0); 261 BitConverter.ToUInt32(br_read(4), 0);
262 myStateFrameBlock.StatePointer[i].StateBlock.StateBlockHandlers[ii].CallFrameSize = 262 myStateFrameBlock.StatePointer[i].StateBlock.StateBlockHandlers[ii].CallFrameSize =
263 BitConverter.ToUInt32(br_read(4), 0); 263 BitConverter.ToUInt32(br_read(4), 0);
264 Common.SendToDebug("Reading STATE BLOCK " + (i + 1) + " HANDLER EVENT MASK " + ii + " (" + 264 Common.SendToDebug("Reading STATE BLOCK " + (i + 1) + " HANDLER EVENT MASK " + ii + " (" +
265 ((LSO_Enums.Event_Mask_Values) ii).ToString() + ") Code Chunk Pointer: " + 265 ((LSO_Enums.Event_Mask_Values) ii).ToString() + ") Code Chunk Pointer: " +
266 myStateFrameBlock.StatePointer[i].StateBlock.StateBlockHandlers[ii]. 266 myStateFrameBlock.StatePointer[i].StateBlock.StateBlockHandlers[ii].
267 CodeChunkPointer); 267 CodeChunkPointer);
268 Common.SendToDebug("Reading STATE BLOCK " + (i + 1) + " HANDLER EVENT MASK " + ii + " (" + 268 Common.SendToDebug("Reading STATE BLOCK " + (i + 1) + " HANDLER EVENT MASK " + ii + " (" +
269 ((LSO_Enums.Event_Mask_Values) ii).ToString() + ") Call Frame Size: " + 269 ((LSO_Enums.Event_Mask_Values) ii).ToString() + ") Call Frame Size: " +
270 myStateFrameBlock.StatePointer[i].StateBlock.StateBlockHandlers[ii]. 270 myStateFrameBlock.StatePointer[i].StateBlock.StateBlockHandlers[ii].
271 CallFrameSize); 271 CallFrameSize);
272 } 272 }
273 } 273 }
274 } 274 }
275 } 275 }
276 276
277 277
278 //// READ FUNCTION CODE CHUNKS 278 //// READ FUNCTION CODE CHUNKS
279 //// Functions + Function start pos (GFR) 279 //// Functions + Function start pos (GFR)
280 //// TODO: Somehow be able to identify and reference this 280 //// TODO: Somehow be able to identify and reference this
281 //LSO_Struct.CodeChunk[] myFunctionCodeChunk; 281 //LSO_Struct.CodeChunk[] myFunctionCodeChunk;
282 //if (myFunctionBlock.FunctionCount > 0) 282 //if (myFunctionBlock.FunctionCount > 0)
283 //{ 283 //{
284 // myFunctionCodeChunk = new LSO_Struct.CodeChunk[myFunctionBlock.FunctionCount]; 284 // myFunctionCodeChunk = new LSO_Struct.CodeChunk[myFunctionBlock.FunctionCount];
285 // for (int i = 0; i < myFunctionBlock.FunctionCount; i++) 285 // for (int i = 0; i < myFunctionBlock.FunctionCount; i++)
286 // { 286 // {
287 // Common.SendToDebug("Reading Function Code Chunk " + i); 287 // Common.SendToDebug("Reading Function Code Chunk " + i);
288 // myFunctionCodeChunk[i] = GetCodeChunk((UInt32)myFunctionBlock.CodeChunkPointer[i]); 288 // myFunctionCodeChunk[i] = GetCodeChunk((UInt32)myFunctionBlock.CodeChunkPointer[i]);
289 // } 289 // }
290 290
291 //} 291 //}
292 // READ EVENT CODE CHUNKS 292 // READ EVENT CODE CHUNKS
293 LSO_Struct.CodeChunk[] myEventCodeChunk; 293 LSO_Struct.CodeChunk[] myEventCodeChunk;
294 if (myStateFrameBlock.StateCount > 0) 294 if (myStateFrameBlock.StateCount > 0)
295 { 295 {
296 myEventCodeChunk = new LSO_Struct.CodeChunk[myStateFrameBlock.StateCount]; 296 myEventCodeChunk = new LSO_Struct.CodeChunk[myStateFrameBlock.StateCount];
297 for (int i = 0; i < myStateFrameBlock.StateCount; i++) 297 for (int i = 0; i < myStateFrameBlock.StateCount; i++)
298 { 298 {
299 // TODO: Somehow organize events and functions so they can be found again, 299 // TODO: Somehow organize events and functions so they can be found again,
300 // two level search ain't no good 300 // two level search ain't no good
301 for (int ii = 0; ii < myStateFrameBlock.StatePointer[i].EventMask.Count - 1; ii++) 301 for (int ii = 0; ii < myStateFrameBlock.StatePointer[i].EventMask.Count - 1; ii++)
302 { 302 {
303 if (myStateFrameBlock.StatePointer[i].StateBlock.StateBlockHandlers[ii].CodeChunkPointer > 0) 303 if (myStateFrameBlock.StatePointer[i].StateBlock.StateBlockHandlers[ii].CodeChunkPointer > 0)
304 { 304 {
305 Common.SendToDebug("Reading Event Code Chunk state " + i + ", event " + 305 Common.SendToDebug("Reading Event Code Chunk state " + i + ", event " +
306 (LSO_Enums.Event_Mask_Values) ii); 306 (LSO_Enums.Event_Mask_Values) ii);
307 307
308 308
309 // Override a Method / Function 309 // Override a Method / Function
310 string eventname = i + "_event_" + (LSO_Enums.Event_Mask_Values) ii; 310 string eventname = i + "_event_" + (LSO_Enums.Event_Mask_Values) ii;
311 Common.SendToDebug("Event Name: " + eventname); 311 Common.SendToDebug("Event Name: " + eventname);
312 if (Common.IL_ProcessCodeChunks) 312 if (Common.IL_ProcessCodeChunks)
313 { 313 {
314 EventList.Add(eventname); 314 EventList.Add(eventname);
315 315
316 // JUMP TO CODE PROCESSOR 316 // JUMP TO CODE PROCESSOR
317 ProcessCodeChunk( 317 ProcessCodeChunk(
318 myStateFrameBlock.StatePointer[i].StateBlock.StateBlockHandlers[ii].CodeChunkPointer, 318 myStateFrameBlock.StatePointer[i].StateBlock.StateBlockHandlers[ii].CodeChunkPointer,
319 typeBuilder, eventname); 319 typeBuilder, eventname);
320 } 320 }
321 } 321 }
322 } 322 }
323 } 323 }
324 } 324 }
325 325
326 326
327 if (Common.IL_CreateFunctionList) 327 if (Common.IL_CreateFunctionList)
328 IL_INSERT_FUNCTIONLIST(); 328 IL_INSERT_FUNCTIONLIST();
329 } 329 }
330 330
331 internal LSO_Struct.HeapBlock GetHeap(UInt32 pos) 331 internal LSO_Struct.HeapBlock GetHeap(UInt32 pos)
332 { 332 {
333 // HEAP BLOCK 333 // HEAP BLOCK
334 // TODO:? Special read for strings/keys (null terminated) and lists (pointers to other HEAP entries) 334 // TODO:? Special read for strings/keys (null terminated) and lists (pointers to other HEAP entries)
335 Common.SendToDebug("Reading HEAP BLOCK at: " + pos); 335 Common.SendToDebug("Reading HEAP BLOCK at: " + pos);
336 fs.Seek(pos, SeekOrigin.Begin); 336 fs.Seek(pos, SeekOrigin.Begin);
337 337
338 LSO_Struct.HeapBlock myHeapBlock = new LSO_Struct.HeapBlock(); 338 LSO_Struct.HeapBlock myHeapBlock = new LSO_Struct.HeapBlock();
339 myHeapBlock.DataBlockSize = BitConverter.ToInt32(br_read(4), 0); 339 myHeapBlock.DataBlockSize = BitConverter.ToInt32(br_read(4), 0);
340 myHeapBlock.ObjectType = br_read(1)[0]; 340 myHeapBlock.ObjectType = br_read(1)[0];
341 myHeapBlock.ReferenceCount = BitConverter.ToUInt16(br_read(2), 0); 341 myHeapBlock.ReferenceCount = BitConverter.ToUInt16(br_read(2), 0);
342 //myHeapBlock.Data = br_read(getObjectSize(myHeapBlock.ObjectType)); 342 //myHeapBlock.Data = br_read(getObjectSize(myHeapBlock.ObjectType));
343 // Don't read it reversed 343 // Don't read it reversed
344 myHeapBlock.Data = new byte[myHeapBlock.DataBlockSize - 1]; 344 myHeapBlock.Data = new byte[myHeapBlock.DataBlockSize - 1];
345 br.Read(myHeapBlock.Data, 0, myHeapBlock.DataBlockSize - 1); 345 br.Read(myHeapBlock.Data, 0, myHeapBlock.DataBlockSize - 1);
346 346
347 347
348 Common.SendToDebug("Heap Block Data Block Size: " + myHeapBlock.DataBlockSize); 348 Common.SendToDebug("Heap Block Data Block Size: " + myHeapBlock.DataBlockSize);
349 Common.SendToDebug("Heap Block ObjectType: " + 349 Common.SendToDebug("Heap Block ObjectType: " +
350 ((LSO_Enums.Variable_Type_Codes) myHeapBlock.ObjectType).ToString()); 350 ((LSO_Enums.Variable_Type_Codes) myHeapBlock.ObjectType).ToString());
351 Common.SendToDebug("Heap Block Reference Count: " + myHeapBlock.ReferenceCount); 351 Common.SendToDebug("Heap Block Reference Count: " + myHeapBlock.ReferenceCount);
352 352
353 return myHeapBlock; 353 return myHeapBlock;
354 } 354 }
355 355
356 private byte[] br_read(int len) 356 private byte[] br_read(int len)
357 { 357 {
358 if (len <= 0) 358 if (len <= 0)
359 return null; 359 return null;
360 360
361 try 361 try
362 { 362 {
363 byte[] bytes = new byte[len]; 363 byte[] bytes = new byte[len];
364 for (int i = len - 1; i > -1; i--) 364 for (int i = len - 1; i > -1; i--)
365 bytes[i] = br.ReadByte(); 365 bytes[i] = br.ReadByte();
366 return bytes; 366 return bytes;
367 } 367 }
368 catch (Exception e) 368 catch (Exception e)
369 { 369 {
370 Common.SendToDebug("Exception: " + e.ToString()); 370 Common.SendToDebug("Exception: " + e.ToString());
371 throw (e); 371 throw (e);
372 } 372 }
373 } 373 }
374 374
375 //private byte[] br_read_smallendian(int len) 375 //private byte[] br_read_smallendian(int len)
376 //{ 376 //{
377 // byte[] bytes = new byte[len]; 377 // byte[] bytes = new byte[len];
378 // br.Read(bytes,0, len); 378 // br.Read(bytes,0, len);
379 // return bytes; 379 // return bytes;
380 //} 380 //}
381 private Type getLLObjectType(byte objectCode) 381 private Type getLLObjectType(byte objectCode)
382 { 382 {
383 switch ((LSO_Enums.Variable_Type_Codes) objectCode) 383 switch ((LSO_Enums.Variable_Type_Codes) objectCode)
384 { 384 {
385 case LSO_Enums.Variable_Type_Codes.Void: 385 case LSO_Enums.Variable_Type_Codes.Void:
386 return typeof (void); 386 return typeof (void);
387 case LSO_Enums.Variable_Type_Codes.Integer: 387 case LSO_Enums.Variable_Type_Codes.Integer:
388 return typeof (UInt32); 388 return typeof (UInt32);
389 case LSO_Enums.Variable_Type_Codes.Float: 389 case LSO_Enums.Variable_Type_Codes.Float:
390 return typeof (float); 390 return typeof (float);
391 case LSO_Enums.Variable_Type_Codes.String: 391 case LSO_Enums.Variable_Type_Codes.String:
392 return typeof (string); 392 return typeof (string);
393 case LSO_Enums.Variable_Type_Codes.Key: 393 case LSO_Enums.Variable_Type_Codes.Key:
394 return typeof (string); 394 return typeof (string);
395 case LSO_Enums.Variable_Type_Codes.Vector: 395 case LSO_Enums.Variable_Type_Codes.Vector:
396 return typeof (LSO_Enums.Vector); 396 return typeof (LSO_Enums.Vector);
397 case LSO_Enums.Variable_Type_Codes.Rotation: 397 case LSO_Enums.Variable_Type_Codes.Rotation:
398 return typeof (LSO_Enums.Rotation); 398 return typeof (LSO_Enums.Rotation);
399 case LSO_Enums.Variable_Type_Codes.List: 399 case LSO_Enums.Variable_Type_Codes.List:
400 Common.SendToDebug("TODO: List datatype not implemented yet!"); 400 Common.SendToDebug("TODO: List datatype not implemented yet!");
401 return typeof (ArrayList); 401 return typeof (ArrayList);
402 case LSO_Enums.Variable_Type_Codes.Null: 402 case LSO_Enums.Variable_Type_Codes.Null:
403 Common.SendToDebug("TODO: Datatype null is not implemented, using string instead.!"); 403 Common.SendToDebug("TODO: Datatype null is not implemented, using string instead.!");
404 return typeof (string); 404 return typeof (string);
405 default: 405 default:
406 Common.SendToDebug("Lookup of LSL datatype " + objectCode + 406 Common.SendToDebug("Lookup of LSL datatype " + objectCode +
407 " to .Net datatype failed: Unknown LSL datatype. Defaulting to object."); 407 " to .Net datatype failed: Unknown LSL datatype. Defaulting to object.");
408 return typeof (object); 408 return typeof (object);
409 } 409 }
410 } 410 }
411 411
412 private int getObjectSize(byte ObjectType) 412 private int getObjectSize(byte ObjectType)
413 { 413 {
414 switch ((LSO_Enums.Variable_Type_Codes) ObjectType) 414 switch ((LSO_Enums.Variable_Type_Codes) ObjectType)
415 { 415 {
416 case LSO_Enums.Variable_Type_Codes.Integer: 416 case LSO_Enums.Variable_Type_Codes.Integer:
417 case LSO_Enums.Variable_Type_Codes.Float: 417 case LSO_Enums.Variable_Type_Codes.Float:
418 case LSO_Enums.Variable_Type_Codes.String: 418 case LSO_Enums.Variable_Type_Codes.String:
419 case LSO_Enums.Variable_Type_Codes.Key: 419 case LSO_Enums.Variable_Type_Codes.Key:
420 case LSO_Enums.Variable_Type_Codes.List: 420 case LSO_Enums.Variable_Type_Codes.List:
421 return 4; 421 return 4;
422 case LSO_Enums.Variable_Type_Codes.Vector: 422 case LSO_Enums.Variable_Type_Codes.Vector:
423 return 12; 423 return 12;
424 case LSO_Enums.Variable_Type_Codes.Rotation: 424 case LSO_Enums.Variable_Type_Codes.Rotation:
425 return 16; 425 return 16;
426 default: 426 default:
427 return 0; 427 return 0;
428 } 428 }
429 } 429 }
430 430
431 private string Read_String() 431 private string Read_String()
432 { 432 {
433 string ret = ""; 433 string ret = "";
434 byte reader = br_read(1)[0]; 434 byte reader = br_read(1)[0];
435 while (reader != 0x000) 435 while (reader != 0x000)
436 { 436 {
437 ret += (char) reader; 437 ret += (char) reader;
438 reader = br_read(1)[0]; 438 reader = br_read(1)[0];
439 } 439 }
440 return ret; 440 return ret;
441 } 441 }
442 442
443 /// <summary> 443 /// <summary>
444 /// Reads a code chunk and creates IL 444 /// Reads a code chunk and creates IL
445 /// </summary> 445 /// </summary>
446 /// <param name="pos">Absolute position in file. REMEMBER TO ADD myHeader.GFR!</param> 446 /// <param name="pos">Absolute position in file. REMEMBER TO ADD myHeader.GFR!</param>
447 /// <param name="typeBuilder">TypeBuilder for assembly</param> 447 /// <param name="typeBuilder">TypeBuilder for assembly</param>
448 /// <param name="eventname">Name of event (function) to generate</param> 448 /// <param name="eventname">Name of event (function) to generate</param>
449 private void ProcessCodeChunk(UInt32 pos, TypeBuilder typeBuilder, string eventname) 449 private void ProcessCodeChunk(UInt32 pos, TypeBuilder typeBuilder, string eventname)
450 { 450 {
451 LSO_Struct.CodeChunk myCodeChunk = new LSO_Struct.CodeChunk(); 451 LSO_Struct.CodeChunk myCodeChunk = new LSO_Struct.CodeChunk();
452 452
453 Common.SendToDebug("Reading Function Code Chunk at: " + pos); 453 Common.SendToDebug("Reading Function Code Chunk at: " + pos);
454 fs.Seek(pos, SeekOrigin.Begin); 454 fs.Seek(pos, SeekOrigin.Begin);
455 myCodeChunk.CodeChunkHeaderSize = BitConverter.ToUInt32(br_read(4), 0); 455 myCodeChunk.CodeChunkHeaderSize = BitConverter.ToUInt32(br_read(4), 0);
456 Common.SendToDebug("CodeChunk Header Size: " + myCodeChunk.CodeChunkHeaderSize); 456 Common.SendToDebug("CodeChunk Header Size: " + myCodeChunk.CodeChunkHeaderSize);
457 // Read until null 457 // Read until null
458 myCodeChunk.Comment = Read_String(); 458 myCodeChunk.Comment = Read_String();
459 Common.SendToDebug("Function comment: " + myCodeChunk.Comment); 459 Common.SendToDebug("Function comment: " + myCodeChunk.Comment);
460 myCodeChunk.ReturnTypePos = br_read(1)[0]; 460 myCodeChunk.ReturnTypePos = br_read(1)[0];
461 myCodeChunk.ReturnType = GetStaticBlock((long) myCodeChunk.ReturnTypePos + (long) myHeader.GVR); 461 myCodeChunk.ReturnType = GetStaticBlock((long) myCodeChunk.ReturnTypePos + (long) myHeader.GVR);
462 Common.SendToDebug("Return type #" + myCodeChunk.ReturnType.ObjectType + ": " + 462 Common.SendToDebug("Return type #" + myCodeChunk.ReturnType.ObjectType + ": " +
463 ((LSO_Enums.Variable_Type_Codes) myCodeChunk.ReturnType.ObjectType).ToString()); 463 ((LSO_Enums.Variable_Type_Codes) myCodeChunk.ReturnType.ObjectType).ToString());
464 464
465 465
466 // TODO: How to determine number of codechunks -- does this method work? 466 // TODO: How to determine number of codechunks -- does this method work?
467 myCodeChunk.CodeChunkArguments = new List<LSO_Struct.CodeChunkArgument>(); 467 myCodeChunk.CodeChunkArguments = new List<LSO_Struct.CodeChunkArgument>();
468 byte reader = br_read(1)[0]; 468 byte reader = br_read(1)[0];
469 reader = br_read(1)[0]; 469 reader = br_read(1)[0];
470 470
471 // NOTE ON CODE CHUNK ARGUMENTS 471 // NOTE ON CODE CHUNK ARGUMENTS
472 // This determins type definition 472 // This determins type definition
473 int ccount = 0; 473 int ccount = 0;
474 while (reader != 0x000) 474 while (reader != 0x000)
475 { 475 {
476 ccount++; 476 ccount++;
477 Common.SendToDebug("Reading Code Chunk Argument " + ccount); 477 Common.SendToDebug("Reading Code Chunk Argument " + ccount);
478 LSO_Struct.CodeChunkArgument CCA = new LSO_Struct.CodeChunkArgument(); 478 LSO_Struct.CodeChunkArgument CCA = new LSO_Struct.CodeChunkArgument();
479 CCA.FunctionReturnTypePos = reader; 479 CCA.FunctionReturnTypePos = reader;
480 reader = br_read(1)[0]; 480 reader = br_read(1)[0];
481 CCA.NullString = reader; 481 CCA.NullString = reader;
482 CCA.FunctionReturnType = GetStaticBlock(CCA.FunctionReturnTypePos + myHeader.GVR); 482 CCA.FunctionReturnType = GetStaticBlock(CCA.FunctionReturnTypePos + myHeader.GVR);
483 myCodeChunk.CodeChunkArguments.Add(CCA); 483 myCodeChunk.CodeChunkArguments.Add(CCA);
484 Common.SendToDebug("Code Chunk Argument " + ccount + " type #" + CCA.FunctionReturnType.ObjectType + 484 Common.SendToDebug("Code Chunk Argument " + ccount + " type #" + CCA.FunctionReturnType.ObjectType +
485 ": " + (LSO_Enums.Variable_Type_Codes) CCA.FunctionReturnType.ObjectType); 485 ": " + (LSO_Enums.Variable_Type_Codes) CCA.FunctionReturnType.ObjectType);
486 } 486 }
487 // Create string array 487 // Create string array
488 Type[] MethodArgs = new Type[myCodeChunk.CodeChunkArguments.Count]; 488 Type[] MethodArgs = new Type[myCodeChunk.CodeChunkArguments.Count];
489 for (int _ic = 0; _ic < myCodeChunk.CodeChunkArguments.Count; _ic++) 489 for (int _ic = 0; _ic < myCodeChunk.CodeChunkArguments.Count; _ic++)
490 { 490 {
491 MethodArgs[_ic] = getLLObjectType(myCodeChunk.CodeChunkArguments[_ic].FunctionReturnType.ObjectType); 491 MethodArgs[_ic] = getLLObjectType(myCodeChunk.CodeChunkArguments[_ic].FunctionReturnType.ObjectType);
492 Common.SendToDebug("Method argument " + _ic + ": " + 492 Common.SendToDebug("Method argument " + _ic + ": " +
493 getLLObjectType(myCodeChunk.CodeChunkArguments[_ic].FunctionReturnType.ObjectType). 493 getLLObjectType(myCodeChunk.CodeChunkArguments[_ic].FunctionReturnType.ObjectType).
494 ToString()); 494 ToString());
495 } 495 }
496 // End marker is 0x000 496 // End marker is 0x000
497 myCodeChunk.EndMarker = reader; 497 myCodeChunk.EndMarker = reader;
498 498
499 499
500 // 500 //
501 // Emit: START OF METHOD (FUNCTION) 501 // Emit: START OF METHOD (FUNCTION)
502 // 502 //
503 503
504 Common.SendToDebug("CLR:" + eventname + ":MethodBuilder methodBuilder = typeBuilder.DefineMethod..."); 504 Common.SendToDebug("CLR:" + eventname + ":MethodBuilder methodBuilder = typeBuilder.DefineMethod...");
505 MethodBuilder methodBuilder = typeBuilder.DefineMethod(eventname, 505 MethodBuilder methodBuilder = typeBuilder.DefineMethod(eventname,
506 MethodAttributes.Public, 506 MethodAttributes.Public,
507 typeof (void), 507 typeof (void),
508 new Type[] {typeof (object)}); 508 new Type[] {typeof (object)});
509 //MethodArgs); 509 //MethodArgs);
510 //typeof(void), //getLLObjectType(myCodeChunk.ReturnType), 510 //typeof(void), //getLLObjectType(myCodeChunk.ReturnType),
511 // new Type[] { typeof(object) }, //); 511 // new Type[] { typeof(object) }, //);
512 512
513 //Common.SendToDebug("CLR:" + eventname + ":typeBuilder.DefineMethodOverride(methodBuilder..."); 513 //Common.SendToDebug("CLR:" + eventname + ":typeBuilder.DefineMethodOverride(methodBuilder...");
514 //typeBuilder.DefineMethodOverride(methodBuilder, 514 //typeBuilder.DefineMethodOverride(methodBuilder,
515 // typeof(LSL_CLRInterface.LSLScript).GetMethod(eventname)); 515 // typeof(LSL_CLRInterface.LSLScript).GetMethod(eventname));
516 516
517 // Create the IL generator 517 // Create the IL generator
518 518
519 Common.SendToDebug("CLR:" + eventname + ":ILGenerator il = methodBuilder.GetILGenerator();"); 519 Common.SendToDebug("CLR:" + eventname + ":ILGenerator il = methodBuilder.GetILGenerator();");
520 ILGenerator il = methodBuilder.GetILGenerator(); 520 ILGenerator il = methodBuilder.GetILGenerator();
521 521
522 522
523 if (Common.IL_UseTryCatch) 523 if (Common.IL_UseTryCatch)
524 IL_INSERT_TRY(il, eventname); 524 IL_INSERT_TRY(il, eventname);
525 525
526 526
527 // Push Console.WriteLine command to stack ... Console.WriteLine("Hello World!"); 527 // Push Console.WriteLine command to stack ... Console.WriteLine("Hello World!");
528 //Common.SendToDebug("CLR:" + eventname + ":il.Emit(OpCodes.Call..."); 528 //Common.SendToDebug("CLR:" + eventname + ":il.Emit(OpCodes.Call...");
529 //il.Emit(OpCodes.Call, typeof(Console).GetMethod 529 //il.Emit(OpCodes.Call, typeof(Console).GetMethod
530 // ("WriteLine", new Type[] { typeof(string) })); 530 // ("WriteLine", new Type[] { typeof(string) }));
531 531
532 //Common.SendToDebug("STARTUP: il.Emit(OpCodes.Ldc_I4_S, 0);"); 532 //Common.SendToDebug("STARTUP: il.Emit(OpCodes.Ldc_I4_S, 0);");
533 533
534 //il.Emit(OpCodes.Ldc_I4_S, 0); 534 //il.Emit(OpCodes.Ldc_I4_S, 0);
535 for (int _ic = 0; _ic < myCodeChunk.CodeChunkArguments.Count; _ic++) 535 for (int _ic = 0; _ic < myCodeChunk.CodeChunkArguments.Count; _ic++)
536 { 536 {
537 Common.SendToDebug("PARAMS: il.Emit(OpCodes.Ldarg, " + _ic + ");"); 537 Common.SendToDebug("PARAMS: il.Emit(OpCodes.Ldarg, " + _ic + ");");
538 il.Emit(OpCodes.Ldarg, _ic); 538 il.Emit(OpCodes.Ldarg, _ic);
539 } 539 }
540 540
541 541
542 // 542 //
543 // CALLING OPCODE PROCESSOR, one command at the time TO GENERATE IL 543 // CALLING OPCODE PROCESSOR, one command at the time TO GENERATE IL
544 // 544 //
545 bool FoundRet = false; 545 bool FoundRet = false;
546 while (FoundRet == false) 546 while (FoundRet == false)
547 { 547 {
548 FoundRet = LSL_PROCESS_OPCODE(il); 548 FoundRet = LSL_PROCESS_OPCODE(il);
549 } 549 }
550 550
551 551
552 if (Common.IL_UseTryCatch) 552 if (Common.IL_UseTryCatch)
553 IL_INSERT_END_TRY(il, eventname); 553 IL_INSERT_END_TRY(il, eventname);
554 554
555 // Emit: RETURN FROM METHOD 555 // Emit: RETURN FROM METHOD
556 il.Emit(OpCodes.Ret); 556 il.Emit(OpCodes.Ret);
557 557
558 return; 558 return;
559 } 559 }
560 560
561 private void IL_INSERT_FUNCTIONLIST() 561 private void IL_INSERT_FUNCTIONLIST()
562 { 562 {
563 Common.SendToDebug("Creating function list"); 563 Common.SendToDebug("Creating function list");
564 564
565 565
566 string eventname = "GetFunctions"; 566 string eventname = "GetFunctions";
567 567
568 Common.SendToDebug("Creating IL " + eventname); 568 Common.SendToDebug("Creating IL " + eventname);
569 // Define a private String field. 569 // Define a private String field.
570 //FieldBuilder myField = myTypeBuilder.DefineField("EventList", typeof(String[]), FieldAttributes.Public); 570 //FieldBuilder myField = myTypeBuilder.DefineField("EventList", typeof(String[]), FieldAttributes.Public);
571 571
572 572
573 //FieldBuilder mem = typeBuilder.DefineField("mem", typeof(Array), FieldAttributes.Private); 573 //FieldBuilder mem = typeBuilder.DefineField("mem", typeof(Array), FieldAttributes.Private);
574 574
575 575
576 MethodBuilder methodBuilder = typeBuilder.DefineMethod(eventname, 576 MethodBuilder methodBuilder = typeBuilder.DefineMethod(eventname,
577 MethodAttributes.Public, 577 MethodAttributes.Public,
578 typeof (string[]), 578 typeof (string[]),
579 null); 579 null);
580 580
581 //typeBuilder.DefineMethodOverride(methodBuilder, 581 //typeBuilder.DefineMethodOverride(methodBuilder,
582 // typeof(LSL_CLRInterface.LSLScript).GetMethod(eventname)); 582 // typeof(LSL_CLRInterface.LSLScript).GetMethod(eventname));
583 583
584 ILGenerator il = methodBuilder.GetILGenerator(); 584 ILGenerator il = methodBuilder.GetILGenerator();
585 585
586 586
587 // IL_INSERT_TRY(il, eventname); 587 // IL_INSERT_TRY(il, eventname);
588 588
589 // // Push string to stack 589 // // Push string to stack
590 // il.Emit(OpCodes.Ldstr, "Inside " + eventname); 590 // il.Emit(OpCodes.Ldstr, "Inside " + eventname);
591 591
592 //// Push Console.WriteLine command to stack ... Console.WriteLine("Hello World!"); 592 //// Push Console.WriteLine command to stack ... Console.WriteLine("Hello World!");
593 //il.Emit(OpCodes.Call, typeof(Console).GetMethod 593 //il.Emit(OpCodes.Call, typeof(Console).GetMethod
594 // ("WriteLine", new Type[] { typeof(string) })); 594 // ("WriteLine", new Type[] { typeof(string) }));
595 595
596 //initIL.Emit(OpCodes.Newobj, typeof(string[])); 596 //initIL.Emit(OpCodes.Newobj, typeof(string[]));
597 597
598 //string[] MyArray = new string[2] { "TestItem1" , "TestItem2" }; 598 //string[] MyArray = new string[2] { "TestItem1" , "TestItem2" };
599 599
600 ////il.Emit(OpCodes.Ldarg_0); 600 ////il.Emit(OpCodes.Ldarg_0);
601 601
602 il.DeclareLocal(typeof (string[])); 602 il.DeclareLocal(typeof (string[]));
603 603
604 ////il.Emit(OpCodes.Ldarg_0); 604 ////il.Emit(OpCodes.Ldarg_0);
605 il.Emit(OpCodes.Ldc_I4, EventList.Count); // Specify array length 605 il.Emit(OpCodes.Ldc_I4, EventList.Count); // Specify array length
606 il.Emit(OpCodes.Newarr, typeof (String)); // create new string array 606 il.Emit(OpCodes.Newarr, typeof (String)); // create new string array
607 il.Emit(OpCodes.Stloc_0); // Store array as local variable 0 in stack 607 il.Emit(OpCodes.Stloc_0); // Store array as local variable 0 in stack
608 ////SetFunctionList 608 ////SetFunctionList
609 609
610 for (int lv = 0; lv < EventList.Count; lv++) 610 for (int lv = 0; lv < EventList.Count; lv++)
611 { 611 {
612 il.Emit(OpCodes.Ldloc_0); // Load local variable 0 onto stack 612 il.Emit(OpCodes.Ldloc_0); // Load local variable 0 onto stack
613 il.Emit(OpCodes.Ldc_I4, lv); // Push index position 613 il.Emit(OpCodes.Ldc_I4, lv); // Push index position
614 il.Emit(OpCodes.Ldstr, EventList[lv]); // Push value 614 il.Emit(OpCodes.Ldstr, EventList[lv]); // Push value
615 il.Emit(OpCodes.Stelem_Ref); // Perform array[index] = value 615 il.Emit(OpCodes.Stelem_Ref); // Perform array[index] = value
616 616
617 //il.Emit(OpCodes.Ldarg_0); 617 //il.Emit(OpCodes.Ldarg_0);
618 //il.Emit(OpCodes.Ldstr, EventList[lv]); // Push value 618 //il.Emit(OpCodes.Ldstr, EventList[lv]); // Push value
619 //il.Emit(OpCodes.Call, typeof(LSL_BaseClass).GetMethod("AddFunction", new Type[] { typeof(string) })); 619 //il.Emit(OpCodes.Call, typeof(LSL_BaseClass).GetMethod("AddFunction", new Type[] { typeof(string) }));
620 } 620 }
621 621
622 622
623 // IL_INSERT_END_TRY(il, eventname); 623 // IL_INSERT_END_TRY(il, eventname);
624 624
625 625
626 il.Emit(OpCodes.Ldloc_0); // Load local variable 0 onto stack 626 il.Emit(OpCodes.Ldloc_0); // Load local variable 0 onto stack
627 // il.Emit(OpCodes.Call, typeof(LSL_BaseClass).GetMethod("SetFunctionList", new Type[] { typeof(Array) })); 627 // il.Emit(OpCodes.Call, typeof(LSL_BaseClass).GetMethod("SetFunctionList", new Type[] { typeof(Array) }));
628 628
629 il.Emit(OpCodes.Ret); // Return 629 il.Emit(OpCodes.Ret); // Return
630 } 630 }
631 631
632 632
633 private void IL_INSERT_TRY(ILGenerator il, string eventname) 633 private void IL_INSERT_TRY(ILGenerator il, string eventname)
634 { 634 {
635 /* 635 /*
636 * CLR TRY 636 * CLR TRY
637 */ 637 */
638 //Common.SendToDebug("CLR:" + eventname + ":il.BeginExceptionBlock()"); 638 //Common.SendToDebug("CLR:" + eventname + ":il.BeginExceptionBlock()");
639 il.BeginExceptionBlock(); 639 il.BeginExceptionBlock();
640 640
641 // Push "Hello World!" string to stack 641 // Push "Hello World!" string to stack
642 //Common.SendToDebug("CLR:" + eventname + ":il.Emit(OpCodes.Ldstr..."); 642 //Common.SendToDebug("CLR:" + eventname + ":il.Emit(OpCodes.Ldstr...");
643 //il.Emit(OpCodes.Ldstr, "Starting CLR dynamic execution of: " + eventname); 643 //il.Emit(OpCodes.Ldstr, "Starting CLR dynamic execution of: " + eventname);
644 } 644 }
645 645
646 private void IL_INSERT_END_TRY(ILGenerator il, string eventname) 646 private void IL_INSERT_END_TRY(ILGenerator il, string eventname)
647 { 647 {
648 /* 648 /*
649 * CATCH 649 * CATCH
650 */ 650 */
651 Common.SendToDebug("CLR:" + eventname + ":il.BeginCatchBlock(typeof(Exception));"); 651 Common.SendToDebug("CLR:" + eventname + ":il.BeginCatchBlock(typeof(Exception));");
652 il.BeginCatchBlock(typeof (Exception)); 652 il.BeginCatchBlock(typeof (Exception));
653 653
654 // Push "Hello World!" string to stack 654 // Push "Hello World!" string to stack
655 Common.SendToDebug("CLR:" + eventname + ":il.Emit(OpCodes.Ldstr..."); 655 Common.SendToDebug("CLR:" + eventname + ":il.Emit(OpCodes.Ldstr...");
656 il.Emit(OpCodes.Ldstr, "Execption executing dynamic CLR function " + eventname + ": "); 656 il.Emit(OpCodes.Ldstr, "Execption executing dynamic CLR function " + eventname + ": ");
657 657
658 //call void [mscorlib]System.Console::WriteLine(string) 658 //call void [mscorlib]System.Console::WriteLine(string)
659 Common.SendToDebug("CLR:" + eventname + ":il.Emit(OpCodes.Call..."); 659 Common.SendToDebug("CLR:" + eventname + ":il.Emit(OpCodes.Call...");
660 il.Emit(OpCodes.Call, typeof (Console).GetMethod 660 il.Emit(OpCodes.Call, typeof (Console).GetMethod
661 ("Write", new Type[] {typeof (string)})); 661 ("Write", new Type[] {typeof (string)}));
662 662
663 //callvirt instance string [mscorlib]System.Exception::get_Message() 663 //callvirt instance string [mscorlib]System.Exception::get_Message()
664 Common.SendToDebug("CLR:" + eventname + ":il.Emit(OpCodes.Callvirt..."); 664 Common.SendToDebug("CLR:" + eventname + ":il.Emit(OpCodes.Callvirt...");
665 il.Emit(OpCodes.Callvirt, typeof (Exception).GetMethod 665 il.Emit(OpCodes.Callvirt, typeof (Exception).GetMethod
666 ("get_Message")); 666 ("get_Message"));
667 667
668 //call void [mscorlib]System.Console::WriteLine(string) 668 //call void [mscorlib]System.Console::WriteLine(string)
669 Common.SendToDebug("CLR:" + eventname + ":il.Emit(OpCodes.Call..."); 669 Common.SendToDebug("CLR:" + eventname + ":il.Emit(OpCodes.Call...");
670 il.Emit(OpCodes.Call, typeof (Console).GetMethod 670 il.Emit(OpCodes.Call, typeof (Console).GetMethod
671 ("WriteLine", new Type[] {typeof (string)})); 671 ("WriteLine", new Type[] {typeof (string)}));
672 672
673 /* 673 /*
674 * CLR END TRY 674 * CLR END TRY
675 */ 675 */
676 //Common.SendToDebug("CLR:" + eventname + ":il.EndExceptionBlock();"); 676 //Common.SendToDebug("CLR:" + eventname + ":il.EndExceptionBlock();");
677 il.EndExceptionBlock(); 677 il.EndExceptionBlock();
678 } 678 }
679 679
680 private LSO_Struct.StaticBlock GetStaticBlock(long pos) 680 private LSO_Struct.StaticBlock GetStaticBlock(long pos)
681 { 681 {
682 long FirstPos = fs.Position; 682 long FirstPos = fs.Position;
683 try 683 try
684 { 684 {
685 UInt32 position = (UInt32) pos; 685 UInt32 position = (UInt32) pos;
686 // STATIC BLOCK 686 // STATIC BLOCK
687 Common.SendToDebug("Reading STATIC BLOCK at: " + position); 687 Common.SendToDebug("Reading STATIC BLOCK at: " + position);
688 fs.Seek(position, SeekOrigin.Begin); 688 fs.Seek(position, SeekOrigin.Begin);
689 689
690 if (StaticBlocks.ContainsKey(position) == true) 690 if (StaticBlocks.ContainsKey(position) == true)
691 { 691 {
692 Common.SendToDebug("Found cached STATIC BLOCK"); 692 Common.SendToDebug("Found cached STATIC BLOCK");
693 693
694 694
695 return StaticBlocks[pos]; 695 return StaticBlocks[pos];
696 } 696 }
697 697
698 //int StaticBlockCount = 0; 698 //int StaticBlockCount = 0;
699 // Read function blocks until we hit GFR 699 // Read function blocks until we hit GFR
700 //while (fs.Position < myHeader.GFR) 700 //while (fs.Position < myHeader.GFR)
701 //{ 701 //{
702 //StaticBlockCount++; 702 //StaticBlockCount++;
703 703
704 //Common.SendToDebug("Reading Static Block at: " + position); 704 //Common.SendToDebug("Reading Static Block at: " + position);
705 705
706 //fs.Seek(myHeader.GVR, SeekOrigin.Begin); 706 //fs.Seek(myHeader.GVR, SeekOrigin.Begin);
707 LSO_Struct.StaticBlock myStaticBlock = new LSO_Struct.StaticBlock(); 707 LSO_Struct.StaticBlock myStaticBlock = new LSO_Struct.StaticBlock();
708 myStaticBlock.Static_Chunk_Header_Size = BitConverter.ToUInt32(br_read(4), 0); 708 myStaticBlock.Static_Chunk_Header_Size = BitConverter.ToUInt32(br_read(4), 0);
709 myStaticBlock.ObjectType = br_read(1)[0]; 709 myStaticBlock.ObjectType = br_read(1)[0];
710 Common.SendToDebug("Static Block ObjectType: " + 710 Common.SendToDebug("Static Block ObjectType: " +
711 ((LSO_Enums.Variable_Type_Codes) myStaticBlock.ObjectType).ToString()); 711 ((LSO_Enums.Variable_Type_Codes) myStaticBlock.ObjectType).ToString());
712 myStaticBlock.Unknown = br_read(1)[0]; 712 myStaticBlock.Unknown = br_read(1)[0];
713 // Size of datatype varies 713 // Size of datatype varies
714 if (myStaticBlock.ObjectType != 0) 714 if (myStaticBlock.ObjectType != 0)
715 myStaticBlock.BlockVariable = br_read(getObjectSize(myStaticBlock.ObjectType)); 715 myStaticBlock.BlockVariable = br_read(getObjectSize(myStaticBlock.ObjectType));
716 716
717 StaticBlocks.Add(position, myStaticBlock); 717 StaticBlocks.Add(position, myStaticBlock);
718 //} 718 //}
719 Common.SendToDebug("Done reading Static Block."); 719 Common.SendToDebug("Done reading Static Block.");
720 return myStaticBlock; 720 return myStaticBlock;
721 } 721 }
722 finally 722 finally
723 { 723 {
724 // Go back to original read pos 724 // Go back to original read pos
725 fs.Seek(FirstPos, SeekOrigin.Begin); 725 fs.Seek(FirstPos, SeekOrigin.Begin);
726 } 726 }
727 } 727 }
728 } 728 }
729} \ No newline at end of file 729} \ No newline at end of file
diff --git a/OpenSim/Region/ScriptEngine/LSOEngine/LSO/LSO_Struct.cs b/OpenSim/Region/ScriptEngine/LSOEngine/LSO/LSO_Struct.cs
index 915280c..b38b099 100644
--- a/OpenSim/Region/ScriptEngine/LSOEngine/LSO/LSO_Struct.cs
+++ b/OpenSim/Region/ScriptEngine/LSOEngine/LSO/LSO_Struct.cs
@@ -1,143 +1,143 @@
1/* 1/*
2* Copyright (c) Contributors, http://opensimulator.org/ 2* Copyright (c) Contributors, http://opensimulator.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders. 3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4* 4*
5* Redistribution and use in source and binary forms, with or without 5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met: 6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright 7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer. 8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright 9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the 10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution. 11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the 12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products 13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission. 14* derived from this software without specific prior written permission.
15* 15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY 16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY 19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26* 26*
27*/ 27*/
28/* Original code: Tedd Hansen */ 28/* Original code: Tedd Hansen */
29 29
30using System; 30using System;
31using System.Collections; 31using System.Collections;
32using System.Collections.Generic; 32using System.Collections.Generic;
33 33
34namespace OpenSim.Region.ScriptEngine.LSOEngine.LSO 34namespace OpenSim.Region.ScriptEngine.LSOEngine.LSO
35{ 35{
36 internal static class LSO_Struct 36 internal static class LSO_Struct
37 { 37 {
38 public struct Header 38 public struct Header
39 { 39 {
40 public UInt32 TM; 40 public UInt32 TM;
41 public UInt32 IP; 41 public UInt32 IP;
42 public UInt32 VN; 42 public UInt32 VN;
43 public UInt32 BP; 43 public UInt32 BP;
44 public UInt32 SP; 44 public UInt32 SP;
45 public UInt32 HR; 45 public UInt32 HR;
46 public UInt32 HP; 46 public UInt32 HP;
47 public UInt32 CS; 47 public UInt32 CS;
48 public UInt32 NS; 48 public UInt32 NS;
49 public UInt32 CE; 49 public UInt32 CE;
50 public UInt32 IE; 50 public UInt32 IE;
51 public UInt32 ER; 51 public UInt32 ER;
52 public UInt32 FR; 52 public UInt32 FR;
53 public UInt32 SLR; 53 public UInt32 SLR;
54 public UInt32 GVR; 54 public UInt32 GVR;
55 public UInt32 GFR; 55 public UInt32 GFR;
56 public UInt32 PR; 56 public UInt32 PR;
57 public UInt32 ESR; 57 public UInt32 ESR;
58 public UInt32 SR; 58 public UInt32 SR;
59 public UInt64 NCE; 59 public UInt64 NCE;
60 public UInt64 NIE; 60 public UInt64 NIE;
61 public UInt64 NER; 61 public UInt64 NER;
62 } 62 }
63 63
64 public struct StaticBlock 64 public struct StaticBlock
65 { 65 {
66 public UInt32 Static_Chunk_Header_Size; 66 public UInt32 Static_Chunk_Header_Size;
67 public byte ObjectType; 67 public byte ObjectType;
68 public byte Unknown; 68 public byte Unknown;
69 public byte[] BlockVariable; 69 public byte[] BlockVariable;
70 } 70 }
71 71
72 /* Not actually a structure 72 /* Not actually a structure
73 public struct StaticBlockVariable 73 public struct StaticBlockVariable
74 { 74 {
75 public UInt32 Integer1; 75 public UInt32 Integer1;
76 public UInt32 Float1; 76 public UInt32 Float1;
77 public UInt32 HeapPointer_String; 77 public UInt32 HeapPointer_String;
78 public UInt32 HeapPointer_Key; 78 public UInt32 HeapPointer_Key;
79 public byte[] Vector_12; 79 public byte[] Vector_12;
80 public byte[] Rotation_16; 80 public byte[] Rotation_16;
81 public UInt32 Pointer_List_Structure; 81 public UInt32 Pointer_List_Structure;
82 } */ 82 } */
83 83
84 public struct HeapBlock 84 public struct HeapBlock
85 { 85 {
86 public Int32 DataBlockSize; 86 public Int32 DataBlockSize;
87 public byte ObjectType; 87 public byte ObjectType;
88 public UInt16 ReferenceCount; 88 public UInt16 ReferenceCount;
89 public byte[] Data; 89 public byte[] Data;
90 } 90 }
91 91
92 public struct StateFrameBlock 92 public struct StateFrameBlock
93 { 93 {
94 public UInt32 StateCount; 94 public UInt32 StateCount;
95 public StatePointerBlock[] StatePointer; 95 public StatePointerBlock[] StatePointer;
96 } 96 }
97 97
98 public struct StatePointerBlock 98 public struct StatePointerBlock
99 { 99 {
100 public UInt32 Location; 100 public UInt32 Location;
101 public BitArray EventMask; 101 public BitArray EventMask;
102 public StateBlock StateBlock; 102 public StateBlock StateBlock;
103 } 103 }
104 104
105 public struct StateBlock 105 public struct StateBlock
106 { 106 {
107 public UInt32 StartPos; 107 public UInt32 StartPos;
108 public UInt32 EndPos; 108 public UInt32 EndPos;
109 public UInt32 HeaderSize; 109 public UInt32 HeaderSize;
110 public byte Unknown; 110 public byte Unknown;
111 public StateBlockHandler[] StateBlockHandlers; 111 public StateBlockHandler[] StateBlockHandlers;
112 } 112 }
113 113
114 public struct StateBlockHandler 114 public struct StateBlockHandler
115 { 115 {
116 public UInt32 CodeChunkPointer; 116 public UInt32 CodeChunkPointer;
117 public UInt32 CallFrameSize; 117 public UInt32 CallFrameSize;
118 } 118 }
119 119
120 public struct FunctionBlock 120 public struct FunctionBlock
121 { 121 {
122 public UInt32 FunctionCount; 122 public UInt32 FunctionCount;
123 public UInt32[] CodeChunkPointer; 123 public UInt32[] CodeChunkPointer;
124 } 124 }
125 125
126 public struct CodeChunk 126 public struct CodeChunk
127 { 127 {
128 public UInt32 CodeChunkHeaderSize; 128 public UInt32 CodeChunkHeaderSize;
129 public string Comment; 129 public string Comment;
130 public List<CodeChunkArgument> CodeChunkArguments; 130 public List<CodeChunkArgument> CodeChunkArguments;
131 public byte EndMarker; 131 public byte EndMarker;
132 public byte ReturnTypePos; 132 public byte ReturnTypePos;
133 public StaticBlock ReturnType; 133 public StaticBlock ReturnType;
134 } 134 }
135 135
136 public struct CodeChunkArgument 136 public struct CodeChunkArgument
137 { 137 {
138 public byte FunctionReturnTypePos; 138 public byte FunctionReturnTypePos;
139 public byte NullString; 139 public byte NullString;
140 public StaticBlock FunctionReturnType; 140 public StaticBlock FunctionReturnType;
141 } 141 }
142 } 142 }
143} \ No newline at end of file 143} \ No newline at end of file
diff --git a/OpenSim/Region/ScriptEngine/LSOEngine/Properties/AssemblyInfo.cs b/OpenSim/Region/ScriptEngine/LSOEngine/Properties/AssemblyInfo.cs
index 103203d..78014d6 100644
--- a/OpenSim/Region/ScriptEngine/LSOEngine/Properties/AssemblyInfo.cs
+++ b/OpenSim/Region/ScriptEngine/LSOEngine/Properties/AssemblyInfo.cs
@@ -1,38 +1,38 @@
1using System.Reflection; 1using System.Reflection;
2using System.Runtime.InteropServices; 2using System.Runtime.InteropServices;
3 3
4// General Information about an assembly is controlled through the following 4// General Information about an assembly is controlled through the following
5// set of attributes. Change these attribute values to modify the information 5// set of attributes. Change these attribute values to modify the information
6// associated with an assembly. 6// associated with an assembly.
7 7
8[assembly: AssemblyTitle("OpenSim.Region.ScriptEngine.LSOEngine")] 8[assembly: AssemblyTitle("OpenSim.Region.ScriptEngine.LSOEngine")]
9[assembly : AssemblyDescription("")] 9[assembly : AssemblyDescription("")]
10[assembly : AssemblyConfiguration("")] 10[assembly : AssemblyConfiguration("")]
11[assembly : AssemblyCompany("")] 11[assembly : AssemblyCompany("")]
12[assembly: AssemblyProduct("OpenSim.Region.ScriptEngine.LSOEngine")] 12[assembly: AssemblyProduct("OpenSim.Region.ScriptEngine.LSOEngine")]
13[assembly : AssemblyCopyright("Copyright © 2007")] 13[assembly : AssemblyCopyright("Copyright © 2007")]
14[assembly : AssemblyTrademark("")] 14[assembly : AssemblyTrademark("")]
15[assembly : AssemblyCulture("")] 15[assembly : AssemblyCulture("")]
16 16
17// Setting ComVisible to false makes the types in this assembly not visible 17// Setting ComVisible to false makes the types in this assembly not visible
18// to COM components. If you need to access a type in this assembly from 18// to COM components. If you need to access a type in this assembly from
19// COM, set the ComVisible attribute to true on that type. 19// COM, set the ComVisible attribute to true on that type.
20 20
21[assembly : ComVisible(false)] 21[assembly : ComVisible(false)]
22 22
23// The following GUID is for the ID of the typelib if this project is exposed to COM 23// The following GUID is for the ID of the typelib if this project is exposed to COM
24 24
25[assembly : Guid("2842257e-6fde-4460-9368-4cde57fa9cc4")] 25[assembly : Guid("2842257e-6fde-4460-9368-4cde57fa9cc4")]
26 26
27// Version information for an assembly consists of the following four values: 27// Version information for an assembly consists of the following four values:
28// 28//
29// Major Version 29// Major Version
30// Minor Version 30// Minor Version
31// Build Number 31// Build Number
32// Revision 32// Revision
33// 33//
34// You can specify all the values or you can default the Revision and Build Numbers 34// You can specify all the values or you can default the Revision and Build Numbers
35// by using the '*' as shown below: 35// by using the '*' as shown below:
36 36
37[assembly : AssemblyVersion("1.0.0.0")] 37[assembly : AssemblyVersion("1.0.0.0")]
38[assembly : AssemblyFileVersion("1.0.0.0")] \ No newline at end of file 38[assembly : AssemblyFileVersion("1.0.0.0")] \ No newline at end of file
diff --git a/OpenSim/Region/ScriptEngine/LSOEngine/ScriptEngine.cs b/OpenSim/Region/ScriptEngine/LSOEngine/ScriptEngine.cs
index 2311315..342a8ca 100644
--- a/OpenSim/Region/ScriptEngine/LSOEngine/ScriptEngine.cs
+++ b/OpenSim/Region/ScriptEngine/LSOEngine/ScriptEngine.cs
@@ -1,55 +1,55 @@
1/* 1/*
2* Copyright (c) Contributors, http://opensimulator.org/ 2* Copyright (c) Contributors, http://opensimulator.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders. 3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4* 4*
5* Redistribution and use in source and binary forms, with or without 5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met: 6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright 7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer. 8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright 9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the 10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution. 11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the 12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products 13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission. 14* derived from this software without specific prior written permission.
15* 15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY 16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY 19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26* 26*
27*/ 27*/
28 28
29using System; 29using System;
30using Nini.Config; 30using Nini.Config;
31using OpenSim.Framework.Console; 31using OpenSim.Framework.Console;
32using OpenSim.Region.Environment.Interfaces; 32using OpenSim.Region.Environment.Interfaces;
33using OpenSim.Region.Environment.Scenes; 33using OpenSim.Region.Environment.Scenes;
34using OpenSim.Region.ScriptEngine.Common; 34using OpenSim.Region.ScriptEngine.Common;
35using OpenSim.Region.ScriptEngine.Common.ScriptEngineBase; 35using OpenSim.Region.ScriptEngine.Common.ScriptEngineBase;
36using EventManager = OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.EventManager; 36using EventManager = OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.EventManager;
37using ScriptManager=OpenSim.Region.ScriptEngine.LSOEngine.ScriptManager; 37using ScriptManager=OpenSim.Region.ScriptEngine.LSOEngine.ScriptManager;
38 38
39namespace OpenSim.Region.ScriptEngine.LSOEngine 39namespace OpenSim.Region.ScriptEngine.LSOEngine
40{ 40{
41 [Serializable] 41 [Serializable]
42 public class ScriptEngine : OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptEngine 42 public class ScriptEngine : OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptEngine
43 { 43 {
44 // We need to override a few things for our DotNetEngine 44 // We need to override a few things for our DotNetEngine
45 public override void Initialise(Scene scene, IConfigSource config) 45 public override void Initialise(Scene scene, IConfigSource config)
46 { 46 {
47 InitializeEngine(scene, MainLog.Instance, true, GetScriptManager()); 47 InitializeEngine(scene, MainLog.Instance, true, GetScriptManager());
48 } 48 }
49 49
50 public override OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptManager _GetScriptManager() 50 public override OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptManager _GetScriptManager()
51 { 51 {
52 return new ScriptManager(this); 52 return new ScriptManager(this);
53 } 53 }
54 } 54 }
55} \ No newline at end of file 55} \ No newline at end of file
diff --git a/OpenSim/Region/ScriptEngine/LSOEngine/ScriptManager.cs b/OpenSim/Region/ScriptEngine/LSOEngine/ScriptManager.cs
index 0143027..56c422f 100644
--- a/OpenSim/Region/ScriptEngine/LSOEngine/ScriptManager.cs
+++ b/OpenSim/Region/ScriptEngine/LSOEngine/ScriptManager.cs
@@ -1,158 +1,158 @@
1/* 1/*
2* Copyright (c) Contributors, http://opensimulator.org/ 2* Copyright (c) Contributors, http://opensimulator.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders. 3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4* 4*
5* Redistribution and use in source and binary forms, with or without 5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met: 6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright 7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer. 8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright 9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the 10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution. 11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the 12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products 13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission. 14* derived from this software without specific prior written permission.
15* 15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY 16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY 19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26* 26*
27*/ 27*/
28 28
29using System; 29using System;
30using System.Collections.Generic; 30using System.Collections.Generic;
31using System.IO; 31using System.IO;
32using System.Reflection; 32using System.Reflection;
33using System.Runtime.Serialization.Formatters.Binary; 33using System.Runtime.Serialization.Formatters.Binary;
34using System.Threading; 34using System.Threading;
35using libsecondlife; 35using libsecondlife;
36using OpenSim.Framework; 36using OpenSim.Framework;
37using OpenSim.Region.Environment.Scenes; 37using OpenSim.Region.Environment.Scenes;
38using OpenSim.Region.ScriptEngine.Common; 38using OpenSim.Region.ScriptEngine.Common;
39 39
40namespace OpenSim.Region.ScriptEngine.LSOEngine 40namespace OpenSim.Region.ScriptEngine.LSOEngine
41{ 41{
42 public class ScriptManager : OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptManager 42 public class ScriptManager : OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptManager
43 { 43 {
44 public ScriptManager(Common.ScriptEngineBase.ScriptEngine scriptEngine) 44 public ScriptManager(Common.ScriptEngineBase.ScriptEngine scriptEngine)
45 : base(scriptEngine) 45 : base(scriptEngine)
46 { 46 {
47 base.m_scriptEngine = scriptEngine; 47 base.m_scriptEngine = scriptEngine;
48 48
49 } 49 }
50 50
51 // KEEP TRACK OF SCRIPTS <int id, whatever script> 51 // KEEP TRACK OF SCRIPTS <int id, whatever script>
52 //internal Dictionary<uint, Dictionary<LLUUID, LSL_BaseClass>> Scripts = new Dictionary<uint, Dictionary<LLUUID, LSL_BaseClass>>(); 52 //internal Dictionary<uint, Dictionary<LLUUID, LSL_BaseClass>> Scripts = new Dictionary<uint, Dictionary<LLUUID, LSL_BaseClass>>();
53 // LOAD SCRIPT 53 // LOAD SCRIPT
54 // UNLOAD SCRIPT 54 // UNLOAD SCRIPT
55 // PROVIDE SCRIPT WITH ITS INTERFACE TO OpenSim 55 // PROVIDE SCRIPT WITH ITS INTERFACE TO OpenSim
56 56
57 public override void _StartScript(uint localID, LLUUID itemID, string Script) 57 public override void _StartScript(uint localID, LLUUID itemID, string Script)
58 { 58 {
59 //IScriptHost root = host.GetRoot(); 59 //IScriptHost root = host.GetRoot();
60 Console.WriteLine("ScriptManager StartScript: localID: " + localID + ", itemID: " + itemID); 60 Console.WriteLine("ScriptManager StartScript: localID: " + localID + ", itemID: " + itemID);
61 61
62 // We will initialize and start the script. 62 // We will initialize and start the script.
63 // It will be up to the script itself to hook up the correct events. 63 // It will be up to the script itself to hook up the correct events.
64 string ScriptSource = ""; 64 string ScriptSource = "";
65 65
66 SceneObjectPart m_host = World.GetSceneObjectPart(localID); 66 SceneObjectPart m_host = World.GetSceneObjectPart(localID);
67 67
68 try 68 try
69 { 69 {
70 // Compile (We assume LSL) 70 // Compile (We assume LSL)
71 //ScriptSource = LSLCompiler.CompileFromLSLText(Script); 71 //ScriptSource = LSLCompiler.CompileFromLSLText(Script);
72 72
73#if DEBUG 73#if DEBUG
74 long before; 74 long before;
75 before = GC.GetTotalMemory(true); 75 before = GC.GetTotalMemory(true);
76#endif 76#endif
77 77
78 IScript CompiledScript; 78 IScript CompiledScript;
79 CompiledScript = m_scriptEngine.m_AppDomainManager.LoadScript(ScriptSource); 79 CompiledScript = m_scriptEngine.m_AppDomainManager.LoadScript(ScriptSource);
80 80
81#if DEBUG 81#if DEBUG
82 Console.WriteLine("Script " + itemID + " occupies {0} bytes", GC.GetTotalMemory(true) - before); 82 Console.WriteLine("Script " + itemID + " occupies {0} bytes", GC.GetTotalMemory(true) - before);
83#endif 83#endif
84 84
85 CompiledScript.Source = ScriptSource; 85 CompiledScript.Source = ScriptSource;
86 // Add it to our script memstruct 86 // Add it to our script memstruct
87 SetScript(localID, itemID, CompiledScript); 87 SetScript(localID, itemID, CompiledScript);
88 88
89 // We need to give (untrusted) assembly a private instance of BuiltIns 89 // We need to give (untrusted) assembly a private instance of BuiltIns
90 // this private copy will contain Read-Only FullitemID so that it can bring that on to the server whenever needed. 90 // this private copy will contain Read-Only FullitemID so that it can bring that on to the server whenever needed.
91 91
92 92
93 LSL_BuiltIn_Commands LSLB = new LSL_BuiltIn_Commands(m_scriptEngine, m_host, localID, itemID); 93 LSL_BuiltIn_Commands LSLB = new LSL_BuiltIn_Commands(m_scriptEngine, m_host, localID, itemID);
94 94
95 // Start the script - giving it BuiltIns 95 // Start the script - giving it BuiltIns
96 CompiledScript.Start(LSLB); 96 CompiledScript.Start(LSLB);
97 97
98 // Fire the first start-event 98 // Fire the first start-event
99 m_scriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "state_entry", new object[] { }); 99 m_scriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "state_entry", new object[] { });
100 } 100 }
101 catch (Exception e) 101 catch (Exception e)
102 { 102 {
103 //m_scriptEngine.Log.Error("ScriptEngine", "Error compiling script: " + e.ToString()); 103 //m_scriptEngine.Log.Error("ScriptEngine", "Error compiling script: " + e.ToString());
104 try 104 try
105 { 105 {
106 // DISPLAY ERROR INWORLD 106 // DISPLAY ERROR INWORLD
107 string text = "Error compiling script:\r\n" + e.Message.ToString(); 107 string text = "Error compiling script:\r\n" + e.Message.ToString();
108 if (text.Length > 1500) 108 if (text.Length > 1500)
109 text = text.Substring(0, 1500); 109 text = text.Substring(0, 1500);
110 World.SimChat(Helpers.StringToField(text), ChatTypeEnum.Say, 0, m_host.AbsolutePosition, 110 World.SimChat(Helpers.StringToField(text), ChatTypeEnum.Say, 0, m_host.AbsolutePosition,
111 m_host.Name, m_host.UUID); 111 m_host.Name, m_host.UUID);
112 } 112 }
113 catch (Exception e2) 113 catch (Exception e2)
114 { 114 {
115 m_scriptEngine.Log.Error("ScriptEngine", "Error displaying error in-world: " + e2.ToString()); 115 m_scriptEngine.Log.Error("ScriptEngine", "Error displaying error in-world: " + e2.ToString());
116 m_scriptEngine.Log.Error("ScriptEngine", 116 m_scriptEngine.Log.Error("ScriptEngine",
117 "Errormessage: Error compiling script:\r\n" + e.Message.ToString()); 117 "Errormessage: Error compiling script:\r\n" + e.Message.ToString());
118 } 118 }
119 } 119 }
120 } 120 }
121 121
122 public override void _StopScript(uint localID, LLUUID itemID) 122 public override void _StopScript(uint localID, LLUUID itemID)
123 { 123 {
124 // Stop script 124 // Stop script
125 Console.WriteLine("Stop script localID: " + localID + " LLUID: " + itemID.ToString()); 125 Console.WriteLine("Stop script localID: " + localID + " LLUID: " + itemID.ToString());
126 126
127 127
128 // Stop long command on script 128 // Stop long command on script
129 m_scriptEngine.m_LSLLongCmdHandler.RemoveScript(localID, itemID); 129 m_scriptEngine.m_LSLLongCmdHandler.RemoveScript(localID, itemID);
130 130
131 IScript LSLBC = GetScript(localID, itemID); 131 IScript LSLBC = GetScript(localID, itemID);
132 if (LSLBC == null) 132 if (LSLBC == null)
133 return; 133 return;
134 134
135 // TEMP: First serialize it 135 // TEMP: First serialize it
136 //GetSerializedScript(localID, itemID); 136 //GetSerializedScript(localID, itemID);
137 137
138 138
139 try 139 try
140 { 140 {
141 // Get AppDomain 141 // Get AppDomain
142 AppDomain ad = LSLBC.Exec.GetAppDomain(); 142 AppDomain ad = LSLBC.Exec.GetAppDomain();
143 // Tell script not to accept new requests 143 // Tell script not to accept new requests
144 GetScript(localID, itemID).Exec.StopScript(); 144 GetScript(localID, itemID).Exec.StopScript();
145 // Remove from internal structure 145 // Remove from internal structure
146 RemoveScript(localID, itemID); 146 RemoveScript(localID, itemID);
147 // Tell AppDomain that we have stopped script 147 // Tell AppDomain that we have stopped script
148 m_scriptEngine.m_AppDomainManager.StopScript(ad); 148 m_scriptEngine.m_AppDomainManager.StopScript(ad);
149 } 149 }
150 catch (Exception e) 150 catch (Exception e)
151 { 151 {
152 Console.WriteLine("Exception stopping script localID: " + localID + " LLUID: " + itemID.ToString() + 152 Console.WriteLine("Exception stopping script localID: " + localID + " LLUID: " + itemID.ToString() +
153 ": " + e.ToString()); 153 ": " + e.ToString());
154 } 154 }
155 } 155 }
156 156
157 } 157 }
158} \ No newline at end of file 158} \ No newline at end of file