From 6dd923b01d6864ffcb17030c9de17224f45b4c2a Mon Sep 17 00:00:00 2001
From: Tedd Hansen
Date: Fri, 5 Oct 2007 19:56:44 +0000
Subject: Some more work on new ScriptEngine.
---
.../ScriptEngine/DotNetEngine/AppDomainManager.cs | 200 ++++
OpenSim/Grid/ScriptEngine/DotNetEngine/Common.cs | 59 +
.../DotNetEngine/Compiler/LSL/Compiler.cs | 120 ++
.../DotNetEngine/Compiler/LSL/LSL2CSConverter.cs | 266 +++++
.../DotNetEngine/Compiler/LSL/LSL_BaseClass.cs | 784 +++++++++++++
.../DotNetEngine/Compiler/LSO/Common.cs | 84 ++
.../DotNetEngine/Compiler/LSO/Engine.cs | 300 +++++
.../Compiler/LSO/IL_common_functions.cs | 56 +
.../DotNetEngine/Compiler/LSO/LSL_BaseClass.cs | 60 +
.../Compiler/LSO/LSL_BaseClass_Builtins.cs | 373 +++++++
.../Compiler/LSO/LSL_BaseClass_OPCODES.cs | 350 ++++++
.../DotNetEngine/Compiler/LSO/LSL_CLRInterface.cs | 79 ++
.../Compiler/LSO/LSL_OPCODE_IL_processor.cs | 436 ++++++++
.../DotNetEngine/Compiler/LSO/LSO_Enums.cs | 557 ++++++++++
.../DotNetEngine/Compiler/LSO/LSO_Parser.cs | 722 ++++++++++++
.../DotNetEngine/Compiler/LSO/LSO_Struct.cs | 135 +++
.../Compiler/Server_API/LSL_BuiltIn_Commands.cs | 1161 ++++++++++++++++++++
.../DotNetEngine/Compiler/c_sharp_example.txt | 12 +
.../Grid/ScriptEngine/DotNetEngine/EventManager.cs | 131 +++
.../ScriptEngine/DotNetEngine/EventQueueManager.cs | 321 ++++++
.../ScriptEngine/DotNetEngine/LSLLongCmdHandler.cs | 321 ++++++
.../DotNetEngine/Properties/AssemblyInfo.cs | 35 +
.../Grid/ScriptEngine/DotNetEngine/ScriptEngine.cs | 132 +++
.../ScriptEngine/DotNetEngine/ScriptManager.cs | 417 +++++++
.../TempDotNetMicroThreadingCodeInjector.cs | 45 +
25 files changed, 7156 insertions(+)
create mode 100644 OpenSim/Grid/ScriptEngine/DotNetEngine/AppDomainManager.cs
create mode 100644 OpenSim/Grid/ScriptEngine/DotNetEngine/Common.cs
create mode 100644 OpenSim/Grid/ScriptEngine/DotNetEngine/Compiler/LSL/Compiler.cs
create mode 100644 OpenSim/Grid/ScriptEngine/DotNetEngine/Compiler/LSL/LSL2CSConverter.cs
create mode 100644 OpenSim/Grid/ScriptEngine/DotNetEngine/Compiler/LSL/LSL_BaseClass.cs
create mode 100644 OpenSim/Grid/ScriptEngine/DotNetEngine/Compiler/LSO/Common.cs
create mode 100644 OpenSim/Grid/ScriptEngine/DotNetEngine/Compiler/LSO/Engine.cs
create mode 100644 OpenSim/Grid/ScriptEngine/DotNetEngine/Compiler/LSO/IL_common_functions.cs
create mode 100644 OpenSim/Grid/ScriptEngine/DotNetEngine/Compiler/LSO/LSL_BaseClass.cs
create mode 100644 OpenSim/Grid/ScriptEngine/DotNetEngine/Compiler/LSO/LSL_BaseClass_Builtins.cs
create mode 100644 OpenSim/Grid/ScriptEngine/DotNetEngine/Compiler/LSO/LSL_BaseClass_OPCODES.cs
create mode 100644 OpenSim/Grid/ScriptEngine/DotNetEngine/Compiler/LSO/LSL_CLRInterface.cs
create mode 100644 OpenSim/Grid/ScriptEngine/DotNetEngine/Compiler/LSO/LSL_OPCODE_IL_processor.cs
create mode 100644 OpenSim/Grid/ScriptEngine/DotNetEngine/Compiler/LSO/LSO_Enums.cs
create mode 100644 OpenSim/Grid/ScriptEngine/DotNetEngine/Compiler/LSO/LSO_Parser.cs
create mode 100644 OpenSim/Grid/ScriptEngine/DotNetEngine/Compiler/LSO/LSO_Struct.cs
create mode 100644 OpenSim/Grid/ScriptEngine/DotNetEngine/Compiler/Server_API/LSL_BuiltIn_Commands.cs
create mode 100644 OpenSim/Grid/ScriptEngine/DotNetEngine/Compiler/c_sharp_example.txt
create mode 100644 OpenSim/Grid/ScriptEngine/DotNetEngine/EventManager.cs
create mode 100644 OpenSim/Grid/ScriptEngine/DotNetEngine/EventQueueManager.cs
create mode 100644 OpenSim/Grid/ScriptEngine/DotNetEngine/LSLLongCmdHandler.cs
create mode 100644 OpenSim/Grid/ScriptEngine/DotNetEngine/Properties/AssemblyInfo.cs
create mode 100644 OpenSim/Grid/ScriptEngine/DotNetEngine/ScriptEngine.cs
create mode 100644 OpenSim/Grid/ScriptEngine/DotNetEngine/ScriptManager.cs
create mode 100644 OpenSim/Grid/ScriptEngine/DotNetEngine/TempDotNetMicroThreadingCodeInjector.cs
(limited to 'OpenSim/Grid/ScriptEngine/DotNetEngine')
diff --git a/OpenSim/Grid/ScriptEngine/DotNetEngine/AppDomainManager.cs b/OpenSim/Grid/ScriptEngine/DotNetEngine/AppDomainManager.cs
new file mode 100644
index 0000000..9829c1d
--- /dev/null
+++ b/OpenSim/Grid/ScriptEngine/DotNetEngine/AppDomainManager.cs
@@ -0,0 +1,200 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Reflection;
+using System.Threading;
+using System.Runtime.Remoting;
+using System.IO;
+using OpenSim.Region.Environment.Scenes;
+using OpenSim.Region.Environment.Scenes.Scripting;
+using OpenSim.Grid.ScriptEngine.DotNetEngine.Compiler.LSL;
+using OpenSim.Region.ScriptEngine.Common;
+using libsecondlife;
+
+namespace OpenSim.Grid.ScriptEngine.DotNetEngine
+{
+ public class AppDomainManager
+ {
+ private int maxScriptsPerAppDomain = 1;
+ ///
+ /// Internal list of all AppDomains
+ ///
+ private List appDomains = new List();
+ ///
+ /// Structure to keep track of data around AppDomain
+ ///
+ private class AppDomainStructure
+ {
+ ///
+ /// The AppDomain itself
+ ///
+ public AppDomain CurrentAppDomain;
+ ///
+ /// Number of scripts loaded into AppDomain
+ ///
+ public int ScriptsLoaded;
+ ///
+ /// Number of dead scripts
+ ///
+ public int ScriptsWaitingUnload;
+ }
+ ///
+ /// Current AppDomain
+ ///
+ private AppDomainStructure currentAD;
+ private object getLock = new object(); // Mutex
+ private object freeLock = new object(); // Mutex
+
+ //private ScriptEngine m_scriptEngine;
+ //public AppDomainManager(ScriptEngine scriptEngine)
+ public AppDomainManager()
+ {
+ //m_scriptEngine = scriptEngine;
+ }
+
+ ///
+ /// Find a free AppDomain, creating one if necessary
+ ///
+ /// Free AppDomain
+ private AppDomainStructure GetFreeAppDomain()
+ {
+ Console.WriteLine("Finding free AppDomain");
+ lock (getLock)
+ {
+ // Current full?
+ if (currentAD != null && currentAD.ScriptsLoaded >= maxScriptsPerAppDomain)
+ {
+ // Add it to AppDomains list and empty current
+ appDomains.Add(currentAD);
+ currentAD = null;
+ }
+ // No current
+ if (currentAD == null)
+ {
+ // Create a new current AppDomain
+ currentAD = new AppDomainStructure();
+ currentAD.CurrentAppDomain = PrepareNewAppDomain();
+ }
+
+ Console.WriteLine("Scripts loaded in this Appdomain: " + currentAD.ScriptsLoaded);
+ return currentAD;
+ } // lock
+ }
+
+ private int AppDomainNameCount;
+ ///
+ /// Create and prepare a new AppDomain for scripts
+ ///
+ /// The new AppDomain
+ private AppDomain PrepareNewAppDomain()
+ {
+ // Create and prepare a new AppDomain
+ AppDomainNameCount++;
+ // TODO: Currently security match current appdomain
+
+ // Construct and initialize settings for a second AppDomain.
+ AppDomainSetup ads = new AppDomainSetup();
+ ads.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory;
+ ads.DisallowBindingRedirects = false;
+ ads.DisallowCodeDownload = true;
+ ads.LoaderOptimization = LoaderOptimization.MultiDomain; // Sounds good ;)
+ ads.ShadowCopyFiles = "true"; // Enabled shadowing
+ ads.ConfigurationFile = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;
+
+ AppDomain AD = AppDomain.CreateDomain("ScriptAppDomain_" + AppDomainNameCount, null, ads);
+ Console.WriteLine("Loading: " + AssemblyName.GetAssemblyName("OpenSim.Region.ScriptEngine.Common.dll").ToString());
+ AD.Load(AssemblyName.GetAssemblyName("OpenSim.Region.ScriptEngine.Common.dll"));
+
+ // Return the new AppDomain
+ return AD;
+
+ }
+
+ ///
+ /// Unload appdomains that are full and have only dead scripts
+ ///
+ private void UnloadAppDomains()
+ {
+ lock (freeLock)
+ {
+ // Go through all
+ foreach (AppDomainStructure ads in new System.Collections.ArrayList(appDomains))
+ {
+ // Don't process current AppDomain
+ if (ads.CurrentAppDomain != currentAD.CurrentAppDomain)
+ {
+ // Not current AppDomain
+ // Is number of unloaded bigger or equal to number of loaded?
+ if (ads.ScriptsLoaded <= ads.ScriptsWaitingUnload)
+ {
+ Console.WriteLine("Found empty AppDomain, unloading");
+ // Remove from internal list
+ appDomains.Remove(ads);
+#if DEBUG
+ long m = GC.GetTotalMemory(true);
+#endif
+ // Unload
+ AppDomain.Unload(ads.CurrentAppDomain);
+#if DEBUG
+ Console.WriteLine("AppDomain unload freed " + (m - GC.GetTotalMemory(true)) + " bytes of memory");
+#endif
+ }
+ }
+ } // foreach
+ } // lock
+ }
+
+
+
+ public OpenSim.Grid.ScriptEngine.DotNetEngine.Compiler.LSL.LSL_BaseClass LoadScript(string FileName)
+ {
+ // Find next available AppDomain to put it in
+ AppDomainStructure FreeAppDomain = GetFreeAppDomain();
+
+ Console.WriteLine("Loading into AppDomain: " + FileName);
+ LSL_BaseClass mbrt = (LSL_BaseClass)FreeAppDomain.CurrentAppDomain.CreateInstanceFromAndUnwrap(FileName, "SecondLife.Script");
+ //Console.WriteLine("ScriptEngine AppDomainManager: is proxy={0}", RemotingServices.IsTransparentProxy(mbrt));
+ FreeAppDomain.ScriptsLoaded++;
+
+ return mbrt;
+ }
+
+
+ ///
+ /// Increase "dead script" counter for an AppDomain
+ ///
+ ///
+ //[Obsolete("Needs fixing, needs a real purpose in life!!!")]
+ public void StopScript(AppDomain ad)
+ {
+ lock (freeLock)
+ {
+ Console.WriteLine("Stopping script in AppDomain");
+ // Check if it is current AppDomain
+ if (currentAD.CurrentAppDomain == ad)
+ {
+ // Yes - increase
+ currentAD.ScriptsWaitingUnload++;
+ return;
+ }
+
+ // Lopp through all AppDomains
+ foreach (AppDomainStructure ads in new System.Collections.ArrayList(appDomains))
+ {
+ if (ads.CurrentAppDomain == ad)
+ {
+ // Found it
+ ads.ScriptsWaitingUnload++;
+ break;
+ }
+ } // foreach
+ } // lock
+
+ UnloadAppDomains(); // Outsite lock, has its own GetLock
+
+
+ }
+
+
+ }
+}
diff --git a/OpenSim/Grid/ScriptEngine/DotNetEngine/Common.cs b/OpenSim/Grid/ScriptEngine/DotNetEngine/Common.cs
new file mode 100644
index 0000000..af5c675
--- /dev/null
+++ b/OpenSim/Grid/ScriptEngine/DotNetEngine/Common.cs
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) Contributors, http://opensimulator.org/
+* See CONTRIBUTORS.TXT for a full list of copyright holders.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are met:
+* * Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+* * Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions and the following disclaimer in the
+* documentation and/or other materials provided with the distribution.
+* * Neither the name of the OpenSim Project nor the
+* names of its contributors may be used to endorse or promote products
+* derived from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
+* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+*/
+/* Original code: Tedd Hansen */
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace OpenSim.Grid.ScriptEngine.DotNetEngine
+{
+ public static class Common
+ {
+ static public bool debug = true;
+ static public ScriptEngine mySE;
+
+ //public delegate void SendToDebugEventDelegate(string Message);
+ //public delegate void SendToLogEventDelegate(string Message);
+ //static public event SendToDebugEventDelegate SendToDebugEvent;
+ //static public event SendToLogEventDelegate SendToLogEvent;
+
+ static public void SendToDebug(string Message)
+ {
+ //if (Debug == true)
+ mySE.Log.Verbose("ScriptEngine", "Debug: " + Message);
+ //SendToDebugEvent("\r\n" + DateTime.Now.ToString("[HH:mm:ss] ") + Message);
+ }
+ static public void SendToLog(string Message)
+ {
+ //if (Debug == true)
+ mySE.Log.Verbose("ScriptEngine", "LOG: " + Message);
+ //SendToLogEvent("\r\n" + DateTime.Now.ToString("[HH:mm:ss] ") + Message);
+ }
+ }
+
+}
diff --git a/OpenSim/Grid/ScriptEngine/DotNetEngine/Compiler/LSL/Compiler.cs b/OpenSim/Grid/ScriptEngine/DotNetEngine/Compiler/LSL/Compiler.cs
new file mode 100644
index 0000000..e2e1cad
--- /dev/null
+++ b/OpenSim/Grid/ScriptEngine/DotNetEngine/Compiler/LSL/Compiler.cs
@@ -0,0 +1,120 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.IO;
+using Microsoft.CSharp;
+using System.CodeDom.Compiler;
+using System.Reflection;
+
+namespace OpenSim.Grid.ScriptEngine.DotNetEngine.Compiler.LSL
+{
+
+ public class Compiler
+ {
+ private LSL2CSConverter LSL_Converter = new LSL2CSConverter();
+ private CSharpCodeProvider codeProvider = new CSharpCodeProvider();
+ private static UInt64 scriptCompileCounter = 0;
+ //private ICodeCompiler icc = codeProvider.CreateCompiler();
+ public string CompileFromFile(string LSOFileName)
+ {
+ switch (System.IO.Path.GetExtension(LSOFileName).ToLower())
+ {
+ case ".txt":
+ case ".lsl":
+ Common.SendToDebug("Source code is LSL, converting to CS");
+ return CompileFromLSLText(File.ReadAllText(LSOFileName));
+ case ".cs":
+ Common.SendToDebug("Source code is CS");
+ return CompileFromCSText(File.ReadAllText(LSOFileName));
+ default:
+ throw new Exception("Unknown script type.");
+ }
+ }
+ ///
+ /// Converts script from LSL to CS and calls CompileFromCSText
+ ///
+ /// LSL script
+ /// Filename to .dll assembly
+ public string CompileFromLSLText(string Script)
+ {
+ if (Script.Substring(0, 4).ToLower() == "//c#")
+ {
+ return CompileFromCSText( Script );
+ }
+ else
+ {
+ return CompileFromCSText(LSL_Converter.Convert(Script));
+ }
+ }
+ ///
+ /// Compile CS script to .Net assembly (.dll)
+ ///
+ /// CS script
+ /// Filename to .dll assembly
+ public string CompileFromCSText(string Script)
+ {
+
+
+ // Output assembly name
+ scriptCompileCounter++;
+ string OutFile = Path.Combine("ScriptEngines", "Script_" + scriptCompileCounter + ".dll");
+ try
+ {
+ System.IO.File.Delete(OutFile);
+ }
+ catch (Exception e)
+ {
+ Console.WriteLine("Exception attempting to delete old compiled script: " + e.ToString());
+ }
+ //string OutFile = Path.Combine("ScriptEngines", "SecondLife.Script.dll");
+
+ // DEBUG - write source to disk
+ try
+ {
+ File.WriteAllText(Path.Combine("ScriptEngines", "debug_" + Path.GetFileNameWithoutExtension(OutFile) + ".cs"), Script);
+ }
+ catch { }
+
+ // Do actual compile
+ System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
+ parameters.IncludeDebugInformation = true;
+ // Add all available assemblies
+ foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies())
+ {
+ //Console.WriteLine("Adding assembly: " + asm.Location);
+ //parameters.ReferencedAssemblies.Add(asm.Location);
+ }
+
+ string rootPath = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory);
+ string rootPathSE = Path.GetDirectoryName(this.GetType().Assembly.Location);
+ //Console.WriteLine("Assembly location: " + rootPath);
+ parameters.ReferencedAssemblies.Add(Path.Combine(rootPath, "OpenSim.Region.ScriptEngine.Common.dll"));
+ parameters.ReferencedAssemblies.Add(Path.Combine(rootPathSE, "OpenSim.Grid.ScriptEngine.DotNetEngine.dll"));
+
+ //parameters.ReferencedAssemblies.Add("OpenSim.Region.Environment");
+ parameters.GenerateExecutable = false;
+ parameters.OutputAssembly = OutFile;
+ parameters.IncludeDebugInformation = false;
+ CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, Script);
+
+ // Go through errors
+ // TODO: Return errors to user somehow
+ if (results.Errors.Count > 0)
+ {
+
+ string errtext = "";
+ foreach (CompilerError CompErr in results.Errors)
+ {
+ errtext += "Line number " + (CompErr.Line - 1) +
+ ", Error Number: " + CompErr.ErrorNumber +
+ ", '" + CompErr.ErrorText + "'\r\n";
+ }
+ throw new Exception(errtext);
+ }
+
+
+ return OutFile;
+ }
+
+ }
+}
diff --git a/OpenSim/Grid/ScriptEngine/DotNetEngine/Compiler/LSL/LSL2CSConverter.cs b/OpenSim/Grid/ScriptEngine/DotNetEngine/Compiler/LSL/LSL2CSConverter.cs
new file mode 100644
index 0000000..61a87d4
--- /dev/null
+++ b/OpenSim/Grid/ScriptEngine/DotNetEngine/Compiler/LSL/LSL2CSConverter.cs
@@ -0,0 +1,266 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Text.RegularExpressions;
+
+namespace OpenSim.Grid.ScriptEngine.DotNetEngine.Compiler.LSL
+{
+ public class LSL2CSConverter
+ {
+ //private Regex rnw = new Regex(@"[a-zA-Z0-9_\-]", RegexOptions.Compiled);
+ private Dictionary dataTypes = new Dictionary();
+ private Dictionary quotes = new Dictionary();
+
+ public LSL2CSConverter()
+ {
+ // Only the types we need to convert
+ dataTypes.Add("void", "void");
+ dataTypes.Add("integer", "int");
+ dataTypes.Add("float", "double");
+ dataTypes.Add("string", "string");
+ dataTypes.Add("key", "string");
+ dataTypes.Add("vector", "LSL_Types.Vector3");
+ dataTypes.Add("rotation", "LSL_Types.Quaternion");
+ dataTypes.Add("list", "list");
+ dataTypes.Add("null", "null");
+
+ }
+
+ public string Convert(string Script)
+ {
+ string Return = "";
+ Script = " \r\n" + Script;
+
+ //
+ // Prepare script for processing
+ //
+
+ // Clean up linebreaks
+ Script = Regex.Replace(Script, @"\r\n", "\n");
+ Script = Regex.Replace(Script, @"\n", "\r\n");
+
+
+ // QUOTE REPLACEMENT
+ // temporarily replace quotes so we can work our magic on the script without
+ // always considering if we are inside our outside ""'s
+ string _Script = "";
+ string C;
+ bool in_quote = false;
+ bool quote_replaced = false;
+ string quote_replacement_string = "Q_U_O_T_E_REPLACEMENT_";
+ string quote = "";
+ bool last_was_escape = false;
+ int quote_replaced_count = 0;
+ for (int p = 0; p < Script.Length; p++)
+ {
+
+ C = Script.Substring(p, 1);
+ while (true)
+ {
+ // found " and last was not \ so this is not an escaped \"
+ if (C == "\"" && last_was_escape == false)
+ {
+ // Toggle inside/outside quote
+ in_quote = !in_quote;
+ if (in_quote)
+ {
+ quote_replaced_count++;
+ }
+ else
+ {
+ if (quote == "")
+ {
+ // We didn't replace quote, probably because of empty string?
+ _Script += quote_replacement_string + quote_replaced_count.ToString().PadLeft(5, "0".ToCharArray()[0]);
+ }
+ // We just left a quote
+ quotes.Add(quote_replacement_string + quote_replaced_count.ToString().PadLeft(5, "0".ToCharArray()[0]), quote);
+ quote = "";
+ }
+ break;
+ }
+
+ if (!in_quote)
+ {
+ // We are not inside a quote
+ quote_replaced = false;
+
+ }
+ else
+ {
+ // We are inside a quote
+ if (!quote_replaced)
+ {
+ // Replace quote
+ _Script += quote_replacement_string + quote_replaced_count.ToString().PadLeft(5, "0".ToCharArray()[0]);
+ quote_replaced = true;
+ }
+ quote += C;
+ break;
+ }
+ _Script += C;
+ break;
+ }
+ last_was_escape = false;
+ if (C == @"\")
+ {
+ last_was_escape = true;
+ }
+ }
+ Script = _Script;
+ //
+ // END OF QUOTE REPLACEMENT
+ //
+
+
+
+ //
+ // PROCESS STATES
+ // Remove state definitions and add state names to start of each event within state
+ //
+ int ilevel = 0;
+ int lastlevel = 0;
+ string ret = "";
+ string cache = "";
+ bool in_state = false;
+ string current_statename = "";
+ for (int p = 0; p < Script.Length; p++)
+ {
+ C = Script.Substring(p, 1);
+ while (true)
+ {
+ // inc / dec level
+ if (C == @"{")
+ ilevel++;
+ if (C == @"}")
+ ilevel--;
+ if (ilevel < 0)
+ ilevel = 0;
+ cache += C;
+
+ // if level == 0, add to return
+ if (ilevel == 1 && lastlevel == 0)
+ {
+ // 0 => 1: Get last
+ Match m = Regex.Match(cache, @"(?![a-zA-Z_]+)\s*([a-zA-Z_]+)[^a-zA-Z_\(\)]*{", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.Singleline);
+
+ in_state = false;
+ if (m.Success)
+ {
+ // Go back to level 0, this is not a state
+ in_state = true;
+ current_statename = m.Groups[1].Captures[0].Value;
+ //Console.WriteLine("Current statename: " + current_statename);
+ cache = Regex.Replace(cache, @"(?(?![a-zA-Z_]+)\s*)" + @"([a-zA-Z_]+)(?[^a-zA-Z_\(\)]*){", "${s1}${s2}", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.Singleline);
+ }
+ ret += cache;
+ cache = "";
+ }
+ if (ilevel == 0 && lastlevel == 1)
+ {
+ // 1 => 0: Remove last }
+ if (in_state == true)
+ {
+ cache = cache.Remove(cache.Length - 1, 1);
+ //cache = Regex.Replace(cache, "}$", "", RegexOptions.Multiline | RegexOptions.Singleline);
+
+ //Replace function names
+ // void dataserver(key query_id, string data) {
+ //cache = Regex.Replace(cache, @"([^a-zA-Z_]\s*)((?!if|switch|for)[a-zA-Z_]+\s*\([^\)]*\)[^{]*{)", "$1" + "" + "$2", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.Singleline);
+ //Console.WriteLine("Replacing using statename: " + current_statename);
+ cache = Regex.Replace(cache, @"^(\s*)((?!(if|switch|for)[^a-zA-Z0-9_])[a-zA-Z0-9_]*\s*\([^\)]*\)[^;]*\{)", @"$1public " + current_statename + "_event_$2", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.Singleline);
+ }
+
+ ret += cache;
+ cache = "";
+ in_state = true;
+ current_statename = "";
+ }
+
+ break;
+ }
+ lastlevel = ilevel;
+ }
+ ret += cache;
+ cache = "";
+
+ Script = ret;
+ ret = "";
+
+
+
+ foreach (string key in dataTypes.Keys)
+ {
+ string val;
+ dataTypes.TryGetValue(key, out val);
+
+ // Replace CAST - (integer) with (int)
+ Script = Regex.Replace(Script, @"\(" + key + @"\)", @"(" + val + ")", RegexOptions.Compiled | RegexOptions.Multiline);
+ // Replace return types and function variables - integer a() and f(integer a, integer a)
+ Script = Regex.Replace(Script, @"(^|;|}|[\(,])(\s*)" + key + @"(\s*)", @"$1$2" + val + "$3", RegexOptions.Compiled | RegexOptions.Multiline);
+ }
+
+ // Add "void" in front of functions that needs it
+ Script = Regex.Replace(Script, @"^(\s*public\s+)((?!(if|switch|for)[^a-zA-Z0-9_])[a-zA-Z0-9_]*\s*\([^\)]*\)[^;]*\{)", @"$1void $2", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.Singleline);
+
+ // Replace and
+ Script = Regex.Replace(Script, @"<([^,>]*,[^,>]*,[^,>]*,[^,>]*)>", @"new LSL_Types.Quaternion($1)", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.Singleline);
+ Script = Regex.Replace(Script, @"<([^,>]*,[^,>]*,[^,>]*)>", @"new LSL_Types.Vector3($1)", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.Singleline);
+
+ // Replace List []'s
+ Script = Regex.Replace(Script, @"\[([^\]]*)\]", @"List.Parse($1)", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.Singleline);
+
+
+ // Replace (string) to .ToString() //
+ Script = Regex.Replace(Script, @"\(string\)\s*([a-zA-Z0-9_]+(\s*\([^\)]*\))?)", @"$1.ToString()", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.Singleline);
+ Script = Regex.Replace(Script, @"\((float|int)\)\s*([a-zA-Z0-9_]+(\s*\([^\)]*\))?)", @"$1.Parse($2)", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.Singleline);
+
+
+ // REPLACE BACK QUOTES
+ foreach (string key in quotes.Keys)
+ {
+ string val;
+ quotes.TryGetValue(key, out val);
+ Script = Script.Replace(key, "\"" + val + "\"");
+ }
+
+
+ // Add namespace, class name and inheritance
+
+ Return = "" +
+ "using OpenSim.Region.ScriptEngine.Common;";
+ //"using System; " +
+ //"using System.Collections.Generic; " +
+ //"using System.Text; " +
+ //"using OpenSim.Region.ScriptEngine.Common; " +
+ //"using integer = System.Int32; " +
+ //"using key = System.String; ";
+
+ //// Make a Using out of DataTypes
+ //// Using integer = System.Int32;
+ //string _val;
+ //foreach (string key in DataTypes.Keys)
+ //{
+ // DataTypes.TryGetValue(key, out _val);
+ // if (key != _val)
+ // {
+ // Return += "using " + key + " = " + _val + "; ";
+ // }
+ //}
+
+
+ Return += "" +
+ "namespace SecondLife { ";
+ Return += "" +
+ //"[Serializable] " +
+ "public class Script : OpenSim.Grid.ScriptEngine.DotNetEngine.Compiler.LSL.LSL_BaseClass { ";
+ Return += @"public Script() { } ";
+ Return += Script;
+ Return += "} }\r\n";
+
+ return Return;
+ }
+
+
+ }
+}
diff --git a/OpenSim/Grid/ScriptEngine/DotNetEngine/Compiler/LSL/LSL_BaseClass.cs b/OpenSim/Grid/ScriptEngine/DotNetEngine/Compiler/LSL/LSL_BaseClass.cs
new file mode 100644
index 0000000..a3011f5
--- /dev/null
+++ b/OpenSim/Grid/ScriptEngine/DotNetEngine/Compiler/LSL/LSL_BaseClass.cs
@@ -0,0 +1,784 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using OpenSim.Grid.ScriptEngine.DotNetEngine.Compiler;
+using OpenSim.Region.ScriptEngine.Common;
+using System.Threading;
+using System.Reflection;
+using System.Runtime.Remoting.Lifetime;
+using integer = System.Int32;
+using key = System.String;
+using vector = OpenSim.Region.ScriptEngine.Common.LSL_Types.Vector3;
+using rotation = OpenSim.Region.ScriptEngine.Common.LSL_Types.Quaternion;
+
+namespace OpenSim.Grid.ScriptEngine.DotNetEngine.Compiler.LSL
+{
+ //[Serializable]
+ public class LSL_BaseClass : MarshalByRefObject, LSL_BuiltIn_Commands_Interface, IScript
+ {
+
+ // Object never expires
+ public override Object InitializeLifetimeService()
+ {
+ //Console.WriteLine("LSL_BaseClass: InitializeLifetimeService()");
+ // return null;
+ ILease lease = (ILease)base.InitializeLifetimeService();
+
+ if (lease.CurrentState == LeaseState.Initial)
+ {
+ lease.InitialLeaseTime = TimeSpan.Zero; // TimeSpan.FromMinutes(1);
+ //lease.SponsorshipTimeout = TimeSpan.FromMinutes(2);
+ //lease.RenewOnCallTime = TimeSpan.FromSeconds(2);
+ }
+ return lease;
+ }
+
+
+ private Executor m_Exec;
+ public Executor Exec
+ {
+ get
+ {
+ if (m_Exec == null)
+ m_Exec = new Executor(this);
+ return m_Exec;
+ }
+ }
+
+ public LSL_BuiltIn_Commands_Interface m_LSL_Functions;
+ public string SourceCode = "";
+
+ public LSL_BaseClass()
+ {
+ }
+ public string State()
+ {
+ return m_LSL_Functions.State();
+ }
+
+
+ public void Start(LSL_BuiltIn_Commands_Interface LSL_Functions)
+ {
+ m_LSL_Functions = LSL_Functions;
+
+ //MainLog.Instance.Notice("ScriptEngine", "LSL_BaseClass.Start() called.");
+
+ // Get this AppDomain's settings and display some of them.
+ AppDomainSetup ads = AppDomain.CurrentDomain.SetupInformation;
+ Console.WriteLine("AppName={0}, AppBase={1}, ConfigFile={2}",
+ ads.ApplicationName,
+ ads.ApplicationBase,
+ ads.ConfigurationFile
+ );
+
+ // Display the name of the calling AppDomain and the name
+ // of the second domain.
+ // NOTE: The application's thread has transitioned between
+ // AppDomains.
+ Console.WriteLine("Calling to '{0}'.",
+ Thread.GetDomain().FriendlyName
+ );
+
+ return;
+ }
+
+
+
+ //
+ // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs
+ //
+ // They are only forwarders to LSL_BuiltIn_Commands.cs
+ //
+ public double llSin(double f) { return m_LSL_Functions.llSin(f); }
+ public double llCos(double f) { return m_LSL_Functions.llCos(f); }
+ public double llTan(double f) { return m_LSL_Functions.llTan(f); }
+ public double llAtan2(double x, double y) { return m_LSL_Functions.llAtan2(x, y); }
+ public double llSqrt(double f) { return m_LSL_Functions.llSqrt(f); }
+ public double llPow(double fbase, double fexponent) { return m_LSL_Functions.llPow(fbase, fexponent); }
+ public int llAbs(int i) { return m_LSL_Functions.llAbs(i); }
+ public double llFabs(double f) { return m_LSL_Functions.llFabs(f); }
+ public double llFrand(double mag) { return m_LSL_Functions.llFrand(mag); }
+ public int llFloor(double f) { return m_LSL_Functions.llFloor(f); }
+ public int llCeil(double f) { return m_LSL_Functions.llCeil(f); }
+ public int llRound(double f) { return m_LSL_Functions.llRound(f); }
+ public double llVecMag(LSL_Types.Vector3 v) { return m_LSL_Functions.llVecMag(v); }
+ public LSL_Types.Vector3 llVecNorm(LSL_Types.Vector3 v) { return m_LSL_Functions.llVecNorm(v); }
+ public double llVecDist(LSL_Types.Vector3 a, LSL_Types.Vector3 b) { return m_LSL_Functions.llVecDist(a, b); }
+ public LSL_Types.Vector3 llRot2Euler(LSL_Types.Quaternion r) { return m_LSL_Functions.llRot2Euler(r); }
+ public LSL_Types.Quaternion llEuler2Rot(LSL_Types.Vector3 v) { return m_LSL_Functions.llEuler2Rot(v); }
+ public LSL_Types.Quaternion llAxes2Rot(LSL_Types.Vector3 fwd, LSL_Types.Vector3 left, LSL_Types.Vector3 up) { return m_LSL_Functions.llAxes2Rot(fwd, left, up); }
+ public LSL_Types.Vector3 llRot2Fwd(LSL_Types.Quaternion r) { return m_LSL_Functions.llRot2Fwd(r); }
+ public LSL_Types.Vector3 llRot2Left(LSL_Types.Quaternion r) { return m_LSL_Functions.llRot2Left(r); }
+ public LSL_Types.Vector3 llRot2Up(LSL_Types.Quaternion r) { return m_LSL_Functions.llRot2Up(r); }
+ public LSL_Types.Quaternion llRotBetween(LSL_Types.Vector3 start, LSL_Types.Vector3 end) { return m_LSL_Functions.llRotBetween(start, end); }
+ public void llWhisper(int channelID, string text) { m_LSL_Functions.llWhisper(channelID, text); }
+ public void llSay(int channelID, string text) { m_LSL_Functions.llSay(channelID, text); }
+ //
+ // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs
+ //
+ public void llShout(int channelID, string text) { m_LSL_Functions.llShout(channelID, text); }
+ public int llListen(int channelID, string name, string ID, string msg) { return m_LSL_Functions.llListen(channelID, name, ID, msg); }
+ public void llListenControl(int number, int active) { m_LSL_Functions.llListenControl(number, active); }
+ public void llListenRemove(int number) { m_LSL_Functions.llListenRemove(number); }
+ public void llSensor(string name, string id, int type, double range, double arc) { m_LSL_Functions.llSensor(name, id, type, range, arc); }
+ public void llSensorRepeat(string name, string id, int type, double range, double arc, double rate) { m_LSL_Functions.llSensorRepeat(name, id, type, range, arc, rate); }
+ public void llSensorRemove() { m_LSL_Functions.llSensorRemove(); }
+ public string llDetectedName(int number) { return m_LSL_Functions.llDetectedName(number); }
+ public string llDetectedKey(int number) { return m_LSL_Functions.llDetectedKey(number); }
+ public string llDetectedOwner(int number) { return m_LSL_Functions.llDetectedOwner(number); }
+ public int llDetectedType(int number) { return m_LSL_Functions.llDetectedType(number); }
+ public LSL_Types.Vector3 llDetectedPos(int number) { return m_LSL_Functions.llDetectedPos(number); }
+ public LSL_Types.Vector3 llDetectedVel(int number) { return m_LSL_Functions.llDetectedVel(number); }
+ public LSL_Types.Vector3 llDetectedGrab(int number) { return m_LSL_Functions.llDetectedGrab(number); }
+ public LSL_Types.Quaternion llDetectedRot(int number) { return m_LSL_Functions.llDetectedRot(number); }
+ public int llDetectedGroup(int number) { return m_LSL_Functions.llDetectedGroup(number); }
+ public int llDetectedLinkNumber(int number) { return m_LSL_Functions.llDetectedLinkNumber(number); }
+ //
+ // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs
+ //
+ public void llDie() { m_LSL_Functions.llDie(); }
+ public double llGround(LSL_Types.Vector3 offset) { return m_LSL_Functions.llGround(offset); }
+ public double llCloud(LSL_Types.Vector3 offset) { return m_LSL_Functions.llCloud(offset); }
+ public LSL_Types.Vector3 llWind(LSL_Types.Vector3 offset) { return m_LSL_Functions.llWind(offset); }
+ public void llSetStatus(int status, int value) { m_LSL_Functions.llSetStatus(status, value); }
+ public int llGetStatus(int status) { return m_LSL_Functions.llGetStatus(status); }
+ public void llSetScale(LSL_Types.Vector3 scale) { m_LSL_Functions.llSetScale(scale); }
+ public LSL_Types.Vector3 llGetScale() { return m_LSL_Functions.llGetScale(); }
+ public void llSetColor(LSL_Types.Vector3 color, int face) { m_LSL_Functions.llSetColor(color, face); }
+ public double llGetAlpha(int face) { return m_LSL_Functions.llGetAlpha(face); }
+ public void llSetAlpha(double alpha, int face) { m_LSL_Functions.llSetAlpha(alpha, face); }
+ public LSL_Types.Vector3 llGetColor(int face) { return m_LSL_Functions.llGetColor(face); }
+ public void llSetTexture(string texture, int face) { m_LSL_Functions.llSetTexture(texture, face); }
+ public void llScaleTexture(double u, double v, int face) { m_LSL_Functions.llScaleTexture(u, v, face); }
+ public void llOffsetTexture(double u, double v, int face) { m_LSL_Functions.llOffsetTexture(u, v, face); }
+ public void llRotateTexture(double rotation, int face) { m_LSL_Functions.llRotateTexture(rotation, face); }
+ public string llGetTexture(int face) { return m_LSL_Functions.llGetTexture(face); }
+ //
+ // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs
+ //
+ public void llSetPos(LSL_Types.Vector3 pos) { m_LSL_Functions.llSetPos(pos); }
+ public LSL_Types.Vector3 llGetPos() { return m_LSL_Functions.llGetPos(); }
+ public LSL_Types.Vector3 llGetLocalPos() { return m_LSL_Functions.llGetLocalPos(); }
+ public void llSetRot(LSL_Types.Quaternion rot) { m_LSL_Functions.llSetRot(rot); }
+ public LSL_Types.Quaternion llGetRot() { return m_LSL_Functions.llGetRot(); }
+ public LSL_Types.Quaternion llGetLocalRot() { return m_LSL_Functions.llGetLocalRot(); }
+ public void llSetForce(LSL_Types.Vector3 force, int local) { m_LSL_Functions.llSetForce(force, local); }
+ public LSL_Types.Vector3 llGetForce() { return m_LSL_Functions.llGetForce(); }
+ public int llTarget(LSL_Types.Vector3 position, double range) { return m_LSL_Functions.llTarget(position, range); }
+ public void llTargetRemove(int number) { m_LSL_Functions.llTargetRemove(number); }
+ public int llRotTarget(LSL_Types.Quaternion rot, double error) { return m_LSL_Functions.llRotTarget(rot, error); }
+ public void llRotTargetRemove(int number) { m_LSL_Functions.llRotTargetRemove(number); }
+ public void llMoveToTarget(LSL_Types.Vector3 target, double tau) { m_LSL_Functions.llMoveToTarget(target, tau); }
+ public void llStopMoveToTarget() { m_LSL_Functions.llStopMoveToTarget(); }
+ public void llApplyImpulse(LSL_Types.Vector3 force, int local) { m_LSL_Functions.llApplyImpulse(force, local); }
+ //
+ // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs
+ //
+ public void llApplyRotationalImpulse(LSL_Types.Vector3 force, int local) { m_LSL_Functions.llApplyRotationalImpulse(force, local); }
+ public void llSetTorque(LSL_Types.Vector3 torque, int local) { m_LSL_Functions.llSetTorque(torque, local); }
+ public LSL_Types.Vector3 llGetTorque() { return m_LSL_Functions.llGetTorque(); }
+ public void llSetForceAndTorque(LSL_Types.Vector3 force, LSL_Types.Vector3 torque, int local) { m_LSL_Functions.llSetForceAndTorque(force, torque, local); }
+ public LSL_Types.Vector3 llGetVel() { return m_LSL_Functions.llGetVel(); }
+ public LSL_Types.Vector3 llGetAccel() { return m_LSL_Functions.llGetAccel(); }
+ public LSL_Types.Vector3 llGetOmega() { return m_LSL_Functions.llGetOmega(); }
+ public double llGetTimeOfDay() { return m_LSL_Functions.llGetTimeOfDay(); }
+ public double llGetWallclock() { return m_LSL_Functions.llGetWallclock(); }
+ public double llGetTime() { return m_LSL_Functions.llGetTime(); }
+ public void llResetTime() { m_LSL_Functions.llResetTime(); }
+ public double llGetAndResetTime() { return m_LSL_Functions.llGetAndResetTime(); }
+ public void llSound() { m_LSL_Functions.llSound(); }
+ public void llPlaySound(string sound, double volume) { m_LSL_Functions.llPlaySound(sound, volume); }
+ public void llLoopSound(string sound, double volume) { m_LSL_Functions.llLoopSound(sound, volume); }
+ public void llLoopSoundMaster(string sound, double volume) { m_LSL_Functions.llLoopSoundMaster(sound, volume); }
+ public void llLoopSoundSlave(string sound, double volume) { m_LSL_Functions.llLoopSoundSlave(sound, volume); }
+ public void llPlaySoundSlave(string sound, double volume) { m_LSL_Functions.llPlaySoundSlave(sound, volume); }
+ //
+ // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs
+ //
+ public void llTriggerSound(string sound, double volume) { m_LSL_Functions.llTriggerSound(sound, volume); }
+ public void llStopSound() { m_LSL_Functions.llStopSound(); }
+ public void llPreloadSound(string sound) { m_LSL_Functions.llPreloadSound(sound); }
+ public string llGetSubString(string src, int start, int end) { return m_LSL_Functions.llGetSubString(src, start, end); }
+ public string llDeleteSubString(string src, int start, int end) { return m_LSL_Functions.llDeleteSubString(src, start, end); }
+ public string llInsertString(string dst, int position, string src) { return m_LSL_Functions.llInsertString(dst, position, src); }
+ public string llToUpper(string source) { return m_LSL_Functions.llToUpper(source); }
+ public string llToLower(string source) { return m_LSL_Functions.llToLower(source); }
+ public int llGiveMoney(string destination, int amount) { return m_LSL_Functions.llGiveMoney(destination, amount); }
+ public void llMakeExplosion() { m_LSL_Functions.llMakeExplosion(); }
+ public void llMakeFountain() { m_LSL_Functions.llMakeFountain(); }
+ public void llMakeSmoke() { m_LSL_Functions.llMakeSmoke(); }
+ public void llMakeFire() { m_LSL_Functions.llMakeFire(); }
+ public void llRezObject(string inventory, LSL_Types.Vector3 pos, LSL_Types.Quaternion rot, int param) { m_LSL_Functions.llRezObject(inventory, pos, rot, param); }
+ public void llLookAt(LSL_Types.Vector3 target, double strength, double damping) { m_LSL_Functions.llLookAt(target, strength, damping); }
+ public void llStopLookAt() { m_LSL_Functions.llStopLookAt(); }
+ public void llSetTimerEvent(double sec) { m_LSL_Functions.llSetTimerEvent(sec); }
+ public void llSleep(double sec) { m_LSL_Functions.llSleep(sec); }
+ //
+ // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs
+ //
+ public double llGetMass() { return m_LSL_Functions.llGetMass(); }
+ public void llCollisionFilter(string name, string id, int accept) { m_LSL_Functions.llCollisionFilter(name, id, accept); }
+ public void llTakeControls(int controls, int accept, int pass_on) { m_LSL_Functions.llTakeControls(controls, accept, pass_on); }
+ public void llReleaseControls() { m_LSL_Functions.llReleaseControls(); }
+ public void llAttachToAvatar(int attachment) { m_LSL_Functions.llAttachToAvatar(attachment); }
+ public void llDetachFromAvatar() { m_LSL_Functions.llDetachFromAvatar(); }
+ public void llTakeCamera() { m_LSL_Functions.llTakeCamera(); }
+ public void llReleaseCamera() { m_LSL_Functions.llReleaseCamera(); }
+ public string llGetOwner() { return m_LSL_Functions.llGetOwner(); }
+ public void llInstantMessage(string user, string message) { m_LSL_Functions.llInstantMessage(user, message); }
+ public void llEmail(string address, string subject, string message) { m_LSL_Functions.llEmail(address, subject, message); }
+ public void llGetNextEmail(string address, string subject) { m_LSL_Functions.llGetNextEmail(address, subject); }
+ public string llGetKey() { return m_LSL_Functions.llGetKey(); }
+ public void llSetBuoyancy(double buoyancy) { m_LSL_Functions.llSetBuoyancy(buoyancy); }
+ public void llSetHoverHeight(double height, int water, double tau) { m_LSL_Functions.llSetHoverHeight(height, water, tau); }
+ public void llStopHover() { m_LSL_Functions.llStopHover(); }
+ public void llMinEventDelay(double delay) { m_LSL_Functions.llMinEventDelay(delay); }
+ public void llSoundPreload() { m_LSL_Functions.llSoundPreload(); }
+ public void llRotLookAt(LSL_Types.Quaternion target, double strength, double damping) { m_LSL_Functions.llRotLookAt(target, strength, damping); }
+ //
+ // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs
+ //
+ public int llStringLength(string str) { return m_LSL_Functions.llStringLength(str); }
+ public void llStartAnimation(string anim) { m_LSL_Functions.llStartAnimation(anim); }
+ public void llStopAnimation(string anim) { m_LSL_Functions.llStopAnimation(anim); }
+ public void llPointAt() { m_LSL_Functions.llPointAt(); }
+ public void llStopPointAt() { m_LSL_Functions.llStopPointAt(); }
+ public void llTargetOmega(LSL_Types.Vector3 axis, double spinrate, double gain) { m_LSL_Functions.llTargetOmega(axis, spinrate, gain); }
+ public int llGetStartParameter() { return m_LSL_Functions.llGetStartParameter(); }
+ public void llGodLikeRezObject(string inventory, LSL_Types.Vector3 pos) { m_LSL_Functions.llGodLikeRezObject(inventory, pos); }
+ public void llRequestPermissions(string agent, int perm) { m_LSL_Functions.llRequestPermissions(agent, perm); }
+ public string llGetPermissionsKey() { return m_LSL_Functions.llGetPermissionsKey(); }
+ public int llGetPermissions() { return m_LSL_Functions.llGetPermissions(); }
+ public int llGetLinkNumber() { return m_LSL_Functions.llGetLinkNumber(); }
+ public void llSetLinkColor(int linknumber, LSL_Types.Vector3 color, int face) { m_LSL_Functions.llSetLinkColor(linknumber, color, face); }
+ public void llCreateLink(string target, int parent) { m_LSL_Functions.llCreateLink(target, parent); }
+ public void llBreakLink(int linknum) { m_LSL_Functions.llBreakLink(linknum); }
+ public void llBreakAllLinks() { m_LSL_Functions.llBreakAllLinks(); }
+ public string llGetLinkKey(int linknum) { return m_LSL_Functions.llGetLinkKey(linknum); }
+ public void llGetLinkName(int linknum) { m_LSL_Functions.llGetLinkName(linknum); }
+ public int llGetInventoryNumber(int type) { return m_LSL_Functions.llGetInventoryNumber(type); }
+ public string llGetInventoryName(int type, int number) { return m_LSL_Functions.llGetInventoryName(type, number); }
+ //
+ // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs
+ //
+ public void llSetScriptState(string name, int run) { m_LSL_Functions.llSetScriptState(name, run); }
+ public double llGetEnergy() { return m_LSL_Functions.llGetEnergy(); }
+ public void llGiveInventory(string destination, string inventory) { m_LSL_Functions.llGiveInventory(destination, inventory); }
+ public void llRemoveInventory(string item) { m_LSL_Functions.llRemoveInventory(item); }
+ public void llSetText(string text, LSL_Types.Vector3 color, double alpha) { m_LSL_Functions.llSetText(text, color, alpha); }
+ public double llWater(LSL_Types.Vector3 offset) { return m_LSL_Functions.llWater(offset); }
+ public void llPassTouches(int pass) { m_LSL_Functions.llPassTouches(pass); }
+ public string llRequestAgentData(string id, int data) { return m_LSL_Functions.llRequestAgentData(id, data); }
+ public string llRequestInventoryData(string name) { return m_LSL_Functions.llRequestInventoryData(name); }
+ public void llSetDamage(double damage) { m_LSL_Functions.llSetDamage(damage); }
+ public void llTeleportAgentHome(string agent) { m_LSL_Functions.llTeleportAgentHome(agent); }
+ public void llModifyLand(int action, int brush) { m_LSL_Functions.llModifyLand(action, brush); }
+ public void llCollisionSound(string impact_sound, double impact_volume) { m_LSL_Functions.llCollisionSound(impact_sound, impact_volume); }
+ public void llCollisionSprite(string impact_sprite) { m_LSL_Functions.llCollisionSprite(impact_sprite); }
+ public string llGetAnimation(string id) { return m_LSL_Functions.llGetAnimation(id); }
+ public void llResetScript() { m_LSL_Functions.llResetScript(); }
+ public void llMessageLinked(int linknum, int num, string str, string id) { m_LSL_Functions.llMessageLinked(linknum, num, str, id); }
+ public void llPushObject(string target, LSL_Types.Vector3 impulse, LSL_Types.Vector3 ang_impulse, int local) { m_LSL_Functions.llPushObject(target, impulse, ang_impulse, local); }
+ public void llPassCollisions(int pass) { m_LSL_Functions.llPassCollisions(pass); }
+ public string llGetScriptName() { return m_LSL_Functions.llGetScriptName(); }
+ public int llGetNumberOfSides() { return m_LSL_Functions.llGetNumberOfSides(); }
+ //
+ // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs
+ //
+ public LSL_Types.Quaternion llAxisAngle2Rot(LSL_Types.Vector3 axis, double angle) { return m_LSL_Functions.llAxisAngle2Rot(axis, angle); }
+ public LSL_Types.Vector3 llRot2Axis(LSL_Types.Quaternion rot) { return m_LSL_Functions.llRot2Axis(rot); }
+ public void llRot2Angle() { m_LSL_Functions.llRot2Angle(); }
+ public double llAcos(double val) { return m_LSL_Functions.llAcos(val); }
+ public double llAsin(double val) { return m_LSL_Functions.llAsin(val); }
+ public double llAngleBetween(LSL_Types.Quaternion a, LSL_Types.Quaternion b) { return m_LSL_Functions.llAngleBetween(a, b); }
+ public string llGetInventoryKey(string name) { return m_LSL_Functions.llGetInventoryKey(name); }
+ public void llAllowInventoryDrop(int add) { m_LSL_Functions.llAllowInventoryDrop(add); }
+ public LSL_Types.Vector3 llGetSunDirection() { return m_LSL_Functions.llGetSunDirection(); }
+ public LSL_Types.Vector3 llGetTextureOffset(int face) { return m_LSL_Functions.llGetTextureOffset(face); }
+ public LSL_Types.Vector3 llGetTextureScale(int side) { return m_LSL_Functions.llGetTextureScale(side); }
+ public double llGetTextureRot(int side) { return m_LSL_Functions.llGetTextureRot(side); }
+ public int llSubStringIndex(string source, string pattern) { return m_LSL_Functions.llSubStringIndex(source, pattern); }
+ public string llGetOwnerKey(string id) { return m_LSL_Functions.llGetOwnerKey(id); }
+ public LSL_Types.Vector3 llGetCenterOfMass() { return m_LSL_Functions.llGetCenterOfMass(); }
+ public List llListSort(List src, int stride, int ascending) { return m_LSL_Functions.llListSort(src, stride, ascending); }
+ public int llGetListLength(List src) { return m_LSL_Functions.llGetListLength(src); }
+ //
+ // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs
+ //
+ public int llList2Integer(List src, int index) { return m_LSL_Functions.llList2Integer(src, index); }
+ public double llList2double(List src, int index) { return m_LSL_Functions.llList2double(src, index); }
+ public string llList2String(List src, int index) { return m_LSL_Functions.llList2String(src, index); }
+ public string llList2Key(List src, int index) { return m_LSL_Functions.llList2Key(src, index); }
+ public LSL_Types.Vector3 llList2Vector(List src, int index) { return m_LSL_Functions.llList2Vector(src, index); }
+ public LSL_Types.Quaternion llList2Rot(List src, int index) { return m_LSL_Functions.llList2Rot(src, index); }
+ public List llList2List(List src, int start, int end) { return m_LSL_Functions.llList2List(src, start, end); }
+ public List llDeleteSubList(List src, int start, int end) { return m_LSL_Functions.llDeleteSubList(src, start, end); }
+ public int llGetListEntryType(List src, int index) { return m_LSL_Functions.llGetListEntryType(src, index); }
+ public string llList2CSV(List src) { return m_LSL_Functions.llList2CSV(src); }
+ public List llCSV2List(string src) { return m_LSL_Functions.llCSV2List(src); }
+ public List llListRandomize(List src, int stride) { return m_LSL_Functions.llListRandomize(src, stride); }
+ public List llList2ListStrided(List src, int start, int end, int stride) { return m_LSL_Functions.llList2ListStrided(src, start, end, stride); }
+ public LSL_Types.Vector3 llGetRegionCorner() { return m_LSL_Functions.llGetRegionCorner(); }
+ public List llListInsertList(List dest, List src, int start) { return m_LSL_Functions.llListInsertList(dest, src, start); }
+ public int llListFindList(List src, List test) { return m_LSL_Functions.llListFindList(src, test); }
+ public string llGetObjectName() { return m_LSL_Functions.llGetObjectName(); }
+ public void llSetObjectName(string name) { m_LSL_Functions.llSetObjectName(name); }
+ public string llGetDate() { return m_LSL_Functions.llGetDate(); }
+ public int llEdgeOfWorld(LSL_Types.Vector3 pos, LSL_Types.Vector3 dir) { return m_LSL_Functions.llEdgeOfWorld(pos, dir); }
+ public int llGetAgentInfo(string id) { return m_LSL_Functions.llGetAgentInfo(id); }
+ //
+ // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs
+ //
+ public void llAdjustSoundVolume(double volume) { m_LSL_Functions.llAdjustSoundVolume(volume); }
+ public void llSetSoundQueueing(int queue) { m_LSL_Functions.llSetSoundQueueing(queue); }
+ public void llSetSoundRadius(double radius) { m_LSL_Functions.llSetSoundRadius(radius); }
+ public string llKey2Name(string id) { return m_LSL_Functions.llKey2Name(id); }
+ public void llSetTextureAnim(int mode, int face, int sizex, int sizey, double start, double length, double rate) { m_LSL_Functions.llSetTextureAnim(mode, face, sizex, sizey, start, length, rate); }
+ public void llTriggerSoundLimited(string sound, double volume, LSL_Types.Vector3 top_north_east, LSL_Types.Vector3 bottom_south_west) { m_LSL_Functions.llTriggerSoundLimited(sound, volume, top_north_east, bottom_south_west); }
+ public void llEjectFromLand(string pest) { m_LSL_Functions.llEjectFromLand(pest); }
+ public void llParseString2List() { m_LSL_Functions.llParseString2List(); }
+ public int llOverMyLand(string id) { return m_LSL_Functions.llOverMyLand(id); }
+ public string llGetLandOwnerAt(LSL_Types.Vector3 pos) { return m_LSL_Functions.llGetLandOwnerAt(pos); }
+ public string llGetNotecardLine(string name, int line) { return m_LSL_Functions.llGetNotecardLine(name, line); }
+ public LSL_Types.Vector3 llGetAgentSize(string id) { return m_LSL_Functions.llGetAgentSize(id); }
+ public int llSameGroup(string agent) { return m_LSL_Functions.llSameGroup(agent); }
+ public void llUnSit(string id) { m_LSL_Functions.llUnSit(id); }
+ public LSL_Types.Vector3 llGroundSlope(LSL_Types.Vector3 offset) { return m_LSL_Functions.llGroundSlope(offset); }
+ public LSL_Types.Vector3 llGroundNormal(LSL_Types.Vector3 offset) { return m_LSL_Functions.llGroundNormal(offset); }
+ public LSL_Types.Vector3 llGroundContour(LSL_Types.Vector3 offset) { return m_LSL_Functions.llGroundContour(offset); }
+ public int llGetAttached() { return m_LSL_Functions.llGetAttached(); }
+ public int llGetFreeMemory() { return m_LSL_Functions.llGetFreeMemory(); }
+ public string llGetRegionName() { return m_LSL_Functions.llGetRegionName(); }
+ public double llGetRegionTimeDilation() { return m_LSL_Functions.llGetRegionTimeDilation(); }
+ public double llGetRegionFPS() { return m_LSL_Functions.llGetRegionFPS(); }
+ //
+ // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs
+ //
+ public void llParticleSystem(List