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