<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://opensimulator.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://opensimulator.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Godfrey</id>
		<title>OpenSimulator - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://opensimulator.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Godfrey"/>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Special:Contributions/Godfrey"/>
		<updated>2026-06-05T06:27:44Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.19.9</generator>

	<entry>
		<id>http://opensimulator.org/wiki/OsGetRegionStats</id>
		<title>OsGetRegionStats</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsGetRegionStats"/>
				<updated>2009-12-20T00:08:03Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Fixed typo.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[OsGetRegionStats|osGetRegionStats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LSL: '''[[list]] osGetRegionStats()'''&amp;lt;br /&amp;gt;&lt;br /&gt;
C#: '''[[LSL_List]] osGetRegionStats()'''&lt;br /&gt;
&lt;br /&gt;
Returns a list of float values representing a number of region statistics (many of the values shown in the &amp;quot;Stats Bar&amp;quot; of LL-based clients). Provides similar functionality to llGetRegionFPS() and llGetRegionTimeDilation(), but returns 21 statistics simultaneously.&lt;br /&gt;
&lt;br /&gt;
This function has a [[threat level]] of Moderate, to prevent griefing scripts from obtaining metrics to gauge their own effectiveness. Please see the [[threat level]] page for information on how to enable the use of this function securely.&lt;br /&gt;
&lt;br /&gt;
The elements in the list may be referred to by the following new LSL constants:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;white-space:nowrap;margin-left:3em;border:1px solid black&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|STATS_TIME_DILATION&lt;br /&gt;
|0&lt;br /&gt;
|STATS_IMAGE_MS&lt;br /&gt;
|11&lt;br /&gt;
|-&lt;br /&gt;
|STATS_SIM_FPS&lt;br /&gt;
|1&lt;br /&gt;
|STATS_OTHER_MS&lt;br /&gt;
|12&lt;br /&gt;
|-&lt;br /&gt;
|STATS_PHYSICS_FPS&lt;br /&gt;
|2&lt;br /&gt;
|STATS_IN_PACKETS_PER_SECOND&lt;br /&gt;
|13&lt;br /&gt;
|-&lt;br /&gt;
|STATS_AGENT_UPDATES&lt;br /&gt;
|3&lt;br /&gt;
|STATS_OUT_PACKETS_PER_SECOND&lt;br /&gt;
|14&lt;br /&gt;
|-&lt;br /&gt;
|STATS_ROOT_AGENTS&lt;br /&gt;
|4&lt;br /&gt;
|STATS_UNACKED_BYTES&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|STATS_CHILD_AGENTS&lt;br /&gt;
|5&lt;br /&gt;
|STATS_AGENT_MS&lt;br /&gt;
|16&lt;br /&gt;
|-&lt;br /&gt;
|STATS_TOTAL_PRIMS&lt;br /&gt;
|6&lt;br /&gt;
|STATS_PENDING_DOWNLOADS&lt;br /&gt;
|17&lt;br /&gt;
|-&lt;br /&gt;
|STATS_ACTIVE_PRIMS&lt;br /&gt;
|7&lt;br /&gt;
|STATS_PENDING_UPLOADS&lt;br /&gt;
|18&lt;br /&gt;
|-&lt;br /&gt;
|STATS_FRAME_MS&lt;br /&gt;
|8&lt;br /&gt;
|STATS_ACTIVE_SCRIPTS&lt;br /&gt;
|19&lt;br /&gt;
|-&lt;br /&gt;
|STATS_NET_MS&lt;br /&gt;
|9&lt;br /&gt;
|STATS_SCRIPT_LPS&lt;br /&gt;
|20&lt;br /&gt;
|-&lt;br /&gt;
|STATS_PHYSICS_MS&lt;br /&gt;
|10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Please note that as of November 2009, some of the elements in the array (to wit, the STATS_*_MS values) do not appear to contain useful information.&lt;br /&gt;
&lt;br /&gt;
Code provided by Implementor:&amp;amp;nbsp; Godfrey and Implemented in Git Hash 9d05962029fe864408d287d5fa7ef81f312e098a, - Rev 11601 &lt;br /&gt;
&lt;br /&gt;
Example script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// llGetRegionStats() example script&lt;br /&gt;
//&lt;br /&gt;
// Displays certain region statistics in hovertext above the prim containing the script.&lt;br /&gt;
//&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent( 5.0 );&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        list Stats = osGetRegionStats();&lt;br /&gt;
        string s = &amp;quot;Sim FPS: &amp;quot; + (string) llList2Float( Stats, STATS_SIM_FPS ) + &amp;quot;\n&amp;quot;;&lt;br /&gt;
        s += &amp;quot;Physics FPS: &amp;quot; + (string) llList2Float( Stats, STATS_PHYSICS_FPS ) + &amp;quot;\n&amp;quot;;&lt;br /&gt;
        s += &amp;quot;Time Dilation: &amp;quot; + (string) llList2Float( Stats, STATS_TIME_DILATION ) + &amp;quot;\n&amp;quot;;&lt;br /&gt;
        s += &amp;quot;Root Agents: &amp;quot; + (string) llList2Integer( Stats, STATS_ROOT_AGENTS ) + &amp;quot;\n&amp;quot;;&lt;br /&gt;
        s += &amp;quot;Child Agents: &amp;quot; + (string) llList2Integer( Stats, STATS_CHILD_AGENTS ) + &amp;quot;\n&amp;quot;;&lt;br /&gt;
        s += &amp;quot;Total Prims: &amp;quot; + (string) llList2Integer( Stats, STATS_TOTAL_PRIMS ) + &amp;quot;\n&amp;quot;;&lt;br /&gt;
        s += &amp;quot;Active Scripts: &amp;quot; + (string) llList2Integer( Stats, STATS_ACTIVE_SCRIPTS ) + &amp;quot;\n&amp;quot;;&lt;br /&gt;
        s += &amp;quot;Script LPS: &amp;quot; + (string) llList2Float( Stats, STATS_SCRIPT_LPS );&lt;br /&gt;
        llSetText( s, &amp;lt;0.0,1.0,0.0&amp;gt;, 1.0 );&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsGetLinkPrimitiveParams</id>
		<title>OsGetLinkPrimitiveParams</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsGetLinkPrimitiveParams"/>
				<updated>2009-12-20T00:06:56Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Removed the &amp;quot;Bugs&amp;quot; section after submitting a patch to correct the issues with llGetPrimitiveParams() and osGetLinkPrimitiveParams().&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[OsGetLinkPrimitiveParams|osGetLinkPrimitiveParams]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LSL: '''[[list]] osGetLinkPrimitiveParams( [[integer]] linknumber, [[list]] params )'''&amp;lt;br /&amp;gt;&lt;br /&gt;
C#: '''[[LSL_List]] osGetRegionStats( [[int]] linknumber, [[LSL_List]] params )'''&lt;br /&gt;
&lt;br /&gt;
Returns the primitive parameters for the linkset prim or prims specified by '''linknumber'''. It is possible to use the linkset constants (e.g. '''LINK_SET''', '''LINK_ALL_CHILDREN''') in place of a specific link number, in which case the requested parameters of each relevant prim are concatenated to the end of the list. Otherwise, the usage is identical to llGetPrimitiveParams().&lt;br /&gt;
&lt;br /&gt;
This function has a [[threat level]] of High, to prevent unscrupulous users from easily retrieving the construction details of an entire linkset. Please see the [[threat level]] page for information on how to enable the use of this function securely.&lt;br /&gt;
&lt;br /&gt;
Example script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// llGetLinkPrimitiveParams() example script&lt;br /&gt;
//&lt;br /&gt;
// Trivial example which averages the sizes of all the prims in the linkset and returns the resuilt.&lt;br /&gt;
//&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        vector average = ZERO_VECTOR;&lt;br /&gt;
        list params = osGetLinkPrimitiveParams( LINK_SET, [ PRIM_SIZE ] );&lt;br /&gt;
        integer len = llGetListLength( params );&lt;br /&gt;
        integer i;&lt;br /&gt;
        &lt;br /&gt;
        for (i = 0; i &amp;lt; len; i++)&lt;br /&gt;
            average += llList2Vector( params, i );&lt;br /&gt;
        &lt;br /&gt;
        average /= (float) len;&lt;br /&gt;
        llOwnerSay( &amp;quot;The average size of the prims in this linkset is &amp;quot; + (string) average );&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsGetLinkPrimitiveParams</id>
		<title>OsGetLinkPrimitiveParams</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsGetLinkPrimitiveParams"/>
				<updated>2009-12-19T20:19:45Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Original page creation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[OsGetLinkPrimitiveParams|osGetLinkPrimitiveParams]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LSL: '''[[list]] osGetLinkPrimitiveParams( [[integer]] linknumber, [[list]] params )'''&amp;lt;br /&amp;gt;&lt;br /&gt;
C#: '''[[LSL_List]] osGetRegionStats( [[int]] linknumber, [[LSL_List]] params )'''&lt;br /&gt;
&lt;br /&gt;
Returns the primitive parameters for the linkset prim or prims specified by '''linknumber'''. It is possible to use the linkset constants (e.g. '''LINK_SET''', '''LINK_ALL_CHILDREN''') in place of a specific link number, in which case the requested parameters of each relevant prim are concatenated to the end of the list. Otherwise, the usage is identical to llGetPrimitiveParams().&lt;br /&gt;
&lt;br /&gt;
This function has a [[threat level]] of High, to prevent unscrupulous users from easily retrieving the construction details of an entire linkset. Please see the [[threat level]] page for information on how to enable the use of this function securely.&lt;br /&gt;
&lt;br /&gt;
'''Bugs:''' As of this writing (December 2009), some of the values returned are incorrect: specifically, the top shear value returned for '''PRIM_TYPE''' is incorrect if the shear is negative; the revolutions value returned for '''PRIM_TYPE''' is also incorrect (llGetPrimitiveParams() is affected by both of these issues as well). Furthermore, if the root prim of the linkset is rotated in any fashion, the '''PRIM_ROTATION''' values returned for child prims are incorrect.&lt;br /&gt;
&lt;br /&gt;
Example script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// llGetLinkPrimitiveParams() example script&lt;br /&gt;
//&lt;br /&gt;
// Trivial example which averages the sizes of all the prims in the linkset and returns the resuilt.&lt;br /&gt;
//&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        vector average = ZERO_VECTOR;&lt;br /&gt;
        list params = osGetLinkPrimitiveParams( LINK_SET, [ PRIM_SIZE ] );&lt;br /&gt;
        integer len = llGetListLength( params );&lt;br /&gt;
        integer i;&lt;br /&gt;
        &lt;br /&gt;
        for (i = 0; i &amp;lt; len; i++)&lt;br /&gt;
            average += llList2Vector( params, i );&lt;br /&gt;
        &lt;br /&gt;
        average /= (float) len;&lt;br /&gt;
        llOwnerSay( &amp;quot;The average size of the prims in this linkset is &amp;quot; + (string) average );&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsGetRegionStats</id>
		<title>OsGetRegionStats</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsGetRegionStats"/>
				<updated>2009-11-27T16:14:36Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[OsGetRegionStatistics|osGetRegionStatistics]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LSL: '''[[list]] osGetRegionStats()'''&amp;lt;br /&amp;gt;&lt;br /&gt;
C#: '''[[LSL_List]] osGetRegionStats()'''&lt;br /&gt;
&lt;br /&gt;
Returns a list of float values representing a number of region statistics (many of the values shown in the &amp;quot;Stats Bar&amp;quot; of LL-based clients). Provides similar functionality to llGetRegionFPS() and llGetRegionTimeDilation(), but returns 21 statistics simultaneously.&lt;br /&gt;
&lt;br /&gt;
This function has a [[threat level]] of Moderate, to prevent griefing scripts from obtaining metrics to gauge their own effectiveness. Please see the [[threat level]] page for information on how to enable the use of this function securely.&lt;br /&gt;
&lt;br /&gt;
The elements in the list may be referred to by the following new LSL constants:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;white-space:nowrap;margin-left:3em;border:1px solid black&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|STATS_TIME_DILATION&lt;br /&gt;
|0&lt;br /&gt;
|STATS_IMAGE_MS&lt;br /&gt;
|11&lt;br /&gt;
|-&lt;br /&gt;
|STATS_SIM_FPS&lt;br /&gt;
|1&lt;br /&gt;
|STATS_OTHER_MS&lt;br /&gt;
|12&lt;br /&gt;
|-&lt;br /&gt;
|STATS_PHYSICS_FPS&lt;br /&gt;
|2&lt;br /&gt;
|STATS_IN_PACKETS_PER_SECOND&lt;br /&gt;
|13&lt;br /&gt;
|-&lt;br /&gt;
|STATS_AGENT_UPDATES&lt;br /&gt;
|3&lt;br /&gt;
|STATS_OUT_PACKETS_PER_SECOND&lt;br /&gt;
|14&lt;br /&gt;
|-&lt;br /&gt;
|STATS_ROOT_AGENTS&lt;br /&gt;
|4&lt;br /&gt;
|STATS_UNACKED_BYTES&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|STATS_CHILD_AGENTS&lt;br /&gt;
|5&lt;br /&gt;
|STATS_AGENT_MS&lt;br /&gt;
|16&lt;br /&gt;
|-&lt;br /&gt;
|STATS_TOTAL_PRIMS&lt;br /&gt;
|6&lt;br /&gt;
|STATS_PENDING_DOWNLOADS&lt;br /&gt;
|17&lt;br /&gt;
|-&lt;br /&gt;
|STATS_ACTIVE_PRIMS&lt;br /&gt;
|7&lt;br /&gt;
|STATS_PENDING_UPLOADS&lt;br /&gt;
|18&lt;br /&gt;
|-&lt;br /&gt;
|STATS_FRAME_MS&lt;br /&gt;
|8&lt;br /&gt;
|STATS_ACTIVE_SCRIPTS&lt;br /&gt;
|19&lt;br /&gt;
|-&lt;br /&gt;
|STATS_NET_MS&lt;br /&gt;
|9&lt;br /&gt;
|STATS_SCRIPT_LPS&lt;br /&gt;
|20&lt;br /&gt;
|-&lt;br /&gt;
|STATS_PHYSICS_MS&lt;br /&gt;
|10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Please note that as of November 2009, some of the elements in the array (to wit, the STATS_*_MS values) do not appear to contain useful information.&lt;br /&gt;
&lt;br /&gt;
Code provided by Implementor:&amp;amp;nbsp; Godfrey and Implemented in Git Hash 9d05962029fe864408d287d5fa7ef81f312e098a, - Rev 11601 &lt;br /&gt;
&lt;br /&gt;
Example script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// llGetRegionStats() example script&lt;br /&gt;
//&lt;br /&gt;
// Displays certain region statistics in hovertext above the prim containing the script.&lt;br /&gt;
//&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent( 5.0 );&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        list Stats = osGetRegionStats();&lt;br /&gt;
        string s = &amp;quot;Sim FPS: &amp;quot; + (string) llList2Float( Stats, STATS_SIM_FPS ) + &amp;quot;\n&amp;quot;;&lt;br /&gt;
        s += &amp;quot;Physics FPS: &amp;quot; + (string) llList2Float( Stats, STATS_PHYSICS_FPS ) + &amp;quot;\n&amp;quot;;&lt;br /&gt;
        s += &amp;quot;Time Dilation: &amp;quot; + (string) llList2Float( Stats, STATS_TIME_DILATION ) + &amp;quot;\n&amp;quot;;&lt;br /&gt;
        s += &amp;quot;Root Agents: &amp;quot; + (string) llList2Integer( Stats, STATS_ROOT_AGENTS ) + &amp;quot;\n&amp;quot;;&lt;br /&gt;
        s += &amp;quot;Child Agents: &amp;quot; + (string) llList2Integer( Stats, STATS_CHILD_AGENTS ) + &amp;quot;\n&amp;quot;;&lt;br /&gt;
        s += &amp;quot;Total Prims: &amp;quot; + (string) llList2Integer( Stats, STATS_TOTAL_PRIMS ) + &amp;quot;\n&amp;quot;;&lt;br /&gt;
        s += &amp;quot;Active Scripts: &amp;quot; + (string) llList2Integer( Stats, STATS_ACTIVE_SCRIPTS ) + &amp;quot;\n&amp;quot;;&lt;br /&gt;
        s += &amp;quot;Script LPS: &amp;quot; + (string) llList2Float( Stats, STATS_SCRIPT_LPS );&lt;br /&gt;
        llSetText( s, &amp;lt;0.0,1.0,0.0&amp;gt;, 1.0 );&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsGetRegionStats</id>
		<title>OsGetRegionStats</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsGetRegionStats"/>
				<updated>2009-11-27T15:50:28Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Documented the function more completely, including the constants used to address the returned list elements. Added templates.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[OsGetRegionStatistics|osGetRegionStatistics]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LSL: '''[[list]] osGetRegionStats()'''&amp;lt;br /&amp;gt;&lt;br /&gt;
C#: '''[[LSL_List]] osGetRegionStats()'''&lt;br /&gt;
&lt;br /&gt;
Returns a list of float values representing a number of region statistics (many of the values shown in the &amp;quot;Stats Bar&amp;quot; of LL-based clients).&lt;br /&gt;
&lt;br /&gt;
This function has a [[threat level]] of Moderate, to prevent griefing scripts from obtaining metrics to gauge their own effectiveness. Please see the [[threat level]] page for information on how to enable the use of this function securely.&lt;br /&gt;
&lt;br /&gt;
The elements in the list may be referred to by the following new LSL constants:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;white-space:nowrap;margin-left:3em;border:1px solid black&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|STATS_TIME_DILATION&lt;br /&gt;
|0&lt;br /&gt;
|STATS_IMAGE_MS&lt;br /&gt;
|11&lt;br /&gt;
|-&lt;br /&gt;
|STATS_SIM_FPS&lt;br /&gt;
|1&lt;br /&gt;
|STATS_OTHER_MS&lt;br /&gt;
|12&lt;br /&gt;
|-&lt;br /&gt;
|STATS_PHYSICS_FPS&lt;br /&gt;
|2&lt;br /&gt;
|STATS_IN_PACKETS_PER_SECOND&lt;br /&gt;
|13&lt;br /&gt;
|-&lt;br /&gt;
|STATS_AGENT_UPDATES&lt;br /&gt;
|3&lt;br /&gt;
|STATS_OUT_PACKETS_PER_SECOND&lt;br /&gt;
|14&lt;br /&gt;
|-&lt;br /&gt;
|STATS_ROOT_AGENTS&lt;br /&gt;
|4&lt;br /&gt;
|STATS_UNACKED_BYTES&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|STATS_CHILD_AGENTS&lt;br /&gt;
|5&lt;br /&gt;
|STATS_AGENT_MS&lt;br /&gt;
|16&lt;br /&gt;
|-&lt;br /&gt;
|STATS_TOTAL_PRIMS&lt;br /&gt;
|6&lt;br /&gt;
|STATS_PENDING_DOWNLOADS&lt;br /&gt;
|17&lt;br /&gt;
|-&lt;br /&gt;
|STATS_ACTIVE_PRIMS&lt;br /&gt;
|7&lt;br /&gt;
|STATS_PENDING_UPLOADS&lt;br /&gt;
|18&lt;br /&gt;
|-&lt;br /&gt;
|STATS_FRAME_MS&lt;br /&gt;
|8&lt;br /&gt;
|STATS_ACTIVE_SCRIPTS&lt;br /&gt;
|19&lt;br /&gt;
|-&lt;br /&gt;
|STATS_NET_MS&lt;br /&gt;
|9&lt;br /&gt;
|STATS_SCRIPT_LPS&lt;br /&gt;
|20&lt;br /&gt;
|-&lt;br /&gt;
|STATS_PHYSICS_MS&lt;br /&gt;
|10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Please note that as of November 2009, some of the elements in the array (to wit, the STATS_*_MS values) do not appear to contain useful information.&lt;br /&gt;
&lt;br /&gt;
Code provided by Implementor:&amp;amp;nbsp; Godfrey and Implemented in Git Hash 9d05962029fe864408d287d5fa7ef81f312e098a, - Rev 11601 &lt;br /&gt;
&lt;br /&gt;
Example script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// llGetRegionStats() example script&lt;br /&gt;
//&lt;br /&gt;
// Displays certain region statistics in hovertext above the prim containing the script.&lt;br /&gt;
//&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent( 5.0 );&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        list Stats = osGetRegionStats();&lt;br /&gt;
        string s = &amp;quot;Sim FPS: &amp;quot; + (string) llList2Float( Stats, STATS_SIM_FPS ) + &amp;quot;\n&amp;quot;;&lt;br /&gt;
        s += &amp;quot;Physics FPS: &amp;quot; + (string) llList2Float( Stats, STATS_PHYSICS_FPS ) + &amp;quot;\n&amp;quot;;&lt;br /&gt;
        s += &amp;quot;Time Dilation: &amp;quot; + (string) llList2Float( Stats, STATS_TIME_DILATION ) + &amp;quot;\n&amp;quot;;&lt;br /&gt;
        s += &amp;quot;Root Agents: &amp;quot; + (string) llList2Integer( Stats, STATS_ROOT_AGENTS ) + &amp;quot;\n&amp;quot;;&lt;br /&gt;
        s += &amp;quot;Child Agents: &amp;quot; + (string) llList2Integer( Stats, STATS_CHILD_AGENTS ) + &amp;quot;\n&amp;quot;;&lt;br /&gt;
        s += &amp;quot;Total Prims: &amp;quot; + (string) llList2Integer( Stats, STATS_TOTAL_PRIMS ) + &amp;quot;\n&amp;quot;;&lt;br /&gt;
        s += &amp;quot;Active Scripts: &amp;quot; + (string) llList2Integer( Stats, STATS_ACTIVE_SCRIPTS ) + &amp;quot;\n&amp;quot;;&lt;br /&gt;
        s += &amp;quot;Script LPS: &amp;quot; + (string) llList2Float( Stats, STATS_SCRIPT_LPS );&lt;br /&gt;
        llSetText( s, &amp;lt;0.0,1.0,0.0&amp;gt;, 1.0 );&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Threat_level</id>
		<title>Threat level</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Threat_level"/>
				<updated>2009-11-27T15:43:45Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
To permit region owners to enable the extended scripting functionality of [[OSSL]], without allowing malicious scripts to access potentially troublesome functions, each OSSL function is assigned a '''threat level''', and access to the functions is granted or denied based on a default threshold set in [[OpenSim.ini]] (which can be overridden for individual functions on a case-by-case basis).&lt;br /&gt;
&lt;br /&gt;
The threat levels, from wholly unthreatening to most potentially damaging, are:&lt;br /&gt;
&lt;br /&gt;
;None&lt;br /&gt;
:Function is no threat at all. It doesn't constitute a threat to either users or the system and has no known side effects.&lt;br /&gt;
;Nuisance&lt;br /&gt;
:Abuse of this command can cause a nuisance to the region operator, such as log message spew.&lt;br /&gt;
;VeryLow&lt;br /&gt;
:Extreme levels of abuse of this function can cause impaired functioning of the region, or very gullible users can be tricked into experiencing harmless effects.&lt;br /&gt;
;Low&lt;br /&gt;
:Intentional abuse can cause crashes or malfunction under certain circumstances, which can be easily rectified; or certain users can be tricked into certain situations in an avoidable manner.&lt;br /&gt;
;Moderate&lt;br /&gt;
:Intentional abuse can cause denial of service and crashes with potential of data or state loss; or trusting users can be tricked into embarrassing or uncomfortable situations.&lt;br /&gt;
;High&lt;br /&gt;
:Casual abuse can cause impaired functionality or temporary denial of service conditions. Intentional abuse can easily cause crashes with potential data loss, or can be used to trick experienced and cautious users into unwanted situations, or changes global data permanently and without undo ability.&lt;br /&gt;
;VeryHigh&lt;br /&gt;
:Even normal use may, depending on the number of instances, or frequency of use, result in severe service impairment or crash with loss of data, or can be used to cause unwanted or harmful effects on users without giving the user a means to avoid it.&lt;br /&gt;
;Severe&lt;br /&gt;
:Even casual use is a danger to region stability, or function allows console or OS command execution, or function allows taking money without consent, or allows deletion or modification of user data, or allows the compromise of sensitive data by design.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The '''OSFunctionThreatLevel''' setting in the script engines' configuration sections of [[OpenSim.ini]] controls what classes of functions are accessible to scripts owned by any avatar; any function at the same threat level or lower than the value provided for '''OsFunctionThreatLevel''' is permitted to run.  If '''OSFunctionThreatLevel''' is absent from the configuration file, the default value is '''VeryLow'''.&lt;br /&gt;
&lt;br /&gt;
OSSL functions may also be permitted or prohibited on an individual basis, by adding '''Allow_*''' lines to the script engine's configuration section. To permit scripts owned by anyone to access a function, even if its threat level exceeds the value of '''OSFunctionThreatLevel''', use the value 'true':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
Allow_osMakeNotecard = true&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To prohibit scripts owned by anyone from accessing a function, even if its threat level is equal to or below the value of '''OSFunctionThreatLevel''', use the value 'false':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
Allow_osMovePen = false&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To allow scripts owned by only certain avatars to access a function, use the UUIDs of the avatars owning the scripts. If multiple avatars are to be permitted access, separate the UUIDs with commas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
Allow_osMakeNotecard = a1cbbdd7-8adb-4158-aa52-c0ee882c4492&lt;br /&gt;
Allow_osTeleportAgent = a1cbbdd7-8adb-4158-aa52-c0ee882c4492,9cab27da-764c-4469-a628-369d978ba436&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Below is a list of OSSL functions grouped by threat level:&lt;br /&gt;
&lt;br /&gt;
;None&lt;br /&gt;
:[[osDrawEllipse]], [[osDrawFilledRectangle]], [[osDrawImage]], [[osDrawLine]], [[osDrawRectangle]], [[osDrawText]], [[osGetAgents]], [[osGetCurrentSunHour]], [[osList2Double]], [[osMovePen]], [[osParseJSON]], [[osSetFontSize]], [[osSetPenColour]], [[osSetPenSize]], [[osSunGetParam]], [[osSunSetParam]], [[osTerrainGetHeight]], [[osWindActiveModelPluginName]]&lt;br /&gt;
&lt;br /&gt;
;Nuisance&lt;br /&gt;
:[[osSetRegionSunSettings]], [[osSetEstateSunSettings]]&lt;br /&gt;
&lt;br /&gt;
;VeryLow&lt;br /&gt;
:[[osGetDrawStringSize]], [[osSetDynamicTextureData]], [[osSetDynamicTextureDataBlend]], [[osSetDynamicTextureDataBlendFace]], [[osSetDynamicTextureURL]], [[osSetDynamicTextureURLBlend]], [[osSetDynamicTextureURLBlendFace]], [[osSetParcelMediaURL]], [[osSetPrimFloatOnWater]], [[osTerrainFlush]], [[osWindParamGet]], [[osWindParamSet]]&lt;br /&gt;
&lt;br /&gt;
;Low&lt;br /&gt;
:[[osAvatarName2Key]], [[osFormatString]], [[osKey2Name]], [[osLoadedCreationDate]], [[osLoadedCreationID]], [[osLoadedCreationTime]], [[osMessageObject]]&lt;br /&gt;
&lt;br /&gt;
;Moderate&lt;br /&gt;
:[[osGetGridLoginURI]], [[osGetGridName]], [[osGetGridNick]], [[osGetRegionStats]]&lt;br /&gt;
&lt;br /&gt;
;High&lt;br /&gt;
:[[osGetAgentIP]], [[osGetScriptEngineName]], [[osGetSimulatorVersion]], [[osMakeNotecard]], [[osMatchString]], [[osRegionRestart]], [[osSetRegionWaterHeight]], [[osSetStateEvents]], [[osTeleportAgent]], [[osTerrainSetHeight]]&lt;br /&gt;
&lt;br /&gt;
;VeryHigh&lt;br /&gt;
:[[osAvatarPlayAnimation]], [[osAvatarStopAnimation]], [[osGetNotecard]], [[osGetNotecardLine]], [[osGetNumberOfNotecardLines]], [[osRegionNotice]], [[osSetRot]]&lt;br /&gt;
&lt;br /&gt;
;Severe&lt;br /&gt;
:[[osConsoleCommand]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ascertaining privilege to use a function ==&lt;br /&gt;
&lt;br /&gt;
There is not currently a function which would allow a script to determine whether or not it has permission to use any specific OSSL function. Such a function was proposed, but rejected by a developer on the grounds that it could permit a griefer script too much knowledge of its environment (though, as shown below, this information is already available through other methods, albeit less efficient ones).&lt;br /&gt;
&lt;br /&gt;
Leaving the question of griefer scripts aside, such knowledge is also useful to legitimate scripts (for instance, an animation vendor with a &amp;quot;Try me!&amp;quot; button, which might use osAvatarPlayAnimation() to demonstrate the animation without requiring the user to explicitly grant permission, but fall back to llStartAnimation() in the event that osAvatarPlayAnimation() is unavailable).&lt;br /&gt;
&lt;br /&gt;
If a script attempts to use an OSSL function that it does not have permission to use, only the current invocation of the event handler which called the function crashes; the script remains running, and the event handler will be executed again the next time the event fires. A script may take advantage of this fact to ascertain which functions are available to it, by using an information-gathering state with a timer to iterate quickly through the OSSL functions it needs; when a function call succeeds, it can then set a variable indicating that the function is available. Once it has iterated through all the functions, it then switches out of the information-gathering state.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// OSSL Function Availability Tester&lt;br /&gt;
//&lt;br /&gt;
// Demonstrates a method by which a script may determine whether or not it is permitted to call&lt;br /&gt;
// various OSSL functions.&lt;br /&gt;
//&lt;br /&gt;
integer WhichProbeFunction; // to tell us which function we're probing&lt;br /&gt;
integer NumberOfFunctionsToCheck; // how many functions are we probing?&lt;br /&gt;
list FunctionNames = [ &amp;quot;osTeleportAgent&amp;quot;, &amp;quot;osGetAgentIP&amp;quot;, &amp;quot;osGetAgents&amp;quot;, &amp;quot;osAvatarPlayAnimation&amp;quot;,&lt;br /&gt;
                       &amp;quot;osAvatarStopAnimation&amp;quot;, &amp;quot;osAvatarName2Key&amp;quot;, &amp;quot;osKey2Name&amp;quot; ];&lt;br /&gt;
list FunctionPermitted = [ 0, 0, 0, 0, 0, 0, 0 ]; // 0 = not permitted, 1 = permitted&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// isFunctionAvailable() takes the name of a function, and returns 1 if it is available, and 0 if&lt;br /&gt;
// it is forbidden or has not been tested.&lt;br /&gt;
//&lt;br /&gt;
integer isFunctionAvailable( string whichFunction )&lt;br /&gt;
{&lt;br /&gt;
    integer index = llListFindList( FunctionNames, whichFunction );&lt;br /&gt;
    if (index == -1) return 0; // Return FALSE if the function name wasn't one of the ones we checked.&lt;br /&gt;
    return llList2Integer( FunctionPermitted, index ); // return the appropriate availability flag.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The default state uses the timer to call all the OSSL functions we're interested in using, in turn.&lt;br /&gt;
// If the function call fails, the timer event handler will abend, but the script doesn't crash. We can&lt;br /&gt;
// use this fact to check all of our desired functions in turn, and then pass control to the Running&lt;br /&gt;
// state once we've checked them all.&lt;br /&gt;
//&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay( &amp;quot;Probing OSSL functions to see what we can use&amp;quot; );&lt;br /&gt;
        NumberOfFunctionsToCheck = llGetListLength( FunctionNames );&lt;br /&gt;
        WhichProbeFunction = -1;&lt;br /&gt;
        llSetTimerEvent( 0.25 ); // check only four functions a second, just to be nice.&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        string BogusKey = &amp;quot;12345678-1234-1234-1234-123456789abc&amp;quot;; // it doesn't need to be valid&lt;br /&gt;
        string s; // for storing the result of string functions&lt;br /&gt;
        list l; // for storing the result of list functions&lt;br /&gt;
        if (++WhichProbeFunction == NumberOfFunctionsToCheck) // Increment WhichProbeFunction; exit if we're done&lt;br /&gt;
        {&lt;br /&gt;
            llSetTimerEvent( 0.0 ); // stop the timer&lt;br /&gt;
            state Running;          // switch to the Running state&lt;br /&gt;
        }&lt;br /&gt;
        llOwnerSay( &amp;quot;Checking function &amp;quot; + llList2String( FunctionNames, WhichProbeFunction )); // say status&lt;br /&gt;
        if (WhichProbeFunction == 0)&lt;br /&gt;
          osTeleportAgent( BogusKey, ZERO_VECTOR, ZERO_VECTOR );&lt;br /&gt;
        else if (WhichProbeFunction == 1)&lt;br /&gt;
          s = osGetAgentIP( BogusKey );&lt;br /&gt;
        else if (WhichProbeFunction == 2)&lt;br /&gt;
          l = osGetAgents();&lt;br /&gt;
        else if (WhichProbeFunction == 3)&lt;br /&gt;
           osAvatarPlayAnimation( BogusKey, BogusKey );&lt;br /&gt;
        else if (WhichProbeFunction == 4)&lt;br /&gt;
           osAvatarStopAnimation( BogusKey, BogusKey );&lt;br /&gt;
        else if (WhichProbeFunction == 5)&lt;br /&gt;
           s = osAvatarName2Key( &amp;quot;John&amp;quot;, &amp;quot;Smith&amp;quot; );&lt;br /&gt;
        else if (WhichProbeFunction == 6)&lt;br /&gt;
           s = osKey2Name( BogusKey );&lt;br /&gt;
 &lt;br /&gt;
        // If we got here, then the timer() handler didn't crash, which means the function it checked for&lt;br /&gt;
        // was actually permitted. So we update the list to indicate that we can use that particular function.&lt;br /&gt;
        FunctionPermitted = llListReplaceList( FunctionPermitted, [ 1 ], WhichProbeFunction, WhichProbeFunction );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
state Running&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        string s = &amp;quot;Here are the functions we can use: &amp;quot;;&lt;br /&gt;
        string t = &amp;quot;Here are the functions we cannot use: &amp;quot;;&lt;br /&gt;
        integer i = llGetListLength( FunctionNames );&lt;br /&gt;
        while (i--)&lt;br /&gt;
            if (llList2Integer( FunctionPermitted, i ))&lt;br /&gt;
                s += llList2String( FunctionNames, i ) + &amp;quot; &amp;quot;;&lt;br /&gt;
            else&lt;br /&gt;
                t += llList2String( FunctionNames, i ) + &amp;quot; &amp;quot;;&lt;br /&gt;
        llOwnerSay( s );&lt;br /&gt;
        llOwnerSay( t );&lt;br /&gt;
        if (isFunctionAvailable( &amp;quot;osKey2Name&amp;quot; ))&lt;br /&gt;
        {&lt;br /&gt;
            key theUUID = &amp;quot;190482f8-b1bc-4c36-aa8d-cfb36c8fea61&amp;quot;;&lt;br /&gt;
            llOwnerSay( &amp;quot;UUID &amp;quot; + (string) theUUID + &amp;quot; maps to the name &amp;quot; + osKey2Name( theUUID ) + &amp;quot;.&amp;quot; );&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay( &amp;quot;osKey2Name() is unavailable; cannot map UUID to name.&amp;quot; );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Threat_level</id>
		<title>Threat level</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Threat_level"/>
				<updated>2009-08-18T23:07:58Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Fixed comment in the example script so that it more closely resembles reality.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
To permit region owners to enable the extended scripting functionality of [[OSSL]], without allowing malicious scripts to access potentially troublesome functions, each OSSL function is assigned a '''threat level''', and access to the functions is granted or denied based on a default threshold set in [[OpenSim.ini]] (which can be overridden for individual functions on a case-by-case basis).&lt;br /&gt;
&lt;br /&gt;
The threat levels, from wholly unthreatening to most potentially damaging, are:&lt;br /&gt;
&lt;br /&gt;
;None&lt;br /&gt;
:Function is no threat at all. It doesn't constitute a threat to either users or the system and has no known side effects.&lt;br /&gt;
;Nuisance&lt;br /&gt;
:Abuse of this command can cause a nuisance to the region operator, such as log message spew.&lt;br /&gt;
;VeryLow&lt;br /&gt;
:Extreme levels of abuse of this function can cause impaired functioning of the region, or very gullible users can be tricked into experiencing harmless effects.&lt;br /&gt;
;Low&lt;br /&gt;
:Intentional abuse can cause crashes or malfunction under certain circumstances, which can be easily rectified; or certain users can be tricked into certain situations in an avoidable manner.&lt;br /&gt;
;Moderate&lt;br /&gt;
:Intentional abuse can cause denial of service and crashes with potential of data or state loss; or trusting users can be tricked into embarrassing or uncomfortable situations.&lt;br /&gt;
;High&lt;br /&gt;
:Casual abuse can cause impaired functionality or temporary denial of service conditions. Intentional abuse can easily cause crashes with potential data loss, or can be used to trick experienced and cautious users into unwanted situations, or changes global data permanently and without undo ability.&lt;br /&gt;
;VeryHigh&lt;br /&gt;
:Even normal use may, depending on the number of instances, or frequency of use, result in severe service impairment or crash with loss of data, or can be used to cause unwanted or harmful effects on users without giving the user a means to avoid it.&lt;br /&gt;
;Severe&lt;br /&gt;
:Even casual use is a danger to region stability, or function allows console or OS command execution, or function allows taking money without consent, or allows deletion or modification of user data, or allows the compromise of sensitive data by design.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The '''OSFunctionThreatLevel''' setting in the script engines' configuration sections of [[OpenSim.ini]] controls what classes of functions are accessible to scripts owned by any avatar; any function at the same threat level or lower than the value provided for '''OsFunctionThreatLevel''' is permitted to run.  If '''OSFunctionThreatLevel''' is absent from the configuration file, the default value is '''VeryLow'''.&lt;br /&gt;
&lt;br /&gt;
OSSL functions may also be permitted or prohibited on an individual basis, by adding '''Allow_*''' lines to the script engine's configuration section. To permit scripts owned by anyone to access a function, even if its threat level exceeds the value of '''OSFunctionThreatLevel''', use the value 'true':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
Allow_osMakeNotecard = true&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To prohibit scripts owned by anyone from accessing a function, even if its threat level is equal to or below the value of '''OSFunctionThreatLevel''', use the value 'false':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
Allow_osMovePen = false&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To allow scripts owned by only certain avatars to access a function, use the UUIDs of the avatars owning the scripts. If multiple avatars are to be permitted access, separate the UUIDs with commas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
Allow_osMakeNotecard = a1cbbdd7-8adb-4158-aa52-c0ee882c4492&lt;br /&gt;
Allow_osTeleportAgent = a1cbbdd7-8adb-4158-aa52-c0ee882c4492,9cab27da-764c-4469-a628-369d978ba436&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Below is a list of OSSL functions grouped by threat level:&lt;br /&gt;
&lt;br /&gt;
;None&lt;br /&gt;
:[[osDrawEllipse]], [[osDrawFilledRectangle]], [[osDrawImage]], [[osDrawLine]], [[osDrawRectangle]], [[osDrawText]], [[osGetAgents]], [[osGetCurrentSunHour]], [[osList2Double]], [[osMovePen]], [[osParseJSON]], [[osSetFontSize]], [[osSetPenColour]], [[osSetPenSize]], [[osSunGetParam]], [[osSunSetParam]], [[osTerrainGetHeight]], [[osWindActiveModelPluginName]]&lt;br /&gt;
&lt;br /&gt;
;Nuisance&lt;br /&gt;
:[[osSetRegionSunSettings]], [[osSetEstateSunSettings]]&lt;br /&gt;
&lt;br /&gt;
;VeryLow&lt;br /&gt;
:[[osGetDrawStringSize]], [[osSetDynamicTextureData]], [[osSetDynamicTextureDataBlend]], [[osSetDynamicTextureDataBlendFace]], [[osSetDynamicTextureURL]], [[osSetDynamicTextureURLBlend]], [[osSetDynamicTextureURLBlendFace]], [[osSetParcelMediaURL]], [[osSetPrimFloatOnWater]], [[osTerrainFlush]], [[osWindParamGet]], [[osWindParamSet]]&lt;br /&gt;
&lt;br /&gt;
;Low&lt;br /&gt;
:[[osAvatarName2Key]], [[osFormatString]], [[osKey2Name]], [[osLoadedCreationDate]], [[osLoadedCreationID]], [[osLoadedCreationTime]], [[osMessageObject]]&lt;br /&gt;
&lt;br /&gt;
;Moderate&lt;br /&gt;
:[[osGetGridLoginURI]], [[osGetGridName]], [[osGetGridNick]]&lt;br /&gt;
&lt;br /&gt;
;High&lt;br /&gt;
:[[osGetAgentIP]], [[osGetScriptEngineName]], [[osGetSimulatorVersion]], [[osMakeNotecard]], [[osMatchString]], [[osRegionRestart]], [[osSetRegionWaterHeight]], [[osSetStateEvents]], [[osTeleportAgent]], [[osTerrainSetHeight]]&lt;br /&gt;
&lt;br /&gt;
;VeryHigh&lt;br /&gt;
:[[osAvatarPlayAnimation]], [[osAvatarStopAnimation]], [[osGetNotecard]], [[osGetNotecardLine]], [[osGetNumberOfNotecardLines]], [[osRegionNotice]], [[osSetRot]]&lt;br /&gt;
&lt;br /&gt;
;Severe&lt;br /&gt;
:[[osConsoleCommand]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ascertaining privilege to use a function ==&lt;br /&gt;
&lt;br /&gt;
There is not currently a function which would allow a script to determine whether or not it has permission to use any specific OSSL function. Such a function was proposed, but rejected by a developer on the grounds that it could permit a griefer script too much knowledge of its environment (though, as shown below, this information is already available through other methods, albeit less efficient ones).&lt;br /&gt;
&lt;br /&gt;
Leaving the question of griefer scripts aside, such knowledge is also useful to legitimate scripts (for instance, an animation vendor with a &amp;quot;Try me!&amp;quot; button, which might use osAvatarPlayAnimation() to demonstrate the animation without requiring the user to explicitly grant permission, but fall back to llStartAnimation() in the event that osAvatarPlayAnimation() is unavailable).&lt;br /&gt;
&lt;br /&gt;
If a script attempts to use an OSSL function that it does not have permission to use, only the current invocation of the event handler which called the function crashes; the script remains running, and the event handler will be executed again the next time the event fires. A script may take advantage of this fact to ascertain which functions are available to it, by using an information-gathering state with a timer to iterate quickly through the OSSL functions it needs; when a function call succeeds, it can then set a variable indicating that the function is available. Once it has iterated through all the functions, it then switches out of the information-gathering state.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// OSSL Function Availability Tester&lt;br /&gt;
//&lt;br /&gt;
// Demonstrates a method by which a script may determine whether or not it is permitted to call&lt;br /&gt;
// various OSSL functions.&lt;br /&gt;
//&lt;br /&gt;
integer WhichProbeFunction; // to tell us which function we're probing&lt;br /&gt;
integer NumberOfFunctionsToCheck; // how many functions are we probing?&lt;br /&gt;
list FunctionNames = [ &amp;quot;osTeleportAgent&amp;quot;, &amp;quot;osGetAgentIP&amp;quot;, &amp;quot;osGetAgents&amp;quot;, &amp;quot;osAvatarPlayAnimation&amp;quot;,&lt;br /&gt;
                       &amp;quot;osAvatarStopAnimation&amp;quot;, &amp;quot;osAvatarName2Key&amp;quot;, &amp;quot;osKey2Name&amp;quot; ];&lt;br /&gt;
list FunctionPermitted = [ 0, 0, 0, 0, 0, 0, 0 ]; // 0 = not permitted, 1 = permitted&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// isFunctionAvailable() takes the name of a function, and returns 1 if it is available, and 0 if&lt;br /&gt;
// it is forbidden or has not been tested.&lt;br /&gt;
//&lt;br /&gt;
integer isFunctionAvailable( string whichFunction )&lt;br /&gt;
{&lt;br /&gt;
    integer index = llListFindList( FunctionNames, whichFunction );&lt;br /&gt;
    if (index == -1) return 0; // Return FALSE if the function name wasn't one of the ones we checked.&lt;br /&gt;
    return llList2Integer( FunctionPermitted, index ); // return the appropriate availability flag.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The default state uses the timer to call all the OSSL functions we're interested in using, in turn.&lt;br /&gt;
// If the function call fails, the timer event handler will abend, but the script doesn't crash. We can&lt;br /&gt;
// use this fact to check all of our desired functions in turn, and then pass control to the Running&lt;br /&gt;
// state once we've checked them all.&lt;br /&gt;
//&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay( &amp;quot;Probing OSSL functions to see what we can use&amp;quot; );&lt;br /&gt;
        NumberOfFunctionsToCheck = llGetListLength( FunctionNames );&lt;br /&gt;
        WhichProbeFunction = -1;&lt;br /&gt;
        llSetTimerEvent( 0.25 ); // check only four functions a second, just to be nice.&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        string BogusKey = &amp;quot;12345678-1234-1234-1234-123456789abc&amp;quot;; // it doesn't need to be valid&lt;br /&gt;
        string s; // for storing the result of string functions&lt;br /&gt;
        list l; // for storing the result of list functions&lt;br /&gt;
        if (++WhichProbeFunction == NumberOfFunctionsToCheck) // Increment WhichProbeFunction; exit if we're done&lt;br /&gt;
        {&lt;br /&gt;
            llSetTimerEvent( 0.0 ); // stop the timer&lt;br /&gt;
            state Running;          // switch to the Running state&lt;br /&gt;
        }&lt;br /&gt;
        llOwnerSay( &amp;quot;Checking function &amp;quot; + llList2String( FunctionNames, WhichProbeFunction )); // say status&lt;br /&gt;
        if (WhichProbeFunction == 0)&lt;br /&gt;
          osTeleportAgent( BogusKey, ZERO_VECTOR, ZERO_VECTOR );&lt;br /&gt;
        else if (WhichProbeFunction == 1)&lt;br /&gt;
          s = osGetAgentIP( BogusKey );&lt;br /&gt;
        else if (WhichProbeFunction == 2)&lt;br /&gt;
          l = osGetAgents();&lt;br /&gt;
        else if (WhichProbeFunction == 3)&lt;br /&gt;
           osAvatarPlayAnimation( BogusKey, BogusKey );&lt;br /&gt;
        else if (WhichProbeFunction == 4)&lt;br /&gt;
           osAvatarStopAnimation( BogusKey, BogusKey );&lt;br /&gt;
        else if (WhichProbeFunction == 5)&lt;br /&gt;
           s = osAvatarName2Key( &amp;quot;John&amp;quot;, &amp;quot;Smith&amp;quot; );&lt;br /&gt;
        else if (WhichProbeFunction == 6)&lt;br /&gt;
           s = osKey2Name( BogusKey );&lt;br /&gt;
 &lt;br /&gt;
        // If we got here, then the timer() handler didn't crash, which means the function it checked for&lt;br /&gt;
        // was actually permitted. So we update the list to indicate that we can use that particular function.&lt;br /&gt;
        FunctionPermitted = llListReplaceList( FunctionPermitted, [ 1 ], WhichProbeFunction, WhichProbeFunction );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
state Running&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        string s = &amp;quot;Here are the functions we can use: &amp;quot;;&lt;br /&gt;
        string t = &amp;quot;Here are the functions we cannot use: &amp;quot;;&lt;br /&gt;
        integer i = llGetListLength( FunctionNames );&lt;br /&gt;
        while (i--)&lt;br /&gt;
            if (llList2Integer( FunctionPermitted, i ))&lt;br /&gt;
                s += llList2String( FunctionNames, i ) + &amp;quot; &amp;quot;;&lt;br /&gt;
            else&lt;br /&gt;
                t += llList2String( FunctionNames, i ) + &amp;quot; &amp;quot;;&lt;br /&gt;
        llOwnerSay( s );&lt;br /&gt;
        llOwnerSay( t );&lt;br /&gt;
        if (isFunctionAvailable( &amp;quot;osKey2Name&amp;quot; ))&lt;br /&gt;
        {&lt;br /&gt;
            key theUUID = &amp;quot;190482f8-b1bc-4c36-aa8d-cfb36c8fea61&amp;quot;;&lt;br /&gt;
            llOwnerSay( &amp;quot;UUID &amp;quot; + (string) theUUID + &amp;quot; maps to the name &amp;quot; + osKey2Name( theUUID ) + &amp;quot;.&amp;quot; );&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay( &amp;quot;osKey2Name() is unavailable; cannot map UUID to name.&amp;quot; );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Threat_level</id>
		<title>Threat level</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Threat_level"/>
				<updated>2009-08-13T16:30:42Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Added section: &amp;quot;Ascertaining privilege to use a function&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
To permit region owners to enable the extended scripting functionality of [[OSSL]], without allowing malicious scripts to access potentially troublesome functions, each OSSL function is assigned a '''threat level''', and access to the functions is granted or denied based on a default threshold set in [[OpenSim.ini]] (which can be overridden for individual functions on a case-by-case basis).&lt;br /&gt;
&lt;br /&gt;
The threat levels, from wholly unthreatening to most potentially damaging, are:&lt;br /&gt;
&lt;br /&gt;
;None&lt;br /&gt;
:Function is no threat at all. It doesn't constitute a threat to either users or the system and has no known side effects.&lt;br /&gt;
;Nuisance&lt;br /&gt;
:Abuse of this command can cause a nuisance to the region operator, such as log message spew.&lt;br /&gt;
;VeryLow&lt;br /&gt;
:Extreme levels of abuse of this function can cause impaired functioning of the region, or very gullible users can be tricked into experiencing harmless effects.&lt;br /&gt;
;Low&lt;br /&gt;
:Intentional abuse can cause crashes or malfunction under certain circumstances, which can be easily rectified; or certain users can be tricked into certain situations in an avoidable manner.&lt;br /&gt;
;Moderate&lt;br /&gt;
:Intentional abuse can cause denial of service and crashes with potential of data or state loss; or trusting users can be tricked into embarrassing or uncomfortable situations.&lt;br /&gt;
;High&lt;br /&gt;
:Casual abuse can cause impaired functionality or temporary denial of service conditions. Intentional abuse can easily cause crashes with potential data loss, or can be used to trick experienced and cautious users into unwanted situations, or changes global data permanently and without undo ability.&lt;br /&gt;
;VeryHigh&lt;br /&gt;
:Even normal use may, depending on the number of instances, or frequency of use, result in severe service impairment or crash with loss of data, or can be used to cause unwanted or harmful effects on users without giving the user a means to avoid it.&lt;br /&gt;
;Severe&lt;br /&gt;
:Even casual use is a danger to region stability, or function allows console or OS command execution, or function allows taking money without consent, or allows deletion or modification of user data, or allows the compromise of sensitive data by design.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The '''OSFunctionThreatLevel''' setting in the script engines' configuration sections of [[OpenSim.ini]] controls what classes of functions are accessible to scripts owned by any avatar; any function at the same threat level or lower than the value provided for '''OsFunctionThreatLevel''' is permitted to run.  If '''OSFunctionThreatLevel''' is absent from the configuration file, the default value is '''VeryLow'''.&lt;br /&gt;
&lt;br /&gt;
OSSL functions may also be permitted or prohibited on an individual basis, by adding '''Allow_*''' lines to the script engine's configuration section. To permit scripts owned by anyone to access a function, even if its threat level exceeds the value of '''OSFunctionThreatLevel''', use the value 'true':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
Allow_osMakeNotecard = true&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To prohibit scripts owned by anyone from accessing a function, even if its threat level is equal to or below the value of '''OSFunctionThreatLevel''', use the value 'false':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
Allow_osMovePen = false&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To allow scripts owned by only certain avatars to access a function, use the UUIDs of the avatars owning the scripts. If multiple avatars are to be permitted access, separate the UUIDs with commas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
Allow_osMakeNotecard = a1cbbdd7-8adb-4158-aa52-c0ee882c4492&lt;br /&gt;
Allow_osTeleportAgent = a1cbbdd7-8adb-4158-aa52-c0ee882c4492,9cab27da-764c-4469-a628-369d978ba436&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Below is a list of OSSL functions grouped by threat level:&lt;br /&gt;
&lt;br /&gt;
;None&lt;br /&gt;
:[[osDrawEllipse]], [[osDrawFilledRectangle]], [[osDrawImage]], [[osDrawLine]], [[osDrawRectangle]], [[osDrawText]], [[osGetAgents]], [[osGetCurrentSunHour]], [[osList2Double]], [[osMovePen]], [[osParseJSON]], [[osSetFontSize]], [[osSetPenColour]], [[osSetPenSize]], [[osSunGetParam]], [[osSunSetParam]], [[osTerrainGetHeight]], [[osWindActiveModelPluginName]]&lt;br /&gt;
&lt;br /&gt;
;Nuisance&lt;br /&gt;
:[[osSetRegionSunSettings]], [[osSetEstateSunSettings]]&lt;br /&gt;
&lt;br /&gt;
;VeryLow&lt;br /&gt;
:[[osGetDrawStringSize]], [[osSetDynamicTextureData]], [[osSetDynamicTextureDataBlend]], [[osSetDynamicTextureDataBlendFace]], [[osSetDynamicTextureURL]], [[osSetDynamicTextureURLBlend]], [[osSetDynamicTextureURLBlendFace]], [[osSetParcelMediaURL]], [[osSetPrimFloatOnWater]], [[osTerrainFlush]], [[osWindParamGet]], [[osWindParamSet]]&lt;br /&gt;
&lt;br /&gt;
;Low&lt;br /&gt;
:[[osAvatarName2Key]], [[osFormatString]], [[osKey2Name]], [[osLoadedCreationDate]], [[osLoadedCreationID]], [[osLoadedCreationTime]], [[osMessageObject]]&lt;br /&gt;
&lt;br /&gt;
;Moderate&lt;br /&gt;
:[[osGetGridLoginURI]], [[osGetGridName]], [[osGetGridNick]]&lt;br /&gt;
&lt;br /&gt;
;High&lt;br /&gt;
:[[osGetAgentIP]], [[osGetScriptEngineName]], [[osGetSimulatorVersion]], [[osMakeNotecard]], [[osMatchString]], [[osRegionRestart]], [[osSetRegionWaterHeight]], [[osSetStateEvents]], [[osTeleportAgent]], [[osTerrainSetHeight]]&lt;br /&gt;
&lt;br /&gt;
;VeryHigh&lt;br /&gt;
:[[osAvatarPlayAnimation]], [[osAvatarStopAnimation]], [[osGetNotecard]], [[osGetNotecardLine]], [[osGetNumberOfNotecardLines]], [[osRegionNotice]], [[osSetRot]]&lt;br /&gt;
&lt;br /&gt;
;Severe&lt;br /&gt;
:[[osConsoleCommand]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ascertaining privilege to use a function ==&lt;br /&gt;
&lt;br /&gt;
There is not currently a function which would allow a script to determine whether or not it has permission to use any specific OSSL function. Such a function was proposed, but rejected by a developer on the grounds that it could permit a griefer script too much knowledge of its environment (though, as shown below, this information is already available through other methods, albeit less efficient ones).&lt;br /&gt;
&lt;br /&gt;
Leaving the question of griefer scripts aside, such knowledge is also useful to legitimate scripts (for instance, an animation vendor with a &amp;quot;Try me!&amp;quot; button, which might use osAvatarPlayAnimation() to demonstrate the animation without requiring the user to explicitly grant permission, but fall back to llStartAnimation() in the event that osAvatarPlayAnimation() is unavailable).&lt;br /&gt;
&lt;br /&gt;
If a script attempts to use an OSSL function that it does not have permission to use, only the current invocation of the event handler which called the function crashes; the script remains running, and the event handler will be executed again the next time the event fires. A script may take advantage of this fact to ascertain which functions are available to it, by using an information-gathering state with a timer to iterate quickly through the OSSL functions it needs; when a function call succeeds, it can then set a variable indicating that the function is available. Once it has iterated through all the functions, it then switches out of the information-gathering state.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// OSSL Function Availability Tester&lt;br /&gt;
//&lt;br /&gt;
// Demonstrates a method by which a script may determine whether or not it is permitted to call&lt;br /&gt;
// various OSSL functions.&lt;br /&gt;
//&lt;br /&gt;
integer WhichProbeFunction; // to tell us which function we're probing&lt;br /&gt;
integer NumberOfFunctionsToCheck; // how many functions are we probing?&lt;br /&gt;
list FunctionNames = [ &amp;quot;osTeleportAgent&amp;quot;, &amp;quot;osGetAgentIP&amp;quot;, &amp;quot;osGetAgents&amp;quot;, &amp;quot;osAvatarPlayAnimation&amp;quot;,&lt;br /&gt;
                       &amp;quot;osAvatarStopAnimation&amp;quot;, &amp;quot;osAvatarName2Key&amp;quot;, &amp;quot;osKey2Name&amp;quot; ];&lt;br /&gt;
list FunctionPermitted = [ 0, 0, 0, 0, 0, 0, 0 ]; // 0 = not permitted, 1 = permitted&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// isFunctionAvailable() is not actually used in this script; this is just an example of how it&lt;br /&gt;
// could be implemented.&lt;br /&gt;
integer isFunctionAvailable( string whichFunction )&lt;br /&gt;
{&lt;br /&gt;
    integer index = llListFindList( FunctionNames, whichFunction );&lt;br /&gt;
    if (index == -1) return 0; // Return FALSE if the function name wasn't one of the ones we checked.&lt;br /&gt;
    return llList2Integer( FunctionPermitted, index ); // return the appropriate availability flag.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The default state uses the timer to call all the OSSL functions we're interested in using, in turn.&lt;br /&gt;
// If the function call fails, the timer event handler will abend, but the script doesn't crash. We can&lt;br /&gt;
// use this fact to check all of our desired functions in turn, and then pass control to the Running&lt;br /&gt;
// state once we've checked them all.&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay( &amp;quot;Probing OSSL functions to see what we can use&amp;quot; );&lt;br /&gt;
        NumberOfFunctionsToCheck = llGetListLength( FunctionNames );&lt;br /&gt;
        WhichProbeFunction = -1;&lt;br /&gt;
        llSetTimerEvent( 0.25 ); // check only four functions a second, just to be nice.&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        string BogusKey = &amp;quot;12345678-1234-1234-1234-123456789abc&amp;quot;; // it doesn't need to be valid&lt;br /&gt;
        string s; // for storing the result of string functions&lt;br /&gt;
        list l; // for storing the result of list functions&lt;br /&gt;
        if (++WhichProbeFunction == NumberOfFunctionsToCheck) // Increment WhichProbeFunction; exit if we're done&lt;br /&gt;
        {&lt;br /&gt;
            llSetTimerEvent( 0.0 ); // stop the timer&lt;br /&gt;
            state Running;          // switch to the Running state&lt;br /&gt;
        }&lt;br /&gt;
        llOwnerSay( &amp;quot;Checking function &amp;quot; + llList2String( FunctionNames, WhichProbeFunction )); // say status&lt;br /&gt;
        if (WhichProbeFunction == 0)&lt;br /&gt;
          osTeleportAgent( BogusKey, ZERO_VECTOR, ZERO_VECTOR );&lt;br /&gt;
        else if (WhichProbeFunction == 1)&lt;br /&gt;
          s = osGetAgentIP( BogusKey );&lt;br /&gt;
        else if (WhichProbeFunction == 2)&lt;br /&gt;
          l = osGetAgents();&lt;br /&gt;
        else if (WhichProbeFunction == 3)&lt;br /&gt;
           osAvatarPlayAnimation( BogusKey, BogusKey );&lt;br /&gt;
        else if (WhichProbeFunction == 4)&lt;br /&gt;
           osAvatarStopAnimation( BogusKey, BogusKey );&lt;br /&gt;
        else if (WhichProbeFunction == 5)&lt;br /&gt;
           s = osAvatarName2Key( &amp;quot;John&amp;quot;, &amp;quot;Smith&amp;quot; );&lt;br /&gt;
        else if (WhichProbeFunction == 6)&lt;br /&gt;
           s = osKey2Name( BogusKey );&lt;br /&gt;
 &lt;br /&gt;
        // If we got here, then the timer() handler didn't crash, which means the function it checked for&lt;br /&gt;
        // was actually permitted. So we update the list to indicate that we can use that particular function.&lt;br /&gt;
        FunctionPermitted = llListReplaceList( FunctionPermitted, [ 1 ], WhichProbeFunction, WhichProbeFunction );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
state Running&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        string s = &amp;quot;Here are the functions we can use: &amp;quot;;&lt;br /&gt;
        string t = &amp;quot;Here are the functions we cannot use: &amp;quot;;&lt;br /&gt;
        integer i = llGetListLength( FunctionNames );&lt;br /&gt;
        while (i--)&lt;br /&gt;
            if (llList2Integer( FunctionPermitted, i ))&lt;br /&gt;
                s += llList2String( FunctionNames, i ) + &amp;quot; &amp;quot;;&lt;br /&gt;
            else&lt;br /&gt;
                t += llList2String( FunctionNames, i ) + &amp;quot; &amp;quot;;&lt;br /&gt;
        llOwnerSay( s );&lt;br /&gt;
        llOwnerSay( t );&lt;br /&gt;
        if (isFunctionAvailable( &amp;quot;osKey2Name&amp;quot; ))&lt;br /&gt;
        {&lt;br /&gt;
            key theUUID = &amp;quot;190482f8-b1bc-4c36-aa8d-cfb36c8fea61&amp;quot;;&lt;br /&gt;
            llOwnerSay( &amp;quot;UUID &amp;quot; + (string) theUUID + &amp;quot; maps to the name &amp;quot; + osKey2Name( theUUID ) + &amp;quot;.&amp;quot; );&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay( &amp;quot;osKey2Name() is unavailable; cannot map UUID to name.&amp;quot; );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Threat_level</id>
		<title>Threat level</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Threat_level"/>
				<updated>2009-08-09T17:48:46Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Clarification&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
To permit region owners to enable the extended scripting functionality of [[OSSL]], without allowing malicious scripts to access potentially troublesome functions, each OSSL function is assigned a '''threat level''', and access to the functions is granted or denied based on a default threshold set in [[OpenSim.ini]] (which can be overridden for individual functions on a case-by-case basis).&lt;br /&gt;
&lt;br /&gt;
The threat levels, from wholly unthreatening to most potentially damaging, are:&lt;br /&gt;
&lt;br /&gt;
;None&lt;br /&gt;
:Function is no threat at all. It doesn't constitute a threat to either users or the system and has no known side effects.&lt;br /&gt;
;Nuisance&lt;br /&gt;
:Abuse of this command can cause a nuisance to the region operator, such as log message spew.&lt;br /&gt;
;VeryLow&lt;br /&gt;
:Extreme levels of abuse of this function can cause impaired functioning of the region, or very gullible users can be tricked into experiencing harmless effects.&lt;br /&gt;
;Low&lt;br /&gt;
:Intentional abuse can cause crashes or malfunction under certain circumstances, which can be easily rectified; or certain users can be tricked into certain situations in an avoidable manner.&lt;br /&gt;
;Moderate&lt;br /&gt;
:Intentional abuse can cause denial of service and crashes with potential of data or state loss; or trusting users can be tricked into embarrassing or uncomfortable situations.&lt;br /&gt;
;High&lt;br /&gt;
:Casual abuse can cause impaired functionality or temporary denial of service conditions. Intentional abuse can easily cause crashes with potential data loss, or can be used to trick experienced and cautious users into unwanted situations, or changes global data permanently and without undo ability.&lt;br /&gt;
;VeryHigh&lt;br /&gt;
:Even normal use may, depending on the number of instances, or frequency of use, result in severe service impairment or crash with loss of data, or can be used to cause unwanted or harmful effects on users without giving the user a means to avoid it.&lt;br /&gt;
;Severe&lt;br /&gt;
:Even casual use is a danger to region stability, or function allows console or OS command execution, or function allows taking money without consent, or allows deletion or modification of user data, or allows the compromise of sensitive data by design.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The '''OSFunctionThreatLevel''' setting in the script engines' configuration sections of [[OpenSim.ini]] controls what classes of functions are accessible to scripts owned by any avatar; any function at the same threat level or lower than the value provided for '''OsFunctionThreatLevel''' is permitted to run.  If '''OSFunctionThreatLevel''' is absent from the configuration file, the default value is '''VeryLow'''.&lt;br /&gt;
&lt;br /&gt;
OSSL functions may also be permitted or prohibited on an individual basis, by adding '''Allow_*''' lines to the script engine's configuration section. To permit scripts owned by anyone to access a function, even if its threat level exceeds the value of '''OSFunctionThreatLevel''', use the value 'true':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
Allow_osMakeNotecard = true&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To prohibit scripts owned by anyone from accessing a function, even if its threat level is equal to or below the value of '''OSFunctionThreatLevel''', use the value 'false':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
Allow_osMovePen = false&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To allow scripts owned by only certain avatars to access a function, use the UUIDs of the avatars owning the scripts. If multiple avatars are to be permitted access, separate the UUIDs with commas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
Allow_osMakeNotecard = a1cbbdd7-8adb-4158-aa52-c0ee882c4492&lt;br /&gt;
Allow_osTeleportAgent = a1cbbdd7-8adb-4158-aa52-c0ee882c4492,9cab27da-764c-4469-a628-369d978ba436&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Below is a list of OSSL functions grouped by threat level:&lt;br /&gt;
&lt;br /&gt;
;None&lt;br /&gt;
:[[osDrawEllipse]], [[osDrawFilledRectangle]], [[osDrawImage]], [[osDrawLine]], [[osDrawRectangle]], [[osDrawText]], [[osGetAgents]], [[osGetCurrentSunHour]], [[osList2Double]], [[osMovePen]], [[osParseJSON]], [[osSetFontSize]], [[osSetPenColour]], [[osSetPenSize]], [[osSunGetParam]], [[osSunSetParam]], [[osTerrainGetHeight]], [[osWindActiveModelPluginName]]&lt;br /&gt;
&lt;br /&gt;
;Nuisance&lt;br /&gt;
:[[osSetRegionSunSettings]], [[osSetEstateSunSettings]]&lt;br /&gt;
&lt;br /&gt;
;VeryLow&lt;br /&gt;
:[[osGetDrawStringSize]], [[osSetDynamicTextureData]], [[osSetDynamicTextureDataBlend]], [[osSetDynamicTextureDataBlendFace]], [[osSetDynamicTextureURL]], [[osSetDynamicTextureURLBlend]], [[osSetDynamicTextureURLBlendFace]], [[osSetParcelMediaURL]], [[osSetPrimFloatOnWater]], [[osTerrainFlush]], [[osWindParamGet]], [[osWindParamSet]]&lt;br /&gt;
&lt;br /&gt;
;Low&lt;br /&gt;
:[[osAvatarName2Key]], [[osFormatString]], [[osKey2Name]], [[osLoadedCreationDate]], [[osLoadedCreationID]], [[osLoadedCreationTime]], [[osMessageObject]]&lt;br /&gt;
&lt;br /&gt;
;Moderate&lt;br /&gt;
:[[osGetGridLoginURI]], [[osGetGridName]], [[osGetGridNick]]&lt;br /&gt;
&lt;br /&gt;
;High&lt;br /&gt;
:[[osGetAgentIP]], [[osGetScriptEngineName]], [[osGetSimulatorVersion]], [[osMakeNotecard]], [[osMatchString]], [[osRegionRestart]], [[osSetRegionWaterHeight]], [[osSetStateEvents]], [[osTeleportAgent]], [[osTerrainSetHeight]]&lt;br /&gt;
&lt;br /&gt;
;VeryHigh&lt;br /&gt;
:[[osAvatarPlayAnimation]], [[osAvatarStopAnimation]], [[osGetNotecard]], [[osGetNotecardLine]], [[osGetNumberOfNotecardLines]], [[osRegionNotice]], [[osSetRot]]&lt;br /&gt;
&lt;br /&gt;
;Severe&lt;br /&gt;
:[[osConsoleCommand]]&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Threat_level</id>
		<title>Threat level</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Threat_level"/>
				<updated>2009-07-30T14:53:08Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Elucidation and minor reformat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
To permit region owners to enable the extended scripting functionality of [[OSSL]], without allowing malicious scripts to access potentially troublesome functions, each OSSL function is assigned a '''threat level''', and access to the functions is granted or denied based on a default threshold set in [[OpenSim.ini]] (which can be overridden for individual functions on a case-by-case basis).&lt;br /&gt;
&lt;br /&gt;
The threat levels, from wholly unthreatening to most potentially damaging, are:&lt;br /&gt;
&lt;br /&gt;
;None&lt;br /&gt;
:Function is no threat at all. It doesn't constitute a threat to either users or the system and has no known side effects.&lt;br /&gt;
;Nuisance&lt;br /&gt;
:Abuse of this command can cause a nuisance to the region operator, such as log message spew.&lt;br /&gt;
;VeryLow&lt;br /&gt;
:Extreme levels of abuse of this function can cause impaired functioning of the region, or very gullible users can be tricked into experiencing harmless effects.&lt;br /&gt;
;Low&lt;br /&gt;
:Intentional abuse can cause crashes or malfunction under certain circumstances, which can be easily rectified; or certain users can be tricked into certain situations in an avoidable manner.&lt;br /&gt;
;Moderate&lt;br /&gt;
:Intentional abuse can cause denial of service and crashes with potential of data or state loss; or trusting users can be tricked into embarrassing or uncomfortable situations.&lt;br /&gt;
;High&lt;br /&gt;
:Casual abuse can cause impaired functionality or temporary denial of service conditions. Intentional abuse can easily cause crashes with potential data loss, or can be used to trick experienced and cautious users into unwanted situations, or changes global data permanently and without undo ability.&lt;br /&gt;
;VeryHigh&lt;br /&gt;
:Even normal use may, depending on the number of instances, or frequency of use, result in severe service impairment or crash with loss of data, or can be used to cause unwanted or harmful effects on users without giving the user a means to avoid it.&lt;br /&gt;
;Severe&lt;br /&gt;
:Even casual use is a danger to region stability, or function allows console or OS command execution, or function allows taking money without consent, or allows deletion or modification of user data, or allows the compromise of sensitive data by design.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The '''OSFunctionThreatLevel''' setting in the script engines' configuration sections of [[OpenSim.ini]] controls what classes of functions are accessible to scripts owned by any avatar; any function at the same threat level or lower than the value provided for '''OsFunctionThreatLevel''' is permitted to run.  If '''OSFunctionThreatLevel''' is absent from the configuration file, the default value is '''VeryLow'''.&lt;br /&gt;
&lt;br /&gt;
OSSL functions may also be permitted or prohibited on an individual basis, by adding '''Allow_*''' lines to the script engine's configuration section. To permit scripts owned by anyone to access a function, even if its threat level exceeds the value of '''OSFunctionThreatLevel''', use the value 'true':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
Allow_osMakeNotecard = true&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To prohibit scripts owned by anyone from accessing a function, even if its threat level is equal to or below the value of '''OSFunctionThreatLevel''', use the value 'false':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
Allow_osMovePen = false&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To allow scripts owned by only certain avatars to access a function, use the UUIDs of the avatars. If multiple avatars are to be permitted access, separate the UUIDs with commas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
Allow_osMakeNotecard = a1cbbdd7-8adb-4158-aa52-c0ee882c4492&lt;br /&gt;
Allow_osTeleportAgent = a1cbbdd7-8adb-4158-aa52-c0ee882c4492,9cab27da-764c-4469-a628-369d978ba436&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Below is a list of OSSL functions grouped by threat level:&lt;br /&gt;
&lt;br /&gt;
;None&lt;br /&gt;
:[[osDrawEllipse]], [[osDrawFilledRectangle]], [[osDrawImage]], [[osDrawLine]], [[osDrawRectangle]], [[osDrawText]], [[osGetAgents]], [[osGetCurrentSunHour]], [[osList2Double]], [[osMovePen]], [[osParseJSON]], [[osSetFontSize]], [[osSetPenColour]], [[osSetPenSize]], [[osSunGetParam]], [[osSunSetParam]], [[osTerrainGetHeight]], [[osWindActiveModelPluginName]]&lt;br /&gt;
&lt;br /&gt;
;Nuisance&lt;br /&gt;
:[[osSetRegionSunSettings]], [[osSetEstateSunSettings]]&lt;br /&gt;
&lt;br /&gt;
;VeryLow&lt;br /&gt;
:[[osGetDrawStringSize]], [[osSetDynamicTextureData]], [[osSetDynamicTextureDataBlend]], [[osSetDynamicTextureDataBlendFace]], [[osSetDynamicTextureURL]], [[osSetDynamicTextureURLBlend]], [[osSetDynamicTextureURLBlendFace]], [[osSetParcelMediaURL]], [[osSetPrimFloatOnWater]], [[osTerrainFlush]], [[osWindParamGet]], [[osWindParamSet]]&lt;br /&gt;
&lt;br /&gt;
;Low&lt;br /&gt;
:[[osAvatarName2Key]], [[osFormatString]], [[osKey2Name]], [[osLoadedCreationDate]], [[osLoadedCreationID]], [[osLoadedCreationTime]], [[osMessageObject]]&lt;br /&gt;
&lt;br /&gt;
;Moderate&lt;br /&gt;
:[[osGetGridLoginURI]], [[osGetGridName]], [[osGetGridNick]]&lt;br /&gt;
&lt;br /&gt;
;High&lt;br /&gt;
:[[osGetAgentIP]], [[osGetScriptEngineName]], [[osGetSimulatorVersion]], [[osMakeNotecard]], [[osMatchString]], [[osRegionRestart]], [[osSetRegionWaterHeight]], [[osSetStateEvents]], [[osTeleportAgent]], [[osTerrainSetHeight]]&lt;br /&gt;
&lt;br /&gt;
;VeryHigh&lt;br /&gt;
:[[osAvatarPlayAnimation]], [[osAvatarStopAnimation]], [[osGetNotecard]], [[osGetNotecardLine]], [[osGetNumberOfNotecardLines]], [[osRegionNotice]], [[osSetRot]]&lt;br /&gt;
&lt;br /&gt;
;Severe&lt;br /&gt;
:[[osConsoleCommand]]&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Dynamic_textures</id>
		<title>Dynamic textures</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Dynamic_textures"/>
				<updated>2009-07-30T14:43:47Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Linked &amp;quot;threat level&amp;quot; to the appropriate page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[Dynamic textures]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dynamic textures allow scripts to create images on the fly, combining graphics loaded from the World Wide Web with text, lines, ellipses and filled or unfilled rectangles. The textures thus created are temporary, maintained by the individual region in which they are created, and are not permanently stored in the [[Asset Server]].&lt;br /&gt;
&lt;br /&gt;
In general, one creates a string containing a list of [[Drawing commands]] and parameters, either directly or with the aid of one of the &amp;quot;convenience&amp;quot; drawing functions listed below, then passes this string as a parameter to one of the osSetDynamicTexture* commands.&lt;br /&gt;
&lt;br /&gt;
In the list below, the [[threat level]] of each function is indicated in parentheses after the function name. There is no threat level associated with the [[Drawing_commands | drawing commands]].&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;|'''Graphics Primitive Drawing Functions'''&lt;br /&gt;
*[[osDrawEllipse]] (None)&lt;br /&gt;
*[[osDrawFilledRectangle]] (None)&lt;br /&gt;
*[[osDrawImage]] (None)&lt;br /&gt;
*[[osDrawLine]] (None)&lt;br /&gt;
*[[osDrawRectangle]] (None)&lt;br /&gt;
*[[osMovePen]] (None)&lt;br /&gt;
*[[osSetPenColour]] (None)&lt;br /&gt;
*[[osSetPenSize]] (None)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Text Drawing Functions'''&lt;br /&gt;
*[[osDrawText]] (None)&lt;br /&gt;
*[[osSetFontSize]] (None)&lt;br /&gt;
*[[osGetDrawStringSize]] (VeryLow)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Dynamic Texture Creation Functions'''&lt;br /&gt;
*[[osSetDynamicTextureURL]] (VeryLow)&lt;br /&gt;
*[[osSetDynamicTextureURLBlend]] (VeryLow)&lt;br /&gt;
*[[osSetDynamicTextureURLBlendFace]] (VeryLow)&lt;br /&gt;
*[[osSetDynamicTextureData]] (VeryLow)&lt;br /&gt;
*[[osSetDynamicTextureDataBlend]] (VeryLow)&lt;br /&gt;
*[[osSetDynamicTextureDataBlendFace]] (VeryLow)&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;|'''Graphics Primitive Drawing Commands'''&lt;br /&gt;
*[[Drawing commands#Ellipse|Ellipse]]&lt;br /&gt;
*[[Drawing commands#FillRectangle|FillRectangle]]&lt;br /&gt;
*[[Drawing commands#Image|Image]]&lt;br /&gt;
*[[Drawing commands#LineTo|LineTo]]&lt;br /&gt;
*[[Drawing commands#MoveTo|MoveTo]]&lt;br /&gt;
*[[Drawing commands#PenColour|PenColour]]&lt;br /&gt;
*[[Drawing commands#PenSize|PenSize]]&lt;br /&gt;
*[[Drawing commands#Rectangle|Rectangle]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Text Drawing Commands'''&lt;br /&gt;
*[[Drawing commands#FontName|FontName]]&lt;br /&gt;
*[[Drawing commands#FontProp|FontProp]]&lt;br /&gt;
*[[Drawing commands#FontSize|FontSize]]&lt;br /&gt;
*[[Drawing commands#Text|Text]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Threat_level</id>
		<title>Threat level</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Threat_level"/>
				<updated>2009-07-30T14:42:33Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: .&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
To permit region owners to enable the extended scripting functionality of [[OSSL]], without allowing malicious scripts to access potentially troublesome functions, each OSSL function is assigned a '''threat level'''. These threat levels, from least threatening to most potentially damaging, are:&lt;br /&gt;
&lt;br /&gt;
;None&lt;br /&gt;
:Function is no threat at all. It doesn't constitute a threat to either users or the system and has no known side effects.&lt;br /&gt;
;Nuisance&lt;br /&gt;
:Abuse of this command can cause a nuisance to the region operator, such as log message spew.&lt;br /&gt;
;VeryLow&lt;br /&gt;
:Extreme levels of abuse of this function can cause impaired functioning of the region, or very gullible users can be tricked into experiencing harmless effects.&lt;br /&gt;
;Low&lt;br /&gt;
:Intentional abuse can cause crashes or malfunction under certain circumstances, which can be easily rectified; or certain users can be tricked into certain situations in an avoidable manner.&lt;br /&gt;
;Moderate&lt;br /&gt;
:Intentional abuse can cause denial of service and crashes with potential of data or state loss; or trusting users can be tricked into embarrassing or uncomfortable situations.&lt;br /&gt;
;High&lt;br /&gt;
:Casual abuse can cause impaired functionality or temporary denial of service conditions. Intentional abuse can easily cause crashes with potential data loss, or can be used to trick experienced and cautious users into unwanted situations, or changes global data permanently and without undo ability.&lt;br /&gt;
;VeryHigh&lt;br /&gt;
:Even normal use may, depending on the number of instances, or frequency of use, result in severe service impairment or crash with loss of data, or can be used to cause unwanted or harmful effects on users without giving the user a means to avoid it.&lt;br /&gt;
;Severe&lt;br /&gt;
:Even casual use is a danger to region stability, or function allows console or OS command execution, or function allows taking money without consent, or allows deletion or modification of user data, or allows the compromise of sensitive data by design.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The '''OSFunctionThreatLevel''' setting in the script engines' configuration sections of [[OpenSim.ini]] controls what classes of functions are accessible to scripts owned by any avatar; any function at the same threat level or lower than the value provided for '''OsFunctionThreatLevel''' is permitted to run.  If '''OSFunctionThreatLevel''' is absent from the configuration file, the default value is '''VeryLow'''.&lt;br /&gt;
&lt;br /&gt;
OSSL functions may also be permitted or prohibited on an individual basis, by adding '''Allow_*''' lines to the script engine's configuration section. To permit scripts owned by anyone to access a function, even if its threat level exceeds the value of '''OSFunctionThreatLevel''', use the value 'true':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
Allow_osMakeNotecard = true&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To prohibit scripts owned by anyone from accessing a function, even if its threat level is equal to or below the value of '''OSFunctionThreatLevel''', use the value 'false':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
Allow_osMovePen = false&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To allow scripts owned by only certain avatars to access a function, use the UUIDs of the avatars. If multiple avatars are to be permitted access, separate the UUIDs with commas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
Allow_osMakeNotecard = a1cbbdd7-8adb-4158-aa52-c0ee882c4492&lt;br /&gt;
Allow_osTeleportAgent = a1cbbdd7-8adb-4158-aa52-c0ee882c4492,9cab27da-764c-4469-a628-369d978ba436&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Below is a list of OSSL functions grouped by threat level:&lt;br /&gt;
&lt;br /&gt;
;None&lt;br /&gt;
:[[osDrawEllipse]], [[osDrawFilledRectangle]], [[osDrawImage]], [[osDrawLine]], [[osDrawRectangle]], [[osDrawText]], [[osGetAgents]], [[osGetCurrentSunHour]], [[osList2Double]], [[osMovePen]], [[osParseJSON]], [[osSetFontSize]], [[osSetPenColour]], [[osSetPenSize]], [[osSunGetParam]], [[osSunSetParam]], [[osTerrainGetHeight]], [[osWindActiveModelPluginName]]&lt;br /&gt;
&lt;br /&gt;
;Nuisance&lt;br /&gt;
:[[osSetRegionSunSettings]], [[osSetEstateSunSettings]]&lt;br /&gt;
&lt;br /&gt;
;VeryLow&lt;br /&gt;
:[[osGetDrawStringSize]], [[osSetDynamicTextureData]], [[osSetDynamicTextureDataBlend]], [[osSetDynamicTextureDataBlendFace]], [[osSetDynamicTextureURL]], [[osSetDynamicTextureURLBlend]], [[osSetDynamicTextureURLBlendFace]], [[osSetParcelMediaURL]], [[osSetPrimFloatOnWater]], [[osTerrainFlush]], [[osWindParamGet]], [[osWindParamSet]]&lt;br /&gt;
&lt;br /&gt;
;Low&lt;br /&gt;
:[[osAvatarName2Key]], [[osFormatString]], [[osKey2Name]], [[osLoadedCreationDate]], [[osLoadedCreationID]], [[osLoadedCreationTime]], [[osMessageObject]]&lt;br /&gt;
&lt;br /&gt;
;Moderate&lt;br /&gt;
:[[osGetGridLoginURI]], [[osGetGridName]], [[osGetGridNick]]&lt;br /&gt;
&lt;br /&gt;
;High&lt;br /&gt;
:[[osGetAgentIP]], [[osGetScriptEngineName]], [[osGetSimulatorVersion]], [[osMakeNotecard]], [[osMatchString]], [[osRegionRestart]], [[osSetRegionWaterHeight]], [[osSetStateEvents]], [[osTeleportAgent]], [[osTerrainSetHeight]]&lt;br /&gt;
&lt;br /&gt;
;VeryHigh&lt;br /&gt;
:[[osAvatarPlayAnimation]], [[osAvatarStopAnimation]], [[osGetNotecard]], [[osGetNotecardLine]], [[osGetNumberOfNotecardLines]], [[osRegionNotice]], [[osSetRot]]&lt;br /&gt;
&lt;br /&gt;
;Severe&lt;br /&gt;
:[[osConsoleCommand]]&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Threat_level</id>
		<title>Threat level</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Threat_level"/>
				<updated>2009-07-30T14:41:58Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Got, a little, carried away, with the commas, there,&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
To permit region owners to enable the extended scripting functionality of [[OSSL]], without allowing malicious scripts to access potentially troublesome functions, each OSSL function is assigned a '''threat level'''. These threat levels, from least threatening to most potentially damaging, are:&lt;br /&gt;
&lt;br /&gt;
;None&lt;br /&gt;
:Function is no threat at all. It doesn't constitute a threat to either users or the system and has no known side effects.&lt;br /&gt;
;Nuisance&lt;br /&gt;
:Abuse of this command can cause a nuisance to the region operator, such as log message spew.&lt;br /&gt;
;VeryLow&lt;br /&gt;
:Extreme levels of abuse of this function can cause impaired functioning of the region, or very gullible users can be tricked into experiencing harmless effects&lt;br /&gt;
;Low&lt;br /&gt;
:Intentional abuse can cause crashes or malfunction under certain circumstances, which can be easily rectified; or certain users can be tricked into certain situations in an avoidable manner.&lt;br /&gt;
;Moderate&lt;br /&gt;
:Intentional abuse can cause denial of service and crashes with potential of data or state loss; or trusting users can be tricked into embarrassing or uncomfortable situations.&lt;br /&gt;
;High&lt;br /&gt;
:Casual abuse can cause impaired functionality or temporary denial of service conditions. Intentional abuse can easily cause crashes with potential data loss, or can be used to trick experienced and cautious users into unwanted situations, or changes global data permanently and without undo ability.&lt;br /&gt;
;VeryHigh&lt;br /&gt;
:Even normal use may, depending on the number of instances, or frequency of use, result in severe service impairment or crash with loss of data, or can be used to cause unwanted or harmful effects on users without giving the user a means to avoid it.&lt;br /&gt;
;Severe&lt;br /&gt;
:Even casual use is a danger to region stability, or function allows console or OS command execution, or function allows taking money without consent, or allows deletion or modification of user data, or allows the compromise of sensitive data by design.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The '''OSFunctionThreatLevel''' setting in the script engines' configuration sections of [[OpenSim.ini]] controls what classes of functions are accessible to scripts owned by any avatar; any function at the same threat level or lower than the value provided for '''OsFunctionThreatLevel''' is permitted to run.  If '''OSFunctionThreatLevel''' is absent from the configuration file, the default value is '''VeryLow'''.&lt;br /&gt;
&lt;br /&gt;
OSSL functions may also be permitted or prohibited on an individual basis, by adding '''Allow_*''' lines to the script engine's configuration section. To permit scripts owned by anyone to access a function, even if its threat level exceeds the value of '''OSFunctionThreatLevel''', use the value 'true':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
Allow_osMakeNotecard = true&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To prohibit scripts owned by anyone from accessing a function, even if its threat level is equal to or below the value of '''OSFunctionThreatLevel''', use the value 'false':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
Allow_osMovePen = false&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To allow scripts owned by only certain avatars to access a function, use the UUIDs of the avatars. If multiple avatars are to be permitted access, separate the UUIDs with commas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
Allow_osMakeNotecard = a1cbbdd7-8adb-4158-aa52-c0ee882c4492&lt;br /&gt;
Allow_osTeleportAgent = a1cbbdd7-8adb-4158-aa52-c0ee882c4492,9cab27da-764c-4469-a628-369d978ba436&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Below is a list of OSSL functions grouped by threat level:&lt;br /&gt;
&lt;br /&gt;
;None&lt;br /&gt;
:[[osDrawEllipse]], [[osDrawFilledRectangle]], [[osDrawImage]], [[osDrawLine]], [[osDrawRectangle]], [[osDrawText]], [[osGetAgents]], [[osGetCurrentSunHour]], [[osList2Double]], [[osMovePen]], [[osParseJSON]], [[osSetFontSize]], [[osSetPenColour]], [[osSetPenSize]], [[osSunGetParam]], [[osSunSetParam]], [[osTerrainGetHeight]], [[osWindActiveModelPluginName]]&lt;br /&gt;
&lt;br /&gt;
;Nuisance&lt;br /&gt;
:[[osSetRegionSunSettings]], [[osSetEstateSunSettings]]&lt;br /&gt;
&lt;br /&gt;
;VeryLow&lt;br /&gt;
:[[osGetDrawStringSize]], [[osSetDynamicTextureData]], [[osSetDynamicTextureDataBlend]], [[osSetDynamicTextureDataBlendFace]], [[osSetDynamicTextureURL]], [[osSetDynamicTextureURLBlend]], [[osSetDynamicTextureURLBlendFace]], [[osSetParcelMediaURL]], [[osSetPrimFloatOnWater]], [[osTerrainFlush]], [[osWindParamGet]], [[osWindParamSet]]&lt;br /&gt;
&lt;br /&gt;
;Low&lt;br /&gt;
:[[osAvatarName2Key]], [[osFormatString]], [[osKey2Name]], [[osLoadedCreationDate]], [[osLoadedCreationID]], [[osLoadedCreationTime]], [[osMessageObject]]&lt;br /&gt;
&lt;br /&gt;
;Moderate&lt;br /&gt;
:[[osGetGridLoginURI]], [[osGetGridName]], [[osGetGridNick]]&lt;br /&gt;
&lt;br /&gt;
;High&lt;br /&gt;
:[[osGetAgentIP]], [[osGetScriptEngineName]], [[osGetSimulatorVersion]], [[osMakeNotecard]], [[osMatchString]], [[osRegionRestart]], [[osSetRegionWaterHeight]], [[osSetStateEvents]], [[osTeleportAgent]], [[osTerrainSetHeight]]&lt;br /&gt;
&lt;br /&gt;
;VeryHigh&lt;br /&gt;
:[[osAvatarPlayAnimation]], [[osAvatarStopAnimation]], [[osGetNotecard]], [[osGetNotecardLine]], [[osGetNumberOfNotecardLines]], [[osRegionNotice]], [[osSetRot]]&lt;br /&gt;
&lt;br /&gt;
;Severe&lt;br /&gt;
:[[osConsoleCommand]]&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Threat_level</id>
		<title>Threat level</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Threat_level"/>
				<updated>2009-07-30T14:40:17Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Added definitions of each threat level, and list of functions grouped by threat level.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
To permit region owners to enable the extended scripting functionality of [[OSSL]], without allowing malicious scripts to access potentially troublesome functions, each OSSL function is assigned a '''threat level'''. These threat levels, from least threatening to most potentially damaging, are:&lt;br /&gt;
&lt;br /&gt;
;None&lt;br /&gt;
:Function is no threat at all. It doesn't constitute a threat to either users or the system and has no known side effects.&lt;br /&gt;
;Nuisance&lt;br /&gt;
:Abuse of this command can cause a nuisance to the region operator, such as log message spew.&lt;br /&gt;
;VeryLow&lt;br /&gt;
:Extreme levels of abuse of this function can cause impaired functioning of the region, or very gullible users can be tricked into experiencing harmless effects&lt;br /&gt;
;Low&lt;br /&gt;
:Intentional abuse can cause crashes or malfunction under certain circumstances, which can be easily rectified; or certain users can be tricked into certain situations in an avoidable manner.&lt;br /&gt;
;Moderate&lt;br /&gt;
:Intentional abuse can cause denial of service and crashes with potential of data or state loss; or trusting users can be tricked into embarrassing or uncomfortable situations.&lt;br /&gt;
;High&lt;br /&gt;
:Casual abuse can cause impaired functionality or temporary denial of service conditions. Intentional abuse can easily cause crashes with potential data loss, or can be used to trick experienced and cautious users into unwanted situations, or changes global data permanently and without undo ability.&lt;br /&gt;
;VeryHigh&lt;br /&gt;
:Even normal use may, depending on the number of instances, or frequency of use, result in severe service impairment or crash with loss of data, or can be used to cause unwanted or harmful effects on users without giving the user a means to avoid it.&lt;br /&gt;
;Severe&lt;br /&gt;
:Even casual use is a danger to region stability, or function allows console or OS command execution, or function allows taking money without consent, or allows deletion or modification of user data, or allows the compromise of sensitive data by design.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The '''OSFunctionThreatLevel''' setting in the script engines' configuration sections of [[OpenSim.ini]] controls what classes of functions are accessible to scripts owned by any avatar; any function at the same threat level or lower than the value provided for '''OsFunctionThreatLevel''' is permitted to run.  If '''OSFunctionThreatLevel''' is absent from the configuration file, the default value is '''VeryLow'''.&lt;br /&gt;
&lt;br /&gt;
OSSL functions may also be permitted or prohibited on an individual basis, by adding '''Allow_*''' lines to the script engine's configuration section. To permit scripts owned by anyone to access a function, even if its threat level exceeds the value of '''OSFunctionThreatLevel''', use the value 'true':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
Allow_osMakeNotecard = true&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To prohibit scripts owned by anyone from accessing a function, even if its threat level is equal to or below the value of '''OSFunctionThreatLevel''', use the value 'false':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
Allow_osMovePen = false&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To allow scripts owned by only certain avatars to access a function, use the UUIDs of the avatars. If multiple avatars are to be permitted access, separate the UUIDs with commas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
Allow_osMakeNotecard = a1cbbdd7-8adb-4158-aa52-c0ee882c4492&lt;br /&gt;
Allow_osTeleportAgent = a1cbbdd7-8adb-4158-aa52-c0ee882c4492,9cab27da-764c-4469-a628-369d978ba436&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Below is a list of OSSL functions grouped by threat level:&lt;br /&gt;
&lt;br /&gt;
;None&lt;br /&gt;
:[[osDrawEllipse]], [[osDrawFilledRectangle]], [[osDrawImage]], [[osDrawLine]], [[osDrawRectangle]], [[osDrawText]], [[osGetAgents]], [[osGetCurrentSunHour]], [[osList2Double]], [[osMovePen]], [[osParseJSON]], [[osSetFontSize]], [[osSetPenColour]], [[osSetPenSize]], [[osSunGetParam]], [[osSunSetParam]], [[osTerrainGetHeight]], [[osWindActiveModelPluginName]]&lt;br /&gt;
&lt;br /&gt;
;Nuisance&lt;br /&gt;
:[[osSetRegionSunSettings]], [[osSetEstateSunSettings]], &lt;br /&gt;
&lt;br /&gt;
;VeryLow&lt;br /&gt;
:[[osGetDrawStringSize]], [[osSetDynamicTextureData]], [[osSetDynamicTextureDataBlend]], [[osSetDynamicTextureDataBlendFace]], [[osSetDynamicTextureURL]], [[osSetDynamicTextureURLBlend]], [[osSetDynamicTextureURLBlendFace]], [[osSetParcelMediaURL]], [[osSetPrimFloatOnWater]], [[osTerrainFlush]], [[osWindParamGet]], [[osWindParamSet]]&lt;br /&gt;
&lt;br /&gt;
;Low&lt;br /&gt;
:[[osAvatarName2Key]], [[osFormatString]], [[osKey2Name]], [[osLoadedCreationDate]], [[osLoadedCreationID]], [[osLoadedCreationTime]], [[osMessageObject]]&lt;br /&gt;
&lt;br /&gt;
;Moderate&lt;br /&gt;
:[[osGetGridLoginURI]], [[osGetGridName]], [[osGetGridNick]]&lt;br /&gt;
&lt;br /&gt;
;High&lt;br /&gt;
:[[osGetAgentIP]], [[osGetScriptEngineName]], [[osGetSimulatorVersion]], [[osMakeNotecard]], [[osMatchString]], [[osRegionRestart]], [[osSetRegionWaterHeight]], [[osSetStateEvents]], [[osTeleportAgent]], [[osTerrainSetHeight]], &lt;br /&gt;
&lt;br /&gt;
;VeryHigh&lt;br /&gt;
:[[osAvatarPlayAnimation]], [[osAvatarStopAnimation]], [[osGetNotecard]], [[osGetNotecardLine]], [[osGetNumberOfNotecardLines]], [[osRegionNotice]], [[osSetRot]]&lt;br /&gt;
&lt;br /&gt;
;Severe&lt;br /&gt;
:[[osConsoleCommand]]&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Threat_level</id>
		<title>Threat level</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Threat_level"/>
				<updated>2009-07-30T14:09:21Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Page created.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
To permit region owners to enable the extended scripting functionality of [[OSSL]], without allowing malicious scripts to access potentially troublesome functions, each OSSL function is assigned a '''threat level'''. These threat levels, from least threatening to most potentially damaging, are '''None''', '''VeryLow''', '''Low''', '''Moderate''', '''High''', '''VeryHigh''' and '''Severe'''. A function with a threat level of '''None''' poses no risk whatsoever; a threat level of '''Severe''' indicates potential for the region to be compromised. Threat levels in between generally indicate the capability of the function to affect the performance of the region or grid if abused by a malicious script.&lt;br /&gt;
&lt;br /&gt;
The '''OSFunctionThreatLevel''' setting in the script engines' configuration sections of [[OpenSim.ini]] controls what classes of functions are accessible to scripts owned by any avatar; any function at the same threat level or lower than the value provided for '''OsFunctionThreatLevel''' is permitted to run.  If '''OSFunctionThreatLevel''' is absent from the configuration file, the default value is '''VeryLow'''.&lt;br /&gt;
&lt;br /&gt;
OSSL functions may also be permitted or prohibited on an individual basis, by adding '''Allow_*''' lines to the script engine's configuration section. To permit scripts owned by anyone to access a function, even if its threat level exceeds the value of '''OSFunctionThreatLevel''', use the value 'true':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
Allow_osMakeNotecard = true&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To prohibit scripts owned by anyone from accessing a function, even if its threat level is equal to or below the value of '''OSFunctionThreatLevel''', use the value 'false':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
Allow_osMovePen = false&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To allow scripts owned by only certain avatars to access a function, use the UUIDs of the avatars. If multiple avatars are to be permitted access, separate the UUIDs with commas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
Allow_osMakeNotecard = a1cbbdd7-8adb-4158-aa52-c0ee882c4492&lt;br /&gt;
Allow_osTeleportAgent = a1cbbdd7-8adb-4158-aa52-c0ee882c4492,9cab27da-764c-4469-a628-369d978ba436&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Dynamic_textures</id>
		<title>Dynamic textures</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Dynamic_textures"/>
				<updated>2009-07-30T13:32:17Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Added threat levels&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[Dynamic textures]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dynamic textures allow scripts to create images on the fly, combining graphics loaded from the World Wide Web with text, lines, ellipses and filled or unfilled rectangles. The textures thus created are temporary, maintained by the individual region in which they are created, and are not permanently stored in the [[Asset Server]].&lt;br /&gt;
&lt;br /&gt;
In general, one creates a string containing a list of [[Drawing commands]] and parameters, either directly or with the aid of one of the &amp;quot;convenience&amp;quot; drawing functions listed below, then passes this string as a parameter to one of the osSetDynamicTexture* commands.&lt;br /&gt;
&lt;br /&gt;
In the list below, the threat level of each function is indicated in parentheses after the function name. There is no threat level associated with the [[Drawing_commands | drawing commands]].&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;|'''Graphics Primitive Drawing Functions'''&lt;br /&gt;
*[[osDrawEllipse]] (None)&lt;br /&gt;
*[[osDrawFilledRectangle]] (None)&lt;br /&gt;
*[[osDrawImage]] (None)&lt;br /&gt;
*[[osDrawLine]] (None)&lt;br /&gt;
*[[osDrawRectangle]] (None)&lt;br /&gt;
*[[osMovePen]] (None)&lt;br /&gt;
*[[osSetPenColour]] (None)&lt;br /&gt;
*[[osSetPenSize]] (None)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Text Drawing Functions'''&lt;br /&gt;
*[[osDrawText]] (None)&lt;br /&gt;
*[[osSetFontSize]] (None)&lt;br /&gt;
*[[osGetDrawStringSize]] (VeryLow)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Dynamic Texture Creation Functions'''&lt;br /&gt;
*[[osSetDynamicTextureURL]] (VeryLow)&lt;br /&gt;
*[[osSetDynamicTextureURLBlend]] (VeryLow)&lt;br /&gt;
*[[osSetDynamicTextureURLBlendFace]] (VeryLow)&lt;br /&gt;
*[[osSetDynamicTextureData]] (VeryLow)&lt;br /&gt;
*[[osSetDynamicTextureDataBlend]] (VeryLow)&lt;br /&gt;
*[[osSetDynamicTextureDataBlendFace]] (VeryLow)&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;|'''Graphics Primitive Drawing Commands'''&lt;br /&gt;
*[[Drawing commands#Ellipse|Ellipse]]&lt;br /&gt;
*[[Drawing commands#FillRectangle|FillRectangle]]&lt;br /&gt;
*[[Drawing commands#Image|Image]]&lt;br /&gt;
*[[Drawing commands#LineTo|LineTo]]&lt;br /&gt;
*[[Drawing commands#MoveTo|MoveTo]]&lt;br /&gt;
*[[Drawing commands#PenColour|PenColour]]&lt;br /&gt;
*[[Drawing commands#PenSize|PenSize]]&lt;br /&gt;
*[[Drawing commands#Rectangle|Rectangle]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Text Drawing Commands'''&lt;br /&gt;
*[[Drawing commands#FontName|FontName]]&lt;br /&gt;
*[[Drawing commands#FontProp|FontProp]]&lt;br /&gt;
*[[Drawing commands#FontSize|FontSize]]&lt;br /&gt;
*[[Drawing commands#Text|Text]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsGetDrawStringSize</id>
		<title>OsGetDrawStringSize</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsGetDrawStringSize"/>
				<updated>2009-07-30T13:23:54Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Page created.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[Dynamic textures]] -&amp;gt; [[OsGetDrawStringSize | osGetDrawStringSize]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LSL: '''[[vector]] osGetDrawStringSize( [[string]] contentType, [[string]] text, [[string]] fontName, [[integer]] fontSize )'''&amp;lt;br /&amp;gt;&lt;br /&gt;
C#: '''[[LSL_Vector]] osGetDrawStringSize( [[string]] contentType, [[string]] text, [[string]] fontName, [[int]] fontSize )'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Returns a vector containing the horizontal and vertical dimensions in pixels of the specified text, if drawn in the specified font and at the specified point size. The horizontal extent is returned in the '''.x''' component of the vector, and the vertical extent is returned in '''.y'''.  The '''.z''' component is not used.&lt;br /&gt;
&lt;br /&gt;
The '''contentType''' parameter should be &amp;quot;vector&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
If the '''[[OSSetFontSize | osSetFontSize]]'''() function has not been used, and neither the '''[[Drawing_commands#FontName | FontName]]''' nor '''[[Drawing_commands#FontProp | FontProp]]''' commands have been added to the draw list, specify &amp;quot;Arial&amp;quot; as the font name, and 14 as the font size.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Example of osGetDrawStringSize&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        string CommandList = &amp;quot;&amp;quot;; // Storage for our drawing commands&lt;br /&gt;
        string TextToDraw = &amp;quot;Hello, World!&amp;quot;; // text to draw&lt;br /&gt;
&lt;br /&gt;
        vector Extents = osGetDrawStringSize( &amp;quot;vector&amp;quot;, TextToDraw, &amp;quot;Arial&amp;quot;, 14 );&lt;br /&gt;
&lt;br /&gt;
        integer xpos = 128 - ((integer) Extents.x &amp;gt;&amp;gt; 1);            // Center the text horizontally&lt;br /&gt;
        integer ypos = 127 - ((integer) Extents.y &amp;gt;&amp;gt; 1);            //   and vertically&lt;br /&gt;
        CommandList = osMovePen( CommandList, xpos, ypos );         // Position the text&lt;br /&gt;
        CommandList = osDrawText( CommandList, TextToDraw );        // Place the text&lt;br /&gt;
&lt;br /&gt;
        // Now draw the text&lt;br /&gt;
        osSetDynamicTextureData( &amp;quot;&amp;quot;, &amp;quot;vector&amp;quot;, CommandList, &amp;quot;width:256,height:256&amp;quot;, 0 );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Drawing_commands</id>
		<title>Drawing commands</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Drawing_commands"/>
				<updated>2009-07-30T13:10:23Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: /* FontSize */ Clarify wording&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[Dynamic textures]] -&amp;gt; [[Drawing commands]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The drawing commands are strings of text which are concatenated to create a larger string of graphical instructions, which is then passed as a parameter to the [[Dynamic textures|dynamic texture]] drawing functions. With two exceptions, there are convenience functions, such as [[osDrawRectangle]](), provided to assist in building the command list. It is slightly more efficient to directly manipulate the string containing the drawing commands, as it avoids the overhead of multiple function calls (albeit with an arguable loss of readability).&lt;br /&gt;
&lt;br /&gt;
In general, the drawing commands consist of a case-sensitive token which identifies the command, followed by one or more comma-delimited parameters, and terminating in a separator character (a semicolon by default). Whitespace surrounding the commas and/or separator is permitted.&lt;br /&gt;
&lt;br /&gt;
In the examples which follow, it is assumed that ''CommandList'' is a string variable which has already been defined within the script source code.&lt;br /&gt;
&lt;br /&gt;
==Graphics Primitive Drawing Commands==&lt;br /&gt;
&lt;br /&gt;
===Ellipse===&lt;br /&gt;
&lt;br /&gt;
;Ellipse float width, float height;&lt;br /&gt;
:Draws an ellipse with the current pen size and color.&lt;br /&gt;
&lt;br /&gt;
:The ellipse is drawn with the specified width and height (in pixels), centered on a point which is (width/2) pixels to the right of the pen's current X position, and (height/2) pixels below the pen's current Y position. After the ellipse is drawn, the width and height values are added to the pen's X and Y position, respectively.&lt;br /&gt;
&lt;br /&gt;
:Although the parameters accept floating-point values, anything after a decimal point will be ignored.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;Ellipse 100,100;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===FillRectangle===&lt;br /&gt;
&lt;br /&gt;
;FillRectangle float width, float height;&lt;br /&gt;
:Draws a rectangle, bordered and filled with the current pen size and color.&lt;br /&gt;
&lt;br /&gt;
:The rectangle is drawn at the specified width and height (in pixels), with the upper left corner of the rectangle placed at the pen's current position. After the rectangle is drawn, the width and height values are added to the pen's X and Y position, respectively.&lt;br /&gt;
&lt;br /&gt;
:Although the parameters accept floating-point values, anything after a decimal point will be ignored.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;FillRectangle 150,75;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Image===&lt;br /&gt;
&lt;br /&gt;
;Image float height, float width, string URL;&lt;br /&gt;
:Retrieves an image specified by the URL parameter and draws it at the specified height and width, with the upper left corner of the image placed at the pen's current position. After the image is drawn, the width and height values are added to the pen's X and Y position, respectively.&lt;br /&gt;
&lt;br /&gt;
:If the URL points to an invalid location, an image type not supported by libgdi, or a non-image MIME type, nothing is drawn. If either or both of the '''width''' or '''height''' parameters are zero or negative, nothing is drawn, but the image is still retrieved.&lt;br /&gt;
&lt;br /&gt;
:Although the '''width''' and '''height''' parameters accept floating-point values, anything after a decimal point will be ignored.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;Image 293,62,&amp;lt;nowiki&amp;gt;http://opensimulator.org/skins/osmonobook/images/headerLogo.png&amp;lt;/nowiki&amp;gt;;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===LineTo===&lt;br /&gt;
&lt;br /&gt;
;LineTo float x, float y;&lt;br /&gt;
:Draws a line from the pen's current location to the specified coordinates, using the pen's current color and width.&lt;br /&gt;
&lt;br /&gt;
:After the line is drawn, the specified coordinates become the pen's new current location.&lt;br /&gt;
&lt;br /&gt;
:Although the parameters accept floating-point values, anything after a decimal point will be ignored.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;LineTo 640,480;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===MoveTo===&lt;br /&gt;
&lt;br /&gt;
;MoveTo float x, float y;&lt;br /&gt;
:Updates the pen's current position to the coordinates provided in the parameters. Nothing is drawn.&lt;br /&gt;
&lt;br /&gt;
:Although the parameters accept floating-point values, anything after a decimal point will be ignored.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;MoveTo 570,23;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===PenColour===&lt;br /&gt;
&lt;br /&gt;
;PenColour string NewColor;&lt;br /&gt;
:Sets the pen's drawing color to either the specified [http://msdn.microsoft.com/en-us/library/aa358802.aspx named .NET color] or to a 32-bit color value (formatted as eight hexadecimal digits in the format aarrggbb, representing the eight-bit alpha, red, green and blue channels).&lt;br /&gt;
&lt;br /&gt;
:For full opacity, use an alpha value of ff (e.g. &amp;lt;tt&amp;gt;ffff0000&amp;lt;/tt&amp;gt; for red); for varying degrees of transparency, reduce the alpha value (e.g. &amp;lt;tt&amp;gt;800000ff&amp;lt;/tt&amp;gt; for half-transparent blue).&lt;br /&gt;
&lt;br /&gt;
:The color names and hexadecimal color representations are not case-sensitive.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;PenColour MidnightBlue;&amp;quot;;&lt;br /&gt;
CommandList += &amp;quot;PenColour ff191970;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===PenSize===&lt;br /&gt;
&lt;br /&gt;
;PenSize float width;&lt;br /&gt;
:Sets the pen size to a square of '''width''' pixels by '''width''' pixels. If '''width''' is an odd number, the pen will be exactly centered on the coordinates provided in the various drawing commands; if it is an even number, it will be centered slightly higher and to the left of the actual coordinates.&lt;br /&gt;
&lt;br /&gt;
:Although the parameter accepts a floating-point value, anything following a decimal point will be ignored.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;PenSize 5;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Rectangle===&lt;br /&gt;
&lt;br /&gt;
;Rectangle float width, float height;&lt;br /&gt;
:Draws an unfilled rectangle, using the current pen size and color.&lt;br /&gt;
&lt;br /&gt;
:The rectangle is drawn at the specified width and height (in pixels), with the upper left corner of the rectangle placed at the pen's current position. After the rectangle is drawn, the width and height values are added to the pen's X and Y position, respectively.&lt;br /&gt;
&lt;br /&gt;
:Although the parameters accept floating-point values, anything after a decimal point will be ignored.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;Rectangle 150,75;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text Drawing Commands==&lt;br /&gt;
&lt;br /&gt;
===FontName===&lt;br /&gt;
&lt;br /&gt;
;FontName string fontname;&lt;br /&gt;
:Sets the font used by the '''[[#Text|Text]]''' command. If the specified font is not installed on the system, the default font (Arial or its local equivalent) is used.&lt;br /&gt;
&lt;br /&gt;
:There is no equivalent convenience function; if you wish to change the font used by the '''[[#Text|Text]]''' command, you must manipulate the string directly.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;FontName Times New Roman;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===FontProp===&lt;br /&gt;
&lt;br /&gt;
;FontProp string properties;&lt;br /&gt;
:Sets the text display properties (Regular, Boldface, Underline, Italic and Strikeout) used by subsequent '''[[#Text|Text]]''' calls. The properties are represented by single letters (R,B,U,I and S, respectively), separated by commas. 'R' is a special case which turns off all other properties, while the others are additive.&lt;br /&gt;
&lt;br /&gt;
:There is no equivalent convenience function; if you wish to change the properties of the font used by the '''[[#Text|Text]]''' command, you must manipulate the string directly.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;FontProp B,I;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===FontSize===&lt;br /&gt;
&lt;br /&gt;
;FontSize float size;&lt;br /&gt;
:Sets the font size used by subsequent '''[[#Text|Text]]''' commands. The '''size''' parameter represents the font height in points. &lt;br /&gt;
&lt;br /&gt;
:Please note that the font height is given in ''points'', not in ''pixels''. The resulting size of the font in pixels may vary depending on the system settings, specifically the display system's &amp;quot;dots per inch&amp;quot; metric.  A system set to 96dpi will produce differently sized text than a system set to 120dpi. If precise text size is required, consider using the [[osGetDrawStringSize]]() function to help calculate the proper FontSize value to use (but bear in mind that [[osGetDrawStringSize]]() takes an integer parameter for the size, whereas FontSize does use floating-point values).&lt;br /&gt;
&lt;br /&gt;
:Unlike the other drawing commands, anything following a decimal point in the '''size''' parameter is significant.&lt;br /&gt;
&lt;br /&gt;
:If a negative FontSize parameter is specified, any text subsequently added will be displayed upside down and to the right of the point of origin.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;FontSize 12;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Text===&lt;br /&gt;
&lt;br /&gt;
;Text string text;&lt;br /&gt;
:Draws the specified string of text with the current pen color, using the currently defined [[#FontName|font]], [[#FontSize|size]] and [[#FontProp|properties]] (which default to regular 14-point Arial).&lt;br /&gt;
&lt;br /&gt;
:The text will be drawn with the upper left corner of the first glyph at the pen's current position (however, note that glyphs within the font may be defined to extend to the left of their origin point).&lt;br /&gt;
&lt;br /&gt;
:If you need to include a semicolon in the text to be displayed, you will have to change the command delimiter in the &amp;lt;tt&amp;gt;extraParams&amp;lt;/tt&amp;gt; parameter to the osSetDynamicTexture* functions. However, this will require that ''all'' commands be terminated with the alternate delimiter, and you cannot use the convenience functions (which are hardcoded to use a semicolon).&lt;br /&gt;
&lt;br /&gt;
:The text may or may not be antialiased, depending on the system settings of the machine upon which the simulator is running. Furthermore, if the system is configured to use LCD subpixel antialiasing (e.g. ClearType), the text may have colored fringes on the smoothed pixels, which may result in a less than optimum image.&lt;br /&gt;
&lt;br /&gt;
:Please note that the pen position is ''not'' updated after this call.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;Text Nobody here but us hippos!;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsSetFontSize</id>
		<title>OsSetFontSize</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsSetFontSize"/>
				<updated>2009-07-30T13:09:29Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Page created.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[Dynamic textures]] -&amp;gt; [[OsSetFontSize | osSetFontSize]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LSL: '''[[string]] osSetFontSize( [[string]] drawList, [[integer]] fontSize )'''&amp;lt;br /&amp;gt;&lt;br /&gt;
C#: '''[[string]] osSetFontSize( [[string]] drawList, [[int]] fontSize )'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Appends a [[Drawing_commands#FontSize|FontSize]] drawing command to the string provided in '''drawList''' and returns the result.&lt;br /&gt;
&lt;br /&gt;
Sets the size of the font used by subsequent '''[[OsDrawText | osDrawTextText]]'''() calls. The '''fontSize''' parameter represents the font height in points. &lt;br /&gt;
&lt;br /&gt;
Please note that the font height is given in ''points'', not in ''pixels''. The resulting size of the font in pixels may vary depending on the system settings, specifically the display system's &amp;quot;dots per inch&amp;quot; metric.  A system set to 96dpi will produce differently sized text than a system set to 120dpi. If precise text size is required, consider using the [[osGetDrawStringSize]]() function to help calculate the proper fontSize value to use.&lt;br /&gt;
&lt;br /&gt;
If a negative '''fontSize''' parameter is specified, any text subsequently added will be displayed upside down and to the right of the point of origin.&lt;br /&gt;
&lt;br /&gt;
Please note that the pen position is ''not'' updated after this call.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Example of osDrawText&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        string CommandList = &amp;quot;&amp;quot;; // Storage for our drawing commands&lt;br /&gt;
&lt;br /&gt;
        CommandList = osMovePen( CommandList, 10, 10 );             // Upper left corner at &amp;lt;10,10&amp;gt;&lt;br /&gt;
        CommandList = osSetFontSize( CommandList, 10 );             // Use 10-point text&lt;br /&gt;
        CommandList = osDrawText( CommandList, &amp;quot;Ten points!&amp;quot; );     // Place some text&lt;br /&gt;
        CommandList = osMovePen( CommandList, 10, 27 );             // New text placement&lt;br /&gt;
        CommandList = osSetFontSize( CommandList, 15 );             // Use 10-point text&lt;br /&gt;
        CommandList = osDrawText( CommandList, &amp;quot;Fifteen points!&amp;quot; ); // Place some text&lt;br /&gt;
        CommandList = osMovePen( CommandList, 10, 50 );             // New text placement&lt;br /&gt;
        CommandList = osSetFontSize( CommandList, 20 );             // Use 10-point text&lt;br /&gt;
        CommandList = osDrawText( CommandList, &amp;quot;Twenty points!&amp;quot; );  // Place some text&lt;br /&gt;
&lt;br /&gt;
        // Now draw the image&lt;br /&gt;
        osSetDynamicTextureData( &amp;quot;&amp;quot;, &amp;quot;vector&amp;quot;, CommandList, &amp;quot;width:256,height:256&amp;quot;, 0 );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsDrawText</id>
		<title>OsDrawText</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsDrawText"/>
				<updated>2009-07-30T12:59:59Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Reword the return value line to be more specific.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[Dynamic textures]] -&amp;gt; [[OsDrawText | osDrawText]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LSL: '''[[string]] osDrawText( [[string]] drawList, [[string]] text )'''&amp;lt;br /&amp;gt;&lt;br /&gt;
C#: '''[[string]] osDrawText( [[string]] drawList, [[string]] text )'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Appends a [[Drawing_commands#Text|Text]] drawing command to the string provided in '''drawList''' and returns the result.&lt;br /&gt;
&lt;br /&gt;
The specified text will be drawn with the current pen color, using the currently defined [[Drawing_commands#FontName|font]], [[OsSetFontSize|size]] and [[Drawing_commands#FontProp|properties]] (which default to regular 14-point Arial).&lt;br /&gt;
&lt;br /&gt;
The text will be drawn with the upper left corner of the first glyph at the pen's current position (however, note that glyphs within the font may be defined to extend to the left of their origin point).&lt;br /&gt;
&lt;br /&gt;
If you need to include a semicolon in the text to be displayed, you will need to directly manipulate the draw list string using the [[Drawing_commands|drawing commands]] rather than the dynamic texture convenience functions, then specify an alternate data delimiter in the &amp;lt;tt&amp;gt;extraParams&amp;lt;/tt&amp;gt; parameter to the &amp;lt;tt&amp;gt;osSetDynamicTexture*&amp;lt;/tt&amp;gt; functions. The convenience functions (including '''osDrawImage''') are hardcoded to terminate each command with a semicolon.&lt;br /&gt;
&lt;br /&gt;
The text may or may not be antialiased, depending on the system settings of the machine upon which the simulator is running. Furthermore, if the system is configured to use LCD subpixel antialiasing (e.g. ClearType), the text may have colored fringes on the smoothed pixels, which may result in a less than optimum image.&lt;br /&gt;
&lt;br /&gt;
Please note that the pen position is ''not'' updated after this call.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Example of osDrawText&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        string CommandList = &amp;quot;&amp;quot;; // Storage for our drawing commands&lt;br /&gt;
&lt;br /&gt;
        CommandList = osMovePen( CommandList, 10, 10 );           // Upper left corner at &amp;lt;10,10&amp;gt;&lt;br /&gt;
        CommandList = osDrawText( CommandList, &amp;quot;Hello, World!&amp;quot; ); // Place some text&lt;br /&gt;
&lt;br /&gt;
        // Now draw the image&lt;br /&gt;
        osSetDynamicTextureData( &amp;quot;&amp;quot;, &amp;quot;vector&amp;quot;, CommandList, &amp;quot;width:256,height:256&amp;quot;, 0 );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsSetPenSize</id>
		<title>OsSetPenSize</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsSetPenSize"/>
				<updated>2009-07-30T12:58:25Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Identify the return value.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[Dynamic textures]] -&amp;gt; [[OsSetPenSize | osSetPenSize]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LSL: '''[[string]] osSetPenSize( [[string]] drawList, [[integer]] penSize )'''&amp;lt;br /&amp;gt;&lt;br /&gt;
C#: '''[[string]] osDrawLine( [[string]] drawList, [[int]] penSize )'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Appends a [[Drawing_commands#PenSize|PenSize]] drawing command to the string provided in '''drawList''' and returns the result.&lt;br /&gt;
&lt;br /&gt;
This sets the pen size to a square of '''penSize''' pixels by '''penSize''' pixels. If '''penSize''' is an odd number, the pen will be exactly centered on the coordinates provided in the various drawing commands; if it is an even number, it will be centered slightly higher and to the left of the actual coordinates. &lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Example of osSetPenSize&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        string CommandList = &amp;quot;&amp;quot;; // Storage for our drawing commands&lt;br /&gt;
        integer i;&lt;br /&gt;
&lt;br /&gt;
        CommandList = osSetPenColour( CommandList, &amp;quot;Red&amp;quot; );        // Set the pen color to red&lt;br /&gt;
        &lt;br /&gt;
        for (i = 1; i &amp;lt; 13; ++i)&lt;br /&gt;
        {&lt;br /&gt;
            CommandList = osSetPenSize( CommandList, i );                 // Set the pen size&lt;br /&gt;
            CommandList = osDrawLine( CommandList, 15, i*20, 241, i*20 ); // Draw a horizontal line&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Now draw the lines&lt;br /&gt;
        osSetDynamicTextureData( &amp;quot;&amp;quot;, &amp;quot;vector&amp;quot;, CommandList, &amp;quot;width:256,height:256&amp;quot;, 0 );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsSetPenColour</id>
		<title>OsSetPenColour</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsSetPenColour"/>
				<updated>2009-07-30T12:57:19Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Identify the return value.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[Dynamic textures]] -&amp;gt; [[OsSetPenColour | osSetPenColour]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LSL: '''[[string]] osSetPenColour( [[string]] drawList, string colour )'''&amp;lt;br /&amp;gt;&lt;br /&gt;
C#: '''[[string]] osMovePen( [[string]] drawList, string colour )'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Appends a [[Drawing_commands#PenColour|PenColour]] drawing command to the string provided in '''drawList''' and returns the result.&lt;br /&gt;
&lt;br /&gt;
This sets the pen's drawing color to either the specified [http://msdn.microsoft.com/en-us/library/aa358802.aspx named .NET color] or to a 32-bit color value (formatted as eight hexadecimal digits in the format aarrggbb, representing the eight-bit alpha, red, green and blue channels).&lt;br /&gt;
&lt;br /&gt;
For full opacity, use an alpha value of ff (e.g. &amp;lt;tt&amp;gt;ffff0000&amp;lt;/tt&amp;gt; for red); for varying degrees of transparency, reduce the alpha value (e.g. &amp;lt;tt&amp;gt;800000ff&amp;lt;/tt&amp;gt; for half-transparent blue).&lt;br /&gt;
&lt;br /&gt;
The color names and hexadecimal color representations are not case-sensitive.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Example of osSetPenColour&lt;br /&gt;
&lt;br /&gt;
string hexDigits = &amp;quot;0123456789abcdef&amp;quot;;&lt;br /&gt;
list colorNames  = [ &amp;quot;AliceBlue&amp;quot;, &amp;quot;AntiqueWhite&amp;quot;, &amp;quot;Aqua&amp;quot;, &amp;quot;Aquamarine&amp;quot;, &amp;quot;Azure&amp;quot;, &amp;quot;Beige&amp;quot;, &amp;quot;Bisque&amp;quot;,&lt;br /&gt;
                     &amp;quot;Black&amp;quot;, &amp;quot;BlanchedAlmond&amp;quot;, &amp;quot;Blue&amp;quot;, &amp;quot;BlueViolet&amp;quot;, &amp;quot;Brown&amp;quot;, &amp;quot;BurlyWood&amp;quot;,&lt;br /&gt;
                     &amp;quot;CadetBlue&amp;quot;, &amp;quot;Chartreuse&amp;quot;, &amp;quot;Chocolate&amp;quot;, &amp;quot;Coral&amp;quot;, &amp;quot;CornflowerBlue&amp;quot;, &amp;quot;Cornsilk&amp;quot;,&lt;br /&gt;
                     &amp;quot;Crimson&amp;quot;, &amp;quot;Cyan&amp;quot;, &amp;quot;DarkBlue&amp;quot;, &amp;quot;DarkCyan&amp;quot;, &amp;quot;DarkGoldenrod&amp;quot;, &amp;quot;DarkGrey&amp;quot;,&lt;br /&gt;
                     &amp;quot;DarkGreen&amp;quot;, &amp;quot;DarkKhaki&amp;quot;, &amp;quot;DarkMagenta&amp;quot;, &amp;quot;DarkOliveGreen&amp;quot;, &amp;quot;DarkOrange&amp;quot;,&lt;br /&gt;
                     &amp;quot;DarkOrchid&amp;quot;, &amp;quot;DarkRed&amp;quot;, &amp;quot;DarkSalmon&amp;quot;, &amp;quot;DarkSeaGreen&amp;quot;, &amp;quot;DarkSlateBlue&amp;quot;,&lt;br /&gt;
                     &amp;quot;DarkSlateGrey&amp;quot;, &amp;quot;DarkTurquoise&amp;quot;, &amp;quot;DarkViolet&amp;quot;, &amp;quot;DeepPink&amp;quot;, &amp;quot;DeepSkyBlue&amp;quot;,&lt;br /&gt;
                     &amp;quot;DimGrey&amp;quot;, &amp;quot;DodgerBlue&amp;quot;, &amp;quot;FireBrick&amp;quot;, &amp;quot;FloralWhite&amp;quot;, &amp;quot;ForestGreen&amp;quot;, &amp;quot;Fuchsia&amp;quot;,&lt;br /&gt;
                     &amp;quot;Gainsboro&amp;quot;, &amp;quot;GhostWhite&amp;quot;, &amp;quot;Gold&amp;quot;, &amp;quot;Goldenrod&amp;quot;, &amp;quot;Grey&amp;quot;, &amp;quot;Green&amp;quot;, &amp;quot;GreenYellow&amp;quot;,&lt;br /&gt;
                     &amp;quot;Honeydew&amp;quot;, &amp;quot;HotPink&amp;quot;, &amp;quot;IndianRed&amp;quot;, &amp;quot;Indigo&amp;quot;, &amp;quot;Ivory&amp;quot;, &amp;quot;Khaki&amp;quot;, &amp;quot;Lavender&amp;quot;,&lt;br /&gt;
                     &amp;quot;LavenderBlush&amp;quot;, &amp;quot;LawnGreen&amp;quot;, &amp;quot;LemonChiffon&amp;quot;, &amp;quot;LightBlue&amp;quot;, &amp;quot;LightCoral&amp;quot;,&lt;br /&gt;
                     &amp;quot;LightCyan&amp;quot;, &amp;quot;LightGoldenrodYellow&amp;quot;, &amp;quot;LightGreen&amp;quot;, &amp;quot;LightGrey&amp;quot;, &amp;quot;LightPink&amp;quot;,&lt;br /&gt;
                     &amp;quot;LightSalmon&amp;quot;, &amp;quot;LightSeaGreen&amp;quot;, &amp;quot;LightSkyBlue&amp;quot;, &amp;quot;LightSlateGrey&amp;quot;,&lt;br /&gt;
                     &amp;quot;LightSteelBlue&amp;quot;, &amp;quot;LightYellow&amp;quot;, &amp;quot;Lime&amp;quot;, &amp;quot;LimeGreen&amp;quot;, &amp;quot;Linen&amp;quot;, &amp;quot;Magenta&amp;quot;,&lt;br /&gt;
                     &amp;quot;Maroon&amp;quot;, &amp;quot;MediumAquamarine&amp;quot;, &amp;quot;MediumBlue&amp;quot;, &amp;quot;MediumOrchid&amp;quot;, &amp;quot;MediumPurple&amp;quot;,&lt;br /&gt;
                     &amp;quot;MediumSeaGreen&amp;quot;, &amp;quot;MediumSlateBlue&amp;quot;, &amp;quot;MediumSpringGreen&amp;quot;, &amp;quot;MediumTurquoise&amp;quot;,&lt;br /&gt;
                     &amp;quot;MediumVioletRed&amp;quot;, &amp;quot;MidnightBlue&amp;quot;, &amp;quot;MintCream&amp;quot;, &amp;quot;MistyRose&amp;quot;, &amp;quot;Moccasin&amp;quot;,&lt;br /&gt;
                     &amp;quot;NavajoWhite&amp;quot;, &amp;quot;Navy&amp;quot;, &amp;quot;OldLace&amp;quot;, &amp;quot;Olive&amp;quot;, &amp;quot;OliveDrab&amp;quot;, &amp;quot;Orange&amp;quot;, &amp;quot;OrangeRed&amp;quot;,&lt;br /&gt;
                     &amp;quot;Orchid&amp;quot;, &amp;quot;PaleGoldenrod&amp;quot;, &amp;quot;PaleGreen&amp;quot;, &amp;quot;PaleTurquoise&amp;quot;, &amp;quot;PaleVioletRed&amp;quot;,&lt;br /&gt;
                     &amp;quot;PapayaWhip&amp;quot;, &amp;quot;PeachPuff&amp;quot;, &amp;quot;Peru&amp;quot;, &amp;quot;Pink&amp;quot;, &amp;quot;Plum&amp;quot;, &amp;quot;PowderBlue&amp;quot;, &amp;quot;Purple&amp;quot;,&lt;br /&gt;
                     &amp;quot;Red&amp;quot;, &amp;quot;RosyBrown&amp;quot;, &amp;quot;RoyalBlue&amp;quot;, &amp;quot;SaddleBrown&amp;quot;, &amp;quot;Salmon&amp;quot;, &amp;quot;SandyBrown&amp;quot;,&lt;br /&gt;
                     &amp;quot;SeaGreen&amp;quot;, &amp;quot;Seashell&amp;quot;, &amp;quot;Sienna&amp;quot;, &amp;quot;Silver&amp;quot;, &amp;quot;SkyBlue&amp;quot;, &amp;quot;SlateBlue&amp;quot;, &amp;quot;SlateGrey&amp;quot;,&lt;br /&gt;
                     &amp;quot;Snow&amp;quot;, &amp;quot;SpringGreen&amp;quot;, &amp;quot;SteelBlue&amp;quot;, &amp;quot;Tan&amp;quot;, &amp;quot;Teal&amp;quot;, &amp;quot;Thistle&amp;quot;, &amp;quot;Tomato&amp;quot;,&lt;br /&gt;
                     &amp;quot;Turquoise&amp;quot;, &amp;quot;Violet&amp;quot;, &amp;quot;Wheat&amp;quot;, &amp;quot;White&amp;quot;, &amp;quot;WhiteSmoke&amp;quot;, &amp;quot;Yellow&amp;quot;, &amp;quot;YellowGreen&amp;quot; ];&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        string CommandList = &amp;quot;&amp;quot;;                              // Storage for our drawing commands&lt;br /&gt;
        integer i;&lt;br /&gt;
&lt;br /&gt;
        CommandList = osSetPenSize( CommandList, 1 );         // Set the pen width to 1 pixel&lt;br /&gt;
&lt;br /&gt;
        for (i = 0; i &amp;lt; 140; ++i) // draw each named color as a single horizontal line&lt;br /&gt;
        {&lt;br /&gt;
            // Set the pen to the next color name in our list&lt;br /&gt;
            CommandList = osSetPenColour( CommandList, llList2String( colorNames, i ));&lt;br /&gt;
            // Now draw a line in that color&lt;br /&gt;
            CommandList = osDrawLine( CommandList, 0, i, 255, i );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Now let's fill up the remainder with lines of random colors, leaving a gap of 20 lines.&lt;br /&gt;
        for (i = 161; i &amp;lt; 256; ++i)&lt;br /&gt;
        {&lt;br /&gt;
            string thisColor = &amp;quot;ff&amp;quot;; // give it an opaque alpha&lt;br /&gt;
            integer j;&lt;br /&gt;
            for (j = 0; j &amp;lt; 6; ++j) // then choose six random hex digits for the color&lt;br /&gt;
            {&lt;br /&gt;
                integer k = (integer) llFrand( 16.0 );&lt;br /&gt;
                thisColor += llGetSubString( hexDigits, k, k );&lt;br /&gt;
            }&lt;br /&gt;
            CommandList = osSetPenColour( CommandList, thisColor );&lt;br /&gt;
            CommandList = osDrawLine( CommandList, 0, i, 255, i );&lt;br /&gt;
        }&lt;br /&gt;
        // Now generate the texture and apply it to the prim&lt;br /&gt;
        osSetDynamicTextureData( &amp;quot;&amp;quot;, &amp;quot;vector&amp;quot;, CommandList, &amp;quot;width:256,height:256&amp;quot;, 0 );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsMovePen</id>
		<title>OsMovePen</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsMovePen"/>
				<updated>2009-07-30T12:55:59Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Identify the return value.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[Dynamic textures]] -&amp;gt; [[OsMovePen | osMovePen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LSL: '''[[string]] osMovePen( [[string]] drawList, [[integer]] x, [[integer]] y )'''&amp;lt;br /&amp;gt;&lt;br /&gt;
C#: '''[[string]] osMovePen( [[string]] drawList, [[int]] x, [[int]] y )'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Appends a [[Drawing_commands#MoveTo|MoveTo]] drawing command to the string provided in '''drawList''' and returns the result.&lt;br /&gt;
&lt;br /&gt;
This moves the pen's location to the coordinates specified by the '''x''' and '''y''' parameters, without drawing anything.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Example of osMovePen&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        string CommandList = &amp;quot;&amp;quot;; // Storage for our drawing commands&lt;br /&gt;
        integer i;&lt;br /&gt;
&lt;br /&gt;
        CommandList = osSetPenSize( CommandList, 3 );              // Set the pen width to 3 pixels&lt;br /&gt;
        CommandList = osSetPenColour( CommandList, &amp;quot;Blue&amp;quot; );       // Set the pen color to blue&lt;br /&gt;
&lt;br /&gt;
        for (i = 0; i &amp;lt; 256; i += 20)&lt;br /&gt;
        {&lt;br /&gt;
          CommandList = osMovePen( CommandList, 255, i );          // Move to the right side&lt;br /&gt;
          CommandList = osDrawLine( CommandList, 0, i+20 );        // Draw left and slightly down&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Now draw the lines&lt;br /&gt;
        osSetDynamicTextureData( &amp;quot;&amp;quot;, &amp;quot;vector&amp;quot;, CommandList, &amp;quot;width:256,height:256&amp;quot;, 0 );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsDrawText</id>
		<title>OsDrawText</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsDrawText"/>
				<updated>2009-07-30T12:53:27Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Page created.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[Dynamic textures]] -&amp;gt; [[OsDrawText | osDrawText]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LSL: '''[[string]] osDrawText( [[string]] drawList, [[string]] text )'''&amp;lt;br /&amp;gt;&lt;br /&gt;
C#: '''[[string]] osDrawText( [[string]] drawList, [[string]] text )'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Returns the [[Drawing_commands | drawing commands]] to draw the specified text on the dynamic texture, appended to the string provided in '''drawList'''.&lt;br /&gt;
&lt;br /&gt;
The specified text will be drawn with the current pen color, using the currently defined [[Drawing_commands#FontName|font]], [[OsSetFontSize|size]] and [[Drawing_commands#FontProp|properties]] (which default to regular 14-point Arial).&lt;br /&gt;
&lt;br /&gt;
The text will be drawn with the upper left corner of the first glyph at the pen's current position (however, note that glyphs within the font may be defined to extend to the left of their origin point).&lt;br /&gt;
&lt;br /&gt;
If you need to include a semicolon in the text to be displayed, you will need to directly manipulate the draw list string using the [[Drawing_commands|drawing commands]] rather than the dynamic texture convenience functions, then specify an alternate data delimiter in the &amp;lt;tt&amp;gt;extraParams&amp;lt;/tt&amp;gt; parameter to the &amp;lt;tt&amp;gt;osSetDynamicTexture*&amp;lt;/tt&amp;gt; functions. The convenience functions (including '''osDrawImage''') are hardcoded to terminate each command with a semicolon.&lt;br /&gt;
&lt;br /&gt;
The text may or may not be antialiased, depending on the system settings of the machine upon which the simulator is running. Furthermore, if the system is configured to use LCD subpixel antialiasing (e.g. ClearType), the text may have colored fringes on the smoothed pixels, which may result in a less than optimum image.&lt;br /&gt;
&lt;br /&gt;
Please note that the pen position is ''not'' updated after this call.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Example of osDrawText&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        string CommandList = &amp;quot;&amp;quot;; // Storage for our drawing commands&lt;br /&gt;
&lt;br /&gt;
        CommandList = osMovePen( CommandList, 10, 10 );           // Upper left corner at &amp;lt;10,10&amp;gt;&lt;br /&gt;
        CommandList = osDrawText( CommandList, &amp;quot;Hello, World!&amp;quot; ); // Place some text&lt;br /&gt;
&lt;br /&gt;
        // Now draw the image&lt;br /&gt;
        osSetDynamicTextureData( &amp;quot;&amp;quot;, &amp;quot;vector&amp;quot;, CommandList, &amp;quot;width:256,height:256&amp;quot;, 0 );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsSetPenSize</id>
		<title>OsSetPenSize</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsSetPenSize"/>
				<updated>2009-07-28T00:21:20Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Page created.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[Dynamic textures]] -&amp;gt; [[OsSetPenSize | osSetPenSize]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LSL: '''[[string]] osSetPenSize( [[string]] drawList, [[integer]] penSize )'''&amp;lt;br /&amp;gt;&lt;br /&gt;
C#: '''[[string]] osDrawLine( [[string]] drawList, [[int]] penSize )'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sets the pen size to a square of '''penSize''' pixels by '''penSize''' pixels. If '''penSize''' is an odd number, the pen will be exactly centered on the coordinates provided in the various drawing commands; if it is an even number, it will be centered slightly higher and to the left of the actual coordinates. &lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Example of osSetPenSize&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        string CommandList = &amp;quot;&amp;quot;; // Storage for our drawing commands&lt;br /&gt;
        integer i;&lt;br /&gt;
&lt;br /&gt;
        CommandList = osSetPenColour( CommandList, &amp;quot;Red&amp;quot; );        // Set the pen color to red&lt;br /&gt;
        &lt;br /&gt;
        for (i = 1; i &amp;lt; 13; ++i)&lt;br /&gt;
        {&lt;br /&gt;
            CommandList = osSetPenSize( CommandList, i );                 // Set the pen size&lt;br /&gt;
            CommandList = osDrawLine( CommandList, 15, i*20, 241, i*20 ); // Draw a horizontal line&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Now draw the lines&lt;br /&gt;
        osSetDynamicTextureData( &amp;quot;&amp;quot;, &amp;quot;vector&amp;quot;, CommandList, &amp;quot;width:256,height:256&amp;quot;, 0 );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsSetPenColour</id>
		<title>OsSetPenColour</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsSetPenColour"/>
				<updated>2009-07-28T00:19:53Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Copypasta error&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[Dynamic textures]] -&amp;gt; [[OsSetPenColour | osSetPenColour]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LSL: '''[[string]] osSetPenColour( [[string]] drawList, string colour )'''&amp;lt;br /&amp;gt;&lt;br /&gt;
C#: '''[[string]] osMovePen( [[string]] drawList, string colour )'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sets the pen's drawing color to either the specified [http://msdn.microsoft.com/en-us/library/aa358802.aspx named .NET color] or to a 32-bit color value (formatted as eight hexadecimal digits in the format aarrggbb, representing the eight-bit alpha, red, green and blue channels).&lt;br /&gt;
&lt;br /&gt;
For full opacity, use an alpha value of ff (e.g. &amp;lt;tt&amp;gt;ffff0000&amp;lt;/tt&amp;gt; for red); for varying degrees of transparency, reduce the alpha value (e.g. &amp;lt;tt&amp;gt;800000ff&amp;lt;/tt&amp;gt; for half-transparent blue).&lt;br /&gt;
&lt;br /&gt;
The color names and hexadecimal color representations are not case-sensitive.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Example of osSetPenColour&lt;br /&gt;
&lt;br /&gt;
string hexDigits = &amp;quot;0123456789abcdef&amp;quot;;&lt;br /&gt;
list colorNames  = [ &amp;quot;AliceBlue&amp;quot;, &amp;quot;AntiqueWhite&amp;quot;, &amp;quot;Aqua&amp;quot;, &amp;quot;Aquamarine&amp;quot;, &amp;quot;Azure&amp;quot;, &amp;quot;Beige&amp;quot;, &amp;quot;Bisque&amp;quot;,&lt;br /&gt;
                     &amp;quot;Black&amp;quot;, &amp;quot;BlanchedAlmond&amp;quot;, &amp;quot;Blue&amp;quot;, &amp;quot;BlueViolet&amp;quot;, &amp;quot;Brown&amp;quot;, &amp;quot;BurlyWood&amp;quot;,&lt;br /&gt;
                     &amp;quot;CadetBlue&amp;quot;, &amp;quot;Chartreuse&amp;quot;, &amp;quot;Chocolate&amp;quot;, &amp;quot;Coral&amp;quot;, &amp;quot;CornflowerBlue&amp;quot;, &amp;quot;Cornsilk&amp;quot;,&lt;br /&gt;
                     &amp;quot;Crimson&amp;quot;, &amp;quot;Cyan&amp;quot;, &amp;quot;DarkBlue&amp;quot;, &amp;quot;DarkCyan&amp;quot;, &amp;quot;DarkGoldenrod&amp;quot;, &amp;quot;DarkGrey&amp;quot;,&lt;br /&gt;
                     &amp;quot;DarkGreen&amp;quot;, &amp;quot;DarkKhaki&amp;quot;, &amp;quot;DarkMagenta&amp;quot;, &amp;quot;DarkOliveGreen&amp;quot;, &amp;quot;DarkOrange&amp;quot;,&lt;br /&gt;
                     &amp;quot;DarkOrchid&amp;quot;, &amp;quot;DarkRed&amp;quot;, &amp;quot;DarkSalmon&amp;quot;, &amp;quot;DarkSeaGreen&amp;quot;, &amp;quot;DarkSlateBlue&amp;quot;,&lt;br /&gt;
                     &amp;quot;DarkSlateGrey&amp;quot;, &amp;quot;DarkTurquoise&amp;quot;, &amp;quot;DarkViolet&amp;quot;, &amp;quot;DeepPink&amp;quot;, &amp;quot;DeepSkyBlue&amp;quot;,&lt;br /&gt;
                     &amp;quot;DimGrey&amp;quot;, &amp;quot;DodgerBlue&amp;quot;, &amp;quot;FireBrick&amp;quot;, &amp;quot;FloralWhite&amp;quot;, &amp;quot;ForestGreen&amp;quot;, &amp;quot;Fuchsia&amp;quot;,&lt;br /&gt;
                     &amp;quot;Gainsboro&amp;quot;, &amp;quot;GhostWhite&amp;quot;, &amp;quot;Gold&amp;quot;, &amp;quot;Goldenrod&amp;quot;, &amp;quot;Grey&amp;quot;, &amp;quot;Green&amp;quot;, &amp;quot;GreenYellow&amp;quot;,&lt;br /&gt;
                     &amp;quot;Honeydew&amp;quot;, &amp;quot;HotPink&amp;quot;, &amp;quot;IndianRed&amp;quot;, &amp;quot;Indigo&amp;quot;, &amp;quot;Ivory&amp;quot;, &amp;quot;Khaki&amp;quot;, &amp;quot;Lavender&amp;quot;,&lt;br /&gt;
                     &amp;quot;LavenderBlush&amp;quot;, &amp;quot;LawnGreen&amp;quot;, &amp;quot;LemonChiffon&amp;quot;, &amp;quot;LightBlue&amp;quot;, &amp;quot;LightCoral&amp;quot;,&lt;br /&gt;
                     &amp;quot;LightCyan&amp;quot;, &amp;quot;LightGoldenrodYellow&amp;quot;, &amp;quot;LightGreen&amp;quot;, &amp;quot;LightGrey&amp;quot;, &amp;quot;LightPink&amp;quot;,&lt;br /&gt;
                     &amp;quot;LightSalmon&amp;quot;, &amp;quot;LightSeaGreen&amp;quot;, &amp;quot;LightSkyBlue&amp;quot;, &amp;quot;LightSlateGrey&amp;quot;,&lt;br /&gt;
                     &amp;quot;LightSteelBlue&amp;quot;, &amp;quot;LightYellow&amp;quot;, &amp;quot;Lime&amp;quot;, &amp;quot;LimeGreen&amp;quot;, &amp;quot;Linen&amp;quot;, &amp;quot;Magenta&amp;quot;,&lt;br /&gt;
                     &amp;quot;Maroon&amp;quot;, &amp;quot;MediumAquamarine&amp;quot;, &amp;quot;MediumBlue&amp;quot;, &amp;quot;MediumOrchid&amp;quot;, &amp;quot;MediumPurple&amp;quot;,&lt;br /&gt;
                     &amp;quot;MediumSeaGreen&amp;quot;, &amp;quot;MediumSlateBlue&amp;quot;, &amp;quot;MediumSpringGreen&amp;quot;, &amp;quot;MediumTurquoise&amp;quot;,&lt;br /&gt;
                     &amp;quot;MediumVioletRed&amp;quot;, &amp;quot;MidnightBlue&amp;quot;, &amp;quot;MintCream&amp;quot;, &amp;quot;MistyRose&amp;quot;, &amp;quot;Moccasin&amp;quot;,&lt;br /&gt;
                     &amp;quot;NavajoWhite&amp;quot;, &amp;quot;Navy&amp;quot;, &amp;quot;OldLace&amp;quot;, &amp;quot;Olive&amp;quot;, &amp;quot;OliveDrab&amp;quot;, &amp;quot;Orange&amp;quot;, &amp;quot;OrangeRed&amp;quot;,&lt;br /&gt;
                     &amp;quot;Orchid&amp;quot;, &amp;quot;PaleGoldenrod&amp;quot;, &amp;quot;PaleGreen&amp;quot;, &amp;quot;PaleTurquoise&amp;quot;, &amp;quot;PaleVioletRed&amp;quot;,&lt;br /&gt;
                     &amp;quot;PapayaWhip&amp;quot;, &amp;quot;PeachPuff&amp;quot;, &amp;quot;Peru&amp;quot;, &amp;quot;Pink&amp;quot;, &amp;quot;Plum&amp;quot;, &amp;quot;PowderBlue&amp;quot;, &amp;quot;Purple&amp;quot;,&lt;br /&gt;
                     &amp;quot;Red&amp;quot;, &amp;quot;RosyBrown&amp;quot;, &amp;quot;RoyalBlue&amp;quot;, &amp;quot;SaddleBrown&amp;quot;, &amp;quot;Salmon&amp;quot;, &amp;quot;SandyBrown&amp;quot;,&lt;br /&gt;
                     &amp;quot;SeaGreen&amp;quot;, &amp;quot;Seashell&amp;quot;, &amp;quot;Sienna&amp;quot;, &amp;quot;Silver&amp;quot;, &amp;quot;SkyBlue&amp;quot;, &amp;quot;SlateBlue&amp;quot;, &amp;quot;SlateGrey&amp;quot;,&lt;br /&gt;
                     &amp;quot;Snow&amp;quot;, &amp;quot;SpringGreen&amp;quot;, &amp;quot;SteelBlue&amp;quot;, &amp;quot;Tan&amp;quot;, &amp;quot;Teal&amp;quot;, &amp;quot;Thistle&amp;quot;, &amp;quot;Tomato&amp;quot;,&lt;br /&gt;
                     &amp;quot;Turquoise&amp;quot;, &amp;quot;Violet&amp;quot;, &amp;quot;Wheat&amp;quot;, &amp;quot;White&amp;quot;, &amp;quot;WhiteSmoke&amp;quot;, &amp;quot;Yellow&amp;quot;, &amp;quot;YellowGreen&amp;quot; ];&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        string CommandList = &amp;quot;&amp;quot;;                              // Storage for our drawing commands&lt;br /&gt;
        integer i;&lt;br /&gt;
&lt;br /&gt;
        CommandList = osSetPenSize( CommandList, 1 );         // Set the pen width to 1 pixel&lt;br /&gt;
&lt;br /&gt;
        for (i = 0; i &amp;lt; 140; ++i) // draw each named color as a single horizontal line&lt;br /&gt;
        {&lt;br /&gt;
            // Set the pen to the next color name in our list&lt;br /&gt;
            CommandList = osSetPenColour( CommandList, llList2String( colorNames, i ));&lt;br /&gt;
            // Now draw a line in that color&lt;br /&gt;
            CommandList = osDrawLine( CommandList, 0, i, 255, i );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Now let's fill up the remainder with lines of random colors, leaving a gap of 20 lines.&lt;br /&gt;
        for (i = 161; i &amp;lt; 256; ++i)&lt;br /&gt;
        {&lt;br /&gt;
            string thisColor = &amp;quot;ff&amp;quot;; // give it an opaque alpha&lt;br /&gt;
            integer j;&lt;br /&gt;
            for (j = 0; j &amp;lt; 6; ++j) // then choose six random hex digits for the color&lt;br /&gt;
            {&lt;br /&gt;
                integer k = (integer) llFrand( 16.0 );&lt;br /&gt;
                thisColor += llGetSubString( hexDigits, k, k );&lt;br /&gt;
            }&lt;br /&gt;
            CommandList = osSetPenColour( CommandList, thisColor );&lt;br /&gt;
            CommandList = osDrawLine( CommandList, 0, i, 255, i );&lt;br /&gt;
        }&lt;br /&gt;
        // Now generate the texture and apply it to the prim&lt;br /&gt;
        osSetDynamicTextureData( &amp;quot;&amp;quot;, &amp;quot;vector&amp;quot;, CommandList, &amp;quot;width:256,height:256&amp;quot;, 0 );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsMovePen</id>
		<title>OsMovePen</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsMovePen"/>
				<updated>2009-07-28T00:19:39Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Copypasta error&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[Dynamic textures]] -&amp;gt; [[OsMovePen | osMovePen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LSL: '''[[string]] osMovePen( [[string]] drawList, [[integer]] x, [[integer]] y )'''&amp;lt;br /&amp;gt;&lt;br /&gt;
C#: '''[[string]] osMovePen( [[string]] drawList, [[int]] x, [[int]] y )'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Moves the pen's location to the coordinates specified by the '''x''' and '''y''' parameters, without drawing anything.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Example of osMovePen&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        string CommandList = &amp;quot;&amp;quot;; // Storage for our drawing commands&lt;br /&gt;
        integer i;&lt;br /&gt;
&lt;br /&gt;
        CommandList = osSetPenSize( CommandList, 3 );              // Set the pen width to 3 pixels&lt;br /&gt;
        CommandList = osSetPenColour( CommandList, &amp;quot;Blue&amp;quot; );       // Set the pen color to blue&lt;br /&gt;
&lt;br /&gt;
        for (i = 0; i &amp;lt; 256; i += 20)&lt;br /&gt;
        {&lt;br /&gt;
          CommandList = osMovePen( CommandList, 255, i );          // Move to the right side&lt;br /&gt;
          CommandList = osDrawLine( CommandList, 0, i+20 );        // Draw left and slightly down&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Now draw the lines&lt;br /&gt;
        osSetDynamicTextureData( &amp;quot;&amp;quot;, &amp;quot;vector&amp;quot;, CommandList, &amp;quot;width:256,height:256&amp;quot;, 0 );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsDrawLine</id>
		<title>OsDrawLine</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsDrawLine"/>
				<updated>2009-07-28T00:18:38Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Copypasta error&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[Dynamic textures]] -&amp;gt; [[OsDrawLine | osDrawLine]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LSL: '''[[string]] osDrawLine( [[string]] drawList, [[integer]] startX, [[integer]] startY, [[integer]] endX, [[integer]] endY )'''&amp;lt;br /&amp;gt;&lt;br /&gt;
:'''[[string]] osDrawLine( [[string]] drawList, [[integer]] endX, [[integer]] endY )'''&lt;br /&gt;
C#: '''[[string]] osDrawLine( [[string]] drawList, [[int]] startX, [[int]] startY, [[int]] endX, [[int]] endY )'''&amp;lt;br /&amp;gt;&lt;br /&gt;
:'''[[string]] osDrawLine( [[string]] drawList, [[int]] endX, [[int]] endY )'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Depending on the form, appends a [[Drawing_commands#LineTo|LineTo]] drawing command, or [[Drawing_commands#MoveTo|MoveTo]] and [[Drawing_commands#LineTo|LineTo]] commands, to the string provided in '''drawList''' and returns the result.&lt;br /&gt;
&lt;br /&gt;
In the longer form, draws a line using the current pen size and color from to the coordinates indicated by '''startX''' and '''startY''' to the coordinates indicated by '''endX''' and '''endY'''.&lt;br /&gt;
&lt;br /&gt;
In the shorter form, draws a line using the current pen size and color from the pen's current position to the coordinates indicated by '''endX''' and '''endY'''.&lt;br /&gt;
&lt;br /&gt;
After the line is drawn, the pen's X and Y coordinates are set to '''endX''' and '''endY''', respectively.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Example of osDrawLine&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        string CommandList = &amp;quot;&amp;quot;; // Storage for our drawing commands&lt;br /&gt;
&lt;br /&gt;
        CommandList = osSetPenSize( CommandList, 3 );              // Set the pen width to 3 pixels&lt;br /&gt;
        CommandList = osSetPenColour( CommandList, &amp;quot;Red&amp;quot; );        // Set the pen color to red&lt;br /&gt;
        CommandList = osDrawLine( CommandList, 10, 10, 128, 246 ); // Draw the first line (long form)&lt;br /&gt;
        CommandList = osSetPenColour( CommandList, &amp;quot;Green&amp;quot; );      // Set the pen color to green&lt;br /&gt;
        CommandList = osDrawLine( CommandList, 246, 10);           // Draw the second line (short form)&lt;br /&gt;
&lt;br /&gt;
        // Now draw the lines&lt;br /&gt;
        osSetDynamicTextureData( &amp;quot;&amp;quot;, &amp;quot;vector&amp;quot;, CommandList, &amp;quot;width:256,height:256&amp;quot;, 0 );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsSetPenColour</id>
		<title>OsSetPenColour</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsSetPenColour"/>
				<updated>2009-07-28T00:10:38Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Page created.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[Dynamic textures]] -&amp;gt; [[OsSetPenColour | osSetPenColour]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LSL: '''[[string]] osSetPenColour( [[string]] drawList, string colour )'''&amp;lt;br /&amp;gt;&lt;br /&gt;
LSL: '''[[string]] osMovePen( [[string]] drawList, string colour )'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sets the pen's drawing color to either the specified [http://msdn.microsoft.com/en-us/library/aa358802.aspx named .NET color] or to a 32-bit color value (formatted as eight hexadecimal digits in the format aarrggbb, representing the eight-bit alpha, red, green and blue channels).&lt;br /&gt;
&lt;br /&gt;
For full opacity, use an alpha value of ff (e.g. &amp;lt;tt&amp;gt;ffff0000&amp;lt;/tt&amp;gt; for red); for varying degrees of transparency, reduce the alpha value (e.g. &amp;lt;tt&amp;gt;800000ff&amp;lt;/tt&amp;gt; for half-transparent blue).&lt;br /&gt;
&lt;br /&gt;
The color names and hexadecimal color representations are not case-sensitive.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Example of osSetPenColour&lt;br /&gt;
&lt;br /&gt;
string hexDigits = &amp;quot;0123456789abcdef&amp;quot;;&lt;br /&gt;
list colorNames  = [ &amp;quot;AliceBlue&amp;quot;, &amp;quot;AntiqueWhite&amp;quot;, &amp;quot;Aqua&amp;quot;, &amp;quot;Aquamarine&amp;quot;, &amp;quot;Azure&amp;quot;, &amp;quot;Beige&amp;quot;, &amp;quot;Bisque&amp;quot;,&lt;br /&gt;
                     &amp;quot;Black&amp;quot;, &amp;quot;BlanchedAlmond&amp;quot;, &amp;quot;Blue&amp;quot;, &amp;quot;BlueViolet&amp;quot;, &amp;quot;Brown&amp;quot;, &amp;quot;BurlyWood&amp;quot;,&lt;br /&gt;
                     &amp;quot;CadetBlue&amp;quot;, &amp;quot;Chartreuse&amp;quot;, &amp;quot;Chocolate&amp;quot;, &amp;quot;Coral&amp;quot;, &amp;quot;CornflowerBlue&amp;quot;, &amp;quot;Cornsilk&amp;quot;,&lt;br /&gt;
                     &amp;quot;Crimson&amp;quot;, &amp;quot;Cyan&amp;quot;, &amp;quot;DarkBlue&amp;quot;, &amp;quot;DarkCyan&amp;quot;, &amp;quot;DarkGoldenrod&amp;quot;, &amp;quot;DarkGrey&amp;quot;,&lt;br /&gt;
                     &amp;quot;DarkGreen&amp;quot;, &amp;quot;DarkKhaki&amp;quot;, &amp;quot;DarkMagenta&amp;quot;, &amp;quot;DarkOliveGreen&amp;quot;, &amp;quot;DarkOrange&amp;quot;,&lt;br /&gt;
                     &amp;quot;DarkOrchid&amp;quot;, &amp;quot;DarkRed&amp;quot;, &amp;quot;DarkSalmon&amp;quot;, &amp;quot;DarkSeaGreen&amp;quot;, &amp;quot;DarkSlateBlue&amp;quot;,&lt;br /&gt;
                     &amp;quot;DarkSlateGrey&amp;quot;, &amp;quot;DarkTurquoise&amp;quot;, &amp;quot;DarkViolet&amp;quot;, &amp;quot;DeepPink&amp;quot;, &amp;quot;DeepSkyBlue&amp;quot;,&lt;br /&gt;
                     &amp;quot;DimGrey&amp;quot;, &amp;quot;DodgerBlue&amp;quot;, &amp;quot;FireBrick&amp;quot;, &amp;quot;FloralWhite&amp;quot;, &amp;quot;ForestGreen&amp;quot;, &amp;quot;Fuchsia&amp;quot;,&lt;br /&gt;
                     &amp;quot;Gainsboro&amp;quot;, &amp;quot;GhostWhite&amp;quot;, &amp;quot;Gold&amp;quot;, &amp;quot;Goldenrod&amp;quot;, &amp;quot;Grey&amp;quot;, &amp;quot;Green&amp;quot;, &amp;quot;GreenYellow&amp;quot;,&lt;br /&gt;
                     &amp;quot;Honeydew&amp;quot;, &amp;quot;HotPink&amp;quot;, &amp;quot;IndianRed&amp;quot;, &amp;quot;Indigo&amp;quot;, &amp;quot;Ivory&amp;quot;, &amp;quot;Khaki&amp;quot;, &amp;quot;Lavender&amp;quot;,&lt;br /&gt;
                     &amp;quot;LavenderBlush&amp;quot;, &amp;quot;LawnGreen&amp;quot;, &amp;quot;LemonChiffon&amp;quot;, &amp;quot;LightBlue&amp;quot;, &amp;quot;LightCoral&amp;quot;,&lt;br /&gt;
                     &amp;quot;LightCyan&amp;quot;, &amp;quot;LightGoldenrodYellow&amp;quot;, &amp;quot;LightGreen&amp;quot;, &amp;quot;LightGrey&amp;quot;, &amp;quot;LightPink&amp;quot;,&lt;br /&gt;
                     &amp;quot;LightSalmon&amp;quot;, &amp;quot;LightSeaGreen&amp;quot;, &amp;quot;LightSkyBlue&amp;quot;, &amp;quot;LightSlateGrey&amp;quot;,&lt;br /&gt;
                     &amp;quot;LightSteelBlue&amp;quot;, &amp;quot;LightYellow&amp;quot;, &amp;quot;Lime&amp;quot;, &amp;quot;LimeGreen&amp;quot;, &amp;quot;Linen&amp;quot;, &amp;quot;Magenta&amp;quot;,&lt;br /&gt;
                     &amp;quot;Maroon&amp;quot;, &amp;quot;MediumAquamarine&amp;quot;, &amp;quot;MediumBlue&amp;quot;, &amp;quot;MediumOrchid&amp;quot;, &amp;quot;MediumPurple&amp;quot;,&lt;br /&gt;
                     &amp;quot;MediumSeaGreen&amp;quot;, &amp;quot;MediumSlateBlue&amp;quot;, &amp;quot;MediumSpringGreen&amp;quot;, &amp;quot;MediumTurquoise&amp;quot;,&lt;br /&gt;
                     &amp;quot;MediumVioletRed&amp;quot;, &amp;quot;MidnightBlue&amp;quot;, &amp;quot;MintCream&amp;quot;, &amp;quot;MistyRose&amp;quot;, &amp;quot;Moccasin&amp;quot;,&lt;br /&gt;
                     &amp;quot;NavajoWhite&amp;quot;, &amp;quot;Navy&amp;quot;, &amp;quot;OldLace&amp;quot;, &amp;quot;Olive&amp;quot;, &amp;quot;OliveDrab&amp;quot;, &amp;quot;Orange&amp;quot;, &amp;quot;OrangeRed&amp;quot;,&lt;br /&gt;
                     &amp;quot;Orchid&amp;quot;, &amp;quot;PaleGoldenrod&amp;quot;, &amp;quot;PaleGreen&amp;quot;, &amp;quot;PaleTurquoise&amp;quot;, &amp;quot;PaleVioletRed&amp;quot;,&lt;br /&gt;
                     &amp;quot;PapayaWhip&amp;quot;, &amp;quot;PeachPuff&amp;quot;, &amp;quot;Peru&amp;quot;, &amp;quot;Pink&amp;quot;, &amp;quot;Plum&amp;quot;, &amp;quot;PowderBlue&amp;quot;, &amp;quot;Purple&amp;quot;,&lt;br /&gt;
                     &amp;quot;Red&amp;quot;, &amp;quot;RosyBrown&amp;quot;, &amp;quot;RoyalBlue&amp;quot;, &amp;quot;SaddleBrown&amp;quot;, &amp;quot;Salmon&amp;quot;, &amp;quot;SandyBrown&amp;quot;,&lt;br /&gt;
                     &amp;quot;SeaGreen&amp;quot;, &amp;quot;Seashell&amp;quot;, &amp;quot;Sienna&amp;quot;, &amp;quot;Silver&amp;quot;, &amp;quot;SkyBlue&amp;quot;, &amp;quot;SlateBlue&amp;quot;, &amp;quot;SlateGrey&amp;quot;,&lt;br /&gt;
                     &amp;quot;Snow&amp;quot;, &amp;quot;SpringGreen&amp;quot;, &amp;quot;SteelBlue&amp;quot;, &amp;quot;Tan&amp;quot;, &amp;quot;Teal&amp;quot;, &amp;quot;Thistle&amp;quot;, &amp;quot;Tomato&amp;quot;,&lt;br /&gt;
                     &amp;quot;Turquoise&amp;quot;, &amp;quot;Violet&amp;quot;, &amp;quot;Wheat&amp;quot;, &amp;quot;White&amp;quot;, &amp;quot;WhiteSmoke&amp;quot;, &amp;quot;Yellow&amp;quot;, &amp;quot;YellowGreen&amp;quot; ];&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        string CommandList = &amp;quot;&amp;quot;;                              // Storage for our drawing commands&lt;br /&gt;
        integer i;&lt;br /&gt;
&lt;br /&gt;
        CommandList = osSetPenSize( CommandList, 1 );         // Set the pen width to 1 pixel&lt;br /&gt;
&lt;br /&gt;
        for (i = 0; i &amp;lt; 140; ++i) // draw each named color as a single horizontal line&lt;br /&gt;
        {&lt;br /&gt;
            // Set the pen to the next color name in our list&lt;br /&gt;
            CommandList = osSetPenColour( CommandList, llList2String( colorNames, i ));&lt;br /&gt;
            // Now draw a line in that color&lt;br /&gt;
            CommandList = osDrawLine( CommandList, 0, i, 255, i );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Now let's fill up the remainder with lines of random colors, leaving a gap of 20 lines.&lt;br /&gt;
        for (i = 161; i &amp;lt; 256; ++i)&lt;br /&gt;
        {&lt;br /&gt;
            string thisColor = &amp;quot;ff&amp;quot;; // give it an opaque alpha&lt;br /&gt;
            integer j;&lt;br /&gt;
            for (j = 0; j &amp;lt; 6; ++j) // then choose six random hex digits for the color&lt;br /&gt;
            {&lt;br /&gt;
                integer k = (integer) llFrand( 16.0 );&lt;br /&gt;
                thisColor += llGetSubString( hexDigits, k, k );&lt;br /&gt;
            }&lt;br /&gt;
            CommandList = osSetPenColour( CommandList, thisColor );&lt;br /&gt;
            CommandList = osDrawLine( CommandList, 0, i, 255, i );&lt;br /&gt;
        }&lt;br /&gt;
        // Now generate the texture and apply it to the prim&lt;br /&gt;
        osSetDynamicTextureData( &amp;quot;&amp;quot;, &amp;quot;vector&amp;quot;, CommandList, &amp;quot;width:256,height:256&amp;quot;, 0 );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsMovePen</id>
		<title>OsMovePen</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsMovePen"/>
				<updated>2009-07-27T23:37:10Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Correct formatting error&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[Dynamic textures]] -&amp;gt; [[OsMovePen | osMovePen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LSL: '''[[string]] osMovePen( [[string]] drawList, [[integer]] x, [[integer]] y )'''&amp;lt;br /&amp;gt;&lt;br /&gt;
LSL: '''[[string]] osMovePen( [[string]] drawList, [[int]] x, [[int]] y )'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Moves the pen's location to the coordinates specified by the '''x''' and '''y''' parameters, without drawing anything.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Example of osMovePen&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        string CommandList = &amp;quot;&amp;quot;; // Storage for our drawing commands&lt;br /&gt;
        integer i;&lt;br /&gt;
&lt;br /&gt;
        CommandList = osSetPenSize( CommandList, 3 );              // Set the pen width to 3 pixels&lt;br /&gt;
        CommandList = osSetPenColour( CommandList, &amp;quot;Blue&amp;quot; );       // Set the pen color to blue&lt;br /&gt;
&lt;br /&gt;
        for (i = 0; i &amp;lt; 256; i += 20)&lt;br /&gt;
        {&lt;br /&gt;
          CommandList = osMovePen( CommandList, 255, i );          // Move to the right side&lt;br /&gt;
          CommandList = osDrawLine( CommandList, 0, i+20 );        // Draw left and slightly down&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Now draw the lines&lt;br /&gt;
        osSetDynamicTextureData( &amp;quot;&amp;quot;, &amp;quot;vector&amp;quot;, CommandList, &amp;quot;width:256,height:256&amp;quot;, 0 );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsMovePen</id>
		<title>OsMovePen</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsMovePen"/>
				<updated>2009-07-27T23:35:11Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Page created.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[Dynamic textures]] -&amp;gt; [[OsMovePen | osMovePen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LSL: '''[[string]] osMovePen( [[string]] drawList, [[integer]] x, [[integer]] y )'''&lt;br /&gt;
LSL: '''[[string]] osMovePen( [[string]] drawList, [[int]] x, [[int]] y )'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Moves the pen's location to the coordinates specified by the '''x''' and '''y''' parameters, without drawing anything.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Example of osMovePen&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        string CommandList = &amp;quot;&amp;quot;; // Storage for our drawing commands&lt;br /&gt;
        integer i;&lt;br /&gt;
&lt;br /&gt;
        CommandList = osSetPenSize( CommandList, 3 );              // Set the pen width to 3 pixels&lt;br /&gt;
        CommandList = osSetPenColour( CommandList, &amp;quot;Blue&amp;quot; );       // Set the pen color to blue&lt;br /&gt;
&lt;br /&gt;
        for (i = 0; i &amp;lt; 256; i += 20)&lt;br /&gt;
        {&lt;br /&gt;
          CommandList = osMovePen( CommandList, 255, i );          // Move to the right side&lt;br /&gt;
          CommandList = osDrawLine( CommandList, 0, i+20 );        // Draw left and slightly down&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Now draw the lines&lt;br /&gt;
        osSetDynamicTextureData( &amp;quot;&amp;quot;, &amp;quot;vector&amp;quot;, CommandList, &amp;quot;width:256,height:256&amp;quot;, 0 );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsDrawRectangle</id>
		<title>OsDrawRectangle</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsDrawRectangle"/>
				<updated>2009-07-27T23:32:11Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Oops.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[Dynamic textures]] -&amp;gt; [[OsDrawRectangle | osDrawRectangle]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LSL: '''[[string]] osDrawRectangle( [[string]] drawList, [[integer]] width, [[integer]] height )'''&amp;lt;br /&amp;gt;&lt;br /&gt;
C#: '''[[string]] osDrawRectangle( [[string]] drawList, [[int]] width, [[int]] height )'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Appends a [[Drawing_commands#Rectangle|Rectangle]] drawing command to the string provided in '''drawList''' and returns the result.&lt;br /&gt;
&lt;br /&gt;
The outline of a rectangle is drawn with the current pen size and color, at the specified width and height (in pixels), with the upper left corner of the rectangle placed at the pen's current position. After the rectangle is drawn, the width and height values are added to the pen's X and Y position, respectively (that is, the pen is positioned at the lower right corner of the rectangle. &lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Example of osDrawRectangle&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        string CommandList = &amp;quot;&amp;quot;; // Storage for our drawing commands&lt;br /&gt;
&lt;br /&gt;
        CommandList = osSetPenSize( CommandList, 3 );           // Set the pen width to 3 pixels&lt;br /&gt;
        CommandList = osSetPenColour( CommandList, &amp;quot;Green&amp;quot; );   // Set the pen color to green&lt;br /&gt;
        CommandList = osMovePen( CommandList, 28, 78 );         // Upper left corner at &amp;lt;28,78&amp;gt;&lt;br /&gt;
        CommandList = osDrawRectangle( CommandList, 200, 100 ); // 200 pixels by 100 pixels&lt;br /&gt;
&lt;br /&gt;
        // Now draw the rectangle&lt;br /&gt;
        osSetDynamicTextureData( &amp;quot;&amp;quot;, &amp;quot;vector&amp;quot;, CommandList, &amp;quot;width:256,height:256&amp;quot;, 0 );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsDrawLine</id>
		<title>OsDrawLine</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsDrawLine"/>
				<updated>2009-07-27T23:31:53Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Oops.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[Dynamic textures]] -&amp;gt; [[OsDrawLine | osDrawLine]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LSL: '''[[string]] osDrawLine( [[string]] drawList, [[integer]] startX, [[integer]] startY, [[integer]] endX, [[integer]] endY )'''&amp;lt;br /&amp;gt;&lt;br /&gt;
:'''[[string]] osDrawLine( [[string]] drawList, [[integer]] endX, [[integer]] endY )'''&lt;br /&gt;
LSL: '''[[string]] osDrawLine( [[string]] drawList, [[int]] startX, [[int]] startY, [[int]] endX, [[int]] endY )'''&amp;lt;br /&amp;gt;&lt;br /&gt;
:'''[[string]] osDrawLine( [[string]] drawList, [[int]] endX, [[int]] endY )'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Depending on the form, appends a [[Drawing_commands#LineTo|LineTo]] drawing command, or [[Drawing_commands#MoveTo|MoveTo]] and [[Drawing_commands#LineTo|LineTo]] commands, to the string provided in '''drawList''' and returns the result.&lt;br /&gt;
&lt;br /&gt;
In the longer form, draws a line using the current pen size and color from to the coordinates indicated by '''startX''' and '''startY''' to the coordinates indicated by '''endX''' and '''endY'''.&lt;br /&gt;
&lt;br /&gt;
In the shorter form, draws a line using the current pen size and color from the pen's current position to the coordinates indicated by '''endX''' and '''endY'''.&lt;br /&gt;
&lt;br /&gt;
After the line is drawn, the pen's X and Y coordinates are set to '''endX''' and '''endY''', respectively.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Example of osDrawLine&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        string CommandList = &amp;quot;&amp;quot;; // Storage for our drawing commands&lt;br /&gt;
&lt;br /&gt;
        CommandList = osSetPenSize( CommandList, 3 );              // Set the pen width to 3 pixels&lt;br /&gt;
        CommandList = osSetPenColour( CommandList, &amp;quot;Red&amp;quot; );        // Set the pen color to red&lt;br /&gt;
        CommandList = osDrawLine( CommandList, 10, 10, 128, 246 ); // Draw the first line (long form)&lt;br /&gt;
        CommandList = osSetPenColour( CommandList, &amp;quot;Green&amp;quot; );      // Set the pen color to green&lt;br /&gt;
        CommandList = osDrawLine( CommandList, 246, 10);           // Draw the second line (short form)&lt;br /&gt;
&lt;br /&gt;
        // Now draw the lines&lt;br /&gt;
        osSetDynamicTextureData( &amp;quot;&amp;quot;, &amp;quot;vector&amp;quot;, CommandList, &amp;quot;width:256,height:256&amp;quot;, 0 );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsDrawImage</id>
		<title>OsDrawImage</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsDrawImage"/>
				<updated>2009-07-27T23:31:33Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Oops.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[Dynamic textures]] -&amp;gt; [[OsDrawImage | osDrawImage]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LSL: '''[[string]] osDrawImage( [[string]] drawList, [[integer]] width, [[integer]] height, [[string]] imageUrl )'''&amp;lt;br /&amp;gt;&lt;br /&gt;
C#: '''[[string]] osDrawImage( [[string]] drawList, [[int]] width, [[int]] height, [[string]] imageUrl )'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Appends an [[Drawing_commands#Image|Image]] drawing command to the string provided in '''drawList''' and returns the result.&lt;br /&gt;
&lt;br /&gt;
Retrieves an image specified by the imageUrl parameter and draws it at the specified height and width, with the upper left corner of the image placed at the pen's current position. After the image is drawn, the width and height values are added to the pen's X and Y position, respectively (that is, the pen's current position is set to the lower right corner of the image). &lt;br /&gt;
&lt;br /&gt;
If imageUrl points to an invalid location, an image type not supported by libgdi, or a non-image MIME type, nothing is drawn. If either or both of the '''width''' or '''height''' parameters are zero or negative, nothing is drawn, but the image is still retrieved. &lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Example of osDrawImage&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        string CommandList = &amp;quot;&amp;quot;; // Storage for our drawing commands&lt;br /&gt;
        string ImageURL = &amp;quot;http://opensimulator.org/skins/osmonobook/images/headerLogo.png&amp;quot;;&lt;br /&gt;
        CommandList = osMovePen( CommandList, 0, 0 );                // Upper left corner at &amp;lt;0,0&amp;gt;&lt;br /&gt;
        CommandList = osDrawImage( CommandList, 256, 54, ImageURL ); // 200 pixels by 100 pixels&lt;br /&gt;
&lt;br /&gt;
        // Now draw the image&lt;br /&gt;
        osSetDynamicTextureData( &amp;quot;&amp;quot;, &amp;quot;vector&amp;quot;, CommandList, &amp;quot;width:256,height:256&amp;quot;, 0 );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsDrawFilledRectangle</id>
		<title>OsDrawFilledRectangle</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsDrawFilledRectangle"/>
				<updated>2009-07-27T23:31:15Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Oops.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[Dynamic textures]] -&amp;gt; [[OsDrawFilledRectangle | osDrawFilledRectangle]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LSL: '''[[string]] osDrawFilledRectangle( [[string]] drawList, [[integer]] width, [[integer]] height )'''&amp;lt;br /&amp;gt;&lt;br /&gt;
C#: '''[[string]] osDrawFilledRectangle( [[string]] drawList, [[int]] width, [[int]] height )'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Appends a [[Drawing_commands#FillRectangle|FillRectangle]] drawing command to the string provided in '''drawList''' and returns the result.&lt;br /&gt;
&lt;br /&gt;
The filled rectangle is drawn with the current pen size and color, at the specified width and height (in pixels), with the upper left corner of the rectangle placed at the pen's current position. After the rectangle is drawn, the width and height values are added to the pen's X and Y position, respectively (that is, the pen is positioned at the lower right corner of the rectangle. &lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Example of osDrawFilledRectangle&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        string CommandList = &amp;quot;&amp;quot;; // Storage for our drawing commands&lt;br /&gt;
&lt;br /&gt;
        CommandList = osSetPenSize( CommandList, 3 );                 // Set the pen width to 3 pixels&lt;br /&gt;
        CommandList = osSetPenColour( CommandList, &amp;quot;Red&amp;quot; );           // Set the pen color to red&lt;br /&gt;
        CommandList = osMovePen( CommandList, 28, 78 );               // Upper left corner at &amp;lt;28,78&amp;gt;&lt;br /&gt;
        CommandList = osDrawFilledRectangle( CommandList, 200, 100 ); // 200 pixels by 100 pixels&lt;br /&gt;
&lt;br /&gt;
        // Now draw the rectangle&lt;br /&gt;
        osSetDynamicTextureData( &amp;quot;&amp;quot;, &amp;quot;vector&amp;quot;, CommandList, &amp;quot;width:256,height:256&amp;quot;, 0 );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsDrawEllipse</id>
		<title>OsDrawEllipse</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsDrawEllipse"/>
				<updated>2009-07-27T23:30:53Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Oops.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[Dynamic textures]] -&amp;gt; [[OsDrawEllipse | osDrawEllipse]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LSL: '''[[string]] osDrawEllipse( [[string]] drawList, [[integer]] width, [[integer]] height )'''&amp;lt;br /&amp;gt;&lt;br /&gt;
C#: '''[[string]] osDrawEllipse( [[string]] drawList, [[int]] width, [[int]] height )'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Appends an [[Drawing_commands#Ellipse|Ellipse]] drawing command to the string provided in '''drawList''' and returns the result.&lt;br /&gt;
&lt;br /&gt;
The ellipse is drawn with the current pen size and color, with the specified width and height (in pixels), centered on a point which is (width/2) pixels to the right of the pen's current X position, and (height/2) pixels below the pen's current Y position. After the ellipse is drawn, the width and height values are added to the pen's X and Y position, respectively.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Example of osDrawEllipse&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        string CommandList = &amp;quot;&amp;quot;; // Storage for our drawing commands&lt;br /&gt;
&lt;br /&gt;
        CommandList = osSetPenSize( CommandList, 3 );         // Set the pen width to 3 pixels&lt;br /&gt;
        CommandList = osSetPenColour( CommandList, &amp;quot;Blue&amp;quot; );  // Set the pen color to blue&lt;br /&gt;
        CommandList = osMovePen( CommandList, 28, 78 );        // Upper left corner at &amp;lt;28,78&amp;gt;&lt;br /&gt;
        CommandList = osDrawEllipse( CommandList, 200, 100 ); // 200 pixels by 100 pixels&lt;br /&gt;
&lt;br /&gt;
        // Now draw the ellipse&lt;br /&gt;
        osSetDynamicTextureData( &amp;quot;&amp;quot;, &amp;quot;vector&amp;quot;, CommandList, &amp;quot;width:256,height:256&amp;quot;, 0 );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsDrawLine</id>
		<title>OsDrawLine</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsDrawLine"/>
				<updated>2009-07-27T23:23:13Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Page created.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[Dynamic textures]] -&amp;gt; [[OsDrawLine | osDrawLine]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LSL: '''[[string]] osDrawLine( [[string]] drawList, [[integer]] startX, [[integer]] startY, [[integer]] endX, [[integer]] endY )'''&amp;lt;br /&amp;gt;&lt;br /&gt;
:'''[[string]] osDrawLine( [[string]] drawList, [[integer]] endX, [[integer]] endY )'''&lt;br /&gt;
LSL: '''[[string]] osDrawLine( [[string]] drawList, [[int]] startX, [[int]] startY, [[int]] endX, [[int]] endY )'''&amp;lt;br /&amp;gt;&lt;br /&gt;
:'''[[string]] osDrawLine( [[string]] drawList, [[int]] endX, [[int]] endY )'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Depending on the form, appends a [[Drawing_commands#LineTo|LineTo]] drawing command, or [[Drawing_commands#MoveTo|MoveTo]] and [[Drawing_commands#LineTo|LineTo]] commands, to the string provided in '''drawList''' and returns the result.&lt;br /&gt;
&lt;br /&gt;
In the longer form, draws a line using the current pen size and color from to the coordinates indicated by '''startX''' and '''startY''' to the coordinates indicated by '''endX''' and '''endY'''.&lt;br /&gt;
&lt;br /&gt;
In the shorter form, draws a line using the current pen size and color from the pen's current position to the coordinates indicated by '''endX''' and '''endY'''.&lt;br /&gt;
&lt;br /&gt;
After the line is drawn, the pen's X and Y coordinates are set to '''endX''' and '''endY''', respectively.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Example of osDrawLine&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        string CommandList = &amp;quot;&amp;quot;; // Storage for our drawing commands&lt;br /&gt;
&lt;br /&gt;
        CommandList += osSetPenSize( CommandList, 3 );              // Set the pen width to 3 pixels&lt;br /&gt;
        CommandList += osSetPenColour( CommandList, &amp;quot;Red&amp;quot; );        // Set the pen color to red&lt;br /&gt;
        CommandList += osDrawLine( CommandList, 10, 10, 128, 246 ); // Draw the first line (long form)&lt;br /&gt;
        CommandList += osSetPenColour( CommandList, &amp;quot;Green&amp;quot; );      // Set the pen color to green&lt;br /&gt;
        CommandList += osDrawLine( CommandList, 246, 10);           // Draw the second line (short form)&lt;br /&gt;
&lt;br /&gt;
        // Now draw the lines&lt;br /&gt;
        osSetDynamicTextureData( &amp;quot;&amp;quot;, &amp;quot;vector&amp;quot;, CommandList, &amp;quot;width:256,height:256&amp;quot;, 0 );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsDrawImage</id>
		<title>OsDrawImage</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsDrawImage"/>
				<updated>2009-07-27T23:07:40Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Page created.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[Dynamic textures]] -&amp;gt; [[OsDrawImage | osDrawImage]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LSL: '''[[string]] osDrawImage( [[string]] drawList, [[integer]] width, [[integer]] height, [[string]] imageUrl )'''&amp;lt;br /&amp;gt;&lt;br /&gt;
C#: '''[[string]] osDrawImage( [[string]] drawList, [[int]] width, [[int]] height, [[string]] imageUrl )'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Appends an [[Drawing_commands#Image|Image]] drawing command to the string provided in '''drawList''' and returns the result.&lt;br /&gt;
&lt;br /&gt;
Retrieves an image specified by the imageUrl parameter and draws it at the specified height and width, with the upper left corner of the image placed at the pen's current position. After the image is drawn, the width and height values are added to the pen's X and Y position, respectively (that is, the pen's current position is set to the lower right corner of the image). &lt;br /&gt;
&lt;br /&gt;
If imageUrl points to an invalid location, an image type not supported by libgdi, or a non-image MIME type, nothing is drawn. If either or both of the '''width''' or '''height''' parameters are zero or negative, nothing is drawn, but the image is still retrieved. &lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Example of osDrawImage&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        string CommandList = &amp;quot;&amp;quot;; // Storage for our drawing commands&lt;br /&gt;
        string ImageURL = &amp;quot;http://opensimulator.org/skins/osmonobook/images/headerLogo.png&amp;quot;;&lt;br /&gt;
        CommandList += osMovePen( CommandList, 0, 0 );                // Upper left corner at &amp;lt;0,0&amp;gt;&lt;br /&gt;
        CommandList += osDrawImage( CommandList, 256, 54, ImageURL ); // 200 pixels by 100 pixels&lt;br /&gt;
&lt;br /&gt;
        // Now draw the image&lt;br /&gt;
        osSetDynamicTextureData( &amp;quot;&amp;quot;, &amp;quot;vector&amp;quot;, CommandList, &amp;quot;width:256,height:256&amp;quot;, 0 );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsDrawRectangle</id>
		<title>OsDrawRectangle</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsDrawRectangle"/>
				<updated>2009-07-27T22:58:40Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Fixed a link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[Dynamic textures]] -&amp;gt; [[OsDrawRectangle | osDrawRectangle]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LSL: '''[[string]] osDrawRectangle( [[string]] drawList, [[integer]] width, [[integer]] height )'''&amp;lt;br /&amp;gt;&lt;br /&gt;
C#: '''[[string]] osDrawRectangle( [[string]] drawList, [[int]] width, [[int]] height )'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Appends a [[Drawing_commands#Rectangle|Rectangle]] drawing command to the string provided in '''drawList''' and returns the result.&lt;br /&gt;
&lt;br /&gt;
The outline of a rectangle is drawn with the current pen size and color, at the specified width and height (in pixels), with the upper left corner of the rectangle placed at the pen's current position. After the rectangle is drawn, the width and height values are added to the pen's X and Y position, respectively (that is, the pen is positioned at the lower right corner of the rectangle. &lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Example of osDrawRectangle&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        string CommandList = &amp;quot;&amp;quot;; // Storage for our drawing commands&lt;br /&gt;
&lt;br /&gt;
        CommandList += osSetPenSize( CommandList, 3 );           // Set the pen width to 3 pixels&lt;br /&gt;
        CommandList += osSetPenColour( CommandList, &amp;quot;Green&amp;quot; );   // Set the pen color to green&lt;br /&gt;
        CommandList += osMovePen( CommandList, 28, 78 );         // Upper left corner at &amp;lt;28,78&amp;gt;&lt;br /&gt;
        CommandList += osDrawRectangle( CommandList, 200, 100 ); // 200 pixels by 100 pixels&lt;br /&gt;
&lt;br /&gt;
        // Now draw the rectangle&lt;br /&gt;
        osSetDynamicTextureData( &amp;quot;&amp;quot;, &amp;quot;vector&amp;quot;, CommandList, &amp;quot;width:256,height:256&amp;quot;, 0 );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsDrawRectangle</id>
		<title>OsDrawRectangle</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsDrawRectangle"/>
				<updated>2009-07-27T22:57:21Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Page created.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[Dynamic textures]] -&amp;gt; [[OsDrawFilledRectangle | osDrawRectangle]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LSL: '''[[string]] osDrawRectangle( [[string]] drawList, [[integer]] width, [[integer]] height )'''&amp;lt;br /&amp;gt;&lt;br /&gt;
C#: '''[[string]] osDrawRectangle( [[string]] drawList, [[int]] width, [[int]] height )'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Appends a [[Drawing_commands#Rectangle|Rectangle]] drawing command to the string provided in '''drawList''' and returns the result.&lt;br /&gt;
&lt;br /&gt;
The outline of a rectangle is drawn with the current pen size and color, at the specified width and height (in pixels), with the upper left corner of the rectangle placed at the pen's current position. After the rectangle is drawn, the width and height values are added to the pen's X and Y position, respectively (that is, the pen is positioned at the lower right corner of the rectangle. &lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Example of osDrawRectangle&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        string CommandList = &amp;quot;&amp;quot;; // Storage for our drawing commands&lt;br /&gt;
&lt;br /&gt;
        CommandList += osSetPenSize( CommandList, 3 );           // Set the pen width to 3 pixels&lt;br /&gt;
        CommandList += osSetPenColour( CommandList, &amp;quot;Green&amp;quot; );   // Set the pen color to green&lt;br /&gt;
        CommandList += osMovePen( CommandList, 28, 78 );         // Upper left corner at &amp;lt;28,78&amp;gt;&lt;br /&gt;
        CommandList += osDrawRectangle( CommandList, 200, 100 ); // 200 pixels by 100 pixels&lt;br /&gt;
&lt;br /&gt;
        // Now draw the rectangle&lt;br /&gt;
        osSetDynamicTextureData( &amp;quot;&amp;quot;, &amp;quot;vector&amp;quot;, CommandList, &amp;quot;width:256,height:256&amp;quot;, 0 );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsDrawFilledRectangle</id>
		<title>OsDrawFilledRectangle</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsDrawFilledRectangle"/>
				<updated>2009-07-27T22:54:25Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Page created.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[Dynamic textures]] -&amp;gt; [[OsDrawFilledRectangle | osDrawFilledRectangle]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LSL: '''[[string]] osDrawFilledRectangle( [[string]] drawList, [[integer]] width, [[integer]] height )'''&amp;lt;br /&amp;gt;&lt;br /&gt;
C#: '''[[string]] osDrawFilledRectangle( [[string]] drawList, [[int]] width, [[int]] height )'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Appends a [[Drawing_commands#FillRectangle|FillRectangle]] drawing command to the string provided in '''drawList''' and returns the result.&lt;br /&gt;
&lt;br /&gt;
The filled rectangle is drawn with the current pen size and color, at the specified width and height (in pixels), with the upper left corner of the rectangle placed at the pen's current position. After the rectangle is drawn, the width and height values are added to the pen's X and Y position, respectively (that is, the pen is positioned at the lower right corner of the rectangle. &lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Example of osDrawFilledRectangle&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        string CommandList = &amp;quot;&amp;quot;; // Storage for our drawing commands&lt;br /&gt;
&lt;br /&gt;
        CommandList += osSetPenSize( CommandList, 3 );                 // Set the pen width to 3 pixels&lt;br /&gt;
        CommandList += osSetPenColour( CommandList, &amp;quot;Red&amp;quot; );           // Set the pen color to red&lt;br /&gt;
        CommandList += osMovePen( CommandList, 28, 78 );               // Upper left corner at &amp;lt;28,78&amp;gt;&lt;br /&gt;
        CommandList += osDrawFilledRectangle( CommandList, 200, 100 ); // 200 pixels by 100 pixels&lt;br /&gt;
&lt;br /&gt;
        // Now draw the rectangle&lt;br /&gt;
        osSetDynamicTextureData( &amp;quot;&amp;quot;, &amp;quot;vector&amp;quot;, CommandList, &amp;quot;width:256,height:256&amp;quot;, 0 );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsDrawEllipse</id>
		<title>OsDrawEllipse</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsDrawEllipse"/>
				<updated>2009-07-27T22:48:52Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Added hierarchical navigation links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[Dynamic textures]] -&amp;gt; [[OsDrawEllipse | osDrawEllipse]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LSL: '''[[string]] osDrawEllipse( [[string]] drawList, [[integer]] width, [[integer]] height )'''&amp;lt;br /&amp;gt;&lt;br /&gt;
C#: '''[[string]] osDrawEllipse( [[string]] drawList, [[int]] width, [[int]] height )'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Appends an [[Drawing_commands#Ellipse|Ellipse]] drawing command to the string provided in '''drawList''' and returns the result.&lt;br /&gt;
&lt;br /&gt;
The ellipse is drawn with the current pen size and color, with the specified width and height (in pixels), centered on a point which is (width/2) pixels to the right of the pen's current X position, and (height/2) pixels below the pen's current Y position. After the ellipse is drawn, the width and height values are added to the pen's X and Y position, respectively.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Example of osDrawEllipse&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        string CommandList = &amp;quot;&amp;quot;; // Storage for our drawing commands&lt;br /&gt;
&lt;br /&gt;
        CommandList += osSetPenSize( CommandList, 3 );         // Set the pen width to 3 pixels&lt;br /&gt;
        CommandList += osSetPenColour( CommandList, &amp;quot;Blue&amp;quot; );  // Set the pen color to blue&lt;br /&gt;
        CommandList += osMovePen( CommandList, 28, 78 );        // Upper left corner at &amp;lt;28,78&amp;gt;&lt;br /&gt;
        CommandList += osDrawEllipse( CommandList, 200, 100 ); // 200 pixels by 100 pixels&lt;br /&gt;
&lt;br /&gt;
        // Now draw the ellipse&lt;br /&gt;
        osSetDynamicTextureData( &amp;quot;&amp;quot;, &amp;quot;vector&amp;quot;, CommandList, &amp;quot;width:256,height:256&amp;quot;, 0 );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Drawing_commands</id>
		<title>Drawing commands</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Drawing_commands"/>
				<updated>2009-07-27T22:47:43Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Fixed spacing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[Dynamic textures]] -&amp;gt; [[Drawing commands]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The drawing commands are strings of text which are concatenated to create a larger string of graphical instructions, which is then passed as a parameter to the [[Dynamic textures|dynamic texture]] drawing functions. With two exceptions, there are convenience functions, such as [[osDrawRectangle]](), provided to assist in building the command list. It is slightly more efficient to directly manipulate the string containing the drawing commands, as it avoids the overhead of multiple function calls (albeit with an arguable loss of readability).&lt;br /&gt;
&lt;br /&gt;
In general, the drawing commands consist of a case-sensitive token which identifies the command, followed by one or more comma-delimited parameters, and terminating in a separator character (a semicolon by default). Whitespace surrounding the commas and/or separator is permitted.&lt;br /&gt;
&lt;br /&gt;
In the examples which follow, it is assumed that ''CommandList'' is a string variable which has already been defined within the script source code.&lt;br /&gt;
&lt;br /&gt;
==Graphics Primitive Drawing Commands==&lt;br /&gt;
&lt;br /&gt;
===Ellipse===&lt;br /&gt;
&lt;br /&gt;
;Ellipse float width, float height;&lt;br /&gt;
:Draws an ellipse with the current pen size and color.&lt;br /&gt;
&lt;br /&gt;
:The ellipse is drawn with the specified width and height (in pixels), centered on a point which is (width/2) pixels to the right of the pen's current X position, and (height/2) pixels below the pen's current Y position. After the ellipse is drawn, the width and height values are added to the pen's X and Y position, respectively.&lt;br /&gt;
&lt;br /&gt;
:Although the parameters accept floating-point values, anything after a decimal point will be ignored.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;Ellipse 100,100;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===FillRectangle===&lt;br /&gt;
&lt;br /&gt;
;FillRectangle float width, float height;&lt;br /&gt;
:Draws a rectangle, bordered and filled with the current pen size and color.&lt;br /&gt;
&lt;br /&gt;
:The rectangle is drawn at the specified width and height (in pixels), with the upper left corner of the rectangle placed at the pen's current position. After the rectangle is drawn, the width and height values are added to the pen's X and Y position, respectively.&lt;br /&gt;
&lt;br /&gt;
:Although the parameters accept floating-point values, anything after a decimal point will be ignored.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;FillRectangle 150,75;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Image===&lt;br /&gt;
&lt;br /&gt;
;Image float height, float width, string URL;&lt;br /&gt;
:Retrieves an image specified by the URL parameter and draws it at the specified height and width, with the upper left corner of the image placed at the pen's current position. After the image is drawn, the width and height values are added to the pen's X and Y position, respectively.&lt;br /&gt;
&lt;br /&gt;
:If the URL points to an invalid location, an image type not supported by libgdi, or a non-image MIME type, nothing is drawn. If either or both of the '''width''' or '''height''' parameters are zero or negative, nothing is drawn, but the image is still retrieved.&lt;br /&gt;
&lt;br /&gt;
:Although the '''width''' and '''height''' parameters accept floating-point values, anything after a decimal point will be ignored.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;Image 293,62,&amp;lt;nowiki&amp;gt;http://opensimulator.org/skins/osmonobook/images/headerLogo.png&amp;lt;/nowiki&amp;gt;;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===LineTo===&lt;br /&gt;
&lt;br /&gt;
;LineTo float x, float y;&lt;br /&gt;
:Draws a line from the pen's current location to the specified coordinates, using the pen's current color and width.&lt;br /&gt;
&lt;br /&gt;
:After the line is drawn, the specified coordinates become the pen's new current location.&lt;br /&gt;
&lt;br /&gt;
:Although the parameters accept floating-point values, anything after a decimal point will be ignored.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;LineTo 640,480;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===MoveTo===&lt;br /&gt;
&lt;br /&gt;
;MoveTo float x, float y;&lt;br /&gt;
:Updates the pen's current position to the coordinates provided in the parameters. Nothing is drawn.&lt;br /&gt;
&lt;br /&gt;
:Although the parameters accept floating-point values, anything after a decimal point will be ignored.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;MoveTo 570,23;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===PenColour===&lt;br /&gt;
&lt;br /&gt;
;PenColour string NewColor;&lt;br /&gt;
:Sets the pen's drawing color to either the specified [http://msdn.microsoft.com/en-us/library/aa358802.aspx named .NET color] or to a 32-bit color value (formatted as eight hexadecimal digits in the format aarrggbb, representing the eight-bit alpha, red, green and blue channels).&lt;br /&gt;
&lt;br /&gt;
:For full opacity, use an alpha value of ff (e.g. &amp;lt;tt&amp;gt;ffff0000&amp;lt;/tt&amp;gt; for red); for varying degrees of transparency, reduce the alpha value (e.g. &amp;lt;tt&amp;gt;800000ff&amp;lt;/tt&amp;gt; for half-transparent blue).&lt;br /&gt;
&lt;br /&gt;
:The color names and hexadecimal color representations are not case-sensitive.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;PenColour MidnightBlue;&amp;quot;;&lt;br /&gt;
CommandList += &amp;quot;PenColour ff191970;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===PenSize===&lt;br /&gt;
&lt;br /&gt;
;PenSize float width;&lt;br /&gt;
:Sets the pen size to a square of '''width''' pixels by '''width''' pixels. If '''width''' is an odd number, the pen will be exactly centered on the coordinates provided in the various drawing commands; if it is an even number, it will be centered slightly higher and to the left of the actual coordinates.&lt;br /&gt;
&lt;br /&gt;
:Although the parameter accepts a floating-point value, anything following a decimal point will be ignored.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;PenSize 5;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Rectangle===&lt;br /&gt;
&lt;br /&gt;
;Rectangle float width, float height;&lt;br /&gt;
:Draws an unfilled rectangle, using the current pen size and color.&lt;br /&gt;
&lt;br /&gt;
:The rectangle is drawn at the specified width and height (in pixels), with the upper left corner of the rectangle placed at the pen's current position. After the rectangle is drawn, the width and height values are added to the pen's X and Y position, respectively.&lt;br /&gt;
&lt;br /&gt;
:Although the parameters accept floating-point values, anything after a decimal point will be ignored.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;Rectangle 150,75;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text Drawing Commands==&lt;br /&gt;
&lt;br /&gt;
===FontName===&lt;br /&gt;
&lt;br /&gt;
;FontName string fontname;&lt;br /&gt;
:Sets the font used by the '''[[#Text|Text]]''' command. If the specified font is not installed on the system, the default font (Arial or its local equivalent) is used.&lt;br /&gt;
&lt;br /&gt;
:There is no equivalent convenience function; if you wish to change the font used by the '''[[#Text|Text]]''' command, you must manipulate the string directly.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;FontName Times New Roman;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===FontProp===&lt;br /&gt;
&lt;br /&gt;
;FontProp string properties;&lt;br /&gt;
:Sets the text display properties (Regular, Boldface, Underline, Italic and Strikeout) used by subsequent '''[[#Text|Text]]''' calls. The properties are represented by single letters (R,B,U,I and S, respectively), separated by commas. 'R' is a special case which turns off all other properties, while the others are additive.&lt;br /&gt;
&lt;br /&gt;
:There is no equivalent convenience function; if you wish to change the properties of the font used by the '''[[#Text|Text]]''' command, you must manipulate the string directly.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;FontProp B,I;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===FontSize===&lt;br /&gt;
&lt;br /&gt;
;FontSize float size;&lt;br /&gt;
:Sets the font size used by subsequent '''[[#Text|Text]]''' calls. The '''size''' parameter represents the font height in points. &lt;br /&gt;
&lt;br /&gt;
:Please note that the font height is given in ''points'', not in ''pixels''. The resulting size of the font in pixels may vary depending on the system settings, specifically the display system's &amp;quot;dots per inch&amp;quot; metric.  A system set to 96dpi will produce differently sized text than a system set to 120dpi. If precise text size is required, consider using the [[osGetDrawStringSize]]() function to help calculate the proper FontSize value to use (but bear in mind that [[osGetDrawStringSize]]() takes an integer parameter for the size, whereas FontSize does use floating-point values).&lt;br /&gt;
&lt;br /&gt;
:Unlike the other drawing commands, anything following a decimal point in the '''size''' parameter is significant.&lt;br /&gt;
&lt;br /&gt;
:If a negative FontSize parameter is specified, any text subsequently added will be displayed upside down and to the right of the point of origin.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;FontSize 12;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Text===&lt;br /&gt;
&lt;br /&gt;
;Text string text;&lt;br /&gt;
:Draws the specified string of text with the current pen color, using the currently defined [[#FontName|font]], [[#FontSize|size]] and [[#FontProp|properties]] (which default to regular 14-point Arial).&lt;br /&gt;
&lt;br /&gt;
:The text will be drawn with the upper left corner of the first glyph at the pen's current position (however, note that glyphs within the font may be defined to extend to the left of their origin point).&lt;br /&gt;
&lt;br /&gt;
:If you need to include a semicolon in the text to be displayed, you will have to change the command delimiter in the &amp;lt;tt&amp;gt;extraParams&amp;lt;/tt&amp;gt; parameter to the osSetDynamicTexture* functions. However, this will require that ''all'' commands be terminated with the alternate delimiter, and you cannot use the convenience functions (which are hardcoded to use a semicolon).&lt;br /&gt;
&lt;br /&gt;
:The text may or may not be antialiased, depending on the system settings of the machine upon which the simulator is running. Furthermore, if the system is configured to use LCD subpixel antialiasing (e.g. ClearType), the text may have colored fringes on the smoothed pixels, which may result in a less than optimum image.&lt;br /&gt;
&lt;br /&gt;
:Please note that the pen position is ''not'' updated after this call.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;Text Nobody here but us hippos!;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Drawing_commands</id>
		<title>Drawing commands</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Drawing_commands"/>
				<updated>2009-07-27T22:47:10Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Added hierarchical navigation links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[Dynamic textures]] -&amp;gt; [[Drawing commands]]&lt;br /&gt;
&lt;br /&gt;
The drawing commands are strings of text which are concatenated to create a larger string of graphical instructions, which is then passed as a parameter to the [[Dynamic textures|dynamic texture]] drawing functions. With two exceptions, there are convenience functions, such as [[osDrawRectangle]](), provided to assist in building the command list. It is slightly more efficient to directly manipulate the string containing the drawing commands, as it avoids the overhead of multiple function calls (albeit with an arguable loss of readability).&lt;br /&gt;
&lt;br /&gt;
In general, the drawing commands consist of a case-sensitive token which identifies the command, followed by one or more comma-delimited parameters, and terminating in a separator character (a semicolon by default). Whitespace surrounding the commas and/or separator is permitted.&lt;br /&gt;
&lt;br /&gt;
In the examples which follow, it is assumed that ''CommandList'' is a string variable which has already been defined within the script source code.&lt;br /&gt;
&lt;br /&gt;
==Graphics Primitive Drawing Commands==&lt;br /&gt;
&lt;br /&gt;
===Ellipse===&lt;br /&gt;
&lt;br /&gt;
;Ellipse float width, float height;&lt;br /&gt;
:Draws an ellipse with the current pen size and color.&lt;br /&gt;
&lt;br /&gt;
:The ellipse is drawn with the specified width and height (in pixels), centered on a point which is (width/2) pixels to the right of the pen's current X position, and (height/2) pixels below the pen's current Y position. After the ellipse is drawn, the width and height values are added to the pen's X and Y position, respectively.&lt;br /&gt;
&lt;br /&gt;
:Although the parameters accept floating-point values, anything after a decimal point will be ignored.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;Ellipse 100,100;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===FillRectangle===&lt;br /&gt;
&lt;br /&gt;
;FillRectangle float width, float height;&lt;br /&gt;
:Draws a rectangle, bordered and filled with the current pen size and color.&lt;br /&gt;
&lt;br /&gt;
:The rectangle is drawn at the specified width and height (in pixels), with the upper left corner of the rectangle placed at the pen's current position. After the rectangle is drawn, the width and height values are added to the pen's X and Y position, respectively.&lt;br /&gt;
&lt;br /&gt;
:Although the parameters accept floating-point values, anything after a decimal point will be ignored.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;FillRectangle 150,75;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Image===&lt;br /&gt;
&lt;br /&gt;
;Image float height, float width, string URL;&lt;br /&gt;
:Retrieves an image specified by the URL parameter and draws it at the specified height and width, with the upper left corner of the image placed at the pen's current position. After the image is drawn, the width and height values are added to the pen's X and Y position, respectively.&lt;br /&gt;
&lt;br /&gt;
:If the URL points to an invalid location, an image type not supported by libgdi, or a non-image MIME type, nothing is drawn. If either or both of the '''width''' or '''height''' parameters are zero or negative, nothing is drawn, but the image is still retrieved.&lt;br /&gt;
&lt;br /&gt;
:Although the '''width''' and '''height''' parameters accept floating-point values, anything after a decimal point will be ignored.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;Image 293,62,&amp;lt;nowiki&amp;gt;http://opensimulator.org/skins/osmonobook/images/headerLogo.png&amp;lt;/nowiki&amp;gt;;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===LineTo===&lt;br /&gt;
&lt;br /&gt;
;LineTo float x, float y;&lt;br /&gt;
:Draws a line from the pen's current location to the specified coordinates, using the pen's current color and width.&lt;br /&gt;
&lt;br /&gt;
:After the line is drawn, the specified coordinates become the pen's new current location.&lt;br /&gt;
&lt;br /&gt;
:Although the parameters accept floating-point values, anything after a decimal point will be ignored.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;LineTo 640,480;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===MoveTo===&lt;br /&gt;
&lt;br /&gt;
;MoveTo float x, float y;&lt;br /&gt;
:Updates the pen's current position to the coordinates provided in the parameters. Nothing is drawn.&lt;br /&gt;
&lt;br /&gt;
:Although the parameters accept floating-point values, anything after a decimal point will be ignored.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;MoveTo 570,23;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===PenColour===&lt;br /&gt;
&lt;br /&gt;
;PenColour string NewColor;&lt;br /&gt;
:Sets the pen's drawing color to either the specified [http://msdn.microsoft.com/en-us/library/aa358802.aspx named .NET color] or to a 32-bit color value (formatted as eight hexadecimal digits in the format aarrggbb, representing the eight-bit alpha, red, green and blue channels).&lt;br /&gt;
&lt;br /&gt;
:For full opacity, use an alpha value of ff (e.g. &amp;lt;tt&amp;gt;ffff0000&amp;lt;/tt&amp;gt; for red); for varying degrees of transparency, reduce the alpha value (e.g. &amp;lt;tt&amp;gt;800000ff&amp;lt;/tt&amp;gt; for half-transparent blue).&lt;br /&gt;
&lt;br /&gt;
:The color names and hexadecimal color representations are not case-sensitive.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;PenColour MidnightBlue;&amp;quot;;&lt;br /&gt;
CommandList += &amp;quot;PenColour ff191970;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===PenSize===&lt;br /&gt;
&lt;br /&gt;
;PenSize float width;&lt;br /&gt;
:Sets the pen size to a square of '''width''' pixels by '''width''' pixels. If '''width''' is an odd number, the pen will be exactly centered on the coordinates provided in the various drawing commands; if it is an even number, it will be centered slightly higher and to the left of the actual coordinates.&lt;br /&gt;
&lt;br /&gt;
:Although the parameter accepts a floating-point value, anything following a decimal point will be ignored.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;PenSize 5;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Rectangle===&lt;br /&gt;
&lt;br /&gt;
;Rectangle float width, float height;&lt;br /&gt;
:Draws an unfilled rectangle, using the current pen size and color.&lt;br /&gt;
&lt;br /&gt;
:The rectangle is drawn at the specified width and height (in pixels), with the upper left corner of the rectangle placed at the pen's current position. After the rectangle is drawn, the width and height values are added to the pen's X and Y position, respectively.&lt;br /&gt;
&lt;br /&gt;
:Although the parameters accept floating-point values, anything after a decimal point will be ignored.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;Rectangle 150,75;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text Drawing Commands==&lt;br /&gt;
&lt;br /&gt;
===FontName===&lt;br /&gt;
&lt;br /&gt;
;FontName string fontname;&lt;br /&gt;
:Sets the font used by the '''[[#Text|Text]]''' command. If the specified font is not installed on the system, the default font (Arial or its local equivalent) is used.&lt;br /&gt;
&lt;br /&gt;
:There is no equivalent convenience function; if you wish to change the font used by the '''[[#Text|Text]]''' command, you must manipulate the string directly.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;FontName Times New Roman;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===FontProp===&lt;br /&gt;
&lt;br /&gt;
;FontProp string properties;&lt;br /&gt;
:Sets the text display properties (Regular, Boldface, Underline, Italic and Strikeout) used by subsequent '''[[#Text|Text]]''' calls. The properties are represented by single letters (R,B,U,I and S, respectively), separated by commas. 'R' is a special case which turns off all other properties, while the others are additive.&lt;br /&gt;
&lt;br /&gt;
:There is no equivalent convenience function; if you wish to change the properties of the font used by the '''[[#Text|Text]]''' command, you must manipulate the string directly.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;FontProp B,I;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===FontSize===&lt;br /&gt;
&lt;br /&gt;
;FontSize float size;&lt;br /&gt;
:Sets the font size used by subsequent '''[[#Text|Text]]''' calls. The '''size''' parameter represents the font height in points. &lt;br /&gt;
&lt;br /&gt;
:Please note that the font height is given in ''points'', not in ''pixels''. The resulting size of the font in pixels may vary depending on the system settings, specifically the display system's &amp;quot;dots per inch&amp;quot; metric.  A system set to 96dpi will produce differently sized text than a system set to 120dpi. If precise text size is required, consider using the [[osGetDrawStringSize]]() function to help calculate the proper FontSize value to use (but bear in mind that [[osGetDrawStringSize]]() takes an integer parameter for the size, whereas FontSize does use floating-point values).&lt;br /&gt;
&lt;br /&gt;
:Unlike the other drawing commands, anything following a decimal point in the '''size''' parameter is significant.&lt;br /&gt;
&lt;br /&gt;
:If a negative FontSize parameter is specified, any text subsequently added will be displayed upside down and to the right of the point of origin.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;FontSize 12;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Text===&lt;br /&gt;
&lt;br /&gt;
;Text string text;&lt;br /&gt;
:Draws the specified string of text with the current pen color, using the currently defined [[#FontName|font]], [[#FontSize|size]] and [[#FontProp|properties]] (which default to regular 14-point Arial).&lt;br /&gt;
&lt;br /&gt;
:The text will be drawn with the upper left corner of the first glyph at the pen's current position (however, note that glyphs within the font may be defined to extend to the left of their origin point).&lt;br /&gt;
&lt;br /&gt;
:If you need to include a semicolon in the text to be displayed, you will have to change the command delimiter in the &amp;lt;tt&amp;gt;extraParams&amp;lt;/tt&amp;gt; parameter to the osSetDynamicTexture* functions. However, this will require that ''all'' commands be terminated with the alternate delimiter, and you cannot use the convenience functions (which are hardcoded to use a semicolon).&lt;br /&gt;
&lt;br /&gt;
:The text may or may not be antialiased, depending on the system settings of the machine upon which the simulator is running. Furthermore, if the system is configured to use LCD subpixel antialiasing (e.g. ClearType), the text may have colored fringes on the smoothed pixels, which may result in a less than optimum image.&lt;br /&gt;
&lt;br /&gt;
:Please note that the pen position is ''not'' updated after this call.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;Text Nobody here but us hippos!;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Dynamic_textures</id>
		<title>Dynamic textures</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Dynamic_textures"/>
				<updated>2009-07-27T22:46:10Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Added hierarchical navigation links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[Status | Status Page]] -&amp;gt; [[OSSL_Implemented| OSSL Implemented Functions]] -&amp;gt; [[Dynamic textures]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dynamic textures allow scripts to create images on the fly, combining graphics loaded from the World Wide Web with text, lines, ellipses and filled or unfilled rectangles. The textures thus created are temporary, maintained by the individual region in which they are created, and are not permanently stored in the [[Asset Server]].&lt;br /&gt;
&lt;br /&gt;
In general, one creates a string containing a list of [[Drawing commands]] and parameters, either directly or with the aid of one of the &amp;quot;convenience&amp;quot; drawing functions listed below, then passes this string as a parameter to one of the osSetDynamicTexture* commands.&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;|'''Graphics Primitive Drawing Functions'''&lt;br /&gt;
*[[osDrawEllipse]]&lt;br /&gt;
*[[osDrawFilledRectangle]]&lt;br /&gt;
*[[osDrawImage]]&lt;br /&gt;
*[[osDrawLine]]&lt;br /&gt;
*[[osDrawRectangle]]&lt;br /&gt;
*[[osMovePen]]&lt;br /&gt;
*[[osSetPenColour]]&lt;br /&gt;
*[[osSetPenSize]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Text Drawing Functions'''&lt;br /&gt;
*[[osDrawText]]&lt;br /&gt;
*[[osSetFontSize]]&lt;br /&gt;
*[[osGetDrawStringSize]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Dynamic Texture Creation Functions'''&lt;br /&gt;
*[[osSetDynamicTextureURL]]&lt;br /&gt;
*[[osSetDynamicTextureURLBlend]]&lt;br /&gt;
*[[osSetDynamicTextureURLBlendFace]]&lt;br /&gt;
*[[osSetDynamicTextureData]]&lt;br /&gt;
*[[osSetDynamicTextureDataBlend]]&lt;br /&gt;
*[[osSetDynamicTextureDataBlendFace]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;|'''Graphics Primitive Drawing Commands'''&lt;br /&gt;
*[[Drawing commands#Ellipse|Ellipse]]&lt;br /&gt;
*[[Drawing commands#FillRectangle|FillRectangle]]&lt;br /&gt;
*[[Drawing commands#Image|Image]]&lt;br /&gt;
*[[Drawing commands#LineTo|LineTo]]&lt;br /&gt;
*[[Drawing commands#MoveTo|MoveTo]]&lt;br /&gt;
*[[Drawing commands#PenColour|PenColour]]&lt;br /&gt;
*[[Drawing commands#PenSize|PenSize]]&lt;br /&gt;
*[[Drawing commands#Rectangle|Rectangle]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Text Drawing Commands'''&lt;br /&gt;
*[[Drawing commands#FontName|FontName]]&lt;br /&gt;
*[[Drawing commands#FontProp|FontProp]]&lt;br /&gt;
*[[Drawing commands#FontSize|FontSize]]&lt;br /&gt;
*[[Drawing commands#Text|Text]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Dynamic_textures</id>
		<title>Dynamic textures</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Dynamic_textures"/>
				<updated>2009-07-27T22:42:17Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Added Quicklinks&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
Dynamic textures allow scripts to create images on the fly, combining graphics loaded from the World Wide Web with text, lines, ellipses and filled or unfilled rectangles. The textures thus created are temporary, maintained by the individual region in which they are created, and are not permanently stored in the [[Asset Server]].&lt;br /&gt;
&lt;br /&gt;
In general, one creates a string containing a list of [[Drawing commands]] and parameters, either directly or with the aid of one of the &amp;quot;convenience&amp;quot; drawing functions listed below, then passes this string as a parameter to one of the osSetDynamicTexture* commands.&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;|'''Graphics Primitive Drawing Functions'''&lt;br /&gt;
*[[osDrawEllipse]]&lt;br /&gt;
*[[osDrawFilledRectangle]]&lt;br /&gt;
*[[osDrawImage]]&lt;br /&gt;
*[[osDrawLine]]&lt;br /&gt;
*[[osDrawRectangle]]&lt;br /&gt;
*[[osMovePen]]&lt;br /&gt;
*[[osSetPenColour]]&lt;br /&gt;
*[[osSetPenSize]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Text Drawing Functions'''&lt;br /&gt;
*[[osDrawText]]&lt;br /&gt;
*[[osSetFontSize]]&lt;br /&gt;
*[[osGetDrawStringSize]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Dynamic Texture Creation Functions'''&lt;br /&gt;
*[[osSetDynamicTextureURL]]&lt;br /&gt;
*[[osSetDynamicTextureURLBlend]]&lt;br /&gt;
*[[osSetDynamicTextureURLBlendFace]]&lt;br /&gt;
*[[osSetDynamicTextureData]]&lt;br /&gt;
*[[osSetDynamicTextureDataBlend]]&lt;br /&gt;
*[[osSetDynamicTextureDataBlendFace]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;|'''Graphics Primitive Drawing Commands'''&lt;br /&gt;
*[[Drawing commands#Ellipse|Ellipse]]&lt;br /&gt;
*[[Drawing commands#FillRectangle|FillRectangle]]&lt;br /&gt;
*[[Drawing commands#Image|Image]]&lt;br /&gt;
*[[Drawing commands#LineTo|LineTo]]&lt;br /&gt;
*[[Drawing commands#MoveTo|MoveTo]]&lt;br /&gt;
*[[Drawing commands#PenColour|PenColour]]&lt;br /&gt;
*[[Drawing commands#PenSize|PenSize]]&lt;br /&gt;
*[[Drawing commands#Rectangle|Rectangle]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Text Drawing Commands'''&lt;br /&gt;
*[[Drawing commands#FontName|FontName]]&lt;br /&gt;
*[[Drawing commands#FontProp|FontProp]]&lt;br /&gt;
*[[Drawing commands#FontSize|FontSize]]&lt;br /&gt;
*[[Drawing commands#Text|Text]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsDrawEllipse</id>
		<title>OsDrawEllipse</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsDrawEllipse"/>
				<updated>2009-07-27T22:41:45Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Added Quicklinks&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
LSL: '''[[string]] osDrawEllipse( [[string]] drawList, [[integer]] width, [[integer]] height )'''&amp;lt;br /&amp;gt;&lt;br /&gt;
C#: '''[[string]] osDrawEllipse( [[string]] drawList, [[int]] width, [[int]] height )'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Appends an [[Drawing_commands#Ellipse|Ellipse]] drawing command to the string provided in '''drawList''' and returns the result.&lt;br /&gt;
&lt;br /&gt;
The ellipse is drawn with the current pen size and color, with the specified width and height (in pixels), centered on a point which is (width/2) pixels to the right of the pen's current X position, and (height/2) pixels below the pen's current Y position. After the ellipse is drawn, the width and height values are added to the pen's X and Y position, respectively.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Example of osDrawEllipse&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        string CommandList = &amp;quot;&amp;quot;; // Storage for our drawing commands&lt;br /&gt;
&lt;br /&gt;
        CommandList += osSetPenSize( CommandList, 3 );         // Set the pen width to 3 pixels&lt;br /&gt;
        CommandList += osSetPenColour( CommandList, &amp;quot;Blue&amp;quot; );  // Set the pen color to blue&lt;br /&gt;
        CommandList += osMovePen( CommandList, 28, 78 );        // Upper left corner at &amp;lt;28,78&amp;gt;&lt;br /&gt;
        CommandList += osDrawEllipse( CommandList, 200, 100 ); // 200 pixels by 100 pixels&lt;br /&gt;
&lt;br /&gt;
        // Now draw the ellipse&lt;br /&gt;
        osSetDynamicTextureData( &amp;quot;&amp;quot;, &amp;quot;vector&amp;quot;, CommandList, &amp;quot;width:256,height:256&amp;quot;, 0 );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsDrawEllipse</id>
		<title>OsDrawEllipse</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsDrawEllipse"/>
				<updated>2009-07-27T22:40:51Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Page created.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LSL: '''[[string]] osDrawEllipse( [[string]] drawList, [[integer]] width, [[integer]] height )'''&amp;lt;br /&amp;gt;&lt;br /&gt;
C#: '''[[string]] osDrawEllipse( [[string]] drawList, [[int]] width, [[int]] height )'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Appends an [[Drawing_commands#Ellipse|Ellipse]] drawing command to the string provided in '''drawList''' and returns the result.&lt;br /&gt;
&lt;br /&gt;
The ellipse is drawn with the current pen size and color, with the specified width and height (in pixels), centered on a point which is (width/2) pixels to the right of the pen's current X position, and (height/2) pixels below the pen's current Y position. After the ellipse is drawn, the width and height values are added to the pen's X and Y position, respectively.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Example of osDrawEllipse&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        string CommandList = &amp;quot;&amp;quot;; // Storage for our drawing commands&lt;br /&gt;
&lt;br /&gt;
        CommandList += osSetPenSize( CommandList, 3 );         // Set the pen width to 3 pixels&lt;br /&gt;
        CommandList += osSetPenColour( CommandList, &amp;quot;Blue&amp;quot; );  // Set the pen color to blue&lt;br /&gt;
        CommandList += osMovePen( CommandList, 28, 78 );        // Upper left corner at &amp;lt;28,78&amp;gt;&lt;br /&gt;
        CommandList += osDrawEllipse( CommandList, 200, 100 ); // 200 pixels by 100 pixels&lt;br /&gt;
&lt;br /&gt;
        // Now draw the ellipse&lt;br /&gt;
        osSetDynamicTextureData( &amp;quot;&amp;quot;, &amp;quot;vector&amp;quot;, CommandList, &amp;quot;width:256,height:256&amp;quot;, 0 );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Dynamic_textures</id>
		<title>Dynamic textures</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Dynamic_textures"/>
				<updated>2009-07-27T21:39:08Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Page created.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dynamic textures allow scripts to create images on the fly, combining graphics loaded from the World Wide Web with text, lines, ellipses and filled or unfilled rectangles. The textures thus created are temporary, maintained by the individual region in which they are created, and are not permanently stored in the [[Asset Server]].&lt;br /&gt;
&lt;br /&gt;
In general, one creates a string containing a list of [[Drawing commands]] and parameters, either directly or with the aid of one of the &amp;quot;convenience&amp;quot; drawing functions listed below, then passes this string as a parameter to one of the osSetDynamicTexture* commands.&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;|'''Graphics Primitive Drawing Functions'''&lt;br /&gt;
*[[osDrawEllipse]]&lt;br /&gt;
*[[osDrawFilledRectangle]]&lt;br /&gt;
*[[osDrawImage]]&lt;br /&gt;
*[[osDrawLine]]&lt;br /&gt;
*[[osDrawRectangle]]&lt;br /&gt;
*[[osMovePen]]&lt;br /&gt;
*[[osSetPenColour]]&lt;br /&gt;
*[[osSetPenSize]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Text Drawing Functions'''&lt;br /&gt;
*[[osDrawText]]&lt;br /&gt;
*[[osSetFontSize]]&lt;br /&gt;
*[[osGetDrawStringSize]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Dynamic Texture Creation Functions'''&lt;br /&gt;
*[[osSetDynamicTextureURL]]&lt;br /&gt;
*[[osSetDynamicTextureURLBlend]]&lt;br /&gt;
*[[osSetDynamicTextureURLBlendFace]]&lt;br /&gt;
*[[osSetDynamicTextureData]]&lt;br /&gt;
*[[osSetDynamicTextureDataBlend]]&lt;br /&gt;
*[[osSetDynamicTextureDataBlendFace]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;|'''Graphics Primitive Drawing Commands'''&lt;br /&gt;
*[[Drawing commands#Ellipse|Ellipse]]&lt;br /&gt;
*[[Drawing commands#FillRectangle|FillRectangle]]&lt;br /&gt;
*[[Drawing commands#Image|Image]]&lt;br /&gt;
*[[Drawing commands#LineTo|LineTo]]&lt;br /&gt;
*[[Drawing commands#MoveTo|MoveTo]]&lt;br /&gt;
*[[Drawing commands#PenColour|PenColour]]&lt;br /&gt;
*[[Drawing commands#PenSize|PenSize]]&lt;br /&gt;
*[[Drawing commands#Rectangle|Rectangle]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Text Drawing Commands'''&lt;br /&gt;
*[[Drawing commands#FontName|FontName]]&lt;br /&gt;
*[[Drawing commands#FontProp|FontProp]]&lt;br /&gt;
*[[Drawing commands#FontSize|FontSize]]&lt;br /&gt;
*[[Drawing commands#Text|Text]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Talk:Drawing_commands</id>
		<title>Talk:Drawing commands</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Talk:Drawing_commands"/>
				<updated>2009-07-27T20:34:44Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Explanation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I know this page contains information available elsewhere in the wiki (e.g. [[OSSL_TextureDrawing]]); I'm trying to create a more complete and up-to-date set of reference pages for OSSL, and I felt splitting the information into logical sections would make it ultimately more usable.&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Drawing_commands</id>
		<title>Drawing commands</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Drawing_commands"/>
				<updated>2009-07-27T20:31:21Z</updated>
		
		<summary type="html">&lt;p&gt;Godfrey: Page created.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
The drawing commands are strings of text which are concatenated to create a larger string of graphical instructions, which is then passed as a parameter to the [[Dynamic textures|dynamic texture]] drawing functions. With two exceptions, there are convenience functions, such as [[osDrawRectangle]](), provided to assist in building the command list. It is slightly more efficient to directly manipulate the string containing the drawing commands, as it avoids the overhead of multiple function calls (albeit with an arguable loss of readability).&lt;br /&gt;
&lt;br /&gt;
In general, the drawing commands consist of a case-sensitive token which identifies the command, followed by one or more comma-delimited parameters, and terminating in a separator character (a semicolon by default). Whitespace surrounding the commas and/or separator is permitted.&lt;br /&gt;
&lt;br /&gt;
In the examples which follow, it is assumed that ''CommandList'' is a string variable which has already been defined within the script source code.&lt;br /&gt;
&lt;br /&gt;
==Graphics Primitive Drawing Commands==&lt;br /&gt;
&lt;br /&gt;
===Ellipse===&lt;br /&gt;
&lt;br /&gt;
;Ellipse float width, float height;&lt;br /&gt;
:Draws an ellipse with the current pen size and color.&lt;br /&gt;
&lt;br /&gt;
:The ellipse is drawn with the specified width and height (in pixels), centered on a point which is (width/2) pixels to the right of the pen's current X position, and (height/2) pixels below the pen's current Y position. After the ellipse is drawn, the width and height values are added to the pen's X and Y position, respectively.&lt;br /&gt;
&lt;br /&gt;
:Although the parameters accept floating-point values, anything after a decimal point will be ignored.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;Ellipse 100,100;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===FillRectangle===&lt;br /&gt;
&lt;br /&gt;
;FillRectangle float width, float height;&lt;br /&gt;
:Draws a rectangle, bordered and filled with the current pen size and color.&lt;br /&gt;
&lt;br /&gt;
:The rectangle is drawn at the specified width and height (in pixels), with the upper left corner of the rectangle placed at the pen's current position. After the rectangle is drawn, the width and height values are added to the pen's X and Y position, respectively.&lt;br /&gt;
&lt;br /&gt;
:Although the parameters accept floating-point values, anything after a decimal point will be ignored.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;FillRectangle 150,75;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Image===&lt;br /&gt;
&lt;br /&gt;
;Image float height, float width, string URL;&lt;br /&gt;
:Retrieves an image specified by the URL parameter and draws it at the specified height and width, with the upper left corner of the image placed at the pen's current position. After the image is drawn, the width and height values are added to the pen's X and Y position, respectively.&lt;br /&gt;
&lt;br /&gt;
:If the URL points to an invalid location, an image type not supported by libgdi, or a non-image MIME type, nothing is drawn. If either or both of the '''width''' or '''height''' parameters are zero or negative, nothing is drawn, but the image is still retrieved.&lt;br /&gt;
&lt;br /&gt;
:Although the '''width''' and '''height''' parameters accept floating-point values, anything after a decimal point will be ignored.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;Image 293,62,&amp;lt;nowiki&amp;gt;http://opensimulator.org/skins/osmonobook/images/headerLogo.png&amp;lt;/nowiki&amp;gt;;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===LineTo===&lt;br /&gt;
&lt;br /&gt;
;LineTo float x, float y;&lt;br /&gt;
:Draws a line from the pen's current location to the specified coordinates, using the pen's current color and width.&lt;br /&gt;
&lt;br /&gt;
:After the line is drawn, the specified coordinates become the pen's new current location.&lt;br /&gt;
&lt;br /&gt;
:Although the parameters accept floating-point values, anything after a decimal point will be ignored.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;LineTo 640,480;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===MoveTo===&lt;br /&gt;
&lt;br /&gt;
;MoveTo float x, float y;&lt;br /&gt;
:Updates the pen's current position to the coordinates provided in the parameters. Nothing is drawn.&lt;br /&gt;
&lt;br /&gt;
:Although the parameters accept floating-point values, anything after a decimal point will be ignored.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;MoveTo 570,23;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===PenColour===&lt;br /&gt;
&lt;br /&gt;
;PenColour string NewColor;&lt;br /&gt;
:Sets the pen's drawing color to either the specified [http://msdn.microsoft.com/en-us/library/aa358802.aspx named .NET color] or to a 32-bit color value (formatted as eight hexadecimal digits in the format aarrggbb, representing the eight-bit alpha, red, green and blue channels).&lt;br /&gt;
&lt;br /&gt;
:For full opacity, use an alpha value of ff (e.g. &amp;lt;tt&amp;gt;ffff0000&amp;lt;/tt&amp;gt; for red); for varying degrees of transparency, reduce the alpha value (e.g. &amp;lt;tt&amp;gt;800000ff&amp;lt;/tt&amp;gt; for half-transparent blue).&lt;br /&gt;
&lt;br /&gt;
:The color names and hexadecimal color representations are not case-sensitive.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;PenColour MidnightBlue;&amp;quot;;&lt;br /&gt;
CommandList += &amp;quot;PenColour ff191970;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===PenSize===&lt;br /&gt;
&lt;br /&gt;
;PenSize float width;&lt;br /&gt;
:Sets the pen size to a square of '''width''' pixels by '''width''' pixels. If '''width''' is an odd number, the pen will be exactly centered on the coordinates provided in the various drawing commands; if it is an even number, it will be centered slightly higher and to the left of the actual coordinates.&lt;br /&gt;
&lt;br /&gt;
:Although the parameter accepts a floating-point value, anything following a decimal point will be ignored.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;PenSize 5;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Rectangle===&lt;br /&gt;
&lt;br /&gt;
;Rectangle float width, float height;&lt;br /&gt;
:Draws an unfilled rectangle, using the current pen size and color.&lt;br /&gt;
&lt;br /&gt;
:The rectangle is drawn at the specified width and height (in pixels), with the upper left corner of the rectangle placed at the pen's current position. After the rectangle is drawn, the width and height values are added to the pen's X and Y position, respectively.&lt;br /&gt;
&lt;br /&gt;
:Although the parameters accept floating-point values, anything after a decimal point will be ignored.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;Rectangle 150,75;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Text Drawing Commands==&lt;br /&gt;
&lt;br /&gt;
===FontName===&lt;br /&gt;
&lt;br /&gt;
;FontName string fontname;&lt;br /&gt;
:Sets the font used by the '''[[#Text|Text]]''' command. If the specified font is not installed on the system, the default font (Arial or its local equivalent) is used.&lt;br /&gt;
&lt;br /&gt;
:There is no equivalent convenience function; if you wish to change the font used by the '''[[#Text|Text]]''' command, you must manipulate the string directly.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;FontName Times New Roman;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===FontProp===&lt;br /&gt;
&lt;br /&gt;
;FontProp string properties;&lt;br /&gt;
:Sets the text display properties (Regular, Boldface, Underline, Italic and Strikeout) used by subsequent '''[[#Text|Text]]''' calls. The properties are represented by single letters (R,B,U,I and S, respectively), separated by commas. 'R' is a special case which turns off all other properties, while the others are additive.&lt;br /&gt;
&lt;br /&gt;
:There is no equivalent convenience function; if you wish to change the properties of the font used by the '''[[#Text|Text]]''' command, you must manipulate the string directly.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;FontProp B,I;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===FontSize===&lt;br /&gt;
&lt;br /&gt;
;FontSize float size;&lt;br /&gt;
:Sets the font size used by subsequent '''[[#Text|Text]]''' calls. The '''size''' parameter represents the font height in points. &lt;br /&gt;
&lt;br /&gt;
:Please note that the font height is given in ''points'', not in ''pixels''. The resulting size of the font in pixels may vary depending on the system settings, specifically the display system's &amp;quot;dots per inch&amp;quot; metric.  A system set to 96dpi will produce differently sized text than a system set to 120dpi. If precise text size is required, consider using the [[osGetDrawStringSize]]() function to help calculate the proper FontSize value to use (but bear in mind that [[osGetDrawStringSize]]() takes an integer parameter for the size, whereas FontSize does use floating-point values).&lt;br /&gt;
&lt;br /&gt;
:Unlike the other drawing commands, anything following a decimal point in the '''size''' parameter is significant.&lt;br /&gt;
&lt;br /&gt;
:If a negative FontSize parameter is specified, any text subsequently added will be displayed upside down and to the right of the point of origin.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;FontSize 12;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Text===&lt;br /&gt;
&lt;br /&gt;
;Text string text;&lt;br /&gt;
:Draws the specified string of text with the current pen color, using the currently defined [[#FontName|font]], [[#FontSize|size]] and [[#FontProp|properties]] (which default to regular 14-point Arial).&lt;br /&gt;
&lt;br /&gt;
:The text will be drawn with the upper left corner of the first glyph at the pen's current position (however, note that glyphs within the font may be defined to extend to the left of their origin point).&lt;br /&gt;
&lt;br /&gt;
:If you need to include a semicolon in the text to be displayed, you will have to change the command delimiter in the &amp;lt;tt&amp;gt;extraParams&amp;lt;/tt&amp;gt; parameter to the osSetDynamicTexture* functions. However, this will require that ''all'' commands be terminated with the alternate delimiter, and you cannot use the convenience functions (which are hardcoded to use a semicolon).&lt;br /&gt;
&lt;br /&gt;
:The text may or may not be antialiased, depending on the system settings of the machine upon which the simulator is running. Furthermore, if the system is configured to use LCD subpixel antialiasing (e.g. ClearType), the text may have colored fringes on the smoothed pixels, which may result in a less than optimum image.&lt;br /&gt;
&lt;br /&gt;
:Please note that the pen position is ''not'' updated after this call.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
CommandList += &amp;quot;Text Nobody here but us hippos!;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Godfrey</name></author>	</entry>

	</feed>