<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.stridewiki.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Chrisj</id>
	<title>STRIDE Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.stridewiki.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Chrisj"/>
	<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Special:Contributions/Chrisj"/>
	<updated>2026-04-29T08:37:59Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.10</generator>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8230</id>
		<title>Studio:Scl struct sized</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8230"/>
		<updated>2008-11-04T01:20:45Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* Syntax */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The scl_struct_sized pragma =&lt;br /&gt;
&lt;br /&gt;
The scl_struct_sized pragma is one of the [[SCL_Pragmas#Qualification|Qualification]] pragmas. The scl_struct_sized pragma identifies a particular struct or pointer-to-struct as a sized structure. A sized structure typically has bytes allocated past its type definition.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
 #pragma scl_struct_sized(type-name, max-size)&lt;br /&gt;
 &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;align:left;&amp;quot;  &lt;br /&gt;
| width=&amp;quot;100&amp;quot; | &#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
| width=&amp;quot;100&amp;quot; | &#039;&#039;&#039;Type&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;type-name&#039;&#039;&lt;br /&gt;
| Struct,&amp;lt;br&amp;gt;Pointer&lt;br /&gt;
| Specifies a structure type (or a pointer to such type) that is to be sized (allocated bytes beyond its type definition).&lt;br /&gt;
The following restrictions apply:&lt;br /&gt;
* The structure type may not be pointed to by a sized pointer.&lt;br /&gt;
* The structure type may not be a member of any other structure or union.&lt;br /&gt;
* The structure type may not be passed as a function parameter.&lt;br /&gt;
* The structure type may only reside in IN/INOUT memory blocks.&lt;br /&gt;
* If the last member of the structure is an array, the array&#039;s size is calculated based upon max-size - (size of struct&#039;s other members).&lt;br /&gt;
* If the last member of the structure is an array, the array&#039;s element type may not contain a sized structure or a conformant array (see [[scl_conform]]).&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;max-size&#039;&#039;&lt;br /&gt;
| Integer&lt;br /&gt;
| Specifies the number of bytes to be allocated for the sized struct.&lt;br /&gt;
The following restrictions apply:&lt;br /&gt;
* The max-size type must be an integral type (int, short, char).&lt;br /&gt;
* The max-size value (at runtime) may not be less than the structure&#039;s type size.&lt;br /&gt;
* The max-size value (at runtime) may not exceed the maximum payload size.&lt;br /&gt;
* The max_size field must be in the same payload block as the type-name sized struct (i.e. no indirection &#039;*&#039; or &#039;-&amp;gt;&#039;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Example 1 ===&lt;br /&gt;
This example shows the declaration for a simple sized struct.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int nMoreJunk;&lt;br /&gt;
} SimpleSizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_function(f)&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example 2 ===&lt;br /&gt;
This example shows the declaration of a sized struct with a conformant array.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#define SOME_BOUND 1&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int ary[SOME_BOUND];&lt;br /&gt;
} ConformantArraySizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_function(f)&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* For additional information on scl_string, including constraints, refer to the section on scl_struct_sized in the [[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]].&lt;br /&gt;
&lt;br /&gt;
[[Category: SCL]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8229</id>
		<title>Studio:Scl struct sized</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8229"/>
		<updated>2008-11-04T01:20:04Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* Syntax */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The scl_struct_sized pragma =&lt;br /&gt;
&lt;br /&gt;
The scl_struct_sized pragma is one of the [[SCL_Pragmas#Qualification|Qualification]] pragmas. The scl_struct_sized pragma identifies a particular struct or pointer-to-struct as a sized structure. A sized structure typically has bytes allocated past its type definition.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
 #pragma scl_struct_sized(type-name, max-size)&lt;br /&gt;
 &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;align:left;&amp;quot;  &lt;br /&gt;
| width=&amp;quot;100&amp;quot; | &#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
| width=&amp;quot;100&amp;quot; | &#039;&#039;&#039;Type&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;type-name&#039;&#039;&lt;br /&gt;
| Struct,&amp;lt;br&amp;gt;Pointer&lt;br /&gt;
| Specifies a structure type (or a pointer to such type) that is to be sized (allocated bytes beyond its type definition).&lt;br /&gt;
The following restrictions apply:&lt;br /&gt;
* The structure type may not be pointed to by a sized pointer.&lt;br /&gt;
* The structure type may not be a member of any other structure or union.&lt;br /&gt;
* The structure type may not be passed as a function parameter.&lt;br /&gt;
* The structure type may only reside in IN/INOUT memory blocks.&lt;br /&gt;
* If the last member of the structure is an array, the array&#039;s size is calculated based upon max-size - (size of struct&#039;s other members).&lt;br /&gt;
* If the last member of the structure is an array, the array&#039;s element type may not contain a sized structure or a conformant array (see scl_conform).&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;max-size&#039;&#039;&lt;br /&gt;
| Integer&lt;br /&gt;
| Specifies the number of bytes to be allocated for the sized struct.&lt;br /&gt;
The following restrictions apply:&lt;br /&gt;
* The max-size type must be an integral type (int, short, char).&lt;br /&gt;
* The max-size value (at runtime) may not be less than the structure&#039;s type size.&lt;br /&gt;
* The max-size value (at runtime) may not exceed the maximum payload size.&lt;br /&gt;
* The max_size field must be in the same payload block as the type-name sized struct (i.e. no indirection &#039;*&#039; or &#039;-&amp;gt;&#039;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Example 1 ===&lt;br /&gt;
This example shows the declaration for a simple sized struct.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int nMoreJunk;&lt;br /&gt;
} SimpleSizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_function(f)&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example 2 ===&lt;br /&gt;
This example shows the declaration of a sized struct with a conformant array.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#define SOME_BOUND 1&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int ary[SOME_BOUND];&lt;br /&gt;
} ConformantArraySizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_function(f)&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* For additional information on scl_string, including constraints, refer to the section on scl_struct_sized in the [[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]].&lt;br /&gt;
&lt;br /&gt;
[[Category: SCL]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8228</id>
		<title>Studio:Scl struct sized</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8228"/>
		<updated>2008-11-04T01:19:24Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* Syntax */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The scl_struct_sized pragma =&lt;br /&gt;
&lt;br /&gt;
The scl_struct_sized pragma is one of the [[SCL_Pragmas#Qualification|Qualification]] pragmas. The scl_struct_sized pragma identifies a particular struct or pointer-to-struct as a sized structure. A sized structure typically has bytes allocated past its type definition.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
 #pragma scl_struct_sized(type-name, max-size)&lt;br /&gt;
 &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;align:left;&amp;quot;  &lt;br /&gt;
| width=&amp;quot;100&amp;quot; | &#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
| width=&amp;quot;100&amp;quot; | &#039;&#039;&#039;Type&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;type-name&#039;&#039;&lt;br /&gt;
| Struct,&amp;lt;br&amp;gt;Pointer&lt;br /&gt;
| Specifies a structure type (or a pointer to such type) that is to be sized (allocated bytes beyond its type definition).&lt;br /&gt;
The following restrictions apply:&lt;br /&gt;
* The structure type may not be pointed to by a sized pointer.&lt;br /&gt;
* The structure type may not be a member of any other structure or union.&lt;br /&gt;
* The structure type may not be passed as a function parameter.&lt;br /&gt;
* The structure type may only reside in IN/INOUT memory blocks.&lt;br /&gt;
* If the last member of the structure is an array, the array&#039;s size is calculated based upon max-size - (size of struct&#039;s other members).&lt;br /&gt;
* If the last member of the structure is an array, the array&#039;s element type may not contain a sized structure (scl_struct_sized) or a conformant array (scl_conform).&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;max-size&#039;&#039;&lt;br /&gt;
| Integer&lt;br /&gt;
| Specifies the number of bytes to be allocated for the sized struct.&lt;br /&gt;
The following restrictions apply:&lt;br /&gt;
* The max-size type must be an integral type (int, short, char).&lt;br /&gt;
* The max-size value (at runtime) may not be less than the structure&#039;s type size.&lt;br /&gt;
* The max-size value (at runtime) may not exceed the maximum payload size.&lt;br /&gt;
* The max_size field must be in the same payload block as the type-name sized struct (i.e. no indirection &#039;*&#039; or &#039;-&amp;gt;&#039;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Example 1 ===&lt;br /&gt;
This example shows the declaration for a simple sized struct.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int nMoreJunk;&lt;br /&gt;
} SimpleSizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_function(f)&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example 2 ===&lt;br /&gt;
This example shows the declaration of a sized struct with a conformant array.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#define SOME_BOUND 1&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int ary[SOME_BOUND];&lt;br /&gt;
} ConformantArraySizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_function(f)&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* For additional information on scl_string, including constraints, refer to the section on scl_struct_sized in the [[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]].&lt;br /&gt;
&lt;br /&gt;
[[Category: SCL]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8213</id>
		<title>Studio:Scl struct sized</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8213"/>
		<updated>2008-11-01T00:12:15Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* Example 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The scl_struct_sized pragma =&lt;br /&gt;
&lt;br /&gt;
The scl_struct_sized pragma is one of the [[SCL_Pragmas#Qualification|Qualification]] pragmas. The scl_struct_sized pragma identifies a particular struct or pointer-to-struct as a sized structure. A sized structure typically has bytes allocated past its type definition.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
 #pragma scl_struct_sized(type-name, max-size)&lt;br /&gt;
 &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;align:left;&amp;quot;  &lt;br /&gt;
| width=&amp;quot;100&amp;quot; | &#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
| width=&amp;quot;100&amp;quot; | &#039;&#039;&#039;Type&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;type-name&#039;&#039;&lt;br /&gt;
| Struct,&amp;lt;br&amp;gt;Pointer&lt;br /&gt;
| Specifies a structure type (or a pointer to such type) that is to be sized (allocated bytes beyond its type definition).&lt;br /&gt;
The following restrictions apply:&lt;br /&gt;
* The structure type may not be pointed to by a sized pointer.&lt;br /&gt;
* The structure type may not be a member of any other structure or union.&lt;br /&gt;
* The structure type may not be passed as a function parameter.&lt;br /&gt;
* The structure type may only reside in IN/INOUT memory blocks.&lt;br /&gt;
* If the last member of the structure is an array, the array&#039;s size is calculated based upon max-size - (size of struct&#039;s other members).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;max-size&#039;&#039;&lt;br /&gt;
| Integer&lt;br /&gt;
| Specifies the number of bytes to be allocated for the sized struct.&lt;br /&gt;
The following restrictions apply:&lt;br /&gt;
* The max-size type must be an integral type (int, short, char).&lt;br /&gt;
* The max-size value (at runtime) may not be less than the structure&#039;s type size.&lt;br /&gt;
* The max-size value (at runtime) may not exceed the maximum payload size.&lt;br /&gt;
* The max_size field must be in the same payload block as the type-name sized struct (i.e. no indirection &#039;*&#039; or &#039;-&amp;gt;&#039;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Example 1 ===&lt;br /&gt;
This example shows the declaration for a simple sized struct.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int nMoreJunk;&lt;br /&gt;
} SimpleSizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_function(f)&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example 2 ===&lt;br /&gt;
This example shows the declaration of a sized struct with a conformant array.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#define SOME_BOUND 1&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int ary[SOME_BOUND];&lt;br /&gt;
} ConformantArraySizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_function(f)&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* For additional information on scl_string, including constraints, refer to the section on scl_struct_sized in the [[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]].&lt;br /&gt;
&lt;br /&gt;
[[Category: SCL]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8212</id>
		<title>Studio:Scl struct sized</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8212"/>
		<updated>2008-11-01T00:12:00Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* Example 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The scl_struct_sized pragma =&lt;br /&gt;
&lt;br /&gt;
The scl_struct_sized pragma is one of the [[SCL_Pragmas#Qualification|Qualification]] pragmas. The scl_struct_sized pragma identifies a particular struct or pointer-to-struct as a sized structure. A sized structure typically has bytes allocated past its type definition.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
 #pragma scl_struct_sized(type-name, max-size)&lt;br /&gt;
 &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;align:left;&amp;quot;  &lt;br /&gt;
| width=&amp;quot;100&amp;quot; | &#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
| width=&amp;quot;100&amp;quot; | &#039;&#039;&#039;Type&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;type-name&#039;&#039;&lt;br /&gt;
| Struct,&amp;lt;br&amp;gt;Pointer&lt;br /&gt;
| Specifies a structure type (or a pointer to such type) that is to be sized (allocated bytes beyond its type definition).&lt;br /&gt;
The following restrictions apply:&lt;br /&gt;
* The structure type may not be pointed to by a sized pointer.&lt;br /&gt;
* The structure type may not be a member of any other structure or union.&lt;br /&gt;
* The structure type may not be passed as a function parameter.&lt;br /&gt;
* The structure type may only reside in IN/INOUT memory blocks.&lt;br /&gt;
* If the last member of the structure is an array, the array&#039;s size is calculated based upon max-size - (size of struct&#039;s other members).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;max-size&#039;&#039;&lt;br /&gt;
| Integer&lt;br /&gt;
| Specifies the number of bytes to be allocated for the sized struct.&lt;br /&gt;
The following restrictions apply:&lt;br /&gt;
* The max-size type must be an integral type (int, short, char).&lt;br /&gt;
* The max-size value (at runtime) may not be less than the structure&#039;s type size.&lt;br /&gt;
* The max-size value (at runtime) may not exceed the maximum payload size.&lt;br /&gt;
* The max_size field must be in the same payload block as the type-name sized struct (i.e. no indirection &#039;*&#039; or &#039;-&amp;gt;&#039;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Example 1 ===&lt;br /&gt;
This example shows the declaration for a simple sized struct.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int nMoreJunk;&lt;br /&gt;
} SimpleSizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_function(f)&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example 2 ===&lt;br /&gt;
This example shows the declaration of a sized struct with a conformant array.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#define SOME_BOUND 1&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int ary[SOME_BOUND];&lt;br /&gt;
} ConformantArraySizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* For additional information on scl_string, including constraints, refer to the section on scl_struct_sized in the [[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]].&lt;br /&gt;
&lt;br /&gt;
[[Category: SCL]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8211</id>
		<title>Studio:Scl struct sized</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8211"/>
		<updated>2008-11-01T00:11:29Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* Syntax */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The scl_struct_sized pragma =&lt;br /&gt;
&lt;br /&gt;
The scl_struct_sized pragma is one of the [[SCL_Pragmas#Qualification|Qualification]] pragmas. The scl_struct_sized pragma identifies a particular struct or pointer-to-struct as a sized structure. A sized structure typically has bytes allocated past its type definition.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
 #pragma scl_struct_sized(type-name, max-size)&lt;br /&gt;
 &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;align:left;&amp;quot;  &lt;br /&gt;
| width=&amp;quot;100&amp;quot; | &#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
| width=&amp;quot;100&amp;quot; | &#039;&#039;&#039;Type&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;type-name&#039;&#039;&lt;br /&gt;
| Struct,&amp;lt;br&amp;gt;Pointer&lt;br /&gt;
| Specifies a structure type (or a pointer to such type) that is to be sized (allocated bytes beyond its type definition).&lt;br /&gt;
The following restrictions apply:&lt;br /&gt;
* The structure type may not be pointed to by a sized pointer.&lt;br /&gt;
* The structure type may not be a member of any other structure or union.&lt;br /&gt;
* The structure type may not be passed as a function parameter.&lt;br /&gt;
* The structure type may only reside in IN/INOUT memory blocks.&lt;br /&gt;
* If the last member of the structure is an array, the array&#039;s size is calculated based upon max-size - (size of struct&#039;s other members).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;max-size&#039;&#039;&lt;br /&gt;
| Integer&lt;br /&gt;
| Specifies the number of bytes to be allocated for the sized struct.&lt;br /&gt;
The following restrictions apply:&lt;br /&gt;
* The max-size type must be an integral type (int, short, char).&lt;br /&gt;
* The max-size value (at runtime) may not be less than the structure&#039;s type size.&lt;br /&gt;
* The max-size value (at runtime) may not exceed the maximum payload size.&lt;br /&gt;
* The max_size field must be in the same payload block as the type-name sized struct (i.e. no indirection &#039;*&#039; or &#039;-&amp;gt;&#039;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Example 1 ===&lt;br /&gt;
This example shows the declaration for a simple sized struct.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int nMoreJunk;&lt;br /&gt;
} SimpleSizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example 2 ===&lt;br /&gt;
This example shows the declaration of a sized struct with a conformant array.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#define SOME_BOUND 1&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int ary[SOME_BOUND];&lt;br /&gt;
} ConformantArraySizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* For additional information on scl_string, including constraints, refer to the section on scl_struct_sized in the [[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]].&lt;br /&gt;
&lt;br /&gt;
[[Category: SCL]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Studio:SCL_Pragmas&amp;diff=8210</id>
		<title>Studio:SCL Pragmas</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Studio:SCL_Pragmas&amp;diff=8210"/>
		<updated>2008-11-01T00:08:36Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* Qualification */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
The SCL pragmas are designed to allow annotation of C language constructs in such a way as to identify and define messages, function calls, and trace points so that they can be transparently intercepted and remoted. Some pragmas are necessary because C language constructs lack important interface details; other pragmas are necessary because they allow STRIDE to better represent information to the user, or allow STRIDE to take advantage of increased opportunities for efficiency. Lastly, some pragmas simply make it easier for users to adopt STRIDE without changing existing source code.&lt;br /&gt;
&lt;br /&gt;
Pragmas are used to elaborate all of the following areas: &lt;br /&gt;
* The set of messages and functions within the application that are candidates for interception and remoting. &lt;br /&gt;
* Use of pointers. Pointer-related ambiguities include memory ownership, data directions, and pointers that point to a sequence of elements rather than to a single element. &lt;br /&gt;
* The convention of using null-terminated strings in C. When a pointer is declared as ”char *”, it must be further elaborated as pointing to a single character or a series of characters ending in NULL. &lt;br /&gt;
* Pointers to functions. Functions whose addresses are passed as parameters must be identified. &lt;br /&gt;
* Pointers to data which should be treated by STRIDE as ”void*” rather than its declared type. This may be necessary because of self-referential data structures or efficiency concerns. &lt;br /&gt;
* Unions. The discriminant (if any) must be identified; the relationship between active union members and discriminant values must be prescribed. &lt;br /&gt;
* Convenience pragmas to constrain the allowable values of a data item.&lt;br /&gt;
* Convenience pragmas to allow STRIDE to treat a data item as if it was defined to be of another type. &lt;br /&gt;
* Pragmas to allow STRIDE to identify certain structures, such as v-tables, used in C programs to simulate C++ inheritance and virtual function mechanisms. &lt;br /&gt;
* The STRIDE-defined constructs known as trace points. &lt;br /&gt;
* The special constructs known as conformant arrays (also known as variable length arrays). &lt;br /&gt;
&lt;br /&gt;
The SCL Wizard streamlines and simplifies working with pragmas by allowing you to quickly capture interfaces and accurately qualify payloads and types. See the Online Help installed with STRIDE for more information on the SCL Wizard.&lt;br /&gt;
&lt;br /&gt;
== Remotable Interfaces ==&lt;br /&gt;
SCL includes pragmas used to identify remotable messages or functions. Only messages or functions identified with these pragmas are remotable candidates. These remotable candidates are also referred to as interfaces. Almost all other pragmas operate on, or depend upon, the set of interfaces identified as remotable. &lt;br /&gt;
&lt;br /&gt;
By far, the most important aspect of a remotable interface is the memory layout of the data that is passed from message sender or function caller. Most pragmas allow the data format to be described in detail. Throughout the STRIDE documentation, the data exchanged for a given instance of a message or function is referred to as the &#039;&#039;&#039;payload&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Since STRIDE represents communication via both messaging and function calls, the terms &#039;&#039;&#039;user&#039;&#039;&#039; and &#039;&#039;&#039;owner&#039;&#039;&#039; are used to identify the sender/receiver of a message or the caller/callee of a function, respectively. Within a message, the user is the agent sending the message and owner is the agent that receives the message. Within a function call, the user is the caller and the owner is the callee. &lt;br /&gt;
&lt;br /&gt;
=== Payloads ===&lt;br /&gt;
The data passed between user and owner is referred to as a payload. Not all messages or functions contain a payload. Consider the function &lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void f(void); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This function has no return value and no parameters; thus it has no payload. &lt;br /&gt;
&lt;br /&gt;
==== Message Payloads ====&lt;br /&gt;
Message payloads are defined by a C datatype. For example, we may have message ERROR that has an associated structure containing the error code and a string. The relevant C language declarations might be: &lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#define ERROR_MSG  23  // the message id for ERRROR&lt;br /&gt;
     &lt;br /&gt;
// The structure for the message data.&lt;br /&gt;
typedef struct _ErrorMessagePayload {&lt;br /&gt;
  int        errorCode; &lt;br /&gt;
  char[100]  text;&lt;br /&gt;
} ErrorMessagePayload; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Messages payloads are typically passed by reference (but can also be passed by value). Assuming the message payload above is passed by reference we can depict the memory layout of the entire message payload as follows:&lt;br /&gt;
&lt;br /&gt;
[[Image:message_payload.gif|center]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Note that in this instance, the payload actually consists of two distinct memory blocks &amp;amp;endash; a pointer and the structure pointed to. The distinct blocks in a payload are referred to as the payload blocks. Note also that the blocks form a tree structure, with each contiguous memory block representing a node in the tree. This illustrates a more general concept: the payload blocks form a network, and that network must be a tree (i.e., it starts with a node designated as the root, and all other nodes are reachable from the root. There cannot be cycles).&lt;br /&gt;
&lt;br /&gt;
Within a two-way message, the structure of data passed in each direction may be different. For this reason, payloads must be further defined according to whether they are passed from user to owner or owner to user. Payloads passed from user to owner are called Command Payloads. Payloads passed from owner to user are called Response Payloads.&lt;br /&gt;
&lt;br /&gt;
==== Function Payloads ====&lt;br /&gt;
Functions are much like two-way messages in that data can be passed from user (caller) to the owner (callee) at the time of the call, and the owner (callee) may pass data back to the user (caller) at the time of the return. As with message payloads, the data passed from user to owner is referred to as the Command Payload and the data passed from owner to user is referred to as the Response Payload. &lt;br /&gt;
&lt;br /&gt;
A Command Payload is constructed from the formal parameters of a function, and is a synthesized C structure. The members of the structure correspond to the formal parameters of the function (both the order and types of the members correspond exactly). &lt;br /&gt;
&lt;br /&gt;
The Response Payload for a function is constructed from the return value of a function. Below is an example of the Command and Response Payload memory layout for a simple function Error(): &lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
// The structure for the message data.&lt;br /&gt;
typedef struct _ErrorMessagePayload {&lt;br /&gt;
  int        errorCode; &lt;br /&gt;
  char[100]  text;&lt;br /&gt;
} ErrorMessagePayload; &lt;br /&gt;
     &lt;br /&gt;
int Error(ErrorMessagePayload *pPayload, BOOL bPopupMessage); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:command_payload.gif|center]]&lt;br /&gt;
&lt;br /&gt;
== Pragmas ==&lt;br /&gt;
&lt;br /&gt;
The SCL pragmas are listed here, categorized by function:&lt;br /&gt;
&lt;br /&gt;
=== Test Units ===&lt;br /&gt;
&lt;br /&gt;
* [[scl_test_class]]&lt;br /&gt;
* [[scl_test_cclass]]&lt;br /&gt;
* [[scl_test_flist]]&lt;br /&gt;
* [[scl_test_setup]]&lt;br /&gt;
* [[scl_test_teardown]]&lt;br /&gt;
&lt;br /&gt;
=== Capture ===&lt;br /&gt;
&lt;br /&gt;
* [[scl_func]]&lt;br /&gt;
* [[scl_function]]&lt;br /&gt;
* [[scl_msg]]&lt;br /&gt;
* [[scl_msg_bind]]&lt;br /&gt;
&lt;br /&gt;
=== Qualification ===&lt;br /&gt;
&lt;br /&gt;
* [[scl_brew_class]]&lt;br /&gt;
* [[scl_cast]]&lt;br /&gt;
* [[scl_conform]]&lt;br /&gt;
* [[scl_ptr]]&lt;br /&gt;
* [[scl_ptr_flist]]&lt;br /&gt;
* [[scl_ptr_opaque]]&lt;br /&gt;
* [[scl_ptr_sized]]&lt;br /&gt;
* [[scl_string]]&lt;br /&gt;
* [[scl_struct_sized]] &#039;&#039;(coming soon)&#039;&#039;&lt;br /&gt;
* [[scl_union]]&lt;br /&gt;
* [[scl_union_activate]]&lt;br /&gt;
* [[scl_values]]&lt;br /&gt;
&lt;br /&gt;
=== Trace ===&lt;br /&gt;
&lt;br /&gt;
* [[scl_tracepoint]]&lt;br /&gt;
* [[scl_tracepoint_format]]&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
* The hash (#) symbol that begins the pragma directive must be the first non-white-space character on the line containing the pragma, e.g. #pragma.&lt;br /&gt;
* Compilers typically issue warnings, but not errors, for unrecognized pragmas. An SCL-compliant compiler is required to automatically define the _SCL symbol. It is recommended that a header file using SCL pragmas include the following conditional compile statement wrapped around the pragma definitions:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#ifdef _SCL&lt;br /&gt;
&lt;br /&gt;
  //... pragma definitions&lt;br /&gt;
     &lt;br /&gt;
#endif // #ifdef _SCL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The use of packed pragmas may result in structure alignment issues when communicating with the target platform.&lt;br /&gt;
&lt;br /&gt;
* STRIDE pragmas should be added to header (.h) files. Although such pragmas could be added to implementation (.c/cpp) files it is not recommended because it may lead to linkage problems when integrating the generated IM code in to your application.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
*[[SCL Structure]]&lt;br /&gt;
*[[SCL Data Types]]&lt;br /&gt;
*[[SCL Design Requirements]]&lt;br /&gt;
*[[SCL Message Attributes]]&lt;br /&gt;
*For detailed instructions on working with SCL, including code samples and examples, refer to the [[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]].&lt;br /&gt;
&lt;br /&gt;
*Refer to the &#039;&#039;&#039;SCL Wizard&#039;&#039;&#039; section of the STRIDE Online Help for information on how to create SCL pragmas.&lt;br /&gt;
&lt;br /&gt;
[[Category: SCL]]&lt;br /&gt;
[[Category: Reference]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Studio:SCL_Pragmas&amp;diff=8209</id>
		<title>Studio:SCL Pragmas</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Studio:SCL_Pragmas&amp;diff=8209"/>
		<updated>2008-11-01T00:08:14Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* Qualification */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
The SCL pragmas are designed to allow annotation of C language constructs in such a way as to identify and define messages, function calls, and trace points so that they can be transparently intercepted and remoted. Some pragmas are necessary because C language constructs lack important interface details; other pragmas are necessary because they allow STRIDE to better represent information to the user, or allow STRIDE to take advantage of increased opportunities for efficiency. Lastly, some pragmas simply make it easier for users to adopt STRIDE without changing existing source code.&lt;br /&gt;
&lt;br /&gt;
Pragmas are used to elaborate all of the following areas: &lt;br /&gt;
* The set of messages and functions within the application that are candidates for interception and remoting. &lt;br /&gt;
* Use of pointers. Pointer-related ambiguities include memory ownership, data directions, and pointers that point to a sequence of elements rather than to a single element. &lt;br /&gt;
* The convention of using null-terminated strings in C. When a pointer is declared as ”char *”, it must be further elaborated as pointing to a single character or a series of characters ending in NULL. &lt;br /&gt;
* Pointers to functions. Functions whose addresses are passed as parameters must be identified. &lt;br /&gt;
* Pointers to data which should be treated by STRIDE as ”void*” rather than its declared type. This may be necessary because of self-referential data structures or efficiency concerns. &lt;br /&gt;
* Unions. The discriminant (if any) must be identified; the relationship between active union members and discriminant values must be prescribed. &lt;br /&gt;
* Convenience pragmas to constrain the allowable values of a data item.&lt;br /&gt;
* Convenience pragmas to allow STRIDE to treat a data item as if it was defined to be of another type. &lt;br /&gt;
* Pragmas to allow STRIDE to identify certain structures, such as v-tables, used in C programs to simulate C++ inheritance and virtual function mechanisms. &lt;br /&gt;
* The STRIDE-defined constructs known as trace points. &lt;br /&gt;
* The special constructs known as conformant arrays (also known as variable length arrays). &lt;br /&gt;
&lt;br /&gt;
The SCL Wizard streamlines and simplifies working with pragmas by allowing you to quickly capture interfaces and accurately qualify payloads and types. See the Online Help installed with STRIDE for more information on the SCL Wizard.&lt;br /&gt;
&lt;br /&gt;
== Remotable Interfaces ==&lt;br /&gt;
SCL includes pragmas used to identify remotable messages or functions. Only messages or functions identified with these pragmas are remotable candidates. These remotable candidates are also referred to as interfaces. Almost all other pragmas operate on, or depend upon, the set of interfaces identified as remotable. &lt;br /&gt;
&lt;br /&gt;
By far, the most important aspect of a remotable interface is the memory layout of the data that is passed from message sender or function caller. Most pragmas allow the data format to be described in detail. Throughout the STRIDE documentation, the data exchanged for a given instance of a message or function is referred to as the &#039;&#039;&#039;payload&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Since STRIDE represents communication via both messaging and function calls, the terms &#039;&#039;&#039;user&#039;&#039;&#039; and &#039;&#039;&#039;owner&#039;&#039;&#039; are used to identify the sender/receiver of a message or the caller/callee of a function, respectively. Within a message, the user is the agent sending the message and owner is the agent that receives the message. Within a function call, the user is the caller and the owner is the callee. &lt;br /&gt;
&lt;br /&gt;
=== Payloads ===&lt;br /&gt;
The data passed between user and owner is referred to as a payload. Not all messages or functions contain a payload. Consider the function &lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void f(void); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This function has no return value and no parameters; thus it has no payload. &lt;br /&gt;
&lt;br /&gt;
==== Message Payloads ====&lt;br /&gt;
Message payloads are defined by a C datatype. For example, we may have message ERROR that has an associated structure containing the error code and a string. The relevant C language declarations might be: &lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#define ERROR_MSG  23  // the message id for ERRROR&lt;br /&gt;
     &lt;br /&gt;
// The structure for the message data.&lt;br /&gt;
typedef struct _ErrorMessagePayload {&lt;br /&gt;
  int        errorCode; &lt;br /&gt;
  char[100]  text;&lt;br /&gt;
} ErrorMessagePayload; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Messages payloads are typically passed by reference (but can also be passed by value). Assuming the message payload above is passed by reference we can depict the memory layout of the entire message payload as follows:&lt;br /&gt;
&lt;br /&gt;
[[Image:message_payload.gif|center]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Note that in this instance, the payload actually consists of two distinct memory blocks &amp;amp;endash; a pointer and the structure pointed to. The distinct blocks in a payload are referred to as the payload blocks. Note also that the blocks form a tree structure, with each contiguous memory block representing a node in the tree. This illustrates a more general concept: the payload blocks form a network, and that network must be a tree (i.e., it starts with a node designated as the root, and all other nodes are reachable from the root. There cannot be cycles).&lt;br /&gt;
&lt;br /&gt;
Within a two-way message, the structure of data passed in each direction may be different. For this reason, payloads must be further defined according to whether they are passed from user to owner or owner to user. Payloads passed from user to owner are called Command Payloads. Payloads passed from owner to user are called Response Payloads.&lt;br /&gt;
&lt;br /&gt;
==== Function Payloads ====&lt;br /&gt;
Functions are much like two-way messages in that data can be passed from user (caller) to the owner (callee) at the time of the call, and the owner (callee) may pass data back to the user (caller) at the time of the return. As with message payloads, the data passed from user to owner is referred to as the Command Payload and the data passed from owner to user is referred to as the Response Payload. &lt;br /&gt;
&lt;br /&gt;
A Command Payload is constructed from the formal parameters of a function, and is a synthesized C structure. The members of the structure correspond to the formal parameters of the function (both the order and types of the members correspond exactly). &lt;br /&gt;
&lt;br /&gt;
The Response Payload for a function is constructed from the return value of a function. Below is an example of the Command and Response Payload memory layout for a simple function Error(): &lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
// The structure for the message data.&lt;br /&gt;
typedef struct _ErrorMessagePayload {&lt;br /&gt;
  int        errorCode; &lt;br /&gt;
  char[100]  text;&lt;br /&gt;
} ErrorMessagePayload; &lt;br /&gt;
     &lt;br /&gt;
int Error(ErrorMessagePayload *pPayload, BOOL bPopupMessage); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:command_payload.gif|center]]&lt;br /&gt;
&lt;br /&gt;
== Pragmas ==&lt;br /&gt;
&lt;br /&gt;
The SCL pragmas are listed here, categorized by function:&lt;br /&gt;
&lt;br /&gt;
=== Test Units ===&lt;br /&gt;
&lt;br /&gt;
* [[scl_test_class]]&lt;br /&gt;
* [[scl_test_cclass]]&lt;br /&gt;
* [[scl_test_flist]]&lt;br /&gt;
* [[scl_test_setup]]&lt;br /&gt;
* [[scl_test_teardown]]&lt;br /&gt;
&lt;br /&gt;
=== Capture ===&lt;br /&gt;
&lt;br /&gt;
* [[scl_func]]&lt;br /&gt;
* [[scl_function]]&lt;br /&gt;
* [[scl_msg]]&lt;br /&gt;
* [[scl_msg_bind]]&lt;br /&gt;
&lt;br /&gt;
=== Qualification ===&lt;br /&gt;
&lt;br /&gt;
* [[scl_brew_class]]&lt;br /&gt;
* [[scl_cast]]&lt;br /&gt;
* [[scl_conform]]&lt;br /&gt;
* [[scl_ptr]]&lt;br /&gt;
* [[scl_ptr_flist]]&lt;br /&gt;
* [[scl_ptr_opaque]]&lt;br /&gt;
* [[scl_ptr_sized]] &#039;&#039;(coming soon)&#039;&#039;&lt;br /&gt;
* [[scl_string]]&lt;br /&gt;
* [[scl_struct_sized]]&lt;br /&gt;
* [[scl_union]]&lt;br /&gt;
* [[scl_union_activate]]&lt;br /&gt;
* [[scl_values]]&lt;br /&gt;
&lt;br /&gt;
=== Trace ===&lt;br /&gt;
&lt;br /&gt;
* [[scl_tracepoint]]&lt;br /&gt;
* [[scl_tracepoint_format]]&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
* The hash (#) symbol that begins the pragma directive must be the first non-white-space character on the line containing the pragma, e.g. #pragma.&lt;br /&gt;
* Compilers typically issue warnings, but not errors, for unrecognized pragmas. An SCL-compliant compiler is required to automatically define the _SCL symbol. It is recommended that a header file using SCL pragmas include the following conditional compile statement wrapped around the pragma definitions:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#ifdef _SCL&lt;br /&gt;
&lt;br /&gt;
  //... pragma definitions&lt;br /&gt;
     &lt;br /&gt;
#endif // #ifdef _SCL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The use of packed pragmas may result in structure alignment issues when communicating with the target platform.&lt;br /&gt;
&lt;br /&gt;
* STRIDE pragmas should be added to header (.h) files. Although such pragmas could be added to implementation (.c/cpp) files it is not recommended because it may lead to linkage problems when integrating the generated IM code in to your application.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
*[[SCL Structure]]&lt;br /&gt;
*[[SCL Data Types]]&lt;br /&gt;
*[[SCL Design Requirements]]&lt;br /&gt;
*[[SCL Message Attributes]]&lt;br /&gt;
*For detailed instructions on working with SCL, including code samples and examples, refer to the [[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]].&lt;br /&gt;
&lt;br /&gt;
*Refer to the &#039;&#039;&#039;SCL Wizard&#039;&#039;&#039; section of the STRIDE Online Help for information on how to create SCL pragmas.&lt;br /&gt;
&lt;br /&gt;
[[Category: SCL]]&lt;br /&gt;
[[Category: Reference]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8208</id>
		<title>Studio:Scl struct sized</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8208"/>
		<updated>2008-10-31T23:45:49Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* The scl_struct_sized pragma */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The scl_struct_sized pragma =&lt;br /&gt;
&lt;br /&gt;
The scl_struct_sized pragma is one of the [[SCL_Pragmas#Qualification|Qualification]] pragmas. The scl_struct_sized pragma identifies a particular struct or pointer-to-struct as a sized structure. A sized structure typically has bytes allocated past its type definition.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
 #pragma scl_struct_sized(type-name, max-size)&lt;br /&gt;
 &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;align:left;&amp;quot;  &lt;br /&gt;
| width=&amp;quot;100&amp;quot; | &#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
| width=&amp;quot;100&amp;quot; | &#039;&#039;&#039;Type&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;type-name&#039;&#039;&lt;br /&gt;
| Struct or&amp;lt;br&amp;gt;Pointer&lt;br /&gt;
| Specifies a structure type (or a pointer to such type) that is to be sized (allocated bytes beyond its type definition).&lt;br /&gt;
The following restrictions apply:&lt;br /&gt;
* The structure type may not be pointed to by a sized pointer.&lt;br /&gt;
* The structure type may not be a member of any other structure or union.&lt;br /&gt;
* The structure type may not be passed as a function parameter.&lt;br /&gt;
* The structure type may only reside in IN/INOUT memory blocks.&lt;br /&gt;
* If the last member of the structure is an array, the array&#039;s size is calculated based upon max-size - (size of struct&#039;s other members).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;max-size&#039;&#039;&lt;br /&gt;
| Integer&lt;br /&gt;
| Specifies the number of bytes to be allocated for the sized struct.&lt;br /&gt;
The following restrictions apply:&lt;br /&gt;
* The max-size type must be an integral type (int, short, char).&lt;br /&gt;
* The max-size value (at runtime) may not be less than the structure&#039;s type size.&lt;br /&gt;
* The max-size value (at runtime) may not exceed the maximum payload size.&lt;br /&gt;
* The max_size field must be in the same payload block as the type-name sized struct (i.e. no indirection &#039;*&#039; or &#039;-&amp;gt;&#039;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Example 1 ===&lt;br /&gt;
This example shows the declaration for a simple sized struct.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int nMoreJunk;&lt;br /&gt;
} SimpleSizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example 2 ===&lt;br /&gt;
This example shows the declaration of a sized struct with a conformant array.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#define SOME_BOUND 1&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int ary[SOME_BOUND];&lt;br /&gt;
} ConformantArraySizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* For additional information on scl_string, including constraints, refer to the section on scl_struct_sized in the [[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]].&lt;br /&gt;
&lt;br /&gt;
[[Category: SCL]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Studio:SCL_Pragmas&amp;diff=8207</id>
		<title>Studio:SCL Pragmas</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Studio:SCL_Pragmas&amp;diff=8207"/>
		<updated>2008-10-31T23:45:13Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* Qualification */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
The SCL pragmas are designed to allow annotation of C language constructs in such a way as to identify and define messages, function calls, and trace points so that they can be transparently intercepted and remoted. Some pragmas are necessary because C language constructs lack important interface details; other pragmas are necessary because they allow STRIDE to better represent information to the user, or allow STRIDE to take advantage of increased opportunities for efficiency. Lastly, some pragmas simply make it easier for users to adopt STRIDE without changing existing source code.&lt;br /&gt;
&lt;br /&gt;
Pragmas are used to elaborate all of the following areas: &lt;br /&gt;
* The set of messages and functions within the application that are candidates for interception and remoting. &lt;br /&gt;
* Use of pointers. Pointer-related ambiguities include memory ownership, data directions, and pointers that point to a sequence of elements rather than to a single element. &lt;br /&gt;
* The convention of using null-terminated strings in C. When a pointer is declared as ”char *”, it must be further elaborated as pointing to a single character or a series of characters ending in NULL. &lt;br /&gt;
* Pointers to functions. Functions whose addresses are passed as parameters must be identified. &lt;br /&gt;
* Pointers to data which should be treated by STRIDE as ”void*” rather than its declared type. This may be necessary because of self-referential data structures or efficiency concerns. &lt;br /&gt;
* Unions. The discriminant (if any) must be identified; the relationship between active union members and discriminant values must be prescribed. &lt;br /&gt;
* Convenience pragmas to constrain the allowable values of a data item.&lt;br /&gt;
* Convenience pragmas to allow STRIDE to treat a data item as if it was defined to be of another type. &lt;br /&gt;
* Pragmas to allow STRIDE to identify certain structures, such as v-tables, used in C programs to simulate C++ inheritance and virtual function mechanisms. &lt;br /&gt;
* The STRIDE-defined constructs known as trace points. &lt;br /&gt;
* The special constructs known as conformant arrays (also known as variable length arrays). &lt;br /&gt;
&lt;br /&gt;
The SCL Wizard streamlines and simplifies working with pragmas by allowing you to quickly capture interfaces and accurately qualify payloads and types. See the Online Help installed with STRIDE for more information on the SCL Wizard.&lt;br /&gt;
&lt;br /&gt;
== Remotable Interfaces ==&lt;br /&gt;
SCL includes pragmas used to identify remotable messages or functions. Only messages or functions identified with these pragmas are remotable candidates. These remotable candidates are also referred to as interfaces. Almost all other pragmas operate on, or depend upon, the set of interfaces identified as remotable. &lt;br /&gt;
&lt;br /&gt;
By far, the most important aspect of a remotable interface is the memory layout of the data that is passed from message sender or function caller. Most pragmas allow the data format to be described in detail. Throughout the STRIDE documentation, the data exchanged for a given instance of a message or function is referred to as the &#039;&#039;&#039;payload&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Since STRIDE represents communication via both messaging and function calls, the terms &#039;&#039;&#039;user&#039;&#039;&#039; and &#039;&#039;&#039;owner&#039;&#039;&#039; are used to identify the sender/receiver of a message or the caller/callee of a function, respectively. Within a message, the user is the agent sending the message and owner is the agent that receives the message. Within a function call, the user is the caller and the owner is the callee. &lt;br /&gt;
&lt;br /&gt;
=== Payloads ===&lt;br /&gt;
The data passed between user and owner is referred to as a payload. Not all messages or functions contain a payload. Consider the function &lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void f(void); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This function has no return value and no parameters; thus it has no payload. &lt;br /&gt;
&lt;br /&gt;
==== Message Payloads ====&lt;br /&gt;
Message payloads are defined by a C datatype. For example, we may have message ERROR that has an associated structure containing the error code and a string. The relevant C language declarations might be: &lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#define ERROR_MSG  23  // the message id for ERRROR&lt;br /&gt;
     &lt;br /&gt;
// The structure for the message data.&lt;br /&gt;
typedef struct _ErrorMessagePayload {&lt;br /&gt;
  int        errorCode; &lt;br /&gt;
  char[100]  text;&lt;br /&gt;
} ErrorMessagePayload; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Messages payloads are typically passed by reference (but can also be passed by value). Assuming the message payload above is passed by reference we can depict the memory layout of the entire message payload as follows:&lt;br /&gt;
&lt;br /&gt;
[[Image:message_payload.gif|center]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Note that in this instance, the payload actually consists of two distinct memory blocks &amp;amp;endash; a pointer and the structure pointed to. The distinct blocks in a payload are referred to as the payload blocks. Note also that the blocks form a tree structure, with each contiguous memory block representing a node in the tree. This illustrates a more general concept: the payload blocks form a network, and that network must be a tree (i.e., it starts with a node designated as the root, and all other nodes are reachable from the root. There cannot be cycles).&lt;br /&gt;
&lt;br /&gt;
Within a two-way message, the structure of data passed in each direction may be different. For this reason, payloads must be further defined according to whether they are passed from user to owner or owner to user. Payloads passed from user to owner are called Command Payloads. Payloads passed from owner to user are called Response Payloads.&lt;br /&gt;
&lt;br /&gt;
==== Function Payloads ====&lt;br /&gt;
Functions are much like two-way messages in that data can be passed from user (caller) to the owner (callee) at the time of the call, and the owner (callee) may pass data back to the user (caller) at the time of the return. As with message payloads, the data passed from user to owner is referred to as the Command Payload and the data passed from owner to user is referred to as the Response Payload. &lt;br /&gt;
&lt;br /&gt;
A Command Payload is constructed from the formal parameters of a function, and is a synthesized C structure. The members of the structure correspond to the formal parameters of the function (both the order and types of the members correspond exactly). &lt;br /&gt;
&lt;br /&gt;
The Response Payload for a function is constructed from the return value of a function. Below is an example of the Command and Response Payload memory layout for a simple function Error(): &lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
// The structure for the message data.&lt;br /&gt;
typedef struct _ErrorMessagePayload {&lt;br /&gt;
  int        errorCode; &lt;br /&gt;
  char[100]  text;&lt;br /&gt;
} ErrorMessagePayload; &lt;br /&gt;
     &lt;br /&gt;
int Error(ErrorMessagePayload *pPayload, BOOL bPopupMessage); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:command_payload.gif|center]]&lt;br /&gt;
&lt;br /&gt;
== Pragmas ==&lt;br /&gt;
&lt;br /&gt;
The SCL pragmas are listed here, categorized by function:&lt;br /&gt;
&lt;br /&gt;
=== Test Units ===&lt;br /&gt;
&lt;br /&gt;
* [[scl_test_class]]&lt;br /&gt;
* [[scl_test_cclass]]&lt;br /&gt;
* [[scl_test_flist]]&lt;br /&gt;
* [[scl_test_setup]]&lt;br /&gt;
* [[scl_test_teardown]]&lt;br /&gt;
&lt;br /&gt;
=== Capture ===&lt;br /&gt;
&lt;br /&gt;
* [[scl_func]]&lt;br /&gt;
* [[scl_function]]&lt;br /&gt;
* [[scl_msg]]&lt;br /&gt;
* [[scl_msg_bind]]&lt;br /&gt;
&lt;br /&gt;
=== Qualification ===&lt;br /&gt;
&lt;br /&gt;
* [[scl_brew_class]]&lt;br /&gt;
* [[scl_cast]]&lt;br /&gt;
* [[scl_conform]]&lt;br /&gt;
* [[scl_ptr]]&lt;br /&gt;
* [[scl_ptr_flist]]&lt;br /&gt;
* [[scl_ptr_opaque]]&lt;br /&gt;
* [[scl_ptr_sized]]&lt;br /&gt;
* [[scl_string]]&lt;br /&gt;
* [[scl_struct_sized]]&lt;br /&gt;
* [[scl_union]]&lt;br /&gt;
* [[scl_union_activate]]&lt;br /&gt;
* [[scl_values]]&lt;br /&gt;
&lt;br /&gt;
=== Trace ===&lt;br /&gt;
&lt;br /&gt;
* [[scl_tracepoint]]&lt;br /&gt;
* [[scl_tracepoint_format]]&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
* The hash (#) symbol that begins the pragma directive must be the first non-white-space character on the line containing the pragma, e.g. #pragma.&lt;br /&gt;
* Compilers typically issue warnings, but not errors, for unrecognized pragmas. An SCL-compliant compiler is required to automatically define the _SCL symbol. It is recommended that a header file using SCL pragmas include the following conditional compile statement wrapped around the pragma definitions:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#ifdef _SCL&lt;br /&gt;
&lt;br /&gt;
  //... pragma definitions&lt;br /&gt;
     &lt;br /&gt;
#endif // #ifdef _SCL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The use of packed pragmas may result in structure alignment issues when communicating with the target platform.&lt;br /&gt;
&lt;br /&gt;
* STRIDE pragmas should be added to header (.h) files. Although such pragmas could be added to implementation (.c/cpp) files it is not recommended because it may lead to linkage problems when integrating the generated IM code in to your application.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
*[[SCL Structure]]&lt;br /&gt;
*[[SCL Data Types]]&lt;br /&gt;
*[[SCL Design Requirements]]&lt;br /&gt;
*[[SCL Message Attributes]]&lt;br /&gt;
*For detailed instructions on working with SCL, including code samples and examples, refer to the [[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]].&lt;br /&gt;
&lt;br /&gt;
*Refer to the &#039;&#039;&#039;SCL Wizard&#039;&#039;&#039; section of the STRIDE Online Help for information on how to create SCL pragmas.&lt;br /&gt;
&lt;br /&gt;
[[Category: SCL]]&lt;br /&gt;
[[Category: Reference]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8206</id>
		<title>Studio:Scl struct sized</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8206"/>
		<updated>2008-10-31T23:43:34Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The scl_struct_sized pragma =&lt;br /&gt;
&lt;br /&gt;
The scl_test_cclass pragma is one of the [[SCL_Pragmas#Qualification|Qualification]] pragmas. The scl_struct_sized pragma identifies a particular struct or pointer-to-struct as a sized structure. A sized structure typically has bytes allocated past its type definition.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
 #pragma scl_struct_sized(type-name, max-size)&lt;br /&gt;
 &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;align:left;&amp;quot;  &lt;br /&gt;
| width=&amp;quot;100&amp;quot; | &#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
| width=&amp;quot;100&amp;quot; | &#039;&#039;&#039;Type&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;type-name&#039;&#039;&lt;br /&gt;
| Struct or&amp;lt;br&amp;gt;Pointer&lt;br /&gt;
| Specifies a structure type (or a pointer to such type) that is to be sized (allocated bytes beyond its type definition).&lt;br /&gt;
The following restrictions apply:&lt;br /&gt;
* The structure type may not be pointed to by a sized pointer.&lt;br /&gt;
* The structure type may not be a member of any other structure or union.&lt;br /&gt;
* The structure type may not be passed as a function parameter.&lt;br /&gt;
* The structure type may only reside in IN/INOUT memory blocks.&lt;br /&gt;
* If the last member of the structure is an array, the array&#039;s size is calculated based upon max-size - (size of struct&#039;s other members).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;max-size&#039;&#039;&lt;br /&gt;
| Integer&lt;br /&gt;
| Specifies the number of bytes to be allocated for the sized struct.&lt;br /&gt;
The following restrictions apply:&lt;br /&gt;
* The max-size type must be an integral type (int, short, char).&lt;br /&gt;
* The max-size value (at runtime) may not be less than the structure&#039;s type size.&lt;br /&gt;
* The max-size value (at runtime) may not exceed the maximum payload size.&lt;br /&gt;
* The max_size field must be in the same payload block as the type-name sized struct (i.e. no indirection &#039;*&#039; or &#039;-&amp;gt;&#039;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Example 1 ===&lt;br /&gt;
This example shows the declaration for a simple sized struct.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int nMoreJunk;&lt;br /&gt;
} SimpleSizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example 2 ===&lt;br /&gt;
This example shows the declaration of a sized struct with a conformant array.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#define SOME_BOUND 1&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int ary[SOME_BOUND];&lt;br /&gt;
} ConformantArraySizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* For additional information on scl_string, including constraints, refer to the section on scl_struct_sized in the [[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]].&lt;br /&gt;
&lt;br /&gt;
[[Category: SCL]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8205</id>
		<title>Studio:Scl struct sized</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8205"/>
		<updated>2008-10-31T23:41:31Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* Example 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The scl_struct_sized pragma =&lt;br /&gt;
&lt;br /&gt;
The scl_struct_sized pragma identifies a particular struct or pointer-to-struct as a sized structure. A sized structure typically has bytes allocated past its type definition.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
 #pragma scl_struct_sized(type-name, max-size)&lt;br /&gt;
 &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;align:left;&amp;quot;  &lt;br /&gt;
| width=&amp;quot;100&amp;quot; | &#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
| width=&amp;quot;100&amp;quot; | &#039;&#039;&#039;Type&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;type-name&#039;&#039;&lt;br /&gt;
| Struct or&amp;lt;br&amp;gt;Pointer&lt;br /&gt;
| Specifies a structure type (or a pointer to such type) that is to be sized (allocated bytes beyond its type definition).&lt;br /&gt;
The following restrictions apply:&lt;br /&gt;
* The structure type may not be pointed to by a sized pointer.&lt;br /&gt;
* The structure type may not be a member of any other structure or union.&lt;br /&gt;
* The structure type may not be passed as a function parameter.&lt;br /&gt;
* The structure type may only reside in IN/INOUT memory blocks.&lt;br /&gt;
* If the last member of the structure is an array, the array&#039;s size is calculated based upon max-size - (size of struct&#039;s other members).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;max-size&#039;&#039;&lt;br /&gt;
| Integer&lt;br /&gt;
| Specifies the number of bytes to be allocated for the sized struct.&lt;br /&gt;
The following restrictions apply:&lt;br /&gt;
* The max-size type must be an integral type (int, short, char).&lt;br /&gt;
* The max-size value (at runtime) may not be less than the structure&#039;s type size.&lt;br /&gt;
* The max-size value (at runtime) may not exceed the maximum payload size.&lt;br /&gt;
* The max_size field must be in the same payload block as the type-name sized struct (i.e. no indirection &#039;*&#039; or &#039;-&amp;gt;&#039;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Example 1 ===&lt;br /&gt;
This example shows the declaration for a simple sized struct.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int nMoreJunk;&lt;br /&gt;
} SimpleSizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example 2 ===&lt;br /&gt;
This example shows the declaration of a sized struct with a conformant array.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#define SOME_BOUND 1&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int ary[SOME_BOUND];&lt;br /&gt;
} ConformantArraySizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* For additional information on scl_string, including constraints, refer to the section on scl_struct_sized in the [[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]].&lt;br /&gt;
&lt;br /&gt;
[[Category: SCL]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8204</id>
		<title>Studio:Scl struct sized</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8204"/>
		<updated>2008-10-31T23:41:10Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* Syntax */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The scl_struct_sized pragma =&lt;br /&gt;
&lt;br /&gt;
The scl_struct_sized pragma identifies a particular struct or pointer-to-struct as a sized structure. A sized structure typically has bytes allocated past its type definition.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
 #pragma scl_struct_sized(type-name, max-size)&lt;br /&gt;
 &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;align:left;&amp;quot;  &lt;br /&gt;
| width=&amp;quot;100&amp;quot; | &#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
| width=&amp;quot;100&amp;quot; | &#039;&#039;&#039;Type&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;type-name&#039;&#039;&lt;br /&gt;
| Struct or&amp;lt;br&amp;gt;Pointer&lt;br /&gt;
| Specifies a structure type (or a pointer to such type) that is to be sized (allocated bytes beyond its type definition).&lt;br /&gt;
The following restrictions apply:&lt;br /&gt;
* The structure type may not be pointed to by a sized pointer.&lt;br /&gt;
* The structure type may not be a member of any other structure or union.&lt;br /&gt;
* The structure type may not be passed as a function parameter.&lt;br /&gt;
* The structure type may only reside in IN/INOUT memory blocks.&lt;br /&gt;
* If the last member of the structure is an array, the array&#039;s size is calculated based upon max-size - (size of struct&#039;s other members).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;max-size&#039;&#039;&lt;br /&gt;
| Integer&lt;br /&gt;
| Specifies the number of bytes to be allocated for the sized struct.&lt;br /&gt;
The following restrictions apply:&lt;br /&gt;
* The max-size type must be an integral type (int, short, char).&lt;br /&gt;
* The max-size value (at runtime) may not be less than the structure&#039;s type size.&lt;br /&gt;
* The max-size value (at runtime) may not exceed the maximum payload size.&lt;br /&gt;
* The max_size field must be in the same payload block as the type-name sized struct (i.e. no indirection &#039;*&#039; or &#039;-&amp;gt;&#039;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Example 1 ===&lt;br /&gt;
This example shows the declaration for a simple sized struct.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int nMoreJunk;&lt;br /&gt;
} SimpleSizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example 2 ===&lt;br /&gt;
This example shows the declaration of a sized struct with a conformant array.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#define SOME_BOUND 0&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int ary[SOME_BOUND];&lt;br /&gt;
} ConformantArraySizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* For additional information on scl_string, including constraints, refer to the section on scl_struct_sized in the [[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]].&lt;br /&gt;
&lt;br /&gt;
[[Category: SCL]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8203</id>
		<title>Studio:Scl struct sized</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8203"/>
		<updated>2008-10-31T23:39:49Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* Syntax */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The scl_struct_sized pragma =&lt;br /&gt;
&lt;br /&gt;
The scl_struct_sized pragma identifies a particular struct or pointer-to-struct as a sized structure. A sized structure typically has bytes allocated past its type definition.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
 #pragma scl_struct_sized(type-name, max-size)&lt;br /&gt;
 &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;align:left;&amp;quot;  &lt;br /&gt;
| width=&amp;quot;100&amp;quot; | &#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
| width=&amp;quot;100&amp;quot; | &#039;&#039;&#039;Type&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;type-name&#039;&#039;&lt;br /&gt;
| Struct or&amp;lt;br&amp;gt;Struct*&lt;br /&gt;
| Specifies a structure type (or a pointer to such type) that is to be sized (allocated bytes beyond its type definition).&lt;br /&gt;
The following restrictions apply:&lt;br /&gt;
* The structure type may not be pointed to by a sized pointer.&lt;br /&gt;
* The structure type may not be a member of any other structure or union.&lt;br /&gt;
* The structure type may not be passed as a function parameter.&lt;br /&gt;
* The structure type may only reside in IN/INOUT memory blocks.&lt;br /&gt;
* If the last member of the structure is an array, the array&#039;s size is calculated based upon max-size - (size of struct&#039;s other members).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;max-size&#039;&#039;&lt;br /&gt;
| Integer&lt;br /&gt;
| Specifies the number of bytes to be allocated for the sized struct.&lt;br /&gt;
The following restrictions apply:&lt;br /&gt;
* The max-size type must be an integral type (int, short, char).&lt;br /&gt;
* The max-size value (at runtime) may not be less than the structure&#039;s type size.&lt;br /&gt;
* The max-size value (at runtime) may not exceed the maximum payload size.&lt;br /&gt;
* The max_size field must be in the same payload block as the type-name sized struct (i.e. no indirection &#039;*&#039; or &#039;-&amp;gt;&#039;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Example 1 ===&lt;br /&gt;
This example shows the declaration for a simple sized struct.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int nMoreJunk;&lt;br /&gt;
} SimpleSizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example 2 ===&lt;br /&gt;
This example shows the declaration of a sized struct with a conformant array.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#define SOME_BOUND 0&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int ary[SOME_BOUND];&lt;br /&gt;
} ConformantArraySizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* For additional information on scl_string, including constraints, refer to the section on scl_struct_sized in the [[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]].&lt;br /&gt;
&lt;br /&gt;
[[Category: SCL]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8202</id>
		<title>Studio:Scl struct sized</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8202"/>
		<updated>2008-10-31T23:39:20Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* Syntax */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The scl_struct_sized pragma =&lt;br /&gt;
&lt;br /&gt;
The scl_struct_sized pragma identifies a particular struct or pointer-to-struct as a sized structure. A sized structure typically has bytes allocated past its type definition.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
 #pragma scl_struct_sized(type-name, max-size)&lt;br /&gt;
 &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;align:left;&amp;quot;  &lt;br /&gt;
| width=&amp;quot;100&amp;quot; | &#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
| width=&amp;quot;100&amp;quot; | &#039;&#039;&#039;Type&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;type-name&#039;&#039;&lt;br /&gt;
| Struct or&amp;lt;br&amp;gt;Struct*&lt;br /&gt;
| Specifies a structure type that is to be sized (allocated bytes beyond its type definition).&lt;br /&gt;
The following restrictions apply:&lt;br /&gt;
* The structure type may not be pointed to by a sized pointer.&lt;br /&gt;
* The structure type may not be a member of any other structure or union.&lt;br /&gt;
* The structure type may not be passed as a function parameter.&lt;br /&gt;
* The structure type may only reside in IN/INOUT memory blocks.&lt;br /&gt;
* If the last member of the structure is an array, the array&#039;s size is calculated based upon max-size - (size of struct&#039;s other members).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;max-size&#039;&#039;&lt;br /&gt;
| Integer&lt;br /&gt;
| Specifies the number of bytes to be allocated for the sized struct.&lt;br /&gt;
The following restrictions apply:&lt;br /&gt;
* The max-size type must be an integral type (int, short, char).&lt;br /&gt;
* The max-size value (at runtime) may not be less than the structure&#039;s type size.&lt;br /&gt;
* The max-size value (at runtime) may not exceed the maximum payload size.&lt;br /&gt;
* The max_size field must be in the same payload block as the type-name sized struct (i.e. no indirection &#039;*&#039; or &#039;-&amp;gt;&#039;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Example 1 ===&lt;br /&gt;
This example shows the declaration for a simple sized struct.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int nMoreJunk;&lt;br /&gt;
} SimpleSizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example 2 ===&lt;br /&gt;
This example shows the declaration of a sized struct with a conformant array.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#define SOME_BOUND 0&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int ary[SOME_BOUND];&lt;br /&gt;
} ConformantArraySizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* For additional information on scl_string, including constraints, refer to the section on scl_struct_sized in the [[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]].&lt;br /&gt;
&lt;br /&gt;
[[Category: SCL]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8201</id>
		<title>Studio:Scl struct sized</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8201"/>
		<updated>2008-10-31T23:38:41Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* Syntax */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The scl_struct_sized pragma =&lt;br /&gt;
&lt;br /&gt;
The scl_struct_sized pragma identifies a particular struct or pointer-to-struct as a sized structure. A sized structure typically has bytes allocated past its type definition.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
 #pragma scl_struct_sized(type-name, max-size)&lt;br /&gt;
 &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;align:left;&amp;quot;  &lt;br /&gt;
| width=&amp;quot;100&amp;quot; | &#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
| width=&amp;quot;100&amp;quot; | &#039;&#039;&#039;Type&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;type-name&#039;&#039;&lt;br /&gt;
| Struct or&amp;lt;br&amp;gt;Struct*&lt;br /&gt;
| Specifies a structure type that is to be sized (allocated bytes beyond its type definition).&lt;br /&gt;
The following restrictions apply:&lt;br /&gt;
* The structure type may not be pointed to by a sized pointer.&lt;br /&gt;
* The structure type may not be a member of any other structure or union.&lt;br /&gt;
* The structure type may not be passed as a function parameter.&lt;br /&gt;
* The structure type may only reside in IN/INOUT memory blocks.&lt;br /&gt;
* If the last member of the structure is an array, the array&#039;s size is calculated based upon max-size - (size of struct&#039;s other members).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;max-size&#039;&#039;&lt;br /&gt;
| Field &amp;lt;br&amp;gt;(of type-name)&lt;br /&gt;
| Specifies the number of bytes to be allocated for the sized struct.&lt;br /&gt;
The following restrictions apply:&lt;br /&gt;
* The max-size type must be an integral type (int, short, char).&lt;br /&gt;
* The max-size value (at runtime) may not be less than the structure&#039;s type size.&lt;br /&gt;
* The max-size value (at runtime) may not exceed the maximum payload size.&lt;br /&gt;
* The max_size field must be in the same payload block as the type-name sized struct (i.e. no indirection &#039;*&#039; or &#039;-&amp;gt;&#039;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Example 1 ===&lt;br /&gt;
This example shows the declaration for a simple sized struct.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int nMoreJunk;&lt;br /&gt;
} SimpleSizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example 2 ===&lt;br /&gt;
This example shows the declaration of a sized struct with a conformant array.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#define SOME_BOUND 0&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int ary[SOME_BOUND];&lt;br /&gt;
} ConformantArraySizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* For additional information on scl_string, including constraints, refer to the section on scl_struct_sized in the [[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]].&lt;br /&gt;
&lt;br /&gt;
[[Category: SCL]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8200</id>
		<title>Studio:Scl struct sized</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8200"/>
		<updated>2008-10-31T23:38:09Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The scl_struct_sized pragma =&lt;br /&gt;
&lt;br /&gt;
The scl_struct_sized pragma identifies a particular struct or pointer-to-struct as a sized structure. A sized structure typically has bytes allocated past its type definition.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
 #pragma scl_struct_sized(type-name, max-size)&lt;br /&gt;
 &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;align:left;&amp;quot;  &lt;br /&gt;
| width=&amp;quot;180&amp;quot; | &#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
| width=&amp;quot;60&amp;quot; | &#039;&#039;&#039;Type&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;type-name&#039;&#039;&lt;br /&gt;
| Struct or&amp;lt;br&amp;gt;Struct*&lt;br /&gt;
| Specifies a structure type that is to be sized (allocated bytes beyond its type definition).&lt;br /&gt;
The following restrictions apply:&lt;br /&gt;
* The structure type may not be pointed to by a sized pointer.&lt;br /&gt;
* The structure type may not be a member of any other structure or union.&lt;br /&gt;
* The structure type may not be passed as a function parameter.&lt;br /&gt;
* The structure type may only reside in IN/INOUT memory blocks.&lt;br /&gt;
* If the last member of the structure is an array, the array&#039;s size is calculated based upon max-size - (size of struct&#039;s other members).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;max-size&#039;&#039;&lt;br /&gt;
| Field &amp;lt;br&amp;gt;(of type-name)&lt;br /&gt;
| Specifies the number of bytes to be allocated for the sized struct.&lt;br /&gt;
The following restrictions apply:&lt;br /&gt;
* The max-size type must be an integral type (int, short, char).&lt;br /&gt;
* The max-size value (at runtime) may not be less than the structure&#039;s type size.&lt;br /&gt;
* The max-size value (at runtime) may not exceed the maximum payload size.&lt;br /&gt;
* The max_size field must be in the same payload block as the type-name sized struct (i.e. no indirection &#039;*&#039; or &#039;-&amp;gt;&#039;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Example 1 ===&lt;br /&gt;
This example shows the declaration for a simple sized struct.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int nMoreJunk;&lt;br /&gt;
} SimpleSizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example 2 ===&lt;br /&gt;
This example shows the declaration of a sized struct with a conformant array.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#define SOME_BOUND 0&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int ary[SOME_BOUND];&lt;br /&gt;
} ConformantArraySizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* For additional information on scl_string, including constraints, refer to the section on scl_struct_sized in the [[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]].&lt;br /&gt;
&lt;br /&gt;
[[Category: SCL]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8199</id>
		<title>Studio:Scl struct sized</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8199"/>
		<updated>2008-10-31T23:37:15Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The scl_struct_sized pragma =&lt;br /&gt;
&lt;br /&gt;
The scl_struct_sized pragma identifies a particular struct or pointer-to-struct as a sized structure. A sized structure typically has bytes allocated past its type definition.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
 #pragma scl_struct_sized(type-name, max-size)&lt;br /&gt;
 &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; width=&amp;quot;50&amp;quot; style=&amp;quot;align:left;&amp;quot;  &lt;br /&gt;
| &#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Type&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;type-name&#039;&#039;&lt;br /&gt;
| Struct or&amp;lt;br&amp;gt;Struct*&lt;br /&gt;
| Specifies a structure type that is to be sized (allocated bytes beyond its type definition).&lt;br /&gt;
The following restrictions apply:&lt;br /&gt;
* The structure type may not be pointed to by a sized pointer.&lt;br /&gt;
* The structure type may not be a member of any other structure or union.&lt;br /&gt;
* The structure type may not be passed as a function parameter.&lt;br /&gt;
* The structure type may only reside in IN/INOUT memory blocks.&lt;br /&gt;
* If the last member of the structure is an array, the array&#039;s size is calculated based upon max-size - (size of struct&#039;s other members).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;max-size&#039;&#039;&lt;br /&gt;
| Field &amp;lt;br&amp;gt;(of type-name)&lt;br /&gt;
| Specifies the number of bytes to be allocated for the sized struct.&lt;br /&gt;
The following restrictions apply:&lt;br /&gt;
* The max-size type must be an integral type (int, short, char).&lt;br /&gt;
* The max-size value (at runtime) may not be less than the structure&#039;s type size.&lt;br /&gt;
* The max-size value (at runtime) may not exceed the maximum payload size.&lt;br /&gt;
* The max_size field must be in the same payload block as the type-name sized struct (i.e. no indirection &#039;*&#039; or &#039;-&amp;gt;&#039;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Example 1 ===&lt;br /&gt;
This example shows the declaration for a simple sized struct.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int nMoreJunk;&lt;br /&gt;
} SimpleSizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example 2 ===&lt;br /&gt;
This example shows the declaration of a sized struct with a conformant array.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#define SOME_BOUND 0&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int ary[SOME_BOUND];&lt;br /&gt;
} ConformantArraySizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* For additional information on scl_string, including constraints, refer to the section on scl_struct_sized in the [[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]].&lt;br /&gt;
&lt;br /&gt;
[[Category: SCL]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8198</id>
		<title>Studio:Scl struct sized</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8198"/>
		<updated>2008-10-31T23:35:20Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* Syntax */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The scl_struct_sized pragma =&lt;br /&gt;
&lt;br /&gt;
The scl_struct_sized pragma identifies a particular struct or pointer-to-struct as a sized structure. A sized structure typically has bytes allocated past its type definition.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
 #pragma scl_struct_sized(type-name, max-size)&lt;br /&gt;
 &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;align:left;&amp;quot;  &lt;br /&gt;
| &#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Type&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;type-name&#039;&#039;&lt;br /&gt;
| Struct&amp;lt;br&amp;gt;Struct*&lt;br /&gt;
| Specifies a structure type that is to be sized (allocated bytes beyond its type definition).&lt;br /&gt;
The following restrictions apply:&lt;br /&gt;
* The structure type may not be pointed to by a sized pointer.&lt;br /&gt;
* The structure type may not be a member of any other structure or union.&lt;br /&gt;
* The structure type may not be passed as a function parameter.&lt;br /&gt;
* The structure type may only reside in IN/INOUT memory blocks.&lt;br /&gt;
* If the last member of the structure is an array, the array&#039;s size is calculated based upon max-size - (size of struct&#039;s other members).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;max-size&#039;&#039;&lt;br /&gt;
| Member Field of&amp;lt;br&amp;gt;type-name&lt;br /&gt;
| Specifies the number of bytes to be allocated for the sized struct.&lt;br /&gt;
The following restrictions apply:&lt;br /&gt;
* The max-size type must be an integral type (int, short, char).&lt;br /&gt;
* The max-size value (at runtime) may not be less than the structure&#039;s type size.&lt;br /&gt;
* The max-size value (at runtime) may not exceed the maximum payload size.&lt;br /&gt;
* The max_size field must be in the same payload block as the type-name sized struct (i.e. no indirection &#039;*&#039; or &#039;-&amp;gt;&#039;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Example 1 ===&lt;br /&gt;
This example shows the declaration for a simple sized struct.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int nMoreJunk;&lt;br /&gt;
} SimpleSizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example 2 ===&lt;br /&gt;
This example shows the declaration of a sized struct with a conformant array.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#define SOME_BOUND 0&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int ary[SOME_BOUND];&lt;br /&gt;
} ConformantArraySizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* For additional information on scl_string, including constraints, refer to the section on scl_struct_sized in the [[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]].&lt;br /&gt;
&lt;br /&gt;
[[Category: SCL]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8190</id>
		<title>Studio:Scl struct sized</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8190"/>
		<updated>2008-10-31T18:49:19Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* Syntax */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The scl_struct_sized pragma =&lt;br /&gt;
&lt;br /&gt;
The scl_struct_sized pragma identifies a particular struct or pointer-to-struct as a sized structure. A sized structure typically has bytes allocated past its type definition.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
 #pragma scl_struct_sized(type-name, max-size)&lt;br /&gt;
 &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;align:left;&amp;quot;  &lt;br /&gt;
| &#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Type&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;type-name&#039;&#039;&lt;br /&gt;
| Struct or Struct*&lt;br /&gt;
| Specifies a structure type that is to be sized (allocated bytes beyond its type definition).&lt;br /&gt;
* The structure type may not be pointed to by a sized pointer.&lt;br /&gt;
* The structure type may not be a member of any other structure or union.&lt;br /&gt;
* The structure type may not be passed as a function parameter.&lt;br /&gt;
* The structure type may only reside in IN/INOUT memory blocks.&lt;br /&gt;
* If the last member of the structure is an array, the array&#039;s size is calculated based upon max-size - (size of struct&#039;s other members).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;max-size&#039;&#039;&lt;br /&gt;
| Member Field of type-name&lt;br /&gt;
| Specifies the number of bytes for the sized struct.&lt;br /&gt;
* The value contained by max_size may not be less than the structure&#039;s type size.&lt;br /&gt;
* The max-size value must be an integral type (int, short, char).&lt;br /&gt;
* The max-size may not exceed the maximum payload size.&lt;br /&gt;
* The max_size must reside in the same payload block as the sized struct (no indirection &#039;*&#039; or &#039;-&amp;gt;&#039;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Example 1 ===&lt;br /&gt;
This example shows the declaration for a simple sized struct.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int nMoreJunk;&lt;br /&gt;
} SimpleSizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example 2 ===&lt;br /&gt;
This example shows the declaration of a sized struct with a conformant array.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#define SOME_BOUND 0&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int ary[SOME_BOUND];&lt;br /&gt;
} ConformantArraySizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* For additional information on scl_string, including constraints, refer to the section on scl_struct_sized in the [[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]].&lt;br /&gt;
&lt;br /&gt;
[[Category: SCL]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8189</id>
		<title>Studio:Scl struct sized</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8189"/>
		<updated>2008-10-31T00:55:56Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The scl_struct_sized pragma =&lt;br /&gt;
&lt;br /&gt;
The scl_struct_sized pragma identifies a particular struct or pointer-to-struct as a sized structure. A sized structure typically has bytes allocated past its type definition.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
 #pragma scl_struct_sized(type-name, max-size)&lt;br /&gt;
 &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;align:left;&amp;quot;  &lt;br /&gt;
| &#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Type&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;type-name&#039;&#039;&lt;br /&gt;
| Struct or Struct*&lt;br /&gt;
| Specifies a structure type that is to be sized (allocated bytes beyond its type definition).&lt;br /&gt;
* The structure type may not be pointed to by a sized pointer.&lt;br /&gt;
* The structure type may not be a member of any other structure or union.&lt;br /&gt;
* The structure type may not be passed as a function parameter.&lt;br /&gt;
* The structure type may only reside in IN/INOUT memory blocks.&lt;br /&gt;
* If the last member of the structure is an array, the array&#039;s size is calculated based upon max-size - (size of struct&#039;s other members).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;max-size&#039;&#039;&lt;br /&gt;
| Integer&lt;br /&gt;
| Specifies the number of bytes for the sized struct.&lt;br /&gt;
* The value contained by max_size may not be less than the structure&#039;s type size.&lt;br /&gt;
* The max-size value must be an integral type (int, short, char).&lt;br /&gt;
* The max-size may not exceed the maximum payload size.&lt;br /&gt;
* The max_size must reside in the same payload block as the sized struct (no indirection &#039;*&#039; or &#039;-&amp;gt;&#039;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Example 1 ===&lt;br /&gt;
This example shows the declaration for a simple sized struct.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int nMoreJunk;&lt;br /&gt;
} SimpleSizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example 2 ===&lt;br /&gt;
This example shows the declaration of a sized struct with a conformant array.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#define SOME_BOUND 0&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int ary[SOME_BOUND];&lt;br /&gt;
} ConformantArraySizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* For additional information on scl_string, including constraints, refer to the section on scl_struct_sized in the [[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]].&lt;br /&gt;
&lt;br /&gt;
[[Category: SCL]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8188</id>
		<title>Studio:Scl struct sized</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8188"/>
		<updated>2008-10-31T00:51:05Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* Syntax */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The scl_struct_sized pragma =&lt;br /&gt;
&lt;br /&gt;
The scl_struct_sized pragma identifies a particular struct or pointer-to-struct as a sized structure. A sized structure typically has bytes allocated past its type definition.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
 #pragma scl_struct_sized(type-name, max-size)&lt;br /&gt;
 &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;align:left;&amp;quot;  &lt;br /&gt;
| &#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Type&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;type-name&#039;&#039;&lt;br /&gt;
| Struct or Struct*&lt;br /&gt;
| Specifies a structure type that is to be sized (allocated bytes beyond its type definition).&lt;br /&gt;
* The structure type may not be pointed to by a sized pointer.&lt;br /&gt;
* The structure type may not be a member of any other structure or union.&lt;br /&gt;
* The structure type may not be passed as a function parameter.&lt;br /&gt;
* The structure type may only reside in IN/INOUT memory blocks.&lt;br /&gt;
* If the last member of the structure is an array, the array&#039;s size is calculated based upon max-size - (size of struct&#039;s other members).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;max-size&#039;&#039;&lt;br /&gt;
| Integer&lt;br /&gt;
| Specifies the number of bytes for the sized struct.&lt;br /&gt;
* The value contained by max_size may not be less than the structure&#039;s type size.&lt;br /&gt;
* The max-size value must be an integral type (int, short, char).&lt;br /&gt;
* The max-size may not exceed the maximum payload size.&lt;br /&gt;
* The max_size must reside in the same payload block as the sized struct (no indirection &#039;*&#039; or &#039;-&amp;gt;&#039;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example 1 ===&lt;br /&gt;
This example shows the declaration for a simple sized struct.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int nMoreJunk;&lt;br /&gt;
} SimpleSizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct s);&lt;br /&gt;
#pragma scl_struct_sized(SimpleSizedStruct, nSize);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example 2 ===&lt;br /&gt;
This example shows the declaration for a simple sized struct using a pointer.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int nMoreJunk;&lt;br /&gt;
} SimpleSizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example 2 ===&lt;br /&gt;
This example shows the declaration of a sized struct containing a conformant array.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#define SOME_BOUND 0&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int ary[SOME_BOUND];&lt;br /&gt;
} ConformantArraySizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* For additional information on scl_string, including constraints, refer to the section on scl_struct_sized in the [[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]].&lt;br /&gt;
&lt;br /&gt;
[[Category: SCL]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8187</id>
		<title>Studio:Scl struct sized</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8187"/>
		<updated>2008-10-31T00:50:11Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* Syntax */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The scl_struct_sized pragma =&lt;br /&gt;
&lt;br /&gt;
The scl_struct_sized pragma identifies a particular struct or pointer-to-struct as a sized structure. A sized structure typically has bytes allocated past its type definition.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
 #pragma scl_struct_sized(type-name, max-size)&lt;br /&gt;
 &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;align:left;&amp;quot;  &lt;br /&gt;
| &#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Type&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;type-name&#039;&#039;&lt;br /&gt;
| Struct or Struct*&lt;br /&gt;
* The structure type may not be pointed to by a sized pointer.&lt;br /&gt;
* The structure type may not be a member of any other structure or union.&lt;br /&gt;
* The structure type may not be passed as a function parameter.&lt;br /&gt;
* The structure type may only reside in IN/INOUT memory blocks.&lt;br /&gt;
* If the last member of the structure is an array, the array&#039;s size is calculated based upon max-size - (size of struct&#039;s other members).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;max-size&#039;&#039;&lt;br /&gt;
| Integer&lt;br /&gt;
| Specifies the number of bytes for the sized struct.&lt;br /&gt;
* The value contained by max_size may not be less than the structure&#039;s type size.&lt;br /&gt;
* The max-size value must be an integral type (int, short, char).&lt;br /&gt;
* The max-size may not exceed the maximum payload size.&lt;br /&gt;
* The max_size must reside in the same payload block as the sized struct (no indirection &#039;*&#039; or &#039;-&amp;gt;&#039;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example 1 ===&lt;br /&gt;
This example shows the declaration for a simple sized struct.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int nMoreJunk;&lt;br /&gt;
} SimpleSizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct s);&lt;br /&gt;
#pragma scl_struct_sized(SimpleSizedStruct, nSize);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example 2 ===&lt;br /&gt;
This example shows the declaration for a simple sized struct using a pointer.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int nMoreJunk;&lt;br /&gt;
} SimpleSizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example 2 ===&lt;br /&gt;
This example shows the declaration of a sized struct containing a conformant array.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#define SOME_BOUND 0&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int ary[SOME_BOUND];&lt;br /&gt;
} ConformantArraySizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* For additional information on scl_string, including constraints, refer to the section on scl_struct_sized in the [[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]].&lt;br /&gt;
&lt;br /&gt;
[[Category: SCL]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8186</id>
		<title>Studio:Scl struct sized</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8186"/>
		<updated>2008-10-31T00:49:40Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* Syntax */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The scl_struct_sized pragma =&lt;br /&gt;
&lt;br /&gt;
The scl_struct_sized pragma identifies a particular struct or pointer-to-struct as a sized structure. A sized structure typically has bytes allocated past its type definition.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
 #pragma scl_struct_sized(type-name, max-size)&lt;br /&gt;
 &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;align:left;&amp;quot;  &lt;br /&gt;
| &#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Type&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;type-name&#039;&#039;&lt;br /&gt;
| Type&lt;br /&gt;
| Pointer-to-Struct or Struct&amp;lt;br&amp;gt;&lt;br /&gt;
* The structure type may not be pointed to by a sized pointer.&lt;br /&gt;
* The structure type may not be a member of any other structure or union.&lt;br /&gt;
* The structure type may not be passed as a function parameter.&lt;br /&gt;
* The structure type may only reside in IN/INOUT memory blocks.&lt;br /&gt;
* If the last member of the structure is an array, the array&#039;s size is calculated based upon max-size - (size of struct&#039;s other members).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;max-size&#039;&#039;&lt;br /&gt;
| Integer&lt;br /&gt;
| Specifies the number of bytes for the sized struct.&lt;br /&gt;
* The value contained by max_size may not be less than the structure&#039;s type size.&lt;br /&gt;
* The max-size value must be an integral type (int, short, char).&lt;br /&gt;
* The max-size may not exceed the maximum payload size.&lt;br /&gt;
* The max_size must reside in the same payload block as the sized struct (no indirection &#039;*&#039; or &#039;-&amp;gt;&#039;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example 1 ===&lt;br /&gt;
This example shows the declaration for a simple sized struct.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int nMoreJunk;&lt;br /&gt;
} SimpleSizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct s);&lt;br /&gt;
#pragma scl_struct_sized(SimpleSizedStruct, nSize);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example 2 ===&lt;br /&gt;
This example shows the declaration for a simple sized struct using a pointer.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int nMoreJunk;&lt;br /&gt;
} SimpleSizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example 2 ===&lt;br /&gt;
This example shows the declaration of a sized struct containing a conformant array.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#define SOME_BOUND 0&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int ary[SOME_BOUND];&lt;br /&gt;
} ConformantArraySizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* For additional information on scl_string, including constraints, refer to the section on scl_struct_sized in the [[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]].&lt;br /&gt;
&lt;br /&gt;
[[Category: SCL]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8185</id>
		<title>Studio:Scl struct sized</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Studio:Scl_struct_sized&amp;diff=8185"/>
		<updated>2008-10-31T00:30:11Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: New page: = The scl_struct_sized pragma =  The scl_struct_sized pragma identifies a particular struct or pointer-to-struct as a sized structure. A sized structure typically has bytes allocated past ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The scl_struct_sized pragma =&lt;br /&gt;
&lt;br /&gt;
The scl_struct_sized pragma identifies a particular struct or pointer-to-struct as a sized structure. A sized structure typically has bytes allocated past its type definition.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
 #pragma scl_struct_sized(type-name, max-size)&lt;br /&gt;
 &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;align:left;&amp;quot;  &lt;br /&gt;
| &#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Type&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;type-name&#039;&#039;&lt;br /&gt;
| Type&lt;br /&gt;
| Name of the type that contains the struct/pointer:&amp;lt;br&amp;gt;&lt;br /&gt;
* structure&amp;lt;br&amp;gt;&lt;br /&gt;
* pointer type&amp;lt;br&amp;gt;&lt;br /&gt;
* function name&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;max-size&#039;&#039;&lt;br /&gt;
| Integer&lt;br /&gt;
| Specifies the number of bytes for the sized struct.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example 1 ===&lt;br /&gt;
This example shows the declaration for a simple sized struct.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int nMoreJunk;&lt;br /&gt;
} SimpleSizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct s);&lt;br /&gt;
#pragma scl_struct_sized(SimpleSizedStruct, nSize);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example 2 ===&lt;br /&gt;
This example shows the declaration for a simple sized struct using a pointer.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int nMoreJunk;&lt;br /&gt;
} SimpleSizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example 2 ===&lt;br /&gt;
This example shows the declaration of a sized struct containing a conformant array.&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#define SOME_BOUND 0&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int nSize;&lt;br /&gt;
    int nSomeJunk;&lt;br /&gt;
    int ary[SOME_BOUND];&lt;br /&gt;
} ConformantArraySizedStruct;&lt;br /&gt;
&lt;br /&gt;
extern void f(SimpleSizedStruct* s);&lt;br /&gt;
#pragma scl_struct_sized(f.s, nSize);&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* For additional information on scl_string, including constraints, refer to the section on scl_struct_sized in the [[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]].&lt;br /&gt;
&lt;br /&gt;
[[Category: SCL]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8127</id>
		<title>STRIDE 3.0.01xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8127"/>
		<updated>2008-10-16T00:06:01Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* Windows Applications using Windows Off-Target SDK */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Release Notes&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
This page documents the changes in STRIDE version 3.0.01xx (code name &#039;&#039;StoneSteps&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note that if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= What&#039;s New  =&lt;br /&gt;
&lt;br /&gt;
Based on customer feedback, in this release we have made significant performance improvements as well as many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Performance Improvements ==&lt;br /&gt;
&lt;br /&gt;
Specific improvements have been made in the following areas: &lt;br /&gt;
&lt;br /&gt;
*Database loading time has been improved &lt;br /&gt;
*Compile times are now shorter &lt;br /&gt;
*Scripting operations involving function and message payloads now perform better, especially when arrays are involved &lt;br /&gt;
*Runtime performance has been improved by optimizing payload serialization and deserialization operations&lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
&lt;br /&gt;
=== SCL Wizard ===&lt;br /&gt;
&lt;br /&gt;
The SCL Wizard functionality in [[STRIDE Studio]] has been extended so that you can now use the tool to qualify message payloads as well as function payloads. &lt;br /&gt;
&lt;br /&gt;
In addition, the following types of qualifications can now be made: &lt;br /&gt;
&lt;br /&gt;
*For payloads that include function pointers, the SCL Wizard now supports qualifying the pointers as such and identifying candidate function values &lt;br /&gt;
*Type casts can now be specified on payload members&lt;br /&gt;
&lt;br /&gt;
=== Connection Management ===&lt;br /&gt;
&lt;br /&gt;
Connection management has been greatly simplified; software managing connection to the target system has been integrated into [[STRIDE Studio]] so that connections can be managed directly from there. (It is still possible to access connection management functionality without using Studio.) &lt;br /&gt;
&lt;br /&gt;
The Panel program is no longer used, and there is no longer a requirement to load the database to communicate with a remote target. &lt;br /&gt;
&lt;br /&gt;
==== Transport Properties ====&lt;br /&gt;
&lt;br /&gt;
All transport properties can now be accessed via scripts. A new transport scripting model makes this possible.&lt;br /&gt;
&lt;br /&gt;
=== STRIDE Studio Test Runner Improvements ===&lt;br /&gt;
&lt;br /&gt;
The test runner in [[STRIDE Studio]] has incorporated several functional and usability improvements. &lt;br /&gt;
&lt;br /&gt;
*Each runnable script and folder (Suite) in a workspace now has additional properties that allow you to optionally specify a handler script that will be executed in the case of an unhandled error (property OnError) or a timeout (property OnTimeout). A timeout value can be set for each folder.&lt;br /&gt;
&lt;br /&gt;
*Each runnable folder (Suite) in a workspace now has a property (OnRunConnect) that can instruct STRIDE Studio to automatically connect to a target system before the folder is executed.&lt;br /&gt;
&lt;br /&gt;
*The workspace now has a dynamic property (ExecutionState) that allows you to alter the order of script execution at runtime.&lt;br /&gt;
&lt;br /&gt;
=== New Frameworks Feature ===&lt;br /&gt;
&lt;br /&gt;
This version introduces [[Using Frameworks|Target Frameworks]], which provide customizable templates for workspace creation. The use of frameworks simplifies the use of STRIDE and ensures consistency across a development team. &lt;br /&gt;
&lt;br /&gt;
Several [[Provided Frameworks|reference frameworks]] are included in this release, supporting the following target environments: &lt;br /&gt;
&lt;br /&gt;
*[[Provided Frameworks#Windows|Windows]] &lt;br /&gt;
*[[Provided Frameworks#Linux|Linux]] &lt;br /&gt;
*[[Provided Frameworks#WinMobile|WinMobile]] &lt;br /&gt;
*[[Provided Frameworks#Generic|Generic]]&lt;br /&gt;
&lt;br /&gt;
[[Using Packages|Packages]] are also introduced. These provide a convenient way to encapsulate SCL-annotated source code and corresponding tests for a set of interfaces. &lt;br /&gt;
&lt;br /&gt;
=== Uploading Results to STRIDE Portal ===&lt;br /&gt;
&lt;br /&gt;
Uploading test results from STRIDE Reporter to STRIDE Portal has been integrated into STRIDE Studio. Portal&#039;s server information can be configured from Studio&#039;s workspace properties while uploading results to Portal can be enabled or disabled via workspace context menu. If enabled, after running the workspace, a script folder or a script file, results in Report file will automatically be uploaded to the configured server. &lt;br /&gt;
&lt;br /&gt;
== Build Tools  ==&lt;br /&gt;
&lt;br /&gt;
A set of new command line [[Build Tools]] has been implemented: &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Stride compiler&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride database binder&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride instrumentation generator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
These utilities has been ported for Windows and Linux. Using them would allow seamless integration with a &amp;quot;make&amp;quot; build environment.&lt;br /&gt;
&lt;br /&gt;
== Target-Based Testing  ==&lt;br /&gt;
&lt;br /&gt;
Target-based (xUnit-style) testing has been simplified. The new set of SCL pragmas [[Test Units]] can now be included in a source file to tell the compiler and IM generator to automatically create test harnessing code.&lt;br /&gt;
&lt;br /&gt;
The automation components STRIDE.testclass, STRIDE.testunit and STRIDE.testfunction are removed.&lt;br /&gt;
&lt;br /&gt;
== Runtime/PAL  ==&lt;br /&gt;
&lt;br /&gt;
Based on customer requirements, in this release we have made significant changes to [[Target_Integration#The STRIDE Runtime|STRIDE Runtime]] and [[Target_Integration#The Platform Abstraction Layer (PAL)|PAL]]. &lt;br /&gt;
&lt;br /&gt;
=== Multi-Process Targets  ===&lt;br /&gt;
&lt;br /&gt;
New routines and support have been added to Runtime and PAL to support multi-process targets. Changes include: implementation of memory management and shared memory, protecting using named Mutex objects, synchronization of multiple processors and multiple threads, and usage of current process and thread IDs.&lt;br /&gt;
&lt;br /&gt;
=== Logging (Optional)  ===&lt;br /&gt;
&lt;br /&gt;
Runtime and PAL use a logging routine that can optionally be implemented in PAL. &lt;br /&gt;
&lt;br /&gt;
== Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
A new [[Windows_Off-Target_SDK|SDK]] for implemention of Off-Target applications on Windows has been packaged. It contains a library (s2srWin.dll/lib) in which the Windows PAL, Runtime, and GRS and a set of utility scripts are prebuilt. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;s2shostapphrt&#039;&#039;&#039; library, a prebuilt verion of the Host Runtime, has been removed. Building Windows applications using the Host Runtime is not supported anymore. The &#039;&#039;&#039;s2shostapptrt&#039;&#039;&#039; library, a prebuilt version of the Target Runtime, has also been removed. &lt;br /&gt;
&lt;br /&gt;
If an upgrade is performed it is strongly recommended that the above mentioned &#039;&#039;&#039;s2shostapp*&#039;&#039;&#039; libraries and their public API header (hostapp.h) be manually removed.&lt;br /&gt;
&lt;br /&gt;
= Support Wiki =&lt;br /&gt;
&lt;br /&gt;
This support wiki http://support.s2technologies.com is introduced with this version. You can navigate here from your web browser, or directly from STRIDE Studio; a link is provided in the Help menu. &lt;br /&gt;
&lt;br /&gt;
== STRIDE Samples  ==&lt;br /&gt;
&lt;br /&gt;
We have created a set of [[Samples_Overview|sample workspaces]] to aid in the evaluation of STRIDE, or as a tool for learning how to apply STRIDE to different testing scenarios. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to STRIDE, or want to learn more about using the product, this is a great place to start.&lt;br /&gt;
&lt;br /&gt;
= Acquiring the Software =&lt;br /&gt;
&lt;br /&gt;
You can download the latest release from the S2 Technologies ftp site: ftp://ftp.s2technologies.com &lt;br /&gt;
&lt;br /&gt;
To run STRIDE you will need a license. If you are not yet a customer of S2 and would like to obtain an evaluation license, email [mailto:sales@s2technologies.com S2 Sales] or call our offices at &#039;&#039;&#039;760-635-2345&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
= Installing the Software  =&lt;br /&gt;
&lt;br /&gt;
To install STRIDE for the first time, or as an upgrade to an existing installation, please refer to [[Host Installation]]. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note: if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you are new to STRIDE, we recommend that you investigate the [[Samples_Overview|New STRIDE Samples]].&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;ascript&#039;&#039;&#039; API has been changed to be more robust: &lt;br /&gt;
**Certain deprecated methods have been eliminated. &lt;br /&gt;
**Some existing API methods have been modifed. &lt;br /&gt;
**The event model has been improved to allow greater script control.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Some scripts must be modified from previous versions of STRIDE to work successfully with 3.0.01xx. The necessary changes are detailed in the [[#Migration_to_3.0.01xx|Migration to 3.0.01xx]] section below. &lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;Panel&#039;&#039;&#039; object is no longer available to scripts; its functionality has been moved under the &#039;&#039;&#039;studio&#039;&#039;&#039; object model. You can access this new functionality as &#039;&#039;&#039;studio.Connection&#039;&#039;&#039;, however if you were formerly scripting the &#039;&#039;&#039;Panel&#039;&#039;&#039; object, you may find it is no longer necessary since: &lt;br /&gt;
**You can now configure your connection properties from within STRIDE Studio (from the menu select &#039;&#039;Tools/Target Connectivity&#039;&#039;) &lt;br /&gt;
**You can now set a workspace folder property to autoconnect upon execution&lt;br /&gt;
&lt;br /&gt;
*Zero is now allowed as the maximum size under certain circumstances in &#039;&#039;&#039;scl_string&#039;&#039;&#039; and &#039;&#039;&#039;scl_ptr_sized&#039;&#039;&#039;. Details of these circumstances are contained in the &#039;&#039;&#039;[[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]]&#039;&#039;&#039; document.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compiler.MicrosoftCompatibility&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Compiler.Compatibility&#039;&#039;&#039;. Valid values are &amp;quot;Generic&amp;quot; (generic mode), &amp;quot;Microsoft&amp;quot; (Microsoft compatibility), or &amp;quot;Gnu&amp;quot; (Gnu or Gcc compatibility).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compile()&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Build()&#039;&#039;&#039;. Also new methods, &#039;&#039;&#039;studio.Workspace.CleanBuild()&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.ReloadDatabase()&#039;&#039;&#039;, have been added.&lt;br /&gt;
&lt;br /&gt;
*A new property, &#039;&#039;&#039;Output&#039;&#039;&#039;, has been added off the studio object. This property outputs text to the Studio message tab, similar to how &#039;&#039;&#039;ascript.MessageBox()&#039;&#039;&#039; works for certain scripts. This property contains one method, &#039;&#039;&#039;PrintMessage(String msg)&#039;&#039;&#039;. You can see an example of its use [[Debugging Helps|here]].&lt;br /&gt;
&lt;br /&gt;
*A new settings group has been introduced - &#039;&#039;&#039;studio.Workspace.Settings.Build&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Intercept.Path&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Intercept.SourcePath&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.Intercept.HeaderPath&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Fixes  ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This section describes defects which have been corrected in STRIDE and the customer tracking number associated with them, if any, in brackets [].&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*[1055] Not able to specifiy uppercase include directory &lt;br /&gt;
*[1163] Certain cases of array of pointers to discriminated unions that were not handled correctly in the ascript object have been fixed. &lt;br /&gt;
*[1357] The ascript &#039;&#039;&#039;Call()&#039;&#039;&#039; method, when used with RspTimeoutPeriod, only returns True if a timeout has occurred. &lt;br /&gt;
*[1469] Global casting using &#039;&#039;&#039;scl_cast&#039;&#039;&#039; no longer causes an intercept module compile error. &lt;br /&gt;
*[1539] &#039;&#039;&#039;ascript&#039;&#039;&#039; no longer returns &amp;quot;undefined&amp;quot; when calling &#039;&#039;&#039;function.ReturnValue&#039;&#039;&#039; when the captured function returns an unqualified function pointer. &lt;br /&gt;
*[1543] IM source file locations added to studio UI and automation &lt;br /&gt;
*[1564] The Studio Add files dialog has been increased from 2K bytes to 100K bytes, to allow for more files to be selected at a time. &lt;br /&gt;
*[1586] Support for Variadic Macros &lt;br /&gt;
*[1597] EDGFront crash for scl_ptr_opaque &lt;br /&gt;
*[1600] Pre-processor treats constant 1 always as 8-bit &lt;br /&gt;
*[1605] Generated Perl script generates error when run in debugger &lt;br /&gt;
*The following statement in Runtime files &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; has been changed:&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args = 0;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;is now&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt; with no initializer. This makes it portable and able to compile under Linux. &lt;br /&gt;
*A macro that determines the existence of &#039;&#039;&#039;vsnprintf()&#039;&#039;&#039; has been updated in &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; in order to make it able to compile with GCC and other non-Microsoft compilers.&amp;lt;br&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; If you are using test functions and C++ test classes, you must be using compilers that support &#039;&#039;&#039;vsnprintf&#039;&#039;&#039; (variable argument lists), which is a standard in C99 and supported in C90. &lt;br /&gt;
*When tracing on a STID it&#039;s possible to display trace information for messages that aren&#039;t captured (i.e. the message&#039;s SMID is not known to STRIDE). A problem could occur when STRIDE attempted to interpret the payload of these messages. This has now been fixed; hex values only are now shown in the trace view for in this situation. &lt;br /&gt;
*Autosense was not working properly in the editor for message payloads. This has been fixed.&lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
=== TestUnits Collection  ===&lt;br /&gt;
&lt;br /&gt;
A new TestUnits collection has been implemented. All test interfaces (specified with [[SCL_Pragmas#Test_Units | Test Unit pragmas]]) will be listed there.&lt;br /&gt;
&lt;br /&gt;
=== Functions Collection  ===&lt;br /&gt;
&lt;br /&gt;
Interfaces specified with either the [[scl_test_class]] or [[scl_test_flist]] pragmas are not listed in the Functions collection anymore. &lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
=== Memory Management  ===&lt;br /&gt;
&lt;br /&gt;
To support multi-process target, memory management support for dynamic, configurable, and internal static memory has been implemented in Runtime. Runtime makes PAL calls to acquire memory segments and manages the memory according to runtime configurations set by user. In case of multi-process target is enabled, these memory will be shared among multiple applications, and PAL should implement shared memory. &lt;br /&gt;
&lt;br /&gt;
=== Protection using Mutex  ===&lt;br /&gt;
&lt;br /&gt;
Runtime now uses named mutex objects to protect critical data from multiple and simultaneous accesses by multiple threads and, in case of multi-process target is enabled, by multiple applications. Runtime makes PAL calls to obtain and control mutex objects. &lt;br /&gt;
&lt;br /&gt;
=== New Routines  ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Memory Management&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In case of multi-process target, recommended approach is to use &amp;lt;u&amp;gt;Memory-Mapped Files&amp;lt;/u&amp;gt; to implement memory segments. &lt;br /&gt;
&lt;br /&gt;
 palMemSegmentOpen() - Open/create memory segment &lt;br /&gt;
 palMemSegmentClose() - Close memory segment&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Named Mutexes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palMutexInit() - Initialize a mutex object&lt;br /&gt;
 palMutexDestroy() - Destroy a mutex object&lt;br /&gt;
 palMutexLock() - Lock a mutex object&lt;br /&gt;
 palMutexUnlock() - Unlock a mutex object&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Task Synchronization&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palGetThreadId() - Get current thread Id&lt;br /&gt;
 palGetProcessId() - Get current process Id&lt;br /&gt;
 palSleep() - Suspend the execution of the current thread&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Logging&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is optional. &lt;br /&gt;
&lt;br /&gt;
 palLog() - Logging utility&lt;br /&gt;
&lt;br /&gt;
=== Updated Routines  ===&lt;br /&gt;
&lt;br /&gt;
*Function signatures and functionalities of palWait() &amp;amp;amp; palNotify() have been updated.&lt;br /&gt;
&lt;br /&gt;
 palWait() - now takes in an in/out pointer for events notification&lt;br /&gt;
 palNotify() - mail box Id has been updated to notify any event including mail box Ids.&lt;br /&gt;
&lt;br /&gt;
*Function signatures of palMemAlloc() &amp;amp;amp; palMemFree() have been updated.&lt;br /&gt;
&lt;br /&gt;
=== Removed Routines  ===&lt;br /&gt;
&lt;br /&gt;
 palProtect&lt;br /&gt;
 palUnprotect&lt;br /&gt;
 palCriticalErr&lt;br /&gt;
&lt;br /&gt;
=== Removed Modules  ===&lt;br /&gt;
&lt;br /&gt;
 S2Mem - The memory module provided as part of PAL has been removed. If a native &lt;br /&gt;
         operating system does not support dynamic memory, the Runtime&#039;s memory &lt;br /&gt;
         management module &#039;&#039;srMem&#039;&#039; can be used instead of &#039;&#039;S2Mem&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
&lt;br /&gt;
*STRIDE Host Release &#039;&#039;&#039;3.0.01xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;. &lt;br /&gt;
*In order to eliminate redundancy and promote an object-oriented design, &amp;quot;Member Methods&amp;quot; have been removed from srTest; only &amp;quot;Member Objects&amp;quot; exist now in srTest. In addition, accessing the functionality of Member Objects in this way is similar to accessing scripting objects through the STRIDE Reporter object model. For a detailed explanation, refer to [[Test_Units#C.2B.2B_Test_Classes|this article]] on the STRIDE Support Wiki. &lt;br /&gt;
*A new routine, &#039;&#039;&#039;srInit()&#039;&#039;&#039;, replaces deprecated &#039;&#039;&#039;srInitialize()&#039;&#039;&#039;. Now the target will not be able to set an auto-connect with timeout. &lt;br /&gt;
*The &#039;&#039;&#039;scl_tp&#039;&#039;&#039; and &#039;&#039;&#039;scl_tp_format&#039;&#039;&#039; pragmas have been deprecated. The new pragmas are &#039;&#039;&#039;scl_tracepoint&#039;&#039;&#039; and &#039;&#039;&#039;scl_tracepoint_format&#039;&#039;&#039;. &lt;br /&gt;
*The default runtime configuration in srcfg.h now has fragmentation turned on. The srCFG_MAX_TRANSPORT_UNIT is set to 2048. &lt;br /&gt;
*Fixed warnings for parameter name differences in function declarations and definitions for srSubscribe(), srTracePoint(), and srQuerySMID(). &lt;br /&gt;
*Removed unnecessary/extra response to srCONNECT_CLOSE_T_SMID message. &lt;br /&gt;
*The Runtime now checks for the connection before responding with a &amp;quot;Pong&amp;quot; upon receiving a &amp;quot;Ping.&amp;quot; &lt;br /&gt;
*Introduced 40 additional system trace points to better describe internal errors. &lt;br /&gt;
*Reporting of the error srERR_SUB_NONE has been suppressed so that it no longer generates a target trace error. &lt;br /&gt;
*Trace views now always display srTraceStr() with reserved STID (srSTID_RESERVED) regardless of trace filter settings. &lt;br /&gt;
*srPtrSetupChild() now accepts NULL for handle (out pointer - pwHandle). &lt;br /&gt;
*Added a new Runtime Test Services (RTS) API &#039;&#039;&#039;srTestCaseSetStatusEx()&#039;&#039;&#039;, which enables the providing of the actual return value of a numeric test method in the case of failure. &lt;br /&gt;
*Added two new public APIs - &amp;quot;Printing&amp;quot; APIs to display messages on Trace Views without having to specify a STID or a trace level and to set any trace filters on Trace Views. These routines support formatted strings with variable arguments. The &#039;&#039;&#039;srPrintInfo()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and Level=3. The &#039;&#039;&#039;srPrintError()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and the Level=1. &#039;&#039;&#039;Warning:&#039;&#039;&#039; These new APIs use vsnprintf() routine to process variable arguments. The vsnprintf() became a standard in C99 and is supported in C90. &lt;br /&gt;
*To support multi-process target, significant changes have been made to runtime. &lt;br /&gt;
*A new public routine, srUninit(), has been added to sr.h &amp;amp;amp; srapi.c. &lt;br /&gt;
* A new public routine for Runtime Thread exit point, srThreadUninit(), has been added to sr.h &amp;amp;amp; srthread.c. &lt;br /&gt;
*A new module, srMem, for Memory Management has been added. Its new routines, _srMem_Allocate() &amp;amp;amp; _srMem_Free(), will be used in PAL&#039;s palMemAlloc() &amp;amp;amp; palMemFree() in case of multi-process target is enabled. &lt;br /&gt;
*Calls to palProtect() &amp;amp;amp; palUnprotect() have been replaced by new routines _srProtect() &amp;amp;amp; _srUnprotect(), in which the implementation uses its own mutex object that calls PAL&#039;s mutex routines. &lt;br /&gt;
*In target Test Classes and Test Functions, added capability to specify the comment label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
* Fixed a potential data abort issue when executing delegate code in the IM prior to Runtime being initialized.&lt;br /&gt;
* Runtime Test Services APIs are now thread safe. &lt;br /&gt;
* Fixed cancelation of remote boadcast subcribtion goes in an infinite loop.&lt;br /&gt;
* Fixed Runtime resource abuse when sending lots of broadcast messages. &lt;br /&gt;
* Added partial check for message payload corectness.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapi.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srconn.h&lt;br /&gt;
 srerr.c&lt;br /&gt;
 srib.c&lt;br /&gt;
 srib.h&lt;br /&gt;
 sribctrl.c&lt;br /&gt;
 sribtr.c&lt;br /&gt;
 sribtr.h&lt;br /&gt;
 srmsgmar.c&lt;br /&gt;
 srmsgptr.c&lt;br /&gt;
 srmsgptr.h&lt;br /&gt;
 srmsgque.c&lt;br /&gt;
 srmsgque.h&lt;br /&gt;
 srmsgrt.c&lt;br /&gt;
 srmsgrt.h&lt;br /&gt;
 srmsgsub.c&lt;br /&gt;
 srmsgsub.h&lt;br /&gt;
 srstid.c&lt;br /&gt;
 srstid.h&lt;br /&gt;
 srsuid.c&lt;br /&gt;
 srsuid.h&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
 srtestutil.c&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srthread.c&lt;br /&gt;
 srthread.h&lt;br /&gt;
 srtime.c&lt;br /&gt;
 srtime.h&lt;br /&gt;
 srtp.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been added:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srmem.c&lt;br /&gt;
 srmem.h&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.01xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
Any use of test classes through the Functions collection, like: &lt;br /&gt;
&lt;br /&gt;
  $main::ascript-&amp;amp;gt;Functions-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;User-&amp;amp;gt;Call(); &lt;br /&gt;
&lt;br /&gt;
should be converted to use the new TestUnits collection: &lt;br /&gt;
&lt;br /&gt;
  $main::ascript-&amp;amp;gt;TestUnits-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;Run(); &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
=== API Changes  ===&lt;br /&gt;
&lt;br /&gt;
*The Support Wiki pages now contain reference help for [[AutoScript#ascript|&#039;&#039;AutoScript&#039;&#039;]]. &lt;br /&gt;
*All synchronous method calls now throw exceptions in order to indicate error conditions rather than have error conditions encoded in return values. &lt;br /&gt;
*Asychronous method calls never throw exceptions to indicate error conditions. Instead, error conditions are delivered as a new Error object that is returned to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039;. (Asynchronous methods are &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;) &lt;br /&gt;
*If &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; times out, an Error object is returned. Previously NULL was returned in this case. &lt;br /&gt;
*All objects returned by &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; have &#039;&#039;&#039;Type&#039;&#039;&#039; and &#039;&#039;&#039;Name&#039;&#039;&#039; properties. When the &#039;&#039;&#039;Type&#039;&#039;&#039; is “Error”, the Error object has additional properties that contain further details about the error. &lt;br /&gt;
*All existing script syntax for designation of message payloads has been deprecated. A new syntax that allows for greater expression has been adopted. Details can be found [[Updated Message Payload Syntax|here]]. There are no syntax changes to function payloads. &lt;br /&gt;
*The signature for &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; has been changed. Successful calls to &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; now fully initialize the object.&lt;br /&gt;
&lt;br /&gt;
=== End-Of-Life Methods and Properties  ===&lt;br /&gt;
&lt;br /&gt;
This release marks the End-Of-Life (EOL) for the listed methods and properties. A call to any of these methods or an access to any of these properties will now result in a not-implemented exception in the script making the call or access. &lt;br /&gt;
&lt;br /&gt;
*ascript.Quit() &lt;br /&gt;
*ascript.Interfaces &lt;br /&gt;
*ascript.NamedEvents &lt;br /&gt;
*ascript.WaitForEventWithTimeout &lt;br /&gt;
*ascript.RspTimeoutNotifyEnabled &lt;br /&gt;
*ascript.CreateTimer() &lt;br /&gt;
*ascript.DestroyTimer() &lt;br /&gt;
*ascript.WaitTimeoutNotifyEnabled &lt;br /&gt;
*ascript.Compare_As_C_Values() &lt;br /&gt;
*ascript.AsyncErrorNotifyEnabled &lt;br /&gt;
*ascript.Function.Item().User/Owner.SMID&lt;br /&gt;
&lt;br /&gt;
=== Recommended Steps for Migration From a Previous Version  ===&lt;br /&gt;
&lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; in all scripts. Previous logic to test for null indicating timeouts must be modified. &#039;&#039;&#039;WaitForEvent()&#039;&#039;&#039; now always returns an object, in the case of a timeout (or other error) an Error object is returned. &lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.Quit&#039;&#039;&#039; in all scripts. Modify the logic as necessary to exit the script by other means in place of the original &#039;&#039;&#039;Quit()&#039;&#039;&#039; call. &lt;br /&gt;
*Search for all asynchronous method calls (Asynchronous calls are limited to &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;). Modify the logic as necessary to call &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; if errors (including timeout error) should be detected. &lt;br /&gt;
*If you have scripts that explicitly instantiate an &#039;&#039;&#039;ascript&#039;&#039;&#039; object (i.e. they create an object using the &#039;&#039;&#039;&amp;quot;STRIDE.ascript&amp;quot;&#039;&#039;&#039; PROGID), search for all occurrences and modify the subsequent call to &#039;&#039;&#039;ascript.Initialize()&#039;&#039;&#039; to pass the new parameter set. &lt;br /&gt;
*Search for all EOL&#039;d methods and properties. Each can be replaced by setting the appropriate timeout property and handling the timeout error object delivered by WaitForEvent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;Section1&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%; border-collapse: collapse;&amp;quot; class=&amp;quot;MsoTableGrid&amp;quot;&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1pt solid windowtext; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;EOL’d&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Method or Property&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&#039;&#039;&#039;Recommended Replacement&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Quit&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Refactor&amp;lt;/span&amp;gt; script logic to exit the script by other means. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Interfaces&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Functions&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Messages&amp;lt;/span&amp;gt; as appropriate. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.NamedEvents&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitForEventWithTimeout&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() after setting desired timeout using &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitTimeoutPeriod&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.RspTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.CreateTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Add&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.DestroyTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Remove&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Compare_As_C_Values&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.AsyncErrorNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Error notification from asynchronous calls is performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Function.Item&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SMID&amp;lt;/span&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Function.Item&amp;lt;/span&amp;gt;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SUID&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
Please refer to &#039;&#039;&#039;&#039;&#039;Platform Abstraction Layer (PAL) Specification&#039;&#039;&#039;&#039;&#039; for detailed information on new APIs. You may also refer to Linux implementation of PAL, which has been updated with new routines. &lt;br /&gt;
&lt;br /&gt;
*Implement new shared memory routines, palMemSegmentOpen() &amp;amp;amp; palMemSegmentClose(). In case of multi-process target, these routines should implement shared memory using memory-mapped files.&lt;br /&gt;
&lt;br /&gt;
*Runtime now can manage dynamic, configurable, and internal static memory. In case of multi-process target, update palMemAlloc() to simply call _srMem_Allocate() and palMemFree() to simply call _srMem_Free(). In case of single-process target, you can simply allocate dynamic memory according to your Operating System. If you are upgrading, you can simply leave the current implementation as it is.&lt;br /&gt;
&lt;br /&gt;
*Implement new mutex routines, palMutexInit(), palMutexDestroy(), palMutexLock() &amp;amp;amp; palMutexUnlock, to handle any named mutex objects. It is recommended to implement a separate code for shared memory case if it is necessary.&lt;br /&gt;
&lt;br /&gt;
*Remove old routines palProtect(), palUnprotect() and palCriticalErr().&lt;br /&gt;
&lt;br /&gt;
*Implement new routines palGetThreadId() and palGetProcessId().&lt;br /&gt;
&lt;br /&gt;
*Implement new routine palSleep().&lt;br /&gt;
&lt;br /&gt;
*Update synchronization routines, palCreateNID(), palDeleteNID(), palWait() &amp;amp;amp; palNotify(), to support event notifications and in case of multi-process target is enabled, sharing of the synchronization objects among multiple processors.&lt;br /&gt;
&lt;br /&gt;
*If your PAL uses &#039;&#039;S2Mem&#039;&#039; routines for dynamic memory, you should use new Runtime module &#039;&#039;srMem&#039;&#039;. Update palMemAlloc() to call _srMem_Allocate() and palMemFree() to call _srMem_Free().&lt;br /&gt;
&lt;br /&gt;
*Optionally, implement new routine palLog() as a logging utility for PAL and Runtime.&lt;br /&gt;
&lt;br /&gt;
== Runtime  ==&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new memory management (srCFG_MEMORY_MANAGEMENT) and multi-process target (srCFG_MULTI_PROC_TARGET) settings. By default, memory management and multi-process target are disabled. If you enable multi-process target you also need to enable memory management and configure the sizes and the maximum number of memory blocks. New Runtime module &#039;&#039;srMem&#039;&#039; uses these configurations to allocate and manage memory segments.&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new target connection timeout setting (srCFG_CONNECTION_TIMEOUT).&lt;br /&gt;
&lt;br /&gt;
*If target Test Classes and Test Functions are used, change the signature to include test label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
&lt;br /&gt;
== Windows Applications using Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
*The new &#039;&#039;&#039;s2srwin.lib&#039;&#039;&#039; has public API, published in a header srwin.h, containing the following set of routines:&lt;br /&gt;
&lt;br /&gt;
 srWin_SetMaster()     - Sets the application as the master and initializes the Stride Runtime thread. &lt;br /&gt;
                         In a multi-process environment only one application should make this call.&lt;br /&gt;
 srWin_AddThread()     - Adds additional message processing threads to the application.&lt;br /&gt;
 srWin_Run()           - Starts the processing and will not return until it has been signaled via &lt;br /&gt;
                         keyboard key or CTRL-C.&lt;br /&gt;
 srWin_SetPortTCP()    - Overrides the TCP port number (default: 8000) to which the application will &lt;br /&gt;
                         bind for the purpose of accepting connections.&lt;br /&gt;
 srWin_SetPortSerial() - Overrides the COM port number (default: 1) to which the application will bind &lt;br /&gt;
                         for the purpose of accepting connections.&lt;br /&gt;
&lt;br /&gt;
*Existing Host Apps developed against the old hostapphrt and hostapptrt libraries should be updated to as follows: &lt;br /&gt;
**replace the include of hostapp.h with include of srwin.h &lt;br /&gt;
**replace all calls to HostAppXXX() with srWin_XXX() &lt;br /&gt;
**call srWin_SetMaster() to start the runtime thread, srThread, before calling srWin_Run().&amp;lt;br&amp;gt;Within a multi-process target, only one process (the master) calls this routine.&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;a&amp;quot; ==&lt;br /&gt;
* Linux version of the STRIDE [[Build Tools]] is officially introduced.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;b&amp;quot; ==&lt;br /&gt;
* Relaxed [[scl_cast]]() pragma to allow cast from any integral ptr to union of ptrs&lt;br /&gt;
* Fixed compile warnings in Linux PAL.&lt;br /&gt;
* Fixed issue in instrumentation of [[Test Units]].&lt;br /&gt;
* Fixed issue with UNC paths.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0102 ==&lt;br /&gt;
* Implemented new licensing scheme. Existing licenses will not work anymore and need to be reissued. Old and new licenses could co-exist at the same location.&lt;br /&gt;
* The syntax of [[scl_ptr]] and [[scl_ptr_sized]] pragmas has changed. Now it is required to quote the direction and usage attributes. See this [[Handling_of_pointer_attribute_tokens|page]] for details.&lt;br /&gt;
* [[Test_Units#Runtime_Test_Services|Runtime Test Services]] now support adding annotations per test suite.&lt;br /&gt;
* A complete set of [[Samples]] has been implemented.&lt;br /&gt;
* Fixed several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Fixed several minor issues in [[AutoScript]]. &lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0102&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039; and &#039;&#039;&#039;3.01&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8126</id>
		<title>STRIDE 3.0.01xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8126"/>
		<updated>2008-10-16T00:05:43Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* Windows Applications using Windows Off-Target SDK */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Release Notes&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
This page documents the changes in STRIDE version 3.0.01xx (code name &#039;&#039;StoneSteps&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note that if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= What&#039;s New  =&lt;br /&gt;
&lt;br /&gt;
Based on customer feedback, in this release we have made significant performance improvements as well as many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Performance Improvements ==&lt;br /&gt;
&lt;br /&gt;
Specific improvements have been made in the following areas: &lt;br /&gt;
&lt;br /&gt;
*Database loading time has been improved &lt;br /&gt;
*Compile times are now shorter &lt;br /&gt;
*Scripting operations involving function and message payloads now perform better, especially when arrays are involved &lt;br /&gt;
*Runtime performance has been improved by optimizing payload serialization and deserialization operations&lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
&lt;br /&gt;
=== SCL Wizard ===&lt;br /&gt;
&lt;br /&gt;
The SCL Wizard functionality in [[STRIDE Studio]] has been extended so that you can now use the tool to qualify message payloads as well as function payloads. &lt;br /&gt;
&lt;br /&gt;
In addition, the following types of qualifications can now be made: &lt;br /&gt;
&lt;br /&gt;
*For payloads that include function pointers, the SCL Wizard now supports qualifying the pointers as such and identifying candidate function values &lt;br /&gt;
*Type casts can now be specified on payload members&lt;br /&gt;
&lt;br /&gt;
=== Connection Management ===&lt;br /&gt;
&lt;br /&gt;
Connection management has been greatly simplified; software managing connection to the target system has been integrated into [[STRIDE Studio]] so that connections can be managed directly from there. (It is still possible to access connection management functionality without using Studio.) &lt;br /&gt;
&lt;br /&gt;
The Panel program is no longer used, and there is no longer a requirement to load the database to communicate with a remote target. &lt;br /&gt;
&lt;br /&gt;
==== Transport Properties ====&lt;br /&gt;
&lt;br /&gt;
All transport properties can now be accessed via scripts. A new transport scripting model makes this possible.&lt;br /&gt;
&lt;br /&gt;
=== STRIDE Studio Test Runner Improvements ===&lt;br /&gt;
&lt;br /&gt;
The test runner in [[STRIDE Studio]] has incorporated several functional and usability improvements. &lt;br /&gt;
&lt;br /&gt;
*Each runnable script and folder (Suite) in a workspace now has additional properties that allow you to optionally specify a handler script that will be executed in the case of an unhandled error (property OnError) or a timeout (property OnTimeout). A timeout value can be set for each folder.&lt;br /&gt;
&lt;br /&gt;
*Each runnable folder (Suite) in a workspace now has a property (OnRunConnect) that can instruct STRIDE Studio to automatically connect to a target system before the folder is executed.&lt;br /&gt;
&lt;br /&gt;
*The workspace now has a dynamic property (ExecutionState) that allows you to alter the order of script execution at runtime.&lt;br /&gt;
&lt;br /&gt;
=== New Frameworks Feature ===&lt;br /&gt;
&lt;br /&gt;
This version introduces [[Using Frameworks|Target Frameworks]], which provide customizable templates for workspace creation. The use of frameworks simplifies the use of STRIDE and ensures consistency across a development team. &lt;br /&gt;
&lt;br /&gt;
Several [[Provided Frameworks|reference frameworks]] are included in this release, supporting the following target environments: &lt;br /&gt;
&lt;br /&gt;
*[[Provided Frameworks#Windows|Windows]] &lt;br /&gt;
*[[Provided Frameworks#Linux|Linux]] &lt;br /&gt;
*[[Provided Frameworks#WinMobile|WinMobile]] &lt;br /&gt;
*[[Provided Frameworks#Generic|Generic]]&lt;br /&gt;
&lt;br /&gt;
[[Using Packages|Packages]] are also introduced. These provide a convenient way to encapsulate SCL-annotated source code and corresponding tests for a set of interfaces. &lt;br /&gt;
&lt;br /&gt;
=== Uploading Results to STRIDE Portal ===&lt;br /&gt;
&lt;br /&gt;
Uploading test results from STRIDE Reporter to STRIDE Portal has been integrated into STRIDE Studio. Portal&#039;s server information can be configured from Studio&#039;s workspace properties while uploading results to Portal can be enabled or disabled via workspace context menu. If enabled, after running the workspace, a script folder or a script file, results in Report file will automatically be uploaded to the configured server. &lt;br /&gt;
&lt;br /&gt;
== Build Tools  ==&lt;br /&gt;
&lt;br /&gt;
A set of new command line [[Build Tools]] has been implemented: &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Stride compiler&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride database binder&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride instrumentation generator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
These utilities has been ported for Windows and Linux. Using them would allow seamless integration with a &amp;quot;make&amp;quot; build environment.&lt;br /&gt;
&lt;br /&gt;
== Target-Based Testing  ==&lt;br /&gt;
&lt;br /&gt;
Target-based (xUnit-style) testing has been simplified. The new set of SCL pragmas [[Test Units]] can now be included in a source file to tell the compiler and IM generator to automatically create test harnessing code.&lt;br /&gt;
&lt;br /&gt;
The automation components STRIDE.testclass, STRIDE.testunit and STRIDE.testfunction are removed.&lt;br /&gt;
&lt;br /&gt;
== Runtime/PAL  ==&lt;br /&gt;
&lt;br /&gt;
Based on customer requirements, in this release we have made significant changes to [[Target_Integration#The STRIDE Runtime|STRIDE Runtime]] and [[Target_Integration#The Platform Abstraction Layer (PAL)|PAL]]. &lt;br /&gt;
&lt;br /&gt;
=== Multi-Process Targets  ===&lt;br /&gt;
&lt;br /&gt;
New routines and support have been added to Runtime and PAL to support multi-process targets. Changes include: implementation of memory management and shared memory, protecting using named Mutex objects, synchronization of multiple processors and multiple threads, and usage of current process and thread IDs.&lt;br /&gt;
&lt;br /&gt;
=== Logging (Optional)  ===&lt;br /&gt;
&lt;br /&gt;
Runtime and PAL use a logging routine that can optionally be implemented in PAL. &lt;br /&gt;
&lt;br /&gt;
== Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
A new [[Windows_Off-Target_SDK|SDK]] for implemention of Off-Target applications on Windows has been packaged. It contains a library (s2srWin.dll/lib) in which the Windows PAL, Runtime, and GRS and a set of utility scripts are prebuilt. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;s2shostapphrt&#039;&#039;&#039; library, a prebuilt verion of the Host Runtime, has been removed. Building Windows applications using the Host Runtime is not supported anymore. The &#039;&#039;&#039;s2shostapptrt&#039;&#039;&#039; library, a prebuilt version of the Target Runtime, has also been removed. &lt;br /&gt;
&lt;br /&gt;
If an upgrade is performed it is strongly recommended that the above mentioned &#039;&#039;&#039;s2shostapp*&#039;&#039;&#039; libraries and their public API header (hostapp.h) be manually removed.&lt;br /&gt;
&lt;br /&gt;
= Support Wiki =&lt;br /&gt;
&lt;br /&gt;
This support wiki http://support.s2technologies.com is introduced with this version. You can navigate here from your web browser, or directly from STRIDE Studio; a link is provided in the Help menu. &lt;br /&gt;
&lt;br /&gt;
== STRIDE Samples  ==&lt;br /&gt;
&lt;br /&gt;
We have created a set of [[Samples_Overview|sample workspaces]] to aid in the evaluation of STRIDE, or as a tool for learning how to apply STRIDE to different testing scenarios. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to STRIDE, or want to learn more about using the product, this is a great place to start.&lt;br /&gt;
&lt;br /&gt;
= Acquiring the Software =&lt;br /&gt;
&lt;br /&gt;
You can download the latest release from the S2 Technologies ftp site: ftp://ftp.s2technologies.com &lt;br /&gt;
&lt;br /&gt;
To run STRIDE you will need a license. If you are not yet a customer of S2 and would like to obtain an evaluation license, email [mailto:sales@s2technologies.com S2 Sales] or call our offices at &#039;&#039;&#039;760-635-2345&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
= Installing the Software  =&lt;br /&gt;
&lt;br /&gt;
To install STRIDE for the first time, or as an upgrade to an existing installation, please refer to [[Host Installation]]. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note: if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you are new to STRIDE, we recommend that you investigate the [[Samples_Overview|New STRIDE Samples]].&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;ascript&#039;&#039;&#039; API has been changed to be more robust: &lt;br /&gt;
**Certain deprecated methods have been eliminated. &lt;br /&gt;
**Some existing API methods have been modifed. &lt;br /&gt;
**The event model has been improved to allow greater script control.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Some scripts must be modified from previous versions of STRIDE to work successfully with 3.0.01xx. The necessary changes are detailed in the [[#Migration_to_3.0.01xx|Migration to 3.0.01xx]] section below. &lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;Panel&#039;&#039;&#039; object is no longer available to scripts; its functionality has been moved under the &#039;&#039;&#039;studio&#039;&#039;&#039; object model. You can access this new functionality as &#039;&#039;&#039;studio.Connection&#039;&#039;&#039;, however if you were formerly scripting the &#039;&#039;&#039;Panel&#039;&#039;&#039; object, you may find it is no longer necessary since: &lt;br /&gt;
**You can now configure your connection properties from within STRIDE Studio (from the menu select &#039;&#039;Tools/Target Connectivity&#039;&#039;) &lt;br /&gt;
**You can now set a workspace folder property to autoconnect upon execution&lt;br /&gt;
&lt;br /&gt;
*Zero is now allowed as the maximum size under certain circumstances in &#039;&#039;&#039;scl_string&#039;&#039;&#039; and &#039;&#039;&#039;scl_ptr_sized&#039;&#039;&#039;. Details of these circumstances are contained in the &#039;&#039;&#039;[[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]]&#039;&#039;&#039; document.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compiler.MicrosoftCompatibility&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Compiler.Compatibility&#039;&#039;&#039;. Valid values are &amp;quot;Generic&amp;quot; (generic mode), &amp;quot;Microsoft&amp;quot; (Microsoft compatibility), or &amp;quot;Gnu&amp;quot; (Gnu or Gcc compatibility).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compile()&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Build()&#039;&#039;&#039;. Also new methods, &#039;&#039;&#039;studio.Workspace.CleanBuild()&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.ReloadDatabase()&#039;&#039;&#039;, have been added.&lt;br /&gt;
&lt;br /&gt;
*A new property, &#039;&#039;&#039;Output&#039;&#039;&#039;, has been added off the studio object. This property outputs text to the Studio message tab, similar to how &#039;&#039;&#039;ascript.MessageBox()&#039;&#039;&#039; works for certain scripts. This property contains one method, &#039;&#039;&#039;PrintMessage(String msg)&#039;&#039;&#039;. You can see an example of its use [[Debugging Helps|here]].&lt;br /&gt;
&lt;br /&gt;
*A new settings group has been introduced - &#039;&#039;&#039;studio.Workspace.Settings.Build&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Intercept.Path&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Intercept.SourcePath&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.Intercept.HeaderPath&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Fixes  ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This section describes defects which have been corrected in STRIDE and the customer tracking number associated with them, if any, in brackets [].&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*[1055] Not able to specifiy uppercase include directory &lt;br /&gt;
*[1163] Certain cases of array of pointers to discriminated unions that were not handled correctly in the ascript object have been fixed. &lt;br /&gt;
*[1357] The ascript &#039;&#039;&#039;Call()&#039;&#039;&#039; method, when used with RspTimeoutPeriod, only returns True if a timeout has occurred. &lt;br /&gt;
*[1469] Global casting using &#039;&#039;&#039;scl_cast&#039;&#039;&#039; no longer causes an intercept module compile error. &lt;br /&gt;
*[1539] &#039;&#039;&#039;ascript&#039;&#039;&#039; no longer returns &amp;quot;undefined&amp;quot; when calling &#039;&#039;&#039;function.ReturnValue&#039;&#039;&#039; when the captured function returns an unqualified function pointer. &lt;br /&gt;
*[1543] IM source file locations added to studio UI and automation &lt;br /&gt;
*[1564] The Studio Add files dialog has been increased from 2K bytes to 100K bytes, to allow for more files to be selected at a time. &lt;br /&gt;
*[1586] Support for Variadic Macros &lt;br /&gt;
*[1597] EDGFront crash for scl_ptr_opaque &lt;br /&gt;
*[1600] Pre-processor treats constant 1 always as 8-bit &lt;br /&gt;
*[1605] Generated Perl script generates error when run in debugger &lt;br /&gt;
*The following statement in Runtime files &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; has been changed:&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args = 0;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;is now&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt; with no initializer. This makes it portable and able to compile under Linux. &lt;br /&gt;
*A macro that determines the existence of &#039;&#039;&#039;vsnprintf()&#039;&#039;&#039; has been updated in &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; in order to make it able to compile with GCC and other non-Microsoft compilers.&amp;lt;br&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; If you are using test functions and C++ test classes, you must be using compilers that support &#039;&#039;&#039;vsnprintf&#039;&#039;&#039; (variable argument lists), which is a standard in C99 and supported in C90. &lt;br /&gt;
*When tracing on a STID it&#039;s possible to display trace information for messages that aren&#039;t captured (i.e. the message&#039;s SMID is not known to STRIDE). A problem could occur when STRIDE attempted to interpret the payload of these messages. This has now been fixed; hex values only are now shown in the trace view for in this situation. &lt;br /&gt;
*Autosense was not working properly in the editor for message payloads. This has been fixed.&lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
=== TestUnits Collection  ===&lt;br /&gt;
&lt;br /&gt;
A new TestUnits collection has been implemented. All test interfaces (specified with [[SCL_Pragmas#Test_Units | Test Unit pragmas]]) will be listed there.&lt;br /&gt;
&lt;br /&gt;
=== Functions Collection  ===&lt;br /&gt;
&lt;br /&gt;
Interfaces specified with either the [[scl_test_class]] or [[scl_test_flist]] pragmas are not listed in the Functions collection anymore. &lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
=== Memory Management  ===&lt;br /&gt;
&lt;br /&gt;
To support multi-process target, memory management support for dynamic, configurable, and internal static memory has been implemented in Runtime. Runtime makes PAL calls to acquire memory segments and manages the memory according to runtime configurations set by user. In case of multi-process target is enabled, these memory will be shared among multiple applications, and PAL should implement shared memory. &lt;br /&gt;
&lt;br /&gt;
=== Protection using Mutex  ===&lt;br /&gt;
&lt;br /&gt;
Runtime now uses named mutex objects to protect critical data from multiple and simultaneous accesses by multiple threads and, in case of multi-process target is enabled, by multiple applications. Runtime makes PAL calls to obtain and control mutex objects. &lt;br /&gt;
&lt;br /&gt;
=== New Routines  ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Memory Management&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In case of multi-process target, recommended approach is to use &amp;lt;u&amp;gt;Memory-Mapped Files&amp;lt;/u&amp;gt; to implement memory segments. &lt;br /&gt;
&lt;br /&gt;
 palMemSegmentOpen() - Open/create memory segment &lt;br /&gt;
 palMemSegmentClose() - Close memory segment&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Named Mutexes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palMutexInit() - Initialize a mutex object&lt;br /&gt;
 palMutexDestroy() - Destroy a mutex object&lt;br /&gt;
 palMutexLock() - Lock a mutex object&lt;br /&gt;
 palMutexUnlock() - Unlock a mutex object&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Task Synchronization&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palGetThreadId() - Get current thread Id&lt;br /&gt;
 palGetProcessId() - Get current process Id&lt;br /&gt;
 palSleep() - Suspend the execution of the current thread&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Logging&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is optional. &lt;br /&gt;
&lt;br /&gt;
 palLog() - Logging utility&lt;br /&gt;
&lt;br /&gt;
=== Updated Routines  ===&lt;br /&gt;
&lt;br /&gt;
*Function signatures and functionalities of palWait() &amp;amp;amp; palNotify() have been updated.&lt;br /&gt;
&lt;br /&gt;
 palWait() - now takes in an in/out pointer for events notification&lt;br /&gt;
 palNotify() - mail box Id has been updated to notify any event including mail box Ids.&lt;br /&gt;
&lt;br /&gt;
*Function signatures of palMemAlloc() &amp;amp;amp; palMemFree() have been updated.&lt;br /&gt;
&lt;br /&gt;
=== Removed Routines  ===&lt;br /&gt;
&lt;br /&gt;
 palProtect&lt;br /&gt;
 palUnprotect&lt;br /&gt;
 palCriticalErr&lt;br /&gt;
&lt;br /&gt;
=== Removed Modules  ===&lt;br /&gt;
&lt;br /&gt;
 S2Mem - The memory module provided as part of PAL has been removed. If a native &lt;br /&gt;
         operating system does not support dynamic memory, the Runtime&#039;s memory &lt;br /&gt;
         management module &#039;&#039;srMem&#039;&#039; can be used instead of &#039;&#039;S2Mem&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
&lt;br /&gt;
*STRIDE Host Release &#039;&#039;&#039;3.0.01xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;. &lt;br /&gt;
*In order to eliminate redundancy and promote an object-oriented design, &amp;quot;Member Methods&amp;quot; have been removed from srTest; only &amp;quot;Member Objects&amp;quot; exist now in srTest. In addition, accessing the functionality of Member Objects in this way is similar to accessing scripting objects through the STRIDE Reporter object model. For a detailed explanation, refer to [[Test_Units#C.2B.2B_Test_Classes|this article]] on the STRIDE Support Wiki. &lt;br /&gt;
*A new routine, &#039;&#039;&#039;srInit()&#039;&#039;&#039;, replaces deprecated &#039;&#039;&#039;srInitialize()&#039;&#039;&#039;. Now the target will not be able to set an auto-connect with timeout. &lt;br /&gt;
*The &#039;&#039;&#039;scl_tp&#039;&#039;&#039; and &#039;&#039;&#039;scl_tp_format&#039;&#039;&#039; pragmas have been deprecated. The new pragmas are &#039;&#039;&#039;scl_tracepoint&#039;&#039;&#039; and &#039;&#039;&#039;scl_tracepoint_format&#039;&#039;&#039;. &lt;br /&gt;
*The default runtime configuration in srcfg.h now has fragmentation turned on. The srCFG_MAX_TRANSPORT_UNIT is set to 2048. &lt;br /&gt;
*Fixed warnings for parameter name differences in function declarations and definitions for srSubscribe(), srTracePoint(), and srQuerySMID(). &lt;br /&gt;
*Removed unnecessary/extra response to srCONNECT_CLOSE_T_SMID message. &lt;br /&gt;
*The Runtime now checks for the connection before responding with a &amp;quot;Pong&amp;quot; upon receiving a &amp;quot;Ping.&amp;quot; &lt;br /&gt;
*Introduced 40 additional system trace points to better describe internal errors. &lt;br /&gt;
*Reporting of the error srERR_SUB_NONE has been suppressed so that it no longer generates a target trace error. &lt;br /&gt;
*Trace views now always display srTraceStr() with reserved STID (srSTID_RESERVED) regardless of trace filter settings. &lt;br /&gt;
*srPtrSetupChild() now accepts NULL for handle (out pointer - pwHandle). &lt;br /&gt;
*Added a new Runtime Test Services (RTS) API &#039;&#039;&#039;srTestCaseSetStatusEx()&#039;&#039;&#039;, which enables the providing of the actual return value of a numeric test method in the case of failure. &lt;br /&gt;
*Added two new public APIs - &amp;quot;Printing&amp;quot; APIs to display messages on Trace Views without having to specify a STID or a trace level and to set any trace filters on Trace Views. These routines support formatted strings with variable arguments. The &#039;&#039;&#039;srPrintInfo()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and Level=3. The &#039;&#039;&#039;srPrintError()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and the Level=1. &#039;&#039;&#039;Warning:&#039;&#039;&#039; These new APIs use vsnprintf() routine to process variable arguments. The vsnprintf() became a standard in C99 and is supported in C90. &lt;br /&gt;
*To support multi-process target, significant changes have been made to runtime. &lt;br /&gt;
*A new public routine, srUninit(), has been added to sr.h &amp;amp;amp; srapi.c. &lt;br /&gt;
* A new public routine for Runtime Thread exit point, srThreadUninit(), has been added to sr.h &amp;amp;amp; srthread.c. &lt;br /&gt;
*A new module, srMem, for Memory Management has been added. Its new routines, _srMem_Allocate() &amp;amp;amp; _srMem_Free(), will be used in PAL&#039;s palMemAlloc() &amp;amp;amp; palMemFree() in case of multi-process target is enabled. &lt;br /&gt;
*Calls to palProtect() &amp;amp;amp; palUnprotect() have been replaced by new routines _srProtect() &amp;amp;amp; _srUnprotect(), in which the implementation uses its own mutex object that calls PAL&#039;s mutex routines. &lt;br /&gt;
*In target Test Classes and Test Functions, added capability to specify the comment label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
* Fixed a potential data abort issue when executing delegate code in the IM prior to Runtime being initialized.&lt;br /&gt;
* Runtime Test Services APIs are now thread safe. &lt;br /&gt;
* Fixed cancelation of remote boadcast subcribtion goes in an infinite loop.&lt;br /&gt;
* Fixed Runtime resource abuse when sending lots of broadcast messages. &lt;br /&gt;
* Added partial check for message payload corectness.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapi.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srconn.h&lt;br /&gt;
 srerr.c&lt;br /&gt;
 srib.c&lt;br /&gt;
 srib.h&lt;br /&gt;
 sribctrl.c&lt;br /&gt;
 sribtr.c&lt;br /&gt;
 sribtr.h&lt;br /&gt;
 srmsgmar.c&lt;br /&gt;
 srmsgptr.c&lt;br /&gt;
 srmsgptr.h&lt;br /&gt;
 srmsgque.c&lt;br /&gt;
 srmsgque.h&lt;br /&gt;
 srmsgrt.c&lt;br /&gt;
 srmsgrt.h&lt;br /&gt;
 srmsgsub.c&lt;br /&gt;
 srmsgsub.h&lt;br /&gt;
 srstid.c&lt;br /&gt;
 srstid.h&lt;br /&gt;
 srsuid.c&lt;br /&gt;
 srsuid.h&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
 srtestutil.c&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srthread.c&lt;br /&gt;
 srthread.h&lt;br /&gt;
 srtime.c&lt;br /&gt;
 srtime.h&lt;br /&gt;
 srtp.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been added:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srmem.c&lt;br /&gt;
 srmem.h&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.01xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
Any use of test classes through the Functions collection, like: &lt;br /&gt;
&lt;br /&gt;
  $main::ascript-&amp;amp;gt;Functions-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;User-&amp;amp;gt;Call(); &lt;br /&gt;
&lt;br /&gt;
should be converted to use the new TestUnits collection: &lt;br /&gt;
&lt;br /&gt;
  $main::ascript-&amp;amp;gt;TestUnits-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;Run(); &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
=== API Changes  ===&lt;br /&gt;
&lt;br /&gt;
*The Support Wiki pages now contain reference help for [[AutoScript#ascript|&#039;&#039;AutoScript&#039;&#039;]]. &lt;br /&gt;
*All synchronous method calls now throw exceptions in order to indicate error conditions rather than have error conditions encoded in return values. &lt;br /&gt;
*Asychronous method calls never throw exceptions to indicate error conditions. Instead, error conditions are delivered as a new Error object that is returned to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039;. (Asynchronous methods are &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;) &lt;br /&gt;
*If &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; times out, an Error object is returned. Previously NULL was returned in this case. &lt;br /&gt;
*All objects returned by &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; have &#039;&#039;&#039;Type&#039;&#039;&#039; and &#039;&#039;&#039;Name&#039;&#039;&#039; properties. When the &#039;&#039;&#039;Type&#039;&#039;&#039; is “Error”, the Error object has additional properties that contain further details about the error. &lt;br /&gt;
*All existing script syntax for designation of message payloads has been deprecated. A new syntax that allows for greater expression has been adopted. Details can be found [[Updated Message Payload Syntax|here]]. There are no syntax changes to function payloads. &lt;br /&gt;
*The signature for &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; has been changed. Successful calls to &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; now fully initialize the object.&lt;br /&gt;
&lt;br /&gt;
=== End-Of-Life Methods and Properties  ===&lt;br /&gt;
&lt;br /&gt;
This release marks the End-Of-Life (EOL) for the listed methods and properties. A call to any of these methods or an access to any of these properties will now result in a not-implemented exception in the script making the call or access. &lt;br /&gt;
&lt;br /&gt;
*ascript.Quit() &lt;br /&gt;
*ascript.Interfaces &lt;br /&gt;
*ascript.NamedEvents &lt;br /&gt;
*ascript.WaitForEventWithTimeout &lt;br /&gt;
*ascript.RspTimeoutNotifyEnabled &lt;br /&gt;
*ascript.CreateTimer() &lt;br /&gt;
*ascript.DestroyTimer() &lt;br /&gt;
*ascript.WaitTimeoutNotifyEnabled &lt;br /&gt;
*ascript.Compare_As_C_Values() &lt;br /&gt;
*ascript.AsyncErrorNotifyEnabled &lt;br /&gt;
*ascript.Function.Item().User/Owner.SMID&lt;br /&gt;
&lt;br /&gt;
=== Recommended Steps for Migration From a Previous Version  ===&lt;br /&gt;
&lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; in all scripts. Previous logic to test for null indicating timeouts must be modified. &#039;&#039;&#039;WaitForEvent()&#039;&#039;&#039; now always returns an object, in the case of a timeout (or other error) an Error object is returned. &lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.Quit&#039;&#039;&#039; in all scripts. Modify the logic as necessary to exit the script by other means in place of the original &#039;&#039;&#039;Quit()&#039;&#039;&#039; call. &lt;br /&gt;
*Search for all asynchronous method calls (Asynchronous calls are limited to &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;). Modify the logic as necessary to call &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; if errors (including timeout error) should be detected. &lt;br /&gt;
*If you have scripts that explicitly instantiate an &#039;&#039;&#039;ascript&#039;&#039;&#039; object (i.e. they create an object using the &#039;&#039;&#039;&amp;quot;STRIDE.ascript&amp;quot;&#039;&#039;&#039; PROGID), search for all occurrences and modify the subsequent call to &#039;&#039;&#039;ascript.Initialize()&#039;&#039;&#039; to pass the new parameter set. &lt;br /&gt;
*Search for all EOL&#039;d methods and properties. Each can be replaced by setting the appropriate timeout property and handling the timeout error object delivered by WaitForEvent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;Section1&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%; border-collapse: collapse;&amp;quot; class=&amp;quot;MsoTableGrid&amp;quot;&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1pt solid windowtext; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;EOL’d&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Method or Property&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&#039;&#039;&#039;Recommended Replacement&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Quit&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Refactor&amp;lt;/span&amp;gt; script logic to exit the script by other means. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Interfaces&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Functions&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Messages&amp;lt;/span&amp;gt; as appropriate. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.NamedEvents&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitForEventWithTimeout&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() after setting desired timeout using &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitTimeoutPeriod&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.RspTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.CreateTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Add&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.DestroyTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Remove&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Compare_As_C_Values&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.AsyncErrorNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Error notification from asynchronous calls is performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Function.Item&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SMID&amp;lt;/span&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Function.Item&amp;lt;/span&amp;gt;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SUID&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
Please refer to &#039;&#039;&#039;&#039;&#039;Platform Abstraction Layer (PAL) Specification&#039;&#039;&#039;&#039;&#039; for detailed information on new APIs. You may also refer to Linux implementation of PAL, which has been updated with new routines. &lt;br /&gt;
&lt;br /&gt;
*Implement new shared memory routines, palMemSegmentOpen() &amp;amp;amp; palMemSegmentClose(). In case of multi-process target, these routines should implement shared memory using memory-mapped files.&lt;br /&gt;
&lt;br /&gt;
*Runtime now can manage dynamic, configurable, and internal static memory. In case of multi-process target, update palMemAlloc() to simply call _srMem_Allocate() and palMemFree() to simply call _srMem_Free(). In case of single-process target, you can simply allocate dynamic memory according to your Operating System. If you are upgrading, you can simply leave the current implementation as it is.&lt;br /&gt;
&lt;br /&gt;
*Implement new mutex routines, palMutexInit(), palMutexDestroy(), palMutexLock() &amp;amp;amp; palMutexUnlock, to handle any named mutex objects. It is recommended to implement a separate code for shared memory case if it is necessary.&lt;br /&gt;
&lt;br /&gt;
*Remove old routines palProtect(), palUnprotect() and palCriticalErr().&lt;br /&gt;
&lt;br /&gt;
*Implement new routines palGetThreadId() and palGetProcessId().&lt;br /&gt;
&lt;br /&gt;
*Implement new routine palSleep().&lt;br /&gt;
&lt;br /&gt;
*Update synchronization routines, palCreateNID(), palDeleteNID(), palWait() &amp;amp;amp; palNotify(), to support event notifications and in case of multi-process target is enabled, sharing of the synchronization objects among multiple processors.&lt;br /&gt;
&lt;br /&gt;
*If your PAL uses &#039;&#039;S2Mem&#039;&#039; routines for dynamic memory, you should use new Runtime module &#039;&#039;srMem&#039;&#039;. Update palMemAlloc() to call _srMem_Allocate() and palMemFree() to call _srMem_Free().&lt;br /&gt;
&lt;br /&gt;
*Optionally, implement new routine palLog() as a logging utility for PAL and Runtime.&lt;br /&gt;
&lt;br /&gt;
== Runtime  ==&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new memory management (srCFG_MEMORY_MANAGEMENT) and multi-process target (srCFG_MULTI_PROC_TARGET) settings. By default, memory management and multi-process target are disabled. If you enable multi-process target you also need to enable memory management and configure the sizes and the maximum number of memory blocks. New Runtime module &#039;&#039;srMem&#039;&#039; uses these configurations to allocate and manage memory segments.&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new target connection timeout setting (srCFG_CONNECTION_TIMEOUT).&lt;br /&gt;
&lt;br /&gt;
*If target Test Classes and Test Functions are used, change the signature to include test label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
&lt;br /&gt;
== Windows Applications using Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
*The new &#039;&#039;&#039;s2srwin.lib&#039;&#039;&#039; has public API, published in a header srwin.h, containing the following set of routines:&lt;br /&gt;
&lt;br /&gt;
 srWin_SetMaster()     - Sets the application as the master and initializes the Stride Runtime thread. &lt;br /&gt;
                         In a multi-process environment only one application should make this call.&lt;br /&gt;
 srWin_AddThread()     - Adds additional message processing threads to the application.&lt;br /&gt;
 srWin_Run()           - Starts the processing and will not return until it has been signaled via &lt;br /&gt;
                         keyboard key or CTRL-C.&lt;br /&gt;
 srWin_SetPortTCP()    - Overrides the TCP port number (default: 8000) to which the application will &lt;br /&gt;
                         bind for the purpose of accepting connections.&lt;br /&gt;
 srWin_SetPortSerial() - Overrides the COM port number (default: 1) to which the application will bind &lt;br /&gt;
                         for the purpose of accepting connections.&lt;br /&gt;
&lt;br /&gt;
*Existing Host Apps developed against the old hostapphrt and hostapptrt libraries should be updated to as follows: &lt;br /&gt;
**replace the include of hostapp.h with include of srwin.h &lt;br /&gt;
**replace all calls to HostAppXXX() with srWin_XXX() &lt;br /&gt;
**call srWin_SetMaster() to start the runtime thread, srThread, before calling srWin_Run(). &lt;br /&gt;
  Within a multi-process target, only one process (the master) calls this routine.&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;a&amp;quot; ==&lt;br /&gt;
* Linux version of the STRIDE [[Build Tools]] is officially introduced.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;b&amp;quot; ==&lt;br /&gt;
* Relaxed [[scl_cast]]() pragma to allow cast from any integral ptr to union of ptrs&lt;br /&gt;
* Fixed compile warnings in Linux PAL.&lt;br /&gt;
* Fixed issue in instrumentation of [[Test Units]].&lt;br /&gt;
* Fixed issue with UNC paths.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0102 ==&lt;br /&gt;
* Implemented new licensing scheme. Existing licenses will not work anymore and need to be reissued. Old and new licenses could co-exist at the same location.&lt;br /&gt;
* The syntax of [[scl_ptr]] and [[scl_ptr_sized]] pragmas has changed. Now it is required to quote the direction and usage attributes. See this [[Handling_of_pointer_attribute_tokens|page]] for details.&lt;br /&gt;
* [[Test_Units#Runtime_Test_Services|Runtime Test Services]] now support adding annotations per test suite.&lt;br /&gt;
* A complete set of [[Samples]] has been implemented.&lt;br /&gt;
* Fixed several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Fixed several minor issues in [[AutoScript]]. &lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0102&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039; and &#039;&#039;&#039;3.01&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8125</id>
		<title>STRIDE 3.0.01xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8125"/>
		<updated>2008-10-16T00:04:50Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* Windows Applications using Windows Off-Target SDK */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Release Notes&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
This page documents the changes in STRIDE version 3.0.01xx (code name &#039;&#039;StoneSteps&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note that if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= What&#039;s New  =&lt;br /&gt;
&lt;br /&gt;
Based on customer feedback, in this release we have made significant performance improvements as well as many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Performance Improvements ==&lt;br /&gt;
&lt;br /&gt;
Specific improvements have been made in the following areas: &lt;br /&gt;
&lt;br /&gt;
*Database loading time has been improved &lt;br /&gt;
*Compile times are now shorter &lt;br /&gt;
*Scripting operations involving function and message payloads now perform better, especially when arrays are involved &lt;br /&gt;
*Runtime performance has been improved by optimizing payload serialization and deserialization operations&lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
&lt;br /&gt;
=== SCL Wizard ===&lt;br /&gt;
&lt;br /&gt;
The SCL Wizard functionality in [[STRIDE Studio]] has been extended so that you can now use the tool to qualify message payloads as well as function payloads. &lt;br /&gt;
&lt;br /&gt;
In addition, the following types of qualifications can now be made: &lt;br /&gt;
&lt;br /&gt;
*For payloads that include function pointers, the SCL Wizard now supports qualifying the pointers as such and identifying candidate function values &lt;br /&gt;
*Type casts can now be specified on payload members&lt;br /&gt;
&lt;br /&gt;
=== Connection Management ===&lt;br /&gt;
&lt;br /&gt;
Connection management has been greatly simplified; software managing connection to the target system has been integrated into [[STRIDE Studio]] so that connections can be managed directly from there. (It is still possible to access connection management functionality without using Studio.) &lt;br /&gt;
&lt;br /&gt;
The Panel program is no longer used, and there is no longer a requirement to load the database to communicate with a remote target. &lt;br /&gt;
&lt;br /&gt;
==== Transport Properties ====&lt;br /&gt;
&lt;br /&gt;
All transport properties can now be accessed via scripts. A new transport scripting model makes this possible.&lt;br /&gt;
&lt;br /&gt;
=== STRIDE Studio Test Runner Improvements ===&lt;br /&gt;
&lt;br /&gt;
The test runner in [[STRIDE Studio]] has incorporated several functional and usability improvements. &lt;br /&gt;
&lt;br /&gt;
*Each runnable script and folder (Suite) in a workspace now has additional properties that allow you to optionally specify a handler script that will be executed in the case of an unhandled error (property OnError) or a timeout (property OnTimeout). A timeout value can be set for each folder.&lt;br /&gt;
&lt;br /&gt;
*Each runnable folder (Suite) in a workspace now has a property (OnRunConnect) that can instruct STRIDE Studio to automatically connect to a target system before the folder is executed.&lt;br /&gt;
&lt;br /&gt;
*The workspace now has a dynamic property (ExecutionState) that allows you to alter the order of script execution at runtime.&lt;br /&gt;
&lt;br /&gt;
=== New Frameworks Feature ===&lt;br /&gt;
&lt;br /&gt;
This version introduces [[Using Frameworks|Target Frameworks]], which provide customizable templates for workspace creation. The use of frameworks simplifies the use of STRIDE and ensures consistency across a development team. &lt;br /&gt;
&lt;br /&gt;
Several [[Provided Frameworks|reference frameworks]] are included in this release, supporting the following target environments: &lt;br /&gt;
&lt;br /&gt;
*[[Provided Frameworks#Windows|Windows]] &lt;br /&gt;
*[[Provided Frameworks#Linux|Linux]] &lt;br /&gt;
*[[Provided Frameworks#WinMobile|WinMobile]] &lt;br /&gt;
*[[Provided Frameworks#Generic|Generic]]&lt;br /&gt;
&lt;br /&gt;
[[Using Packages|Packages]] are also introduced. These provide a convenient way to encapsulate SCL-annotated source code and corresponding tests for a set of interfaces. &lt;br /&gt;
&lt;br /&gt;
=== Uploading Results to STRIDE Portal ===&lt;br /&gt;
&lt;br /&gt;
Uploading test results from STRIDE Reporter to STRIDE Portal has been integrated into STRIDE Studio. Portal&#039;s server information can be configured from Studio&#039;s workspace properties while uploading results to Portal can be enabled or disabled via workspace context menu. If enabled, after running the workspace, a script folder or a script file, results in Report file will automatically be uploaded to the configured server. &lt;br /&gt;
&lt;br /&gt;
== Build Tools  ==&lt;br /&gt;
&lt;br /&gt;
A set of new command line [[Build Tools]] has been implemented: &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Stride compiler&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride database binder&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride instrumentation generator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
These utilities has been ported for Windows and Linux. Using them would allow seamless integration with a &amp;quot;make&amp;quot; build environment.&lt;br /&gt;
&lt;br /&gt;
== Target-Based Testing  ==&lt;br /&gt;
&lt;br /&gt;
Target-based (xUnit-style) testing has been simplified. The new set of SCL pragmas [[Test Units]] can now be included in a source file to tell the compiler and IM generator to automatically create test harnessing code.&lt;br /&gt;
&lt;br /&gt;
The automation components STRIDE.testclass, STRIDE.testunit and STRIDE.testfunction are removed.&lt;br /&gt;
&lt;br /&gt;
== Runtime/PAL  ==&lt;br /&gt;
&lt;br /&gt;
Based on customer requirements, in this release we have made significant changes to [[Target_Integration#The STRIDE Runtime|STRIDE Runtime]] and [[Target_Integration#The Platform Abstraction Layer (PAL)|PAL]]. &lt;br /&gt;
&lt;br /&gt;
=== Multi-Process Targets  ===&lt;br /&gt;
&lt;br /&gt;
New routines and support have been added to Runtime and PAL to support multi-process targets. Changes include: implementation of memory management and shared memory, protecting using named Mutex objects, synchronization of multiple processors and multiple threads, and usage of current process and thread IDs.&lt;br /&gt;
&lt;br /&gt;
=== Logging (Optional)  ===&lt;br /&gt;
&lt;br /&gt;
Runtime and PAL use a logging routine that can optionally be implemented in PAL. &lt;br /&gt;
&lt;br /&gt;
== Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
A new [[Windows_Off-Target_SDK|SDK]] for implemention of Off-Target applications on Windows has been packaged. It contains a library (s2srWin.dll/lib) in which the Windows PAL, Runtime, and GRS and a set of utility scripts are prebuilt. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;s2shostapphrt&#039;&#039;&#039; library, a prebuilt verion of the Host Runtime, has been removed. Building Windows applications using the Host Runtime is not supported anymore. The &#039;&#039;&#039;s2shostapptrt&#039;&#039;&#039; library, a prebuilt version of the Target Runtime, has also been removed. &lt;br /&gt;
&lt;br /&gt;
If an upgrade is performed it is strongly recommended that the above mentioned &#039;&#039;&#039;s2shostapp*&#039;&#039;&#039; libraries and their public API header (hostapp.h) be manually removed.&lt;br /&gt;
&lt;br /&gt;
= Support Wiki =&lt;br /&gt;
&lt;br /&gt;
This support wiki http://support.s2technologies.com is introduced with this version. You can navigate here from your web browser, or directly from STRIDE Studio; a link is provided in the Help menu. &lt;br /&gt;
&lt;br /&gt;
== STRIDE Samples  ==&lt;br /&gt;
&lt;br /&gt;
We have created a set of [[Samples_Overview|sample workspaces]] to aid in the evaluation of STRIDE, or as a tool for learning how to apply STRIDE to different testing scenarios. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to STRIDE, or want to learn more about using the product, this is a great place to start.&lt;br /&gt;
&lt;br /&gt;
= Acquiring the Software =&lt;br /&gt;
&lt;br /&gt;
You can download the latest release from the S2 Technologies ftp site: ftp://ftp.s2technologies.com &lt;br /&gt;
&lt;br /&gt;
To run STRIDE you will need a license. If you are not yet a customer of S2 and would like to obtain an evaluation license, email [mailto:sales@s2technologies.com S2 Sales] or call our offices at &#039;&#039;&#039;760-635-2345&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
= Installing the Software  =&lt;br /&gt;
&lt;br /&gt;
To install STRIDE for the first time, or as an upgrade to an existing installation, please refer to [[Host Installation]]. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note: if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you are new to STRIDE, we recommend that you investigate the [[Samples_Overview|New STRIDE Samples]].&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;ascript&#039;&#039;&#039; API has been changed to be more robust: &lt;br /&gt;
**Certain deprecated methods have been eliminated. &lt;br /&gt;
**Some existing API methods have been modifed. &lt;br /&gt;
**The event model has been improved to allow greater script control.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Some scripts must be modified from previous versions of STRIDE to work successfully with 3.0.01xx. The necessary changes are detailed in the [[#Migration_to_3.0.01xx|Migration to 3.0.01xx]] section below. &lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;Panel&#039;&#039;&#039; object is no longer available to scripts; its functionality has been moved under the &#039;&#039;&#039;studio&#039;&#039;&#039; object model. You can access this new functionality as &#039;&#039;&#039;studio.Connection&#039;&#039;&#039;, however if you were formerly scripting the &#039;&#039;&#039;Panel&#039;&#039;&#039; object, you may find it is no longer necessary since: &lt;br /&gt;
**You can now configure your connection properties from within STRIDE Studio (from the menu select &#039;&#039;Tools/Target Connectivity&#039;&#039;) &lt;br /&gt;
**You can now set a workspace folder property to autoconnect upon execution&lt;br /&gt;
&lt;br /&gt;
*Zero is now allowed as the maximum size under certain circumstances in &#039;&#039;&#039;scl_string&#039;&#039;&#039; and &#039;&#039;&#039;scl_ptr_sized&#039;&#039;&#039;. Details of these circumstances are contained in the &#039;&#039;&#039;[[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]]&#039;&#039;&#039; document.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compiler.MicrosoftCompatibility&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Compiler.Compatibility&#039;&#039;&#039;. Valid values are &amp;quot;Generic&amp;quot; (generic mode), &amp;quot;Microsoft&amp;quot; (Microsoft compatibility), or &amp;quot;Gnu&amp;quot; (Gnu or Gcc compatibility).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compile()&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Build()&#039;&#039;&#039;. Also new methods, &#039;&#039;&#039;studio.Workspace.CleanBuild()&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.ReloadDatabase()&#039;&#039;&#039;, have been added.&lt;br /&gt;
&lt;br /&gt;
*A new property, &#039;&#039;&#039;Output&#039;&#039;&#039;, has been added off the studio object. This property outputs text to the Studio message tab, similar to how &#039;&#039;&#039;ascript.MessageBox()&#039;&#039;&#039; works for certain scripts. This property contains one method, &#039;&#039;&#039;PrintMessage(String msg)&#039;&#039;&#039;. You can see an example of its use [[Debugging Helps|here]].&lt;br /&gt;
&lt;br /&gt;
*A new settings group has been introduced - &#039;&#039;&#039;studio.Workspace.Settings.Build&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Intercept.Path&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Intercept.SourcePath&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.Intercept.HeaderPath&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Fixes  ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This section describes defects which have been corrected in STRIDE and the customer tracking number associated with them, if any, in brackets [].&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*[1055] Not able to specifiy uppercase include directory &lt;br /&gt;
*[1163] Certain cases of array of pointers to discriminated unions that were not handled correctly in the ascript object have been fixed. &lt;br /&gt;
*[1357] The ascript &#039;&#039;&#039;Call()&#039;&#039;&#039; method, when used with RspTimeoutPeriod, only returns True if a timeout has occurred. &lt;br /&gt;
*[1469] Global casting using &#039;&#039;&#039;scl_cast&#039;&#039;&#039; no longer causes an intercept module compile error. &lt;br /&gt;
*[1539] &#039;&#039;&#039;ascript&#039;&#039;&#039; no longer returns &amp;quot;undefined&amp;quot; when calling &#039;&#039;&#039;function.ReturnValue&#039;&#039;&#039; when the captured function returns an unqualified function pointer. &lt;br /&gt;
*[1543] IM source file locations added to studio UI and automation &lt;br /&gt;
*[1564] The Studio Add files dialog has been increased from 2K bytes to 100K bytes, to allow for more files to be selected at a time. &lt;br /&gt;
*[1586] Support for Variadic Macros &lt;br /&gt;
*[1597] EDGFront crash for scl_ptr_opaque &lt;br /&gt;
*[1600] Pre-processor treats constant 1 always as 8-bit &lt;br /&gt;
*[1605] Generated Perl script generates error when run in debugger &lt;br /&gt;
*The following statement in Runtime files &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; has been changed:&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args = 0;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;is now&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt; with no initializer. This makes it portable and able to compile under Linux. &lt;br /&gt;
*A macro that determines the existence of &#039;&#039;&#039;vsnprintf()&#039;&#039;&#039; has been updated in &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; in order to make it able to compile with GCC and other non-Microsoft compilers.&amp;lt;br&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; If you are using test functions and C++ test classes, you must be using compilers that support &#039;&#039;&#039;vsnprintf&#039;&#039;&#039; (variable argument lists), which is a standard in C99 and supported in C90. &lt;br /&gt;
*When tracing on a STID it&#039;s possible to display trace information for messages that aren&#039;t captured (i.e. the message&#039;s SMID is not known to STRIDE). A problem could occur when STRIDE attempted to interpret the payload of these messages. This has now been fixed; hex values only are now shown in the trace view for in this situation. &lt;br /&gt;
*Autosense was not working properly in the editor for message payloads. This has been fixed.&lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
=== TestUnits Collection  ===&lt;br /&gt;
&lt;br /&gt;
A new TestUnits collection has been implemented. All test interfaces (specified with [[SCL_Pragmas#Test_Units | Test Unit pragmas]]) will be listed there.&lt;br /&gt;
&lt;br /&gt;
=== Functions Collection  ===&lt;br /&gt;
&lt;br /&gt;
Interfaces specified with either the [[scl_test_class]] or [[scl_test_flist]] pragmas are not listed in the Functions collection anymore. &lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
=== Memory Management  ===&lt;br /&gt;
&lt;br /&gt;
To support multi-process target, memory management support for dynamic, configurable, and internal static memory has been implemented in Runtime. Runtime makes PAL calls to acquire memory segments and manages the memory according to runtime configurations set by user. In case of multi-process target is enabled, these memory will be shared among multiple applications, and PAL should implement shared memory. &lt;br /&gt;
&lt;br /&gt;
=== Protection using Mutex  ===&lt;br /&gt;
&lt;br /&gt;
Runtime now uses named mutex objects to protect critical data from multiple and simultaneous accesses by multiple threads and, in case of multi-process target is enabled, by multiple applications. Runtime makes PAL calls to obtain and control mutex objects. &lt;br /&gt;
&lt;br /&gt;
=== New Routines  ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Memory Management&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In case of multi-process target, recommended approach is to use &amp;lt;u&amp;gt;Memory-Mapped Files&amp;lt;/u&amp;gt; to implement memory segments. &lt;br /&gt;
&lt;br /&gt;
 palMemSegmentOpen() - Open/create memory segment &lt;br /&gt;
 palMemSegmentClose() - Close memory segment&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Named Mutexes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palMutexInit() - Initialize a mutex object&lt;br /&gt;
 palMutexDestroy() - Destroy a mutex object&lt;br /&gt;
 palMutexLock() - Lock a mutex object&lt;br /&gt;
 palMutexUnlock() - Unlock a mutex object&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Task Synchronization&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palGetThreadId() - Get current thread Id&lt;br /&gt;
 palGetProcessId() - Get current process Id&lt;br /&gt;
 palSleep() - Suspend the execution of the current thread&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Logging&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is optional. &lt;br /&gt;
&lt;br /&gt;
 palLog() - Logging utility&lt;br /&gt;
&lt;br /&gt;
=== Updated Routines  ===&lt;br /&gt;
&lt;br /&gt;
*Function signatures and functionalities of palWait() &amp;amp;amp; palNotify() have been updated.&lt;br /&gt;
&lt;br /&gt;
 palWait() - now takes in an in/out pointer for events notification&lt;br /&gt;
 palNotify() - mail box Id has been updated to notify any event including mail box Ids.&lt;br /&gt;
&lt;br /&gt;
*Function signatures of palMemAlloc() &amp;amp;amp; palMemFree() have been updated.&lt;br /&gt;
&lt;br /&gt;
=== Removed Routines  ===&lt;br /&gt;
&lt;br /&gt;
 palProtect&lt;br /&gt;
 palUnprotect&lt;br /&gt;
 palCriticalErr&lt;br /&gt;
&lt;br /&gt;
=== Removed Modules  ===&lt;br /&gt;
&lt;br /&gt;
 S2Mem - The memory module provided as part of PAL has been removed. If a native &lt;br /&gt;
         operating system does not support dynamic memory, the Runtime&#039;s memory &lt;br /&gt;
         management module &#039;&#039;srMem&#039;&#039; can be used instead of &#039;&#039;S2Mem&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
&lt;br /&gt;
*STRIDE Host Release &#039;&#039;&#039;3.0.01xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;. &lt;br /&gt;
*In order to eliminate redundancy and promote an object-oriented design, &amp;quot;Member Methods&amp;quot; have been removed from srTest; only &amp;quot;Member Objects&amp;quot; exist now in srTest. In addition, accessing the functionality of Member Objects in this way is similar to accessing scripting objects through the STRIDE Reporter object model. For a detailed explanation, refer to [[Test_Units#C.2B.2B_Test_Classes|this article]] on the STRIDE Support Wiki. &lt;br /&gt;
*A new routine, &#039;&#039;&#039;srInit()&#039;&#039;&#039;, replaces deprecated &#039;&#039;&#039;srInitialize()&#039;&#039;&#039;. Now the target will not be able to set an auto-connect with timeout. &lt;br /&gt;
*The &#039;&#039;&#039;scl_tp&#039;&#039;&#039; and &#039;&#039;&#039;scl_tp_format&#039;&#039;&#039; pragmas have been deprecated. The new pragmas are &#039;&#039;&#039;scl_tracepoint&#039;&#039;&#039; and &#039;&#039;&#039;scl_tracepoint_format&#039;&#039;&#039;. &lt;br /&gt;
*The default runtime configuration in srcfg.h now has fragmentation turned on. The srCFG_MAX_TRANSPORT_UNIT is set to 2048. &lt;br /&gt;
*Fixed warnings for parameter name differences in function declarations and definitions for srSubscribe(), srTracePoint(), and srQuerySMID(). &lt;br /&gt;
*Removed unnecessary/extra response to srCONNECT_CLOSE_T_SMID message. &lt;br /&gt;
*The Runtime now checks for the connection before responding with a &amp;quot;Pong&amp;quot; upon receiving a &amp;quot;Ping.&amp;quot; &lt;br /&gt;
*Introduced 40 additional system trace points to better describe internal errors. &lt;br /&gt;
*Reporting of the error srERR_SUB_NONE has been suppressed so that it no longer generates a target trace error. &lt;br /&gt;
*Trace views now always display srTraceStr() with reserved STID (srSTID_RESERVED) regardless of trace filter settings. &lt;br /&gt;
*srPtrSetupChild() now accepts NULL for handle (out pointer - pwHandle). &lt;br /&gt;
*Added a new Runtime Test Services (RTS) API &#039;&#039;&#039;srTestCaseSetStatusEx()&#039;&#039;&#039;, which enables the providing of the actual return value of a numeric test method in the case of failure. &lt;br /&gt;
*Added two new public APIs - &amp;quot;Printing&amp;quot; APIs to display messages on Trace Views without having to specify a STID or a trace level and to set any trace filters on Trace Views. These routines support formatted strings with variable arguments. The &#039;&#039;&#039;srPrintInfo()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and Level=3. The &#039;&#039;&#039;srPrintError()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and the Level=1. &#039;&#039;&#039;Warning:&#039;&#039;&#039; These new APIs use vsnprintf() routine to process variable arguments. The vsnprintf() became a standard in C99 and is supported in C90. &lt;br /&gt;
*To support multi-process target, significant changes have been made to runtime. &lt;br /&gt;
*A new public routine, srUninit(), has been added to sr.h &amp;amp;amp; srapi.c. &lt;br /&gt;
* A new public routine for Runtime Thread exit point, srThreadUninit(), has been added to sr.h &amp;amp;amp; srthread.c. &lt;br /&gt;
*A new module, srMem, for Memory Management has been added. Its new routines, _srMem_Allocate() &amp;amp;amp; _srMem_Free(), will be used in PAL&#039;s palMemAlloc() &amp;amp;amp; palMemFree() in case of multi-process target is enabled. &lt;br /&gt;
*Calls to palProtect() &amp;amp;amp; palUnprotect() have been replaced by new routines _srProtect() &amp;amp;amp; _srUnprotect(), in which the implementation uses its own mutex object that calls PAL&#039;s mutex routines. &lt;br /&gt;
*In target Test Classes and Test Functions, added capability to specify the comment label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
* Fixed a potential data abort issue when executing delegate code in the IM prior to Runtime being initialized.&lt;br /&gt;
* Runtime Test Services APIs are now thread safe. &lt;br /&gt;
* Fixed cancelation of remote boadcast subcribtion goes in an infinite loop.&lt;br /&gt;
* Fixed Runtime resource abuse when sending lots of broadcast messages. &lt;br /&gt;
* Added partial check for message payload corectness.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapi.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srconn.h&lt;br /&gt;
 srerr.c&lt;br /&gt;
 srib.c&lt;br /&gt;
 srib.h&lt;br /&gt;
 sribctrl.c&lt;br /&gt;
 sribtr.c&lt;br /&gt;
 sribtr.h&lt;br /&gt;
 srmsgmar.c&lt;br /&gt;
 srmsgptr.c&lt;br /&gt;
 srmsgptr.h&lt;br /&gt;
 srmsgque.c&lt;br /&gt;
 srmsgque.h&lt;br /&gt;
 srmsgrt.c&lt;br /&gt;
 srmsgrt.h&lt;br /&gt;
 srmsgsub.c&lt;br /&gt;
 srmsgsub.h&lt;br /&gt;
 srstid.c&lt;br /&gt;
 srstid.h&lt;br /&gt;
 srsuid.c&lt;br /&gt;
 srsuid.h&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
 srtestutil.c&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srthread.c&lt;br /&gt;
 srthread.h&lt;br /&gt;
 srtime.c&lt;br /&gt;
 srtime.h&lt;br /&gt;
 srtp.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been added:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srmem.c&lt;br /&gt;
 srmem.h&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.01xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
Any use of test classes through the Functions collection, like: &lt;br /&gt;
&lt;br /&gt;
  $main::ascript-&amp;amp;gt;Functions-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;User-&amp;amp;gt;Call(); &lt;br /&gt;
&lt;br /&gt;
should be converted to use the new TestUnits collection: &lt;br /&gt;
&lt;br /&gt;
  $main::ascript-&amp;amp;gt;TestUnits-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;Run(); &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
=== API Changes  ===&lt;br /&gt;
&lt;br /&gt;
*The Support Wiki pages now contain reference help for [[AutoScript#ascript|&#039;&#039;AutoScript&#039;&#039;]]. &lt;br /&gt;
*All synchronous method calls now throw exceptions in order to indicate error conditions rather than have error conditions encoded in return values. &lt;br /&gt;
*Asychronous method calls never throw exceptions to indicate error conditions. Instead, error conditions are delivered as a new Error object that is returned to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039;. (Asynchronous methods are &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;) &lt;br /&gt;
*If &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; times out, an Error object is returned. Previously NULL was returned in this case. &lt;br /&gt;
*All objects returned by &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; have &#039;&#039;&#039;Type&#039;&#039;&#039; and &#039;&#039;&#039;Name&#039;&#039;&#039; properties. When the &#039;&#039;&#039;Type&#039;&#039;&#039; is “Error”, the Error object has additional properties that contain further details about the error. &lt;br /&gt;
*All existing script syntax for designation of message payloads has been deprecated. A new syntax that allows for greater expression has been adopted. Details can be found [[Updated Message Payload Syntax|here]]. There are no syntax changes to function payloads. &lt;br /&gt;
*The signature for &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; has been changed. Successful calls to &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; now fully initialize the object.&lt;br /&gt;
&lt;br /&gt;
=== End-Of-Life Methods and Properties  ===&lt;br /&gt;
&lt;br /&gt;
This release marks the End-Of-Life (EOL) for the listed methods and properties. A call to any of these methods or an access to any of these properties will now result in a not-implemented exception in the script making the call or access. &lt;br /&gt;
&lt;br /&gt;
*ascript.Quit() &lt;br /&gt;
*ascript.Interfaces &lt;br /&gt;
*ascript.NamedEvents &lt;br /&gt;
*ascript.WaitForEventWithTimeout &lt;br /&gt;
*ascript.RspTimeoutNotifyEnabled &lt;br /&gt;
*ascript.CreateTimer() &lt;br /&gt;
*ascript.DestroyTimer() &lt;br /&gt;
*ascript.WaitTimeoutNotifyEnabled &lt;br /&gt;
*ascript.Compare_As_C_Values() &lt;br /&gt;
*ascript.AsyncErrorNotifyEnabled &lt;br /&gt;
*ascript.Function.Item().User/Owner.SMID&lt;br /&gt;
&lt;br /&gt;
=== Recommended Steps for Migration From a Previous Version  ===&lt;br /&gt;
&lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; in all scripts. Previous logic to test for null indicating timeouts must be modified. &#039;&#039;&#039;WaitForEvent()&#039;&#039;&#039; now always returns an object, in the case of a timeout (or other error) an Error object is returned. &lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.Quit&#039;&#039;&#039; in all scripts. Modify the logic as necessary to exit the script by other means in place of the original &#039;&#039;&#039;Quit()&#039;&#039;&#039; call. &lt;br /&gt;
*Search for all asynchronous method calls (Asynchronous calls are limited to &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;). Modify the logic as necessary to call &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; if errors (including timeout error) should be detected. &lt;br /&gt;
*If you have scripts that explicitly instantiate an &#039;&#039;&#039;ascript&#039;&#039;&#039; object (i.e. they create an object using the &#039;&#039;&#039;&amp;quot;STRIDE.ascript&amp;quot;&#039;&#039;&#039; PROGID), search for all occurrences and modify the subsequent call to &#039;&#039;&#039;ascript.Initialize()&#039;&#039;&#039; to pass the new parameter set. &lt;br /&gt;
*Search for all EOL&#039;d methods and properties. Each can be replaced by setting the appropriate timeout property and handling the timeout error object delivered by WaitForEvent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;Section1&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%; border-collapse: collapse;&amp;quot; class=&amp;quot;MsoTableGrid&amp;quot;&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1pt solid windowtext; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;EOL’d&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Method or Property&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&#039;&#039;&#039;Recommended Replacement&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Quit&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Refactor&amp;lt;/span&amp;gt; script logic to exit the script by other means. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Interfaces&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Functions&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Messages&amp;lt;/span&amp;gt; as appropriate. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.NamedEvents&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitForEventWithTimeout&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() after setting desired timeout using &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitTimeoutPeriod&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.RspTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.CreateTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Add&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.DestroyTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Remove&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Compare_As_C_Values&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.AsyncErrorNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Error notification from asynchronous calls is performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Function.Item&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SMID&amp;lt;/span&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Function.Item&amp;lt;/span&amp;gt;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SUID&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
Please refer to &#039;&#039;&#039;&#039;&#039;Platform Abstraction Layer (PAL) Specification&#039;&#039;&#039;&#039;&#039; for detailed information on new APIs. You may also refer to Linux implementation of PAL, which has been updated with new routines. &lt;br /&gt;
&lt;br /&gt;
*Implement new shared memory routines, palMemSegmentOpen() &amp;amp;amp; palMemSegmentClose(). In case of multi-process target, these routines should implement shared memory using memory-mapped files.&lt;br /&gt;
&lt;br /&gt;
*Runtime now can manage dynamic, configurable, and internal static memory. In case of multi-process target, update palMemAlloc() to simply call _srMem_Allocate() and palMemFree() to simply call _srMem_Free(). In case of single-process target, you can simply allocate dynamic memory according to your Operating System. If you are upgrading, you can simply leave the current implementation as it is.&lt;br /&gt;
&lt;br /&gt;
*Implement new mutex routines, palMutexInit(), palMutexDestroy(), palMutexLock() &amp;amp;amp; palMutexUnlock, to handle any named mutex objects. It is recommended to implement a separate code for shared memory case if it is necessary.&lt;br /&gt;
&lt;br /&gt;
*Remove old routines palProtect(), palUnprotect() and palCriticalErr().&lt;br /&gt;
&lt;br /&gt;
*Implement new routines palGetThreadId() and palGetProcessId().&lt;br /&gt;
&lt;br /&gt;
*Implement new routine palSleep().&lt;br /&gt;
&lt;br /&gt;
*Update synchronization routines, palCreateNID(), palDeleteNID(), palWait() &amp;amp;amp; palNotify(), to support event notifications and in case of multi-process target is enabled, sharing of the synchronization objects among multiple processors.&lt;br /&gt;
&lt;br /&gt;
*If your PAL uses &#039;&#039;S2Mem&#039;&#039; routines for dynamic memory, you should use new Runtime module &#039;&#039;srMem&#039;&#039;. Update palMemAlloc() to call _srMem_Allocate() and palMemFree() to call _srMem_Free().&lt;br /&gt;
&lt;br /&gt;
*Optionally, implement new routine palLog() as a logging utility for PAL and Runtime.&lt;br /&gt;
&lt;br /&gt;
== Runtime  ==&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new memory management (srCFG_MEMORY_MANAGEMENT) and multi-process target (srCFG_MULTI_PROC_TARGET) settings. By default, memory management and multi-process target are disabled. If you enable multi-process target you also need to enable memory management and configure the sizes and the maximum number of memory blocks. New Runtime module &#039;&#039;srMem&#039;&#039; uses these configurations to allocate and manage memory segments.&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new target connection timeout setting (srCFG_CONNECTION_TIMEOUT).&lt;br /&gt;
&lt;br /&gt;
*If target Test Classes and Test Functions are used, change the signature to include test label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
&lt;br /&gt;
== Windows Applications using Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
*The new &#039;&#039;&#039;s2srwin.lib&#039;&#039;&#039; has public API, published in a header srwin.h, containing the following set of routines:&lt;br /&gt;
&lt;br /&gt;
 srWin_SetMaster()     - Sets the application as the master and initializes the Stride Runtime thread. &lt;br /&gt;
                         In a multi-process environment only one application should make this call.&lt;br /&gt;
 srWin_AddThread()     - Adds additional message processing threads to the application.&lt;br /&gt;
 srWin_Run()           - Starts the processing and will not return until it has been signaled via &lt;br /&gt;
                         keyboard key or CTRL-C.&lt;br /&gt;
 srWin_SetPortTCP()    - Overrides the TCP port number (default: 8000) to which the application will &lt;br /&gt;
                         bind for the purpose of accepting connections.&lt;br /&gt;
 srWin_SetPortSerial() - Overrides the COM port number (default: 1) to which the application will bind &lt;br /&gt;
                         for the purpose of accepting connections.&lt;br /&gt;
&lt;br /&gt;
*Existing Host Apps developed against the old hostapphrt and hostapptrt libraries should be updated to as follows: &lt;br /&gt;
**replace the include of hostapp.h with include of srwin.h &lt;br /&gt;
**replace all calls to HostAppXXX() with srWin_XXX() &lt;br /&gt;
**call srWin_SetMaster() to start the runtime thread, srThread, before calling srWin_Run(). Within a multi-process target, only one process (the master) calls this routine.&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;a&amp;quot; ==&lt;br /&gt;
* Linux version of the STRIDE [[Build Tools]] is officially introduced.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;b&amp;quot; ==&lt;br /&gt;
* Relaxed [[scl_cast]]() pragma to allow cast from any integral ptr to union of ptrs&lt;br /&gt;
* Fixed compile warnings in Linux PAL.&lt;br /&gt;
* Fixed issue in instrumentation of [[Test Units]].&lt;br /&gt;
* Fixed issue with UNC paths.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0102 ==&lt;br /&gt;
* Implemented new licensing scheme. Existing licenses will not work anymore and need to be reissued. Old and new licenses could co-exist at the same location.&lt;br /&gt;
* The syntax of [[scl_ptr]] and [[scl_ptr_sized]] pragmas has changed. Now it is required to quote the direction and usage attributes. See this [[Handling_of_pointer_attribute_tokens|page]] for details.&lt;br /&gt;
* [[Test_Units#Runtime_Test_Services|Runtime Test Services]] now support adding annotations per test suite.&lt;br /&gt;
* A complete set of [[Samples]] has been implemented.&lt;br /&gt;
* Fixed several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Fixed several minor issues in [[AutoScript]]. &lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0102&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039; and &#039;&#039;&#039;3.01&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8124</id>
		<title>STRIDE 3.0.01xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8124"/>
		<updated>2008-10-16T00:00:16Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* API Changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Release Notes&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
This page documents the changes in STRIDE version 3.0.01xx (code name &#039;&#039;StoneSteps&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note that if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= What&#039;s New  =&lt;br /&gt;
&lt;br /&gt;
Based on customer feedback, in this release we have made significant performance improvements as well as many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Performance Improvements ==&lt;br /&gt;
&lt;br /&gt;
Specific improvements have been made in the following areas: &lt;br /&gt;
&lt;br /&gt;
*Database loading time has been improved &lt;br /&gt;
*Compile times are now shorter &lt;br /&gt;
*Scripting operations involving function and message payloads now perform better, especially when arrays are involved &lt;br /&gt;
*Runtime performance has been improved by optimizing payload serialization and deserialization operations&lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
&lt;br /&gt;
=== SCL Wizard ===&lt;br /&gt;
&lt;br /&gt;
The SCL Wizard functionality in [[STRIDE Studio]] has been extended so that you can now use the tool to qualify message payloads as well as function payloads. &lt;br /&gt;
&lt;br /&gt;
In addition, the following types of qualifications can now be made: &lt;br /&gt;
&lt;br /&gt;
*For payloads that include function pointers, the SCL Wizard now supports qualifying the pointers as such and identifying candidate function values &lt;br /&gt;
*Type casts can now be specified on payload members&lt;br /&gt;
&lt;br /&gt;
=== Connection Management ===&lt;br /&gt;
&lt;br /&gt;
Connection management has been greatly simplified; software managing connection to the target system has been integrated into [[STRIDE Studio]] so that connections can be managed directly from there. (It is still possible to access connection management functionality without using Studio.) &lt;br /&gt;
&lt;br /&gt;
The Panel program is no longer used, and there is no longer a requirement to load the database to communicate with a remote target. &lt;br /&gt;
&lt;br /&gt;
==== Transport Properties ====&lt;br /&gt;
&lt;br /&gt;
All transport properties can now be accessed via scripts. A new transport scripting model makes this possible.&lt;br /&gt;
&lt;br /&gt;
=== STRIDE Studio Test Runner Improvements ===&lt;br /&gt;
&lt;br /&gt;
The test runner in [[STRIDE Studio]] has incorporated several functional and usability improvements. &lt;br /&gt;
&lt;br /&gt;
*Each runnable script and folder (Suite) in a workspace now has additional properties that allow you to optionally specify a handler script that will be executed in the case of an unhandled error (property OnError) or a timeout (property OnTimeout). A timeout value can be set for each folder.&lt;br /&gt;
&lt;br /&gt;
*Each runnable folder (Suite) in a workspace now has a property (OnRunConnect) that can instruct STRIDE Studio to automatically connect to a target system before the folder is executed.&lt;br /&gt;
&lt;br /&gt;
*The workspace now has a dynamic property (ExecutionState) that allows you to alter the order of script execution at runtime.&lt;br /&gt;
&lt;br /&gt;
=== New Frameworks Feature ===&lt;br /&gt;
&lt;br /&gt;
This version introduces [[Using Frameworks|Target Frameworks]], which provide customizable templates for workspace creation. The use of frameworks simplifies the use of STRIDE and ensures consistency across a development team. &lt;br /&gt;
&lt;br /&gt;
Several [[Provided Frameworks|reference frameworks]] are included in this release, supporting the following target environments: &lt;br /&gt;
&lt;br /&gt;
*[[Provided Frameworks#Windows|Windows]] &lt;br /&gt;
*[[Provided Frameworks#Linux|Linux]] &lt;br /&gt;
*[[Provided Frameworks#WinMobile|WinMobile]] &lt;br /&gt;
*[[Provided Frameworks#Generic|Generic]]&lt;br /&gt;
&lt;br /&gt;
[[Using Packages|Packages]] are also introduced. These provide a convenient way to encapsulate SCL-annotated source code and corresponding tests for a set of interfaces. &lt;br /&gt;
&lt;br /&gt;
=== Uploading Results to STRIDE Portal ===&lt;br /&gt;
&lt;br /&gt;
Uploading test results from STRIDE Reporter to STRIDE Portal has been integrated into STRIDE Studio. Portal&#039;s server information can be configured from Studio&#039;s workspace properties while uploading results to Portal can be enabled or disabled via workspace context menu. If enabled, after running the workspace, a script folder or a script file, results in Report file will automatically be uploaded to the configured server. &lt;br /&gt;
&lt;br /&gt;
== Build Tools  ==&lt;br /&gt;
&lt;br /&gt;
A set of new command line [[Build Tools]] has been implemented: &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Stride compiler&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride database binder&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride instrumentation generator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
These utilities has been ported for Windows and Linux. Using them would allow seamless integration with a &amp;quot;make&amp;quot; build environment.&lt;br /&gt;
&lt;br /&gt;
== Target-Based Testing  ==&lt;br /&gt;
&lt;br /&gt;
Target-based (xUnit-style) testing has been simplified. The new set of SCL pragmas [[Test Units]] can now be included in a source file to tell the compiler and IM generator to automatically create test harnessing code.&lt;br /&gt;
&lt;br /&gt;
The automation components STRIDE.testclass, STRIDE.testunit and STRIDE.testfunction are removed.&lt;br /&gt;
&lt;br /&gt;
== Runtime/PAL  ==&lt;br /&gt;
&lt;br /&gt;
Based on customer requirements, in this release we have made significant changes to [[Target_Integration#The STRIDE Runtime|STRIDE Runtime]] and [[Target_Integration#The Platform Abstraction Layer (PAL)|PAL]]. &lt;br /&gt;
&lt;br /&gt;
=== Multi-Process Targets  ===&lt;br /&gt;
&lt;br /&gt;
New routines and support have been added to Runtime and PAL to support multi-process targets. Changes include: implementation of memory management and shared memory, protecting using named Mutex objects, synchronization of multiple processors and multiple threads, and usage of current process and thread IDs.&lt;br /&gt;
&lt;br /&gt;
=== Logging (Optional)  ===&lt;br /&gt;
&lt;br /&gt;
Runtime and PAL use a logging routine that can optionally be implemented in PAL. &lt;br /&gt;
&lt;br /&gt;
== Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
A new [[Windows_Off-Target_SDK|SDK]] for implemention of Off-Target applications on Windows has been packaged. It contains a library (s2srWin.dll/lib) in which the Windows PAL, Runtime, and GRS and a set of utility scripts are prebuilt. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;s2shostapphrt&#039;&#039;&#039; library, a prebuilt verion of the Host Runtime, has been removed. Building Windows applications using the Host Runtime is not supported anymore. The &#039;&#039;&#039;s2shostapptrt&#039;&#039;&#039; library, a prebuilt version of the Target Runtime, has also been removed. &lt;br /&gt;
&lt;br /&gt;
If an upgrade is performed it is strongly recommended that the above mentioned &#039;&#039;&#039;s2shostapp*&#039;&#039;&#039; libraries and their public API header (hostapp.h) be manually removed.&lt;br /&gt;
&lt;br /&gt;
= Support Wiki =&lt;br /&gt;
&lt;br /&gt;
This support wiki http://support.s2technologies.com is introduced with this version. You can navigate here from your web browser, or directly from STRIDE Studio; a link is provided in the Help menu. &lt;br /&gt;
&lt;br /&gt;
== STRIDE Samples  ==&lt;br /&gt;
&lt;br /&gt;
We have created a set of [[Samples_Overview|sample workspaces]] to aid in the evaluation of STRIDE, or as a tool for learning how to apply STRIDE to different testing scenarios. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to STRIDE, or want to learn more about using the product, this is a great place to start.&lt;br /&gt;
&lt;br /&gt;
= Acquiring the Software =&lt;br /&gt;
&lt;br /&gt;
You can download the latest release from the S2 Technologies ftp site: ftp://ftp.s2technologies.com &lt;br /&gt;
&lt;br /&gt;
To run STRIDE you will need a license. If you are not yet a customer of S2 and would like to obtain an evaluation license, email [mailto:sales@s2technologies.com S2 Sales] or call our offices at &#039;&#039;&#039;760-635-2345&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
= Installing the Software  =&lt;br /&gt;
&lt;br /&gt;
To install STRIDE for the first time, or as an upgrade to an existing installation, please refer to [[Host Installation]]. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note: if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you are new to STRIDE, we recommend that you investigate the [[Samples_Overview|New STRIDE Samples]].&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;ascript&#039;&#039;&#039; API has been changed to be more robust: &lt;br /&gt;
**Certain deprecated methods have been eliminated. &lt;br /&gt;
**Some existing API methods have been modifed. &lt;br /&gt;
**The event model has been improved to allow greater script control.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Some scripts must be modified from previous versions of STRIDE to work successfully with 3.0.01xx. The necessary changes are detailed in the [[#Migration_to_3.0.01xx|Migration to 3.0.01xx]] section below. &lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;Panel&#039;&#039;&#039; object is no longer available to scripts; its functionality has been moved under the &#039;&#039;&#039;studio&#039;&#039;&#039; object model. You can access this new functionality as &#039;&#039;&#039;studio.Connection&#039;&#039;&#039;, however if you were formerly scripting the &#039;&#039;&#039;Panel&#039;&#039;&#039; object, you may find it is no longer necessary since: &lt;br /&gt;
**You can now configure your connection properties from within STRIDE Studio (from the menu select &#039;&#039;Tools/Target Connectivity&#039;&#039;) &lt;br /&gt;
**You can now set a workspace folder property to autoconnect upon execution&lt;br /&gt;
&lt;br /&gt;
*Zero is now allowed as the maximum size under certain circumstances in &#039;&#039;&#039;scl_string&#039;&#039;&#039; and &#039;&#039;&#039;scl_ptr_sized&#039;&#039;&#039;. Details of these circumstances are contained in the &#039;&#039;&#039;[[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]]&#039;&#039;&#039; document.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compiler.MicrosoftCompatibility&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Compiler.Compatibility&#039;&#039;&#039;. Valid values are &amp;quot;Generic&amp;quot; (generic mode), &amp;quot;Microsoft&amp;quot; (Microsoft compatibility), or &amp;quot;Gnu&amp;quot; (Gnu or Gcc compatibility).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compile()&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Build()&#039;&#039;&#039;. Also new methods, &#039;&#039;&#039;studio.Workspace.CleanBuild()&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.ReloadDatabase()&#039;&#039;&#039;, have been added.&lt;br /&gt;
&lt;br /&gt;
*A new property, &#039;&#039;&#039;Output&#039;&#039;&#039;, has been added off the studio object. This property outputs text to the Studio message tab, similar to how &#039;&#039;&#039;ascript.MessageBox()&#039;&#039;&#039; works for certain scripts. This property contains one method, &#039;&#039;&#039;PrintMessage(String msg)&#039;&#039;&#039;. You can see an example of its use [[Debugging Helps|here]].&lt;br /&gt;
&lt;br /&gt;
*A new settings group has been introduced - &#039;&#039;&#039;studio.Workspace.Settings.Build&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Intercept.Path&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Intercept.SourcePath&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.Intercept.HeaderPath&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Fixes  ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This section describes defects which have been corrected in STRIDE and the customer tracking number associated with them, if any, in brackets [].&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*[1055] Not able to specifiy uppercase include directory &lt;br /&gt;
*[1163] Certain cases of array of pointers to discriminated unions that were not handled correctly in the ascript object have been fixed. &lt;br /&gt;
*[1357] The ascript &#039;&#039;&#039;Call()&#039;&#039;&#039; method, when used with RspTimeoutPeriod, only returns True if a timeout has occurred. &lt;br /&gt;
*[1469] Global casting using &#039;&#039;&#039;scl_cast&#039;&#039;&#039; no longer causes an intercept module compile error. &lt;br /&gt;
*[1539] &#039;&#039;&#039;ascript&#039;&#039;&#039; no longer returns &amp;quot;undefined&amp;quot; when calling &#039;&#039;&#039;function.ReturnValue&#039;&#039;&#039; when the captured function returns an unqualified function pointer. &lt;br /&gt;
*[1543] IM source file locations added to studio UI and automation &lt;br /&gt;
*[1564] The Studio Add files dialog has been increased from 2K bytes to 100K bytes, to allow for more files to be selected at a time. &lt;br /&gt;
*[1586] Support for Variadic Macros &lt;br /&gt;
*[1597] EDGFront crash for scl_ptr_opaque &lt;br /&gt;
*[1600] Pre-processor treats constant 1 always as 8-bit &lt;br /&gt;
*[1605] Generated Perl script generates error when run in debugger &lt;br /&gt;
*The following statement in Runtime files &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; has been changed:&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args = 0;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;is now&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt; with no initializer. This makes it portable and able to compile under Linux. &lt;br /&gt;
*A macro that determines the existence of &#039;&#039;&#039;vsnprintf()&#039;&#039;&#039; has been updated in &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; in order to make it able to compile with GCC and other non-Microsoft compilers.&amp;lt;br&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; If you are using test functions and C++ test classes, you must be using compilers that support &#039;&#039;&#039;vsnprintf&#039;&#039;&#039; (variable argument lists), which is a standard in C99 and supported in C90. &lt;br /&gt;
*When tracing on a STID it&#039;s possible to display trace information for messages that aren&#039;t captured (i.e. the message&#039;s SMID is not known to STRIDE). A problem could occur when STRIDE attempted to interpret the payload of these messages. This has now been fixed; hex values only are now shown in the trace view for in this situation. &lt;br /&gt;
*Autosense was not working properly in the editor for message payloads. This has been fixed.&lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
=== TestUnits Collection  ===&lt;br /&gt;
&lt;br /&gt;
A new TestUnits collection has been implemented. All test interfaces (specified with [[SCL_Pragmas#Test_Units | Test Unit pragmas]]) will be listed there.&lt;br /&gt;
&lt;br /&gt;
=== Functions Collection  ===&lt;br /&gt;
&lt;br /&gt;
Interfaces specified with either the [[scl_test_class]] or [[scl_test_flist]] pragmas are not listed in the Functions collection anymore. &lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
=== Memory Management  ===&lt;br /&gt;
&lt;br /&gt;
To support multi-process target, memory management support for dynamic, configurable, and internal static memory has been implemented in Runtime. Runtime makes PAL calls to acquire memory segments and manages the memory according to runtime configurations set by user. In case of multi-process target is enabled, these memory will be shared among multiple applications, and PAL should implement shared memory. &lt;br /&gt;
&lt;br /&gt;
=== Protection using Mutex  ===&lt;br /&gt;
&lt;br /&gt;
Runtime now uses named mutex objects to protect critical data from multiple and simultaneous accesses by multiple threads and, in case of multi-process target is enabled, by multiple applications. Runtime makes PAL calls to obtain and control mutex objects. &lt;br /&gt;
&lt;br /&gt;
=== New Routines  ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Memory Management&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In case of multi-process target, recommended approach is to use &amp;lt;u&amp;gt;Memory-Mapped Files&amp;lt;/u&amp;gt; to implement memory segments. &lt;br /&gt;
&lt;br /&gt;
 palMemSegmentOpen() - Open/create memory segment &lt;br /&gt;
 palMemSegmentClose() - Close memory segment&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Named Mutexes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palMutexInit() - Initialize a mutex object&lt;br /&gt;
 palMutexDestroy() - Destroy a mutex object&lt;br /&gt;
 palMutexLock() - Lock a mutex object&lt;br /&gt;
 palMutexUnlock() - Unlock a mutex object&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Task Synchronization&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palGetThreadId() - Get current thread Id&lt;br /&gt;
 palGetProcessId() - Get current process Id&lt;br /&gt;
 palSleep() - Suspend the execution of the current thread&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Logging&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is optional. &lt;br /&gt;
&lt;br /&gt;
 palLog() - Logging utility&lt;br /&gt;
&lt;br /&gt;
=== Updated Routines  ===&lt;br /&gt;
&lt;br /&gt;
*Function signatures and functionalities of palWait() &amp;amp;amp; palNotify() have been updated.&lt;br /&gt;
&lt;br /&gt;
 palWait() - now takes in an in/out pointer for events notification&lt;br /&gt;
 palNotify() - mail box Id has been updated to notify any event including mail box Ids.&lt;br /&gt;
&lt;br /&gt;
*Function signatures of palMemAlloc() &amp;amp;amp; palMemFree() have been updated.&lt;br /&gt;
&lt;br /&gt;
=== Removed Routines  ===&lt;br /&gt;
&lt;br /&gt;
 palProtect&lt;br /&gt;
 palUnprotect&lt;br /&gt;
 palCriticalErr&lt;br /&gt;
&lt;br /&gt;
=== Removed Modules  ===&lt;br /&gt;
&lt;br /&gt;
 S2Mem - The memory module provided as part of PAL has been removed. If a native &lt;br /&gt;
         operating system does not support dynamic memory, the Runtime&#039;s memory &lt;br /&gt;
         management module &#039;&#039;srMem&#039;&#039; can be used instead of &#039;&#039;S2Mem&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
&lt;br /&gt;
*STRIDE Host Release &#039;&#039;&#039;3.0.01xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;. &lt;br /&gt;
*In order to eliminate redundancy and promote an object-oriented design, &amp;quot;Member Methods&amp;quot; have been removed from srTest; only &amp;quot;Member Objects&amp;quot; exist now in srTest. In addition, accessing the functionality of Member Objects in this way is similar to accessing scripting objects through the STRIDE Reporter object model. For a detailed explanation, refer to [[Test_Units#C.2B.2B_Test_Classes|this article]] on the STRIDE Support Wiki. &lt;br /&gt;
*A new routine, &#039;&#039;&#039;srInit()&#039;&#039;&#039;, replaces deprecated &#039;&#039;&#039;srInitialize()&#039;&#039;&#039;. Now the target will not be able to set an auto-connect with timeout. &lt;br /&gt;
*The &#039;&#039;&#039;scl_tp&#039;&#039;&#039; and &#039;&#039;&#039;scl_tp_format&#039;&#039;&#039; pragmas have been deprecated. The new pragmas are &#039;&#039;&#039;scl_tracepoint&#039;&#039;&#039; and &#039;&#039;&#039;scl_tracepoint_format&#039;&#039;&#039;. &lt;br /&gt;
*The default runtime configuration in srcfg.h now has fragmentation turned on. The srCFG_MAX_TRANSPORT_UNIT is set to 2048. &lt;br /&gt;
*Fixed warnings for parameter name differences in function declarations and definitions for srSubscribe(), srTracePoint(), and srQuerySMID(). &lt;br /&gt;
*Removed unnecessary/extra response to srCONNECT_CLOSE_T_SMID message. &lt;br /&gt;
*The Runtime now checks for the connection before responding with a &amp;quot;Pong&amp;quot; upon receiving a &amp;quot;Ping.&amp;quot; &lt;br /&gt;
*Introduced 40 additional system trace points to better describe internal errors. &lt;br /&gt;
*Reporting of the error srERR_SUB_NONE has been suppressed so that it no longer generates a target trace error. &lt;br /&gt;
*Trace views now always display srTraceStr() with reserved STID (srSTID_RESERVED) regardless of trace filter settings. &lt;br /&gt;
*srPtrSetupChild() now accepts NULL for handle (out pointer - pwHandle). &lt;br /&gt;
*Added a new Runtime Test Services (RTS) API &#039;&#039;&#039;srTestCaseSetStatusEx()&#039;&#039;&#039;, which enables the providing of the actual return value of a numeric test method in the case of failure. &lt;br /&gt;
*Added two new public APIs - &amp;quot;Printing&amp;quot; APIs to display messages on Trace Views without having to specify a STID or a trace level and to set any trace filters on Trace Views. These routines support formatted strings with variable arguments. The &#039;&#039;&#039;srPrintInfo()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and Level=3. The &#039;&#039;&#039;srPrintError()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and the Level=1. &#039;&#039;&#039;Warning:&#039;&#039;&#039; These new APIs use vsnprintf() routine to process variable arguments. The vsnprintf() became a standard in C99 and is supported in C90. &lt;br /&gt;
*To support multi-process target, significant changes have been made to runtime. &lt;br /&gt;
*A new public routine, srUninit(), has been added to sr.h &amp;amp;amp; srapi.c. &lt;br /&gt;
* A new public routine for Runtime Thread exit point, srThreadUninit(), has been added to sr.h &amp;amp;amp; srthread.c. &lt;br /&gt;
*A new module, srMem, for Memory Management has been added. Its new routines, _srMem_Allocate() &amp;amp;amp; _srMem_Free(), will be used in PAL&#039;s palMemAlloc() &amp;amp;amp; palMemFree() in case of multi-process target is enabled. &lt;br /&gt;
*Calls to palProtect() &amp;amp;amp; palUnprotect() have been replaced by new routines _srProtect() &amp;amp;amp; _srUnprotect(), in which the implementation uses its own mutex object that calls PAL&#039;s mutex routines. &lt;br /&gt;
*In target Test Classes and Test Functions, added capability to specify the comment label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
* Fixed a potential data abort issue when executing delegate code in the IM prior to Runtime being initialized.&lt;br /&gt;
* Runtime Test Services APIs are now thread safe. &lt;br /&gt;
* Fixed cancelation of remote boadcast subcribtion goes in an infinite loop.&lt;br /&gt;
* Fixed Runtime resource abuse when sending lots of broadcast messages. &lt;br /&gt;
* Added partial check for message payload corectness.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapi.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srconn.h&lt;br /&gt;
 srerr.c&lt;br /&gt;
 srib.c&lt;br /&gt;
 srib.h&lt;br /&gt;
 sribctrl.c&lt;br /&gt;
 sribtr.c&lt;br /&gt;
 sribtr.h&lt;br /&gt;
 srmsgmar.c&lt;br /&gt;
 srmsgptr.c&lt;br /&gt;
 srmsgptr.h&lt;br /&gt;
 srmsgque.c&lt;br /&gt;
 srmsgque.h&lt;br /&gt;
 srmsgrt.c&lt;br /&gt;
 srmsgrt.h&lt;br /&gt;
 srmsgsub.c&lt;br /&gt;
 srmsgsub.h&lt;br /&gt;
 srstid.c&lt;br /&gt;
 srstid.h&lt;br /&gt;
 srsuid.c&lt;br /&gt;
 srsuid.h&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
 srtestutil.c&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srthread.c&lt;br /&gt;
 srthread.h&lt;br /&gt;
 srtime.c&lt;br /&gt;
 srtime.h&lt;br /&gt;
 srtp.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been added:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srmem.c&lt;br /&gt;
 srmem.h&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.01xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
Any use of test classes through the Functions collection, like: &lt;br /&gt;
&lt;br /&gt;
  $main::ascript-&amp;amp;gt;Functions-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;User-&amp;amp;gt;Call(); &lt;br /&gt;
&lt;br /&gt;
should be converted to use the new TestUnits collection: &lt;br /&gt;
&lt;br /&gt;
  $main::ascript-&amp;amp;gt;TestUnits-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;Run(); &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
=== API Changes  ===&lt;br /&gt;
&lt;br /&gt;
*The Support Wiki pages now contain reference help for [[AutoScript#ascript|&#039;&#039;AutoScript&#039;&#039;]]. &lt;br /&gt;
*All synchronous method calls now throw exceptions in order to indicate error conditions rather than have error conditions encoded in return values. &lt;br /&gt;
*Asychronous method calls never throw exceptions to indicate error conditions. Instead, error conditions are delivered as a new Error object that is returned to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039;. (Asynchronous methods are &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;) &lt;br /&gt;
*If &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; times out, an Error object is returned. Previously NULL was returned in this case. &lt;br /&gt;
*All objects returned by &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; have &#039;&#039;&#039;Type&#039;&#039;&#039; and &#039;&#039;&#039;Name&#039;&#039;&#039; properties. When the &#039;&#039;&#039;Type&#039;&#039;&#039; is “Error”, the Error object has additional properties that contain further details about the error. &lt;br /&gt;
*All existing script syntax for designation of message payloads has been deprecated. A new syntax that allows for greater expression has been adopted. Details can be found [[Updated Message Payload Syntax|here]]. There are no syntax changes to function payloads. &lt;br /&gt;
*The signature for &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; has been changed. Successful calls to &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; now fully initialize the object.&lt;br /&gt;
&lt;br /&gt;
=== End-Of-Life Methods and Properties  ===&lt;br /&gt;
&lt;br /&gt;
This release marks the End-Of-Life (EOL) for the listed methods and properties. A call to any of these methods or an access to any of these properties will now result in a not-implemented exception in the script making the call or access. &lt;br /&gt;
&lt;br /&gt;
*ascript.Quit() &lt;br /&gt;
*ascript.Interfaces &lt;br /&gt;
*ascript.NamedEvents &lt;br /&gt;
*ascript.WaitForEventWithTimeout &lt;br /&gt;
*ascript.RspTimeoutNotifyEnabled &lt;br /&gt;
*ascript.CreateTimer() &lt;br /&gt;
*ascript.DestroyTimer() &lt;br /&gt;
*ascript.WaitTimeoutNotifyEnabled &lt;br /&gt;
*ascript.Compare_As_C_Values() &lt;br /&gt;
*ascript.AsyncErrorNotifyEnabled &lt;br /&gt;
*ascript.Function.Item().User/Owner.SMID&lt;br /&gt;
&lt;br /&gt;
=== Recommended Steps for Migration From a Previous Version  ===&lt;br /&gt;
&lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; in all scripts. Previous logic to test for null indicating timeouts must be modified. &#039;&#039;&#039;WaitForEvent()&#039;&#039;&#039; now always returns an object, in the case of a timeout (or other error) an Error object is returned. &lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.Quit&#039;&#039;&#039; in all scripts. Modify the logic as necessary to exit the script by other means in place of the original &#039;&#039;&#039;Quit()&#039;&#039;&#039; call. &lt;br /&gt;
*Search for all asynchronous method calls (Asynchronous calls are limited to &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;). Modify the logic as necessary to call &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; if errors (including timeout error) should be detected. &lt;br /&gt;
*If you have scripts that explicitly instantiate an &#039;&#039;&#039;ascript&#039;&#039;&#039; object (i.e. they create an object using the &#039;&#039;&#039;&amp;quot;STRIDE.ascript&amp;quot;&#039;&#039;&#039; PROGID), search for all occurrences and modify the subsequent call to &#039;&#039;&#039;ascript.Initialize()&#039;&#039;&#039; to pass the new parameter set. &lt;br /&gt;
*Search for all EOL&#039;d methods and properties. Each can be replaced by setting the appropriate timeout property and handling the timeout error object delivered by WaitForEvent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;Section1&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%; border-collapse: collapse;&amp;quot; class=&amp;quot;MsoTableGrid&amp;quot;&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1pt solid windowtext; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;EOL’d&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Method or Property&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&#039;&#039;&#039;Recommended Replacement&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Quit&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Refactor&amp;lt;/span&amp;gt; script logic to exit the script by other means. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Interfaces&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Functions&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Messages&amp;lt;/span&amp;gt; as appropriate. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.NamedEvents&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitForEventWithTimeout&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() after setting desired timeout using &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitTimeoutPeriod&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.RspTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.CreateTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Add&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.DestroyTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Remove&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Compare_As_C_Values&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.AsyncErrorNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Error notification from asynchronous calls is performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Function.Item&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SMID&amp;lt;/span&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Function.Item&amp;lt;/span&amp;gt;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SUID&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
Please refer to &#039;&#039;&#039;&#039;&#039;Platform Abstraction Layer (PAL) Specification&#039;&#039;&#039;&#039;&#039; for detailed information on new APIs. You may also refer to Linux implementation of PAL, which has been updated with new routines. &lt;br /&gt;
&lt;br /&gt;
*Implement new shared memory routines, palMemSegmentOpen() &amp;amp;amp; palMemSegmentClose(). In case of multi-process target, these routines should implement shared memory using memory-mapped files.&lt;br /&gt;
&lt;br /&gt;
*Runtime now can manage dynamic, configurable, and internal static memory. In case of multi-process target, update palMemAlloc() to simply call _srMem_Allocate() and palMemFree() to simply call _srMem_Free(). In case of single-process target, you can simply allocate dynamic memory according to your Operating System. If you are upgrading, you can simply leave the current implementation as it is.&lt;br /&gt;
&lt;br /&gt;
*Implement new mutex routines, palMutexInit(), palMutexDestroy(), palMutexLock() &amp;amp;amp; palMutexUnlock, to handle any named mutex objects. It is recommended to implement a separate code for shared memory case if it is necessary.&lt;br /&gt;
&lt;br /&gt;
*Remove old routines palProtect(), palUnprotect() and palCriticalErr().&lt;br /&gt;
&lt;br /&gt;
*Implement new routines palGetThreadId() and palGetProcessId().&lt;br /&gt;
&lt;br /&gt;
*Implement new routine palSleep().&lt;br /&gt;
&lt;br /&gt;
*Update synchronization routines, palCreateNID(), palDeleteNID(), palWait() &amp;amp;amp; palNotify(), to support event notifications and in case of multi-process target is enabled, sharing of the synchronization objects among multiple processors.&lt;br /&gt;
&lt;br /&gt;
*If your PAL uses &#039;&#039;S2Mem&#039;&#039; routines for dynamic memory, you should use new Runtime module &#039;&#039;srMem&#039;&#039;. Update palMemAlloc() to call _srMem_Allocate() and palMemFree() to call _srMem_Free().&lt;br /&gt;
&lt;br /&gt;
*Optionally, implement new routine palLog() as a logging utility for PAL and Runtime.&lt;br /&gt;
&lt;br /&gt;
== Runtime  ==&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new memory management (srCFG_MEMORY_MANAGEMENT) and multi-process target (srCFG_MULTI_PROC_TARGET) settings. By default, memory management and multi-process target are disabled. If you enable multi-process target you also need to enable memory management and configure the sizes and the maximum number of memory blocks. New Runtime module &#039;&#039;srMem&#039;&#039; uses these configurations to allocate and manage memory segments.&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new target connection timeout setting (srCFG_CONNECTION_TIMEOUT).&lt;br /&gt;
&lt;br /&gt;
*If target Test Classes and Test Functions are used, change the signature to include test label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
&lt;br /&gt;
== Windows Applications using Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
*The new &#039;&#039;&#039;s2srwin.lib&#039;&#039;&#039; has public API, published in a header srwin.h, containing the following set of routines:&lt;br /&gt;
&lt;br /&gt;
 srWin_SetMaster() - Sets the application as the master and initializes the Stride Runtime thread. In a multi-process environment only one application should make this call.&lt;br /&gt;
 srWin_AddThread() - Adds additional message processing threads to the application.&lt;br /&gt;
 srWin_Run() - Starts the processing and will not return until it has been signaled via keyboard key or CTRL-C.&lt;br /&gt;
 srWin_SetPortTCP() - Overrides the TCP port number (default: 8000) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
 srWin_SetPortSerial() - Overrides the COM port number (default: 1) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
&lt;br /&gt;
*Existing Host Apps developed against the old hostapphrt and hostapptrt libraries should be updated to as follows: &lt;br /&gt;
**replace the include of hostapp.h with include of srwin.h &lt;br /&gt;
**replace all calls to HostAppXXX() with srWin_XXX() &lt;br /&gt;
**call srWin_SetMaster() to start the runtime thread, srThread, before calling srWin_Run(). Within a multi-process target, only one process (the master) calls this routine.&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;a&amp;quot; ==&lt;br /&gt;
* Linux version of the STRIDE [[Build Tools]] is officially introduced.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;b&amp;quot; ==&lt;br /&gt;
* Relaxed [[scl_cast]]() pragma to allow cast from any integral ptr to union of ptrs&lt;br /&gt;
* Fixed compile warnings in Linux PAL.&lt;br /&gt;
* Fixed issue in instrumentation of [[Test Units]].&lt;br /&gt;
* Fixed issue with UNC paths.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0102 ==&lt;br /&gt;
* Implemented new licensing scheme. Existing licenses will not work anymore and need to be reissued. Old and new licenses could co-exist at the same location.&lt;br /&gt;
* The syntax of [[scl_ptr]] and [[scl_ptr_sized]] pragmas has changed. Now it is required to quote the direction and usage attributes. See this [[Handling_of_pointer_attribute_tokens|page]] for details.&lt;br /&gt;
* [[Test_Units#Runtime_Test_Services|Runtime Test Services]] now support adding annotations per test suite.&lt;br /&gt;
* A complete set of [[Samples]] has been implemented.&lt;br /&gt;
* Fixed several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Fixed several minor issues in [[AutoScript]]. &lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0102&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039; and &#039;&#039;&#039;3.01&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8123</id>
		<title>STRIDE 3.0.01xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8123"/>
		<updated>2008-10-15T23:59:29Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* API Changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Release Notes&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
This page documents the changes in STRIDE version 3.0.01xx (code name &#039;&#039;StoneSteps&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note that if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= What&#039;s New  =&lt;br /&gt;
&lt;br /&gt;
Based on customer feedback, in this release we have made significant performance improvements as well as many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Performance Improvements ==&lt;br /&gt;
&lt;br /&gt;
Specific improvements have been made in the following areas: &lt;br /&gt;
&lt;br /&gt;
*Database loading time has been improved &lt;br /&gt;
*Compile times are now shorter &lt;br /&gt;
*Scripting operations involving function and message payloads now perform better, especially when arrays are involved &lt;br /&gt;
*Runtime performance has been improved by optimizing payload serialization and deserialization operations&lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
&lt;br /&gt;
=== SCL Wizard ===&lt;br /&gt;
&lt;br /&gt;
The SCL Wizard functionality in [[STRIDE Studio]] has been extended so that you can now use the tool to qualify message payloads as well as function payloads. &lt;br /&gt;
&lt;br /&gt;
In addition, the following types of qualifications can now be made: &lt;br /&gt;
&lt;br /&gt;
*For payloads that include function pointers, the SCL Wizard now supports qualifying the pointers as such and identifying candidate function values &lt;br /&gt;
*Type casts can now be specified on payload members&lt;br /&gt;
&lt;br /&gt;
=== Connection Management ===&lt;br /&gt;
&lt;br /&gt;
Connection management has been greatly simplified; software managing connection to the target system has been integrated into [[STRIDE Studio]] so that connections can be managed directly from there. (It is still possible to access connection management functionality without using Studio.) &lt;br /&gt;
&lt;br /&gt;
The Panel program is no longer used, and there is no longer a requirement to load the database to communicate with a remote target. &lt;br /&gt;
&lt;br /&gt;
==== Transport Properties ====&lt;br /&gt;
&lt;br /&gt;
All transport properties can now be accessed via scripts. A new transport scripting model makes this possible.&lt;br /&gt;
&lt;br /&gt;
=== STRIDE Studio Test Runner Improvements ===&lt;br /&gt;
&lt;br /&gt;
The test runner in [[STRIDE Studio]] has incorporated several functional and usability improvements. &lt;br /&gt;
&lt;br /&gt;
*Each runnable script and folder (Suite) in a workspace now has additional properties that allow you to optionally specify a handler script that will be executed in the case of an unhandled error (property OnError) or a timeout (property OnTimeout). A timeout value can be set for each folder.&lt;br /&gt;
&lt;br /&gt;
*Each runnable folder (Suite) in a workspace now has a property (OnRunConnect) that can instruct STRIDE Studio to automatically connect to a target system before the folder is executed.&lt;br /&gt;
&lt;br /&gt;
*The workspace now has a dynamic property (ExecutionState) that allows you to alter the order of script execution at runtime.&lt;br /&gt;
&lt;br /&gt;
=== New Frameworks Feature ===&lt;br /&gt;
&lt;br /&gt;
This version introduces [[Using Frameworks|Target Frameworks]], which provide customizable templates for workspace creation. The use of frameworks simplifies the use of STRIDE and ensures consistency across a development team. &lt;br /&gt;
&lt;br /&gt;
Several [[Provided Frameworks|reference frameworks]] are included in this release, supporting the following target environments: &lt;br /&gt;
&lt;br /&gt;
*[[Provided Frameworks#Windows|Windows]] &lt;br /&gt;
*[[Provided Frameworks#Linux|Linux]] &lt;br /&gt;
*[[Provided Frameworks#WinMobile|WinMobile]] &lt;br /&gt;
*[[Provided Frameworks#Generic|Generic]]&lt;br /&gt;
&lt;br /&gt;
[[Using Packages|Packages]] are also introduced. These provide a convenient way to encapsulate SCL-annotated source code and corresponding tests for a set of interfaces. &lt;br /&gt;
&lt;br /&gt;
=== Uploading Results to STRIDE Portal ===&lt;br /&gt;
&lt;br /&gt;
Uploading test results from STRIDE Reporter to STRIDE Portal has been integrated into STRIDE Studio. Portal&#039;s server information can be configured from Studio&#039;s workspace properties while uploading results to Portal can be enabled or disabled via workspace context menu. If enabled, after running the workspace, a script folder or a script file, results in Report file will automatically be uploaded to the configured server. &lt;br /&gt;
&lt;br /&gt;
== Build Tools  ==&lt;br /&gt;
&lt;br /&gt;
A set of new command line [[Build Tools]] has been implemented: &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Stride compiler&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride database binder&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride instrumentation generator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
These utilities has been ported for Windows and Linux. Using them would allow seamless integration with a &amp;quot;make&amp;quot; build environment.&lt;br /&gt;
&lt;br /&gt;
== Target-Based Testing  ==&lt;br /&gt;
&lt;br /&gt;
Target-based (xUnit-style) testing has been simplified. The new set of SCL pragmas [[Test Units]] can now be included in a source file to tell the compiler and IM generator to automatically create test harnessing code.&lt;br /&gt;
&lt;br /&gt;
The automation components STRIDE.testclass, STRIDE.testunit and STRIDE.testfunction are removed.&lt;br /&gt;
&lt;br /&gt;
== Runtime/PAL  ==&lt;br /&gt;
&lt;br /&gt;
Based on customer requirements, in this release we have made significant changes to [[Target_Integration#The STRIDE Runtime|STRIDE Runtime]] and [[Target_Integration#The Platform Abstraction Layer (PAL)|PAL]]. &lt;br /&gt;
&lt;br /&gt;
=== Multi-Process Targets  ===&lt;br /&gt;
&lt;br /&gt;
New routines and support have been added to Runtime and PAL to support multi-process targets. Changes include: implementation of memory management and shared memory, protecting using named Mutex objects, synchronization of multiple processors and multiple threads, and usage of current process and thread IDs.&lt;br /&gt;
&lt;br /&gt;
=== Logging (Optional)  ===&lt;br /&gt;
&lt;br /&gt;
Runtime and PAL use a logging routine that can optionally be implemented in PAL. &lt;br /&gt;
&lt;br /&gt;
== Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
A new [[Windows_Off-Target_SDK|SDK]] for implemention of Off-Target applications on Windows has been packaged. It contains a library (s2srWin.dll/lib) in which the Windows PAL, Runtime, and GRS and a set of utility scripts are prebuilt. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;s2shostapphrt&#039;&#039;&#039; library, a prebuilt verion of the Host Runtime, has been removed. Building Windows applications using the Host Runtime is not supported anymore. The &#039;&#039;&#039;s2shostapptrt&#039;&#039;&#039; library, a prebuilt version of the Target Runtime, has also been removed. &lt;br /&gt;
&lt;br /&gt;
If an upgrade is performed it is strongly recommended that the above mentioned &#039;&#039;&#039;s2shostapp*&#039;&#039;&#039; libraries and their public API header (hostapp.h) be manually removed.&lt;br /&gt;
&lt;br /&gt;
= Support Wiki =&lt;br /&gt;
&lt;br /&gt;
This support wiki http://support.s2technologies.com is introduced with this version. You can navigate here from your web browser, or directly from STRIDE Studio; a link is provided in the Help menu. &lt;br /&gt;
&lt;br /&gt;
== STRIDE Samples  ==&lt;br /&gt;
&lt;br /&gt;
We have created a set of [[Samples_Overview|sample workspaces]] to aid in the evaluation of STRIDE, or as a tool for learning how to apply STRIDE to different testing scenarios. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to STRIDE, or want to learn more about using the product, this is a great place to start.&lt;br /&gt;
&lt;br /&gt;
= Acquiring the Software =&lt;br /&gt;
&lt;br /&gt;
You can download the latest release from the S2 Technologies ftp site: ftp://ftp.s2technologies.com &lt;br /&gt;
&lt;br /&gt;
To run STRIDE you will need a license. If you are not yet a customer of S2 and would like to obtain an evaluation license, email [mailto:sales@s2technologies.com S2 Sales] or call our offices at &#039;&#039;&#039;760-635-2345&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
= Installing the Software  =&lt;br /&gt;
&lt;br /&gt;
To install STRIDE for the first time, or as an upgrade to an existing installation, please refer to [[Host Installation]]. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note: if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you are new to STRIDE, we recommend that you investigate the [[Samples_Overview|New STRIDE Samples]].&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;ascript&#039;&#039;&#039; API has been changed to be more robust: &lt;br /&gt;
**Certain deprecated methods have been eliminated. &lt;br /&gt;
**Some existing API methods have been modifed. &lt;br /&gt;
**The event model has been improved to allow greater script control.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Some scripts must be modified from previous versions of STRIDE to work successfully with 3.0.01xx. The necessary changes are detailed in the [[#Migration_to_3.0.01xx|Migration to 3.0.01xx]] section below. &lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;Panel&#039;&#039;&#039; object is no longer available to scripts; its functionality has been moved under the &#039;&#039;&#039;studio&#039;&#039;&#039; object model. You can access this new functionality as &#039;&#039;&#039;studio.Connection&#039;&#039;&#039;, however if you were formerly scripting the &#039;&#039;&#039;Panel&#039;&#039;&#039; object, you may find it is no longer necessary since: &lt;br /&gt;
**You can now configure your connection properties from within STRIDE Studio (from the menu select &#039;&#039;Tools/Target Connectivity&#039;&#039;) &lt;br /&gt;
**You can now set a workspace folder property to autoconnect upon execution&lt;br /&gt;
&lt;br /&gt;
*Zero is now allowed as the maximum size under certain circumstances in &#039;&#039;&#039;scl_string&#039;&#039;&#039; and &#039;&#039;&#039;scl_ptr_sized&#039;&#039;&#039;. Details of these circumstances are contained in the &#039;&#039;&#039;[[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]]&#039;&#039;&#039; document.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compiler.MicrosoftCompatibility&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Compiler.Compatibility&#039;&#039;&#039;. Valid values are &amp;quot;Generic&amp;quot; (generic mode), &amp;quot;Microsoft&amp;quot; (Microsoft compatibility), or &amp;quot;Gnu&amp;quot; (Gnu or Gcc compatibility).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compile()&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Build()&#039;&#039;&#039;. Also new methods, &#039;&#039;&#039;studio.Workspace.CleanBuild()&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.ReloadDatabase()&#039;&#039;&#039;, have been added.&lt;br /&gt;
&lt;br /&gt;
*A new property, &#039;&#039;&#039;Output&#039;&#039;&#039;, has been added off the studio object. This property outputs text to the Studio message tab, similar to how &#039;&#039;&#039;ascript.MessageBox()&#039;&#039;&#039; works for certain scripts. This property contains one method, &#039;&#039;&#039;PrintMessage(String msg)&#039;&#039;&#039;. You can see an example of its use [[Debugging Helps|here]].&lt;br /&gt;
&lt;br /&gt;
*A new settings group has been introduced - &#039;&#039;&#039;studio.Workspace.Settings.Build&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Intercept.Path&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Intercept.SourcePath&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.Intercept.HeaderPath&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Fixes  ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This section describes defects which have been corrected in STRIDE and the customer tracking number associated with them, if any, in brackets [].&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*[1055] Not able to specifiy uppercase include directory &lt;br /&gt;
*[1163] Certain cases of array of pointers to discriminated unions that were not handled correctly in the ascript object have been fixed. &lt;br /&gt;
*[1357] The ascript &#039;&#039;&#039;Call()&#039;&#039;&#039; method, when used with RspTimeoutPeriod, only returns True if a timeout has occurred. &lt;br /&gt;
*[1469] Global casting using &#039;&#039;&#039;scl_cast&#039;&#039;&#039; no longer causes an intercept module compile error. &lt;br /&gt;
*[1539] &#039;&#039;&#039;ascript&#039;&#039;&#039; no longer returns &amp;quot;undefined&amp;quot; when calling &#039;&#039;&#039;function.ReturnValue&#039;&#039;&#039; when the captured function returns an unqualified function pointer. &lt;br /&gt;
*[1543] IM source file locations added to studio UI and automation &lt;br /&gt;
*[1564] The Studio Add files dialog has been increased from 2K bytes to 100K bytes, to allow for more files to be selected at a time. &lt;br /&gt;
*[1586] Support for Variadic Macros &lt;br /&gt;
*[1597] EDGFront crash for scl_ptr_opaque &lt;br /&gt;
*[1600] Pre-processor treats constant 1 always as 8-bit &lt;br /&gt;
*[1605] Generated Perl script generates error when run in debugger &lt;br /&gt;
*The following statement in Runtime files &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; has been changed:&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args = 0;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;is now&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt; with no initializer. This makes it portable and able to compile under Linux. &lt;br /&gt;
*A macro that determines the existence of &#039;&#039;&#039;vsnprintf()&#039;&#039;&#039; has been updated in &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; in order to make it able to compile with GCC and other non-Microsoft compilers.&amp;lt;br&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; If you are using test functions and C++ test classes, you must be using compilers that support &#039;&#039;&#039;vsnprintf&#039;&#039;&#039; (variable argument lists), which is a standard in C99 and supported in C90. &lt;br /&gt;
*When tracing on a STID it&#039;s possible to display trace information for messages that aren&#039;t captured (i.e. the message&#039;s SMID is not known to STRIDE). A problem could occur when STRIDE attempted to interpret the payload of these messages. This has now been fixed; hex values only are now shown in the trace view for in this situation. &lt;br /&gt;
*Autosense was not working properly in the editor for message payloads. This has been fixed.&lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
=== TestUnits Collection  ===&lt;br /&gt;
&lt;br /&gt;
A new TestUnits collection has been implemented. All test interfaces (specified with [[SCL_Pragmas#Test_Units | Test Unit pragmas]]) will be listed there.&lt;br /&gt;
&lt;br /&gt;
=== Functions Collection  ===&lt;br /&gt;
&lt;br /&gt;
Interfaces specified with either the [[scl_test_class]] or [[scl_test_flist]] pragmas are not listed in the Functions collection anymore. &lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
=== Memory Management  ===&lt;br /&gt;
&lt;br /&gt;
To support multi-process target, memory management support for dynamic, configurable, and internal static memory has been implemented in Runtime. Runtime makes PAL calls to acquire memory segments and manages the memory according to runtime configurations set by user. In case of multi-process target is enabled, these memory will be shared among multiple applications, and PAL should implement shared memory. &lt;br /&gt;
&lt;br /&gt;
=== Protection using Mutex  ===&lt;br /&gt;
&lt;br /&gt;
Runtime now uses named mutex objects to protect critical data from multiple and simultaneous accesses by multiple threads and, in case of multi-process target is enabled, by multiple applications. Runtime makes PAL calls to obtain and control mutex objects. &lt;br /&gt;
&lt;br /&gt;
=== New Routines  ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Memory Management&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In case of multi-process target, recommended approach is to use &amp;lt;u&amp;gt;Memory-Mapped Files&amp;lt;/u&amp;gt; to implement memory segments. &lt;br /&gt;
&lt;br /&gt;
 palMemSegmentOpen() - Open/create memory segment &lt;br /&gt;
 palMemSegmentClose() - Close memory segment&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Named Mutexes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palMutexInit() - Initialize a mutex object&lt;br /&gt;
 palMutexDestroy() - Destroy a mutex object&lt;br /&gt;
 palMutexLock() - Lock a mutex object&lt;br /&gt;
 palMutexUnlock() - Unlock a mutex object&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Task Synchronization&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palGetThreadId() - Get current thread Id&lt;br /&gt;
 palGetProcessId() - Get current process Id&lt;br /&gt;
 palSleep() - Suspend the execution of the current thread&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Logging&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is optional. &lt;br /&gt;
&lt;br /&gt;
 palLog() - Logging utility&lt;br /&gt;
&lt;br /&gt;
=== Updated Routines  ===&lt;br /&gt;
&lt;br /&gt;
*Function signatures and functionalities of palWait() &amp;amp;amp; palNotify() have been updated.&lt;br /&gt;
&lt;br /&gt;
 palWait() - now takes in an in/out pointer for events notification&lt;br /&gt;
 palNotify() - mail box Id has been updated to notify any event including mail box Ids.&lt;br /&gt;
&lt;br /&gt;
*Function signatures of palMemAlloc() &amp;amp;amp; palMemFree() have been updated.&lt;br /&gt;
&lt;br /&gt;
=== Removed Routines  ===&lt;br /&gt;
&lt;br /&gt;
 palProtect&lt;br /&gt;
 palUnprotect&lt;br /&gt;
 palCriticalErr&lt;br /&gt;
&lt;br /&gt;
=== Removed Modules  ===&lt;br /&gt;
&lt;br /&gt;
 S2Mem - The memory module provided as part of PAL has been removed. If a native &lt;br /&gt;
         operating system does not support dynamic memory, the Runtime&#039;s memory &lt;br /&gt;
         management module &#039;&#039;srMem&#039;&#039; can be used instead of &#039;&#039;S2Mem&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
&lt;br /&gt;
*STRIDE Host Release &#039;&#039;&#039;3.0.01xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;. &lt;br /&gt;
*In order to eliminate redundancy and promote an object-oriented design, &amp;quot;Member Methods&amp;quot; have been removed from srTest; only &amp;quot;Member Objects&amp;quot; exist now in srTest. In addition, accessing the functionality of Member Objects in this way is similar to accessing scripting objects through the STRIDE Reporter object model. For a detailed explanation, refer to [[Test_Units#C.2B.2B_Test_Classes|this article]] on the STRIDE Support Wiki. &lt;br /&gt;
*A new routine, &#039;&#039;&#039;srInit()&#039;&#039;&#039;, replaces deprecated &#039;&#039;&#039;srInitialize()&#039;&#039;&#039;. Now the target will not be able to set an auto-connect with timeout. &lt;br /&gt;
*The &#039;&#039;&#039;scl_tp&#039;&#039;&#039; and &#039;&#039;&#039;scl_tp_format&#039;&#039;&#039; pragmas have been deprecated. The new pragmas are &#039;&#039;&#039;scl_tracepoint&#039;&#039;&#039; and &#039;&#039;&#039;scl_tracepoint_format&#039;&#039;&#039;. &lt;br /&gt;
*The default runtime configuration in srcfg.h now has fragmentation turned on. The srCFG_MAX_TRANSPORT_UNIT is set to 2048. &lt;br /&gt;
*Fixed warnings for parameter name differences in function declarations and definitions for srSubscribe(), srTracePoint(), and srQuerySMID(). &lt;br /&gt;
*Removed unnecessary/extra response to srCONNECT_CLOSE_T_SMID message. &lt;br /&gt;
*The Runtime now checks for the connection before responding with a &amp;quot;Pong&amp;quot; upon receiving a &amp;quot;Ping.&amp;quot; &lt;br /&gt;
*Introduced 40 additional system trace points to better describe internal errors. &lt;br /&gt;
*Reporting of the error srERR_SUB_NONE has been suppressed so that it no longer generates a target trace error. &lt;br /&gt;
*Trace views now always display srTraceStr() with reserved STID (srSTID_RESERVED) regardless of trace filter settings. &lt;br /&gt;
*srPtrSetupChild() now accepts NULL for handle (out pointer - pwHandle). &lt;br /&gt;
*Added a new Runtime Test Services (RTS) API &#039;&#039;&#039;srTestCaseSetStatusEx()&#039;&#039;&#039;, which enables the providing of the actual return value of a numeric test method in the case of failure. &lt;br /&gt;
*Added two new public APIs - &amp;quot;Printing&amp;quot; APIs to display messages on Trace Views without having to specify a STID or a trace level and to set any trace filters on Trace Views. These routines support formatted strings with variable arguments. The &#039;&#039;&#039;srPrintInfo()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and Level=3. The &#039;&#039;&#039;srPrintError()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and the Level=1. &#039;&#039;&#039;Warning:&#039;&#039;&#039; These new APIs use vsnprintf() routine to process variable arguments. The vsnprintf() became a standard in C99 and is supported in C90. &lt;br /&gt;
*To support multi-process target, significant changes have been made to runtime. &lt;br /&gt;
*A new public routine, srUninit(), has been added to sr.h &amp;amp;amp; srapi.c. &lt;br /&gt;
* A new public routine for Runtime Thread exit point, srThreadUninit(), has been added to sr.h &amp;amp;amp; srthread.c. &lt;br /&gt;
*A new module, srMem, for Memory Management has been added. Its new routines, _srMem_Allocate() &amp;amp;amp; _srMem_Free(), will be used in PAL&#039;s palMemAlloc() &amp;amp;amp; palMemFree() in case of multi-process target is enabled. &lt;br /&gt;
*Calls to palProtect() &amp;amp;amp; palUnprotect() have been replaced by new routines _srProtect() &amp;amp;amp; _srUnprotect(), in which the implementation uses its own mutex object that calls PAL&#039;s mutex routines. &lt;br /&gt;
*In target Test Classes and Test Functions, added capability to specify the comment label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
* Fixed a potential data abort issue when executing delegate code in the IM prior to Runtime being initialized.&lt;br /&gt;
* Runtime Test Services APIs are now thread safe. &lt;br /&gt;
* Fixed cancelation of remote boadcast subcribtion goes in an infinite loop.&lt;br /&gt;
* Fixed Runtime resource abuse when sending lots of broadcast messages. &lt;br /&gt;
* Added partial check for message payload corectness.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapi.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srconn.h&lt;br /&gt;
 srerr.c&lt;br /&gt;
 srib.c&lt;br /&gt;
 srib.h&lt;br /&gt;
 sribctrl.c&lt;br /&gt;
 sribtr.c&lt;br /&gt;
 sribtr.h&lt;br /&gt;
 srmsgmar.c&lt;br /&gt;
 srmsgptr.c&lt;br /&gt;
 srmsgptr.h&lt;br /&gt;
 srmsgque.c&lt;br /&gt;
 srmsgque.h&lt;br /&gt;
 srmsgrt.c&lt;br /&gt;
 srmsgrt.h&lt;br /&gt;
 srmsgsub.c&lt;br /&gt;
 srmsgsub.h&lt;br /&gt;
 srstid.c&lt;br /&gt;
 srstid.h&lt;br /&gt;
 srsuid.c&lt;br /&gt;
 srsuid.h&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
 srtestutil.c&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srthread.c&lt;br /&gt;
 srthread.h&lt;br /&gt;
 srtime.c&lt;br /&gt;
 srtime.h&lt;br /&gt;
 srtp.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been added:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srmem.c&lt;br /&gt;
 srmem.h&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.01xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
Any use of test classes through the Functions collection, like: &lt;br /&gt;
&lt;br /&gt;
  $main::ascript-&amp;amp;gt;Functions-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;User-&amp;amp;gt;Call(); &lt;br /&gt;
&lt;br /&gt;
should be converted to use the new TestUnits collection: &lt;br /&gt;
&lt;br /&gt;
  $main::ascript-&amp;amp;gt;TestUnits-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;Run(); &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
=== API Changes  ===&lt;br /&gt;
&lt;br /&gt;
*The Support Wiki pages now contain reference help for AutoScript (for details see [[AutoScript#ascript|&#039;&#039;AutoScript API Reference&#039;&#039;]]). &lt;br /&gt;
*All synchronous method calls now throw exceptions in order to indicate error conditions rather than have error conditions encoded in return values. &lt;br /&gt;
*Asychronous method calls never throw exceptions to indicate error conditions. Instead, error conditions are delivered as a new Error object that is returned to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039;. (Asynchronous methods are &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;) &lt;br /&gt;
*If &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; times out, an Error object is returned. Previously NULL was returned in this case. &lt;br /&gt;
*All objects returned by &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; have &#039;&#039;&#039;Type&#039;&#039;&#039; and &#039;&#039;&#039;Name&#039;&#039;&#039; properties. When the &#039;&#039;&#039;Type&#039;&#039;&#039; is “Error”, the Error object has additional properties that contain further details about the error. &lt;br /&gt;
*All existing script syntax for designation of message payloads has been deprecated. A new syntax that allows for greater expression has been adopted. Details can be found [[Updated Message Payload Syntax|here]]. There are no syntax changes to function payloads. &lt;br /&gt;
*The signature for &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; has been changed. Successful calls to &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; now fully initialize the object.&lt;br /&gt;
&lt;br /&gt;
=== End-Of-Life Methods and Properties  ===&lt;br /&gt;
&lt;br /&gt;
This release marks the End-Of-Life (EOL) for the listed methods and properties. A call to any of these methods or an access to any of these properties will now result in a not-implemented exception in the script making the call or access. &lt;br /&gt;
&lt;br /&gt;
*ascript.Quit() &lt;br /&gt;
*ascript.Interfaces &lt;br /&gt;
*ascript.NamedEvents &lt;br /&gt;
*ascript.WaitForEventWithTimeout &lt;br /&gt;
*ascript.RspTimeoutNotifyEnabled &lt;br /&gt;
*ascript.CreateTimer() &lt;br /&gt;
*ascript.DestroyTimer() &lt;br /&gt;
*ascript.WaitTimeoutNotifyEnabled &lt;br /&gt;
*ascript.Compare_As_C_Values() &lt;br /&gt;
*ascript.AsyncErrorNotifyEnabled &lt;br /&gt;
*ascript.Function.Item().User/Owner.SMID&lt;br /&gt;
&lt;br /&gt;
=== Recommended Steps for Migration From a Previous Version  ===&lt;br /&gt;
&lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; in all scripts. Previous logic to test for null indicating timeouts must be modified. &#039;&#039;&#039;WaitForEvent()&#039;&#039;&#039; now always returns an object, in the case of a timeout (or other error) an Error object is returned. &lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.Quit&#039;&#039;&#039; in all scripts. Modify the logic as necessary to exit the script by other means in place of the original &#039;&#039;&#039;Quit()&#039;&#039;&#039; call. &lt;br /&gt;
*Search for all asynchronous method calls (Asynchronous calls are limited to &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;). Modify the logic as necessary to call &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; if errors (including timeout error) should be detected. &lt;br /&gt;
*If you have scripts that explicitly instantiate an &#039;&#039;&#039;ascript&#039;&#039;&#039; object (i.e. they create an object using the &#039;&#039;&#039;&amp;quot;STRIDE.ascript&amp;quot;&#039;&#039;&#039; PROGID), search for all occurrences and modify the subsequent call to &#039;&#039;&#039;ascript.Initialize()&#039;&#039;&#039; to pass the new parameter set. &lt;br /&gt;
*Search for all EOL&#039;d methods and properties. Each can be replaced by setting the appropriate timeout property and handling the timeout error object delivered by WaitForEvent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;Section1&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%; border-collapse: collapse;&amp;quot; class=&amp;quot;MsoTableGrid&amp;quot;&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1pt solid windowtext; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;EOL’d&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Method or Property&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&#039;&#039;&#039;Recommended Replacement&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Quit&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Refactor&amp;lt;/span&amp;gt; script logic to exit the script by other means. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Interfaces&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Functions&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Messages&amp;lt;/span&amp;gt; as appropriate. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.NamedEvents&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitForEventWithTimeout&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() after setting desired timeout using &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitTimeoutPeriod&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.RspTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.CreateTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Add&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.DestroyTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Remove&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Compare_As_C_Values&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.AsyncErrorNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Error notification from asynchronous calls is performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Function.Item&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SMID&amp;lt;/span&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Function.Item&amp;lt;/span&amp;gt;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SUID&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
Please refer to &#039;&#039;&#039;&#039;&#039;Platform Abstraction Layer (PAL) Specification&#039;&#039;&#039;&#039;&#039; for detailed information on new APIs. You may also refer to Linux implementation of PAL, which has been updated with new routines. &lt;br /&gt;
&lt;br /&gt;
*Implement new shared memory routines, palMemSegmentOpen() &amp;amp;amp; palMemSegmentClose(). In case of multi-process target, these routines should implement shared memory using memory-mapped files.&lt;br /&gt;
&lt;br /&gt;
*Runtime now can manage dynamic, configurable, and internal static memory. In case of multi-process target, update palMemAlloc() to simply call _srMem_Allocate() and palMemFree() to simply call _srMem_Free(). In case of single-process target, you can simply allocate dynamic memory according to your Operating System. If you are upgrading, you can simply leave the current implementation as it is.&lt;br /&gt;
&lt;br /&gt;
*Implement new mutex routines, palMutexInit(), palMutexDestroy(), palMutexLock() &amp;amp;amp; palMutexUnlock, to handle any named mutex objects. It is recommended to implement a separate code for shared memory case if it is necessary.&lt;br /&gt;
&lt;br /&gt;
*Remove old routines palProtect(), palUnprotect() and palCriticalErr().&lt;br /&gt;
&lt;br /&gt;
*Implement new routines palGetThreadId() and palGetProcessId().&lt;br /&gt;
&lt;br /&gt;
*Implement new routine palSleep().&lt;br /&gt;
&lt;br /&gt;
*Update synchronization routines, palCreateNID(), palDeleteNID(), palWait() &amp;amp;amp; palNotify(), to support event notifications and in case of multi-process target is enabled, sharing of the synchronization objects among multiple processors.&lt;br /&gt;
&lt;br /&gt;
*If your PAL uses &#039;&#039;S2Mem&#039;&#039; routines for dynamic memory, you should use new Runtime module &#039;&#039;srMem&#039;&#039;. Update palMemAlloc() to call _srMem_Allocate() and palMemFree() to call _srMem_Free().&lt;br /&gt;
&lt;br /&gt;
*Optionally, implement new routine palLog() as a logging utility for PAL and Runtime.&lt;br /&gt;
&lt;br /&gt;
== Runtime  ==&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new memory management (srCFG_MEMORY_MANAGEMENT) and multi-process target (srCFG_MULTI_PROC_TARGET) settings. By default, memory management and multi-process target are disabled. If you enable multi-process target you also need to enable memory management and configure the sizes and the maximum number of memory blocks. New Runtime module &#039;&#039;srMem&#039;&#039; uses these configurations to allocate and manage memory segments.&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new target connection timeout setting (srCFG_CONNECTION_TIMEOUT).&lt;br /&gt;
&lt;br /&gt;
*If target Test Classes and Test Functions are used, change the signature to include test label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
&lt;br /&gt;
== Windows Applications using Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
*The new &#039;&#039;&#039;s2srwin.lib&#039;&#039;&#039; has public API, published in a header srwin.h, containing the following set of routines:&lt;br /&gt;
&lt;br /&gt;
 srWin_SetMaster() - Sets the application as the master and initializes the Stride Runtime thread. In a multi-process environment only one application should make this call.&lt;br /&gt;
 srWin_AddThread() - Adds additional message processing threads to the application.&lt;br /&gt;
 srWin_Run() - Starts the processing and will not return until it has been signaled via keyboard key or CTRL-C.&lt;br /&gt;
 srWin_SetPortTCP() - Overrides the TCP port number (default: 8000) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
 srWin_SetPortSerial() - Overrides the COM port number (default: 1) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
&lt;br /&gt;
*Existing Host Apps developed against the old hostapphrt and hostapptrt libraries should be updated to as follows: &lt;br /&gt;
**replace the include of hostapp.h with include of srwin.h &lt;br /&gt;
**replace all calls to HostAppXXX() with srWin_XXX() &lt;br /&gt;
**call srWin_SetMaster() to start the runtime thread, srThread, before calling srWin_Run(). Within a multi-process target, only one process (the master) calls this routine.&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;a&amp;quot; ==&lt;br /&gt;
* Linux version of the STRIDE [[Build Tools]] is officially introduced.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;b&amp;quot; ==&lt;br /&gt;
* Relaxed [[scl_cast]]() pragma to allow cast from any integral ptr to union of ptrs&lt;br /&gt;
* Fixed compile warnings in Linux PAL.&lt;br /&gt;
* Fixed issue in instrumentation of [[Test Units]].&lt;br /&gt;
* Fixed issue with UNC paths.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0102 ==&lt;br /&gt;
* Implemented new licensing scheme. Existing licenses will not work anymore and need to be reissued. Old and new licenses could co-exist at the same location.&lt;br /&gt;
* The syntax of [[scl_ptr]] and [[scl_ptr_sized]] pragmas has changed. Now it is required to quote the direction and usage attributes. See this [[Handling_of_pointer_attribute_tokens|page]] for details.&lt;br /&gt;
* [[Test_Units#Runtime_Test_Services|Runtime Test Services]] now support adding annotations per test suite.&lt;br /&gt;
* A complete set of [[Samples]] has been implemented.&lt;br /&gt;
* Fixed several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Fixed several minor issues in [[AutoScript]]. &lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0102&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039; and &#039;&#039;&#039;3.01&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8122</id>
		<title>STRIDE 3.0.01xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8122"/>
		<updated>2008-10-15T23:58:52Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* API Changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Release Notes&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
This page documents the changes in STRIDE version 3.0.01xx (code name &#039;&#039;StoneSteps&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note that if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= What&#039;s New  =&lt;br /&gt;
&lt;br /&gt;
Based on customer feedback, in this release we have made significant performance improvements as well as many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Performance Improvements ==&lt;br /&gt;
&lt;br /&gt;
Specific improvements have been made in the following areas: &lt;br /&gt;
&lt;br /&gt;
*Database loading time has been improved &lt;br /&gt;
*Compile times are now shorter &lt;br /&gt;
*Scripting operations involving function and message payloads now perform better, especially when arrays are involved &lt;br /&gt;
*Runtime performance has been improved by optimizing payload serialization and deserialization operations&lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
&lt;br /&gt;
=== SCL Wizard ===&lt;br /&gt;
&lt;br /&gt;
The SCL Wizard functionality in [[STRIDE Studio]] has been extended so that you can now use the tool to qualify message payloads as well as function payloads. &lt;br /&gt;
&lt;br /&gt;
In addition, the following types of qualifications can now be made: &lt;br /&gt;
&lt;br /&gt;
*For payloads that include function pointers, the SCL Wizard now supports qualifying the pointers as such and identifying candidate function values &lt;br /&gt;
*Type casts can now be specified on payload members&lt;br /&gt;
&lt;br /&gt;
=== Connection Management ===&lt;br /&gt;
&lt;br /&gt;
Connection management has been greatly simplified; software managing connection to the target system has been integrated into [[STRIDE Studio]] so that connections can be managed directly from there. (It is still possible to access connection management functionality without using Studio.) &lt;br /&gt;
&lt;br /&gt;
The Panel program is no longer used, and there is no longer a requirement to load the database to communicate with a remote target. &lt;br /&gt;
&lt;br /&gt;
==== Transport Properties ====&lt;br /&gt;
&lt;br /&gt;
All transport properties can now be accessed via scripts. A new transport scripting model makes this possible.&lt;br /&gt;
&lt;br /&gt;
=== STRIDE Studio Test Runner Improvements ===&lt;br /&gt;
&lt;br /&gt;
The test runner in [[STRIDE Studio]] has incorporated several functional and usability improvements. &lt;br /&gt;
&lt;br /&gt;
*Each runnable script and folder (Suite) in a workspace now has additional properties that allow you to optionally specify a handler script that will be executed in the case of an unhandled error (property OnError) or a timeout (property OnTimeout). A timeout value can be set for each folder.&lt;br /&gt;
&lt;br /&gt;
*Each runnable folder (Suite) in a workspace now has a property (OnRunConnect) that can instruct STRIDE Studio to automatically connect to a target system before the folder is executed.&lt;br /&gt;
&lt;br /&gt;
*The workspace now has a dynamic property (ExecutionState) that allows you to alter the order of script execution at runtime.&lt;br /&gt;
&lt;br /&gt;
=== New Frameworks Feature ===&lt;br /&gt;
&lt;br /&gt;
This version introduces [[Using Frameworks|Target Frameworks]], which provide customizable templates for workspace creation. The use of frameworks simplifies the use of STRIDE and ensures consistency across a development team. &lt;br /&gt;
&lt;br /&gt;
Several [[Provided Frameworks|reference frameworks]] are included in this release, supporting the following target environments: &lt;br /&gt;
&lt;br /&gt;
*[[Provided Frameworks#Windows|Windows]] &lt;br /&gt;
*[[Provided Frameworks#Linux|Linux]] &lt;br /&gt;
*[[Provided Frameworks#WinMobile|WinMobile]] &lt;br /&gt;
*[[Provided Frameworks#Generic|Generic]]&lt;br /&gt;
&lt;br /&gt;
[[Using Packages|Packages]] are also introduced. These provide a convenient way to encapsulate SCL-annotated source code and corresponding tests for a set of interfaces. &lt;br /&gt;
&lt;br /&gt;
=== Uploading Results to STRIDE Portal ===&lt;br /&gt;
&lt;br /&gt;
Uploading test results from STRIDE Reporter to STRIDE Portal has been integrated into STRIDE Studio. Portal&#039;s server information can be configured from Studio&#039;s workspace properties while uploading results to Portal can be enabled or disabled via workspace context menu. If enabled, after running the workspace, a script folder or a script file, results in Report file will automatically be uploaded to the configured server. &lt;br /&gt;
&lt;br /&gt;
== Build Tools  ==&lt;br /&gt;
&lt;br /&gt;
A set of new command line [[Build Tools]] has been implemented: &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Stride compiler&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride database binder&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride instrumentation generator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
These utilities has been ported for Windows and Linux. Using them would allow seamless integration with a &amp;quot;make&amp;quot; build environment.&lt;br /&gt;
&lt;br /&gt;
== Target-Based Testing  ==&lt;br /&gt;
&lt;br /&gt;
Target-based (xUnit-style) testing has been simplified. The new set of SCL pragmas [[Test Units]] can now be included in a source file to tell the compiler and IM generator to automatically create test harnessing code.&lt;br /&gt;
&lt;br /&gt;
The automation components STRIDE.testclass, STRIDE.testunit and STRIDE.testfunction are removed.&lt;br /&gt;
&lt;br /&gt;
== Runtime/PAL  ==&lt;br /&gt;
&lt;br /&gt;
Based on customer requirements, in this release we have made significant changes to [[Target_Integration#The STRIDE Runtime|STRIDE Runtime]] and [[Target_Integration#The Platform Abstraction Layer (PAL)|PAL]]. &lt;br /&gt;
&lt;br /&gt;
=== Multi-Process Targets  ===&lt;br /&gt;
&lt;br /&gt;
New routines and support have been added to Runtime and PAL to support multi-process targets. Changes include: implementation of memory management and shared memory, protecting using named Mutex objects, synchronization of multiple processors and multiple threads, and usage of current process and thread IDs.&lt;br /&gt;
&lt;br /&gt;
=== Logging (Optional)  ===&lt;br /&gt;
&lt;br /&gt;
Runtime and PAL use a logging routine that can optionally be implemented in PAL. &lt;br /&gt;
&lt;br /&gt;
== Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
A new [[Windows_Off-Target_SDK|SDK]] for implemention of Off-Target applications on Windows has been packaged. It contains a library (s2srWin.dll/lib) in which the Windows PAL, Runtime, and GRS and a set of utility scripts are prebuilt. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;s2shostapphrt&#039;&#039;&#039; library, a prebuilt verion of the Host Runtime, has been removed. Building Windows applications using the Host Runtime is not supported anymore. The &#039;&#039;&#039;s2shostapptrt&#039;&#039;&#039; library, a prebuilt version of the Target Runtime, has also been removed. &lt;br /&gt;
&lt;br /&gt;
If an upgrade is performed it is strongly recommended that the above mentioned &#039;&#039;&#039;s2shostapp*&#039;&#039;&#039; libraries and their public API header (hostapp.h) be manually removed.&lt;br /&gt;
&lt;br /&gt;
= Support Wiki =&lt;br /&gt;
&lt;br /&gt;
This support wiki http://support.s2technologies.com is introduced with this version. You can navigate here from your web browser, or directly from STRIDE Studio; a link is provided in the Help menu. &lt;br /&gt;
&lt;br /&gt;
== STRIDE Samples  ==&lt;br /&gt;
&lt;br /&gt;
We have created a set of [[Samples_Overview|sample workspaces]] to aid in the evaluation of STRIDE, or as a tool for learning how to apply STRIDE to different testing scenarios. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to STRIDE, or want to learn more about using the product, this is a great place to start.&lt;br /&gt;
&lt;br /&gt;
= Acquiring the Software =&lt;br /&gt;
&lt;br /&gt;
You can download the latest release from the S2 Technologies ftp site: ftp://ftp.s2technologies.com &lt;br /&gt;
&lt;br /&gt;
To run STRIDE you will need a license. If you are not yet a customer of S2 and would like to obtain an evaluation license, email [mailto:sales@s2technologies.com S2 Sales] or call our offices at &#039;&#039;&#039;760-635-2345&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
= Installing the Software  =&lt;br /&gt;
&lt;br /&gt;
To install STRIDE for the first time, or as an upgrade to an existing installation, please refer to [[Host Installation]]. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note: if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you are new to STRIDE, we recommend that you investigate the [[Samples_Overview|New STRIDE Samples]].&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;ascript&#039;&#039;&#039; API has been changed to be more robust: &lt;br /&gt;
**Certain deprecated methods have been eliminated. &lt;br /&gt;
**Some existing API methods have been modifed. &lt;br /&gt;
**The event model has been improved to allow greater script control.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Some scripts must be modified from previous versions of STRIDE to work successfully with 3.0.01xx. The necessary changes are detailed in the [[#Migration_to_3.0.01xx|Migration to 3.0.01xx]] section below. &lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;Panel&#039;&#039;&#039; object is no longer available to scripts; its functionality has been moved under the &#039;&#039;&#039;studio&#039;&#039;&#039; object model. You can access this new functionality as &#039;&#039;&#039;studio.Connection&#039;&#039;&#039;, however if you were formerly scripting the &#039;&#039;&#039;Panel&#039;&#039;&#039; object, you may find it is no longer necessary since: &lt;br /&gt;
**You can now configure your connection properties from within STRIDE Studio (from the menu select &#039;&#039;Tools/Target Connectivity&#039;&#039;) &lt;br /&gt;
**You can now set a workspace folder property to autoconnect upon execution&lt;br /&gt;
&lt;br /&gt;
*Zero is now allowed as the maximum size under certain circumstances in &#039;&#039;&#039;scl_string&#039;&#039;&#039; and &#039;&#039;&#039;scl_ptr_sized&#039;&#039;&#039;. Details of these circumstances are contained in the &#039;&#039;&#039;[[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]]&#039;&#039;&#039; document.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compiler.MicrosoftCompatibility&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Compiler.Compatibility&#039;&#039;&#039;. Valid values are &amp;quot;Generic&amp;quot; (generic mode), &amp;quot;Microsoft&amp;quot; (Microsoft compatibility), or &amp;quot;Gnu&amp;quot; (Gnu or Gcc compatibility).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compile()&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Build()&#039;&#039;&#039;. Also new methods, &#039;&#039;&#039;studio.Workspace.CleanBuild()&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.ReloadDatabase()&#039;&#039;&#039;, have been added.&lt;br /&gt;
&lt;br /&gt;
*A new property, &#039;&#039;&#039;Output&#039;&#039;&#039;, has been added off the studio object. This property outputs text to the Studio message tab, similar to how &#039;&#039;&#039;ascript.MessageBox()&#039;&#039;&#039; works for certain scripts. This property contains one method, &#039;&#039;&#039;PrintMessage(String msg)&#039;&#039;&#039;. You can see an example of its use [[Debugging Helps|here]].&lt;br /&gt;
&lt;br /&gt;
*A new settings group has been introduced - &#039;&#039;&#039;studio.Workspace.Settings.Build&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Intercept.Path&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Intercept.SourcePath&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.Intercept.HeaderPath&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Fixes  ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This section describes defects which have been corrected in STRIDE and the customer tracking number associated with them, if any, in brackets [].&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*[1055] Not able to specifiy uppercase include directory &lt;br /&gt;
*[1163] Certain cases of array of pointers to discriminated unions that were not handled correctly in the ascript object have been fixed. &lt;br /&gt;
*[1357] The ascript &#039;&#039;&#039;Call()&#039;&#039;&#039; method, when used with RspTimeoutPeriod, only returns True if a timeout has occurred. &lt;br /&gt;
*[1469] Global casting using &#039;&#039;&#039;scl_cast&#039;&#039;&#039; no longer causes an intercept module compile error. &lt;br /&gt;
*[1539] &#039;&#039;&#039;ascript&#039;&#039;&#039; no longer returns &amp;quot;undefined&amp;quot; when calling &#039;&#039;&#039;function.ReturnValue&#039;&#039;&#039; when the captured function returns an unqualified function pointer. &lt;br /&gt;
*[1543] IM source file locations added to studio UI and automation &lt;br /&gt;
*[1564] The Studio Add files dialog has been increased from 2K bytes to 100K bytes, to allow for more files to be selected at a time. &lt;br /&gt;
*[1586] Support for Variadic Macros &lt;br /&gt;
*[1597] EDGFront crash for scl_ptr_opaque &lt;br /&gt;
*[1600] Pre-processor treats constant 1 always as 8-bit &lt;br /&gt;
*[1605] Generated Perl script generates error when run in debugger &lt;br /&gt;
*The following statement in Runtime files &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; has been changed:&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args = 0;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;is now&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt; with no initializer. This makes it portable and able to compile under Linux. &lt;br /&gt;
*A macro that determines the existence of &#039;&#039;&#039;vsnprintf()&#039;&#039;&#039; has been updated in &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; in order to make it able to compile with GCC and other non-Microsoft compilers.&amp;lt;br&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; If you are using test functions and C++ test classes, you must be using compilers that support &#039;&#039;&#039;vsnprintf&#039;&#039;&#039; (variable argument lists), which is a standard in C99 and supported in C90. &lt;br /&gt;
*When tracing on a STID it&#039;s possible to display trace information for messages that aren&#039;t captured (i.e. the message&#039;s SMID is not known to STRIDE). A problem could occur when STRIDE attempted to interpret the payload of these messages. This has now been fixed; hex values only are now shown in the trace view for in this situation. &lt;br /&gt;
*Autosense was not working properly in the editor for message payloads. This has been fixed.&lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
=== TestUnits Collection  ===&lt;br /&gt;
&lt;br /&gt;
A new TestUnits collection has been implemented. All test interfaces (specified with [[SCL_Pragmas#Test_Units | Test Unit pragmas]]) will be listed there.&lt;br /&gt;
&lt;br /&gt;
=== Functions Collection  ===&lt;br /&gt;
&lt;br /&gt;
Interfaces specified with either the [[scl_test_class]] or [[scl_test_flist]] pragmas are not listed in the Functions collection anymore. &lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
=== Memory Management  ===&lt;br /&gt;
&lt;br /&gt;
To support multi-process target, memory management support for dynamic, configurable, and internal static memory has been implemented in Runtime. Runtime makes PAL calls to acquire memory segments and manages the memory according to runtime configurations set by user. In case of multi-process target is enabled, these memory will be shared among multiple applications, and PAL should implement shared memory. &lt;br /&gt;
&lt;br /&gt;
=== Protection using Mutex  ===&lt;br /&gt;
&lt;br /&gt;
Runtime now uses named mutex objects to protect critical data from multiple and simultaneous accesses by multiple threads and, in case of multi-process target is enabled, by multiple applications. Runtime makes PAL calls to obtain and control mutex objects. &lt;br /&gt;
&lt;br /&gt;
=== New Routines  ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Memory Management&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In case of multi-process target, recommended approach is to use &amp;lt;u&amp;gt;Memory-Mapped Files&amp;lt;/u&amp;gt; to implement memory segments. &lt;br /&gt;
&lt;br /&gt;
 palMemSegmentOpen() - Open/create memory segment &lt;br /&gt;
 palMemSegmentClose() - Close memory segment&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Named Mutexes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palMutexInit() - Initialize a mutex object&lt;br /&gt;
 palMutexDestroy() - Destroy a mutex object&lt;br /&gt;
 palMutexLock() - Lock a mutex object&lt;br /&gt;
 palMutexUnlock() - Unlock a mutex object&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Task Synchronization&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palGetThreadId() - Get current thread Id&lt;br /&gt;
 palGetProcessId() - Get current process Id&lt;br /&gt;
 palSleep() - Suspend the execution of the current thread&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Logging&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is optional. &lt;br /&gt;
&lt;br /&gt;
 palLog() - Logging utility&lt;br /&gt;
&lt;br /&gt;
=== Updated Routines  ===&lt;br /&gt;
&lt;br /&gt;
*Function signatures and functionalities of palWait() &amp;amp;amp; palNotify() have been updated.&lt;br /&gt;
&lt;br /&gt;
 palWait() - now takes in an in/out pointer for events notification&lt;br /&gt;
 palNotify() - mail box Id has been updated to notify any event including mail box Ids.&lt;br /&gt;
&lt;br /&gt;
*Function signatures of palMemAlloc() &amp;amp;amp; palMemFree() have been updated.&lt;br /&gt;
&lt;br /&gt;
=== Removed Routines  ===&lt;br /&gt;
&lt;br /&gt;
 palProtect&lt;br /&gt;
 palUnprotect&lt;br /&gt;
 palCriticalErr&lt;br /&gt;
&lt;br /&gt;
=== Removed Modules  ===&lt;br /&gt;
&lt;br /&gt;
 S2Mem - The memory module provided as part of PAL has been removed. If a native &lt;br /&gt;
         operating system does not support dynamic memory, the Runtime&#039;s memory &lt;br /&gt;
         management module &#039;&#039;srMem&#039;&#039; can be used instead of &#039;&#039;S2Mem&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
&lt;br /&gt;
*STRIDE Host Release &#039;&#039;&#039;3.0.01xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;. &lt;br /&gt;
*In order to eliminate redundancy and promote an object-oriented design, &amp;quot;Member Methods&amp;quot; have been removed from srTest; only &amp;quot;Member Objects&amp;quot; exist now in srTest. In addition, accessing the functionality of Member Objects in this way is similar to accessing scripting objects through the STRIDE Reporter object model. For a detailed explanation, refer to [[Test_Units#C.2B.2B_Test_Classes|this article]] on the STRIDE Support Wiki. &lt;br /&gt;
*A new routine, &#039;&#039;&#039;srInit()&#039;&#039;&#039;, replaces deprecated &#039;&#039;&#039;srInitialize()&#039;&#039;&#039;. Now the target will not be able to set an auto-connect with timeout. &lt;br /&gt;
*The &#039;&#039;&#039;scl_tp&#039;&#039;&#039; and &#039;&#039;&#039;scl_tp_format&#039;&#039;&#039; pragmas have been deprecated. The new pragmas are &#039;&#039;&#039;scl_tracepoint&#039;&#039;&#039; and &#039;&#039;&#039;scl_tracepoint_format&#039;&#039;&#039;. &lt;br /&gt;
*The default runtime configuration in srcfg.h now has fragmentation turned on. The srCFG_MAX_TRANSPORT_UNIT is set to 2048. &lt;br /&gt;
*Fixed warnings for parameter name differences in function declarations and definitions for srSubscribe(), srTracePoint(), and srQuerySMID(). &lt;br /&gt;
*Removed unnecessary/extra response to srCONNECT_CLOSE_T_SMID message. &lt;br /&gt;
*The Runtime now checks for the connection before responding with a &amp;quot;Pong&amp;quot; upon receiving a &amp;quot;Ping.&amp;quot; &lt;br /&gt;
*Introduced 40 additional system trace points to better describe internal errors. &lt;br /&gt;
*Reporting of the error srERR_SUB_NONE has been suppressed so that it no longer generates a target trace error. &lt;br /&gt;
*Trace views now always display srTraceStr() with reserved STID (srSTID_RESERVED) regardless of trace filter settings. &lt;br /&gt;
*srPtrSetupChild() now accepts NULL for handle (out pointer - pwHandle). &lt;br /&gt;
*Added a new Runtime Test Services (RTS) API &#039;&#039;&#039;srTestCaseSetStatusEx()&#039;&#039;&#039;, which enables the providing of the actual return value of a numeric test method in the case of failure. &lt;br /&gt;
*Added two new public APIs - &amp;quot;Printing&amp;quot; APIs to display messages on Trace Views without having to specify a STID or a trace level and to set any trace filters on Trace Views. These routines support formatted strings with variable arguments. The &#039;&#039;&#039;srPrintInfo()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and Level=3. The &#039;&#039;&#039;srPrintError()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and the Level=1. &#039;&#039;&#039;Warning:&#039;&#039;&#039; These new APIs use vsnprintf() routine to process variable arguments. The vsnprintf() became a standard in C99 and is supported in C90. &lt;br /&gt;
*To support multi-process target, significant changes have been made to runtime. &lt;br /&gt;
*A new public routine, srUninit(), has been added to sr.h &amp;amp;amp; srapi.c. &lt;br /&gt;
* A new public routine for Runtime Thread exit point, srThreadUninit(), has been added to sr.h &amp;amp;amp; srthread.c. &lt;br /&gt;
*A new module, srMem, for Memory Management has been added. Its new routines, _srMem_Allocate() &amp;amp;amp; _srMem_Free(), will be used in PAL&#039;s palMemAlloc() &amp;amp;amp; palMemFree() in case of multi-process target is enabled. &lt;br /&gt;
*Calls to palProtect() &amp;amp;amp; palUnprotect() have been replaced by new routines _srProtect() &amp;amp;amp; _srUnprotect(), in which the implementation uses its own mutex object that calls PAL&#039;s mutex routines. &lt;br /&gt;
*In target Test Classes and Test Functions, added capability to specify the comment label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
* Fixed a potential data abort issue when executing delegate code in the IM prior to Runtime being initialized.&lt;br /&gt;
* Runtime Test Services APIs are now thread safe. &lt;br /&gt;
* Fixed cancelation of remote boadcast subcribtion goes in an infinite loop.&lt;br /&gt;
* Fixed Runtime resource abuse when sending lots of broadcast messages. &lt;br /&gt;
* Added partial check for message payload corectness.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapi.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srconn.h&lt;br /&gt;
 srerr.c&lt;br /&gt;
 srib.c&lt;br /&gt;
 srib.h&lt;br /&gt;
 sribctrl.c&lt;br /&gt;
 sribtr.c&lt;br /&gt;
 sribtr.h&lt;br /&gt;
 srmsgmar.c&lt;br /&gt;
 srmsgptr.c&lt;br /&gt;
 srmsgptr.h&lt;br /&gt;
 srmsgque.c&lt;br /&gt;
 srmsgque.h&lt;br /&gt;
 srmsgrt.c&lt;br /&gt;
 srmsgrt.h&lt;br /&gt;
 srmsgsub.c&lt;br /&gt;
 srmsgsub.h&lt;br /&gt;
 srstid.c&lt;br /&gt;
 srstid.h&lt;br /&gt;
 srsuid.c&lt;br /&gt;
 srsuid.h&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
 srtestutil.c&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srthread.c&lt;br /&gt;
 srthread.h&lt;br /&gt;
 srtime.c&lt;br /&gt;
 srtime.h&lt;br /&gt;
 srtp.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been added:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srmem.c&lt;br /&gt;
 srmem.h&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.01xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
Any use of test classes through the Functions collection, like: &lt;br /&gt;
&lt;br /&gt;
  $main::ascript-&amp;amp;gt;Functions-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;User-&amp;amp;gt;Call(); &lt;br /&gt;
&lt;br /&gt;
should be converted to use the new TestUnits collection: &lt;br /&gt;
&lt;br /&gt;
  $main::ascript-&amp;amp;gt;TestUnits-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;Run(); &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
=== API Changes  ===&lt;br /&gt;
&lt;br /&gt;
*The Support Wiki pages now contain reference help for AutoScript (for details see the [[AutoScript#ascript|&#039;&#039;AutoScript API Reference&#039;&#039;]]). &lt;br /&gt;
*All synchronous method calls now throw exceptions in order to indicate error conditions rather than have error conditions encoded in return values. &lt;br /&gt;
*Asychronous method calls never throw exceptions to indicate error conditions. Instead, error conditions are delivered as a new Error object that is returned to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039;. (Asynchronous methods are &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;) &lt;br /&gt;
*If &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; times out, an Error object is returned. Previously NULL was returned in this case. &lt;br /&gt;
*All objects returned by &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; have &#039;&#039;&#039;Type&#039;&#039;&#039; and &#039;&#039;&#039;Name&#039;&#039;&#039; properties. When the &#039;&#039;&#039;Type&#039;&#039;&#039; is “Error”, the Error object has additional properties that contain further details about the error. &lt;br /&gt;
*All existing script syntax for designation of message payloads has been deprecated. A new syntax that allows for greater expression has been adopted. Details can be found [[Updated Message Payload Syntax|here]]. There are no syntax changes to function payloads. &lt;br /&gt;
*The signature for &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; has been changed. Successful calls to &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; now fully initialize the object.&lt;br /&gt;
&lt;br /&gt;
=== End-Of-Life Methods and Properties  ===&lt;br /&gt;
&lt;br /&gt;
This release marks the End-Of-Life (EOL) for the listed methods and properties. A call to any of these methods or an access to any of these properties will now result in a not-implemented exception in the script making the call or access. &lt;br /&gt;
&lt;br /&gt;
*ascript.Quit() &lt;br /&gt;
*ascript.Interfaces &lt;br /&gt;
*ascript.NamedEvents &lt;br /&gt;
*ascript.WaitForEventWithTimeout &lt;br /&gt;
*ascript.RspTimeoutNotifyEnabled &lt;br /&gt;
*ascript.CreateTimer() &lt;br /&gt;
*ascript.DestroyTimer() &lt;br /&gt;
*ascript.WaitTimeoutNotifyEnabled &lt;br /&gt;
*ascript.Compare_As_C_Values() &lt;br /&gt;
*ascript.AsyncErrorNotifyEnabled &lt;br /&gt;
*ascript.Function.Item().User/Owner.SMID&lt;br /&gt;
&lt;br /&gt;
=== Recommended Steps for Migration From a Previous Version  ===&lt;br /&gt;
&lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; in all scripts. Previous logic to test for null indicating timeouts must be modified. &#039;&#039;&#039;WaitForEvent()&#039;&#039;&#039; now always returns an object, in the case of a timeout (or other error) an Error object is returned. &lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.Quit&#039;&#039;&#039; in all scripts. Modify the logic as necessary to exit the script by other means in place of the original &#039;&#039;&#039;Quit()&#039;&#039;&#039; call. &lt;br /&gt;
*Search for all asynchronous method calls (Asynchronous calls are limited to &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;). Modify the logic as necessary to call &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; if errors (including timeout error) should be detected. &lt;br /&gt;
*If you have scripts that explicitly instantiate an &#039;&#039;&#039;ascript&#039;&#039;&#039; object (i.e. they create an object using the &#039;&#039;&#039;&amp;quot;STRIDE.ascript&amp;quot;&#039;&#039;&#039; PROGID), search for all occurrences and modify the subsequent call to &#039;&#039;&#039;ascript.Initialize()&#039;&#039;&#039; to pass the new parameter set. &lt;br /&gt;
*Search for all EOL&#039;d methods and properties. Each can be replaced by setting the appropriate timeout property and handling the timeout error object delivered by WaitForEvent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;Section1&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%; border-collapse: collapse;&amp;quot; class=&amp;quot;MsoTableGrid&amp;quot;&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1pt solid windowtext; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;EOL’d&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Method or Property&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&#039;&#039;&#039;Recommended Replacement&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Quit&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Refactor&amp;lt;/span&amp;gt; script logic to exit the script by other means. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Interfaces&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Functions&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Messages&amp;lt;/span&amp;gt; as appropriate. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.NamedEvents&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitForEventWithTimeout&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() after setting desired timeout using &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitTimeoutPeriod&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.RspTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.CreateTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Add&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.DestroyTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Remove&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Compare_As_C_Values&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.AsyncErrorNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Error notification from asynchronous calls is performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Function.Item&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SMID&amp;lt;/span&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Function.Item&amp;lt;/span&amp;gt;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SUID&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
Please refer to &#039;&#039;&#039;&#039;&#039;Platform Abstraction Layer (PAL) Specification&#039;&#039;&#039;&#039;&#039; for detailed information on new APIs. You may also refer to Linux implementation of PAL, which has been updated with new routines. &lt;br /&gt;
&lt;br /&gt;
*Implement new shared memory routines, palMemSegmentOpen() &amp;amp;amp; palMemSegmentClose(). In case of multi-process target, these routines should implement shared memory using memory-mapped files.&lt;br /&gt;
&lt;br /&gt;
*Runtime now can manage dynamic, configurable, and internal static memory. In case of multi-process target, update palMemAlloc() to simply call _srMem_Allocate() and palMemFree() to simply call _srMem_Free(). In case of single-process target, you can simply allocate dynamic memory according to your Operating System. If you are upgrading, you can simply leave the current implementation as it is.&lt;br /&gt;
&lt;br /&gt;
*Implement new mutex routines, palMutexInit(), palMutexDestroy(), palMutexLock() &amp;amp;amp; palMutexUnlock, to handle any named mutex objects. It is recommended to implement a separate code for shared memory case if it is necessary.&lt;br /&gt;
&lt;br /&gt;
*Remove old routines palProtect(), palUnprotect() and palCriticalErr().&lt;br /&gt;
&lt;br /&gt;
*Implement new routines palGetThreadId() and palGetProcessId().&lt;br /&gt;
&lt;br /&gt;
*Implement new routine palSleep().&lt;br /&gt;
&lt;br /&gt;
*Update synchronization routines, palCreateNID(), palDeleteNID(), palWait() &amp;amp;amp; palNotify(), to support event notifications and in case of multi-process target is enabled, sharing of the synchronization objects among multiple processors.&lt;br /&gt;
&lt;br /&gt;
*If your PAL uses &#039;&#039;S2Mem&#039;&#039; routines for dynamic memory, you should use new Runtime module &#039;&#039;srMem&#039;&#039;. Update palMemAlloc() to call _srMem_Allocate() and palMemFree() to call _srMem_Free().&lt;br /&gt;
&lt;br /&gt;
*Optionally, implement new routine palLog() as a logging utility for PAL and Runtime.&lt;br /&gt;
&lt;br /&gt;
== Runtime  ==&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new memory management (srCFG_MEMORY_MANAGEMENT) and multi-process target (srCFG_MULTI_PROC_TARGET) settings. By default, memory management and multi-process target are disabled. If you enable multi-process target you also need to enable memory management and configure the sizes and the maximum number of memory blocks. New Runtime module &#039;&#039;srMem&#039;&#039; uses these configurations to allocate and manage memory segments.&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new target connection timeout setting (srCFG_CONNECTION_TIMEOUT).&lt;br /&gt;
&lt;br /&gt;
*If target Test Classes and Test Functions are used, change the signature to include test label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
&lt;br /&gt;
== Windows Applications using Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
*The new &#039;&#039;&#039;s2srwin.lib&#039;&#039;&#039; has public API, published in a header srwin.h, containing the following set of routines:&lt;br /&gt;
&lt;br /&gt;
 srWin_SetMaster() - Sets the application as the master and initializes the Stride Runtime thread. In a multi-process environment only one application should make this call.&lt;br /&gt;
 srWin_AddThread() - Adds additional message processing threads to the application.&lt;br /&gt;
 srWin_Run() - Starts the processing and will not return until it has been signaled via keyboard key or CTRL-C.&lt;br /&gt;
 srWin_SetPortTCP() - Overrides the TCP port number (default: 8000) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
 srWin_SetPortSerial() - Overrides the COM port number (default: 1) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
&lt;br /&gt;
*Existing Host Apps developed against the old hostapphrt and hostapptrt libraries should be updated to as follows: &lt;br /&gt;
**replace the include of hostapp.h with include of srwin.h &lt;br /&gt;
**replace all calls to HostAppXXX() with srWin_XXX() &lt;br /&gt;
**call srWin_SetMaster() to start the runtime thread, srThread, before calling srWin_Run(). Within a multi-process target, only one process (the master) calls this routine.&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;a&amp;quot; ==&lt;br /&gt;
* Linux version of the STRIDE [[Build Tools]] is officially introduced.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;b&amp;quot; ==&lt;br /&gt;
* Relaxed [[scl_cast]]() pragma to allow cast from any integral ptr to union of ptrs&lt;br /&gt;
* Fixed compile warnings in Linux PAL.&lt;br /&gt;
* Fixed issue in instrumentation of [[Test Units]].&lt;br /&gt;
* Fixed issue with UNC paths.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0102 ==&lt;br /&gt;
* Implemented new licensing scheme. Existing licenses will not work anymore and need to be reissued. Old and new licenses could co-exist at the same location.&lt;br /&gt;
* The syntax of [[scl_ptr]] and [[scl_ptr_sized]] pragmas has changed. Now it is required to quote the direction and usage attributes. See this [[Handling_of_pointer_attribute_tokens|page]] for details.&lt;br /&gt;
* [[Test_Units#Runtime_Test_Services|Runtime Test Services]] now support adding annotations per test suite.&lt;br /&gt;
* A complete set of [[Samples]] has been implemented.&lt;br /&gt;
* Fixed several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Fixed several minor issues in [[AutoScript]]. &lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0102&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039; and &#039;&#039;&#039;3.01&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8121</id>
		<title>STRIDE 3.0.01xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8121"/>
		<updated>2008-10-15T23:58:15Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* API Changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Release Notes&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
This page documents the changes in STRIDE version 3.0.01xx (code name &#039;&#039;StoneSteps&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note that if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= What&#039;s New  =&lt;br /&gt;
&lt;br /&gt;
Based on customer feedback, in this release we have made significant performance improvements as well as many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Performance Improvements ==&lt;br /&gt;
&lt;br /&gt;
Specific improvements have been made in the following areas: &lt;br /&gt;
&lt;br /&gt;
*Database loading time has been improved &lt;br /&gt;
*Compile times are now shorter &lt;br /&gt;
*Scripting operations involving function and message payloads now perform better, especially when arrays are involved &lt;br /&gt;
*Runtime performance has been improved by optimizing payload serialization and deserialization operations&lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
&lt;br /&gt;
=== SCL Wizard ===&lt;br /&gt;
&lt;br /&gt;
The SCL Wizard functionality in [[STRIDE Studio]] has been extended so that you can now use the tool to qualify message payloads as well as function payloads. &lt;br /&gt;
&lt;br /&gt;
In addition, the following types of qualifications can now be made: &lt;br /&gt;
&lt;br /&gt;
*For payloads that include function pointers, the SCL Wizard now supports qualifying the pointers as such and identifying candidate function values &lt;br /&gt;
*Type casts can now be specified on payload members&lt;br /&gt;
&lt;br /&gt;
=== Connection Management ===&lt;br /&gt;
&lt;br /&gt;
Connection management has been greatly simplified; software managing connection to the target system has been integrated into [[STRIDE Studio]] so that connections can be managed directly from there. (It is still possible to access connection management functionality without using Studio.) &lt;br /&gt;
&lt;br /&gt;
The Panel program is no longer used, and there is no longer a requirement to load the database to communicate with a remote target. &lt;br /&gt;
&lt;br /&gt;
==== Transport Properties ====&lt;br /&gt;
&lt;br /&gt;
All transport properties can now be accessed via scripts. A new transport scripting model makes this possible.&lt;br /&gt;
&lt;br /&gt;
=== STRIDE Studio Test Runner Improvements ===&lt;br /&gt;
&lt;br /&gt;
The test runner in [[STRIDE Studio]] has incorporated several functional and usability improvements. &lt;br /&gt;
&lt;br /&gt;
*Each runnable script and folder (Suite) in a workspace now has additional properties that allow you to optionally specify a handler script that will be executed in the case of an unhandled error (property OnError) or a timeout (property OnTimeout). A timeout value can be set for each folder.&lt;br /&gt;
&lt;br /&gt;
*Each runnable folder (Suite) in a workspace now has a property (OnRunConnect) that can instruct STRIDE Studio to automatically connect to a target system before the folder is executed.&lt;br /&gt;
&lt;br /&gt;
*The workspace now has a dynamic property (ExecutionState) that allows you to alter the order of script execution at runtime.&lt;br /&gt;
&lt;br /&gt;
=== New Frameworks Feature ===&lt;br /&gt;
&lt;br /&gt;
This version introduces [[Using Frameworks|Target Frameworks]], which provide customizable templates for workspace creation. The use of frameworks simplifies the use of STRIDE and ensures consistency across a development team. &lt;br /&gt;
&lt;br /&gt;
Several [[Provided Frameworks|reference frameworks]] are included in this release, supporting the following target environments: &lt;br /&gt;
&lt;br /&gt;
*[[Provided Frameworks#Windows|Windows]] &lt;br /&gt;
*[[Provided Frameworks#Linux|Linux]] &lt;br /&gt;
*[[Provided Frameworks#WinMobile|WinMobile]] &lt;br /&gt;
*[[Provided Frameworks#Generic|Generic]]&lt;br /&gt;
&lt;br /&gt;
[[Using Packages|Packages]] are also introduced. These provide a convenient way to encapsulate SCL-annotated source code and corresponding tests for a set of interfaces. &lt;br /&gt;
&lt;br /&gt;
=== Uploading Results to STRIDE Portal ===&lt;br /&gt;
&lt;br /&gt;
Uploading test results from STRIDE Reporter to STRIDE Portal has been integrated into STRIDE Studio. Portal&#039;s server information can be configured from Studio&#039;s workspace properties while uploading results to Portal can be enabled or disabled via workspace context menu. If enabled, after running the workspace, a script folder or a script file, results in Report file will automatically be uploaded to the configured server. &lt;br /&gt;
&lt;br /&gt;
== Build Tools  ==&lt;br /&gt;
&lt;br /&gt;
A set of new command line [[Build Tools]] has been implemented: &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Stride compiler&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride database binder&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride instrumentation generator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
These utilities has been ported for Windows and Linux. Using them would allow seamless integration with a &amp;quot;make&amp;quot; build environment.&lt;br /&gt;
&lt;br /&gt;
== Target-Based Testing  ==&lt;br /&gt;
&lt;br /&gt;
Target-based (xUnit-style) testing has been simplified. The new set of SCL pragmas [[Test Units]] can now be included in a source file to tell the compiler and IM generator to automatically create test harnessing code.&lt;br /&gt;
&lt;br /&gt;
The automation components STRIDE.testclass, STRIDE.testunit and STRIDE.testfunction are removed.&lt;br /&gt;
&lt;br /&gt;
== Runtime/PAL  ==&lt;br /&gt;
&lt;br /&gt;
Based on customer requirements, in this release we have made significant changes to [[Target_Integration#The STRIDE Runtime|STRIDE Runtime]] and [[Target_Integration#The Platform Abstraction Layer (PAL)|PAL]]. &lt;br /&gt;
&lt;br /&gt;
=== Multi-Process Targets  ===&lt;br /&gt;
&lt;br /&gt;
New routines and support have been added to Runtime and PAL to support multi-process targets. Changes include: implementation of memory management and shared memory, protecting using named Mutex objects, synchronization of multiple processors and multiple threads, and usage of current process and thread IDs.&lt;br /&gt;
&lt;br /&gt;
=== Logging (Optional)  ===&lt;br /&gt;
&lt;br /&gt;
Runtime and PAL use a logging routine that can optionally be implemented in PAL. &lt;br /&gt;
&lt;br /&gt;
== Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
A new [[Windows_Off-Target_SDK|SDK]] for implemention of Off-Target applications on Windows has been packaged. It contains a library (s2srWin.dll/lib) in which the Windows PAL, Runtime, and GRS and a set of utility scripts are prebuilt. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;s2shostapphrt&#039;&#039;&#039; library, a prebuilt verion of the Host Runtime, has been removed. Building Windows applications using the Host Runtime is not supported anymore. The &#039;&#039;&#039;s2shostapptrt&#039;&#039;&#039; library, a prebuilt version of the Target Runtime, has also been removed. &lt;br /&gt;
&lt;br /&gt;
If an upgrade is performed it is strongly recommended that the above mentioned &#039;&#039;&#039;s2shostapp*&#039;&#039;&#039; libraries and their public API header (hostapp.h) be manually removed.&lt;br /&gt;
&lt;br /&gt;
= Support Wiki =&lt;br /&gt;
&lt;br /&gt;
This support wiki http://support.s2technologies.com is introduced with this version. You can navigate here from your web browser, or directly from STRIDE Studio; a link is provided in the Help menu. &lt;br /&gt;
&lt;br /&gt;
== STRIDE Samples  ==&lt;br /&gt;
&lt;br /&gt;
We have created a set of [[Samples_Overview|sample workspaces]] to aid in the evaluation of STRIDE, or as a tool for learning how to apply STRIDE to different testing scenarios. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to STRIDE, or want to learn more about using the product, this is a great place to start.&lt;br /&gt;
&lt;br /&gt;
= Acquiring the Software =&lt;br /&gt;
&lt;br /&gt;
You can download the latest release from the S2 Technologies ftp site: ftp://ftp.s2technologies.com &lt;br /&gt;
&lt;br /&gt;
To run STRIDE you will need a license. If you are not yet a customer of S2 and would like to obtain an evaluation license, email [mailto:sales@s2technologies.com S2 Sales] or call our offices at &#039;&#039;&#039;760-635-2345&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
= Installing the Software  =&lt;br /&gt;
&lt;br /&gt;
To install STRIDE for the first time, or as an upgrade to an existing installation, please refer to [[Host Installation]]. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note: if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you are new to STRIDE, we recommend that you investigate the [[Samples_Overview|New STRIDE Samples]].&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;ascript&#039;&#039;&#039; API has been changed to be more robust: &lt;br /&gt;
**Certain deprecated methods have been eliminated. &lt;br /&gt;
**Some existing API methods have been modifed. &lt;br /&gt;
**The event model has been improved to allow greater script control.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Some scripts must be modified from previous versions of STRIDE to work successfully with 3.0.01xx. The necessary changes are detailed in the [[#Migration_to_3.0.01xx|Migration to 3.0.01xx]] section below. &lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;Panel&#039;&#039;&#039; object is no longer available to scripts; its functionality has been moved under the &#039;&#039;&#039;studio&#039;&#039;&#039; object model. You can access this new functionality as &#039;&#039;&#039;studio.Connection&#039;&#039;&#039;, however if you were formerly scripting the &#039;&#039;&#039;Panel&#039;&#039;&#039; object, you may find it is no longer necessary since: &lt;br /&gt;
**You can now configure your connection properties from within STRIDE Studio (from the menu select &#039;&#039;Tools/Target Connectivity&#039;&#039;) &lt;br /&gt;
**You can now set a workspace folder property to autoconnect upon execution&lt;br /&gt;
&lt;br /&gt;
*Zero is now allowed as the maximum size under certain circumstances in &#039;&#039;&#039;scl_string&#039;&#039;&#039; and &#039;&#039;&#039;scl_ptr_sized&#039;&#039;&#039;. Details of these circumstances are contained in the &#039;&#039;&#039;[[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]]&#039;&#039;&#039; document.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compiler.MicrosoftCompatibility&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Compiler.Compatibility&#039;&#039;&#039;. Valid values are &amp;quot;Generic&amp;quot; (generic mode), &amp;quot;Microsoft&amp;quot; (Microsoft compatibility), or &amp;quot;Gnu&amp;quot; (Gnu or Gcc compatibility).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compile()&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Build()&#039;&#039;&#039;. Also new methods, &#039;&#039;&#039;studio.Workspace.CleanBuild()&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.ReloadDatabase()&#039;&#039;&#039;, have been added.&lt;br /&gt;
&lt;br /&gt;
*A new property, &#039;&#039;&#039;Output&#039;&#039;&#039;, has been added off the studio object. This property outputs text to the Studio message tab, similar to how &#039;&#039;&#039;ascript.MessageBox()&#039;&#039;&#039; works for certain scripts. This property contains one method, &#039;&#039;&#039;PrintMessage(String msg)&#039;&#039;&#039;. You can see an example of its use [[Debugging Helps|here]].&lt;br /&gt;
&lt;br /&gt;
*A new settings group has been introduced - &#039;&#039;&#039;studio.Workspace.Settings.Build&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Intercept.Path&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Intercept.SourcePath&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.Intercept.HeaderPath&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Fixes  ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This section describes defects which have been corrected in STRIDE and the customer tracking number associated with them, if any, in brackets [].&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*[1055] Not able to specifiy uppercase include directory &lt;br /&gt;
*[1163] Certain cases of array of pointers to discriminated unions that were not handled correctly in the ascript object have been fixed. &lt;br /&gt;
*[1357] The ascript &#039;&#039;&#039;Call()&#039;&#039;&#039; method, when used with RspTimeoutPeriod, only returns True if a timeout has occurred. &lt;br /&gt;
*[1469] Global casting using &#039;&#039;&#039;scl_cast&#039;&#039;&#039; no longer causes an intercept module compile error. &lt;br /&gt;
*[1539] &#039;&#039;&#039;ascript&#039;&#039;&#039; no longer returns &amp;quot;undefined&amp;quot; when calling &#039;&#039;&#039;function.ReturnValue&#039;&#039;&#039; when the captured function returns an unqualified function pointer. &lt;br /&gt;
*[1543] IM source file locations added to studio UI and automation &lt;br /&gt;
*[1564] The Studio Add files dialog has been increased from 2K bytes to 100K bytes, to allow for more files to be selected at a time. &lt;br /&gt;
*[1586] Support for Variadic Macros &lt;br /&gt;
*[1597] EDGFront crash for scl_ptr_opaque &lt;br /&gt;
*[1600] Pre-processor treats constant 1 always as 8-bit &lt;br /&gt;
*[1605] Generated Perl script generates error when run in debugger &lt;br /&gt;
*The following statement in Runtime files &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; has been changed:&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args = 0;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;is now&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt; with no initializer. This makes it portable and able to compile under Linux. &lt;br /&gt;
*A macro that determines the existence of &#039;&#039;&#039;vsnprintf()&#039;&#039;&#039; has been updated in &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; in order to make it able to compile with GCC and other non-Microsoft compilers.&amp;lt;br&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; If you are using test functions and C++ test classes, you must be using compilers that support &#039;&#039;&#039;vsnprintf&#039;&#039;&#039; (variable argument lists), which is a standard in C99 and supported in C90. &lt;br /&gt;
*When tracing on a STID it&#039;s possible to display trace information for messages that aren&#039;t captured (i.e. the message&#039;s SMID is not known to STRIDE). A problem could occur when STRIDE attempted to interpret the payload of these messages. This has now been fixed; hex values only are now shown in the trace view for in this situation. &lt;br /&gt;
*Autosense was not working properly in the editor for message payloads. This has been fixed.&lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
=== TestUnits Collection  ===&lt;br /&gt;
&lt;br /&gt;
A new TestUnits collection has been implemented. All test interfaces (specified with [[SCL_Pragmas#Test_Units | Test Unit pragmas]]) will be listed there.&lt;br /&gt;
&lt;br /&gt;
=== Functions Collection  ===&lt;br /&gt;
&lt;br /&gt;
Interfaces specified with either the [[scl_test_class]] or [[scl_test_flist]] pragmas are not listed in the Functions collection anymore. &lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
=== Memory Management  ===&lt;br /&gt;
&lt;br /&gt;
To support multi-process target, memory management support for dynamic, configurable, and internal static memory has been implemented in Runtime. Runtime makes PAL calls to acquire memory segments and manages the memory according to runtime configurations set by user. In case of multi-process target is enabled, these memory will be shared among multiple applications, and PAL should implement shared memory. &lt;br /&gt;
&lt;br /&gt;
=== Protection using Mutex  ===&lt;br /&gt;
&lt;br /&gt;
Runtime now uses named mutex objects to protect critical data from multiple and simultaneous accesses by multiple threads and, in case of multi-process target is enabled, by multiple applications. Runtime makes PAL calls to obtain and control mutex objects. &lt;br /&gt;
&lt;br /&gt;
=== New Routines  ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Memory Management&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In case of multi-process target, recommended approach is to use &amp;lt;u&amp;gt;Memory-Mapped Files&amp;lt;/u&amp;gt; to implement memory segments. &lt;br /&gt;
&lt;br /&gt;
 palMemSegmentOpen() - Open/create memory segment &lt;br /&gt;
 palMemSegmentClose() - Close memory segment&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Named Mutexes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palMutexInit() - Initialize a mutex object&lt;br /&gt;
 palMutexDestroy() - Destroy a mutex object&lt;br /&gt;
 palMutexLock() - Lock a mutex object&lt;br /&gt;
 palMutexUnlock() - Unlock a mutex object&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Task Synchronization&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palGetThreadId() - Get current thread Id&lt;br /&gt;
 palGetProcessId() - Get current process Id&lt;br /&gt;
 palSleep() - Suspend the execution of the current thread&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Logging&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is optional. &lt;br /&gt;
&lt;br /&gt;
 palLog() - Logging utility&lt;br /&gt;
&lt;br /&gt;
=== Updated Routines  ===&lt;br /&gt;
&lt;br /&gt;
*Function signatures and functionalities of palWait() &amp;amp;amp; palNotify() have been updated.&lt;br /&gt;
&lt;br /&gt;
 palWait() - now takes in an in/out pointer for events notification&lt;br /&gt;
 palNotify() - mail box Id has been updated to notify any event including mail box Ids.&lt;br /&gt;
&lt;br /&gt;
*Function signatures of palMemAlloc() &amp;amp;amp; palMemFree() have been updated.&lt;br /&gt;
&lt;br /&gt;
=== Removed Routines  ===&lt;br /&gt;
&lt;br /&gt;
 palProtect&lt;br /&gt;
 palUnprotect&lt;br /&gt;
 palCriticalErr&lt;br /&gt;
&lt;br /&gt;
=== Removed Modules  ===&lt;br /&gt;
&lt;br /&gt;
 S2Mem - The memory module provided as part of PAL has been removed. If a native &lt;br /&gt;
         operating system does not support dynamic memory, the Runtime&#039;s memory &lt;br /&gt;
         management module &#039;&#039;srMem&#039;&#039; can be used instead of &#039;&#039;S2Mem&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
&lt;br /&gt;
*STRIDE Host Release &#039;&#039;&#039;3.0.01xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;. &lt;br /&gt;
*In order to eliminate redundancy and promote an object-oriented design, &amp;quot;Member Methods&amp;quot; have been removed from srTest; only &amp;quot;Member Objects&amp;quot; exist now in srTest. In addition, accessing the functionality of Member Objects in this way is similar to accessing scripting objects through the STRIDE Reporter object model. For a detailed explanation, refer to [[Test_Units#C.2B.2B_Test_Classes|this article]] on the STRIDE Support Wiki. &lt;br /&gt;
*A new routine, &#039;&#039;&#039;srInit()&#039;&#039;&#039;, replaces deprecated &#039;&#039;&#039;srInitialize()&#039;&#039;&#039;. Now the target will not be able to set an auto-connect with timeout. &lt;br /&gt;
*The &#039;&#039;&#039;scl_tp&#039;&#039;&#039; and &#039;&#039;&#039;scl_tp_format&#039;&#039;&#039; pragmas have been deprecated. The new pragmas are &#039;&#039;&#039;scl_tracepoint&#039;&#039;&#039; and &#039;&#039;&#039;scl_tracepoint_format&#039;&#039;&#039;. &lt;br /&gt;
*The default runtime configuration in srcfg.h now has fragmentation turned on. The srCFG_MAX_TRANSPORT_UNIT is set to 2048. &lt;br /&gt;
*Fixed warnings for parameter name differences in function declarations and definitions for srSubscribe(), srTracePoint(), and srQuerySMID(). &lt;br /&gt;
*Removed unnecessary/extra response to srCONNECT_CLOSE_T_SMID message. &lt;br /&gt;
*The Runtime now checks for the connection before responding with a &amp;quot;Pong&amp;quot; upon receiving a &amp;quot;Ping.&amp;quot; &lt;br /&gt;
*Introduced 40 additional system trace points to better describe internal errors. &lt;br /&gt;
*Reporting of the error srERR_SUB_NONE has been suppressed so that it no longer generates a target trace error. &lt;br /&gt;
*Trace views now always display srTraceStr() with reserved STID (srSTID_RESERVED) regardless of trace filter settings. &lt;br /&gt;
*srPtrSetupChild() now accepts NULL for handle (out pointer - pwHandle). &lt;br /&gt;
*Added a new Runtime Test Services (RTS) API &#039;&#039;&#039;srTestCaseSetStatusEx()&#039;&#039;&#039;, which enables the providing of the actual return value of a numeric test method in the case of failure. &lt;br /&gt;
*Added two new public APIs - &amp;quot;Printing&amp;quot; APIs to display messages on Trace Views without having to specify a STID or a trace level and to set any trace filters on Trace Views. These routines support formatted strings with variable arguments. The &#039;&#039;&#039;srPrintInfo()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and Level=3. The &#039;&#039;&#039;srPrintError()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and the Level=1. &#039;&#039;&#039;Warning:&#039;&#039;&#039; These new APIs use vsnprintf() routine to process variable arguments. The vsnprintf() became a standard in C99 and is supported in C90. &lt;br /&gt;
*To support multi-process target, significant changes have been made to runtime. &lt;br /&gt;
*A new public routine, srUninit(), has been added to sr.h &amp;amp;amp; srapi.c. &lt;br /&gt;
* A new public routine for Runtime Thread exit point, srThreadUninit(), has been added to sr.h &amp;amp;amp; srthread.c. &lt;br /&gt;
*A new module, srMem, for Memory Management has been added. Its new routines, _srMem_Allocate() &amp;amp;amp; _srMem_Free(), will be used in PAL&#039;s palMemAlloc() &amp;amp;amp; palMemFree() in case of multi-process target is enabled. &lt;br /&gt;
*Calls to palProtect() &amp;amp;amp; palUnprotect() have been replaced by new routines _srProtect() &amp;amp;amp; _srUnprotect(), in which the implementation uses its own mutex object that calls PAL&#039;s mutex routines. &lt;br /&gt;
*In target Test Classes and Test Functions, added capability to specify the comment label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
* Fixed a potential data abort issue when executing delegate code in the IM prior to Runtime being initialized.&lt;br /&gt;
* Runtime Test Services APIs are now thread safe. &lt;br /&gt;
* Fixed cancelation of remote boadcast subcribtion goes in an infinite loop.&lt;br /&gt;
* Fixed Runtime resource abuse when sending lots of broadcast messages. &lt;br /&gt;
* Added partial check for message payload corectness.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapi.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srconn.h&lt;br /&gt;
 srerr.c&lt;br /&gt;
 srib.c&lt;br /&gt;
 srib.h&lt;br /&gt;
 sribctrl.c&lt;br /&gt;
 sribtr.c&lt;br /&gt;
 sribtr.h&lt;br /&gt;
 srmsgmar.c&lt;br /&gt;
 srmsgptr.c&lt;br /&gt;
 srmsgptr.h&lt;br /&gt;
 srmsgque.c&lt;br /&gt;
 srmsgque.h&lt;br /&gt;
 srmsgrt.c&lt;br /&gt;
 srmsgrt.h&lt;br /&gt;
 srmsgsub.c&lt;br /&gt;
 srmsgsub.h&lt;br /&gt;
 srstid.c&lt;br /&gt;
 srstid.h&lt;br /&gt;
 srsuid.c&lt;br /&gt;
 srsuid.h&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
 srtestutil.c&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srthread.c&lt;br /&gt;
 srthread.h&lt;br /&gt;
 srtime.c&lt;br /&gt;
 srtime.h&lt;br /&gt;
 srtp.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been added:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srmem.c&lt;br /&gt;
 srmem.h&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.01xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
Any use of test classes through the Functions collection, like: &lt;br /&gt;
&lt;br /&gt;
  $main::ascript-&amp;amp;gt;Functions-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;User-&amp;amp;gt;Call(); &lt;br /&gt;
&lt;br /&gt;
should be converted to use the new TestUnits collection: &lt;br /&gt;
&lt;br /&gt;
  $main::ascript-&amp;amp;gt;TestUnits-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;Run(); &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
=== API Changes  ===&lt;br /&gt;
&lt;br /&gt;
*The Support Wiki pages now contain reference help for AutoScript. For details see the [[AutoScript#ascript|&#039;&#039;AutoScript API Reference&#039;&#039;]]. &lt;br /&gt;
*All synchronous method calls now throw exceptions in order to indicate error conditions rather than have error conditions encoded in return values. &lt;br /&gt;
*Asychronous method calls never throw exceptions to indicate error conditions. Instead, error conditions are delivered as a new Error object that is returned to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039;. (Asynchronous methods are &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;) &lt;br /&gt;
*If &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; times out, an Error object is returned. Previously NULL was returned in this case. &lt;br /&gt;
*All objects returned by &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; have &#039;&#039;&#039;Type&#039;&#039;&#039; and &#039;&#039;&#039;Name&#039;&#039;&#039; properties. When the &#039;&#039;&#039;Type&#039;&#039;&#039; is “Error”, the Error object has additional properties that contain further details about the error. &lt;br /&gt;
*All existing script syntax for designation of message payloads has been deprecated. A new syntax that allows for greater expression has been adopted. Details can be found [[Updated Message Payload Syntax|here]]. There are no syntax changes to function payloads. &lt;br /&gt;
*The signature for &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; has been changed. Successful calls to &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; now fully initialize the object.&lt;br /&gt;
&lt;br /&gt;
=== End-Of-Life Methods and Properties  ===&lt;br /&gt;
&lt;br /&gt;
This release marks the End-Of-Life (EOL) for the listed methods and properties. A call to any of these methods or an access to any of these properties will now result in a not-implemented exception in the script making the call or access. &lt;br /&gt;
&lt;br /&gt;
*ascript.Quit() &lt;br /&gt;
*ascript.Interfaces &lt;br /&gt;
*ascript.NamedEvents &lt;br /&gt;
*ascript.WaitForEventWithTimeout &lt;br /&gt;
*ascript.RspTimeoutNotifyEnabled &lt;br /&gt;
*ascript.CreateTimer() &lt;br /&gt;
*ascript.DestroyTimer() &lt;br /&gt;
*ascript.WaitTimeoutNotifyEnabled &lt;br /&gt;
*ascript.Compare_As_C_Values() &lt;br /&gt;
*ascript.AsyncErrorNotifyEnabled &lt;br /&gt;
*ascript.Function.Item().User/Owner.SMID&lt;br /&gt;
&lt;br /&gt;
=== Recommended Steps for Migration From a Previous Version  ===&lt;br /&gt;
&lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; in all scripts. Previous logic to test for null indicating timeouts must be modified. &#039;&#039;&#039;WaitForEvent()&#039;&#039;&#039; now always returns an object, in the case of a timeout (or other error) an Error object is returned. &lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.Quit&#039;&#039;&#039; in all scripts. Modify the logic as necessary to exit the script by other means in place of the original &#039;&#039;&#039;Quit()&#039;&#039;&#039; call. &lt;br /&gt;
*Search for all asynchronous method calls (Asynchronous calls are limited to &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;). Modify the logic as necessary to call &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; if errors (including timeout error) should be detected. &lt;br /&gt;
*If you have scripts that explicitly instantiate an &#039;&#039;&#039;ascript&#039;&#039;&#039; object (i.e. they create an object using the &#039;&#039;&#039;&amp;quot;STRIDE.ascript&amp;quot;&#039;&#039;&#039; PROGID), search for all occurrences and modify the subsequent call to &#039;&#039;&#039;ascript.Initialize()&#039;&#039;&#039; to pass the new parameter set. &lt;br /&gt;
*Search for all EOL&#039;d methods and properties. Each can be replaced by setting the appropriate timeout property and handling the timeout error object delivered by WaitForEvent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;Section1&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%; border-collapse: collapse;&amp;quot; class=&amp;quot;MsoTableGrid&amp;quot;&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1pt solid windowtext; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;EOL’d&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Method or Property&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&#039;&#039;&#039;Recommended Replacement&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Quit&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Refactor&amp;lt;/span&amp;gt; script logic to exit the script by other means. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Interfaces&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Functions&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Messages&amp;lt;/span&amp;gt; as appropriate. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.NamedEvents&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitForEventWithTimeout&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() after setting desired timeout using &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitTimeoutPeriod&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.RspTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.CreateTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Add&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.DestroyTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Remove&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Compare_As_C_Values&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.AsyncErrorNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Error notification from asynchronous calls is performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Function.Item&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SMID&amp;lt;/span&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Function.Item&amp;lt;/span&amp;gt;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SUID&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
Please refer to &#039;&#039;&#039;&#039;&#039;Platform Abstraction Layer (PAL) Specification&#039;&#039;&#039;&#039;&#039; for detailed information on new APIs. You may also refer to Linux implementation of PAL, which has been updated with new routines. &lt;br /&gt;
&lt;br /&gt;
*Implement new shared memory routines, palMemSegmentOpen() &amp;amp;amp; palMemSegmentClose(). In case of multi-process target, these routines should implement shared memory using memory-mapped files.&lt;br /&gt;
&lt;br /&gt;
*Runtime now can manage dynamic, configurable, and internal static memory. In case of multi-process target, update palMemAlloc() to simply call _srMem_Allocate() and palMemFree() to simply call _srMem_Free(). In case of single-process target, you can simply allocate dynamic memory according to your Operating System. If you are upgrading, you can simply leave the current implementation as it is.&lt;br /&gt;
&lt;br /&gt;
*Implement new mutex routines, palMutexInit(), palMutexDestroy(), palMutexLock() &amp;amp;amp; palMutexUnlock, to handle any named mutex objects. It is recommended to implement a separate code for shared memory case if it is necessary.&lt;br /&gt;
&lt;br /&gt;
*Remove old routines palProtect(), palUnprotect() and palCriticalErr().&lt;br /&gt;
&lt;br /&gt;
*Implement new routines palGetThreadId() and palGetProcessId().&lt;br /&gt;
&lt;br /&gt;
*Implement new routine palSleep().&lt;br /&gt;
&lt;br /&gt;
*Update synchronization routines, palCreateNID(), palDeleteNID(), palWait() &amp;amp;amp; palNotify(), to support event notifications and in case of multi-process target is enabled, sharing of the synchronization objects among multiple processors.&lt;br /&gt;
&lt;br /&gt;
*If your PAL uses &#039;&#039;S2Mem&#039;&#039; routines for dynamic memory, you should use new Runtime module &#039;&#039;srMem&#039;&#039;. Update palMemAlloc() to call _srMem_Allocate() and palMemFree() to call _srMem_Free().&lt;br /&gt;
&lt;br /&gt;
*Optionally, implement new routine palLog() as a logging utility for PAL and Runtime.&lt;br /&gt;
&lt;br /&gt;
== Runtime  ==&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new memory management (srCFG_MEMORY_MANAGEMENT) and multi-process target (srCFG_MULTI_PROC_TARGET) settings. By default, memory management and multi-process target are disabled. If you enable multi-process target you also need to enable memory management and configure the sizes and the maximum number of memory blocks. New Runtime module &#039;&#039;srMem&#039;&#039; uses these configurations to allocate and manage memory segments.&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new target connection timeout setting (srCFG_CONNECTION_TIMEOUT).&lt;br /&gt;
&lt;br /&gt;
*If target Test Classes and Test Functions are used, change the signature to include test label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
&lt;br /&gt;
== Windows Applications using Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
*The new &#039;&#039;&#039;s2srwin.lib&#039;&#039;&#039; has public API, published in a header srwin.h, containing the following set of routines:&lt;br /&gt;
&lt;br /&gt;
 srWin_SetMaster() - Sets the application as the master and initializes the Stride Runtime thread. In a multi-process environment only one application should make this call.&lt;br /&gt;
 srWin_AddThread() - Adds additional message processing threads to the application.&lt;br /&gt;
 srWin_Run() - Starts the processing and will not return until it has been signaled via keyboard key or CTRL-C.&lt;br /&gt;
 srWin_SetPortTCP() - Overrides the TCP port number (default: 8000) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
 srWin_SetPortSerial() - Overrides the COM port number (default: 1) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
&lt;br /&gt;
*Existing Host Apps developed against the old hostapphrt and hostapptrt libraries should be updated to as follows: &lt;br /&gt;
**replace the include of hostapp.h with include of srwin.h &lt;br /&gt;
**replace all calls to HostAppXXX() with srWin_XXX() &lt;br /&gt;
**call srWin_SetMaster() to start the runtime thread, srThread, before calling srWin_Run(). Within a multi-process target, only one process (the master) calls this routine.&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;a&amp;quot; ==&lt;br /&gt;
* Linux version of the STRIDE [[Build Tools]] is officially introduced.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;b&amp;quot; ==&lt;br /&gt;
* Relaxed [[scl_cast]]() pragma to allow cast from any integral ptr to union of ptrs&lt;br /&gt;
* Fixed compile warnings in Linux PAL.&lt;br /&gt;
* Fixed issue in instrumentation of [[Test Units]].&lt;br /&gt;
* Fixed issue with UNC paths.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0102 ==&lt;br /&gt;
* Implemented new licensing scheme. Existing licenses will not work anymore and need to be reissued. Old and new licenses could co-exist at the same location.&lt;br /&gt;
* The syntax of [[scl_ptr]] and [[scl_ptr_sized]] pragmas has changed. Now it is required to quote the direction and usage attributes. See this [[Handling_of_pointer_attribute_tokens|page]] for details.&lt;br /&gt;
* [[Test_Units#Runtime_Test_Services|Runtime Test Services]] now support adding annotations per test suite.&lt;br /&gt;
* A complete set of [[Samples]] has been implemented.&lt;br /&gt;
* Fixed several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Fixed several minor issues in [[AutoScript]]. &lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0102&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039; and &#039;&#039;&#039;3.01&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8120</id>
		<title>STRIDE 3.0.01xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8120"/>
		<updated>2008-10-15T23:57:21Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* API Changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Release Notes&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
This page documents the changes in STRIDE version 3.0.01xx (code name &#039;&#039;StoneSteps&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note that if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= What&#039;s New  =&lt;br /&gt;
&lt;br /&gt;
Based on customer feedback, in this release we have made significant performance improvements as well as many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Performance Improvements ==&lt;br /&gt;
&lt;br /&gt;
Specific improvements have been made in the following areas: &lt;br /&gt;
&lt;br /&gt;
*Database loading time has been improved &lt;br /&gt;
*Compile times are now shorter &lt;br /&gt;
*Scripting operations involving function and message payloads now perform better, especially when arrays are involved &lt;br /&gt;
*Runtime performance has been improved by optimizing payload serialization and deserialization operations&lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
&lt;br /&gt;
=== SCL Wizard ===&lt;br /&gt;
&lt;br /&gt;
The SCL Wizard functionality in [[STRIDE Studio]] has been extended so that you can now use the tool to qualify message payloads as well as function payloads. &lt;br /&gt;
&lt;br /&gt;
In addition, the following types of qualifications can now be made: &lt;br /&gt;
&lt;br /&gt;
*For payloads that include function pointers, the SCL Wizard now supports qualifying the pointers as such and identifying candidate function values &lt;br /&gt;
*Type casts can now be specified on payload members&lt;br /&gt;
&lt;br /&gt;
=== Connection Management ===&lt;br /&gt;
&lt;br /&gt;
Connection management has been greatly simplified; software managing connection to the target system has been integrated into [[STRIDE Studio]] so that connections can be managed directly from there. (It is still possible to access connection management functionality without using Studio.) &lt;br /&gt;
&lt;br /&gt;
The Panel program is no longer used, and there is no longer a requirement to load the database to communicate with a remote target. &lt;br /&gt;
&lt;br /&gt;
==== Transport Properties ====&lt;br /&gt;
&lt;br /&gt;
All transport properties can now be accessed via scripts. A new transport scripting model makes this possible.&lt;br /&gt;
&lt;br /&gt;
=== STRIDE Studio Test Runner Improvements ===&lt;br /&gt;
&lt;br /&gt;
The test runner in [[STRIDE Studio]] has incorporated several functional and usability improvements. &lt;br /&gt;
&lt;br /&gt;
*Each runnable script and folder (Suite) in a workspace now has additional properties that allow you to optionally specify a handler script that will be executed in the case of an unhandled error (property OnError) or a timeout (property OnTimeout). A timeout value can be set for each folder.&lt;br /&gt;
&lt;br /&gt;
*Each runnable folder (Suite) in a workspace now has a property (OnRunConnect) that can instruct STRIDE Studio to automatically connect to a target system before the folder is executed.&lt;br /&gt;
&lt;br /&gt;
*The workspace now has a dynamic property (ExecutionState) that allows you to alter the order of script execution at runtime.&lt;br /&gt;
&lt;br /&gt;
=== New Frameworks Feature ===&lt;br /&gt;
&lt;br /&gt;
This version introduces [[Using Frameworks|Target Frameworks]], which provide customizable templates for workspace creation. The use of frameworks simplifies the use of STRIDE and ensures consistency across a development team. &lt;br /&gt;
&lt;br /&gt;
Several [[Provided Frameworks|reference frameworks]] are included in this release, supporting the following target environments: &lt;br /&gt;
&lt;br /&gt;
*[[Provided Frameworks#Windows|Windows]] &lt;br /&gt;
*[[Provided Frameworks#Linux|Linux]] &lt;br /&gt;
*[[Provided Frameworks#WinMobile|WinMobile]] &lt;br /&gt;
*[[Provided Frameworks#Generic|Generic]]&lt;br /&gt;
&lt;br /&gt;
[[Using Packages|Packages]] are also introduced. These provide a convenient way to encapsulate SCL-annotated source code and corresponding tests for a set of interfaces. &lt;br /&gt;
&lt;br /&gt;
=== Uploading Results to STRIDE Portal ===&lt;br /&gt;
&lt;br /&gt;
Uploading test results from STRIDE Reporter to STRIDE Portal has been integrated into STRIDE Studio. Portal&#039;s server information can be configured from Studio&#039;s workspace properties while uploading results to Portal can be enabled or disabled via workspace context menu. If enabled, after running the workspace, a script folder or a script file, results in Report file will automatically be uploaded to the configured server. &lt;br /&gt;
&lt;br /&gt;
== Build Tools  ==&lt;br /&gt;
&lt;br /&gt;
A set of new command line [[Build Tools]] has been implemented: &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Stride compiler&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride database binder&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride instrumentation generator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
These utilities has been ported for Windows and Linux. Using them would allow seamless integration with a &amp;quot;make&amp;quot; build environment.&lt;br /&gt;
&lt;br /&gt;
== Target-Based Testing  ==&lt;br /&gt;
&lt;br /&gt;
Target-based (xUnit-style) testing has been simplified. The new set of SCL pragmas [[Test Units]] can now be included in a source file to tell the compiler and IM generator to automatically create test harnessing code.&lt;br /&gt;
&lt;br /&gt;
The automation components STRIDE.testclass, STRIDE.testunit and STRIDE.testfunction are removed.&lt;br /&gt;
&lt;br /&gt;
== Runtime/PAL  ==&lt;br /&gt;
&lt;br /&gt;
Based on customer requirements, in this release we have made significant changes to [[Target_Integration#The STRIDE Runtime|STRIDE Runtime]] and [[Target_Integration#The Platform Abstraction Layer (PAL)|PAL]]. &lt;br /&gt;
&lt;br /&gt;
=== Multi-Process Targets  ===&lt;br /&gt;
&lt;br /&gt;
New routines and support have been added to Runtime and PAL to support multi-process targets. Changes include: implementation of memory management and shared memory, protecting using named Mutex objects, synchronization of multiple processors and multiple threads, and usage of current process and thread IDs.&lt;br /&gt;
&lt;br /&gt;
=== Logging (Optional)  ===&lt;br /&gt;
&lt;br /&gt;
Runtime and PAL use a logging routine that can optionally be implemented in PAL. &lt;br /&gt;
&lt;br /&gt;
== Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
A new [[Windows_Off-Target_SDK|SDK]] for implemention of Off-Target applications on Windows has been packaged. It contains a library (s2srWin.dll/lib) in which the Windows PAL, Runtime, and GRS and a set of utility scripts are prebuilt. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;s2shostapphrt&#039;&#039;&#039; library, a prebuilt verion of the Host Runtime, has been removed. Building Windows applications using the Host Runtime is not supported anymore. The &#039;&#039;&#039;s2shostapptrt&#039;&#039;&#039; library, a prebuilt version of the Target Runtime, has also been removed. &lt;br /&gt;
&lt;br /&gt;
If an upgrade is performed it is strongly recommended that the above mentioned &#039;&#039;&#039;s2shostapp*&#039;&#039;&#039; libraries and their public API header (hostapp.h) be manually removed.&lt;br /&gt;
&lt;br /&gt;
= Support Wiki =&lt;br /&gt;
&lt;br /&gt;
This support wiki http://support.s2technologies.com is introduced with this version. You can navigate here from your web browser, or directly from STRIDE Studio; a link is provided in the Help menu. &lt;br /&gt;
&lt;br /&gt;
== STRIDE Samples  ==&lt;br /&gt;
&lt;br /&gt;
We have created a set of [[Samples_Overview|sample workspaces]] to aid in the evaluation of STRIDE, or as a tool for learning how to apply STRIDE to different testing scenarios. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to STRIDE, or want to learn more about using the product, this is a great place to start.&lt;br /&gt;
&lt;br /&gt;
= Acquiring the Software =&lt;br /&gt;
&lt;br /&gt;
You can download the latest release from the S2 Technologies ftp site: ftp://ftp.s2technologies.com &lt;br /&gt;
&lt;br /&gt;
To run STRIDE you will need a license. If you are not yet a customer of S2 and would like to obtain an evaluation license, email [mailto:sales@s2technologies.com S2 Sales] or call our offices at &#039;&#039;&#039;760-635-2345&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
= Installing the Software  =&lt;br /&gt;
&lt;br /&gt;
To install STRIDE for the first time, or as an upgrade to an existing installation, please refer to [[Host Installation]]. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note: if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you are new to STRIDE, we recommend that you investigate the [[Samples_Overview|New STRIDE Samples]].&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;ascript&#039;&#039;&#039; API has been changed to be more robust: &lt;br /&gt;
**Certain deprecated methods have been eliminated. &lt;br /&gt;
**Some existing API methods have been modifed. &lt;br /&gt;
**The event model has been improved to allow greater script control.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Some scripts must be modified from previous versions of STRIDE to work successfully with 3.0.01xx. The necessary changes are detailed in the [[#Migration_to_3.0.01xx|Migration to 3.0.01xx]] section below. &lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;Panel&#039;&#039;&#039; object is no longer available to scripts; its functionality has been moved under the &#039;&#039;&#039;studio&#039;&#039;&#039; object model. You can access this new functionality as &#039;&#039;&#039;studio.Connection&#039;&#039;&#039;, however if you were formerly scripting the &#039;&#039;&#039;Panel&#039;&#039;&#039; object, you may find it is no longer necessary since: &lt;br /&gt;
**You can now configure your connection properties from within STRIDE Studio (from the menu select &#039;&#039;Tools/Target Connectivity&#039;&#039;) &lt;br /&gt;
**You can now set a workspace folder property to autoconnect upon execution&lt;br /&gt;
&lt;br /&gt;
*Zero is now allowed as the maximum size under certain circumstances in &#039;&#039;&#039;scl_string&#039;&#039;&#039; and &#039;&#039;&#039;scl_ptr_sized&#039;&#039;&#039;. Details of these circumstances are contained in the &#039;&#039;&#039;[[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]]&#039;&#039;&#039; document.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compiler.MicrosoftCompatibility&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Compiler.Compatibility&#039;&#039;&#039;. Valid values are &amp;quot;Generic&amp;quot; (generic mode), &amp;quot;Microsoft&amp;quot; (Microsoft compatibility), or &amp;quot;Gnu&amp;quot; (Gnu or Gcc compatibility).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compile()&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Build()&#039;&#039;&#039;. Also new methods, &#039;&#039;&#039;studio.Workspace.CleanBuild()&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.ReloadDatabase()&#039;&#039;&#039;, have been added.&lt;br /&gt;
&lt;br /&gt;
*A new property, &#039;&#039;&#039;Output&#039;&#039;&#039;, has been added off the studio object. This property outputs text to the Studio message tab, similar to how &#039;&#039;&#039;ascript.MessageBox()&#039;&#039;&#039; works for certain scripts. This property contains one method, &#039;&#039;&#039;PrintMessage(String msg)&#039;&#039;&#039;. You can see an example of its use [[Debugging Helps|here]].&lt;br /&gt;
&lt;br /&gt;
*A new settings group has been introduced - &#039;&#039;&#039;studio.Workspace.Settings.Build&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Intercept.Path&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Intercept.SourcePath&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.Intercept.HeaderPath&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Fixes  ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This section describes defects which have been corrected in STRIDE and the customer tracking number associated with them, if any, in brackets [].&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*[1055] Not able to specifiy uppercase include directory &lt;br /&gt;
*[1163] Certain cases of array of pointers to discriminated unions that were not handled correctly in the ascript object have been fixed. &lt;br /&gt;
*[1357] The ascript &#039;&#039;&#039;Call()&#039;&#039;&#039; method, when used with RspTimeoutPeriod, only returns True if a timeout has occurred. &lt;br /&gt;
*[1469] Global casting using &#039;&#039;&#039;scl_cast&#039;&#039;&#039; no longer causes an intercept module compile error. &lt;br /&gt;
*[1539] &#039;&#039;&#039;ascript&#039;&#039;&#039; no longer returns &amp;quot;undefined&amp;quot; when calling &#039;&#039;&#039;function.ReturnValue&#039;&#039;&#039; when the captured function returns an unqualified function pointer. &lt;br /&gt;
*[1543] IM source file locations added to studio UI and automation &lt;br /&gt;
*[1564] The Studio Add files dialog has been increased from 2K bytes to 100K bytes, to allow for more files to be selected at a time. &lt;br /&gt;
*[1586] Support for Variadic Macros &lt;br /&gt;
*[1597] EDGFront crash for scl_ptr_opaque &lt;br /&gt;
*[1600] Pre-processor treats constant 1 always as 8-bit &lt;br /&gt;
*[1605] Generated Perl script generates error when run in debugger &lt;br /&gt;
*The following statement in Runtime files &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; has been changed:&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args = 0;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;is now&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt; with no initializer. This makes it portable and able to compile under Linux. &lt;br /&gt;
*A macro that determines the existence of &#039;&#039;&#039;vsnprintf()&#039;&#039;&#039; has been updated in &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; in order to make it able to compile with GCC and other non-Microsoft compilers.&amp;lt;br&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; If you are using test functions and C++ test classes, you must be using compilers that support &#039;&#039;&#039;vsnprintf&#039;&#039;&#039; (variable argument lists), which is a standard in C99 and supported in C90. &lt;br /&gt;
*When tracing on a STID it&#039;s possible to display trace information for messages that aren&#039;t captured (i.e. the message&#039;s SMID is not known to STRIDE). A problem could occur when STRIDE attempted to interpret the payload of these messages. This has now been fixed; hex values only are now shown in the trace view for in this situation. &lt;br /&gt;
*Autosense was not working properly in the editor for message payloads. This has been fixed.&lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
=== TestUnits Collection  ===&lt;br /&gt;
&lt;br /&gt;
A new TestUnits collection has been implemented. All test interfaces (specified with [[SCL_Pragmas#Test_Units | Test Unit pragmas]]) will be listed there.&lt;br /&gt;
&lt;br /&gt;
=== Functions Collection  ===&lt;br /&gt;
&lt;br /&gt;
Interfaces specified with either the [[scl_test_class]] or [[scl_test_flist]] pragmas are not listed in the Functions collection anymore. &lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
=== Memory Management  ===&lt;br /&gt;
&lt;br /&gt;
To support multi-process target, memory management support for dynamic, configurable, and internal static memory has been implemented in Runtime. Runtime makes PAL calls to acquire memory segments and manages the memory according to runtime configurations set by user. In case of multi-process target is enabled, these memory will be shared among multiple applications, and PAL should implement shared memory. &lt;br /&gt;
&lt;br /&gt;
=== Protection using Mutex  ===&lt;br /&gt;
&lt;br /&gt;
Runtime now uses named mutex objects to protect critical data from multiple and simultaneous accesses by multiple threads and, in case of multi-process target is enabled, by multiple applications. Runtime makes PAL calls to obtain and control mutex objects. &lt;br /&gt;
&lt;br /&gt;
=== New Routines  ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Memory Management&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In case of multi-process target, recommended approach is to use &amp;lt;u&amp;gt;Memory-Mapped Files&amp;lt;/u&amp;gt; to implement memory segments. &lt;br /&gt;
&lt;br /&gt;
 palMemSegmentOpen() - Open/create memory segment &lt;br /&gt;
 palMemSegmentClose() - Close memory segment&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Named Mutexes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palMutexInit() - Initialize a mutex object&lt;br /&gt;
 palMutexDestroy() - Destroy a mutex object&lt;br /&gt;
 palMutexLock() - Lock a mutex object&lt;br /&gt;
 palMutexUnlock() - Unlock a mutex object&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Task Synchronization&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palGetThreadId() - Get current thread Id&lt;br /&gt;
 palGetProcessId() - Get current process Id&lt;br /&gt;
 palSleep() - Suspend the execution of the current thread&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Logging&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is optional. &lt;br /&gt;
&lt;br /&gt;
 palLog() - Logging utility&lt;br /&gt;
&lt;br /&gt;
=== Updated Routines  ===&lt;br /&gt;
&lt;br /&gt;
*Function signatures and functionalities of palWait() &amp;amp;amp; palNotify() have been updated.&lt;br /&gt;
&lt;br /&gt;
 palWait() - now takes in an in/out pointer for events notification&lt;br /&gt;
 palNotify() - mail box Id has been updated to notify any event including mail box Ids.&lt;br /&gt;
&lt;br /&gt;
*Function signatures of palMemAlloc() &amp;amp;amp; palMemFree() have been updated.&lt;br /&gt;
&lt;br /&gt;
=== Removed Routines  ===&lt;br /&gt;
&lt;br /&gt;
 palProtect&lt;br /&gt;
 palUnprotect&lt;br /&gt;
 palCriticalErr&lt;br /&gt;
&lt;br /&gt;
=== Removed Modules  ===&lt;br /&gt;
&lt;br /&gt;
 S2Mem - The memory module provided as part of PAL has been removed. If a native &lt;br /&gt;
         operating system does not support dynamic memory, the Runtime&#039;s memory &lt;br /&gt;
         management module &#039;&#039;srMem&#039;&#039; can be used instead of &#039;&#039;S2Mem&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
&lt;br /&gt;
*STRIDE Host Release &#039;&#039;&#039;3.0.01xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;. &lt;br /&gt;
*In order to eliminate redundancy and promote an object-oriented design, &amp;quot;Member Methods&amp;quot; have been removed from srTest; only &amp;quot;Member Objects&amp;quot; exist now in srTest. In addition, accessing the functionality of Member Objects in this way is similar to accessing scripting objects through the STRIDE Reporter object model. For a detailed explanation, refer to [[Test_Units#C.2B.2B_Test_Classes|this article]] on the STRIDE Support Wiki. &lt;br /&gt;
*A new routine, &#039;&#039;&#039;srInit()&#039;&#039;&#039;, replaces deprecated &#039;&#039;&#039;srInitialize()&#039;&#039;&#039;. Now the target will not be able to set an auto-connect with timeout. &lt;br /&gt;
*The &#039;&#039;&#039;scl_tp&#039;&#039;&#039; and &#039;&#039;&#039;scl_tp_format&#039;&#039;&#039; pragmas have been deprecated. The new pragmas are &#039;&#039;&#039;scl_tracepoint&#039;&#039;&#039; and &#039;&#039;&#039;scl_tracepoint_format&#039;&#039;&#039;. &lt;br /&gt;
*The default runtime configuration in srcfg.h now has fragmentation turned on. The srCFG_MAX_TRANSPORT_UNIT is set to 2048. &lt;br /&gt;
*Fixed warnings for parameter name differences in function declarations and definitions for srSubscribe(), srTracePoint(), and srQuerySMID(). &lt;br /&gt;
*Removed unnecessary/extra response to srCONNECT_CLOSE_T_SMID message. &lt;br /&gt;
*The Runtime now checks for the connection before responding with a &amp;quot;Pong&amp;quot; upon receiving a &amp;quot;Ping.&amp;quot; &lt;br /&gt;
*Introduced 40 additional system trace points to better describe internal errors. &lt;br /&gt;
*Reporting of the error srERR_SUB_NONE has been suppressed so that it no longer generates a target trace error. &lt;br /&gt;
*Trace views now always display srTraceStr() with reserved STID (srSTID_RESERVED) regardless of trace filter settings. &lt;br /&gt;
*srPtrSetupChild() now accepts NULL for handle (out pointer - pwHandle). &lt;br /&gt;
*Added a new Runtime Test Services (RTS) API &#039;&#039;&#039;srTestCaseSetStatusEx()&#039;&#039;&#039;, which enables the providing of the actual return value of a numeric test method in the case of failure. &lt;br /&gt;
*Added two new public APIs - &amp;quot;Printing&amp;quot; APIs to display messages on Trace Views without having to specify a STID or a trace level and to set any trace filters on Trace Views. These routines support formatted strings with variable arguments. The &#039;&#039;&#039;srPrintInfo()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and Level=3. The &#039;&#039;&#039;srPrintError()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and the Level=1. &#039;&#039;&#039;Warning:&#039;&#039;&#039; These new APIs use vsnprintf() routine to process variable arguments. The vsnprintf() became a standard in C99 and is supported in C90. &lt;br /&gt;
*To support multi-process target, significant changes have been made to runtime. &lt;br /&gt;
*A new public routine, srUninit(), has been added to sr.h &amp;amp;amp; srapi.c. &lt;br /&gt;
* A new public routine for Runtime Thread exit point, srThreadUninit(), has been added to sr.h &amp;amp;amp; srthread.c. &lt;br /&gt;
*A new module, srMem, for Memory Management has been added. Its new routines, _srMem_Allocate() &amp;amp;amp; _srMem_Free(), will be used in PAL&#039;s palMemAlloc() &amp;amp;amp; palMemFree() in case of multi-process target is enabled. &lt;br /&gt;
*Calls to palProtect() &amp;amp;amp; palUnprotect() have been replaced by new routines _srProtect() &amp;amp;amp; _srUnprotect(), in which the implementation uses its own mutex object that calls PAL&#039;s mutex routines. &lt;br /&gt;
*In target Test Classes and Test Functions, added capability to specify the comment label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
* Fixed a potential data abort issue when executing delegate code in the IM prior to Runtime being initialized.&lt;br /&gt;
* Runtime Test Services APIs are now thread safe. &lt;br /&gt;
* Fixed cancelation of remote boadcast subcribtion goes in an infinite loop.&lt;br /&gt;
* Fixed Runtime resource abuse when sending lots of broadcast messages. &lt;br /&gt;
* Added partial check for message payload corectness.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapi.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srconn.h&lt;br /&gt;
 srerr.c&lt;br /&gt;
 srib.c&lt;br /&gt;
 srib.h&lt;br /&gt;
 sribctrl.c&lt;br /&gt;
 sribtr.c&lt;br /&gt;
 sribtr.h&lt;br /&gt;
 srmsgmar.c&lt;br /&gt;
 srmsgptr.c&lt;br /&gt;
 srmsgptr.h&lt;br /&gt;
 srmsgque.c&lt;br /&gt;
 srmsgque.h&lt;br /&gt;
 srmsgrt.c&lt;br /&gt;
 srmsgrt.h&lt;br /&gt;
 srmsgsub.c&lt;br /&gt;
 srmsgsub.h&lt;br /&gt;
 srstid.c&lt;br /&gt;
 srstid.h&lt;br /&gt;
 srsuid.c&lt;br /&gt;
 srsuid.h&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
 srtestutil.c&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srthread.c&lt;br /&gt;
 srthread.h&lt;br /&gt;
 srtime.c&lt;br /&gt;
 srtime.h&lt;br /&gt;
 srtp.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been added:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srmem.c&lt;br /&gt;
 srmem.h&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.01xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
Any use of test classes through the Functions collection, like: &lt;br /&gt;
&lt;br /&gt;
  $main::ascript-&amp;amp;gt;Functions-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;User-&amp;amp;gt;Call(); &lt;br /&gt;
&lt;br /&gt;
should be converted to use the new TestUnits collection: &lt;br /&gt;
&lt;br /&gt;
  $main::ascript-&amp;amp;gt;TestUnits-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;Run(); &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
=== API Changes  ===&lt;br /&gt;
&lt;br /&gt;
*The Support Wiki pages now contain reference help for AutoScript. The content has been updated to reflect the API changes, for details see the [[AutoScript#ascript|&#039;&#039;AutoScript API Reference&#039;&#039;]]. &lt;br /&gt;
*All synchronous method calls now throw exceptions in order to indicate error conditions rather than have error conditions encoded in return values. &lt;br /&gt;
*Asychronous method calls never throw exceptions to indicate error conditions. Instead, error conditions are delivered as a new Error object that is returned to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039;. (Asynchronous methods are &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;) &lt;br /&gt;
*If &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; times out, an Error object is returned. Previously NULL was returned in this case. &lt;br /&gt;
*All objects returned by &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; have &#039;&#039;&#039;Type&#039;&#039;&#039; and &#039;&#039;&#039;Name&#039;&#039;&#039; properties. When the &#039;&#039;&#039;Type&#039;&#039;&#039; is “Error”, the Error object has additional properties that contain further details about the error. &lt;br /&gt;
*All existing script syntax for designation of message payloads has been deprecated. A new syntax that allows for greater expression has been adopted. Details can be found [[Updated Message Payload Syntax|here]]. There are no syntax changes to function payloads. &lt;br /&gt;
*The signature for &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; has been changed. Successful calls to &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; now fully initialize the object.&lt;br /&gt;
&lt;br /&gt;
=== End-Of-Life Methods and Properties  ===&lt;br /&gt;
&lt;br /&gt;
This release marks the End-Of-Life (EOL) for the listed methods and properties. A call to any of these methods or an access to any of these properties will now result in a not-implemented exception in the script making the call or access. &lt;br /&gt;
&lt;br /&gt;
*ascript.Quit() &lt;br /&gt;
*ascript.Interfaces &lt;br /&gt;
*ascript.NamedEvents &lt;br /&gt;
*ascript.WaitForEventWithTimeout &lt;br /&gt;
*ascript.RspTimeoutNotifyEnabled &lt;br /&gt;
*ascript.CreateTimer() &lt;br /&gt;
*ascript.DestroyTimer() &lt;br /&gt;
*ascript.WaitTimeoutNotifyEnabled &lt;br /&gt;
*ascript.Compare_As_C_Values() &lt;br /&gt;
*ascript.AsyncErrorNotifyEnabled &lt;br /&gt;
*ascript.Function.Item().User/Owner.SMID&lt;br /&gt;
&lt;br /&gt;
=== Recommended Steps for Migration From a Previous Version  ===&lt;br /&gt;
&lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; in all scripts. Previous logic to test for null indicating timeouts must be modified. &#039;&#039;&#039;WaitForEvent()&#039;&#039;&#039; now always returns an object, in the case of a timeout (or other error) an Error object is returned. &lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.Quit&#039;&#039;&#039; in all scripts. Modify the logic as necessary to exit the script by other means in place of the original &#039;&#039;&#039;Quit()&#039;&#039;&#039; call. &lt;br /&gt;
*Search for all asynchronous method calls (Asynchronous calls are limited to &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;). Modify the logic as necessary to call &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; if errors (including timeout error) should be detected. &lt;br /&gt;
*If you have scripts that explicitly instantiate an &#039;&#039;&#039;ascript&#039;&#039;&#039; object (i.e. they create an object using the &#039;&#039;&#039;&amp;quot;STRIDE.ascript&amp;quot;&#039;&#039;&#039; PROGID), search for all occurrences and modify the subsequent call to &#039;&#039;&#039;ascript.Initialize()&#039;&#039;&#039; to pass the new parameter set. &lt;br /&gt;
*Search for all EOL&#039;d methods and properties. Each can be replaced by setting the appropriate timeout property and handling the timeout error object delivered by WaitForEvent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;Section1&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%; border-collapse: collapse;&amp;quot; class=&amp;quot;MsoTableGrid&amp;quot;&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1pt solid windowtext; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;EOL’d&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Method or Property&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&#039;&#039;&#039;Recommended Replacement&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Quit&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Refactor&amp;lt;/span&amp;gt; script logic to exit the script by other means. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Interfaces&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Functions&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Messages&amp;lt;/span&amp;gt; as appropriate. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.NamedEvents&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitForEventWithTimeout&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() after setting desired timeout using &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitTimeoutPeriod&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.RspTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.CreateTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Add&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.DestroyTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Remove&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Compare_As_C_Values&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.AsyncErrorNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Error notification from asynchronous calls is performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Function.Item&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SMID&amp;lt;/span&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Function.Item&amp;lt;/span&amp;gt;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SUID&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
Please refer to &#039;&#039;&#039;&#039;&#039;Platform Abstraction Layer (PAL) Specification&#039;&#039;&#039;&#039;&#039; for detailed information on new APIs. You may also refer to Linux implementation of PAL, which has been updated with new routines. &lt;br /&gt;
&lt;br /&gt;
*Implement new shared memory routines, palMemSegmentOpen() &amp;amp;amp; palMemSegmentClose(). In case of multi-process target, these routines should implement shared memory using memory-mapped files.&lt;br /&gt;
&lt;br /&gt;
*Runtime now can manage dynamic, configurable, and internal static memory. In case of multi-process target, update palMemAlloc() to simply call _srMem_Allocate() and palMemFree() to simply call _srMem_Free(). In case of single-process target, you can simply allocate dynamic memory according to your Operating System. If you are upgrading, you can simply leave the current implementation as it is.&lt;br /&gt;
&lt;br /&gt;
*Implement new mutex routines, palMutexInit(), palMutexDestroy(), palMutexLock() &amp;amp;amp; palMutexUnlock, to handle any named mutex objects. It is recommended to implement a separate code for shared memory case if it is necessary.&lt;br /&gt;
&lt;br /&gt;
*Remove old routines palProtect(), palUnprotect() and palCriticalErr().&lt;br /&gt;
&lt;br /&gt;
*Implement new routines palGetThreadId() and palGetProcessId().&lt;br /&gt;
&lt;br /&gt;
*Implement new routine palSleep().&lt;br /&gt;
&lt;br /&gt;
*Update synchronization routines, palCreateNID(), palDeleteNID(), palWait() &amp;amp;amp; palNotify(), to support event notifications and in case of multi-process target is enabled, sharing of the synchronization objects among multiple processors.&lt;br /&gt;
&lt;br /&gt;
*If your PAL uses &#039;&#039;S2Mem&#039;&#039; routines for dynamic memory, you should use new Runtime module &#039;&#039;srMem&#039;&#039;. Update palMemAlloc() to call _srMem_Allocate() and palMemFree() to call _srMem_Free().&lt;br /&gt;
&lt;br /&gt;
*Optionally, implement new routine palLog() as a logging utility for PAL and Runtime.&lt;br /&gt;
&lt;br /&gt;
== Runtime  ==&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new memory management (srCFG_MEMORY_MANAGEMENT) and multi-process target (srCFG_MULTI_PROC_TARGET) settings. By default, memory management and multi-process target are disabled. If you enable multi-process target you also need to enable memory management and configure the sizes and the maximum number of memory blocks. New Runtime module &#039;&#039;srMem&#039;&#039; uses these configurations to allocate and manage memory segments.&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new target connection timeout setting (srCFG_CONNECTION_TIMEOUT).&lt;br /&gt;
&lt;br /&gt;
*If target Test Classes and Test Functions are used, change the signature to include test label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
&lt;br /&gt;
== Windows Applications using Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
*The new &#039;&#039;&#039;s2srwin.lib&#039;&#039;&#039; has public API, published in a header srwin.h, containing the following set of routines:&lt;br /&gt;
&lt;br /&gt;
 srWin_SetMaster() - Sets the application as the master and initializes the Stride Runtime thread. In a multi-process environment only one application should make this call.&lt;br /&gt;
 srWin_AddThread() - Adds additional message processing threads to the application.&lt;br /&gt;
 srWin_Run() - Starts the processing and will not return until it has been signaled via keyboard key or CTRL-C.&lt;br /&gt;
 srWin_SetPortTCP() - Overrides the TCP port number (default: 8000) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
 srWin_SetPortSerial() - Overrides the COM port number (default: 1) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
&lt;br /&gt;
*Existing Host Apps developed against the old hostapphrt and hostapptrt libraries should be updated to as follows: &lt;br /&gt;
**replace the include of hostapp.h with include of srwin.h &lt;br /&gt;
**replace all calls to HostAppXXX() with srWin_XXX() &lt;br /&gt;
**call srWin_SetMaster() to start the runtime thread, srThread, before calling srWin_Run(). Within a multi-process target, only one process (the master) calls this routine.&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;a&amp;quot; ==&lt;br /&gt;
* Linux version of the STRIDE [[Build Tools]] is officially introduced.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;b&amp;quot; ==&lt;br /&gt;
* Relaxed [[scl_cast]]() pragma to allow cast from any integral ptr to union of ptrs&lt;br /&gt;
* Fixed compile warnings in Linux PAL.&lt;br /&gt;
* Fixed issue in instrumentation of [[Test Units]].&lt;br /&gt;
* Fixed issue with UNC paths.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0102 ==&lt;br /&gt;
* Implemented new licensing scheme. Existing licenses will not work anymore and need to be reissued. Old and new licenses could co-exist at the same location.&lt;br /&gt;
* The syntax of [[scl_ptr]] and [[scl_ptr_sized]] pragmas has changed. Now it is required to quote the direction and usage attributes. See this [[Handling_of_pointer_attribute_tokens|page]] for details.&lt;br /&gt;
* [[Test_Units#Runtime_Test_Services|Runtime Test Services]] now support adding annotations per test suite.&lt;br /&gt;
* A complete set of [[Samples]] has been implemented.&lt;br /&gt;
* Fixed several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Fixed several minor issues in [[AutoScript]]. &lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0102&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039; and &#039;&#039;&#039;3.01&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8119</id>
		<title>STRIDE 3.0.01xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8119"/>
		<updated>2008-10-15T23:55:16Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* API Changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Release Notes&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
This page documents the changes in STRIDE version 3.0.01xx (code name &#039;&#039;StoneSteps&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note that if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= What&#039;s New  =&lt;br /&gt;
&lt;br /&gt;
Based on customer feedback, in this release we have made significant performance improvements as well as many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Performance Improvements ==&lt;br /&gt;
&lt;br /&gt;
Specific improvements have been made in the following areas: &lt;br /&gt;
&lt;br /&gt;
*Database loading time has been improved &lt;br /&gt;
*Compile times are now shorter &lt;br /&gt;
*Scripting operations involving function and message payloads now perform better, especially when arrays are involved &lt;br /&gt;
*Runtime performance has been improved by optimizing payload serialization and deserialization operations&lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
&lt;br /&gt;
=== SCL Wizard ===&lt;br /&gt;
&lt;br /&gt;
The SCL Wizard functionality in [[STRIDE Studio]] has been extended so that you can now use the tool to qualify message payloads as well as function payloads. &lt;br /&gt;
&lt;br /&gt;
In addition, the following types of qualifications can now be made: &lt;br /&gt;
&lt;br /&gt;
*For payloads that include function pointers, the SCL Wizard now supports qualifying the pointers as such and identifying candidate function values &lt;br /&gt;
*Type casts can now be specified on payload members&lt;br /&gt;
&lt;br /&gt;
=== Connection Management ===&lt;br /&gt;
&lt;br /&gt;
Connection management has been greatly simplified; software managing connection to the target system has been integrated into [[STRIDE Studio]] so that connections can be managed directly from there. (It is still possible to access connection management functionality without using Studio.) &lt;br /&gt;
&lt;br /&gt;
The Panel program is no longer used, and there is no longer a requirement to load the database to communicate with a remote target. &lt;br /&gt;
&lt;br /&gt;
==== Transport Properties ====&lt;br /&gt;
&lt;br /&gt;
All transport properties can now be accessed via scripts. A new transport scripting model makes this possible.&lt;br /&gt;
&lt;br /&gt;
=== STRIDE Studio Test Runner Improvements ===&lt;br /&gt;
&lt;br /&gt;
The test runner in [[STRIDE Studio]] has incorporated several functional and usability improvements. &lt;br /&gt;
&lt;br /&gt;
*Each runnable script and folder (Suite) in a workspace now has additional properties that allow you to optionally specify a handler script that will be executed in the case of an unhandled error (property OnError) or a timeout (property OnTimeout). A timeout value can be set for each folder.&lt;br /&gt;
&lt;br /&gt;
*Each runnable folder (Suite) in a workspace now has a property (OnRunConnect) that can instruct STRIDE Studio to automatically connect to a target system before the folder is executed.&lt;br /&gt;
&lt;br /&gt;
*The workspace now has a dynamic property (ExecutionState) that allows you to alter the order of script execution at runtime.&lt;br /&gt;
&lt;br /&gt;
=== New Frameworks Feature ===&lt;br /&gt;
&lt;br /&gt;
This version introduces [[Using Frameworks|Target Frameworks]], which provide customizable templates for workspace creation. The use of frameworks simplifies the use of STRIDE and ensures consistency across a development team. &lt;br /&gt;
&lt;br /&gt;
Several [[Provided Frameworks|reference frameworks]] are included in this release, supporting the following target environments: &lt;br /&gt;
&lt;br /&gt;
*[[Provided Frameworks#Windows|Windows]] &lt;br /&gt;
*[[Provided Frameworks#Linux|Linux]] &lt;br /&gt;
*[[Provided Frameworks#WinMobile|WinMobile]] &lt;br /&gt;
*[[Provided Frameworks#Generic|Generic]]&lt;br /&gt;
&lt;br /&gt;
[[Using Packages|Packages]] are also introduced. These provide a convenient way to encapsulate SCL-annotated source code and corresponding tests for a set of interfaces. &lt;br /&gt;
&lt;br /&gt;
=== Uploading Results to STRIDE Portal ===&lt;br /&gt;
&lt;br /&gt;
Uploading test results from STRIDE Reporter to STRIDE Portal has been integrated into STRIDE Studio. Portal&#039;s server information can be configured from Studio&#039;s workspace properties while uploading results to Portal can be enabled or disabled via workspace context menu. If enabled, after running the workspace, a script folder or a script file, results in Report file will automatically be uploaded to the configured server. &lt;br /&gt;
&lt;br /&gt;
== Build Tools  ==&lt;br /&gt;
&lt;br /&gt;
A set of new command line [[Build Tools]] has been implemented: &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Stride compiler&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride database binder&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride instrumentation generator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
These utilities has been ported for Windows and Linux. Using them would allow seamless integration with a &amp;quot;make&amp;quot; build environment.&lt;br /&gt;
&lt;br /&gt;
== Target-Based Testing  ==&lt;br /&gt;
&lt;br /&gt;
Target-based (xUnit-style) testing has been simplified. The new set of SCL pragmas [[Test Units]] can now be included in a source file to tell the compiler and IM generator to automatically create test harnessing code.&lt;br /&gt;
&lt;br /&gt;
The automation components STRIDE.testclass, STRIDE.testunit and STRIDE.testfunction are removed.&lt;br /&gt;
&lt;br /&gt;
== Runtime/PAL  ==&lt;br /&gt;
&lt;br /&gt;
Based on customer requirements, in this release we have made significant changes to [[Target_Integration#The STRIDE Runtime|STRIDE Runtime]] and [[Target_Integration#The Platform Abstraction Layer (PAL)|PAL]]. &lt;br /&gt;
&lt;br /&gt;
=== Multi-Process Targets  ===&lt;br /&gt;
&lt;br /&gt;
New routines and support have been added to Runtime and PAL to support multi-process targets. Changes include: implementation of memory management and shared memory, protecting using named Mutex objects, synchronization of multiple processors and multiple threads, and usage of current process and thread IDs.&lt;br /&gt;
&lt;br /&gt;
=== Logging (Optional)  ===&lt;br /&gt;
&lt;br /&gt;
Runtime and PAL use a logging routine that can optionally be implemented in PAL. &lt;br /&gt;
&lt;br /&gt;
== Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
A new [[Windows_Off-Target_SDK|SDK]] for implemention of Off-Target applications on Windows has been packaged. It contains a library (s2srWin.dll/lib) in which the Windows PAL, Runtime, and GRS and a set of utility scripts are prebuilt. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;s2shostapphrt&#039;&#039;&#039; library, a prebuilt verion of the Host Runtime, has been removed. Building Windows applications using the Host Runtime is not supported anymore. The &#039;&#039;&#039;s2shostapptrt&#039;&#039;&#039; library, a prebuilt version of the Target Runtime, has also been removed. &lt;br /&gt;
&lt;br /&gt;
If an upgrade is performed it is strongly recommended that the above mentioned &#039;&#039;&#039;s2shostapp*&#039;&#039;&#039; libraries and their public API header (hostapp.h) be manually removed.&lt;br /&gt;
&lt;br /&gt;
= Support Wiki =&lt;br /&gt;
&lt;br /&gt;
This support wiki http://support.s2technologies.com is introduced with this version. You can navigate here from your web browser, or directly from STRIDE Studio; a link is provided in the Help menu. &lt;br /&gt;
&lt;br /&gt;
== STRIDE Samples  ==&lt;br /&gt;
&lt;br /&gt;
We have created a set of [[Samples_Overview|sample workspaces]] to aid in the evaluation of STRIDE, or as a tool for learning how to apply STRIDE to different testing scenarios. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to STRIDE, or want to learn more about using the product, this is a great place to start.&lt;br /&gt;
&lt;br /&gt;
= Acquiring the Software =&lt;br /&gt;
&lt;br /&gt;
You can download the latest release from the S2 Technologies ftp site: ftp://ftp.s2technologies.com &lt;br /&gt;
&lt;br /&gt;
To run STRIDE you will need a license. If you are not yet a customer of S2 and would like to obtain an evaluation license, email [mailto:sales@s2technologies.com S2 Sales] or call our offices at &#039;&#039;&#039;760-635-2345&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
= Installing the Software  =&lt;br /&gt;
&lt;br /&gt;
To install STRIDE for the first time, or as an upgrade to an existing installation, please refer to [[Host Installation]]. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note: if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you are new to STRIDE, we recommend that you investigate the [[Samples_Overview|New STRIDE Samples]].&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;ascript&#039;&#039;&#039; API has been changed to be more robust: &lt;br /&gt;
**Certain deprecated methods have been eliminated. &lt;br /&gt;
**Some existing API methods have been modifed. &lt;br /&gt;
**The event model has been improved to allow greater script control.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Some scripts must be modified from previous versions of STRIDE to work successfully with 3.0.01xx. The necessary changes are detailed in the [[#Migration_to_3.0.01xx|Migration to 3.0.01xx]] section below. &lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;Panel&#039;&#039;&#039; object is no longer available to scripts; its functionality has been moved under the &#039;&#039;&#039;studio&#039;&#039;&#039; object model. You can access this new functionality as &#039;&#039;&#039;studio.Connection&#039;&#039;&#039;, however if you were formerly scripting the &#039;&#039;&#039;Panel&#039;&#039;&#039; object, you may find it is no longer necessary since: &lt;br /&gt;
**You can now configure your connection properties from within STRIDE Studio (from the menu select &#039;&#039;Tools/Target Connectivity&#039;&#039;) &lt;br /&gt;
**You can now set a workspace folder property to autoconnect upon execution&lt;br /&gt;
&lt;br /&gt;
*Zero is now allowed as the maximum size under certain circumstances in &#039;&#039;&#039;scl_string&#039;&#039;&#039; and &#039;&#039;&#039;scl_ptr_sized&#039;&#039;&#039;. Details of these circumstances are contained in the &#039;&#039;&#039;[[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]]&#039;&#039;&#039; document.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compiler.MicrosoftCompatibility&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Compiler.Compatibility&#039;&#039;&#039;. Valid values are &amp;quot;Generic&amp;quot; (generic mode), &amp;quot;Microsoft&amp;quot; (Microsoft compatibility), or &amp;quot;Gnu&amp;quot; (Gnu or Gcc compatibility).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compile()&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Build()&#039;&#039;&#039;. Also new methods, &#039;&#039;&#039;studio.Workspace.CleanBuild()&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.ReloadDatabase()&#039;&#039;&#039;, have been added.&lt;br /&gt;
&lt;br /&gt;
*A new property, &#039;&#039;&#039;Output&#039;&#039;&#039;, has been added off the studio object. This property outputs text to the Studio message tab, similar to how &#039;&#039;&#039;ascript.MessageBox()&#039;&#039;&#039; works for certain scripts. This property contains one method, &#039;&#039;&#039;PrintMessage(String msg)&#039;&#039;&#039;. You can see an example of its use [[Debugging Helps|here]].&lt;br /&gt;
&lt;br /&gt;
*A new settings group has been introduced - &#039;&#039;&#039;studio.Workspace.Settings.Build&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Intercept.Path&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Intercept.SourcePath&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.Intercept.HeaderPath&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Fixes  ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This section describes defects which have been corrected in STRIDE and the customer tracking number associated with them, if any, in brackets [].&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*[1055] Not able to specifiy uppercase include directory &lt;br /&gt;
*[1163] Certain cases of array of pointers to discriminated unions that were not handled correctly in the ascript object have been fixed. &lt;br /&gt;
*[1357] The ascript &#039;&#039;&#039;Call()&#039;&#039;&#039; method, when used with RspTimeoutPeriod, only returns True if a timeout has occurred. &lt;br /&gt;
*[1469] Global casting using &#039;&#039;&#039;scl_cast&#039;&#039;&#039; no longer causes an intercept module compile error. &lt;br /&gt;
*[1539] &#039;&#039;&#039;ascript&#039;&#039;&#039; no longer returns &amp;quot;undefined&amp;quot; when calling &#039;&#039;&#039;function.ReturnValue&#039;&#039;&#039; when the captured function returns an unqualified function pointer. &lt;br /&gt;
*[1543] IM source file locations added to studio UI and automation &lt;br /&gt;
*[1564] The Studio Add files dialog has been increased from 2K bytes to 100K bytes, to allow for more files to be selected at a time. &lt;br /&gt;
*[1586] Support for Variadic Macros &lt;br /&gt;
*[1597] EDGFront crash for scl_ptr_opaque &lt;br /&gt;
*[1600] Pre-processor treats constant 1 always as 8-bit &lt;br /&gt;
*[1605] Generated Perl script generates error when run in debugger &lt;br /&gt;
*The following statement in Runtime files &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; has been changed:&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args = 0;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;is now&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt; with no initializer. This makes it portable and able to compile under Linux. &lt;br /&gt;
*A macro that determines the existence of &#039;&#039;&#039;vsnprintf()&#039;&#039;&#039; has been updated in &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; in order to make it able to compile with GCC and other non-Microsoft compilers.&amp;lt;br&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; If you are using test functions and C++ test classes, you must be using compilers that support &#039;&#039;&#039;vsnprintf&#039;&#039;&#039; (variable argument lists), which is a standard in C99 and supported in C90. &lt;br /&gt;
*When tracing on a STID it&#039;s possible to display trace information for messages that aren&#039;t captured (i.e. the message&#039;s SMID is not known to STRIDE). A problem could occur when STRIDE attempted to interpret the payload of these messages. This has now been fixed; hex values only are now shown in the trace view for in this situation. &lt;br /&gt;
*Autosense was not working properly in the editor for message payloads. This has been fixed.&lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
=== TestUnits Collection  ===&lt;br /&gt;
&lt;br /&gt;
A new TestUnits collection has been implemented. All test interfaces (specified with [[SCL_Pragmas#Test_Units | Test Unit pragmas]]) will be listed there.&lt;br /&gt;
&lt;br /&gt;
=== Functions Collection  ===&lt;br /&gt;
&lt;br /&gt;
Interfaces specified with either the [[scl_test_class]] or [[scl_test_flist]] pragmas are not listed in the Functions collection anymore. &lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
=== Memory Management  ===&lt;br /&gt;
&lt;br /&gt;
To support multi-process target, memory management support for dynamic, configurable, and internal static memory has been implemented in Runtime. Runtime makes PAL calls to acquire memory segments and manages the memory according to runtime configurations set by user. In case of multi-process target is enabled, these memory will be shared among multiple applications, and PAL should implement shared memory. &lt;br /&gt;
&lt;br /&gt;
=== Protection using Mutex  ===&lt;br /&gt;
&lt;br /&gt;
Runtime now uses named mutex objects to protect critical data from multiple and simultaneous accesses by multiple threads and, in case of multi-process target is enabled, by multiple applications. Runtime makes PAL calls to obtain and control mutex objects. &lt;br /&gt;
&lt;br /&gt;
=== New Routines  ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Memory Management&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In case of multi-process target, recommended approach is to use &amp;lt;u&amp;gt;Memory-Mapped Files&amp;lt;/u&amp;gt; to implement memory segments. &lt;br /&gt;
&lt;br /&gt;
 palMemSegmentOpen() - Open/create memory segment &lt;br /&gt;
 palMemSegmentClose() - Close memory segment&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Named Mutexes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palMutexInit() - Initialize a mutex object&lt;br /&gt;
 palMutexDestroy() - Destroy a mutex object&lt;br /&gt;
 palMutexLock() - Lock a mutex object&lt;br /&gt;
 palMutexUnlock() - Unlock a mutex object&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Task Synchronization&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palGetThreadId() - Get current thread Id&lt;br /&gt;
 palGetProcessId() - Get current process Id&lt;br /&gt;
 palSleep() - Suspend the execution of the current thread&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Logging&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is optional. &lt;br /&gt;
&lt;br /&gt;
 palLog() - Logging utility&lt;br /&gt;
&lt;br /&gt;
=== Updated Routines  ===&lt;br /&gt;
&lt;br /&gt;
*Function signatures and functionalities of palWait() &amp;amp;amp; palNotify() have been updated.&lt;br /&gt;
&lt;br /&gt;
 palWait() - now takes in an in/out pointer for events notification&lt;br /&gt;
 palNotify() - mail box Id has been updated to notify any event including mail box Ids.&lt;br /&gt;
&lt;br /&gt;
*Function signatures of palMemAlloc() &amp;amp;amp; palMemFree() have been updated.&lt;br /&gt;
&lt;br /&gt;
=== Removed Routines  ===&lt;br /&gt;
&lt;br /&gt;
 palProtect&lt;br /&gt;
 palUnprotect&lt;br /&gt;
 palCriticalErr&lt;br /&gt;
&lt;br /&gt;
=== Removed Modules  ===&lt;br /&gt;
&lt;br /&gt;
 S2Mem - The memory module provided as part of PAL has been removed. If a native &lt;br /&gt;
         operating system does not support dynamic memory, the Runtime&#039;s memory &lt;br /&gt;
         management module &#039;&#039;srMem&#039;&#039; can be used instead of &#039;&#039;S2Mem&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
&lt;br /&gt;
*STRIDE Host Release &#039;&#039;&#039;3.0.01xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;. &lt;br /&gt;
*In order to eliminate redundancy and promote an object-oriented design, &amp;quot;Member Methods&amp;quot; have been removed from srTest; only &amp;quot;Member Objects&amp;quot; exist now in srTest. In addition, accessing the functionality of Member Objects in this way is similar to accessing scripting objects through the STRIDE Reporter object model. For a detailed explanation, refer to [[Test_Units#C.2B.2B_Test_Classes|this article]] on the STRIDE Support Wiki. &lt;br /&gt;
*A new routine, &#039;&#039;&#039;srInit()&#039;&#039;&#039;, replaces deprecated &#039;&#039;&#039;srInitialize()&#039;&#039;&#039;. Now the target will not be able to set an auto-connect with timeout. &lt;br /&gt;
*The &#039;&#039;&#039;scl_tp&#039;&#039;&#039; and &#039;&#039;&#039;scl_tp_format&#039;&#039;&#039; pragmas have been deprecated. The new pragmas are &#039;&#039;&#039;scl_tracepoint&#039;&#039;&#039; and &#039;&#039;&#039;scl_tracepoint_format&#039;&#039;&#039;. &lt;br /&gt;
*The default runtime configuration in srcfg.h now has fragmentation turned on. The srCFG_MAX_TRANSPORT_UNIT is set to 2048. &lt;br /&gt;
*Fixed warnings for parameter name differences in function declarations and definitions for srSubscribe(), srTracePoint(), and srQuerySMID(). &lt;br /&gt;
*Removed unnecessary/extra response to srCONNECT_CLOSE_T_SMID message. &lt;br /&gt;
*The Runtime now checks for the connection before responding with a &amp;quot;Pong&amp;quot; upon receiving a &amp;quot;Ping.&amp;quot; &lt;br /&gt;
*Introduced 40 additional system trace points to better describe internal errors. &lt;br /&gt;
*Reporting of the error srERR_SUB_NONE has been suppressed so that it no longer generates a target trace error. &lt;br /&gt;
*Trace views now always display srTraceStr() with reserved STID (srSTID_RESERVED) regardless of trace filter settings. &lt;br /&gt;
*srPtrSetupChild() now accepts NULL for handle (out pointer - pwHandle). &lt;br /&gt;
*Added a new Runtime Test Services (RTS) API &#039;&#039;&#039;srTestCaseSetStatusEx()&#039;&#039;&#039;, which enables the providing of the actual return value of a numeric test method in the case of failure. &lt;br /&gt;
*Added two new public APIs - &amp;quot;Printing&amp;quot; APIs to display messages on Trace Views without having to specify a STID or a trace level and to set any trace filters on Trace Views. These routines support formatted strings with variable arguments. The &#039;&#039;&#039;srPrintInfo()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and Level=3. The &#039;&#039;&#039;srPrintError()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and the Level=1. &#039;&#039;&#039;Warning:&#039;&#039;&#039; These new APIs use vsnprintf() routine to process variable arguments. The vsnprintf() became a standard in C99 and is supported in C90. &lt;br /&gt;
*To support multi-process target, significant changes have been made to runtime. &lt;br /&gt;
*A new public routine, srUninit(), has been added to sr.h &amp;amp;amp; srapi.c. &lt;br /&gt;
* A new public routine for Runtime Thread exit point, srThreadUninit(), has been added to sr.h &amp;amp;amp; srthread.c. &lt;br /&gt;
*A new module, srMem, for Memory Management has been added. Its new routines, _srMem_Allocate() &amp;amp;amp; _srMem_Free(), will be used in PAL&#039;s palMemAlloc() &amp;amp;amp; palMemFree() in case of multi-process target is enabled. &lt;br /&gt;
*Calls to palProtect() &amp;amp;amp; palUnprotect() have been replaced by new routines _srProtect() &amp;amp;amp; _srUnprotect(), in which the implementation uses its own mutex object that calls PAL&#039;s mutex routines. &lt;br /&gt;
*In target Test Classes and Test Functions, added capability to specify the comment label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
* Fixed a potential data abort issue when executing delegate code in the IM prior to Runtime being initialized.&lt;br /&gt;
* Runtime Test Services APIs are now thread safe. &lt;br /&gt;
* Fixed cancelation of remote boadcast subcribtion goes in an infinite loop.&lt;br /&gt;
* Fixed Runtime resource abuse when sending lots of broadcast messages. &lt;br /&gt;
* Added partial check for message payload corectness.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapi.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srconn.h&lt;br /&gt;
 srerr.c&lt;br /&gt;
 srib.c&lt;br /&gt;
 srib.h&lt;br /&gt;
 sribctrl.c&lt;br /&gt;
 sribtr.c&lt;br /&gt;
 sribtr.h&lt;br /&gt;
 srmsgmar.c&lt;br /&gt;
 srmsgptr.c&lt;br /&gt;
 srmsgptr.h&lt;br /&gt;
 srmsgque.c&lt;br /&gt;
 srmsgque.h&lt;br /&gt;
 srmsgrt.c&lt;br /&gt;
 srmsgrt.h&lt;br /&gt;
 srmsgsub.c&lt;br /&gt;
 srmsgsub.h&lt;br /&gt;
 srstid.c&lt;br /&gt;
 srstid.h&lt;br /&gt;
 srsuid.c&lt;br /&gt;
 srsuid.h&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
 srtestutil.c&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srthread.c&lt;br /&gt;
 srthread.h&lt;br /&gt;
 srtime.c&lt;br /&gt;
 srtime.h&lt;br /&gt;
 srtp.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been added:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srmem.c&lt;br /&gt;
 srmem.h&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.01xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
Any use of test classes through the Functions collection, like: &lt;br /&gt;
&lt;br /&gt;
  $main::ascript-&amp;amp;gt;Functions-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;User-&amp;amp;gt;Call(); &lt;br /&gt;
&lt;br /&gt;
should be converted to use the new TestUnits collection: &lt;br /&gt;
&lt;br /&gt;
  $main::ascript-&amp;amp;gt;TestUnits-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;Run(); &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
=== API Changes  ===&lt;br /&gt;
&lt;br /&gt;
*The Support Wiki pages now contain reference help for AutoScript. The content has been updated to reflect the API changes, for details see the [[#AutoScript|&#039;&#039;AutoScript API Reference&#039;&#039;]]. &lt;br /&gt;
*All synchronous method calls now throw exceptions in order to indicate error conditions rather than have error conditions encoded in return values. &lt;br /&gt;
*Asychronous method calls never throw exceptions to indicate error conditions. Instead, error conditions are delivered as a new Error object that is returned to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039;. (Asynchronous methods are &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;) &lt;br /&gt;
*If &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; times out, an Error object is returned. Previously NULL was returned in this case. &lt;br /&gt;
*All objects returned by &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; have &#039;&#039;&#039;Type&#039;&#039;&#039; and &#039;&#039;&#039;Name&#039;&#039;&#039; properties. When the &#039;&#039;&#039;Type&#039;&#039;&#039; is “Error”, the Error object has additional properties that contain further details about the error. &lt;br /&gt;
*All existing script syntax for designation of message payloads has been deprecated. A new syntax that allows for greater expression has been adopted. Details can be found [[Updated Message Payload Syntax|here]]. There are no syntax changes to function payloads. &lt;br /&gt;
*The signature for &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; has been changed. Successful calls to &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; now fully initialize the object.&lt;br /&gt;
&lt;br /&gt;
=== End-Of-Life Methods and Properties  ===&lt;br /&gt;
&lt;br /&gt;
This release marks the End-Of-Life (EOL) for the listed methods and properties. A call to any of these methods or an access to any of these properties will now result in a not-implemented exception in the script making the call or access. &lt;br /&gt;
&lt;br /&gt;
*ascript.Quit() &lt;br /&gt;
*ascript.Interfaces &lt;br /&gt;
*ascript.NamedEvents &lt;br /&gt;
*ascript.WaitForEventWithTimeout &lt;br /&gt;
*ascript.RspTimeoutNotifyEnabled &lt;br /&gt;
*ascript.CreateTimer() &lt;br /&gt;
*ascript.DestroyTimer() &lt;br /&gt;
*ascript.WaitTimeoutNotifyEnabled &lt;br /&gt;
*ascript.Compare_As_C_Values() &lt;br /&gt;
*ascript.AsyncErrorNotifyEnabled &lt;br /&gt;
*ascript.Function.Item().User/Owner.SMID&lt;br /&gt;
&lt;br /&gt;
=== Recommended Steps for Migration From a Previous Version  ===&lt;br /&gt;
&lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; in all scripts. Previous logic to test for null indicating timeouts must be modified. &#039;&#039;&#039;WaitForEvent()&#039;&#039;&#039; now always returns an object, in the case of a timeout (or other error) an Error object is returned. &lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.Quit&#039;&#039;&#039; in all scripts. Modify the logic as necessary to exit the script by other means in place of the original &#039;&#039;&#039;Quit()&#039;&#039;&#039; call. &lt;br /&gt;
*Search for all asynchronous method calls (Asynchronous calls are limited to &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;). Modify the logic as necessary to call &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; if errors (including timeout error) should be detected. &lt;br /&gt;
*If you have scripts that explicitly instantiate an &#039;&#039;&#039;ascript&#039;&#039;&#039; object (i.e. they create an object using the &#039;&#039;&#039;&amp;quot;STRIDE.ascript&amp;quot;&#039;&#039;&#039; PROGID), search for all occurrences and modify the subsequent call to &#039;&#039;&#039;ascript.Initialize()&#039;&#039;&#039; to pass the new parameter set. &lt;br /&gt;
*Search for all EOL&#039;d methods and properties. Each can be replaced by setting the appropriate timeout property and handling the timeout error object delivered by WaitForEvent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;Section1&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%; border-collapse: collapse;&amp;quot; class=&amp;quot;MsoTableGrid&amp;quot;&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1pt solid windowtext; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;EOL’d&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Method or Property&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&#039;&#039;&#039;Recommended Replacement&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Quit&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Refactor&amp;lt;/span&amp;gt; script logic to exit the script by other means. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Interfaces&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Functions&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Messages&amp;lt;/span&amp;gt; as appropriate. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.NamedEvents&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitForEventWithTimeout&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() after setting desired timeout using &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitTimeoutPeriod&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.RspTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.CreateTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Add&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.DestroyTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Remove&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Compare_As_C_Values&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.AsyncErrorNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Error notification from asynchronous calls is performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Function.Item&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SMID&amp;lt;/span&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Function.Item&amp;lt;/span&amp;gt;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SUID&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
Please refer to &#039;&#039;&#039;&#039;&#039;Platform Abstraction Layer (PAL) Specification&#039;&#039;&#039;&#039;&#039; for detailed information on new APIs. You may also refer to Linux implementation of PAL, which has been updated with new routines. &lt;br /&gt;
&lt;br /&gt;
*Implement new shared memory routines, palMemSegmentOpen() &amp;amp;amp; palMemSegmentClose(). In case of multi-process target, these routines should implement shared memory using memory-mapped files.&lt;br /&gt;
&lt;br /&gt;
*Runtime now can manage dynamic, configurable, and internal static memory. In case of multi-process target, update palMemAlloc() to simply call _srMem_Allocate() and palMemFree() to simply call _srMem_Free(). In case of single-process target, you can simply allocate dynamic memory according to your Operating System. If you are upgrading, you can simply leave the current implementation as it is.&lt;br /&gt;
&lt;br /&gt;
*Implement new mutex routines, palMutexInit(), palMutexDestroy(), palMutexLock() &amp;amp;amp; palMutexUnlock, to handle any named mutex objects. It is recommended to implement a separate code for shared memory case if it is necessary.&lt;br /&gt;
&lt;br /&gt;
*Remove old routines palProtect(), palUnprotect() and palCriticalErr().&lt;br /&gt;
&lt;br /&gt;
*Implement new routines palGetThreadId() and palGetProcessId().&lt;br /&gt;
&lt;br /&gt;
*Implement new routine palSleep().&lt;br /&gt;
&lt;br /&gt;
*Update synchronization routines, palCreateNID(), palDeleteNID(), palWait() &amp;amp;amp; palNotify(), to support event notifications and in case of multi-process target is enabled, sharing of the synchronization objects among multiple processors.&lt;br /&gt;
&lt;br /&gt;
*If your PAL uses &#039;&#039;S2Mem&#039;&#039; routines for dynamic memory, you should use new Runtime module &#039;&#039;srMem&#039;&#039;. Update palMemAlloc() to call _srMem_Allocate() and palMemFree() to call _srMem_Free().&lt;br /&gt;
&lt;br /&gt;
*Optionally, implement new routine palLog() as a logging utility for PAL and Runtime.&lt;br /&gt;
&lt;br /&gt;
== Runtime  ==&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new memory management (srCFG_MEMORY_MANAGEMENT) and multi-process target (srCFG_MULTI_PROC_TARGET) settings. By default, memory management and multi-process target are disabled. If you enable multi-process target you also need to enable memory management and configure the sizes and the maximum number of memory blocks. New Runtime module &#039;&#039;srMem&#039;&#039; uses these configurations to allocate and manage memory segments.&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new target connection timeout setting (srCFG_CONNECTION_TIMEOUT).&lt;br /&gt;
&lt;br /&gt;
*If target Test Classes and Test Functions are used, change the signature to include test label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
&lt;br /&gt;
== Windows Applications using Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
*The new &#039;&#039;&#039;s2srwin.lib&#039;&#039;&#039; has public API, published in a header srwin.h, containing the following set of routines:&lt;br /&gt;
&lt;br /&gt;
 srWin_SetMaster() - Sets the application as the master and initializes the Stride Runtime thread. In a multi-process environment only one application should make this call.&lt;br /&gt;
 srWin_AddThread() - Adds additional message processing threads to the application.&lt;br /&gt;
 srWin_Run() - Starts the processing and will not return until it has been signaled via keyboard key or CTRL-C.&lt;br /&gt;
 srWin_SetPortTCP() - Overrides the TCP port number (default: 8000) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
 srWin_SetPortSerial() - Overrides the COM port number (default: 1) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
&lt;br /&gt;
*Existing Host Apps developed against the old hostapphrt and hostapptrt libraries should be updated to as follows: &lt;br /&gt;
**replace the include of hostapp.h with include of srwin.h &lt;br /&gt;
**replace all calls to HostAppXXX() with srWin_XXX() &lt;br /&gt;
**call srWin_SetMaster() to start the runtime thread, srThread, before calling srWin_Run(). Within a multi-process target, only one process (the master) calls this routine.&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;a&amp;quot; ==&lt;br /&gt;
* Linux version of the STRIDE [[Build Tools]] is officially introduced.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;b&amp;quot; ==&lt;br /&gt;
* Relaxed [[scl_cast]]() pragma to allow cast from any integral ptr to union of ptrs&lt;br /&gt;
* Fixed compile warnings in Linux PAL.&lt;br /&gt;
* Fixed issue in instrumentation of [[Test Units]].&lt;br /&gt;
* Fixed issue with UNC paths.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0102 ==&lt;br /&gt;
* Implemented new licensing scheme. Existing licenses will not work anymore and need to be reissued. Old and new licenses could co-exist at the same location.&lt;br /&gt;
* The syntax of [[scl_ptr]] and [[scl_ptr_sized]] pragmas has changed. Now it is required to quote the direction and usage attributes. See this [[Handling_of_pointer_attribute_tokens|page]] for details.&lt;br /&gt;
* [[Test_Units#Runtime_Test_Services|Runtime Test Services]] now support adding annotations per test suite.&lt;br /&gt;
* A complete set of [[Samples]] has been implemented.&lt;br /&gt;
* Fixed several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Fixed several minor issues in [[AutoScript]]. &lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0102&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039; and &#039;&#039;&#039;3.01&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8118</id>
		<title>STRIDE 3.0.01xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8118"/>
		<updated>2008-10-15T23:53:53Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* API Changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Release Notes&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
This page documents the changes in STRIDE version 3.0.01xx (code name &#039;&#039;StoneSteps&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note that if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= What&#039;s New  =&lt;br /&gt;
&lt;br /&gt;
Based on customer feedback, in this release we have made significant performance improvements as well as many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Performance Improvements ==&lt;br /&gt;
&lt;br /&gt;
Specific improvements have been made in the following areas: &lt;br /&gt;
&lt;br /&gt;
*Database loading time has been improved &lt;br /&gt;
*Compile times are now shorter &lt;br /&gt;
*Scripting operations involving function and message payloads now perform better, especially when arrays are involved &lt;br /&gt;
*Runtime performance has been improved by optimizing payload serialization and deserialization operations&lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
&lt;br /&gt;
=== SCL Wizard ===&lt;br /&gt;
&lt;br /&gt;
The SCL Wizard functionality in [[STRIDE Studio]] has been extended so that you can now use the tool to qualify message payloads as well as function payloads. &lt;br /&gt;
&lt;br /&gt;
In addition, the following types of qualifications can now be made: &lt;br /&gt;
&lt;br /&gt;
*For payloads that include function pointers, the SCL Wizard now supports qualifying the pointers as such and identifying candidate function values &lt;br /&gt;
*Type casts can now be specified on payload members&lt;br /&gt;
&lt;br /&gt;
=== Connection Management ===&lt;br /&gt;
&lt;br /&gt;
Connection management has been greatly simplified; software managing connection to the target system has been integrated into [[STRIDE Studio]] so that connections can be managed directly from there. (It is still possible to access connection management functionality without using Studio.) &lt;br /&gt;
&lt;br /&gt;
The Panel program is no longer used, and there is no longer a requirement to load the database to communicate with a remote target. &lt;br /&gt;
&lt;br /&gt;
==== Transport Properties ====&lt;br /&gt;
&lt;br /&gt;
All transport properties can now be accessed via scripts. A new transport scripting model makes this possible.&lt;br /&gt;
&lt;br /&gt;
=== STRIDE Studio Test Runner Improvements ===&lt;br /&gt;
&lt;br /&gt;
The test runner in [[STRIDE Studio]] has incorporated several functional and usability improvements. &lt;br /&gt;
&lt;br /&gt;
*Each runnable script and folder (Suite) in a workspace now has additional properties that allow you to optionally specify a handler script that will be executed in the case of an unhandled error (property OnError) or a timeout (property OnTimeout). A timeout value can be set for each folder.&lt;br /&gt;
&lt;br /&gt;
*Each runnable folder (Suite) in a workspace now has a property (OnRunConnect) that can instruct STRIDE Studio to automatically connect to a target system before the folder is executed.&lt;br /&gt;
&lt;br /&gt;
*The workspace now has a dynamic property (ExecutionState) that allows you to alter the order of script execution at runtime.&lt;br /&gt;
&lt;br /&gt;
=== New Frameworks Feature ===&lt;br /&gt;
&lt;br /&gt;
This version introduces [[Using Frameworks|Target Frameworks]], which provide customizable templates for workspace creation. The use of frameworks simplifies the use of STRIDE and ensures consistency across a development team. &lt;br /&gt;
&lt;br /&gt;
Several [[Provided Frameworks|reference frameworks]] are included in this release, supporting the following target environments: &lt;br /&gt;
&lt;br /&gt;
*[[Provided Frameworks#Windows|Windows]] &lt;br /&gt;
*[[Provided Frameworks#Linux|Linux]] &lt;br /&gt;
*[[Provided Frameworks#WinMobile|WinMobile]] &lt;br /&gt;
*[[Provided Frameworks#Generic|Generic]]&lt;br /&gt;
&lt;br /&gt;
[[Using Packages|Packages]] are also introduced. These provide a convenient way to encapsulate SCL-annotated source code and corresponding tests for a set of interfaces. &lt;br /&gt;
&lt;br /&gt;
=== Uploading Results to STRIDE Portal ===&lt;br /&gt;
&lt;br /&gt;
Uploading test results from STRIDE Reporter to STRIDE Portal has been integrated into STRIDE Studio. Portal&#039;s server information can be configured from Studio&#039;s workspace properties while uploading results to Portal can be enabled or disabled via workspace context menu. If enabled, after running the workspace, a script folder or a script file, results in Report file will automatically be uploaded to the configured server. &lt;br /&gt;
&lt;br /&gt;
== Build Tools  ==&lt;br /&gt;
&lt;br /&gt;
A set of new command line [[Build Tools]] has been implemented: &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Stride compiler&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride database binder&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride instrumentation generator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
These utilities has been ported for Windows and Linux. Using them would allow seamless integration with a &amp;quot;make&amp;quot; build environment.&lt;br /&gt;
&lt;br /&gt;
== Target-Based Testing  ==&lt;br /&gt;
&lt;br /&gt;
Target-based (xUnit-style) testing has been simplified. The new set of SCL pragmas [[Test Units]] can now be included in a source file to tell the compiler and IM generator to automatically create test harnessing code.&lt;br /&gt;
&lt;br /&gt;
The automation components STRIDE.testclass, STRIDE.testunit and STRIDE.testfunction are removed.&lt;br /&gt;
&lt;br /&gt;
== Runtime/PAL  ==&lt;br /&gt;
&lt;br /&gt;
Based on customer requirements, in this release we have made significant changes to [[Target_Integration#The STRIDE Runtime|STRIDE Runtime]] and [[Target_Integration#The Platform Abstraction Layer (PAL)|PAL]]. &lt;br /&gt;
&lt;br /&gt;
=== Multi-Process Targets  ===&lt;br /&gt;
&lt;br /&gt;
New routines and support have been added to Runtime and PAL to support multi-process targets. Changes include: implementation of memory management and shared memory, protecting using named Mutex objects, synchronization of multiple processors and multiple threads, and usage of current process and thread IDs.&lt;br /&gt;
&lt;br /&gt;
=== Logging (Optional)  ===&lt;br /&gt;
&lt;br /&gt;
Runtime and PAL use a logging routine that can optionally be implemented in PAL. &lt;br /&gt;
&lt;br /&gt;
== Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
A new [[Windows_Off-Target_SDK|SDK]] for implemention of Off-Target applications on Windows has been packaged. It contains a library (s2srWin.dll/lib) in which the Windows PAL, Runtime, and GRS and a set of utility scripts are prebuilt. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;s2shostapphrt&#039;&#039;&#039; library, a prebuilt verion of the Host Runtime, has been removed. Building Windows applications using the Host Runtime is not supported anymore. The &#039;&#039;&#039;s2shostapptrt&#039;&#039;&#039; library, a prebuilt version of the Target Runtime, has also been removed. &lt;br /&gt;
&lt;br /&gt;
If an upgrade is performed it is strongly recommended that the above mentioned &#039;&#039;&#039;s2shostapp*&#039;&#039;&#039; libraries and their public API header (hostapp.h) be manually removed.&lt;br /&gt;
&lt;br /&gt;
= Support Wiki =&lt;br /&gt;
&lt;br /&gt;
This support wiki http://support.s2technologies.com is introduced with this version. You can navigate here from your web browser, or directly from STRIDE Studio; a link is provided in the Help menu. &lt;br /&gt;
&lt;br /&gt;
== STRIDE Samples  ==&lt;br /&gt;
&lt;br /&gt;
We have created a set of [[Samples_Overview|sample workspaces]] to aid in the evaluation of STRIDE, or as a tool for learning how to apply STRIDE to different testing scenarios. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to STRIDE, or want to learn more about using the product, this is a great place to start.&lt;br /&gt;
&lt;br /&gt;
= Acquiring the Software =&lt;br /&gt;
&lt;br /&gt;
You can download the latest release from the S2 Technologies ftp site: ftp://ftp.s2technologies.com &lt;br /&gt;
&lt;br /&gt;
To run STRIDE you will need a license. If you are not yet a customer of S2 and would like to obtain an evaluation license, email [mailto:sales@s2technologies.com S2 Sales] or call our offices at &#039;&#039;&#039;760-635-2345&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
= Installing the Software  =&lt;br /&gt;
&lt;br /&gt;
To install STRIDE for the first time, or as an upgrade to an existing installation, please refer to [[Host Installation]]. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note: if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you are new to STRIDE, we recommend that you investigate the [[Samples_Overview|New STRIDE Samples]].&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;ascript&#039;&#039;&#039; API has been changed to be more robust: &lt;br /&gt;
**Certain deprecated methods have been eliminated. &lt;br /&gt;
**Some existing API methods have been modifed. &lt;br /&gt;
**The event model has been improved to allow greater script control.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Some scripts must be modified from previous versions of STRIDE to work successfully with 3.0.01xx. The necessary changes are detailed in the [[#Migration_to_3.0.01xx|Migration to 3.0.01xx]] section below. &lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;Panel&#039;&#039;&#039; object is no longer available to scripts; its functionality has been moved under the &#039;&#039;&#039;studio&#039;&#039;&#039; object model. You can access this new functionality as &#039;&#039;&#039;studio.Connection&#039;&#039;&#039;, however if you were formerly scripting the &#039;&#039;&#039;Panel&#039;&#039;&#039; object, you may find it is no longer necessary since: &lt;br /&gt;
**You can now configure your connection properties from within STRIDE Studio (from the menu select &#039;&#039;Tools/Target Connectivity&#039;&#039;) &lt;br /&gt;
**You can now set a workspace folder property to autoconnect upon execution&lt;br /&gt;
&lt;br /&gt;
*Zero is now allowed as the maximum size under certain circumstances in &#039;&#039;&#039;scl_string&#039;&#039;&#039; and &#039;&#039;&#039;scl_ptr_sized&#039;&#039;&#039;. Details of these circumstances are contained in the &#039;&#039;&#039;[[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]]&#039;&#039;&#039; document.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compiler.MicrosoftCompatibility&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Compiler.Compatibility&#039;&#039;&#039;. Valid values are &amp;quot;Generic&amp;quot; (generic mode), &amp;quot;Microsoft&amp;quot; (Microsoft compatibility), or &amp;quot;Gnu&amp;quot; (Gnu or Gcc compatibility).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compile()&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Build()&#039;&#039;&#039;. Also new methods, &#039;&#039;&#039;studio.Workspace.CleanBuild()&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.ReloadDatabase()&#039;&#039;&#039;, have been added.&lt;br /&gt;
&lt;br /&gt;
*A new property, &#039;&#039;&#039;Output&#039;&#039;&#039;, has been added off the studio object. This property outputs text to the Studio message tab, similar to how &#039;&#039;&#039;ascript.MessageBox()&#039;&#039;&#039; works for certain scripts. This property contains one method, &#039;&#039;&#039;PrintMessage(String msg)&#039;&#039;&#039;. You can see an example of its use [[Debugging Helps|here]].&lt;br /&gt;
&lt;br /&gt;
*A new settings group has been introduced - &#039;&#039;&#039;studio.Workspace.Settings.Build&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Intercept.Path&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Intercept.SourcePath&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.Intercept.HeaderPath&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Fixes  ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This section describes defects which have been corrected in STRIDE and the customer tracking number associated with them, if any, in brackets [].&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*[1055] Not able to specifiy uppercase include directory &lt;br /&gt;
*[1163] Certain cases of array of pointers to discriminated unions that were not handled correctly in the ascript object have been fixed. &lt;br /&gt;
*[1357] The ascript &#039;&#039;&#039;Call()&#039;&#039;&#039; method, when used with RspTimeoutPeriod, only returns True if a timeout has occurred. &lt;br /&gt;
*[1469] Global casting using &#039;&#039;&#039;scl_cast&#039;&#039;&#039; no longer causes an intercept module compile error. &lt;br /&gt;
*[1539] &#039;&#039;&#039;ascript&#039;&#039;&#039; no longer returns &amp;quot;undefined&amp;quot; when calling &#039;&#039;&#039;function.ReturnValue&#039;&#039;&#039; when the captured function returns an unqualified function pointer. &lt;br /&gt;
*[1543] IM source file locations added to studio UI and automation &lt;br /&gt;
*[1564] The Studio Add files dialog has been increased from 2K bytes to 100K bytes, to allow for more files to be selected at a time. &lt;br /&gt;
*[1586] Support for Variadic Macros &lt;br /&gt;
*[1597] EDGFront crash for scl_ptr_opaque &lt;br /&gt;
*[1600] Pre-processor treats constant 1 always as 8-bit &lt;br /&gt;
*[1605] Generated Perl script generates error when run in debugger &lt;br /&gt;
*The following statement in Runtime files &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; has been changed:&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args = 0;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;is now&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt; with no initializer. This makes it portable and able to compile under Linux. &lt;br /&gt;
*A macro that determines the existence of &#039;&#039;&#039;vsnprintf()&#039;&#039;&#039; has been updated in &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; in order to make it able to compile with GCC and other non-Microsoft compilers.&amp;lt;br&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; If you are using test functions and C++ test classes, you must be using compilers that support &#039;&#039;&#039;vsnprintf&#039;&#039;&#039; (variable argument lists), which is a standard in C99 and supported in C90. &lt;br /&gt;
*When tracing on a STID it&#039;s possible to display trace information for messages that aren&#039;t captured (i.e. the message&#039;s SMID is not known to STRIDE). A problem could occur when STRIDE attempted to interpret the payload of these messages. This has now been fixed; hex values only are now shown in the trace view for in this situation. &lt;br /&gt;
*Autosense was not working properly in the editor for message payloads. This has been fixed.&lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
=== TestUnits Collection  ===&lt;br /&gt;
&lt;br /&gt;
A new TestUnits collection has been implemented. All test interfaces (specified with [[SCL_Pragmas#Test_Units | Test Unit pragmas]]) will be listed there.&lt;br /&gt;
&lt;br /&gt;
=== Functions Collection  ===&lt;br /&gt;
&lt;br /&gt;
Interfaces specified with either the [[scl_test_class]] or [[scl_test_flist]] pragmas are not listed in the Functions collection anymore. &lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
=== Memory Management  ===&lt;br /&gt;
&lt;br /&gt;
To support multi-process target, memory management support for dynamic, configurable, and internal static memory has been implemented in Runtime. Runtime makes PAL calls to acquire memory segments and manages the memory according to runtime configurations set by user. In case of multi-process target is enabled, these memory will be shared among multiple applications, and PAL should implement shared memory. &lt;br /&gt;
&lt;br /&gt;
=== Protection using Mutex  ===&lt;br /&gt;
&lt;br /&gt;
Runtime now uses named mutex objects to protect critical data from multiple and simultaneous accesses by multiple threads and, in case of multi-process target is enabled, by multiple applications. Runtime makes PAL calls to obtain and control mutex objects. &lt;br /&gt;
&lt;br /&gt;
=== New Routines  ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Memory Management&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In case of multi-process target, recommended approach is to use &amp;lt;u&amp;gt;Memory-Mapped Files&amp;lt;/u&amp;gt; to implement memory segments. &lt;br /&gt;
&lt;br /&gt;
 palMemSegmentOpen() - Open/create memory segment &lt;br /&gt;
 palMemSegmentClose() - Close memory segment&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Named Mutexes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palMutexInit() - Initialize a mutex object&lt;br /&gt;
 palMutexDestroy() - Destroy a mutex object&lt;br /&gt;
 palMutexLock() - Lock a mutex object&lt;br /&gt;
 palMutexUnlock() - Unlock a mutex object&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Task Synchronization&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palGetThreadId() - Get current thread Id&lt;br /&gt;
 palGetProcessId() - Get current process Id&lt;br /&gt;
 palSleep() - Suspend the execution of the current thread&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Logging&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is optional. &lt;br /&gt;
&lt;br /&gt;
 palLog() - Logging utility&lt;br /&gt;
&lt;br /&gt;
=== Updated Routines  ===&lt;br /&gt;
&lt;br /&gt;
*Function signatures and functionalities of palWait() &amp;amp;amp; palNotify() have been updated.&lt;br /&gt;
&lt;br /&gt;
 palWait() - now takes in an in/out pointer for events notification&lt;br /&gt;
 palNotify() - mail box Id has been updated to notify any event including mail box Ids.&lt;br /&gt;
&lt;br /&gt;
*Function signatures of palMemAlloc() &amp;amp;amp; palMemFree() have been updated.&lt;br /&gt;
&lt;br /&gt;
=== Removed Routines  ===&lt;br /&gt;
&lt;br /&gt;
 palProtect&lt;br /&gt;
 palUnprotect&lt;br /&gt;
 palCriticalErr&lt;br /&gt;
&lt;br /&gt;
=== Removed Modules  ===&lt;br /&gt;
&lt;br /&gt;
 S2Mem - The memory module provided as part of PAL has been removed. If a native &lt;br /&gt;
         operating system does not support dynamic memory, the Runtime&#039;s memory &lt;br /&gt;
         management module &#039;&#039;srMem&#039;&#039; can be used instead of &#039;&#039;S2Mem&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
&lt;br /&gt;
*STRIDE Host Release &#039;&#039;&#039;3.0.01xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;. &lt;br /&gt;
*In order to eliminate redundancy and promote an object-oriented design, &amp;quot;Member Methods&amp;quot; have been removed from srTest; only &amp;quot;Member Objects&amp;quot; exist now in srTest. In addition, accessing the functionality of Member Objects in this way is similar to accessing scripting objects through the STRIDE Reporter object model. For a detailed explanation, refer to [[Test_Units#C.2B.2B_Test_Classes|this article]] on the STRIDE Support Wiki. &lt;br /&gt;
*A new routine, &#039;&#039;&#039;srInit()&#039;&#039;&#039;, replaces deprecated &#039;&#039;&#039;srInitialize()&#039;&#039;&#039;. Now the target will not be able to set an auto-connect with timeout. &lt;br /&gt;
*The &#039;&#039;&#039;scl_tp&#039;&#039;&#039; and &#039;&#039;&#039;scl_tp_format&#039;&#039;&#039; pragmas have been deprecated. The new pragmas are &#039;&#039;&#039;scl_tracepoint&#039;&#039;&#039; and &#039;&#039;&#039;scl_tracepoint_format&#039;&#039;&#039;. &lt;br /&gt;
*The default runtime configuration in srcfg.h now has fragmentation turned on. The srCFG_MAX_TRANSPORT_UNIT is set to 2048. &lt;br /&gt;
*Fixed warnings for parameter name differences in function declarations and definitions for srSubscribe(), srTracePoint(), and srQuerySMID(). &lt;br /&gt;
*Removed unnecessary/extra response to srCONNECT_CLOSE_T_SMID message. &lt;br /&gt;
*The Runtime now checks for the connection before responding with a &amp;quot;Pong&amp;quot; upon receiving a &amp;quot;Ping.&amp;quot; &lt;br /&gt;
*Introduced 40 additional system trace points to better describe internal errors. &lt;br /&gt;
*Reporting of the error srERR_SUB_NONE has been suppressed so that it no longer generates a target trace error. &lt;br /&gt;
*Trace views now always display srTraceStr() with reserved STID (srSTID_RESERVED) regardless of trace filter settings. &lt;br /&gt;
*srPtrSetupChild() now accepts NULL for handle (out pointer - pwHandle). &lt;br /&gt;
*Added a new Runtime Test Services (RTS) API &#039;&#039;&#039;srTestCaseSetStatusEx()&#039;&#039;&#039;, which enables the providing of the actual return value of a numeric test method in the case of failure. &lt;br /&gt;
*Added two new public APIs - &amp;quot;Printing&amp;quot; APIs to display messages on Trace Views without having to specify a STID or a trace level and to set any trace filters on Trace Views. These routines support formatted strings with variable arguments. The &#039;&#039;&#039;srPrintInfo()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and Level=3. The &#039;&#039;&#039;srPrintError()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and the Level=1. &#039;&#039;&#039;Warning:&#039;&#039;&#039; These new APIs use vsnprintf() routine to process variable arguments. The vsnprintf() became a standard in C99 and is supported in C90. &lt;br /&gt;
*To support multi-process target, significant changes have been made to runtime. &lt;br /&gt;
*A new public routine, srUninit(), has been added to sr.h &amp;amp;amp; srapi.c. &lt;br /&gt;
* A new public routine for Runtime Thread exit point, srThreadUninit(), has been added to sr.h &amp;amp;amp; srthread.c. &lt;br /&gt;
*A new module, srMem, for Memory Management has been added. Its new routines, _srMem_Allocate() &amp;amp;amp; _srMem_Free(), will be used in PAL&#039;s palMemAlloc() &amp;amp;amp; palMemFree() in case of multi-process target is enabled. &lt;br /&gt;
*Calls to palProtect() &amp;amp;amp; palUnprotect() have been replaced by new routines _srProtect() &amp;amp;amp; _srUnprotect(), in which the implementation uses its own mutex object that calls PAL&#039;s mutex routines. &lt;br /&gt;
*In target Test Classes and Test Functions, added capability to specify the comment label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
* Fixed a potential data abort issue when executing delegate code in the IM prior to Runtime being initialized.&lt;br /&gt;
* Runtime Test Services APIs are now thread safe. &lt;br /&gt;
* Fixed cancelation of remote boadcast subcribtion goes in an infinite loop.&lt;br /&gt;
* Fixed Runtime resource abuse when sending lots of broadcast messages. &lt;br /&gt;
* Added partial check for message payload corectness.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapi.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srconn.h&lt;br /&gt;
 srerr.c&lt;br /&gt;
 srib.c&lt;br /&gt;
 srib.h&lt;br /&gt;
 sribctrl.c&lt;br /&gt;
 sribtr.c&lt;br /&gt;
 sribtr.h&lt;br /&gt;
 srmsgmar.c&lt;br /&gt;
 srmsgptr.c&lt;br /&gt;
 srmsgptr.h&lt;br /&gt;
 srmsgque.c&lt;br /&gt;
 srmsgque.h&lt;br /&gt;
 srmsgrt.c&lt;br /&gt;
 srmsgrt.h&lt;br /&gt;
 srmsgsub.c&lt;br /&gt;
 srmsgsub.h&lt;br /&gt;
 srstid.c&lt;br /&gt;
 srstid.h&lt;br /&gt;
 srsuid.c&lt;br /&gt;
 srsuid.h&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
 srtestutil.c&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srthread.c&lt;br /&gt;
 srthread.h&lt;br /&gt;
 srtime.c&lt;br /&gt;
 srtime.h&lt;br /&gt;
 srtp.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been added:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srmem.c&lt;br /&gt;
 srmem.h&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.01xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
Any use of test classes through the Functions collection, like: &lt;br /&gt;
&lt;br /&gt;
  $main::ascript-&amp;amp;gt;Functions-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;User-&amp;amp;gt;Call(); &lt;br /&gt;
&lt;br /&gt;
should be converted to use the new TestUnits collection: &lt;br /&gt;
&lt;br /&gt;
  $main::ascript-&amp;amp;gt;TestUnits-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;Run(); &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
=== API Changes  ===&lt;br /&gt;
&lt;br /&gt;
*The Support Wiki pages now contain reference help for AutoScript. The content has been updated to reflect the API changes, for details see the [[#ascript|&#039;&#039;AutoScript API Reference&#039;&#039;]]. &lt;br /&gt;
*All synchronous method calls now throw exceptions in order to indicate error conditions rather than have error conditions encoded in return values. &lt;br /&gt;
*Asychronous method calls never throw exceptions to indicate error conditions. Instead, error conditions are delivered as a new Error object that is returned to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039;. (Asynchronous methods are &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;) &lt;br /&gt;
*If &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; times out, an Error object is returned. Previously NULL was returned in this case. &lt;br /&gt;
*All objects returned by &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; have &#039;&#039;&#039;Type&#039;&#039;&#039; and &#039;&#039;&#039;Name&#039;&#039;&#039; properties. When the &#039;&#039;&#039;Type&#039;&#039;&#039; is “Error”, the Error object has additional properties that contain further details about the error. &lt;br /&gt;
*All existing script syntax for designation of message payloads has been deprecated. A new syntax that allows for greater expression has been adopted. Details can be found [[Updated Message Payload Syntax|here]]. There are no syntax changes to function payloads. &lt;br /&gt;
*The signature for &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; has been changed. Successful calls to &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; now fully initialize the object.&lt;br /&gt;
&lt;br /&gt;
=== End-Of-Life Methods and Properties  ===&lt;br /&gt;
&lt;br /&gt;
This release marks the End-Of-Life (EOL) for the listed methods and properties. A call to any of these methods or an access to any of these properties will now result in a not-implemented exception in the script making the call or access. &lt;br /&gt;
&lt;br /&gt;
*ascript.Quit() &lt;br /&gt;
*ascript.Interfaces &lt;br /&gt;
*ascript.NamedEvents &lt;br /&gt;
*ascript.WaitForEventWithTimeout &lt;br /&gt;
*ascript.RspTimeoutNotifyEnabled &lt;br /&gt;
*ascript.CreateTimer() &lt;br /&gt;
*ascript.DestroyTimer() &lt;br /&gt;
*ascript.WaitTimeoutNotifyEnabled &lt;br /&gt;
*ascript.Compare_As_C_Values() &lt;br /&gt;
*ascript.AsyncErrorNotifyEnabled &lt;br /&gt;
*ascript.Function.Item().User/Owner.SMID&lt;br /&gt;
&lt;br /&gt;
=== Recommended Steps for Migration From a Previous Version  ===&lt;br /&gt;
&lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; in all scripts. Previous logic to test for null indicating timeouts must be modified. &#039;&#039;&#039;WaitForEvent()&#039;&#039;&#039; now always returns an object, in the case of a timeout (or other error) an Error object is returned. &lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.Quit&#039;&#039;&#039; in all scripts. Modify the logic as necessary to exit the script by other means in place of the original &#039;&#039;&#039;Quit()&#039;&#039;&#039; call. &lt;br /&gt;
*Search for all asynchronous method calls (Asynchronous calls are limited to &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;). Modify the logic as necessary to call &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; if errors (including timeout error) should be detected. &lt;br /&gt;
*If you have scripts that explicitly instantiate an &#039;&#039;&#039;ascript&#039;&#039;&#039; object (i.e. they create an object using the &#039;&#039;&#039;&amp;quot;STRIDE.ascript&amp;quot;&#039;&#039;&#039; PROGID), search for all occurrences and modify the subsequent call to &#039;&#039;&#039;ascript.Initialize()&#039;&#039;&#039; to pass the new parameter set. &lt;br /&gt;
*Search for all EOL&#039;d methods and properties. Each can be replaced by setting the appropriate timeout property and handling the timeout error object delivered by WaitForEvent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;Section1&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%; border-collapse: collapse;&amp;quot; class=&amp;quot;MsoTableGrid&amp;quot;&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1pt solid windowtext; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;EOL’d&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Method or Property&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&#039;&#039;&#039;Recommended Replacement&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Quit&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Refactor&amp;lt;/span&amp;gt; script logic to exit the script by other means. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Interfaces&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Functions&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Messages&amp;lt;/span&amp;gt; as appropriate. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.NamedEvents&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitForEventWithTimeout&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() after setting desired timeout using &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitTimeoutPeriod&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.RspTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.CreateTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Add&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.DestroyTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Remove&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Compare_As_C_Values&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.AsyncErrorNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Error notification from asynchronous calls is performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Function.Item&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SMID&amp;lt;/span&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Function.Item&amp;lt;/span&amp;gt;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SUID&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
Please refer to &#039;&#039;&#039;&#039;&#039;Platform Abstraction Layer (PAL) Specification&#039;&#039;&#039;&#039;&#039; for detailed information on new APIs. You may also refer to Linux implementation of PAL, which has been updated with new routines. &lt;br /&gt;
&lt;br /&gt;
*Implement new shared memory routines, palMemSegmentOpen() &amp;amp;amp; palMemSegmentClose(). In case of multi-process target, these routines should implement shared memory using memory-mapped files.&lt;br /&gt;
&lt;br /&gt;
*Runtime now can manage dynamic, configurable, and internal static memory. In case of multi-process target, update palMemAlloc() to simply call _srMem_Allocate() and palMemFree() to simply call _srMem_Free(). In case of single-process target, you can simply allocate dynamic memory according to your Operating System. If you are upgrading, you can simply leave the current implementation as it is.&lt;br /&gt;
&lt;br /&gt;
*Implement new mutex routines, palMutexInit(), palMutexDestroy(), palMutexLock() &amp;amp;amp; palMutexUnlock, to handle any named mutex objects. It is recommended to implement a separate code for shared memory case if it is necessary.&lt;br /&gt;
&lt;br /&gt;
*Remove old routines palProtect(), palUnprotect() and palCriticalErr().&lt;br /&gt;
&lt;br /&gt;
*Implement new routines palGetThreadId() and palGetProcessId().&lt;br /&gt;
&lt;br /&gt;
*Implement new routine palSleep().&lt;br /&gt;
&lt;br /&gt;
*Update synchronization routines, palCreateNID(), palDeleteNID(), palWait() &amp;amp;amp; palNotify(), to support event notifications and in case of multi-process target is enabled, sharing of the synchronization objects among multiple processors.&lt;br /&gt;
&lt;br /&gt;
*If your PAL uses &#039;&#039;S2Mem&#039;&#039; routines for dynamic memory, you should use new Runtime module &#039;&#039;srMem&#039;&#039;. Update palMemAlloc() to call _srMem_Allocate() and palMemFree() to call _srMem_Free().&lt;br /&gt;
&lt;br /&gt;
*Optionally, implement new routine palLog() as a logging utility for PAL and Runtime.&lt;br /&gt;
&lt;br /&gt;
== Runtime  ==&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new memory management (srCFG_MEMORY_MANAGEMENT) and multi-process target (srCFG_MULTI_PROC_TARGET) settings. By default, memory management and multi-process target are disabled. If you enable multi-process target you also need to enable memory management and configure the sizes and the maximum number of memory blocks. New Runtime module &#039;&#039;srMem&#039;&#039; uses these configurations to allocate and manage memory segments.&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new target connection timeout setting (srCFG_CONNECTION_TIMEOUT).&lt;br /&gt;
&lt;br /&gt;
*If target Test Classes and Test Functions are used, change the signature to include test label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
&lt;br /&gt;
== Windows Applications using Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
*The new &#039;&#039;&#039;s2srwin.lib&#039;&#039;&#039; has public API, published in a header srwin.h, containing the following set of routines:&lt;br /&gt;
&lt;br /&gt;
 srWin_SetMaster() - Sets the application as the master and initializes the Stride Runtime thread. In a multi-process environment only one application should make this call.&lt;br /&gt;
 srWin_AddThread() - Adds additional message processing threads to the application.&lt;br /&gt;
 srWin_Run() - Starts the processing and will not return until it has been signaled via keyboard key or CTRL-C.&lt;br /&gt;
 srWin_SetPortTCP() - Overrides the TCP port number (default: 8000) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
 srWin_SetPortSerial() - Overrides the COM port number (default: 1) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
&lt;br /&gt;
*Existing Host Apps developed against the old hostapphrt and hostapptrt libraries should be updated to as follows: &lt;br /&gt;
**replace the include of hostapp.h with include of srwin.h &lt;br /&gt;
**replace all calls to HostAppXXX() with srWin_XXX() &lt;br /&gt;
**call srWin_SetMaster() to start the runtime thread, srThread, before calling srWin_Run(). Within a multi-process target, only one process (the master) calls this routine.&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;a&amp;quot; ==&lt;br /&gt;
* Linux version of the STRIDE [[Build Tools]] is officially introduced.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;b&amp;quot; ==&lt;br /&gt;
* Relaxed [[scl_cast]]() pragma to allow cast from any integral ptr to union of ptrs&lt;br /&gt;
* Fixed compile warnings in Linux PAL.&lt;br /&gt;
* Fixed issue in instrumentation of [[Test Units]].&lt;br /&gt;
* Fixed issue with UNC paths.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0102 ==&lt;br /&gt;
* Implemented new licensing scheme. Existing licenses will not work anymore and need to be reissued. Old and new licenses could co-exist at the same location.&lt;br /&gt;
* The syntax of [[scl_ptr]] and [[scl_ptr_sized]] pragmas has changed. Now it is required to quote the direction and usage attributes. See this [[Handling_of_pointer_attribute_tokens|page]] for details.&lt;br /&gt;
* [[Test_Units#Runtime_Test_Services|Runtime Test Services]] now support adding annotations per test suite.&lt;br /&gt;
* A complete set of [[Samples]] has been implemented.&lt;br /&gt;
* Fixed several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Fixed several minor issues in [[AutoScript]]. &lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0102&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039; and &#039;&#039;&#039;3.01&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8117</id>
		<title>STRIDE 3.0.01xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8117"/>
		<updated>2008-10-15T23:53:19Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* API Changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Release Notes&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
This page documents the changes in STRIDE version 3.0.01xx (code name &#039;&#039;StoneSteps&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note that if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= What&#039;s New  =&lt;br /&gt;
&lt;br /&gt;
Based on customer feedback, in this release we have made significant performance improvements as well as many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Performance Improvements ==&lt;br /&gt;
&lt;br /&gt;
Specific improvements have been made in the following areas: &lt;br /&gt;
&lt;br /&gt;
*Database loading time has been improved &lt;br /&gt;
*Compile times are now shorter &lt;br /&gt;
*Scripting operations involving function and message payloads now perform better, especially when arrays are involved &lt;br /&gt;
*Runtime performance has been improved by optimizing payload serialization and deserialization operations&lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
&lt;br /&gt;
=== SCL Wizard ===&lt;br /&gt;
&lt;br /&gt;
The SCL Wizard functionality in [[STRIDE Studio]] has been extended so that you can now use the tool to qualify message payloads as well as function payloads. &lt;br /&gt;
&lt;br /&gt;
In addition, the following types of qualifications can now be made: &lt;br /&gt;
&lt;br /&gt;
*For payloads that include function pointers, the SCL Wizard now supports qualifying the pointers as such and identifying candidate function values &lt;br /&gt;
*Type casts can now be specified on payload members&lt;br /&gt;
&lt;br /&gt;
=== Connection Management ===&lt;br /&gt;
&lt;br /&gt;
Connection management has been greatly simplified; software managing connection to the target system has been integrated into [[STRIDE Studio]] so that connections can be managed directly from there. (It is still possible to access connection management functionality without using Studio.) &lt;br /&gt;
&lt;br /&gt;
The Panel program is no longer used, and there is no longer a requirement to load the database to communicate with a remote target. &lt;br /&gt;
&lt;br /&gt;
==== Transport Properties ====&lt;br /&gt;
&lt;br /&gt;
All transport properties can now be accessed via scripts. A new transport scripting model makes this possible.&lt;br /&gt;
&lt;br /&gt;
=== STRIDE Studio Test Runner Improvements ===&lt;br /&gt;
&lt;br /&gt;
The test runner in [[STRIDE Studio]] has incorporated several functional and usability improvements. &lt;br /&gt;
&lt;br /&gt;
*Each runnable script and folder (Suite) in a workspace now has additional properties that allow you to optionally specify a handler script that will be executed in the case of an unhandled error (property OnError) or a timeout (property OnTimeout). A timeout value can be set for each folder.&lt;br /&gt;
&lt;br /&gt;
*Each runnable folder (Suite) in a workspace now has a property (OnRunConnect) that can instruct STRIDE Studio to automatically connect to a target system before the folder is executed.&lt;br /&gt;
&lt;br /&gt;
*The workspace now has a dynamic property (ExecutionState) that allows you to alter the order of script execution at runtime.&lt;br /&gt;
&lt;br /&gt;
=== New Frameworks Feature ===&lt;br /&gt;
&lt;br /&gt;
This version introduces [[Using Frameworks|Target Frameworks]], which provide customizable templates for workspace creation. The use of frameworks simplifies the use of STRIDE and ensures consistency across a development team. &lt;br /&gt;
&lt;br /&gt;
Several [[Provided Frameworks|reference frameworks]] are included in this release, supporting the following target environments: &lt;br /&gt;
&lt;br /&gt;
*[[Provided Frameworks#Windows|Windows]] &lt;br /&gt;
*[[Provided Frameworks#Linux|Linux]] &lt;br /&gt;
*[[Provided Frameworks#WinMobile|WinMobile]] &lt;br /&gt;
*[[Provided Frameworks#Generic|Generic]]&lt;br /&gt;
&lt;br /&gt;
[[Using Packages|Packages]] are also introduced. These provide a convenient way to encapsulate SCL-annotated source code and corresponding tests for a set of interfaces. &lt;br /&gt;
&lt;br /&gt;
=== Uploading Results to STRIDE Portal ===&lt;br /&gt;
&lt;br /&gt;
Uploading test results from STRIDE Reporter to STRIDE Portal has been integrated into STRIDE Studio. Portal&#039;s server information can be configured from Studio&#039;s workspace properties while uploading results to Portal can be enabled or disabled via workspace context menu. If enabled, after running the workspace, a script folder or a script file, results in Report file will automatically be uploaded to the configured server. &lt;br /&gt;
&lt;br /&gt;
== Build Tools  ==&lt;br /&gt;
&lt;br /&gt;
A set of new command line [[Build Tools]] has been implemented: &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Stride compiler&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride database binder&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride instrumentation generator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
These utilities has been ported for Windows and Linux. Using them would allow seamless integration with a &amp;quot;make&amp;quot; build environment.&lt;br /&gt;
&lt;br /&gt;
== Target-Based Testing  ==&lt;br /&gt;
&lt;br /&gt;
Target-based (xUnit-style) testing has been simplified. The new set of SCL pragmas [[Test Units]] can now be included in a source file to tell the compiler and IM generator to automatically create test harnessing code.&lt;br /&gt;
&lt;br /&gt;
The automation components STRIDE.testclass, STRIDE.testunit and STRIDE.testfunction are removed.&lt;br /&gt;
&lt;br /&gt;
== Runtime/PAL  ==&lt;br /&gt;
&lt;br /&gt;
Based on customer requirements, in this release we have made significant changes to [[Target_Integration#The STRIDE Runtime|STRIDE Runtime]] and [[Target_Integration#The Platform Abstraction Layer (PAL)|PAL]]. &lt;br /&gt;
&lt;br /&gt;
=== Multi-Process Targets  ===&lt;br /&gt;
&lt;br /&gt;
New routines and support have been added to Runtime and PAL to support multi-process targets. Changes include: implementation of memory management and shared memory, protecting using named Mutex objects, synchronization of multiple processors and multiple threads, and usage of current process and thread IDs.&lt;br /&gt;
&lt;br /&gt;
=== Logging (Optional)  ===&lt;br /&gt;
&lt;br /&gt;
Runtime and PAL use a logging routine that can optionally be implemented in PAL. &lt;br /&gt;
&lt;br /&gt;
== Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
A new [[Windows_Off-Target_SDK|SDK]] for implemention of Off-Target applications on Windows has been packaged. It contains a library (s2srWin.dll/lib) in which the Windows PAL, Runtime, and GRS and a set of utility scripts are prebuilt. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;s2shostapphrt&#039;&#039;&#039; library, a prebuilt verion of the Host Runtime, has been removed. Building Windows applications using the Host Runtime is not supported anymore. The &#039;&#039;&#039;s2shostapptrt&#039;&#039;&#039; library, a prebuilt version of the Target Runtime, has also been removed. &lt;br /&gt;
&lt;br /&gt;
If an upgrade is performed it is strongly recommended that the above mentioned &#039;&#039;&#039;s2shostapp*&#039;&#039;&#039; libraries and their public API header (hostapp.h) be manually removed.&lt;br /&gt;
&lt;br /&gt;
= Support Wiki =&lt;br /&gt;
&lt;br /&gt;
This support wiki http://support.s2technologies.com is introduced with this version. You can navigate here from your web browser, or directly from STRIDE Studio; a link is provided in the Help menu. &lt;br /&gt;
&lt;br /&gt;
== STRIDE Samples  ==&lt;br /&gt;
&lt;br /&gt;
We have created a set of [[Samples_Overview|sample workspaces]] to aid in the evaluation of STRIDE, or as a tool for learning how to apply STRIDE to different testing scenarios. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to STRIDE, or want to learn more about using the product, this is a great place to start.&lt;br /&gt;
&lt;br /&gt;
= Acquiring the Software =&lt;br /&gt;
&lt;br /&gt;
You can download the latest release from the S2 Technologies ftp site: ftp://ftp.s2technologies.com &lt;br /&gt;
&lt;br /&gt;
To run STRIDE you will need a license. If you are not yet a customer of S2 and would like to obtain an evaluation license, email [mailto:sales@s2technologies.com S2 Sales] or call our offices at &#039;&#039;&#039;760-635-2345&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
= Installing the Software  =&lt;br /&gt;
&lt;br /&gt;
To install STRIDE for the first time, or as an upgrade to an existing installation, please refer to [[Host Installation]]. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note: if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you are new to STRIDE, we recommend that you investigate the [[Samples_Overview|New STRIDE Samples]].&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;ascript&#039;&#039;&#039; API has been changed to be more robust: &lt;br /&gt;
**Certain deprecated methods have been eliminated. &lt;br /&gt;
**Some existing API methods have been modifed. &lt;br /&gt;
**The event model has been improved to allow greater script control.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Some scripts must be modified from previous versions of STRIDE to work successfully with 3.0.01xx. The necessary changes are detailed in the [[#Migration_to_3.0.01xx|Migration to 3.0.01xx]] section below. &lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;Panel&#039;&#039;&#039; object is no longer available to scripts; its functionality has been moved under the &#039;&#039;&#039;studio&#039;&#039;&#039; object model. You can access this new functionality as &#039;&#039;&#039;studio.Connection&#039;&#039;&#039;, however if you were formerly scripting the &#039;&#039;&#039;Panel&#039;&#039;&#039; object, you may find it is no longer necessary since: &lt;br /&gt;
**You can now configure your connection properties from within STRIDE Studio (from the menu select &#039;&#039;Tools/Target Connectivity&#039;&#039;) &lt;br /&gt;
**You can now set a workspace folder property to autoconnect upon execution&lt;br /&gt;
&lt;br /&gt;
*Zero is now allowed as the maximum size under certain circumstances in &#039;&#039;&#039;scl_string&#039;&#039;&#039; and &#039;&#039;&#039;scl_ptr_sized&#039;&#039;&#039;. Details of these circumstances are contained in the &#039;&#039;&#039;[[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]]&#039;&#039;&#039; document.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compiler.MicrosoftCompatibility&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Compiler.Compatibility&#039;&#039;&#039;. Valid values are &amp;quot;Generic&amp;quot; (generic mode), &amp;quot;Microsoft&amp;quot; (Microsoft compatibility), or &amp;quot;Gnu&amp;quot; (Gnu or Gcc compatibility).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compile()&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Build()&#039;&#039;&#039;. Also new methods, &#039;&#039;&#039;studio.Workspace.CleanBuild()&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.ReloadDatabase()&#039;&#039;&#039;, have been added.&lt;br /&gt;
&lt;br /&gt;
*A new property, &#039;&#039;&#039;Output&#039;&#039;&#039;, has been added off the studio object. This property outputs text to the Studio message tab, similar to how &#039;&#039;&#039;ascript.MessageBox()&#039;&#039;&#039; works for certain scripts. This property contains one method, &#039;&#039;&#039;PrintMessage(String msg)&#039;&#039;&#039;. You can see an example of its use [[Debugging Helps|here]].&lt;br /&gt;
&lt;br /&gt;
*A new settings group has been introduced - &#039;&#039;&#039;studio.Workspace.Settings.Build&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Intercept.Path&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Intercept.SourcePath&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.Intercept.HeaderPath&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Fixes  ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This section describes defects which have been corrected in STRIDE and the customer tracking number associated with them, if any, in brackets [].&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*[1055] Not able to specifiy uppercase include directory &lt;br /&gt;
*[1163] Certain cases of array of pointers to discriminated unions that were not handled correctly in the ascript object have been fixed. &lt;br /&gt;
*[1357] The ascript &#039;&#039;&#039;Call()&#039;&#039;&#039; method, when used with RspTimeoutPeriod, only returns True if a timeout has occurred. &lt;br /&gt;
*[1469] Global casting using &#039;&#039;&#039;scl_cast&#039;&#039;&#039; no longer causes an intercept module compile error. &lt;br /&gt;
*[1539] &#039;&#039;&#039;ascript&#039;&#039;&#039; no longer returns &amp;quot;undefined&amp;quot; when calling &#039;&#039;&#039;function.ReturnValue&#039;&#039;&#039; when the captured function returns an unqualified function pointer. &lt;br /&gt;
*[1543] IM source file locations added to studio UI and automation &lt;br /&gt;
*[1564] The Studio Add files dialog has been increased from 2K bytes to 100K bytes, to allow for more files to be selected at a time. &lt;br /&gt;
*[1586] Support for Variadic Macros &lt;br /&gt;
*[1597] EDGFront crash for scl_ptr_opaque &lt;br /&gt;
*[1600] Pre-processor treats constant 1 always as 8-bit &lt;br /&gt;
*[1605] Generated Perl script generates error when run in debugger &lt;br /&gt;
*The following statement in Runtime files &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; has been changed:&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args = 0;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;is now&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt; with no initializer. This makes it portable and able to compile under Linux. &lt;br /&gt;
*A macro that determines the existence of &#039;&#039;&#039;vsnprintf()&#039;&#039;&#039; has been updated in &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; in order to make it able to compile with GCC and other non-Microsoft compilers.&amp;lt;br&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; If you are using test functions and C++ test classes, you must be using compilers that support &#039;&#039;&#039;vsnprintf&#039;&#039;&#039; (variable argument lists), which is a standard in C99 and supported in C90. &lt;br /&gt;
*When tracing on a STID it&#039;s possible to display trace information for messages that aren&#039;t captured (i.e. the message&#039;s SMID is not known to STRIDE). A problem could occur when STRIDE attempted to interpret the payload of these messages. This has now been fixed; hex values only are now shown in the trace view for in this situation. &lt;br /&gt;
*Autosense was not working properly in the editor for message payloads. This has been fixed.&lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
=== TestUnits Collection  ===&lt;br /&gt;
&lt;br /&gt;
A new TestUnits collection has been implemented. All test interfaces (specified with [[SCL_Pragmas#Test_Units | Test Unit pragmas]]) will be listed there.&lt;br /&gt;
&lt;br /&gt;
=== Functions Collection  ===&lt;br /&gt;
&lt;br /&gt;
Interfaces specified with either the [[scl_test_class]] or [[scl_test_flist]] pragmas are not listed in the Functions collection anymore. &lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
=== Memory Management  ===&lt;br /&gt;
&lt;br /&gt;
To support multi-process target, memory management support for dynamic, configurable, and internal static memory has been implemented in Runtime. Runtime makes PAL calls to acquire memory segments and manages the memory according to runtime configurations set by user. In case of multi-process target is enabled, these memory will be shared among multiple applications, and PAL should implement shared memory. &lt;br /&gt;
&lt;br /&gt;
=== Protection using Mutex  ===&lt;br /&gt;
&lt;br /&gt;
Runtime now uses named mutex objects to protect critical data from multiple and simultaneous accesses by multiple threads and, in case of multi-process target is enabled, by multiple applications. Runtime makes PAL calls to obtain and control mutex objects. &lt;br /&gt;
&lt;br /&gt;
=== New Routines  ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Memory Management&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In case of multi-process target, recommended approach is to use &amp;lt;u&amp;gt;Memory-Mapped Files&amp;lt;/u&amp;gt; to implement memory segments. &lt;br /&gt;
&lt;br /&gt;
 palMemSegmentOpen() - Open/create memory segment &lt;br /&gt;
 palMemSegmentClose() - Close memory segment&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Named Mutexes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palMutexInit() - Initialize a mutex object&lt;br /&gt;
 palMutexDestroy() - Destroy a mutex object&lt;br /&gt;
 palMutexLock() - Lock a mutex object&lt;br /&gt;
 palMutexUnlock() - Unlock a mutex object&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Task Synchronization&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palGetThreadId() - Get current thread Id&lt;br /&gt;
 palGetProcessId() - Get current process Id&lt;br /&gt;
 palSleep() - Suspend the execution of the current thread&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Logging&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is optional. &lt;br /&gt;
&lt;br /&gt;
 palLog() - Logging utility&lt;br /&gt;
&lt;br /&gt;
=== Updated Routines  ===&lt;br /&gt;
&lt;br /&gt;
*Function signatures and functionalities of palWait() &amp;amp;amp; palNotify() have been updated.&lt;br /&gt;
&lt;br /&gt;
 palWait() - now takes in an in/out pointer for events notification&lt;br /&gt;
 palNotify() - mail box Id has been updated to notify any event including mail box Ids.&lt;br /&gt;
&lt;br /&gt;
*Function signatures of palMemAlloc() &amp;amp;amp; palMemFree() have been updated.&lt;br /&gt;
&lt;br /&gt;
=== Removed Routines  ===&lt;br /&gt;
&lt;br /&gt;
 palProtect&lt;br /&gt;
 palUnprotect&lt;br /&gt;
 palCriticalErr&lt;br /&gt;
&lt;br /&gt;
=== Removed Modules  ===&lt;br /&gt;
&lt;br /&gt;
 S2Mem - The memory module provided as part of PAL has been removed. If a native &lt;br /&gt;
         operating system does not support dynamic memory, the Runtime&#039;s memory &lt;br /&gt;
         management module &#039;&#039;srMem&#039;&#039; can be used instead of &#039;&#039;S2Mem&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
&lt;br /&gt;
*STRIDE Host Release &#039;&#039;&#039;3.0.01xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;. &lt;br /&gt;
*In order to eliminate redundancy and promote an object-oriented design, &amp;quot;Member Methods&amp;quot; have been removed from srTest; only &amp;quot;Member Objects&amp;quot; exist now in srTest. In addition, accessing the functionality of Member Objects in this way is similar to accessing scripting objects through the STRIDE Reporter object model. For a detailed explanation, refer to [[Test_Units#C.2B.2B_Test_Classes|this article]] on the STRIDE Support Wiki. &lt;br /&gt;
*A new routine, &#039;&#039;&#039;srInit()&#039;&#039;&#039;, replaces deprecated &#039;&#039;&#039;srInitialize()&#039;&#039;&#039;. Now the target will not be able to set an auto-connect with timeout. &lt;br /&gt;
*The &#039;&#039;&#039;scl_tp&#039;&#039;&#039; and &#039;&#039;&#039;scl_tp_format&#039;&#039;&#039; pragmas have been deprecated. The new pragmas are &#039;&#039;&#039;scl_tracepoint&#039;&#039;&#039; and &#039;&#039;&#039;scl_tracepoint_format&#039;&#039;&#039;. &lt;br /&gt;
*The default runtime configuration in srcfg.h now has fragmentation turned on. The srCFG_MAX_TRANSPORT_UNIT is set to 2048. &lt;br /&gt;
*Fixed warnings for parameter name differences in function declarations and definitions for srSubscribe(), srTracePoint(), and srQuerySMID(). &lt;br /&gt;
*Removed unnecessary/extra response to srCONNECT_CLOSE_T_SMID message. &lt;br /&gt;
*The Runtime now checks for the connection before responding with a &amp;quot;Pong&amp;quot; upon receiving a &amp;quot;Ping.&amp;quot; &lt;br /&gt;
*Introduced 40 additional system trace points to better describe internal errors. &lt;br /&gt;
*Reporting of the error srERR_SUB_NONE has been suppressed so that it no longer generates a target trace error. &lt;br /&gt;
*Trace views now always display srTraceStr() with reserved STID (srSTID_RESERVED) regardless of trace filter settings. &lt;br /&gt;
*srPtrSetupChild() now accepts NULL for handle (out pointer - pwHandle). &lt;br /&gt;
*Added a new Runtime Test Services (RTS) API &#039;&#039;&#039;srTestCaseSetStatusEx()&#039;&#039;&#039;, which enables the providing of the actual return value of a numeric test method in the case of failure. &lt;br /&gt;
*Added two new public APIs - &amp;quot;Printing&amp;quot; APIs to display messages on Trace Views without having to specify a STID or a trace level and to set any trace filters on Trace Views. These routines support formatted strings with variable arguments. The &#039;&#039;&#039;srPrintInfo()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and Level=3. The &#039;&#039;&#039;srPrintError()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and the Level=1. &#039;&#039;&#039;Warning:&#039;&#039;&#039; These new APIs use vsnprintf() routine to process variable arguments. The vsnprintf() became a standard in C99 and is supported in C90. &lt;br /&gt;
*To support multi-process target, significant changes have been made to runtime. &lt;br /&gt;
*A new public routine, srUninit(), has been added to sr.h &amp;amp;amp; srapi.c. &lt;br /&gt;
* A new public routine for Runtime Thread exit point, srThreadUninit(), has been added to sr.h &amp;amp;amp; srthread.c. &lt;br /&gt;
*A new module, srMem, for Memory Management has been added. Its new routines, _srMem_Allocate() &amp;amp;amp; _srMem_Free(), will be used in PAL&#039;s palMemAlloc() &amp;amp;amp; palMemFree() in case of multi-process target is enabled. &lt;br /&gt;
*Calls to palProtect() &amp;amp;amp; palUnprotect() have been replaced by new routines _srProtect() &amp;amp;amp; _srUnprotect(), in which the implementation uses its own mutex object that calls PAL&#039;s mutex routines. &lt;br /&gt;
*In target Test Classes and Test Functions, added capability to specify the comment label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
* Fixed a potential data abort issue when executing delegate code in the IM prior to Runtime being initialized.&lt;br /&gt;
* Runtime Test Services APIs are now thread safe. &lt;br /&gt;
* Fixed cancelation of remote boadcast subcribtion goes in an infinite loop.&lt;br /&gt;
* Fixed Runtime resource abuse when sending lots of broadcast messages. &lt;br /&gt;
* Added partial check for message payload corectness.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapi.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srconn.h&lt;br /&gt;
 srerr.c&lt;br /&gt;
 srib.c&lt;br /&gt;
 srib.h&lt;br /&gt;
 sribctrl.c&lt;br /&gt;
 sribtr.c&lt;br /&gt;
 sribtr.h&lt;br /&gt;
 srmsgmar.c&lt;br /&gt;
 srmsgptr.c&lt;br /&gt;
 srmsgptr.h&lt;br /&gt;
 srmsgque.c&lt;br /&gt;
 srmsgque.h&lt;br /&gt;
 srmsgrt.c&lt;br /&gt;
 srmsgrt.h&lt;br /&gt;
 srmsgsub.c&lt;br /&gt;
 srmsgsub.h&lt;br /&gt;
 srstid.c&lt;br /&gt;
 srstid.h&lt;br /&gt;
 srsuid.c&lt;br /&gt;
 srsuid.h&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
 srtestutil.c&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srthread.c&lt;br /&gt;
 srthread.h&lt;br /&gt;
 srtime.c&lt;br /&gt;
 srtime.h&lt;br /&gt;
 srtp.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been added:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srmem.c&lt;br /&gt;
 srmem.h&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.01xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
Any use of test classes through the Functions collection, like: &lt;br /&gt;
&lt;br /&gt;
  $main::ascript-&amp;amp;gt;Functions-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;User-&amp;amp;gt;Call(); &lt;br /&gt;
&lt;br /&gt;
should be converted to use the new TestUnits collection: &lt;br /&gt;
&lt;br /&gt;
  $main::ascript-&amp;amp;gt;TestUnits-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;Run(); &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
=== API Changes  ===&lt;br /&gt;
&lt;br /&gt;
*The Support Wiki pages now contain reference help for AutoScript. The content has been updated to reflect the API changes, for details see the [#ascript|&#039;&#039;AutoScript API Reference&#039;&#039;]. &lt;br /&gt;
*All synchronous method calls now throw exceptions in order to indicate error conditions rather than have error conditions encoded in return values. &lt;br /&gt;
*Asychronous method calls never throw exceptions to indicate error conditions. Instead, error conditions are delivered as a new Error object that is returned to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039;. (Asynchronous methods are &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;) &lt;br /&gt;
*If &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; times out, an Error object is returned. Previously NULL was returned in this case. &lt;br /&gt;
*All objects returned by &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; have &#039;&#039;&#039;Type&#039;&#039;&#039; and &#039;&#039;&#039;Name&#039;&#039;&#039; properties. When the &#039;&#039;&#039;Type&#039;&#039;&#039; is “Error”, the Error object has additional properties that contain further details about the error. &lt;br /&gt;
*All existing script syntax for designation of message payloads has been deprecated. A new syntax that allows for greater expression has been adopted. Details can be found [[Updated Message Payload Syntax|here]]. There are no syntax changes to function payloads. &lt;br /&gt;
*The signature for &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; has been changed. Successful calls to &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; now fully initialize the object.&lt;br /&gt;
&lt;br /&gt;
=== End-Of-Life Methods and Properties  ===&lt;br /&gt;
&lt;br /&gt;
This release marks the End-Of-Life (EOL) for the listed methods and properties. A call to any of these methods or an access to any of these properties will now result in a not-implemented exception in the script making the call or access. &lt;br /&gt;
&lt;br /&gt;
*ascript.Quit() &lt;br /&gt;
*ascript.Interfaces &lt;br /&gt;
*ascript.NamedEvents &lt;br /&gt;
*ascript.WaitForEventWithTimeout &lt;br /&gt;
*ascript.RspTimeoutNotifyEnabled &lt;br /&gt;
*ascript.CreateTimer() &lt;br /&gt;
*ascript.DestroyTimer() &lt;br /&gt;
*ascript.WaitTimeoutNotifyEnabled &lt;br /&gt;
*ascript.Compare_As_C_Values() &lt;br /&gt;
*ascript.AsyncErrorNotifyEnabled &lt;br /&gt;
*ascript.Function.Item().User/Owner.SMID&lt;br /&gt;
&lt;br /&gt;
=== Recommended Steps for Migration From a Previous Version  ===&lt;br /&gt;
&lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; in all scripts. Previous logic to test for null indicating timeouts must be modified. &#039;&#039;&#039;WaitForEvent()&#039;&#039;&#039; now always returns an object, in the case of a timeout (or other error) an Error object is returned. &lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.Quit&#039;&#039;&#039; in all scripts. Modify the logic as necessary to exit the script by other means in place of the original &#039;&#039;&#039;Quit()&#039;&#039;&#039; call. &lt;br /&gt;
*Search for all asynchronous method calls (Asynchronous calls are limited to &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;). Modify the logic as necessary to call &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; if errors (including timeout error) should be detected. &lt;br /&gt;
*If you have scripts that explicitly instantiate an &#039;&#039;&#039;ascript&#039;&#039;&#039; object (i.e. they create an object using the &#039;&#039;&#039;&amp;quot;STRIDE.ascript&amp;quot;&#039;&#039;&#039; PROGID), search for all occurrences and modify the subsequent call to &#039;&#039;&#039;ascript.Initialize()&#039;&#039;&#039; to pass the new parameter set. &lt;br /&gt;
*Search for all EOL&#039;d methods and properties. Each can be replaced by setting the appropriate timeout property and handling the timeout error object delivered by WaitForEvent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;Section1&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%; border-collapse: collapse;&amp;quot; class=&amp;quot;MsoTableGrid&amp;quot;&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1pt solid windowtext; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;EOL’d&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Method or Property&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&#039;&#039;&#039;Recommended Replacement&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Quit&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Refactor&amp;lt;/span&amp;gt; script logic to exit the script by other means. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Interfaces&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Functions&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Messages&amp;lt;/span&amp;gt; as appropriate. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.NamedEvents&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitForEventWithTimeout&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() after setting desired timeout using &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitTimeoutPeriod&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.RspTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.CreateTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Add&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.DestroyTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Remove&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Compare_As_C_Values&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.AsyncErrorNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Error notification from asynchronous calls is performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Function.Item&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SMID&amp;lt;/span&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Function.Item&amp;lt;/span&amp;gt;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SUID&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
Please refer to &#039;&#039;&#039;&#039;&#039;Platform Abstraction Layer (PAL) Specification&#039;&#039;&#039;&#039;&#039; for detailed information on new APIs. You may also refer to Linux implementation of PAL, which has been updated with new routines. &lt;br /&gt;
&lt;br /&gt;
*Implement new shared memory routines, palMemSegmentOpen() &amp;amp;amp; palMemSegmentClose(). In case of multi-process target, these routines should implement shared memory using memory-mapped files.&lt;br /&gt;
&lt;br /&gt;
*Runtime now can manage dynamic, configurable, and internal static memory. In case of multi-process target, update palMemAlloc() to simply call _srMem_Allocate() and palMemFree() to simply call _srMem_Free(). In case of single-process target, you can simply allocate dynamic memory according to your Operating System. If you are upgrading, you can simply leave the current implementation as it is.&lt;br /&gt;
&lt;br /&gt;
*Implement new mutex routines, palMutexInit(), palMutexDestroy(), palMutexLock() &amp;amp;amp; palMutexUnlock, to handle any named mutex objects. It is recommended to implement a separate code for shared memory case if it is necessary.&lt;br /&gt;
&lt;br /&gt;
*Remove old routines palProtect(), palUnprotect() and palCriticalErr().&lt;br /&gt;
&lt;br /&gt;
*Implement new routines palGetThreadId() and palGetProcessId().&lt;br /&gt;
&lt;br /&gt;
*Implement new routine palSleep().&lt;br /&gt;
&lt;br /&gt;
*Update synchronization routines, palCreateNID(), palDeleteNID(), palWait() &amp;amp;amp; palNotify(), to support event notifications and in case of multi-process target is enabled, sharing of the synchronization objects among multiple processors.&lt;br /&gt;
&lt;br /&gt;
*If your PAL uses &#039;&#039;S2Mem&#039;&#039; routines for dynamic memory, you should use new Runtime module &#039;&#039;srMem&#039;&#039;. Update palMemAlloc() to call _srMem_Allocate() and palMemFree() to call _srMem_Free().&lt;br /&gt;
&lt;br /&gt;
*Optionally, implement new routine palLog() as a logging utility for PAL and Runtime.&lt;br /&gt;
&lt;br /&gt;
== Runtime  ==&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new memory management (srCFG_MEMORY_MANAGEMENT) and multi-process target (srCFG_MULTI_PROC_TARGET) settings. By default, memory management and multi-process target are disabled. If you enable multi-process target you also need to enable memory management and configure the sizes and the maximum number of memory blocks. New Runtime module &#039;&#039;srMem&#039;&#039; uses these configurations to allocate and manage memory segments.&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new target connection timeout setting (srCFG_CONNECTION_TIMEOUT).&lt;br /&gt;
&lt;br /&gt;
*If target Test Classes and Test Functions are used, change the signature to include test label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
&lt;br /&gt;
== Windows Applications using Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
*The new &#039;&#039;&#039;s2srwin.lib&#039;&#039;&#039; has public API, published in a header srwin.h, containing the following set of routines:&lt;br /&gt;
&lt;br /&gt;
 srWin_SetMaster() - Sets the application as the master and initializes the Stride Runtime thread. In a multi-process environment only one application should make this call.&lt;br /&gt;
 srWin_AddThread() - Adds additional message processing threads to the application.&lt;br /&gt;
 srWin_Run() - Starts the processing and will not return until it has been signaled via keyboard key or CTRL-C.&lt;br /&gt;
 srWin_SetPortTCP() - Overrides the TCP port number (default: 8000) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
 srWin_SetPortSerial() - Overrides the COM port number (default: 1) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
&lt;br /&gt;
*Existing Host Apps developed against the old hostapphrt and hostapptrt libraries should be updated to as follows: &lt;br /&gt;
**replace the include of hostapp.h with include of srwin.h &lt;br /&gt;
**replace all calls to HostAppXXX() with srWin_XXX() &lt;br /&gt;
**call srWin_SetMaster() to start the runtime thread, srThread, before calling srWin_Run(). Within a multi-process target, only one process (the master) calls this routine.&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;a&amp;quot; ==&lt;br /&gt;
* Linux version of the STRIDE [[Build Tools]] is officially introduced.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;b&amp;quot; ==&lt;br /&gt;
* Relaxed [[scl_cast]]() pragma to allow cast from any integral ptr to union of ptrs&lt;br /&gt;
* Fixed compile warnings in Linux PAL.&lt;br /&gt;
* Fixed issue in instrumentation of [[Test Units]].&lt;br /&gt;
* Fixed issue with UNC paths.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0102 ==&lt;br /&gt;
* Implemented new licensing scheme. Existing licenses will not work anymore and need to be reissued. Old and new licenses could co-exist at the same location.&lt;br /&gt;
* The syntax of [[scl_ptr]] and [[scl_ptr_sized]] pragmas has changed. Now it is required to quote the direction and usage attributes. See this [[Handling_of_pointer_attribute_tokens|page]] for details.&lt;br /&gt;
* [[Test_Units#Runtime_Test_Services|Runtime Test Services]] now support adding annotations per test suite.&lt;br /&gt;
* A complete set of [[Samples]] has been implemented.&lt;br /&gt;
* Fixed several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Fixed several minor issues in [[AutoScript]]. &lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0102&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039; and &#039;&#039;&#039;3.01&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8116</id>
		<title>STRIDE 3.0.01xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8116"/>
		<updated>2008-10-15T23:51:38Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* API Changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Release Notes&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
This page documents the changes in STRIDE version 3.0.01xx (code name &#039;&#039;StoneSteps&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note that if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= What&#039;s New  =&lt;br /&gt;
&lt;br /&gt;
Based on customer feedback, in this release we have made significant performance improvements as well as many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Performance Improvements ==&lt;br /&gt;
&lt;br /&gt;
Specific improvements have been made in the following areas: &lt;br /&gt;
&lt;br /&gt;
*Database loading time has been improved &lt;br /&gt;
*Compile times are now shorter &lt;br /&gt;
*Scripting operations involving function and message payloads now perform better, especially when arrays are involved &lt;br /&gt;
*Runtime performance has been improved by optimizing payload serialization and deserialization operations&lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
&lt;br /&gt;
=== SCL Wizard ===&lt;br /&gt;
&lt;br /&gt;
The SCL Wizard functionality in [[STRIDE Studio]] has been extended so that you can now use the tool to qualify message payloads as well as function payloads. &lt;br /&gt;
&lt;br /&gt;
In addition, the following types of qualifications can now be made: &lt;br /&gt;
&lt;br /&gt;
*For payloads that include function pointers, the SCL Wizard now supports qualifying the pointers as such and identifying candidate function values &lt;br /&gt;
*Type casts can now be specified on payload members&lt;br /&gt;
&lt;br /&gt;
=== Connection Management ===&lt;br /&gt;
&lt;br /&gt;
Connection management has been greatly simplified; software managing connection to the target system has been integrated into [[STRIDE Studio]] so that connections can be managed directly from there. (It is still possible to access connection management functionality without using Studio.) &lt;br /&gt;
&lt;br /&gt;
The Panel program is no longer used, and there is no longer a requirement to load the database to communicate with a remote target. &lt;br /&gt;
&lt;br /&gt;
==== Transport Properties ====&lt;br /&gt;
&lt;br /&gt;
All transport properties can now be accessed via scripts. A new transport scripting model makes this possible.&lt;br /&gt;
&lt;br /&gt;
=== STRIDE Studio Test Runner Improvements ===&lt;br /&gt;
&lt;br /&gt;
The test runner in [[STRIDE Studio]] has incorporated several functional and usability improvements. &lt;br /&gt;
&lt;br /&gt;
*Each runnable script and folder (Suite) in a workspace now has additional properties that allow you to optionally specify a handler script that will be executed in the case of an unhandled error (property OnError) or a timeout (property OnTimeout). A timeout value can be set for each folder.&lt;br /&gt;
&lt;br /&gt;
*Each runnable folder (Suite) in a workspace now has a property (OnRunConnect) that can instruct STRIDE Studio to automatically connect to a target system before the folder is executed.&lt;br /&gt;
&lt;br /&gt;
*The workspace now has a dynamic property (ExecutionState) that allows you to alter the order of script execution at runtime.&lt;br /&gt;
&lt;br /&gt;
=== New Frameworks Feature ===&lt;br /&gt;
&lt;br /&gt;
This version introduces [[Using Frameworks|Target Frameworks]], which provide customizable templates for workspace creation. The use of frameworks simplifies the use of STRIDE and ensures consistency across a development team. &lt;br /&gt;
&lt;br /&gt;
Several [[Provided Frameworks|reference frameworks]] are included in this release, supporting the following target environments: &lt;br /&gt;
&lt;br /&gt;
*[[Provided Frameworks#Windows|Windows]] &lt;br /&gt;
*[[Provided Frameworks#Linux|Linux]] &lt;br /&gt;
*[[Provided Frameworks#WinMobile|WinMobile]] &lt;br /&gt;
*[[Provided Frameworks#Generic|Generic]]&lt;br /&gt;
&lt;br /&gt;
[[Using Packages|Packages]] are also introduced. These provide a convenient way to encapsulate SCL-annotated source code and corresponding tests for a set of interfaces. &lt;br /&gt;
&lt;br /&gt;
=== Uploading Results to STRIDE Portal ===&lt;br /&gt;
&lt;br /&gt;
Uploading test results from STRIDE Reporter to STRIDE Portal has been integrated into STRIDE Studio. Portal&#039;s server information can be configured from Studio&#039;s workspace properties while uploading results to Portal can be enabled or disabled via workspace context menu. If enabled, after running the workspace, a script folder or a script file, results in Report file will automatically be uploaded to the configured server. &lt;br /&gt;
&lt;br /&gt;
== Build Tools  ==&lt;br /&gt;
&lt;br /&gt;
A set of new command line [[Build Tools]] has been implemented: &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Stride compiler&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride database binder&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride instrumentation generator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
These utilities has been ported for Windows and Linux. Using them would allow seamless integration with a &amp;quot;make&amp;quot; build environment.&lt;br /&gt;
&lt;br /&gt;
== Target-Based Testing  ==&lt;br /&gt;
&lt;br /&gt;
Target-based (xUnit-style) testing has been simplified. The new set of SCL pragmas [[Test Units]] can now be included in a source file to tell the compiler and IM generator to automatically create test harnessing code.&lt;br /&gt;
&lt;br /&gt;
The automation components STRIDE.testclass, STRIDE.testunit and STRIDE.testfunction are removed.&lt;br /&gt;
&lt;br /&gt;
== Runtime/PAL  ==&lt;br /&gt;
&lt;br /&gt;
Based on customer requirements, in this release we have made significant changes to [[Target_Integration#The STRIDE Runtime|STRIDE Runtime]] and [[Target_Integration#The Platform Abstraction Layer (PAL)|PAL]]. &lt;br /&gt;
&lt;br /&gt;
=== Multi-Process Targets  ===&lt;br /&gt;
&lt;br /&gt;
New routines and support have been added to Runtime and PAL to support multi-process targets. Changes include: implementation of memory management and shared memory, protecting using named Mutex objects, synchronization of multiple processors and multiple threads, and usage of current process and thread IDs.&lt;br /&gt;
&lt;br /&gt;
=== Logging (Optional)  ===&lt;br /&gt;
&lt;br /&gt;
Runtime and PAL use a logging routine that can optionally be implemented in PAL. &lt;br /&gt;
&lt;br /&gt;
== Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
A new [[Windows_Off-Target_SDK|SDK]] for implemention of Off-Target applications on Windows has been packaged. It contains a library (s2srWin.dll/lib) in which the Windows PAL, Runtime, and GRS and a set of utility scripts are prebuilt. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;s2shostapphrt&#039;&#039;&#039; library, a prebuilt verion of the Host Runtime, has been removed. Building Windows applications using the Host Runtime is not supported anymore. The &#039;&#039;&#039;s2shostapptrt&#039;&#039;&#039; library, a prebuilt version of the Target Runtime, has also been removed. &lt;br /&gt;
&lt;br /&gt;
If an upgrade is performed it is strongly recommended that the above mentioned &#039;&#039;&#039;s2shostapp*&#039;&#039;&#039; libraries and their public API header (hostapp.h) be manually removed.&lt;br /&gt;
&lt;br /&gt;
= Support Wiki =&lt;br /&gt;
&lt;br /&gt;
This support wiki http://support.s2technologies.com is introduced with this version. You can navigate here from your web browser, or directly from STRIDE Studio; a link is provided in the Help menu. &lt;br /&gt;
&lt;br /&gt;
== STRIDE Samples  ==&lt;br /&gt;
&lt;br /&gt;
We have created a set of [[Samples_Overview|sample workspaces]] to aid in the evaluation of STRIDE, or as a tool for learning how to apply STRIDE to different testing scenarios. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to STRIDE, or want to learn more about using the product, this is a great place to start.&lt;br /&gt;
&lt;br /&gt;
= Acquiring the Software =&lt;br /&gt;
&lt;br /&gt;
You can download the latest release from the S2 Technologies ftp site: ftp://ftp.s2technologies.com &lt;br /&gt;
&lt;br /&gt;
To run STRIDE you will need a license. If you are not yet a customer of S2 and would like to obtain an evaluation license, email [mailto:sales@s2technologies.com S2 Sales] or call our offices at &#039;&#039;&#039;760-635-2345&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
= Installing the Software  =&lt;br /&gt;
&lt;br /&gt;
To install STRIDE for the first time, or as an upgrade to an existing installation, please refer to [[Host Installation]]. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note: if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you are new to STRIDE, we recommend that you investigate the [[Samples_Overview|New STRIDE Samples]].&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;ascript&#039;&#039;&#039; API has been changed to be more robust: &lt;br /&gt;
**Certain deprecated methods have been eliminated. &lt;br /&gt;
**Some existing API methods have been modifed. &lt;br /&gt;
**The event model has been improved to allow greater script control.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Some scripts must be modified from previous versions of STRIDE to work successfully with 3.0.01xx. The necessary changes are detailed in the [[#Migration_to_3.0.01xx|Migration to 3.0.01xx]] section below. &lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;Panel&#039;&#039;&#039; object is no longer available to scripts; its functionality has been moved under the &#039;&#039;&#039;studio&#039;&#039;&#039; object model. You can access this new functionality as &#039;&#039;&#039;studio.Connection&#039;&#039;&#039;, however if you were formerly scripting the &#039;&#039;&#039;Panel&#039;&#039;&#039; object, you may find it is no longer necessary since: &lt;br /&gt;
**You can now configure your connection properties from within STRIDE Studio (from the menu select &#039;&#039;Tools/Target Connectivity&#039;&#039;) &lt;br /&gt;
**You can now set a workspace folder property to autoconnect upon execution&lt;br /&gt;
&lt;br /&gt;
*Zero is now allowed as the maximum size under certain circumstances in &#039;&#039;&#039;scl_string&#039;&#039;&#039; and &#039;&#039;&#039;scl_ptr_sized&#039;&#039;&#039;. Details of these circumstances are contained in the &#039;&#039;&#039;[[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]]&#039;&#039;&#039; document.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compiler.MicrosoftCompatibility&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Compiler.Compatibility&#039;&#039;&#039;. Valid values are &amp;quot;Generic&amp;quot; (generic mode), &amp;quot;Microsoft&amp;quot; (Microsoft compatibility), or &amp;quot;Gnu&amp;quot; (Gnu or Gcc compatibility).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compile()&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Build()&#039;&#039;&#039;. Also new methods, &#039;&#039;&#039;studio.Workspace.CleanBuild()&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.ReloadDatabase()&#039;&#039;&#039;, have been added.&lt;br /&gt;
&lt;br /&gt;
*A new property, &#039;&#039;&#039;Output&#039;&#039;&#039;, has been added off the studio object. This property outputs text to the Studio message tab, similar to how &#039;&#039;&#039;ascript.MessageBox()&#039;&#039;&#039; works for certain scripts. This property contains one method, &#039;&#039;&#039;PrintMessage(String msg)&#039;&#039;&#039;. You can see an example of its use [[Debugging Helps|here]].&lt;br /&gt;
&lt;br /&gt;
*A new settings group has been introduced - &#039;&#039;&#039;studio.Workspace.Settings.Build&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Intercept.Path&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Intercept.SourcePath&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.Intercept.HeaderPath&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Fixes  ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This section describes defects which have been corrected in STRIDE and the customer tracking number associated with them, if any, in brackets [].&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*[1055] Not able to specifiy uppercase include directory &lt;br /&gt;
*[1163] Certain cases of array of pointers to discriminated unions that were not handled correctly in the ascript object have been fixed. &lt;br /&gt;
*[1357] The ascript &#039;&#039;&#039;Call()&#039;&#039;&#039; method, when used with RspTimeoutPeriod, only returns True if a timeout has occurred. &lt;br /&gt;
*[1469] Global casting using &#039;&#039;&#039;scl_cast&#039;&#039;&#039; no longer causes an intercept module compile error. &lt;br /&gt;
*[1539] &#039;&#039;&#039;ascript&#039;&#039;&#039; no longer returns &amp;quot;undefined&amp;quot; when calling &#039;&#039;&#039;function.ReturnValue&#039;&#039;&#039; when the captured function returns an unqualified function pointer. &lt;br /&gt;
*[1543] IM source file locations added to studio UI and automation &lt;br /&gt;
*[1564] The Studio Add files dialog has been increased from 2K bytes to 100K bytes, to allow for more files to be selected at a time. &lt;br /&gt;
*[1586] Support for Variadic Macros &lt;br /&gt;
*[1597] EDGFront crash for scl_ptr_opaque &lt;br /&gt;
*[1600] Pre-processor treats constant 1 always as 8-bit &lt;br /&gt;
*[1605] Generated Perl script generates error when run in debugger &lt;br /&gt;
*The following statement in Runtime files &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; has been changed:&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args = 0;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;is now&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt; with no initializer. This makes it portable and able to compile under Linux. &lt;br /&gt;
*A macro that determines the existence of &#039;&#039;&#039;vsnprintf()&#039;&#039;&#039; has been updated in &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; in order to make it able to compile with GCC and other non-Microsoft compilers.&amp;lt;br&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; If you are using test functions and C++ test classes, you must be using compilers that support &#039;&#039;&#039;vsnprintf&#039;&#039;&#039; (variable argument lists), which is a standard in C99 and supported in C90. &lt;br /&gt;
*When tracing on a STID it&#039;s possible to display trace information for messages that aren&#039;t captured (i.e. the message&#039;s SMID is not known to STRIDE). A problem could occur when STRIDE attempted to interpret the payload of these messages. This has now been fixed; hex values only are now shown in the trace view for in this situation. &lt;br /&gt;
*Autosense was not working properly in the editor for message payloads. This has been fixed.&lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
=== TestUnits Collection  ===&lt;br /&gt;
&lt;br /&gt;
A new TestUnits collection has been implemented. All test interfaces (specified with [[SCL_Pragmas#Test_Units | Test Unit pragmas]]) will be listed there.&lt;br /&gt;
&lt;br /&gt;
=== Functions Collection  ===&lt;br /&gt;
&lt;br /&gt;
Interfaces specified with either the [[scl_test_class]] or [[scl_test_flist]] pragmas are not listed in the Functions collection anymore. &lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
=== Memory Management  ===&lt;br /&gt;
&lt;br /&gt;
To support multi-process target, memory management support for dynamic, configurable, and internal static memory has been implemented in Runtime. Runtime makes PAL calls to acquire memory segments and manages the memory according to runtime configurations set by user. In case of multi-process target is enabled, these memory will be shared among multiple applications, and PAL should implement shared memory. &lt;br /&gt;
&lt;br /&gt;
=== Protection using Mutex  ===&lt;br /&gt;
&lt;br /&gt;
Runtime now uses named mutex objects to protect critical data from multiple and simultaneous accesses by multiple threads and, in case of multi-process target is enabled, by multiple applications. Runtime makes PAL calls to obtain and control mutex objects. &lt;br /&gt;
&lt;br /&gt;
=== New Routines  ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Memory Management&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In case of multi-process target, recommended approach is to use &amp;lt;u&amp;gt;Memory-Mapped Files&amp;lt;/u&amp;gt; to implement memory segments. &lt;br /&gt;
&lt;br /&gt;
 palMemSegmentOpen() - Open/create memory segment &lt;br /&gt;
 palMemSegmentClose() - Close memory segment&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Named Mutexes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palMutexInit() - Initialize a mutex object&lt;br /&gt;
 palMutexDestroy() - Destroy a mutex object&lt;br /&gt;
 palMutexLock() - Lock a mutex object&lt;br /&gt;
 palMutexUnlock() - Unlock a mutex object&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Task Synchronization&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palGetThreadId() - Get current thread Id&lt;br /&gt;
 palGetProcessId() - Get current process Id&lt;br /&gt;
 palSleep() - Suspend the execution of the current thread&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Logging&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is optional. &lt;br /&gt;
&lt;br /&gt;
 palLog() - Logging utility&lt;br /&gt;
&lt;br /&gt;
=== Updated Routines  ===&lt;br /&gt;
&lt;br /&gt;
*Function signatures and functionalities of palWait() &amp;amp;amp; palNotify() have been updated.&lt;br /&gt;
&lt;br /&gt;
 palWait() - now takes in an in/out pointer for events notification&lt;br /&gt;
 palNotify() - mail box Id has been updated to notify any event including mail box Ids.&lt;br /&gt;
&lt;br /&gt;
*Function signatures of palMemAlloc() &amp;amp;amp; palMemFree() have been updated.&lt;br /&gt;
&lt;br /&gt;
=== Removed Routines  ===&lt;br /&gt;
&lt;br /&gt;
 palProtect&lt;br /&gt;
 palUnprotect&lt;br /&gt;
 palCriticalErr&lt;br /&gt;
&lt;br /&gt;
=== Removed Modules  ===&lt;br /&gt;
&lt;br /&gt;
 S2Mem - The memory module provided as part of PAL has been removed. If a native &lt;br /&gt;
         operating system does not support dynamic memory, the Runtime&#039;s memory &lt;br /&gt;
         management module &#039;&#039;srMem&#039;&#039; can be used instead of &#039;&#039;S2Mem&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
&lt;br /&gt;
*STRIDE Host Release &#039;&#039;&#039;3.0.01xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;. &lt;br /&gt;
*In order to eliminate redundancy and promote an object-oriented design, &amp;quot;Member Methods&amp;quot; have been removed from srTest; only &amp;quot;Member Objects&amp;quot; exist now in srTest. In addition, accessing the functionality of Member Objects in this way is similar to accessing scripting objects through the STRIDE Reporter object model. For a detailed explanation, refer to [[Test_Units#C.2B.2B_Test_Classes|this article]] on the STRIDE Support Wiki. &lt;br /&gt;
*A new routine, &#039;&#039;&#039;srInit()&#039;&#039;&#039;, replaces deprecated &#039;&#039;&#039;srInitialize()&#039;&#039;&#039;. Now the target will not be able to set an auto-connect with timeout. &lt;br /&gt;
*The &#039;&#039;&#039;scl_tp&#039;&#039;&#039; and &#039;&#039;&#039;scl_tp_format&#039;&#039;&#039; pragmas have been deprecated. The new pragmas are &#039;&#039;&#039;scl_tracepoint&#039;&#039;&#039; and &#039;&#039;&#039;scl_tracepoint_format&#039;&#039;&#039;. &lt;br /&gt;
*The default runtime configuration in srcfg.h now has fragmentation turned on. The srCFG_MAX_TRANSPORT_UNIT is set to 2048. &lt;br /&gt;
*Fixed warnings for parameter name differences in function declarations and definitions for srSubscribe(), srTracePoint(), and srQuerySMID(). &lt;br /&gt;
*Removed unnecessary/extra response to srCONNECT_CLOSE_T_SMID message. &lt;br /&gt;
*The Runtime now checks for the connection before responding with a &amp;quot;Pong&amp;quot; upon receiving a &amp;quot;Ping.&amp;quot; &lt;br /&gt;
*Introduced 40 additional system trace points to better describe internal errors. &lt;br /&gt;
*Reporting of the error srERR_SUB_NONE has been suppressed so that it no longer generates a target trace error. &lt;br /&gt;
*Trace views now always display srTraceStr() with reserved STID (srSTID_RESERVED) regardless of trace filter settings. &lt;br /&gt;
*srPtrSetupChild() now accepts NULL for handle (out pointer - pwHandle). &lt;br /&gt;
*Added a new Runtime Test Services (RTS) API &#039;&#039;&#039;srTestCaseSetStatusEx()&#039;&#039;&#039;, which enables the providing of the actual return value of a numeric test method in the case of failure. &lt;br /&gt;
*Added two new public APIs - &amp;quot;Printing&amp;quot; APIs to display messages on Trace Views without having to specify a STID or a trace level and to set any trace filters on Trace Views. These routines support formatted strings with variable arguments. The &#039;&#039;&#039;srPrintInfo()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and Level=3. The &#039;&#039;&#039;srPrintError()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and the Level=1. &#039;&#039;&#039;Warning:&#039;&#039;&#039; These new APIs use vsnprintf() routine to process variable arguments. The vsnprintf() became a standard in C99 and is supported in C90. &lt;br /&gt;
*To support multi-process target, significant changes have been made to runtime. &lt;br /&gt;
*A new public routine, srUninit(), has been added to sr.h &amp;amp;amp; srapi.c. &lt;br /&gt;
* A new public routine for Runtime Thread exit point, srThreadUninit(), has been added to sr.h &amp;amp;amp; srthread.c. &lt;br /&gt;
*A new module, srMem, for Memory Management has been added. Its new routines, _srMem_Allocate() &amp;amp;amp; _srMem_Free(), will be used in PAL&#039;s palMemAlloc() &amp;amp;amp; palMemFree() in case of multi-process target is enabled. &lt;br /&gt;
*Calls to palProtect() &amp;amp;amp; palUnprotect() have been replaced by new routines _srProtect() &amp;amp;amp; _srUnprotect(), in which the implementation uses its own mutex object that calls PAL&#039;s mutex routines. &lt;br /&gt;
*In target Test Classes and Test Functions, added capability to specify the comment label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
* Fixed a potential data abort issue when executing delegate code in the IM prior to Runtime being initialized.&lt;br /&gt;
* Runtime Test Services APIs are now thread safe. &lt;br /&gt;
* Fixed cancelation of remote boadcast subcribtion goes in an infinite loop.&lt;br /&gt;
* Fixed Runtime resource abuse when sending lots of broadcast messages. &lt;br /&gt;
* Added partial check for message payload corectness.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapi.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srconn.h&lt;br /&gt;
 srerr.c&lt;br /&gt;
 srib.c&lt;br /&gt;
 srib.h&lt;br /&gt;
 sribctrl.c&lt;br /&gt;
 sribtr.c&lt;br /&gt;
 sribtr.h&lt;br /&gt;
 srmsgmar.c&lt;br /&gt;
 srmsgptr.c&lt;br /&gt;
 srmsgptr.h&lt;br /&gt;
 srmsgque.c&lt;br /&gt;
 srmsgque.h&lt;br /&gt;
 srmsgrt.c&lt;br /&gt;
 srmsgrt.h&lt;br /&gt;
 srmsgsub.c&lt;br /&gt;
 srmsgsub.h&lt;br /&gt;
 srstid.c&lt;br /&gt;
 srstid.h&lt;br /&gt;
 srsuid.c&lt;br /&gt;
 srsuid.h&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
 srtestutil.c&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srthread.c&lt;br /&gt;
 srthread.h&lt;br /&gt;
 srtime.c&lt;br /&gt;
 srtime.h&lt;br /&gt;
 srtp.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been added:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srmem.c&lt;br /&gt;
 srmem.h&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.01xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
Any use of test classes through the Functions collection, like: &lt;br /&gt;
&lt;br /&gt;
  $main::ascript-&amp;amp;gt;Functions-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;User-&amp;amp;gt;Call(); &lt;br /&gt;
&lt;br /&gt;
should be converted to use the new TestUnits collection: &lt;br /&gt;
&lt;br /&gt;
  $main::ascript-&amp;amp;gt;TestUnits-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;Run(); &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
=== API Changes  ===&lt;br /&gt;
&lt;br /&gt;
*The Support Wiki pages now contain reference help for AutoScript. The content has been updated to reflect the API changes, for details see the [http://www.s2technologies.com/wiki/index.php?title=AutoScript|&#039;&#039;AutoScript API Reference&#039;&#039;]. &lt;br /&gt;
*All synchronous method calls now throw exceptions in order to indicate error conditions rather than have error conditions encoded in return values. &lt;br /&gt;
*Asychronous method calls never throw exceptions to indicate error conditions. Instead, error conditions are delivered as a new Error object that is returned to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039;. (Asynchronous methods are &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;) &lt;br /&gt;
*If &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; times out, an Error object is returned. Previously NULL was returned in this case. &lt;br /&gt;
*All objects returned by &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; have &#039;&#039;&#039;Type&#039;&#039;&#039; and &#039;&#039;&#039;Name&#039;&#039;&#039; properties. When the &#039;&#039;&#039;Type&#039;&#039;&#039; is “Error”, the Error object has additional properties that contain further details about the error. &lt;br /&gt;
*All existing script syntax for designation of message payloads has been deprecated. A new syntax that allows for greater expression has been adopted. Details can be found [[Updated Message Payload Syntax|here]]. There are no syntax changes to function payloads. &lt;br /&gt;
*The signature for &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; has been changed. Successful calls to &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; now fully initialize the object.&lt;br /&gt;
&lt;br /&gt;
=== End-Of-Life Methods and Properties  ===&lt;br /&gt;
&lt;br /&gt;
This release marks the End-Of-Life (EOL) for the listed methods and properties. A call to any of these methods or an access to any of these properties will now result in a not-implemented exception in the script making the call or access. &lt;br /&gt;
&lt;br /&gt;
*ascript.Quit() &lt;br /&gt;
*ascript.Interfaces &lt;br /&gt;
*ascript.NamedEvents &lt;br /&gt;
*ascript.WaitForEventWithTimeout &lt;br /&gt;
*ascript.RspTimeoutNotifyEnabled &lt;br /&gt;
*ascript.CreateTimer() &lt;br /&gt;
*ascript.DestroyTimer() &lt;br /&gt;
*ascript.WaitTimeoutNotifyEnabled &lt;br /&gt;
*ascript.Compare_As_C_Values() &lt;br /&gt;
*ascript.AsyncErrorNotifyEnabled &lt;br /&gt;
*ascript.Function.Item().User/Owner.SMID&lt;br /&gt;
&lt;br /&gt;
=== Recommended Steps for Migration From a Previous Version  ===&lt;br /&gt;
&lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; in all scripts. Previous logic to test for null indicating timeouts must be modified. &#039;&#039;&#039;WaitForEvent()&#039;&#039;&#039; now always returns an object, in the case of a timeout (or other error) an Error object is returned. &lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.Quit&#039;&#039;&#039; in all scripts. Modify the logic as necessary to exit the script by other means in place of the original &#039;&#039;&#039;Quit()&#039;&#039;&#039; call. &lt;br /&gt;
*Search for all asynchronous method calls (Asynchronous calls are limited to &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;). Modify the logic as necessary to call &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; if errors (including timeout error) should be detected. &lt;br /&gt;
*If you have scripts that explicitly instantiate an &#039;&#039;&#039;ascript&#039;&#039;&#039; object (i.e. they create an object using the &#039;&#039;&#039;&amp;quot;STRIDE.ascript&amp;quot;&#039;&#039;&#039; PROGID), search for all occurrences and modify the subsequent call to &#039;&#039;&#039;ascript.Initialize()&#039;&#039;&#039; to pass the new parameter set. &lt;br /&gt;
*Search for all EOL&#039;d methods and properties. Each can be replaced by setting the appropriate timeout property and handling the timeout error object delivered by WaitForEvent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;Section1&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%; border-collapse: collapse;&amp;quot; class=&amp;quot;MsoTableGrid&amp;quot;&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1pt solid windowtext; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;EOL’d&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Method or Property&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&#039;&#039;&#039;Recommended Replacement&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Quit&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Refactor&amp;lt;/span&amp;gt; script logic to exit the script by other means. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Interfaces&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Functions&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Messages&amp;lt;/span&amp;gt; as appropriate. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.NamedEvents&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitForEventWithTimeout&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() after setting desired timeout using &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitTimeoutPeriod&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.RspTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.CreateTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Add&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.DestroyTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Remove&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Compare_As_C_Values&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.AsyncErrorNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Error notification from asynchronous calls is performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Function.Item&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SMID&amp;lt;/span&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Function.Item&amp;lt;/span&amp;gt;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SUID&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
Please refer to &#039;&#039;&#039;&#039;&#039;Platform Abstraction Layer (PAL) Specification&#039;&#039;&#039;&#039;&#039; for detailed information on new APIs. You may also refer to Linux implementation of PAL, which has been updated with new routines. &lt;br /&gt;
&lt;br /&gt;
*Implement new shared memory routines, palMemSegmentOpen() &amp;amp;amp; palMemSegmentClose(). In case of multi-process target, these routines should implement shared memory using memory-mapped files.&lt;br /&gt;
&lt;br /&gt;
*Runtime now can manage dynamic, configurable, and internal static memory. In case of multi-process target, update palMemAlloc() to simply call _srMem_Allocate() and palMemFree() to simply call _srMem_Free(). In case of single-process target, you can simply allocate dynamic memory according to your Operating System. If you are upgrading, you can simply leave the current implementation as it is.&lt;br /&gt;
&lt;br /&gt;
*Implement new mutex routines, palMutexInit(), palMutexDestroy(), palMutexLock() &amp;amp;amp; palMutexUnlock, to handle any named mutex objects. It is recommended to implement a separate code for shared memory case if it is necessary.&lt;br /&gt;
&lt;br /&gt;
*Remove old routines palProtect(), palUnprotect() and palCriticalErr().&lt;br /&gt;
&lt;br /&gt;
*Implement new routines palGetThreadId() and palGetProcessId().&lt;br /&gt;
&lt;br /&gt;
*Implement new routine palSleep().&lt;br /&gt;
&lt;br /&gt;
*Update synchronization routines, palCreateNID(), palDeleteNID(), palWait() &amp;amp;amp; palNotify(), to support event notifications and in case of multi-process target is enabled, sharing of the synchronization objects among multiple processors.&lt;br /&gt;
&lt;br /&gt;
*If your PAL uses &#039;&#039;S2Mem&#039;&#039; routines for dynamic memory, you should use new Runtime module &#039;&#039;srMem&#039;&#039;. Update palMemAlloc() to call _srMem_Allocate() and palMemFree() to call _srMem_Free().&lt;br /&gt;
&lt;br /&gt;
*Optionally, implement new routine palLog() as a logging utility for PAL and Runtime.&lt;br /&gt;
&lt;br /&gt;
== Runtime  ==&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new memory management (srCFG_MEMORY_MANAGEMENT) and multi-process target (srCFG_MULTI_PROC_TARGET) settings. By default, memory management and multi-process target are disabled. If you enable multi-process target you also need to enable memory management and configure the sizes and the maximum number of memory blocks. New Runtime module &#039;&#039;srMem&#039;&#039; uses these configurations to allocate and manage memory segments.&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new target connection timeout setting (srCFG_CONNECTION_TIMEOUT).&lt;br /&gt;
&lt;br /&gt;
*If target Test Classes and Test Functions are used, change the signature to include test label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
&lt;br /&gt;
== Windows Applications using Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
*The new &#039;&#039;&#039;s2srwin.lib&#039;&#039;&#039; has public API, published in a header srwin.h, containing the following set of routines:&lt;br /&gt;
&lt;br /&gt;
 srWin_SetMaster() - Sets the application as the master and initializes the Stride Runtime thread. In a multi-process environment only one application should make this call.&lt;br /&gt;
 srWin_AddThread() - Adds additional message processing threads to the application.&lt;br /&gt;
 srWin_Run() - Starts the processing and will not return until it has been signaled via keyboard key or CTRL-C.&lt;br /&gt;
 srWin_SetPortTCP() - Overrides the TCP port number (default: 8000) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
 srWin_SetPortSerial() - Overrides the COM port number (default: 1) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
&lt;br /&gt;
*Existing Host Apps developed against the old hostapphrt and hostapptrt libraries should be updated to as follows: &lt;br /&gt;
**replace the include of hostapp.h with include of srwin.h &lt;br /&gt;
**replace all calls to HostAppXXX() with srWin_XXX() &lt;br /&gt;
**call srWin_SetMaster() to start the runtime thread, srThread, before calling srWin_Run(). Within a multi-process target, only one process (the master) calls this routine.&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;a&amp;quot; ==&lt;br /&gt;
* Linux version of the STRIDE [[Build Tools]] is officially introduced.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;b&amp;quot; ==&lt;br /&gt;
* Relaxed [[scl_cast]]() pragma to allow cast from any integral ptr to union of ptrs&lt;br /&gt;
* Fixed compile warnings in Linux PAL.&lt;br /&gt;
* Fixed issue in instrumentation of [[Test Units]].&lt;br /&gt;
* Fixed issue with UNC paths.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0102 ==&lt;br /&gt;
* Implemented new licensing scheme. Existing licenses will not work anymore and need to be reissued. Old and new licenses could co-exist at the same location.&lt;br /&gt;
* The syntax of [[scl_ptr]] and [[scl_ptr_sized]] pragmas has changed. Now it is required to quote the direction and usage attributes. See this [[Handling_of_pointer_attribute_tokens|page]] for details.&lt;br /&gt;
* [[Test_Units#Runtime_Test_Services|Runtime Test Services]] now support adding annotations per test suite.&lt;br /&gt;
* A complete set of [[Samples]] has been implemented.&lt;br /&gt;
* Fixed several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Fixed several minor issues in [[AutoScript]]. &lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0102&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039; and &#039;&#039;&#039;3.01&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8115</id>
		<title>STRIDE 3.0.01xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8115"/>
		<updated>2008-10-15T23:51:15Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* API Changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Release Notes&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
This page documents the changes in STRIDE version 3.0.01xx (code name &#039;&#039;StoneSteps&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note that if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= What&#039;s New  =&lt;br /&gt;
&lt;br /&gt;
Based on customer feedback, in this release we have made significant performance improvements as well as many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Performance Improvements ==&lt;br /&gt;
&lt;br /&gt;
Specific improvements have been made in the following areas: &lt;br /&gt;
&lt;br /&gt;
*Database loading time has been improved &lt;br /&gt;
*Compile times are now shorter &lt;br /&gt;
*Scripting operations involving function and message payloads now perform better, especially when arrays are involved &lt;br /&gt;
*Runtime performance has been improved by optimizing payload serialization and deserialization operations&lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
&lt;br /&gt;
=== SCL Wizard ===&lt;br /&gt;
&lt;br /&gt;
The SCL Wizard functionality in [[STRIDE Studio]] has been extended so that you can now use the tool to qualify message payloads as well as function payloads. &lt;br /&gt;
&lt;br /&gt;
In addition, the following types of qualifications can now be made: &lt;br /&gt;
&lt;br /&gt;
*For payloads that include function pointers, the SCL Wizard now supports qualifying the pointers as such and identifying candidate function values &lt;br /&gt;
*Type casts can now be specified on payload members&lt;br /&gt;
&lt;br /&gt;
=== Connection Management ===&lt;br /&gt;
&lt;br /&gt;
Connection management has been greatly simplified; software managing connection to the target system has been integrated into [[STRIDE Studio]] so that connections can be managed directly from there. (It is still possible to access connection management functionality without using Studio.) &lt;br /&gt;
&lt;br /&gt;
The Panel program is no longer used, and there is no longer a requirement to load the database to communicate with a remote target. &lt;br /&gt;
&lt;br /&gt;
==== Transport Properties ====&lt;br /&gt;
&lt;br /&gt;
All transport properties can now be accessed via scripts. A new transport scripting model makes this possible.&lt;br /&gt;
&lt;br /&gt;
=== STRIDE Studio Test Runner Improvements ===&lt;br /&gt;
&lt;br /&gt;
The test runner in [[STRIDE Studio]] has incorporated several functional and usability improvements. &lt;br /&gt;
&lt;br /&gt;
*Each runnable script and folder (Suite) in a workspace now has additional properties that allow you to optionally specify a handler script that will be executed in the case of an unhandled error (property OnError) or a timeout (property OnTimeout). A timeout value can be set for each folder.&lt;br /&gt;
&lt;br /&gt;
*Each runnable folder (Suite) in a workspace now has a property (OnRunConnect) that can instruct STRIDE Studio to automatically connect to a target system before the folder is executed.&lt;br /&gt;
&lt;br /&gt;
*The workspace now has a dynamic property (ExecutionState) that allows you to alter the order of script execution at runtime.&lt;br /&gt;
&lt;br /&gt;
=== New Frameworks Feature ===&lt;br /&gt;
&lt;br /&gt;
This version introduces [[Using Frameworks|Target Frameworks]], which provide customizable templates for workspace creation. The use of frameworks simplifies the use of STRIDE and ensures consistency across a development team. &lt;br /&gt;
&lt;br /&gt;
Several [[Provided Frameworks|reference frameworks]] are included in this release, supporting the following target environments: &lt;br /&gt;
&lt;br /&gt;
*[[Provided Frameworks#Windows|Windows]] &lt;br /&gt;
*[[Provided Frameworks#Linux|Linux]] &lt;br /&gt;
*[[Provided Frameworks#WinMobile|WinMobile]] &lt;br /&gt;
*[[Provided Frameworks#Generic|Generic]]&lt;br /&gt;
&lt;br /&gt;
[[Using Packages|Packages]] are also introduced. These provide a convenient way to encapsulate SCL-annotated source code and corresponding tests for a set of interfaces. &lt;br /&gt;
&lt;br /&gt;
=== Uploading Results to STRIDE Portal ===&lt;br /&gt;
&lt;br /&gt;
Uploading test results from STRIDE Reporter to STRIDE Portal has been integrated into STRIDE Studio. Portal&#039;s server information can be configured from Studio&#039;s workspace properties while uploading results to Portal can be enabled or disabled via workspace context menu. If enabled, after running the workspace, a script folder or a script file, results in Report file will automatically be uploaded to the configured server. &lt;br /&gt;
&lt;br /&gt;
== Build Tools  ==&lt;br /&gt;
&lt;br /&gt;
A set of new command line [[Build Tools]] has been implemented: &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Stride compiler&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride database binder&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride instrumentation generator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
These utilities has been ported for Windows and Linux. Using them would allow seamless integration with a &amp;quot;make&amp;quot; build environment.&lt;br /&gt;
&lt;br /&gt;
== Target-Based Testing  ==&lt;br /&gt;
&lt;br /&gt;
Target-based (xUnit-style) testing has been simplified. The new set of SCL pragmas [[Test Units]] can now be included in a source file to tell the compiler and IM generator to automatically create test harnessing code.&lt;br /&gt;
&lt;br /&gt;
The automation components STRIDE.testclass, STRIDE.testunit and STRIDE.testfunction are removed.&lt;br /&gt;
&lt;br /&gt;
== Runtime/PAL  ==&lt;br /&gt;
&lt;br /&gt;
Based on customer requirements, in this release we have made significant changes to [[Target_Integration#The STRIDE Runtime|STRIDE Runtime]] and [[Target_Integration#The Platform Abstraction Layer (PAL)|PAL]]. &lt;br /&gt;
&lt;br /&gt;
=== Multi-Process Targets  ===&lt;br /&gt;
&lt;br /&gt;
New routines and support have been added to Runtime and PAL to support multi-process targets. Changes include: implementation of memory management and shared memory, protecting using named Mutex objects, synchronization of multiple processors and multiple threads, and usage of current process and thread IDs.&lt;br /&gt;
&lt;br /&gt;
=== Logging (Optional)  ===&lt;br /&gt;
&lt;br /&gt;
Runtime and PAL use a logging routine that can optionally be implemented in PAL. &lt;br /&gt;
&lt;br /&gt;
== Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
A new [[Windows_Off-Target_SDK|SDK]] for implemention of Off-Target applications on Windows has been packaged. It contains a library (s2srWin.dll/lib) in which the Windows PAL, Runtime, and GRS and a set of utility scripts are prebuilt. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;s2shostapphrt&#039;&#039;&#039; library, a prebuilt verion of the Host Runtime, has been removed. Building Windows applications using the Host Runtime is not supported anymore. The &#039;&#039;&#039;s2shostapptrt&#039;&#039;&#039; library, a prebuilt version of the Target Runtime, has also been removed. &lt;br /&gt;
&lt;br /&gt;
If an upgrade is performed it is strongly recommended that the above mentioned &#039;&#039;&#039;s2shostapp*&#039;&#039;&#039; libraries and their public API header (hostapp.h) be manually removed.&lt;br /&gt;
&lt;br /&gt;
= Support Wiki =&lt;br /&gt;
&lt;br /&gt;
This support wiki http://support.s2technologies.com is introduced with this version. You can navigate here from your web browser, or directly from STRIDE Studio; a link is provided in the Help menu. &lt;br /&gt;
&lt;br /&gt;
== STRIDE Samples  ==&lt;br /&gt;
&lt;br /&gt;
We have created a set of [[Samples_Overview|sample workspaces]] to aid in the evaluation of STRIDE, or as a tool for learning how to apply STRIDE to different testing scenarios. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to STRIDE, or want to learn more about using the product, this is a great place to start.&lt;br /&gt;
&lt;br /&gt;
= Acquiring the Software =&lt;br /&gt;
&lt;br /&gt;
You can download the latest release from the S2 Technologies ftp site: ftp://ftp.s2technologies.com &lt;br /&gt;
&lt;br /&gt;
To run STRIDE you will need a license. If you are not yet a customer of S2 and would like to obtain an evaluation license, email [mailto:sales@s2technologies.com S2 Sales] or call our offices at &#039;&#039;&#039;760-635-2345&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
= Installing the Software  =&lt;br /&gt;
&lt;br /&gt;
To install STRIDE for the first time, or as an upgrade to an existing installation, please refer to [[Host Installation]]. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note: if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you are new to STRIDE, we recommend that you investigate the [[Samples_Overview|New STRIDE Samples]].&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;ascript&#039;&#039;&#039; API has been changed to be more robust: &lt;br /&gt;
**Certain deprecated methods have been eliminated. &lt;br /&gt;
**Some existing API methods have been modifed. &lt;br /&gt;
**The event model has been improved to allow greater script control.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Some scripts must be modified from previous versions of STRIDE to work successfully with 3.0.01xx. The necessary changes are detailed in the [[#Migration_to_3.0.01xx|Migration to 3.0.01xx]] section below. &lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;Panel&#039;&#039;&#039; object is no longer available to scripts; its functionality has been moved under the &#039;&#039;&#039;studio&#039;&#039;&#039; object model. You can access this new functionality as &#039;&#039;&#039;studio.Connection&#039;&#039;&#039;, however if you were formerly scripting the &#039;&#039;&#039;Panel&#039;&#039;&#039; object, you may find it is no longer necessary since: &lt;br /&gt;
**You can now configure your connection properties from within STRIDE Studio (from the menu select &#039;&#039;Tools/Target Connectivity&#039;&#039;) &lt;br /&gt;
**You can now set a workspace folder property to autoconnect upon execution&lt;br /&gt;
&lt;br /&gt;
*Zero is now allowed as the maximum size under certain circumstances in &#039;&#039;&#039;scl_string&#039;&#039;&#039; and &#039;&#039;&#039;scl_ptr_sized&#039;&#039;&#039;. Details of these circumstances are contained in the &#039;&#039;&#039;[[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]]&#039;&#039;&#039; document.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compiler.MicrosoftCompatibility&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Compiler.Compatibility&#039;&#039;&#039;. Valid values are &amp;quot;Generic&amp;quot; (generic mode), &amp;quot;Microsoft&amp;quot; (Microsoft compatibility), or &amp;quot;Gnu&amp;quot; (Gnu or Gcc compatibility).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compile()&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Build()&#039;&#039;&#039;. Also new methods, &#039;&#039;&#039;studio.Workspace.CleanBuild()&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.ReloadDatabase()&#039;&#039;&#039;, have been added.&lt;br /&gt;
&lt;br /&gt;
*A new property, &#039;&#039;&#039;Output&#039;&#039;&#039;, has been added off the studio object. This property outputs text to the Studio message tab, similar to how &#039;&#039;&#039;ascript.MessageBox()&#039;&#039;&#039; works for certain scripts. This property contains one method, &#039;&#039;&#039;PrintMessage(String msg)&#039;&#039;&#039;. You can see an example of its use [[Debugging Helps|here]].&lt;br /&gt;
&lt;br /&gt;
*A new settings group has been introduced - &#039;&#039;&#039;studio.Workspace.Settings.Build&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Intercept.Path&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Intercept.SourcePath&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.Intercept.HeaderPath&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Fixes  ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This section describes defects which have been corrected in STRIDE and the customer tracking number associated with them, if any, in brackets [].&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*[1055] Not able to specifiy uppercase include directory &lt;br /&gt;
*[1163] Certain cases of array of pointers to discriminated unions that were not handled correctly in the ascript object have been fixed. &lt;br /&gt;
*[1357] The ascript &#039;&#039;&#039;Call()&#039;&#039;&#039; method, when used with RspTimeoutPeriod, only returns True if a timeout has occurred. &lt;br /&gt;
*[1469] Global casting using &#039;&#039;&#039;scl_cast&#039;&#039;&#039; no longer causes an intercept module compile error. &lt;br /&gt;
*[1539] &#039;&#039;&#039;ascript&#039;&#039;&#039; no longer returns &amp;quot;undefined&amp;quot; when calling &#039;&#039;&#039;function.ReturnValue&#039;&#039;&#039; when the captured function returns an unqualified function pointer. &lt;br /&gt;
*[1543] IM source file locations added to studio UI and automation &lt;br /&gt;
*[1564] The Studio Add files dialog has been increased from 2K bytes to 100K bytes, to allow for more files to be selected at a time. &lt;br /&gt;
*[1586] Support for Variadic Macros &lt;br /&gt;
*[1597] EDGFront crash for scl_ptr_opaque &lt;br /&gt;
*[1600] Pre-processor treats constant 1 always as 8-bit &lt;br /&gt;
*[1605] Generated Perl script generates error when run in debugger &lt;br /&gt;
*The following statement in Runtime files &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; has been changed:&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args = 0;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;is now&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt; with no initializer. This makes it portable and able to compile under Linux. &lt;br /&gt;
*A macro that determines the existence of &#039;&#039;&#039;vsnprintf()&#039;&#039;&#039; has been updated in &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; in order to make it able to compile with GCC and other non-Microsoft compilers.&amp;lt;br&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; If you are using test functions and C++ test classes, you must be using compilers that support &#039;&#039;&#039;vsnprintf&#039;&#039;&#039; (variable argument lists), which is a standard in C99 and supported in C90. &lt;br /&gt;
*When tracing on a STID it&#039;s possible to display trace information for messages that aren&#039;t captured (i.e. the message&#039;s SMID is not known to STRIDE). A problem could occur when STRIDE attempted to interpret the payload of these messages. This has now been fixed; hex values only are now shown in the trace view for in this situation. &lt;br /&gt;
*Autosense was not working properly in the editor for message payloads. This has been fixed.&lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
=== TestUnits Collection  ===&lt;br /&gt;
&lt;br /&gt;
A new TestUnits collection has been implemented. All test interfaces (specified with [[SCL_Pragmas#Test_Units | Test Unit pragmas]]) will be listed there.&lt;br /&gt;
&lt;br /&gt;
=== Functions Collection  ===&lt;br /&gt;
&lt;br /&gt;
Interfaces specified with either the [[scl_test_class]] or [[scl_test_flist]] pragmas are not listed in the Functions collection anymore. &lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
=== Memory Management  ===&lt;br /&gt;
&lt;br /&gt;
To support multi-process target, memory management support for dynamic, configurable, and internal static memory has been implemented in Runtime. Runtime makes PAL calls to acquire memory segments and manages the memory according to runtime configurations set by user. In case of multi-process target is enabled, these memory will be shared among multiple applications, and PAL should implement shared memory. &lt;br /&gt;
&lt;br /&gt;
=== Protection using Mutex  ===&lt;br /&gt;
&lt;br /&gt;
Runtime now uses named mutex objects to protect critical data from multiple and simultaneous accesses by multiple threads and, in case of multi-process target is enabled, by multiple applications. Runtime makes PAL calls to obtain and control mutex objects. &lt;br /&gt;
&lt;br /&gt;
=== New Routines  ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Memory Management&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In case of multi-process target, recommended approach is to use &amp;lt;u&amp;gt;Memory-Mapped Files&amp;lt;/u&amp;gt; to implement memory segments. &lt;br /&gt;
&lt;br /&gt;
 palMemSegmentOpen() - Open/create memory segment &lt;br /&gt;
 palMemSegmentClose() - Close memory segment&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Named Mutexes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palMutexInit() - Initialize a mutex object&lt;br /&gt;
 palMutexDestroy() - Destroy a mutex object&lt;br /&gt;
 palMutexLock() - Lock a mutex object&lt;br /&gt;
 palMutexUnlock() - Unlock a mutex object&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Task Synchronization&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palGetThreadId() - Get current thread Id&lt;br /&gt;
 palGetProcessId() - Get current process Id&lt;br /&gt;
 palSleep() - Suspend the execution of the current thread&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Logging&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is optional. &lt;br /&gt;
&lt;br /&gt;
 palLog() - Logging utility&lt;br /&gt;
&lt;br /&gt;
=== Updated Routines  ===&lt;br /&gt;
&lt;br /&gt;
*Function signatures and functionalities of palWait() &amp;amp;amp; palNotify() have been updated.&lt;br /&gt;
&lt;br /&gt;
 palWait() - now takes in an in/out pointer for events notification&lt;br /&gt;
 palNotify() - mail box Id has been updated to notify any event including mail box Ids.&lt;br /&gt;
&lt;br /&gt;
*Function signatures of palMemAlloc() &amp;amp;amp; palMemFree() have been updated.&lt;br /&gt;
&lt;br /&gt;
=== Removed Routines  ===&lt;br /&gt;
&lt;br /&gt;
 palProtect&lt;br /&gt;
 palUnprotect&lt;br /&gt;
 palCriticalErr&lt;br /&gt;
&lt;br /&gt;
=== Removed Modules  ===&lt;br /&gt;
&lt;br /&gt;
 S2Mem - The memory module provided as part of PAL has been removed. If a native &lt;br /&gt;
         operating system does not support dynamic memory, the Runtime&#039;s memory &lt;br /&gt;
         management module &#039;&#039;srMem&#039;&#039; can be used instead of &#039;&#039;S2Mem&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
&lt;br /&gt;
*STRIDE Host Release &#039;&#039;&#039;3.0.01xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;. &lt;br /&gt;
*In order to eliminate redundancy and promote an object-oriented design, &amp;quot;Member Methods&amp;quot; have been removed from srTest; only &amp;quot;Member Objects&amp;quot; exist now in srTest. In addition, accessing the functionality of Member Objects in this way is similar to accessing scripting objects through the STRIDE Reporter object model. For a detailed explanation, refer to [[Test_Units#C.2B.2B_Test_Classes|this article]] on the STRIDE Support Wiki. &lt;br /&gt;
*A new routine, &#039;&#039;&#039;srInit()&#039;&#039;&#039;, replaces deprecated &#039;&#039;&#039;srInitialize()&#039;&#039;&#039;. Now the target will not be able to set an auto-connect with timeout. &lt;br /&gt;
*The &#039;&#039;&#039;scl_tp&#039;&#039;&#039; and &#039;&#039;&#039;scl_tp_format&#039;&#039;&#039; pragmas have been deprecated. The new pragmas are &#039;&#039;&#039;scl_tracepoint&#039;&#039;&#039; and &#039;&#039;&#039;scl_tracepoint_format&#039;&#039;&#039;. &lt;br /&gt;
*The default runtime configuration in srcfg.h now has fragmentation turned on. The srCFG_MAX_TRANSPORT_UNIT is set to 2048. &lt;br /&gt;
*Fixed warnings for parameter name differences in function declarations and definitions for srSubscribe(), srTracePoint(), and srQuerySMID(). &lt;br /&gt;
*Removed unnecessary/extra response to srCONNECT_CLOSE_T_SMID message. &lt;br /&gt;
*The Runtime now checks for the connection before responding with a &amp;quot;Pong&amp;quot; upon receiving a &amp;quot;Ping.&amp;quot; &lt;br /&gt;
*Introduced 40 additional system trace points to better describe internal errors. &lt;br /&gt;
*Reporting of the error srERR_SUB_NONE has been suppressed so that it no longer generates a target trace error. &lt;br /&gt;
*Trace views now always display srTraceStr() with reserved STID (srSTID_RESERVED) regardless of trace filter settings. &lt;br /&gt;
*srPtrSetupChild() now accepts NULL for handle (out pointer - pwHandle). &lt;br /&gt;
*Added a new Runtime Test Services (RTS) API &#039;&#039;&#039;srTestCaseSetStatusEx()&#039;&#039;&#039;, which enables the providing of the actual return value of a numeric test method in the case of failure. &lt;br /&gt;
*Added two new public APIs - &amp;quot;Printing&amp;quot; APIs to display messages on Trace Views without having to specify a STID or a trace level and to set any trace filters on Trace Views. These routines support formatted strings with variable arguments. The &#039;&#039;&#039;srPrintInfo()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and Level=3. The &#039;&#039;&#039;srPrintError()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and the Level=1. &#039;&#039;&#039;Warning:&#039;&#039;&#039; These new APIs use vsnprintf() routine to process variable arguments. The vsnprintf() became a standard in C99 and is supported in C90. &lt;br /&gt;
*To support multi-process target, significant changes have been made to runtime. &lt;br /&gt;
*A new public routine, srUninit(), has been added to sr.h &amp;amp;amp; srapi.c. &lt;br /&gt;
* A new public routine for Runtime Thread exit point, srThreadUninit(), has been added to sr.h &amp;amp;amp; srthread.c. &lt;br /&gt;
*A new module, srMem, for Memory Management has been added. Its new routines, _srMem_Allocate() &amp;amp;amp; _srMem_Free(), will be used in PAL&#039;s palMemAlloc() &amp;amp;amp; palMemFree() in case of multi-process target is enabled. &lt;br /&gt;
*Calls to palProtect() &amp;amp;amp; palUnprotect() have been replaced by new routines _srProtect() &amp;amp;amp; _srUnprotect(), in which the implementation uses its own mutex object that calls PAL&#039;s mutex routines. &lt;br /&gt;
*In target Test Classes and Test Functions, added capability to specify the comment label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
* Fixed a potential data abort issue when executing delegate code in the IM prior to Runtime being initialized.&lt;br /&gt;
* Runtime Test Services APIs are now thread safe. &lt;br /&gt;
* Fixed cancelation of remote boadcast subcribtion goes in an infinite loop.&lt;br /&gt;
* Fixed Runtime resource abuse when sending lots of broadcast messages. &lt;br /&gt;
* Added partial check for message payload corectness.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapi.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srconn.h&lt;br /&gt;
 srerr.c&lt;br /&gt;
 srib.c&lt;br /&gt;
 srib.h&lt;br /&gt;
 sribctrl.c&lt;br /&gt;
 sribtr.c&lt;br /&gt;
 sribtr.h&lt;br /&gt;
 srmsgmar.c&lt;br /&gt;
 srmsgptr.c&lt;br /&gt;
 srmsgptr.h&lt;br /&gt;
 srmsgque.c&lt;br /&gt;
 srmsgque.h&lt;br /&gt;
 srmsgrt.c&lt;br /&gt;
 srmsgrt.h&lt;br /&gt;
 srmsgsub.c&lt;br /&gt;
 srmsgsub.h&lt;br /&gt;
 srstid.c&lt;br /&gt;
 srstid.h&lt;br /&gt;
 srsuid.c&lt;br /&gt;
 srsuid.h&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
 srtestutil.c&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srthread.c&lt;br /&gt;
 srthread.h&lt;br /&gt;
 srtime.c&lt;br /&gt;
 srtime.h&lt;br /&gt;
 srtp.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been added:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srmem.c&lt;br /&gt;
 srmem.h&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.01xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
Any use of test classes through the Functions collection, like: &lt;br /&gt;
&lt;br /&gt;
  $main::ascript-&amp;amp;gt;Functions-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;User-&amp;amp;gt;Call(); &lt;br /&gt;
&lt;br /&gt;
should be converted to use the new TestUnits collection: &lt;br /&gt;
&lt;br /&gt;
  $main::ascript-&amp;amp;gt;TestUnits-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;Run(); &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
=== API Changes  ===&lt;br /&gt;
&lt;br /&gt;
*The Support Wiki pages now contain reference help for AutoScript. The content has been updated to reflect the API changes, for details see the [[http://www.s2technologies.com/wiki/index.php?title=AutoScript|&#039;&#039;AutoScript API Reference&#039;&#039;]]. &lt;br /&gt;
*All synchronous method calls now throw exceptions in order to indicate error conditions rather than have error conditions encoded in return values. &lt;br /&gt;
*Asychronous method calls never throw exceptions to indicate error conditions. Instead, error conditions are delivered as a new Error object that is returned to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039;. (Asynchronous methods are &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;) &lt;br /&gt;
*If &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; times out, an Error object is returned. Previously NULL was returned in this case. &lt;br /&gt;
*All objects returned by &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; have &#039;&#039;&#039;Type&#039;&#039;&#039; and &#039;&#039;&#039;Name&#039;&#039;&#039; properties. When the &#039;&#039;&#039;Type&#039;&#039;&#039; is “Error”, the Error object has additional properties that contain further details about the error. &lt;br /&gt;
*All existing script syntax for designation of message payloads has been deprecated. A new syntax that allows for greater expression has been adopted. Details can be found [[Updated Message Payload Syntax|here]]. There are no syntax changes to function payloads. &lt;br /&gt;
*The signature for &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; has been changed. Successful calls to &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; now fully initialize the object.&lt;br /&gt;
&lt;br /&gt;
=== End-Of-Life Methods and Properties  ===&lt;br /&gt;
&lt;br /&gt;
This release marks the End-Of-Life (EOL) for the listed methods and properties. A call to any of these methods or an access to any of these properties will now result in a not-implemented exception in the script making the call or access. &lt;br /&gt;
&lt;br /&gt;
*ascript.Quit() &lt;br /&gt;
*ascript.Interfaces &lt;br /&gt;
*ascript.NamedEvents &lt;br /&gt;
*ascript.WaitForEventWithTimeout &lt;br /&gt;
*ascript.RspTimeoutNotifyEnabled &lt;br /&gt;
*ascript.CreateTimer() &lt;br /&gt;
*ascript.DestroyTimer() &lt;br /&gt;
*ascript.WaitTimeoutNotifyEnabled &lt;br /&gt;
*ascript.Compare_As_C_Values() &lt;br /&gt;
*ascript.AsyncErrorNotifyEnabled &lt;br /&gt;
*ascript.Function.Item().User/Owner.SMID&lt;br /&gt;
&lt;br /&gt;
=== Recommended Steps for Migration From a Previous Version  ===&lt;br /&gt;
&lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; in all scripts. Previous logic to test for null indicating timeouts must be modified. &#039;&#039;&#039;WaitForEvent()&#039;&#039;&#039; now always returns an object, in the case of a timeout (or other error) an Error object is returned. &lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.Quit&#039;&#039;&#039; in all scripts. Modify the logic as necessary to exit the script by other means in place of the original &#039;&#039;&#039;Quit()&#039;&#039;&#039; call. &lt;br /&gt;
*Search for all asynchronous method calls (Asynchronous calls are limited to &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;). Modify the logic as necessary to call &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; if errors (including timeout error) should be detected. &lt;br /&gt;
*If you have scripts that explicitly instantiate an &#039;&#039;&#039;ascript&#039;&#039;&#039; object (i.e. they create an object using the &#039;&#039;&#039;&amp;quot;STRIDE.ascript&amp;quot;&#039;&#039;&#039; PROGID), search for all occurrences and modify the subsequent call to &#039;&#039;&#039;ascript.Initialize()&#039;&#039;&#039; to pass the new parameter set. &lt;br /&gt;
*Search for all EOL&#039;d methods and properties. Each can be replaced by setting the appropriate timeout property and handling the timeout error object delivered by WaitForEvent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;Section1&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%; border-collapse: collapse;&amp;quot; class=&amp;quot;MsoTableGrid&amp;quot;&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1pt solid windowtext; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;EOL’d&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Method or Property&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&#039;&#039;&#039;Recommended Replacement&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Quit&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Refactor&amp;lt;/span&amp;gt; script logic to exit the script by other means. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Interfaces&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Functions&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Messages&amp;lt;/span&amp;gt; as appropriate. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.NamedEvents&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitForEventWithTimeout&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() after setting desired timeout using &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitTimeoutPeriod&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.RspTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.CreateTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Add&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.DestroyTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Remove&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Compare_As_C_Values&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.AsyncErrorNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Error notification from asynchronous calls is performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Function.Item&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SMID&amp;lt;/span&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Function.Item&amp;lt;/span&amp;gt;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SUID&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
Please refer to &#039;&#039;&#039;&#039;&#039;Platform Abstraction Layer (PAL) Specification&#039;&#039;&#039;&#039;&#039; for detailed information on new APIs. You may also refer to Linux implementation of PAL, which has been updated with new routines. &lt;br /&gt;
&lt;br /&gt;
*Implement new shared memory routines, palMemSegmentOpen() &amp;amp;amp; palMemSegmentClose(). In case of multi-process target, these routines should implement shared memory using memory-mapped files.&lt;br /&gt;
&lt;br /&gt;
*Runtime now can manage dynamic, configurable, and internal static memory. In case of multi-process target, update palMemAlloc() to simply call _srMem_Allocate() and palMemFree() to simply call _srMem_Free(). In case of single-process target, you can simply allocate dynamic memory according to your Operating System. If you are upgrading, you can simply leave the current implementation as it is.&lt;br /&gt;
&lt;br /&gt;
*Implement new mutex routines, palMutexInit(), palMutexDestroy(), palMutexLock() &amp;amp;amp; palMutexUnlock, to handle any named mutex objects. It is recommended to implement a separate code for shared memory case if it is necessary.&lt;br /&gt;
&lt;br /&gt;
*Remove old routines palProtect(), palUnprotect() and palCriticalErr().&lt;br /&gt;
&lt;br /&gt;
*Implement new routines palGetThreadId() and palGetProcessId().&lt;br /&gt;
&lt;br /&gt;
*Implement new routine palSleep().&lt;br /&gt;
&lt;br /&gt;
*Update synchronization routines, palCreateNID(), palDeleteNID(), palWait() &amp;amp;amp; palNotify(), to support event notifications and in case of multi-process target is enabled, sharing of the synchronization objects among multiple processors.&lt;br /&gt;
&lt;br /&gt;
*If your PAL uses &#039;&#039;S2Mem&#039;&#039; routines for dynamic memory, you should use new Runtime module &#039;&#039;srMem&#039;&#039;. Update palMemAlloc() to call _srMem_Allocate() and palMemFree() to call _srMem_Free().&lt;br /&gt;
&lt;br /&gt;
*Optionally, implement new routine palLog() as a logging utility for PAL and Runtime.&lt;br /&gt;
&lt;br /&gt;
== Runtime  ==&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new memory management (srCFG_MEMORY_MANAGEMENT) and multi-process target (srCFG_MULTI_PROC_TARGET) settings. By default, memory management and multi-process target are disabled. If you enable multi-process target you also need to enable memory management and configure the sizes and the maximum number of memory blocks. New Runtime module &#039;&#039;srMem&#039;&#039; uses these configurations to allocate and manage memory segments.&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new target connection timeout setting (srCFG_CONNECTION_TIMEOUT).&lt;br /&gt;
&lt;br /&gt;
*If target Test Classes and Test Functions are used, change the signature to include test label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
&lt;br /&gt;
== Windows Applications using Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
*The new &#039;&#039;&#039;s2srwin.lib&#039;&#039;&#039; has public API, published in a header srwin.h, containing the following set of routines:&lt;br /&gt;
&lt;br /&gt;
 srWin_SetMaster() - Sets the application as the master and initializes the Stride Runtime thread. In a multi-process environment only one application should make this call.&lt;br /&gt;
 srWin_AddThread() - Adds additional message processing threads to the application.&lt;br /&gt;
 srWin_Run() - Starts the processing and will not return until it has been signaled via keyboard key or CTRL-C.&lt;br /&gt;
 srWin_SetPortTCP() - Overrides the TCP port number (default: 8000) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
 srWin_SetPortSerial() - Overrides the COM port number (default: 1) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
&lt;br /&gt;
*Existing Host Apps developed against the old hostapphrt and hostapptrt libraries should be updated to as follows: &lt;br /&gt;
**replace the include of hostapp.h with include of srwin.h &lt;br /&gt;
**replace all calls to HostAppXXX() with srWin_XXX() &lt;br /&gt;
**call srWin_SetMaster() to start the runtime thread, srThread, before calling srWin_Run(). Within a multi-process target, only one process (the master) calls this routine.&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;a&amp;quot; ==&lt;br /&gt;
* Linux version of the STRIDE [[Build Tools]] is officially introduced.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;b&amp;quot; ==&lt;br /&gt;
* Relaxed [[scl_cast]]() pragma to allow cast from any integral ptr to union of ptrs&lt;br /&gt;
* Fixed compile warnings in Linux PAL.&lt;br /&gt;
* Fixed issue in instrumentation of [[Test Units]].&lt;br /&gt;
* Fixed issue with UNC paths.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0102 ==&lt;br /&gt;
* Implemented new licensing scheme. Existing licenses will not work anymore and need to be reissued. Old and new licenses could co-exist at the same location.&lt;br /&gt;
* The syntax of [[scl_ptr]] and [[scl_ptr_sized]] pragmas has changed. Now it is required to quote the direction and usage attributes. See this [[Handling_of_pointer_attribute_tokens|page]] for details.&lt;br /&gt;
* [[Test_Units#Runtime_Test_Services|Runtime Test Services]] now support adding annotations per test suite.&lt;br /&gt;
* A complete set of [[Samples]] has been implemented.&lt;br /&gt;
* Fixed several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Fixed several minor issues in [[AutoScript]]. &lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0102&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039; and &#039;&#039;&#039;3.01&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8114</id>
		<title>STRIDE 3.0.01xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8114"/>
		<updated>2008-10-15T23:46:28Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* End-Of-Lifed Methods and Properties */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Release Notes&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
This page documents the changes in STRIDE version 3.0.01xx (code name &#039;&#039;StoneSteps&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note that if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= What&#039;s New  =&lt;br /&gt;
&lt;br /&gt;
Based on customer feedback, in this release we have made significant performance improvements as well as many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Performance Improvements ==&lt;br /&gt;
&lt;br /&gt;
Specific improvements have been made in the following areas: &lt;br /&gt;
&lt;br /&gt;
*Database loading time has been improved &lt;br /&gt;
*Compile times are now shorter &lt;br /&gt;
*Scripting operations involving function and message payloads now perform better, especially when arrays are involved &lt;br /&gt;
*Runtime performance has been improved by optimizing payload serialization and deserialization operations&lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
&lt;br /&gt;
=== SCL Wizard ===&lt;br /&gt;
&lt;br /&gt;
The SCL Wizard functionality in [[STRIDE Studio]] has been extended so that you can now use the tool to qualify message payloads as well as function payloads. &lt;br /&gt;
&lt;br /&gt;
In addition, the following types of qualifications can now be made: &lt;br /&gt;
&lt;br /&gt;
*For payloads that include function pointers, the SCL Wizard now supports qualifying the pointers as such and identifying candidate function values &lt;br /&gt;
*Type casts can now be specified on payload members&lt;br /&gt;
&lt;br /&gt;
=== Connection Management ===&lt;br /&gt;
&lt;br /&gt;
Connection management has been greatly simplified; software managing connection to the target system has been integrated into [[STRIDE Studio]] so that connections can be managed directly from there. (It is still possible to access connection management functionality without using Studio.) &lt;br /&gt;
&lt;br /&gt;
The Panel program is no longer used, and there is no longer a requirement to load the database to communicate with a remote target. &lt;br /&gt;
&lt;br /&gt;
==== Transport Properties ====&lt;br /&gt;
&lt;br /&gt;
All transport properties can now be accessed via scripts. A new transport scripting model makes this possible.&lt;br /&gt;
&lt;br /&gt;
=== STRIDE Studio Test Runner Improvements ===&lt;br /&gt;
&lt;br /&gt;
The test runner in [[STRIDE Studio]] has incorporated several functional and usability improvements. &lt;br /&gt;
&lt;br /&gt;
*Each runnable script and folder (Suite) in a workspace now has additional properties that allow you to optionally specify a handler script that will be executed in the case of an unhandled error (property OnError) or a timeout (property OnTimeout). A timeout value can be set for each folder.&lt;br /&gt;
&lt;br /&gt;
*Each runnable folder (Suite) in a workspace now has a property (OnRunConnect) that can instruct STRIDE Studio to automatically connect to a target system before the folder is executed.&lt;br /&gt;
&lt;br /&gt;
*The workspace now has a dynamic property (ExecutionState) that allows you to alter the order of script execution at runtime.&lt;br /&gt;
&lt;br /&gt;
=== New Frameworks Feature ===&lt;br /&gt;
&lt;br /&gt;
This version introduces [[Using Frameworks|Target Frameworks]], which provide customizable templates for workspace creation. The use of frameworks simplifies the use of STRIDE and ensures consistency across a development team. &lt;br /&gt;
&lt;br /&gt;
Several [[Provided Frameworks|reference frameworks]] are included in this release, supporting the following target environments: &lt;br /&gt;
&lt;br /&gt;
*[[Provided Frameworks#Windows|Windows]] &lt;br /&gt;
*[[Provided Frameworks#Linux|Linux]] &lt;br /&gt;
*[[Provided Frameworks#WinMobile|WinMobile]] &lt;br /&gt;
*[[Provided Frameworks#Generic|Generic]]&lt;br /&gt;
&lt;br /&gt;
[[Using Packages|Packages]] are also introduced. These provide a convenient way to encapsulate SCL-annotated source code and corresponding tests for a set of interfaces. &lt;br /&gt;
&lt;br /&gt;
=== Uploading Results to STRIDE Portal ===&lt;br /&gt;
&lt;br /&gt;
Uploading test results from STRIDE Reporter to STRIDE Portal has been integrated into STRIDE Studio. Portal&#039;s server information can be configured from Studio&#039;s workspace properties while uploading results to Portal can be enabled or disabled via workspace context menu. If enabled, after running the workspace, a script folder or a script file, results in Report file will automatically be uploaded to the configured server. &lt;br /&gt;
&lt;br /&gt;
== Build Tools  ==&lt;br /&gt;
&lt;br /&gt;
A set of new command line [[Build Tools]] has been implemented: &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Stride compiler&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride database binder&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride instrumentation generator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
These utilities has been ported for Windows and Linux. Using them would allow seamless integration with a &amp;quot;make&amp;quot; build environment.&lt;br /&gt;
&lt;br /&gt;
== Target-Based Testing  ==&lt;br /&gt;
&lt;br /&gt;
Target-based (xUnit-style) testing has been simplified. The new set of SCL pragmas [[Test Units]] can now be included in a source file to tell the compiler and IM generator to automatically create test harnessing code.&lt;br /&gt;
&lt;br /&gt;
The automation components STRIDE.testclass, STRIDE.testunit and STRIDE.testfunction are removed.&lt;br /&gt;
&lt;br /&gt;
== Runtime/PAL  ==&lt;br /&gt;
&lt;br /&gt;
Based on customer requirements, in this release we have made significant changes to [[Target_Integration#The STRIDE Runtime|STRIDE Runtime]] and [[Target_Integration#The Platform Abstraction Layer (PAL)|PAL]]. &lt;br /&gt;
&lt;br /&gt;
=== Multi-Process Targets  ===&lt;br /&gt;
&lt;br /&gt;
New routines and support have been added to Runtime and PAL to support multi-process targets. Changes include: implementation of memory management and shared memory, protecting using named Mutex objects, synchronization of multiple processors and multiple threads, and usage of current process and thread IDs.&lt;br /&gt;
&lt;br /&gt;
=== Logging (Optional)  ===&lt;br /&gt;
&lt;br /&gt;
Runtime and PAL use a logging routine that can optionally be implemented in PAL. &lt;br /&gt;
&lt;br /&gt;
== Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
A new [[Windows_Off-Target_SDK|SDK]] for implemention of Off-Target applications on Windows has been packaged. It contains a library (s2srWin.dll/lib) in which the Windows PAL, Runtime, and GRS and a set of utility scripts are prebuilt. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;s2shostapphrt&#039;&#039;&#039; library, a prebuilt verion of the Host Runtime, has been removed. Building Windows applications using the Host Runtime is not supported anymore. The &#039;&#039;&#039;s2shostapptrt&#039;&#039;&#039; library, a prebuilt version of the Target Runtime, has also been removed. &lt;br /&gt;
&lt;br /&gt;
If an upgrade is performed it is strongly recommended that the above mentioned &#039;&#039;&#039;s2shostapp*&#039;&#039;&#039; libraries and their public API header (hostapp.h) be manually removed.&lt;br /&gt;
&lt;br /&gt;
= Support Wiki =&lt;br /&gt;
&lt;br /&gt;
This support wiki http://support.s2technologies.com is introduced with this version. You can navigate here from your web browser, or directly from STRIDE Studio; a link is provided in the Help menu. &lt;br /&gt;
&lt;br /&gt;
== STRIDE Samples  ==&lt;br /&gt;
&lt;br /&gt;
We have created a set of [[Samples_Overview|sample workspaces]] to aid in the evaluation of STRIDE, or as a tool for learning how to apply STRIDE to different testing scenarios. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to STRIDE, or want to learn more about using the product, this is a great place to start.&lt;br /&gt;
&lt;br /&gt;
= Acquiring the Software =&lt;br /&gt;
&lt;br /&gt;
You can download the latest release from the S2 Technologies ftp site: ftp://ftp.s2technologies.com &lt;br /&gt;
&lt;br /&gt;
To run STRIDE you will need a license. If you are not yet a customer of S2 and would like to obtain an evaluation license, email [mailto:sales@s2technologies.com S2 Sales] or call our offices at &#039;&#039;&#039;760-635-2345&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
= Installing the Software  =&lt;br /&gt;
&lt;br /&gt;
To install STRIDE for the first time, or as an upgrade to an existing installation, please refer to [[Host Installation]]. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note: if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you are new to STRIDE, we recommend that you investigate the [[Samples_Overview|New STRIDE Samples]].&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;ascript&#039;&#039;&#039; API has been changed to be more robust: &lt;br /&gt;
**Certain deprecated methods have been eliminated. &lt;br /&gt;
**Some existing API methods have been modifed. &lt;br /&gt;
**The event model has been improved to allow greater script control.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Some scripts must be modified from previous versions of STRIDE to work successfully with 3.0.01xx. The necessary changes are detailed in the [[#Migration_to_3.0.01xx|Migration to 3.0.01xx]] section below. &lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;Panel&#039;&#039;&#039; object is no longer available to scripts; its functionality has been moved under the &#039;&#039;&#039;studio&#039;&#039;&#039; object model. You can access this new functionality as &#039;&#039;&#039;studio.Connection&#039;&#039;&#039;, however if you were formerly scripting the &#039;&#039;&#039;Panel&#039;&#039;&#039; object, you may find it is no longer necessary since: &lt;br /&gt;
**You can now configure your connection properties from within STRIDE Studio (from the menu select &#039;&#039;Tools/Target Connectivity&#039;&#039;) &lt;br /&gt;
**You can now set a workspace folder property to autoconnect upon execution&lt;br /&gt;
&lt;br /&gt;
*Zero is now allowed as the maximum size under certain circumstances in &#039;&#039;&#039;scl_string&#039;&#039;&#039; and &#039;&#039;&#039;scl_ptr_sized&#039;&#039;&#039;. Details of these circumstances are contained in the &#039;&#039;&#039;[[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]]&#039;&#039;&#039; document.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compiler.MicrosoftCompatibility&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Compiler.Compatibility&#039;&#039;&#039;. Valid values are &amp;quot;Generic&amp;quot; (generic mode), &amp;quot;Microsoft&amp;quot; (Microsoft compatibility), or &amp;quot;Gnu&amp;quot; (Gnu or Gcc compatibility).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compile()&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Build()&#039;&#039;&#039;. Also new methods, &#039;&#039;&#039;studio.Workspace.CleanBuild()&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.ReloadDatabase()&#039;&#039;&#039;, have been added.&lt;br /&gt;
&lt;br /&gt;
*A new property, &#039;&#039;&#039;Output&#039;&#039;&#039;, has been added off the studio object. This property outputs text to the Studio message tab, similar to how &#039;&#039;&#039;ascript.MessageBox()&#039;&#039;&#039; works for certain scripts. This property contains one method, &#039;&#039;&#039;PrintMessage(String msg)&#039;&#039;&#039;. You can see an example of its use [[Debugging Helps|here]].&lt;br /&gt;
&lt;br /&gt;
*A new settings group has been introduced - &#039;&#039;&#039;studio.Workspace.Settings.Build&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Intercept.Path&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Intercept.SourcePath&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.Intercept.HeaderPath&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Fixes  ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This section describes defects which have been corrected in STRIDE and the customer tracking number associated with them, if any, in brackets [].&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*[1055] Not able to specifiy uppercase include directory &lt;br /&gt;
*[1163] Certain cases of array of pointers to discriminated unions that were not handled correctly in the ascript object have been fixed. &lt;br /&gt;
*[1357] The ascript &#039;&#039;&#039;Call()&#039;&#039;&#039; method, when used with RspTimeoutPeriod, only returns True if a timeout has occurred. &lt;br /&gt;
*[1469] Global casting using &#039;&#039;&#039;scl_cast&#039;&#039;&#039; no longer causes an intercept module compile error. &lt;br /&gt;
*[1539] &#039;&#039;&#039;ascript&#039;&#039;&#039; no longer returns &amp;quot;undefined&amp;quot; when calling &#039;&#039;&#039;function.ReturnValue&#039;&#039;&#039; when the captured function returns an unqualified function pointer. &lt;br /&gt;
*[1543] IM source file locations added to studio UI and automation &lt;br /&gt;
*[1564] The Studio Add files dialog has been increased from 2K bytes to 100K bytes, to allow for more files to be selected at a time. &lt;br /&gt;
*[1586] Support for Variadic Macros &lt;br /&gt;
*[1597] EDGFront crash for scl_ptr_opaque &lt;br /&gt;
*[1600] Pre-processor treats constant 1 always as 8-bit &lt;br /&gt;
*[1605] Generated Perl script generates error when run in debugger &lt;br /&gt;
*The following statement in Runtime files &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; has been changed:&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args = 0;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;is now&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt; with no initializer. This makes it portable and able to compile under Linux. &lt;br /&gt;
*A macro that determines the existence of &#039;&#039;&#039;vsnprintf()&#039;&#039;&#039; has been updated in &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; in order to make it able to compile with GCC and other non-Microsoft compilers.&amp;lt;br&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; If you are using test functions and C++ test classes, you must be using compilers that support &#039;&#039;&#039;vsnprintf&#039;&#039;&#039; (variable argument lists), which is a standard in C99 and supported in C90. &lt;br /&gt;
*When tracing on a STID it&#039;s possible to display trace information for messages that aren&#039;t captured (i.e. the message&#039;s SMID is not known to STRIDE). A problem could occur when STRIDE attempted to interpret the payload of these messages. This has now been fixed; hex values only are now shown in the trace view for in this situation. &lt;br /&gt;
*Autosense was not working properly in the editor for message payloads. This has been fixed.&lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
=== TestUnits Collection  ===&lt;br /&gt;
&lt;br /&gt;
A new TestUnits collection has been implemented. All test interfaces (specified with [[SCL_Pragmas#Test_Units | Test Unit pragmas]]) will be listed there.&lt;br /&gt;
&lt;br /&gt;
=== Functions Collection  ===&lt;br /&gt;
&lt;br /&gt;
Interfaces specified with either the [[scl_test_class]] or [[scl_test_flist]] pragmas are not listed in the Functions collection anymore. &lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
=== Memory Management  ===&lt;br /&gt;
&lt;br /&gt;
To support multi-process target, memory management support for dynamic, configurable, and internal static memory has been implemented in Runtime. Runtime makes PAL calls to acquire memory segments and manages the memory according to runtime configurations set by user. In case of multi-process target is enabled, these memory will be shared among multiple applications, and PAL should implement shared memory. &lt;br /&gt;
&lt;br /&gt;
=== Protection using Mutex  ===&lt;br /&gt;
&lt;br /&gt;
Runtime now uses named mutex objects to protect critical data from multiple and simultaneous accesses by multiple threads and, in case of multi-process target is enabled, by multiple applications. Runtime makes PAL calls to obtain and control mutex objects. &lt;br /&gt;
&lt;br /&gt;
=== New Routines  ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Memory Management&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In case of multi-process target, recommended approach is to use &amp;lt;u&amp;gt;Memory-Mapped Files&amp;lt;/u&amp;gt; to implement memory segments. &lt;br /&gt;
&lt;br /&gt;
 palMemSegmentOpen() - Open/create memory segment &lt;br /&gt;
 palMemSegmentClose() - Close memory segment&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Named Mutexes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palMutexInit() - Initialize a mutex object&lt;br /&gt;
 palMutexDestroy() - Destroy a mutex object&lt;br /&gt;
 palMutexLock() - Lock a mutex object&lt;br /&gt;
 palMutexUnlock() - Unlock a mutex object&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Task Synchronization&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palGetThreadId() - Get current thread Id&lt;br /&gt;
 palGetProcessId() - Get current process Id&lt;br /&gt;
 palSleep() - Suspend the execution of the current thread&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Logging&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is optional. &lt;br /&gt;
&lt;br /&gt;
 palLog() - Logging utility&lt;br /&gt;
&lt;br /&gt;
=== Updated Routines  ===&lt;br /&gt;
&lt;br /&gt;
*Function signatures and functionalities of palWait() &amp;amp;amp; palNotify() have been updated.&lt;br /&gt;
&lt;br /&gt;
 palWait() - now takes in an in/out pointer for events notification&lt;br /&gt;
 palNotify() - mail box Id has been updated to notify any event including mail box Ids.&lt;br /&gt;
&lt;br /&gt;
*Function signatures of palMemAlloc() &amp;amp;amp; palMemFree() have been updated.&lt;br /&gt;
&lt;br /&gt;
=== Removed Routines  ===&lt;br /&gt;
&lt;br /&gt;
 palProtect&lt;br /&gt;
 palUnprotect&lt;br /&gt;
 palCriticalErr&lt;br /&gt;
&lt;br /&gt;
=== Removed Modules  ===&lt;br /&gt;
&lt;br /&gt;
 S2Mem - The memory module provided as part of PAL has been removed. If a native &lt;br /&gt;
         operating system does not support dynamic memory, the Runtime&#039;s memory &lt;br /&gt;
         management module &#039;&#039;srMem&#039;&#039; can be used instead of &#039;&#039;S2Mem&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
&lt;br /&gt;
*STRIDE Host Release &#039;&#039;&#039;3.0.01xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;. &lt;br /&gt;
*In order to eliminate redundancy and promote an object-oriented design, &amp;quot;Member Methods&amp;quot; have been removed from srTest; only &amp;quot;Member Objects&amp;quot; exist now in srTest. In addition, accessing the functionality of Member Objects in this way is similar to accessing scripting objects through the STRIDE Reporter object model. For a detailed explanation, refer to [[Test_Units#C.2B.2B_Test_Classes|this article]] on the STRIDE Support Wiki. &lt;br /&gt;
*A new routine, &#039;&#039;&#039;srInit()&#039;&#039;&#039;, replaces deprecated &#039;&#039;&#039;srInitialize()&#039;&#039;&#039;. Now the target will not be able to set an auto-connect with timeout. &lt;br /&gt;
*The &#039;&#039;&#039;scl_tp&#039;&#039;&#039; and &#039;&#039;&#039;scl_tp_format&#039;&#039;&#039; pragmas have been deprecated. The new pragmas are &#039;&#039;&#039;scl_tracepoint&#039;&#039;&#039; and &#039;&#039;&#039;scl_tracepoint_format&#039;&#039;&#039;. &lt;br /&gt;
*The default runtime configuration in srcfg.h now has fragmentation turned on. The srCFG_MAX_TRANSPORT_UNIT is set to 2048. &lt;br /&gt;
*Fixed warnings for parameter name differences in function declarations and definitions for srSubscribe(), srTracePoint(), and srQuerySMID(). &lt;br /&gt;
*Removed unnecessary/extra response to srCONNECT_CLOSE_T_SMID message. &lt;br /&gt;
*The Runtime now checks for the connection before responding with a &amp;quot;Pong&amp;quot; upon receiving a &amp;quot;Ping.&amp;quot; &lt;br /&gt;
*Introduced 40 additional system trace points to better describe internal errors. &lt;br /&gt;
*Reporting of the error srERR_SUB_NONE has been suppressed so that it no longer generates a target trace error. &lt;br /&gt;
*Trace views now always display srTraceStr() with reserved STID (srSTID_RESERVED) regardless of trace filter settings. &lt;br /&gt;
*srPtrSetupChild() now accepts NULL for handle (out pointer - pwHandle). &lt;br /&gt;
*Added a new Runtime Test Services (RTS) API &#039;&#039;&#039;srTestCaseSetStatusEx()&#039;&#039;&#039;, which enables the providing of the actual return value of a numeric test method in the case of failure. &lt;br /&gt;
*Added two new public APIs - &amp;quot;Printing&amp;quot; APIs to display messages on Trace Views without having to specify a STID or a trace level and to set any trace filters on Trace Views. These routines support formatted strings with variable arguments. The &#039;&#039;&#039;srPrintInfo()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and Level=3. The &#039;&#039;&#039;srPrintError()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and the Level=1. &#039;&#039;&#039;Warning:&#039;&#039;&#039; These new APIs use vsnprintf() routine to process variable arguments. The vsnprintf() became a standard in C99 and is supported in C90. &lt;br /&gt;
*To support multi-process target, significant changes have been made to runtime. &lt;br /&gt;
*A new public routine, srUninit(), has been added to sr.h &amp;amp;amp; srapi.c. &lt;br /&gt;
* A new public routine for Runtime Thread exit point, srThreadUninit(), has been added to sr.h &amp;amp;amp; srthread.c. &lt;br /&gt;
*A new module, srMem, for Memory Management has been added. Its new routines, _srMem_Allocate() &amp;amp;amp; _srMem_Free(), will be used in PAL&#039;s palMemAlloc() &amp;amp;amp; palMemFree() in case of multi-process target is enabled. &lt;br /&gt;
*Calls to palProtect() &amp;amp;amp; palUnprotect() have been replaced by new routines _srProtect() &amp;amp;amp; _srUnprotect(), in which the implementation uses its own mutex object that calls PAL&#039;s mutex routines. &lt;br /&gt;
*In target Test Classes and Test Functions, added capability to specify the comment label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
* Fixed a potential data abort issue when executing delegate code in the IM prior to Runtime being initialized.&lt;br /&gt;
* Runtime Test Services APIs are now thread safe. &lt;br /&gt;
* Fixed cancelation of remote boadcast subcribtion goes in an infinite loop.&lt;br /&gt;
* Fixed Runtime resource abuse when sending lots of broadcast messages. &lt;br /&gt;
* Added partial check for message payload corectness.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapi.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srconn.h&lt;br /&gt;
 srerr.c&lt;br /&gt;
 srib.c&lt;br /&gt;
 srib.h&lt;br /&gt;
 sribctrl.c&lt;br /&gt;
 sribtr.c&lt;br /&gt;
 sribtr.h&lt;br /&gt;
 srmsgmar.c&lt;br /&gt;
 srmsgptr.c&lt;br /&gt;
 srmsgptr.h&lt;br /&gt;
 srmsgque.c&lt;br /&gt;
 srmsgque.h&lt;br /&gt;
 srmsgrt.c&lt;br /&gt;
 srmsgrt.h&lt;br /&gt;
 srmsgsub.c&lt;br /&gt;
 srmsgsub.h&lt;br /&gt;
 srstid.c&lt;br /&gt;
 srstid.h&lt;br /&gt;
 srsuid.c&lt;br /&gt;
 srsuid.h&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
 srtestutil.c&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srthread.c&lt;br /&gt;
 srthread.h&lt;br /&gt;
 srtime.c&lt;br /&gt;
 srtime.h&lt;br /&gt;
 srtp.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been added:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srmem.c&lt;br /&gt;
 srmem.h&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.01xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
Any use of test classes through the Functions collection, like: &lt;br /&gt;
&lt;br /&gt;
  $main::ascript-&amp;amp;gt;Functions-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;User-&amp;amp;gt;Call(); &lt;br /&gt;
&lt;br /&gt;
should be converted to use the new TestUnits collection: &lt;br /&gt;
&lt;br /&gt;
  $main::ascript-&amp;amp;gt;TestUnits-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;Run(); &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
=== API Changes  ===&lt;br /&gt;
&lt;br /&gt;
*The Support Wiki pages now contain reference help for AutoScript. The content has been updated to reflect the API changes, for details see the &#039;&#039;AutoScript API Reference&#039;&#039;. &lt;br /&gt;
*All synchronous method calls now throw exceptions in order to indicate error conditions rather than have error conditions encoded in return values. &lt;br /&gt;
*Asychronous method calls never throw exceptions to indicate error conditions. Instead, error conditions are delivered as a new Error object that is returned to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039;. (Asynchronous methods are &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;) &lt;br /&gt;
*If &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; times out, an Error object is returned. Previously NULL was returned in this case. &lt;br /&gt;
*All objects returned by &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; have &#039;&#039;&#039;Type&#039;&#039;&#039; and &#039;&#039;&#039;Name&#039;&#039;&#039; properties. When the &#039;&#039;&#039;Type&#039;&#039;&#039; is “Error”, the Error object has additional properties that contain further details about the error. &lt;br /&gt;
*All existing script syntax for designation of message payloads has been deprecated. A new syntax that allows for greater expression has been adopted. Details can be found [[Updated Message Payload Syntax|here]]. There are no syntax changes to function payloads. &lt;br /&gt;
*The signature for &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; has been changed. Successful calls to &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; now fully initialize the object.&lt;br /&gt;
&lt;br /&gt;
=== End-Of-Life Methods and Properties  ===&lt;br /&gt;
&lt;br /&gt;
This release marks the End-Of-Life (EOL) for the listed methods and properties. A call to any of these methods or an access to any of these properties will now result in a not-implemented exception in the script making the call or access. &lt;br /&gt;
&lt;br /&gt;
*ascript.Quit() &lt;br /&gt;
*ascript.Interfaces &lt;br /&gt;
*ascript.NamedEvents &lt;br /&gt;
*ascript.WaitForEventWithTimeout &lt;br /&gt;
*ascript.RspTimeoutNotifyEnabled &lt;br /&gt;
*ascript.CreateTimer() &lt;br /&gt;
*ascript.DestroyTimer() &lt;br /&gt;
*ascript.WaitTimeoutNotifyEnabled &lt;br /&gt;
*ascript.Compare_As_C_Values() &lt;br /&gt;
*ascript.AsyncErrorNotifyEnabled &lt;br /&gt;
*ascript.Function.Item().User/Owner.SMID&lt;br /&gt;
&lt;br /&gt;
=== Recommended Steps for Migration From a Previous Version  ===&lt;br /&gt;
&lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; in all scripts. Previous logic to test for null indicating timeouts must be modified. &#039;&#039;&#039;WaitForEvent()&#039;&#039;&#039; now always returns an object, in the case of a timeout (or other error) an Error object is returned. &lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.Quit&#039;&#039;&#039; in all scripts. Modify the logic as necessary to exit the script by other means in place of the original &#039;&#039;&#039;Quit()&#039;&#039;&#039; call. &lt;br /&gt;
*Search for all asynchronous method calls (Asynchronous calls are limited to &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;). Modify the logic as necessary to call &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; if errors (including timeout error) should be detected. &lt;br /&gt;
*If you have scripts that explicitly instantiate an &#039;&#039;&#039;ascript&#039;&#039;&#039; object (i.e. they create an object using the &#039;&#039;&#039;&amp;quot;STRIDE.ascript&amp;quot;&#039;&#039;&#039; PROGID), search for all occurrences and modify the subsequent call to &#039;&#039;&#039;ascript.Initialize()&#039;&#039;&#039; to pass the new parameter set. &lt;br /&gt;
*Search for all EOL&#039;d methods and properties. Each can be replaced by setting the appropriate timeout property and handling the timeout error object delivered by WaitForEvent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;Section1&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%; border-collapse: collapse;&amp;quot; class=&amp;quot;MsoTableGrid&amp;quot;&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1pt solid windowtext; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;EOL’d&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Method or Property&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&#039;&#039;&#039;Recommended Replacement&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Quit&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Refactor&amp;lt;/span&amp;gt; script logic to exit the script by other means. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Interfaces&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Functions&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Messages&amp;lt;/span&amp;gt; as appropriate. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.NamedEvents&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitForEventWithTimeout&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() after setting desired timeout using &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitTimeoutPeriod&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.RspTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.CreateTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Add&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.DestroyTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Remove&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Compare_As_C_Values&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.AsyncErrorNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Error notification from asynchronous calls is performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Function.Item&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SMID&amp;lt;/span&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Function.Item&amp;lt;/span&amp;gt;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SUID&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
Please refer to &#039;&#039;&#039;&#039;&#039;Platform Abstraction Layer (PAL) Specification&#039;&#039;&#039;&#039;&#039; for detailed information on new APIs. You may also refer to Linux implementation of PAL, which has been updated with new routines. &lt;br /&gt;
&lt;br /&gt;
*Implement new shared memory routines, palMemSegmentOpen() &amp;amp;amp; palMemSegmentClose(). In case of multi-process target, these routines should implement shared memory using memory-mapped files.&lt;br /&gt;
&lt;br /&gt;
*Runtime now can manage dynamic, configurable, and internal static memory. In case of multi-process target, update palMemAlloc() to simply call _srMem_Allocate() and palMemFree() to simply call _srMem_Free(). In case of single-process target, you can simply allocate dynamic memory according to your Operating System. If you are upgrading, you can simply leave the current implementation as it is.&lt;br /&gt;
&lt;br /&gt;
*Implement new mutex routines, palMutexInit(), palMutexDestroy(), palMutexLock() &amp;amp;amp; palMutexUnlock, to handle any named mutex objects. It is recommended to implement a separate code for shared memory case if it is necessary.&lt;br /&gt;
&lt;br /&gt;
*Remove old routines palProtect(), palUnprotect() and palCriticalErr().&lt;br /&gt;
&lt;br /&gt;
*Implement new routines palGetThreadId() and palGetProcessId().&lt;br /&gt;
&lt;br /&gt;
*Implement new routine palSleep().&lt;br /&gt;
&lt;br /&gt;
*Update synchronization routines, palCreateNID(), palDeleteNID(), palWait() &amp;amp;amp; palNotify(), to support event notifications and in case of multi-process target is enabled, sharing of the synchronization objects among multiple processors.&lt;br /&gt;
&lt;br /&gt;
*If your PAL uses &#039;&#039;S2Mem&#039;&#039; routines for dynamic memory, you should use new Runtime module &#039;&#039;srMem&#039;&#039;. Update palMemAlloc() to call _srMem_Allocate() and palMemFree() to call _srMem_Free().&lt;br /&gt;
&lt;br /&gt;
*Optionally, implement new routine palLog() as a logging utility for PAL and Runtime.&lt;br /&gt;
&lt;br /&gt;
== Runtime  ==&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new memory management (srCFG_MEMORY_MANAGEMENT) and multi-process target (srCFG_MULTI_PROC_TARGET) settings. By default, memory management and multi-process target are disabled. If you enable multi-process target you also need to enable memory management and configure the sizes and the maximum number of memory blocks. New Runtime module &#039;&#039;srMem&#039;&#039; uses these configurations to allocate and manage memory segments.&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new target connection timeout setting (srCFG_CONNECTION_TIMEOUT).&lt;br /&gt;
&lt;br /&gt;
*If target Test Classes and Test Functions are used, change the signature to include test label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
&lt;br /&gt;
== Windows Applications using Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
*The new &#039;&#039;&#039;s2srwin.lib&#039;&#039;&#039; has public API, published in a header srwin.h, containing the following set of routines:&lt;br /&gt;
&lt;br /&gt;
 srWin_SetMaster() - Sets the application as the master and initializes the Stride Runtime thread. In a multi-process environment only one application should make this call.&lt;br /&gt;
 srWin_AddThread() - Adds additional message processing threads to the application.&lt;br /&gt;
 srWin_Run() - Starts the processing and will not return until it has been signaled via keyboard key or CTRL-C.&lt;br /&gt;
 srWin_SetPortTCP() - Overrides the TCP port number (default: 8000) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
 srWin_SetPortSerial() - Overrides the COM port number (default: 1) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
&lt;br /&gt;
*Existing Host Apps developed against the old hostapphrt and hostapptrt libraries should be updated to as follows: &lt;br /&gt;
**replace the include of hostapp.h with include of srwin.h &lt;br /&gt;
**replace all calls to HostAppXXX() with srWin_XXX() &lt;br /&gt;
**call srWin_SetMaster() to start the runtime thread, srThread, before calling srWin_Run(). Within a multi-process target, only one process (the master) calls this routine.&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;a&amp;quot; ==&lt;br /&gt;
* Linux version of the STRIDE [[Build Tools]] is officially introduced.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;b&amp;quot; ==&lt;br /&gt;
* Relaxed [[scl_cast]]() pragma to allow cast from any integral ptr to union of ptrs&lt;br /&gt;
* Fixed compile warnings in Linux PAL.&lt;br /&gt;
* Fixed issue in instrumentation of [[Test Units]].&lt;br /&gt;
* Fixed issue with UNC paths.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0102 ==&lt;br /&gt;
* Implemented new licensing scheme. Existing licenses will not work anymore and need to be reissued. Old and new licenses could co-exist at the same location.&lt;br /&gt;
* The syntax of [[scl_ptr]] and [[scl_ptr_sized]] pragmas has changed. Now it is required to quote the direction and usage attributes. See this [[Handling_of_pointer_attribute_tokens|page]] for details.&lt;br /&gt;
* [[Test_Units#Runtime_Test_Services|Runtime Test Services]] now support adding annotations per test suite.&lt;br /&gt;
* A complete set of [[Samples]] has been implemented.&lt;br /&gt;
* Fixed several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Fixed several minor issues in [[AutoScript]]. &lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0102&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039; and &#039;&#039;&#039;3.01&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8113</id>
		<title>STRIDE 3.0.01xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8113"/>
		<updated>2008-10-15T23:41:52Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* AutoScript */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Release Notes&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
This page documents the changes in STRIDE version 3.0.01xx (code name &#039;&#039;StoneSteps&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note that if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= What&#039;s New  =&lt;br /&gt;
&lt;br /&gt;
Based on customer feedback, in this release we have made significant performance improvements as well as many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Performance Improvements ==&lt;br /&gt;
&lt;br /&gt;
Specific improvements have been made in the following areas: &lt;br /&gt;
&lt;br /&gt;
*Database loading time has been improved &lt;br /&gt;
*Compile times are now shorter &lt;br /&gt;
*Scripting operations involving function and message payloads now perform better, especially when arrays are involved &lt;br /&gt;
*Runtime performance has been improved by optimizing payload serialization and deserialization operations&lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
&lt;br /&gt;
=== SCL Wizard ===&lt;br /&gt;
&lt;br /&gt;
The SCL Wizard functionality in [[STRIDE Studio]] has been extended so that you can now use the tool to qualify message payloads as well as function payloads. &lt;br /&gt;
&lt;br /&gt;
In addition, the following types of qualifications can now be made: &lt;br /&gt;
&lt;br /&gt;
*For payloads that include function pointers, the SCL Wizard now supports qualifying the pointers as such and identifying candidate function values &lt;br /&gt;
*Type casts can now be specified on payload members&lt;br /&gt;
&lt;br /&gt;
=== Connection Management ===&lt;br /&gt;
&lt;br /&gt;
Connection management has been greatly simplified; software managing connection to the target system has been integrated into [[STRIDE Studio]] so that connections can be managed directly from there. (It is still possible to access connection management functionality without using Studio.) &lt;br /&gt;
&lt;br /&gt;
The Panel program is no longer used, and there is no longer a requirement to load the database to communicate with a remote target. &lt;br /&gt;
&lt;br /&gt;
==== Transport Properties ====&lt;br /&gt;
&lt;br /&gt;
All transport properties can now be accessed via scripts. A new transport scripting model makes this possible.&lt;br /&gt;
&lt;br /&gt;
=== STRIDE Studio Test Runner Improvements ===&lt;br /&gt;
&lt;br /&gt;
The test runner in [[STRIDE Studio]] has incorporated several functional and usability improvements. &lt;br /&gt;
&lt;br /&gt;
*Each runnable script and folder (Suite) in a workspace now has additional properties that allow you to optionally specify a handler script that will be executed in the case of an unhandled error (property OnError) or a timeout (property OnTimeout). A timeout value can be set for each folder.&lt;br /&gt;
&lt;br /&gt;
*Each runnable folder (Suite) in a workspace now has a property (OnRunConnect) that can instruct STRIDE Studio to automatically connect to a target system before the folder is executed.&lt;br /&gt;
&lt;br /&gt;
*The workspace now has a dynamic property (ExecutionState) that allows you to alter the order of script execution at runtime.&lt;br /&gt;
&lt;br /&gt;
=== New Frameworks Feature ===&lt;br /&gt;
&lt;br /&gt;
This version introduces [[Using Frameworks|Target Frameworks]], which provide customizable templates for workspace creation. The use of frameworks simplifies the use of STRIDE and ensures consistency across a development team. &lt;br /&gt;
&lt;br /&gt;
Several [[Provided Frameworks|reference frameworks]] are included in this release, supporting the following target environments: &lt;br /&gt;
&lt;br /&gt;
*[[Provided Frameworks#Windows|Windows]] &lt;br /&gt;
*[[Provided Frameworks#Linux|Linux]] &lt;br /&gt;
*[[Provided Frameworks#WinMobile|WinMobile]] &lt;br /&gt;
*[[Provided Frameworks#Generic|Generic]]&lt;br /&gt;
&lt;br /&gt;
[[Using Packages|Packages]] are also introduced. These provide a convenient way to encapsulate SCL-annotated source code and corresponding tests for a set of interfaces. &lt;br /&gt;
&lt;br /&gt;
=== Uploading Results to STRIDE Portal ===&lt;br /&gt;
&lt;br /&gt;
Uploading test results from STRIDE Reporter to STRIDE Portal has been integrated into STRIDE Studio. Portal&#039;s server information can be configured from Studio&#039;s workspace properties while uploading results to Portal can be enabled or disabled via workspace context menu. If enabled, after running the workspace, a script folder or a script file, results in Report file will automatically be uploaded to the configured server. &lt;br /&gt;
&lt;br /&gt;
== Build Tools  ==&lt;br /&gt;
&lt;br /&gt;
A set of new command line [[Build Tools]] has been implemented: &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Stride compiler&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride database binder&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride instrumentation generator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
These utilities has been ported for Windows and Linux. Using them would allow seamless integration with a &amp;quot;make&amp;quot; build environment.&lt;br /&gt;
&lt;br /&gt;
== Target-Based Testing  ==&lt;br /&gt;
&lt;br /&gt;
Target-based (xUnit-style) testing has been simplified. The new set of SCL pragmas [[Test Units]] can now be included in a source file to tell the compiler and IM generator to automatically create test harnessing code.&lt;br /&gt;
&lt;br /&gt;
The automation components STRIDE.testclass, STRIDE.testunit and STRIDE.testfunction are removed.&lt;br /&gt;
&lt;br /&gt;
== Runtime/PAL  ==&lt;br /&gt;
&lt;br /&gt;
Based on customer requirements, in this release we have made significant changes to [[Target_Integration#The STRIDE Runtime|STRIDE Runtime]] and [[Target_Integration#The Platform Abstraction Layer (PAL)|PAL]]. &lt;br /&gt;
&lt;br /&gt;
=== Multi-Process Targets  ===&lt;br /&gt;
&lt;br /&gt;
New routines and support have been added to Runtime and PAL to support multi-process targets. Changes include: implementation of memory management and shared memory, protecting using named Mutex objects, synchronization of multiple processors and multiple threads, and usage of current process and thread IDs.&lt;br /&gt;
&lt;br /&gt;
=== Logging (Optional)  ===&lt;br /&gt;
&lt;br /&gt;
Runtime and PAL use a logging routine that can optionally be implemented in PAL. &lt;br /&gt;
&lt;br /&gt;
== Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
A new [[Windows_Off-Target_SDK|SDK]] for implemention of Off-Target applications on Windows has been packaged. It contains a library (s2srWin.dll/lib) in which the Windows PAL, Runtime, and GRS and a set of utility scripts are prebuilt. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;s2shostapphrt&#039;&#039;&#039; library, a prebuilt verion of the Host Runtime, has been removed. Building Windows applications using the Host Runtime is not supported anymore. The &#039;&#039;&#039;s2shostapptrt&#039;&#039;&#039; library, a prebuilt version of the Target Runtime, has also been removed. &lt;br /&gt;
&lt;br /&gt;
If an upgrade is performed it is strongly recommended that the above mentioned &#039;&#039;&#039;s2shostapp*&#039;&#039;&#039; libraries and their public API header (hostapp.h) be manually removed.&lt;br /&gt;
&lt;br /&gt;
= Support Wiki =&lt;br /&gt;
&lt;br /&gt;
This support wiki http://support.s2technologies.com is introduced with this version. You can navigate here from your web browser, or directly from STRIDE Studio; a link is provided in the Help menu. &lt;br /&gt;
&lt;br /&gt;
== STRIDE Samples  ==&lt;br /&gt;
&lt;br /&gt;
We have created a set of [[Samples_Overview|sample workspaces]] to aid in the evaluation of STRIDE, or as a tool for learning how to apply STRIDE to different testing scenarios. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to STRIDE, or want to learn more about using the product, this is a great place to start.&lt;br /&gt;
&lt;br /&gt;
= Acquiring the Software =&lt;br /&gt;
&lt;br /&gt;
You can download the latest release from the S2 Technologies ftp site: ftp://ftp.s2technologies.com &lt;br /&gt;
&lt;br /&gt;
To run STRIDE you will need a license. If you are not yet a customer of S2 and would like to obtain an evaluation license, email [mailto:sales@s2technologies.com S2 Sales] or call our offices at &#039;&#039;&#039;760-635-2345&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
= Installing the Software  =&lt;br /&gt;
&lt;br /&gt;
To install STRIDE for the first time, or as an upgrade to an existing installation, please refer to [[Host Installation]]. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note: if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you are new to STRIDE, we recommend that you investigate the [[Samples_Overview|New STRIDE Samples]].&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;ascript&#039;&#039;&#039; API has been changed to be more robust: &lt;br /&gt;
**Certain deprecated methods have been eliminated. &lt;br /&gt;
**Some existing API methods have been modifed. &lt;br /&gt;
**The event model has been improved to allow greater script control.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Some scripts must be modified from previous versions of STRIDE to work successfully with 3.0.01xx. The necessary changes are detailed in the [[#Migration_to_3.0.01xx|Migration to 3.0.01xx]] section below. &lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;Panel&#039;&#039;&#039; object is no longer available to scripts; its functionality has been moved under the &#039;&#039;&#039;studio&#039;&#039;&#039; object model. You can access this new functionality as &#039;&#039;&#039;studio.Connection&#039;&#039;&#039;, however if you were formerly scripting the &#039;&#039;&#039;Panel&#039;&#039;&#039; object, you may find it is no longer necessary since: &lt;br /&gt;
**You can now configure your connection properties from within STRIDE Studio (from the menu select &#039;&#039;Tools/Target Connectivity&#039;&#039;) &lt;br /&gt;
**You can now set a workspace folder property to autoconnect upon execution&lt;br /&gt;
&lt;br /&gt;
*Zero is now allowed as the maximum size under certain circumstances in &#039;&#039;&#039;scl_string&#039;&#039;&#039; and &#039;&#039;&#039;scl_ptr_sized&#039;&#039;&#039;. Details of these circumstances are contained in the &#039;&#039;&#039;[[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]]&#039;&#039;&#039; document.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compiler.MicrosoftCompatibility&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Compiler.Compatibility&#039;&#039;&#039;. Valid values are &amp;quot;Generic&amp;quot; (generic mode), &amp;quot;Microsoft&amp;quot; (Microsoft compatibility), or &amp;quot;Gnu&amp;quot; (Gnu or Gcc compatibility).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compile()&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Build()&#039;&#039;&#039;. Also new methods, &#039;&#039;&#039;studio.Workspace.CleanBuild()&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.ReloadDatabase()&#039;&#039;&#039;, have been added.&lt;br /&gt;
&lt;br /&gt;
*A new property, &#039;&#039;&#039;Output&#039;&#039;&#039;, has been added off the studio object. This property outputs text to the Studio message tab, similar to how &#039;&#039;&#039;ascript.MessageBox()&#039;&#039;&#039; works for certain scripts. This property contains one method, &#039;&#039;&#039;PrintMessage(String msg)&#039;&#039;&#039;. You can see an example of its use [[Debugging Helps|here]].&lt;br /&gt;
&lt;br /&gt;
*A new settings group has been introduced - &#039;&#039;&#039;studio.Workspace.Settings.Build&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Intercept.Path&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Intercept.SourcePath&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.Intercept.HeaderPath&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Fixes  ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This section describes defects which have been corrected in STRIDE and the customer tracking number associated with them, if any, in brackets [].&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*[1055] Not able to specifiy uppercase include directory &lt;br /&gt;
*[1163] Certain cases of array of pointers to discriminated unions that were not handled correctly in the ascript object have been fixed. &lt;br /&gt;
*[1357] The ascript &#039;&#039;&#039;Call()&#039;&#039;&#039; method, when used with RspTimeoutPeriod, only returns True if a timeout has occurred. &lt;br /&gt;
*[1469] Global casting using &#039;&#039;&#039;scl_cast&#039;&#039;&#039; no longer causes an intercept module compile error. &lt;br /&gt;
*[1539] &#039;&#039;&#039;ascript&#039;&#039;&#039; no longer returns &amp;quot;undefined&amp;quot; when calling &#039;&#039;&#039;function.ReturnValue&#039;&#039;&#039; when the captured function returns an unqualified function pointer. &lt;br /&gt;
*[1543] IM source file locations added to studio UI and automation &lt;br /&gt;
*[1564] The Studio Add files dialog has been increased from 2K bytes to 100K bytes, to allow for more files to be selected at a time. &lt;br /&gt;
*[1586] Support for Variadic Macros &lt;br /&gt;
*[1597] EDGFront crash for scl_ptr_opaque &lt;br /&gt;
*[1600] Pre-processor treats constant 1 always as 8-bit &lt;br /&gt;
*[1605] Generated Perl script generates error when run in debugger &lt;br /&gt;
*The following statement in Runtime files &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; has been changed:&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args = 0;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;is now&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt; with no initializer. This makes it portable and able to compile under Linux. &lt;br /&gt;
*A macro that determines the existence of &#039;&#039;&#039;vsnprintf()&#039;&#039;&#039; has been updated in &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; in order to make it able to compile with GCC and other non-Microsoft compilers.&amp;lt;br&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; If you are using test functions and C++ test classes, you must be using compilers that support &#039;&#039;&#039;vsnprintf&#039;&#039;&#039; (variable argument lists), which is a standard in C99 and supported in C90. &lt;br /&gt;
*When tracing on a STID it&#039;s possible to display trace information for messages that aren&#039;t captured (i.e. the message&#039;s SMID is not known to STRIDE). A problem could occur when STRIDE attempted to interpret the payload of these messages. This has now been fixed; hex values only are now shown in the trace view for in this situation. &lt;br /&gt;
*Autosense was not working properly in the editor for message payloads. This has been fixed.&lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
=== TestUnits Collection  ===&lt;br /&gt;
&lt;br /&gt;
A new TestUnits collection has been implemented. All test interfaces (specified with [[SCL_Pragmas#Test_Units | Test Unit pragmas]]) will be listed there.&lt;br /&gt;
&lt;br /&gt;
=== Functions Collection  ===&lt;br /&gt;
&lt;br /&gt;
Interfaces specified with either the [[scl_test_class]] or [[scl_test_flist]] pragmas are not listed in the Functions collection anymore. &lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
=== Memory Management  ===&lt;br /&gt;
&lt;br /&gt;
To support multi-process target, memory management support for dynamic, configurable, and internal static memory has been implemented in Runtime. Runtime makes PAL calls to acquire memory segments and manages the memory according to runtime configurations set by user. In case of multi-process target is enabled, these memory will be shared among multiple applications, and PAL should implement shared memory. &lt;br /&gt;
&lt;br /&gt;
=== Protection using Mutex  ===&lt;br /&gt;
&lt;br /&gt;
Runtime now uses named mutex objects to protect critical data from multiple and simultaneous accesses by multiple threads and, in case of multi-process target is enabled, by multiple applications. Runtime makes PAL calls to obtain and control mutex objects. &lt;br /&gt;
&lt;br /&gt;
=== New Routines  ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Memory Management&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In case of multi-process target, recommended approach is to use &amp;lt;u&amp;gt;Memory-Mapped Files&amp;lt;/u&amp;gt; to implement memory segments. &lt;br /&gt;
&lt;br /&gt;
 palMemSegmentOpen() - Open/create memory segment &lt;br /&gt;
 palMemSegmentClose() - Close memory segment&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Named Mutexes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palMutexInit() - Initialize a mutex object&lt;br /&gt;
 palMutexDestroy() - Destroy a mutex object&lt;br /&gt;
 palMutexLock() - Lock a mutex object&lt;br /&gt;
 palMutexUnlock() - Unlock a mutex object&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Task Synchronization&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palGetThreadId() - Get current thread Id&lt;br /&gt;
 palGetProcessId() - Get current process Id&lt;br /&gt;
 palSleep() - Suspend the execution of the current thread&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Logging&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is optional. &lt;br /&gt;
&lt;br /&gt;
 palLog() - Logging utility&lt;br /&gt;
&lt;br /&gt;
=== Updated Routines  ===&lt;br /&gt;
&lt;br /&gt;
*Function signatures and functionalities of palWait() &amp;amp;amp; palNotify() have been updated.&lt;br /&gt;
&lt;br /&gt;
 palWait() - now takes in an in/out pointer for events notification&lt;br /&gt;
 palNotify() - mail box Id has been updated to notify any event including mail box Ids.&lt;br /&gt;
&lt;br /&gt;
*Function signatures of palMemAlloc() &amp;amp;amp; palMemFree() have been updated.&lt;br /&gt;
&lt;br /&gt;
=== Removed Routines  ===&lt;br /&gt;
&lt;br /&gt;
 palProtect&lt;br /&gt;
 palUnprotect&lt;br /&gt;
 palCriticalErr&lt;br /&gt;
&lt;br /&gt;
=== Removed Modules  ===&lt;br /&gt;
&lt;br /&gt;
 S2Mem - The memory module provided as part of PAL has been removed. If a native &lt;br /&gt;
         operating system does not support dynamic memory, the Runtime&#039;s memory &lt;br /&gt;
         management module &#039;&#039;srMem&#039;&#039; can be used instead of &#039;&#039;S2Mem&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
&lt;br /&gt;
*STRIDE Host Release &#039;&#039;&#039;3.0.01xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;. &lt;br /&gt;
*In order to eliminate redundancy and promote an object-oriented design, &amp;quot;Member Methods&amp;quot; have been removed from srTest; only &amp;quot;Member Objects&amp;quot; exist now in srTest. In addition, accessing the functionality of Member Objects in this way is similar to accessing scripting objects through the STRIDE Reporter object model. For a detailed explanation, refer to [[Test_Units#C.2B.2B_Test_Classes|this article]] on the STRIDE Support Wiki. &lt;br /&gt;
*A new routine, &#039;&#039;&#039;srInit()&#039;&#039;&#039;, replaces deprecated &#039;&#039;&#039;srInitialize()&#039;&#039;&#039;. Now the target will not be able to set an auto-connect with timeout. &lt;br /&gt;
*The &#039;&#039;&#039;scl_tp&#039;&#039;&#039; and &#039;&#039;&#039;scl_tp_format&#039;&#039;&#039; pragmas have been deprecated. The new pragmas are &#039;&#039;&#039;scl_tracepoint&#039;&#039;&#039; and &#039;&#039;&#039;scl_tracepoint_format&#039;&#039;&#039;. &lt;br /&gt;
*The default runtime configuration in srcfg.h now has fragmentation turned on. The srCFG_MAX_TRANSPORT_UNIT is set to 2048. &lt;br /&gt;
*Fixed warnings for parameter name differences in function declarations and definitions for srSubscribe(), srTracePoint(), and srQuerySMID(). &lt;br /&gt;
*Removed unnecessary/extra response to srCONNECT_CLOSE_T_SMID message. &lt;br /&gt;
*The Runtime now checks for the connection before responding with a &amp;quot;Pong&amp;quot; upon receiving a &amp;quot;Ping.&amp;quot; &lt;br /&gt;
*Introduced 40 additional system trace points to better describe internal errors. &lt;br /&gt;
*Reporting of the error srERR_SUB_NONE has been suppressed so that it no longer generates a target trace error. &lt;br /&gt;
*Trace views now always display srTraceStr() with reserved STID (srSTID_RESERVED) regardless of trace filter settings. &lt;br /&gt;
*srPtrSetupChild() now accepts NULL for handle (out pointer - pwHandle). &lt;br /&gt;
*Added a new Runtime Test Services (RTS) API &#039;&#039;&#039;srTestCaseSetStatusEx()&#039;&#039;&#039;, which enables the providing of the actual return value of a numeric test method in the case of failure. &lt;br /&gt;
*Added two new public APIs - &amp;quot;Printing&amp;quot; APIs to display messages on Trace Views without having to specify a STID or a trace level and to set any trace filters on Trace Views. These routines support formatted strings with variable arguments. The &#039;&#039;&#039;srPrintInfo()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and Level=3. The &#039;&#039;&#039;srPrintError()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and the Level=1. &#039;&#039;&#039;Warning:&#039;&#039;&#039; These new APIs use vsnprintf() routine to process variable arguments. The vsnprintf() became a standard in C99 and is supported in C90. &lt;br /&gt;
*To support multi-process target, significant changes have been made to runtime. &lt;br /&gt;
*A new public routine, srUninit(), has been added to sr.h &amp;amp;amp; srapi.c. &lt;br /&gt;
* A new public routine for Runtime Thread exit point, srThreadUninit(), has been added to sr.h &amp;amp;amp; srthread.c. &lt;br /&gt;
*A new module, srMem, for Memory Management has been added. Its new routines, _srMem_Allocate() &amp;amp;amp; _srMem_Free(), will be used in PAL&#039;s palMemAlloc() &amp;amp;amp; palMemFree() in case of multi-process target is enabled. &lt;br /&gt;
*Calls to palProtect() &amp;amp;amp; palUnprotect() have been replaced by new routines _srProtect() &amp;amp;amp; _srUnprotect(), in which the implementation uses its own mutex object that calls PAL&#039;s mutex routines. &lt;br /&gt;
*In target Test Classes and Test Functions, added capability to specify the comment label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
* Fixed a potential data abort issue when executing delegate code in the IM prior to Runtime being initialized.&lt;br /&gt;
* Runtime Test Services APIs are now thread safe. &lt;br /&gt;
* Fixed cancelation of remote boadcast subcribtion goes in an infinite loop.&lt;br /&gt;
* Fixed Runtime resource abuse when sending lots of broadcast messages. &lt;br /&gt;
* Added partial check for message payload corectness.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapi.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srconn.h&lt;br /&gt;
 srerr.c&lt;br /&gt;
 srib.c&lt;br /&gt;
 srib.h&lt;br /&gt;
 sribctrl.c&lt;br /&gt;
 sribtr.c&lt;br /&gt;
 sribtr.h&lt;br /&gt;
 srmsgmar.c&lt;br /&gt;
 srmsgptr.c&lt;br /&gt;
 srmsgptr.h&lt;br /&gt;
 srmsgque.c&lt;br /&gt;
 srmsgque.h&lt;br /&gt;
 srmsgrt.c&lt;br /&gt;
 srmsgrt.h&lt;br /&gt;
 srmsgsub.c&lt;br /&gt;
 srmsgsub.h&lt;br /&gt;
 srstid.c&lt;br /&gt;
 srstid.h&lt;br /&gt;
 srsuid.c&lt;br /&gt;
 srsuid.h&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
 srtestutil.c&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srthread.c&lt;br /&gt;
 srthread.h&lt;br /&gt;
 srtime.c&lt;br /&gt;
 srtime.h&lt;br /&gt;
 srtp.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been added:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srmem.c&lt;br /&gt;
 srmem.h&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.01xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
Any use of test classes through the Functions collection, like: &lt;br /&gt;
&lt;br /&gt;
  $main::ascript-&amp;amp;gt;Functions-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;User-&amp;amp;gt;Call(); &lt;br /&gt;
&lt;br /&gt;
should be converted to use the new TestUnits collection: &lt;br /&gt;
&lt;br /&gt;
  $main::ascript-&amp;amp;gt;TestUnits-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;Run(); &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
=== API Changes  ===&lt;br /&gt;
&lt;br /&gt;
*The Support Wiki pages now contain reference help for AutoScript. The content has been updated to reflect the API changes, for details see the &#039;&#039;AutoScript API Reference&#039;&#039;. &lt;br /&gt;
*All synchronous method calls now throw exceptions in order to indicate error conditions rather than have error conditions encoded in return values. &lt;br /&gt;
*Asychronous method calls never throw exceptions to indicate error conditions. Instead, error conditions are delivered as a new Error object that is returned to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039;. (Asynchronous methods are &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;) &lt;br /&gt;
*If &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; times out, an Error object is returned. Previously NULL was returned in this case. &lt;br /&gt;
*All objects returned by &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; have &#039;&#039;&#039;Type&#039;&#039;&#039; and &#039;&#039;&#039;Name&#039;&#039;&#039; properties. When the &#039;&#039;&#039;Type&#039;&#039;&#039; is “Error”, the Error object has additional properties that contain further details about the error. &lt;br /&gt;
*All existing script syntax for designation of message payloads has been deprecated. A new syntax that allows for greater expression has been adopted. Details can be found [[Updated Message Payload Syntax|here]]. There are no syntax changes to function payloads. &lt;br /&gt;
*The signature for &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; has been changed. Successful calls to &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; now fully initialize the object.&lt;br /&gt;
&lt;br /&gt;
=== End-Of-Lifed Methods and Properties  ===&lt;br /&gt;
&lt;br /&gt;
The following have been End-Of-Lifed (EOL&#039;d). A call to any of these methods or an access to any of these properties will now result in a not-implemented exception in the script making the call or access. &lt;br /&gt;
&lt;br /&gt;
*ascript.Quit() &lt;br /&gt;
*ascript.Interfaces &lt;br /&gt;
*ascript.NamedEvents &lt;br /&gt;
*ascript.WaitForEventWithTimeout &lt;br /&gt;
*ascript.RspTimeoutNotifyEnabled &lt;br /&gt;
*ascript.CreateTimer() &lt;br /&gt;
*ascript.DestroyTimer() &lt;br /&gt;
*ascript.WaitTimeoutNotifyEnabled &lt;br /&gt;
*ascript.Compare_As_C_Values() &lt;br /&gt;
*ascript.AsyncErrorNotifyEnabled &lt;br /&gt;
*ascript.Function.Item().User/Owner.SMID&lt;br /&gt;
&lt;br /&gt;
=== Recommended Steps for Migration From a Previous Version  ===&lt;br /&gt;
&lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; in all scripts. Previous logic to test for null indicating timeouts must be modified. &#039;&#039;&#039;WaitForEvent()&#039;&#039;&#039; now always returns an object, in the case of a timeout (or other error) an Error object is returned. &lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.Quit&#039;&#039;&#039; in all scripts. Modify the logic as necessary to exit the script by other means in place of the original &#039;&#039;&#039;Quit()&#039;&#039;&#039; call. &lt;br /&gt;
*Search for all asynchronous method calls (Asynchronous calls are limited to &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;). Modify the logic as necessary to call &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; if errors (including timeout error) should be detected. &lt;br /&gt;
*If you have scripts that explicitly instantiate an &#039;&#039;&#039;ascript&#039;&#039;&#039; object (i.e. they create an object using the &#039;&#039;&#039;&amp;quot;STRIDE.ascript&amp;quot;&#039;&#039;&#039; PROGID), search for all occurrences and modify the subsequent call to &#039;&#039;&#039;ascript.Initialize()&#039;&#039;&#039; to pass the new parameter set. &lt;br /&gt;
*Search for all EOL&#039;d methods and properties. Each can be replaced by setting the appropriate timeout property and handling the timeout error object delivered by WaitForEvent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;Section1&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%; border-collapse: collapse;&amp;quot; class=&amp;quot;MsoTableGrid&amp;quot;&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1pt solid windowtext; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;EOL’d&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Method or Property&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&#039;&#039;&#039;Recommended Replacement&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Quit&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Refactor&amp;lt;/span&amp;gt; script logic to exit the script by other means. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Interfaces&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Functions&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Messages&amp;lt;/span&amp;gt; as appropriate. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.NamedEvents&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitForEventWithTimeout&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() after setting desired timeout using &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitTimeoutPeriod&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.RspTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.CreateTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Add&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.DestroyTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Remove&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Compare_As_C_Values&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.AsyncErrorNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Error notification from asynchronous calls is performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Function.Item&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SMID&amp;lt;/span&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Function.Item&amp;lt;/span&amp;gt;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SUID&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
Please refer to &#039;&#039;&#039;&#039;&#039;Platform Abstraction Layer (PAL) Specification&#039;&#039;&#039;&#039;&#039; for detailed information on new APIs. You may also refer to Linux implementation of PAL, which has been updated with new routines. &lt;br /&gt;
&lt;br /&gt;
*Implement new shared memory routines, palMemSegmentOpen() &amp;amp;amp; palMemSegmentClose(). In case of multi-process target, these routines should implement shared memory using memory-mapped files.&lt;br /&gt;
&lt;br /&gt;
*Runtime now can manage dynamic, configurable, and internal static memory. In case of multi-process target, update palMemAlloc() to simply call _srMem_Allocate() and palMemFree() to simply call _srMem_Free(). In case of single-process target, you can simply allocate dynamic memory according to your Operating System. If you are upgrading, you can simply leave the current implementation as it is.&lt;br /&gt;
&lt;br /&gt;
*Implement new mutex routines, palMutexInit(), palMutexDestroy(), palMutexLock() &amp;amp;amp; palMutexUnlock, to handle any named mutex objects. It is recommended to implement a separate code for shared memory case if it is necessary.&lt;br /&gt;
&lt;br /&gt;
*Remove old routines palProtect(), palUnprotect() and palCriticalErr().&lt;br /&gt;
&lt;br /&gt;
*Implement new routines palGetThreadId() and palGetProcessId().&lt;br /&gt;
&lt;br /&gt;
*Implement new routine palSleep().&lt;br /&gt;
&lt;br /&gt;
*Update synchronization routines, palCreateNID(), palDeleteNID(), palWait() &amp;amp;amp; palNotify(), to support event notifications and in case of multi-process target is enabled, sharing of the synchronization objects among multiple processors.&lt;br /&gt;
&lt;br /&gt;
*If your PAL uses &#039;&#039;S2Mem&#039;&#039; routines for dynamic memory, you should use new Runtime module &#039;&#039;srMem&#039;&#039;. Update palMemAlloc() to call _srMem_Allocate() and palMemFree() to call _srMem_Free().&lt;br /&gt;
&lt;br /&gt;
*Optionally, implement new routine palLog() as a logging utility for PAL and Runtime.&lt;br /&gt;
&lt;br /&gt;
== Runtime  ==&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new memory management (srCFG_MEMORY_MANAGEMENT) and multi-process target (srCFG_MULTI_PROC_TARGET) settings. By default, memory management and multi-process target are disabled. If you enable multi-process target you also need to enable memory management and configure the sizes and the maximum number of memory blocks. New Runtime module &#039;&#039;srMem&#039;&#039; uses these configurations to allocate and manage memory segments.&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new target connection timeout setting (srCFG_CONNECTION_TIMEOUT).&lt;br /&gt;
&lt;br /&gt;
*If target Test Classes and Test Functions are used, change the signature to include test label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
&lt;br /&gt;
== Windows Applications using Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
*The new &#039;&#039;&#039;s2srwin.lib&#039;&#039;&#039; has public API, published in a header srwin.h, containing the following set of routines:&lt;br /&gt;
&lt;br /&gt;
 srWin_SetMaster() - Sets the application as the master and initializes the Stride Runtime thread. In a multi-process environment only one application should make this call.&lt;br /&gt;
 srWin_AddThread() - Adds additional message processing threads to the application.&lt;br /&gt;
 srWin_Run() - Starts the processing and will not return until it has been signaled via keyboard key or CTRL-C.&lt;br /&gt;
 srWin_SetPortTCP() - Overrides the TCP port number (default: 8000) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
 srWin_SetPortSerial() - Overrides the COM port number (default: 1) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
&lt;br /&gt;
*Existing Host Apps developed against the old hostapphrt and hostapptrt libraries should be updated to as follows: &lt;br /&gt;
**replace the include of hostapp.h with include of srwin.h &lt;br /&gt;
**replace all calls to HostAppXXX() with srWin_XXX() &lt;br /&gt;
**call srWin_SetMaster() to start the runtime thread, srThread, before calling srWin_Run(). Within a multi-process target, only one process (the master) calls this routine.&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;a&amp;quot; ==&lt;br /&gt;
* Linux version of the STRIDE [[Build Tools]] is officially introduced.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;b&amp;quot; ==&lt;br /&gt;
* Relaxed [[scl_cast]]() pragma to allow cast from any integral ptr to union of ptrs&lt;br /&gt;
* Fixed compile warnings in Linux PAL.&lt;br /&gt;
* Fixed issue in instrumentation of [[Test Units]].&lt;br /&gt;
* Fixed issue with UNC paths.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0102 ==&lt;br /&gt;
* Implemented new licensing scheme. Existing licenses will not work anymore and need to be reissued. Old and new licenses could co-exist at the same location.&lt;br /&gt;
* The syntax of [[scl_ptr]] and [[scl_ptr_sized]] pragmas has changed. Now it is required to quote the direction and usage attributes. See this [[Handling_of_pointer_attribute_tokens|page]] for details.&lt;br /&gt;
* [[Test_Units#Runtime_Test_Services|Runtime Test Services]] now support adding annotations per test suite.&lt;br /&gt;
* A complete set of [[Samples]] has been implemented.&lt;br /&gt;
* Fixed several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Fixed several minor issues in [[AutoScript]]. &lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0102&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039; and &#039;&#039;&#039;3.01&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8112</id>
		<title>STRIDE 3.0.01xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8112"/>
		<updated>2008-10-15T23:41:23Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* AutoScript */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Release Notes&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
This page documents the changes in STRIDE version 3.0.01xx (code name &#039;&#039;StoneSteps&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note that if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= What&#039;s New  =&lt;br /&gt;
&lt;br /&gt;
Based on customer feedback, in this release we have made significant performance improvements as well as many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Performance Improvements ==&lt;br /&gt;
&lt;br /&gt;
Specific improvements have been made in the following areas: &lt;br /&gt;
&lt;br /&gt;
*Database loading time has been improved &lt;br /&gt;
*Compile times are now shorter &lt;br /&gt;
*Scripting operations involving function and message payloads now perform better, especially when arrays are involved &lt;br /&gt;
*Runtime performance has been improved by optimizing payload serialization and deserialization operations&lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
&lt;br /&gt;
=== SCL Wizard ===&lt;br /&gt;
&lt;br /&gt;
The SCL Wizard functionality in [[STRIDE Studio]] has been extended so that you can now use the tool to qualify message payloads as well as function payloads. &lt;br /&gt;
&lt;br /&gt;
In addition, the following types of qualifications can now be made: &lt;br /&gt;
&lt;br /&gt;
*For payloads that include function pointers, the SCL Wizard now supports qualifying the pointers as such and identifying candidate function values &lt;br /&gt;
*Type casts can now be specified on payload members&lt;br /&gt;
&lt;br /&gt;
=== Connection Management ===&lt;br /&gt;
&lt;br /&gt;
Connection management has been greatly simplified; software managing connection to the target system has been integrated into [[STRIDE Studio]] so that connections can be managed directly from there. (It is still possible to access connection management functionality without using Studio.) &lt;br /&gt;
&lt;br /&gt;
The Panel program is no longer used, and there is no longer a requirement to load the database to communicate with a remote target. &lt;br /&gt;
&lt;br /&gt;
==== Transport Properties ====&lt;br /&gt;
&lt;br /&gt;
All transport properties can now be accessed via scripts. A new transport scripting model makes this possible.&lt;br /&gt;
&lt;br /&gt;
=== STRIDE Studio Test Runner Improvements ===&lt;br /&gt;
&lt;br /&gt;
The test runner in [[STRIDE Studio]] has incorporated several functional and usability improvements. &lt;br /&gt;
&lt;br /&gt;
*Each runnable script and folder (Suite) in a workspace now has additional properties that allow you to optionally specify a handler script that will be executed in the case of an unhandled error (property OnError) or a timeout (property OnTimeout). A timeout value can be set for each folder.&lt;br /&gt;
&lt;br /&gt;
*Each runnable folder (Suite) in a workspace now has a property (OnRunConnect) that can instruct STRIDE Studio to automatically connect to a target system before the folder is executed.&lt;br /&gt;
&lt;br /&gt;
*The workspace now has a dynamic property (ExecutionState) that allows you to alter the order of script execution at runtime.&lt;br /&gt;
&lt;br /&gt;
=== New Frameworks Feature ===&lt;br /&gt;
&lt;br /&gt;
This version introduces [[Using Frameworks|Target Frameworks]], which provide customizable templates for workspace creation. The use of frameworks simplifies the use of STRIDE and ensures consistency across a development team. &lt;br /&gt;
&lt;br /&gt;
Several [[Provided Frameworks|reference frameworks]] are included in this release, supporting the following target environments: &lt;br /&gt;
&lt;br /&gt;
*[[Provided Frameworks#Windows|Windows]] &lt;br /&gt;
*[[Provided Frameworks#Linux|Linux]] &lt;br /&gt;
*[[Provided Frameworks#WinMobile|WinMobile]] &lt;br /&gt;
*[[Provided Frameworks#Generic|Generic]]&lt;br /&gt;
&lt;br /&gt;
[[Using Packages|Packages]] are also introduced. These provide a convenient way to encapsulate SCL-annotated source code and corresponding tests for a set of interfaces. &lt;br /&gt;
&lt;br /&gt;
=== Uploading Results to STRIDE Portal ===&lt;br /&gt;
&lt;br /&gt;
Uploading test results from STRIDE Reporter to STRIDE Portal has been integrated into STRIDE Studio. Portal&#039;s server information can be configured from Studio&#039;s workspace properties while uploading results to Portal can be enabled or disabled via workspace context menu. If enabled, after running the workspace, a script folder or a script file, results in Report file will automatically be uploaded to the configured server. &lt;br /&gt;
&lt;br /&gt;
== Build Tools  ==&lt;br /&gt;
&lt;br /&gt;
A set of new command line [[Build Tools]] has been implemented: &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Stride compiler&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride database binder&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride instrumentation generator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
These utilities has been ported for Windows and Linux. Using them would allow seamless integration with a &amp;quot;make&amp;quot; build environment.&lt;br /&gt;
&lt;br /&gt;
== Target-Based Testing  ==&lt;br /&gt;
&lt;br /&gt;
Target-based (xUnit-style) testing has been simplified. The new set of SCL pragmas [[Test Units]] can now be included in a source file to tell the compiler and IM generator to automatically create test harnessing code.&lt;br /&gt;
&lt;br /&gt;
The automation components STRIDE.testclass, STRIDE.testunit and STRIDE.testfunction are removed.&lt;br /&gt;
&lt;br /&gt;
== Runtime/PAL  ==&lt;br /&gt;
&lt;br /&gt;
Based on customer requirements, in this release we have made significant changes to [[Target_Integration#The STRIDE Runtime|STRIDE Runtime]] and [[Target_Integration#The Platform Abstraction Layer (PAL)|PAL]]. &lt;br /&gt;
&lt;br /&gt;
=== Multi-Process Targets  ===&lt;br /&gt;
&lt;br /&gt;
New routines and support have been added to Runtime and PAL to support multi-process targets. Changes include: implementation of memory management and shared memory, protecting using named Mutex objects, synchronization of multiple processors and multiple threads, and usage of current process and thread IDs.&lt;br /&gt;
&lt;br /&gt;
=== Logging (Optional)  ===&lt;br /&gt;
&lt;br /&gt;
Runtime and PAL use a logging routine that can optionally be implemented in PAL. &lt;br /&gt;
&lt;br /&gt;
== Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
A new [[Windows_Off-Target_SDK|SDK]] for implemention of Off-Target applications on Windows has been packaged. It contains a library (s2srWin.dll/lib) in which the Windows PAL, Runtime, and GRS and a set of utility scripts are prebuilt. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;s2shostapphrt&#039;&#039;&#039; library, a prebuilt verion of the Host Runtime, has been removed. Building Windows applications using the Host Runtime is not supported anymore. The &#039;&#039;&#039;s2shostapptrt&#039;&#039;&#039; library, a prebuilt version of the Target Runtime, has also been removed. &lt;br /&gt;
&lt;br /&gt;
If an upgrade is performed it is strongly recommended that the above mentioned &#039;&#039;&#039;s2shostapp*&#039;&#039;&#039; libraries and their public API header (hostapp.h) be manually removed.&lt;br /&gt;
&lt;br /&gt;
= Support Wiki =&lt;br /&gt;
&lt;br /&gt;
This support wiki http://support.s2technologies.com is introduced with this version. You can navigate here from your web browser, or directly from STRIDE Studio; a link is provided in the Help menu. &lt;br /&gt;
&lt;br /&gt;
== STRIDE Samples  ==&lt;br /&gt;
&lt;br /&gt;
We have created a set of [[Samples_Overview|sample workspaces]] to aid in the evaluation of STRIDE, or as a tool for learning how to apply STRIDE to different testing scenarios. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to STRIDE, or want to learn more about using the product, this is a great place to start.&lt;br /&gt;
&lt;br /&gt;
= Acquiring the Software =&lt;br /&gt;
&lt;br /&gt;
You can download the latest release from the S2 Technologies ftp site: ftp://ftp.s2technologies.com &lt;br /&gt;
&lt;br /&gt;
To run STRIDE you will need a license. If you are not yet a customer of S2 and would like to obtain an evaluation license, email [mailto:sales@s2technologies.com S2 Sales] or call our offices at &#039;&#039;&#039;760-635-2345&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
= Installing the Software  =&lt;br /&gt;
&lt;br /&gt;
To install STRIDE for the first time, or as an upgrade to an existing installation, please refer to [[Host Installation]]. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note: if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you are new to STRIDE, we recommend that you investigate the [[Samples_Overview|New STRIDE Samples]].&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;ascript&#039;&#039;&#039; API has been changed to be more robust: &lt;br /&gt;
**Certain deprecated methods have been eliminated. &lt;br /&gt;
**Some existing API methods have been modifed. &lt;br /&gt;
**The event model has been improved to allow greater script control.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Some scripts must be modified from previous versions of STRIDE to work successfully with 3.0.01xx. The necessary changes are detailed in the [[#Migration_to_3.0.01xx|Migration to 3.0.01xx]] section below. &lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;Panel&#039;&#039;&#039; object is no longer available to scripts; its functionality has been moved under the &#039;&#039;&#039;studio&#039;&#039;&#039; object model. You can access this new functionality as &#039;&#039;&#039;studio.Connection&#039;&#039;&#039;, however if you were formerly scripting the &#039;&#039;&#039;Panel&#039;&#039;&#039; object, you may find it is no longer necessary since: &lt;br /&gt;
**You can now configure your connection properties from within STRIDE Studio (from the menu select &#039;&#039;Tools/Target Connectivity&#039;&#039;) &lt;br /&gt;
**You can now set a workspace folder property to autoconnect upon execution&lt;br /&gt;
&lt;br /&gt;
*Zero is now allowed as the maximum size under certain circumstances in &#039;&#039;&#039;scl_string&#039;&#039;&#039; and &#039;&#039;&#039;scl_ptr_sized&#039;&#039;&#039;. Details of these circumstances are contained in the &#039;&#039;&#039;[[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]]&#039;&#039;&#039; document.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compiler.MicrosoftCompatibility&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Compiler.Compatibility&#039;&#039;&#039;. Valid values are &amp;quot;Generic&amp;quot; (generic mode), &amp;quot;Microsoft&amp;quot; (Microsoft compatibility), or &amp;quot;Gnu&amp;quot; (Gnu or Gcc compatibility).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compile()&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Build()&#039;&#039;&#039;. Also new methods, &#039;&#039;&#039;studio.Workspace.CleanBuild()&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.ReloadDatabase()&#039;&#039;&#039;, have been added.&lt;br /&gt;
&lt;br /&gt;
*A new property, &#039;&#039;&#039;Output&#039;&#039;&#039;, has been added off the studio object. This property outputs text to the Studio message tab, similar to how &#039;&#039;&#039;ascript.MessageBox()&#039;&#039;&#039; works for certain scripts. This property contains one method, &#039;&#039;&#039;PrintMessage(String msg)&#039;&#039;&#039;. You can see an example of its use [[Debugging Helps|here]].&lt;br /&gt;
&lt;br /&gt;
*A new settings group has been introduced - &#039;&#039;&#039;studio.Workspace.Settings.Build&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Intercept.Path&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Intercept.SourcePath&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.Intercept.HeaderPath&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Fixes  ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This section describes defects which have been corrected in STRIDE and the customer tracking number associated with them, if any, in brackets [].&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*[1055] Not able to specifiy uppercase include directory &lt;br /&gt;
*[1163] Certain cases of array of pointers to discriminated unions that were not handled correctly in the ascript object have been fixed. &lt;br /&gt;
*[1357] The ascript &#039;&#039;&#039;Call()&#039;&#039;&#039; method, when used with RspTimeoutPeriod, only returns True if a timeout has occurred. &lt;br /&gt;
*[1469] Global casting using &#039;&#039;&#039;scl_cast&#039;&#039;&#039; no longer causes an intercept module compile error. &lt;br /&gt;
*[1539] &#039;&#039;&#039;ascript&#039;&#039;&#039; no longer returns &amp;quot;undefined&amp;quot; when calling &#039;&#039;&#039;function.ReturnValue&#039;&#039;&#039; when the captured function returns an unqualified function pointer. &lt;br /&gt;
*[1543] IM source file locations added to studio UI and automation &lt;br /&gt;
*[1564] The Studio Add files dialog has been increased from 2K bytes to 100K bytes, to allow for more files to be selected at a time. &lt;br /&gt;
*[1586] Support for Variadic Macros &lt;br /&gt;
*[1597] EDGFront crash for scl_ptr_opaque &lt;br /&gt;
*[1600] Pre-processor treats constant 1 always as 8-bit &lt;br /&gt;
*[1605] Generated Perl script generates error when run in debugger &lt;br /&gt;
*The following statement in Runtime files &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; has been changed:&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args = 0;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;is now&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt; with no initializer. This makes it portable and able to compile under Linux. &lt;br /&gt;
*A macro that determines the existence of &#039;&#039;&#039;vsnprintf()&#039;&#039;&#039; has been updated in &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; in order to make it able to compile with GCC and other non-Microsoft compilers.&amp;lt;br&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; If you are using test functions and C++ test classes, you must be using compilers that support &#039;&#039;&#039;vsnprintf&#039;&#039;&#039; (variable argument lists), which is a standard in C99 and supported in C90. &lt;br /&gt;
*When tracing on a STID it&#039;s possible to display trace information for messages that aren&#039;t captured (i.e. the message&#039;s SMID is not known to STRIDE). A problem could occur when STRIDE attempted to interpret the payload of these messages. This has now been fixed; hex values only are now shown in the trace view for in this situation. &lt;br /&gt;
*Autosense was not working properly in the editor for message payloads. This has been fixed.&lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
=== TestUnits Collection  ===&lt;br /&gt;
&lt;br /&gt;
A new TestUnits collection has been implemented. All test interfaces (specified with [[SCL_Pragmas#Test_Units | Test Unit pragmas]]) will be listed there.&lt;br /&gt;
&lt;br /&gt;
=== Functions Collection  ===&lt;br /&gt;
&lt;br /&gt;
Interfaces specified with either the [[scl_test_class]] or [[scl_test_flist]] pragmas are not listed in the Functions collection anymore. &lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
=== Memory Management  ===&lt;br /&gt;
&lt;br /&gt;
To support multi-process target, memory management support for dynamic, configurable, and internal static memory has been implemented in Runtime. Runtime makes PAL calls to acquire memory segments and manages the memory according to runtime configurations set by user. In case of multi-process target is enabled, these memory will be shared among multiple applications, and PAL should implement shared memory. &lt;br /&gt;
&lt;br /&gt;
=== Protection using Mutex  ===&lt;br /&gt;
&lt;br /&gt;
Runtime now uses named mutex objects to protect critical data from multiple and simultaneous accesses by multiple threads and, in case of multi-process target is enabled, by multiple applications. Runtime makes PAL calls to obtain and control mutex objects. &lt;br /&gt;
&lt;br /&gt;
=== New Routines  ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Memory Management&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In case of multi-process target, recommended approach is to use &amp;lt;u&amp;gt;Memory-Mapped Files&amp;lt;/u&amp;gt; to implement memory segments. &lt;br /&gt;
&lt;br /&gt;
 palMemSegmentOpen() - Open/create memory segment &lt;br /&gt;
 palMemSegmentClose() - Close memory segment&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Named Mutexes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palMutexInit() - Initialize a mutex object&lt;br /&gt;
 palMutexDestroy() - Destroy a mutex object&lt;br /&gt;
 palMutexLock() - Lock a mutex object&lt;br /&gt;
 palMutexUnlock() - Unlock a mutex object&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Task Synchronization&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palGetThreadId() - Get current thread Id&lt;br /&gt;
 palGetProcessId() - Get current process Id&lt;br /&gt;
 palSleep() - Suspend the execution of the current thread&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Logging&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is optional. &lt;br /&gt;
&lt;br /&gt;
 palLog() - Logging utility&lt;br /&gt;
&lt;br /&gt;
=== Updated Routines  ===&lt;br /&gt;
&lt;br /&gt;
*Function signatures and functionalities of palWait() &amp;amp;amp; palNotify() have been updated.&lt;br /&gt;
&lt;br /&gt;
 palWait() - now takes in an in/out pointer for events notification&lt;br /&gt;
 palNotify() - mail box Id has been updated to notify any event including mail box Ids.&lt;br /&gt;
&lt;br /&gt;
*Function signatures of palMemAlloc() &amp;amp;amp; palMemFree() have been updated.&lt;br /&gt;
&lt;br /&gt;
=== Removed Routines  ===&lt;br /&gt;
&lt;br /&gt;
 palProtect&lt;br /&gt;
 palUnprotect&lt;br /&gt;
 palCriticalErr&lt;br /&gt;
&lt;br /&gt;
=== Removed Modules  ===&lt;br /&gt;
&lt;br /&gt;
 S2Mem - The memory module provided as part of PAL has been removed. If a native &lt;br /&gt;
         operating system does not support dynamic memory, the Runtime&#039;s memory &lt;br /&gt;
         management module &#039;&#039;srMem&#039;&#039; can be used instead of &#039;&#039;S2Mem&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
&lt;br /&gt;
*STRIDE Host Release &#039;&#039;&#039;3.0.01xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;. &lt;br /&gt;
*In order to eliminate redundancy and promote an object-oriented design, &amp;quot;Member Methods&amp;quot; have been removed from srTest; only &amp;quot;Member Objects&amp;quot; exist now in srTest. In addition, accessing the functionality of Member Objects in this way is similar to accessing scripting objects through the STRIDE Reporter object model. For a detailed explanation, refer to [[Test_Units#C.2B.2B_Test_Classes|this article]] on the STRIDE Support Wiki. &lt;br /&gt;
*A new routine, &#039;&#039;&#039;srInit()&#039;&#039;&#039;, replaces deprecated &#039;&#039;&#039;srInitialize()&#039;&#039;&#039;. Now the target will not be able to set an auto-connect with timeout. &lt;br /&gt;
*The &#039;&#039;&#039;scl_tp&#039;&#039;&#039; and &#039;&#039;&#039;scl_tp_format&#039;&#039;&#039; pragmas have been deprecated. The new pragmas are &#039;&#039;&#039;scl_tracepoint&#039;&#039;&#039; and &#039;&#039;&#039;scl_tracepoint_format&#039;&#039;&#039;. &lt;br /&gt;
*The default runtime configuration in srcfg.h now has fragmentation turned on. The srCFG_MAX_TRANSPORT_UNIT is set to 2048. &lt;br /&gt;
*Fixed warnings for parameter name differences in function declarations and definitions for srSubscribe(), srTracePoint(), and srQuerySMID(). &lt;br /&gt;
*Removed unnecessary/extra response to srCONNECT_CLOSE_T_SMID message. &lt;br /&gt;
*The Runtime now checks for the connection before responding with a &amp;quot;Pong&amp;quot; upon receiving a &amp;quot;Ping.&amp;quot; &lt;br /&gt;
*Introduced 40 additional system trace points to better describe internal errors. &lt;br /&gt;
*Reporting of the error srERR_SUB_NONE has been suppressed so that it no longer generates a target trace error. &lt;br /&gt;
*Trace views now always display srTraceStr() with reserved STID (srSTID_RESERVED) regardless of trace filter settings. &lt;br /&gt;
*srPtrSetupChild() now accepts NULL for handle (out pointer - pwHandle). &lt;br /&gt;
*Added a new Runtime Test Services (RTS) API &#039;&#039;&#039;srTestCaseSetStatusEx()&#039;&#039;&#039;, which enables the providing of the actual return value of a numeric test method in the case of failure. &lt;br /&gt;
*Added two new public APIs - &amp;quot;Printing&amp;quot; APIs to display messages on Trace Views without having to specify a STID or a trace level and to set any trace filters on Trace Views. These routines support formatted strings with variable arguments. The &#039;&#039;&#039;srPrintInfo()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and Level=3. The &#039;&#039;&#039;srPrintError()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and the Level=1. &#039;&#039;&#039;Warning:&#039;&#039;&#039; These new APIs use vsnprintf() routine to process variable arguments. The vsnprintf() became a standard in C99 and is supported in C90. &lt;br /&gt;
*To support multi-process target, significant changes have been made to runtime. &lt;br /&gt;
*A new public routine, srUninit(), has been added to sr.h &amp;amp;amp; srapi.c. &lt;br /&gt;
* A new public routine for Runtime Thread exit point, srThreadUninit(), has been added to sr.h &amp;amp;amp; srthread.c. &lt;br /&gt;
*A new module, srMem, for Memory Management has been added. Its new routines, _srMem_Allocate() &amp;amp;amp; _srMem_Free(), will be used in PAL&#039;s palMemAlloc() &amp;amp;amp; palMemFree() in case of multi-process target is enabled. &lt;br /&gt;
*Calls to palProtect() &amp;amp;amp; palUnprotect() have been replaced by new routines _srProtect() &amp;amp;amp; _srUnprotect(), in which the implementation uses its own mutex object that calls PAL&#039;s mutex routines. &lt;br /&gt;
*In target Test Classes and Test Functions, added capability to specify the comment label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
* Fixed a potential data abort issue when executing delegate code in the IM prior to Runtime being initialized.&lt;br /&gt;
* Runtime Test Services APIs are now thread safe. &lt;br /&gt;
* Fixed cancelation of remote boadcast subcribtion goes in an infinite loop.&lt;br /&gt;
* Fixed Runtime resource abuse when sending lots of broadcast messages. &lt;br /&gt;
* Added partial check for message payload corectness.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapi.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srconn.h&lt;br /&gt;
 srerr.c&lt;br /&gt;
 srib.c&lt;br /&gt;
 srib.h&lt;br /&gt;
 sribctrl.c&lt;br /&gt;
 sribtr.c&lt;br /&gt;
 sribtr.h&lt;br /&gt;
 srmsgmar.c&lt;br /&gt;
 srmsgptr.c&lt;br /&gt;
 srmsgptr.h&lt;br /&gt;
 srmsgque.c&lt;br /&gt;
 srmsgque.h&lt;br /&gt;
 srmsgrt.c&lt;br /&gt;
 srmsgrt.h&lt;br /&gt;
 srmsgsub.c&lt;br /&gt;
 srmsgsub.h&lt;br /&gt;
 srstid.c&lt;br /&gt;
 srstid.h&lt;br /&gt;
 srsuid.c&lt;br /&gt;
 srsuid.h&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
 srtestutil.c&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srthread.c&lt;br /&gt;
 srthread.h&lt;br /&gt;
 srtime.c&lt;br /&gt;
 srtime.h&lt;br /&gt;
 srtp.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been added:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srmem.c&lt;br /&gt;
 srmem.h&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.01xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
Any use of test classes through the Functions collection, like: &lt;br /&gt;
&lt;br /&gt;
  $main::ascript-&amp;amp;gt;Functions-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;User-&amp;amp;gt;Call(); &lt;br /&gt;
&lt;br /&gt;
should be converted to use the new TestUnits collection: &lt;br /&gt;
&lt;br /&gt;
  $main::ascript-&amp;amp;gt;TestUnits-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;Run(); &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== API Changes  ===&lt;br /&gt;
&lt;br /&gt;
*The Support Wiki pages now contain reference help for AutoScript. The content has been updated to reflect the API changes, for details see the &#039;&#039;AutoScript API Reference&#039;&#039;. &lt;br /&gt;
*All synchronous method calls now throw exceptions in order to indicate error conditions rather than have error conditions encoded in return values. &lt;br /&gt;
*Asychronous method calls never throw exceptions to indicate error conditions. Instead, error conditions are delivered as a new Error object that is returned to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039;. (Asynchronous methods are &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;) &lt;br /&gt;
*If &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; times out, an Error object is returned. Previously NULL was returned in this case. &lt;br /&gt;
*All objects returned by &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; have &#039;&#039;&#039;Type&#039;&#039;&#039; and &#039;&#039;&#039;Name&#039;&#039;&#039; properties. When the &#039;&#039;&#039;Type&#039;&#039;&#039; is “Error”, the Error object has additional properties that contain further details about the error. &lt;br /&gt;
*All existing script syntax for designation of message payloads has been deprecated. A new syntax that allows for greater expression has been adopted. Details can be found [[Updated Message Payload Syntax|here]]. There are no syntax changes to function payloads. &lt;br /&gt;
*The signature for &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; has been changed. Successful calls to &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; now fully initialize the object.&lt;br /&gt;
&lt;br /&gt;
=== End-Of-Lifed Methods and Properties  ===&lt;br /&gt;
&lt;br /&gt;
The following have been End-Of-Lifed (EOL&#039;d). A call to any of these methods or an access to any of these properties will now result in a not-implemented exception in the script making the call or access. &lt;br /&gt;
&lt;br /&gt;
*ascript.Quit() &lt;br /&gt;
*ascript.Interfaces &lt;br /&gt;
*ascript.NamedEvents &lt;br /&gt;
*ascript.WaitForEventWithTimeout &lt;br /&gt;
*ascript.RspTimeoutNotifyEnabled &lt;br /&gt;
*ascript.CreateTimer() &lt;br /&gt;
*ascript.DestroyTimer() &lt;br /&gt;
*ascript.WaitTimeoutNotifyEnabled &lt;br /&gt;
*ascript.Compare_As_C_Values() &lt;br /&gt;
*ascript.AsyncErrorNotifyEnabled &lt;br /&gt;
*ascript.Function.Item().User/Owner.SMID&lt;br /&gt;
&lt;br /&gt;
=== Recommended Steps for Migration From a Previous Version  ===&lt;br /&gt;
&lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; in all scripts. Previous logic to test for null indicating timeouts must be modified. &#039;&#039;&#039;WaitForEvent()&#039;&#039;&#039; now always returns an object, in the case of a timeout (or other error) an Error object is returned. &lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.Quit&#039;&#039;&#039; in all scripts. Modify the logic as necessary to exit the script by other means in place of the original &#039;&#039;&#039;Quit()&#039;&#039;&#039; call. &lt;br /&gt;
*Search for all asynchronous method calls (Asynchronous calls are limited to &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;). Modify the logic as necessary to call &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; if errors (including timeout error) should be detected. &lt;br /&gt;
*If you have scripts that explicitly instantiate an &#039;&#039;&#039;ascript&#039;&#039;&#039; object (i.e. they create an object using the &#039;&#039;&#039;&amp;quot;STRIDE.ascript&amp;quot;&#039;&#039;&#039; PROGID), search for all occurrences and modify the subsequent call to &#039;&#039;&#039;ascript.Initialize()&#039;&#039;&#039; to pass the new parameter set. &lt;br /&gt;
*Search for all EOL&#039;d methods and properties. Each can be replaced by setting the appropriate timeout property and handling the timeout error object delivered by WaitForEvent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;Section1&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%; border-collapse: collapse;&amp;quot; class=&amp;quot;MsoTableGrid&amp;quot;&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1pt solid windowtext; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;EOL’d&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Method or Property&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&#039;&#039;&#039;Recommended Replacement&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Quit&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Refactor&amp;lt;/span&amp;gt; script logic to exit the script by other means. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Interfaces&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Functions&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Messages&amp;lt;/span&amp;gt; as appropriate. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.NamedEvents&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitForEventWithTimeout&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() after setting desired timeout using &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitTimeoutPeriod&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.RspTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.CreateTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Add&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.DestroyTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Remove&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Compare_As_C_Values&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.AsyncErrorNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Error notification from asynchronous calls is performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Function.Item&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SMID&amp;lt;/span&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Function.Item&amp;lt;/span&amp;gt;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SUID&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
Please refer to &#039;&#039;&#039;&#039;&#039;Platform Abstraction Layer (PAL) Specification&#039;&#039;&#039;&#039;&#039; for detailed information on new APIs. You may also refer to Linux implementation of PAL, which has been updated with new routines. &lt;br /&gt;
&lt;br /&gt;
*Implement new shared memory routines, palMemSegmentOpen() &amp;amp;amp; palMemSegmentClose(). In case of multi-process target, these routines should implement shared memory using memory-mapped files.&lt;br /&gt;
&lt;br /&gt;
*Runtime now can manage dynamic, configurable, and internal static memory. In case of multi-process target, update palMemAlloc() to simply call _srMem_Allocate() and palMemFree() to simply call _srMem_Free(). In case of single-process target, you can simply allocate dynamic memory according to your Operating System. If you are upgrading, you can simply leave the current implementation as it is.&lt;br /&gt;
&lt;br /&gt;
*Implement new mutex routines, palMutexInit(), palMutexDestroy(), palMutexLock() &amp;amp;amp; palMutexUnlock, to handle any named mutex objects. It is recommended to implement a separate code for shared memory case if it is necessary.&lt;br /&gt;
&lt;br /&gt;
*Remove old routines palProtect(), palUnprotect() and palCriticalErr().&lt;br /&gt;
&lt;br /&gt;
*Implement new routines palGetThreadId() and palGetProcessId().&lt;br /&gt;
&lt;br /&gt;
*Implement new routine palSleep().&lt;br /&gt;
&lt;br /&gt;
*Update synchronization routines, palCreateNID(), palDeleteNID(), palWait() &amp;amp;amp; palNotify(), to support event notifications and in case of multi-process target is enabled, sharing of the synchronization objects among multiple processors.&lt;br /&gt;
&lt;br /&gt;
*If your PAL uses &#039;&#039;S2Mem&#039;&#039; routines for dynamic memory, you should use new Runtime module &#039;&#039;srMem&#039;&#039;. Update palMemAlloc() to call _srMem_Allocate() and palMemFree() to call _srMem_Free().&lt;br /&gt;
&lt;br /&gt;
*Optionally, implement new routine palLog() as a logging utility for PAL and Runtime.&lt;br /&gt;
&lt;br /&gt;
== Runtime  ==&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new memory management (srCFG_MEMORY_MANAGEMENT) and multi-process target (srCFG_MULTI_PROC_TARGET) settings. By default, memory management and multi-process target are disabled. If you enable multi-process target you also need to enable memory management and configure the sizes and the maximum number of memory blocks. New Runtime module &#039;&#039;srMem&#039;&#039; uses these configurations to allocate and manage memory segments.&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new target connection timeout setting (srCFG_CONNECTION_TIMEOUT).&lt;br /&gt;
&lt;br /&gt;
*If target Test Classes and Test Functions are used, change the signature to include test label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
&lt;br /&gt;
== Windows Applications using Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
*The new &#039;&#039;&#039;s2srwin.lib&#039;&#039;&#039; has public API, published in a header srwin.h, containing the following set of routines:&lt;br /&gt;
&lt;br /&gt;
 srWin_SetMaster() - Sets the application as the master and initializes the Stride Runtime thread. In a multi-process environment only one application should make this call.&lt;br /&gt;
 srWin_AddThread() - Adds additional message processing threads to the application.&lt;br /&gt;
 srWin_Run() - Starts the processing and will not return until it has been signaled via keyboard key or CTRL-C.&lt;br /&gt;
 srWin_SetPortTCP() - Overrides the TCP port number (default: 8000) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
 srWin_SetPortSerial() - Overrides the COM port number (default: 1) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
&lt;br /&gt;
*Existing Host Apps developed against the old hostapphrt and hostapptrt libraries should be updated to as follows: &lt;br /&gt;
**replace the include of hostapp.h with include of srwin.h &lt;br /&gt;
**replace all calls to HostAppXXX() with srWin_XXX() &lt;br /&gt;
**call srWin_SetMaster() to start the runtime thread, srThread, before calling srWin_Run(). Within a multi-process target, only one process (the master) calls this routine.&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;a&amp;quot; ==&lt;br /&gt;
* Linux version of the STRIDE [[Build Tools]] is officially introduced.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;b&amp;quot; ==&lt;br /&gt;
* Relaxed [[scl_cast]]() pragma to allow cast from any integral ptr to union of ptrs&lt;br /&gt;
* Fixed compile warnings in Linux PAL.&lt;br /&gt;
* Fixed issue in instrumentation of [[Test Units]].&lt;br /&gt;
* Fixed issue with UNC paths.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0102 ==&lt;br /&gt;
* Implemented new licensing scheme. Existing licenses will not work anymore and need to be reissued. Old and new licenses could co-exist at the same location.&lt;br /&gt;
* The syntax of [[scl_ptr]] and [[scl_ptr_sized]] pragmas has changed. Now it is required to quote the direction and usage attributes. See this [[Handling_of_pointer_attribute_tokens|page]] for details.&lt;br /&gt;
* [[Test_Units#Runtime_Test_Services|Runtime Test Services]] now support adding annotations per test suite.&lt;br /&gt;
* A complete set of [[Samples]] has been implemented.&lt;br /&gt;
* Fixed several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Fixed several minor issues in [[AutoScript]]. &lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0102&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039; and &#039;&#039;&#039;3.01&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8111</id>
		<title>STRIDE 3.0.01xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8111"/>
		<updated>2008-10-15T23:40:39Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* Removed Modules */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Release Notes&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
This page documents the changes in STRIDE version 3.0.01xx (code name &#039;&#039;StoneSteps&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note that if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= What&#039;s New  =&lt;br /&gt;
&lt;br /&gt;
Based on customer feedback, in this release we have made significant performance improvements as well as many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Performance Improvements ==&lt;br /&gt;
&lt;br /&gt;
Specific improvements have been made in the following areas: &lt;br /&gt;
&lt;br /&gt;
*Database loading time has been improved &lt;br /&gt;
*Compile times are now shorter &lt;br /&gt;
*Scripting operations involving function and message payloads now perform better, especially when arrays are involved &lt;br /&gt;
*Runtime performance has been improved by optimizing payload serialization and deserialization operations&lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
&lt;br /&gt;
=== SCL Wizard ===&lt;br /&gt;
&lt;br /&gt;
The SCL Wizard functionality in [[STRIDE Studio]] has been extended so that you can now use the tool to qualify message payloads as well as function payloads. &lt;br /&gt;
&lt;br /&gt;
In addition, the following types of qualifications can now be made: &lt;br /&gt;
&lt;br /&gt;
*For payloads that include function pointers, the SCL Wizard now supports qualifying the pointers as such and identifying candidate function values &lt;br /&gt;
*Type casts can now be specified on payload members&lt;br /&gt;
&lt;br /&gt;
=== Connection Management ===&lt;br /&gt;
&lt;br /&gt;
Connection management has been greatly simplified; software managing connection to the target system has been integrated into [[STRIDE Studio]] so that connections can be managed directly from there. (It is still possible to access connection management functionality without using Studio.) &lt;br /&gt;
&lt;br /&gt;
The Panel program is no longer used, and there is no longer a requirement to load the database to communicate with a remote target. &lt;br /&gt;
&lt;br /&gt;
==== Transport Properties ====&lt;br /&gt;
&lt;br /&gt;
All transport properties can now be accessed via scripts. A new transport scripting model makes this possible.&lt;br /&gt;
&lt;br /&gt;
=== STRIDE Studio Test Runner Improvements ===&lt;br /&gt;
&lt;br /&gt;
The test runner in [[STRIDE Studio]] has incorporated several functional and usability improvements. &lt;br /&gt;
&lt;br /&gt;
*Each runnable script and folder (Suite) in a workspace now has additional properties that allow you to optionally specify a handler script that will be executed in the case of an unhandled error (property OnError) or a timeout (property OnTimeout). A timeout value can be set for each folder.&lt;br /&gt;
&lt;br /&gt;
*Each runnable folder (Suite) in a workspace now has a property (OnRunConnect) that can instruct STRIDE Studio to automatically connect to a target system before the folder is executed.&lt;br /&gt;
&lt;br /&gt;
*The workspace now has a dynamic property (ExecutionState) that allows you to alter the order of script execution at runtime.&lt;br /&gt;
&lt;br /&gt;
=== New Frameworks Feature ===&lt;br /&gt;
&lt;br /&gt;
This version introduces [[Using Frameworks|Target Frameworks]], which provide customizable templates for workspace creation. The use of frameworks simplifies the use of STRIDE and ensures consistency across a development team. &lt;br /&gt;
&lt;br /&gt;
Several [[Provided Frameworks|reference frameworks]] are included in this release, supporting the following target environments: &lt;br /&gt;
&lt;br /&gt;
*[[Provided Frameworks#Windows|Windows]] &lt;br /&gt;
*[[Provided Frameworks#Linux|Linux]] &lt;br /&gt;
*[[Provided Frameworks#WinMobile|WinMobile]] &lt;br /&gt;
*[[Provided Frameworks#Generic|Generic]]&lt;br /&gt;
&lt;br /&gt;
[[Using Packages|Packages]] are also introduced. These provide a convenient way to encapsulate SCL-annotated source code and corresponding tests for a set of interfaces. &lt;br /&gt;
&lt;br /&gt;
=== Uploading Results to STRIDE Portal ===&lt;br /&gt;
&lt;br /&gt;
Uploading test results from STRIDE Reporter to STRIDE Portal has been integrated into STRIDE Studio. Portal&#039;s server information can be configured from Studio&#039;s workspace properties while uploading results to Portal can be enabled or disabled via workspace context menu. If enabled, after running the workspace, a script folder or a script file, results in Report file will automatically be uploaded to the configured server. &lt;br /&gt;
&lt;br /&gt;
== Build Tools  ==&lt;br /&gt;
&lt;br /&gt;
A set of new command line [[Build Tools]] has been implemented: &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Stride compiler&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride database binder&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride instrumentation generator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
These utilities has been ported for Windows and Linux. Using them would allow seamless integration with a &amp;quot;make&amp;quot; build environment.&lt;br /&gt;
&lt;br /&gt;
== Target-Based Testing  ==&lt;br /&gt;
&lt;br /&gt;
Target-based (xUnit-style) testing has been simplified. The new set of SCL pragmas [[Test Units]] can now be included in a source file to tell the compiler and IM generator to automatically create test harnessing code.&lt;br /&gt;
&lt;br /&gt;
The automation components STRIDE.testclass, STRIDE.testunit and STRIDE.testfunction are removed.&lt;br /&gt;
&lt;br /&gt;
== Runtime/PAL  ==&lt;br /&gt;
&lt;br /&gt;
Based on customer requirements, in this release we have made significant changes to [[Target_Integration#The STRIDE Runtime|STRIDE Runtime]] and [[Target_Integration#The Platform Abstraction Layer (PAL)|PAL]]. &lt;br /&gt;
&lt;br /&gt;
=== Multi-Process Targets  ===&lt;br /&gt;
&lt;br /&gt;
New routines and support have been added to Runtime and PAL to support multi-process targets. Changes include: implementation of memory management and shared memory, protecting using named Mutex objects, synchronization of multiple processors and multiple threads, and usage of current process and thread IDs.&lt;br /&gt;
&lt;br /&gt;
=== Logging (Optional)  ===&lt;br /&gt;
&lt;br /&gt;
Runtime and PAL use a logging routine that can optionally be implemented in PAL. &lt;br /&gt;
&lt;br /&gt;
== Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
A new [[Windows_Off-Target_SDK|SDK]] for implemention of Off-Target applications on Windows has been packaged. It contains a library (s2srWin.dll/lib) in which the Windows PAL, Runtime, and GRS and a set of utility scripts are prebuilt. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;s2shostapphrt&#039;&#039;&#039; library, a prebuilt verion of the Host Runtime, has been removed. Building Windows applications using the Host Runtime is not supported anymore. The &#039;&#039;&#039;s2shostapptrt&#039;&#039;&#039; library, a prebuilt version of the Target Runtime, has also been removed. &lt;br /&gt;
&lt;br /&gt;
If an upgrade is performed it is strongly recommended that the above mentioned &#039;&#039;&#039;s2shostapp*&#039;&#039;&#039; libraries and their public API header (hostapp.h) be manually removed.&lt;br /&gt;
&lt;br /&gt;
= Support Wiki =&lt;br /&gt;
&lt;br /&gt;
This support wiki http://support.s2technologies.com is introduced with this version. You can navigate here from your web browser, or directly from STRIDE Studio; a link is provided in the Help menu. &lt;br /&gt;
&lt;br /&gt;
== STRIDE Samples  ==&lt;br /&gt;
&lt;br /&gt;
We have created a set of [[Samples_Overview|sample workspaces]] to aid in the evaluation of STRIDE, or as a tool for learning how to apply STRIDE to different testing scenarios. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to STRIDE, or want to learn more about using the product, this is a great place to start.&lt;br /&gt;
&lt;br /&gt;
= Acquiring the Software =&lt;br /&gt;
&lt;br /&gt;
You can download the latest release from the S2 Technologies ftp site: ftp://ftp.s2technologies.com &lt;br /&gt;
&lt;br /&gt;
To run STRIDE you will need a license. If you are not yet a customer of S2 and would like to obtain an evaluation license, email [mailto:sales@s2technologies.com S2 Sales] or call our offices at &#039;&#039;&#039;760-635-2345&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
= Installing the Software  =&lt;br /&gt;
&lt;br /&gt;
To install STRIDE for the first time, or as an upgrade to an existing installation, please refer to [[Host Installation]]. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note: if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you are new to STRIDE, we recommend that you investigate the [[Samples_Overview|New STRIDE Samples]].&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;ascript&#039;&#039;&#039; API has been changed to be more robust: &lt;br /&gt;
**Certain deprecated methods have been eliminated. &lt;br /&gt;
**Some existing API methods have been modifed. &lt;br /&gt;
**The event model has been improved to allow greater script control.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Some scripts must be modified from previous versions of STRIDE to work successfully with 3.0.01xx. The necessary changes are detailed in the [[#Migration_to_3.0.01xx|Migration to 3.0.01xx]] section below. &lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;Panel&#039;&#039;&#039; object is no longer available to scripts; its functionality has been moved under the &#039;&#039;&#039;studio&#039;&#039;&#039; object model. You can access this new functionality as &#039;&#039;&#039;studio.Connection&#039;&#039;&#039;, however if you were formerly scripting the &#039;&#039;&#039;Panel&#039;&#039;&#039; object, you may find it is no longer necessary since: &lt;br /&gt;
**You can now configure your connection properties from within STRIDE Studio (from the menu select &#039;&#039;Tools/Target Connectivity&#039;&#039;) &lt;br /&gt;
**You can now set a workspace folder property to autoconnect upon execution&lt;br /&gt;
&lt;br /&gt;
*Zero is now allowed as the maximum size under certain circumstances in &#039;&#039;&#039;scl_string&#039;&#039;&#039; and &#039;&#039;&#039;scl_ptr_sized&#039;&#039;&#039;. Details of these circumstances are contained in the &#039;&#039;&#039;[[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]]&#039;&#039;&#039; document.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compiler.MicrosoftCompatibility&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Compiler.Compatibility&#039;&#039;&#039;. Valid values are &amp;quot;Generic&amp;quot; (generic mode), &amp;quot;Microsoft&amp;quot; (Microsoft compatibility), or &amp;quot;Gnu&amp;quot; (Gnu or Gcc compatibility).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compile()&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Build()&#039;&#039;&#039;. Also new methods, &#039;&#039;&#039;studio.Workspace.CleanBuild()&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.ReloadDatabase()&#039;&#039;&#039;, have been added.&lt;br /&gt;
&lt;br /&gt;
*A new property, &#039;&#039;&#039;Output&#039;&#039;&#039;, has been added off the studio object. This property outputs text to the Studio message tab, similar to how &#039;&#039;&#039;ascript.MessageBox()&#039;&#039;&#039; works for certain scripts. This property contains one method, &#039;&#039;&#039;PrintMessage(String msg)&#039;&#039;&#039;. You can see an example of its use [[Debugging Helps|here]].&lt;br /&gt;
&lt;br /&gt;
*A new settings group has been introduced - &#039;&#039;&#039;studio.Workspace.Settings.Build&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Intercept.Path&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Intercept.SourcePath&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.Intercept.HeaderPath&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Fixes  ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This section describes defects which have been corrected in STRIDE and the customer tracking number associated with them, if any, in brackets [].&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*[1055] Not able to specifiy uppercase include directory &lt;br /&gt;
*[1163] Certain cases of array of pointers to discriminated unions that were not handled correctly in the ascript object have been fixed. &lt;br /&gt;
*[1357] The ascript &#039;&#039;&#039;Call()&#039;&#039;&#039; method, when used with RspTimeoutPeriod, only returns True if a timeout has occurred. &lt;br /&gt;
*[1469] Global casting using &#039;&#039;&#039;scl_cast&#039;&#039;&#039; no longer causes an intercept module compile error. &lt;br /&gt;
*[1539] &#039;&#039;&#039;ascript&#039;&#039;&#039; no longer returns &amp;quot;undefined&amp;quot; when calling &#039;&#039;&#039;function.ReturnValue&#039;&#039;&#039; when the captured function returns an unqualified function pointer. &lt;br /&gt;
*[1543] IM source file locations added to studio UI and automation &lt;br /&gt;
*[1564] The Studio Add files dialog has been increased from 2K bytes to 100K bytes, to allow for more files to be selected at a time. &lt;br /&gt;
*[1586] Support for Variadic Macros &lt;br /&gt;
*[1597] EDGFront crash for scl_ptr_opaque &lt;br /&gt;
*[1600] Pre-processor treats constant 1 always as 8-bit &lt;br /&gt;
*[1605] Generated Perl script generates error when run in debugger &lt;br /&gt;
*The following statement in Runtime files &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; has been changed:&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args = 0;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;is now&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt; with no initializer. This makes it portable and able to compile under Linux. &lt;br /&gt;
*A macro that determines the existence of &#039;&#039;&#039;vsnprintf()&#039;&#039;&#039; has been updated in &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; in order to make it able to compile with GCC and other non-Microsoft compilers.&amp;lt;br&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; If you are using test functions and C++ test classes, you must be using compilers that support &#039;&#039;&#039;vsnprintf&#039;&#039;&#039; (variable argument lists), which is a standard in C99 and supported in C90. &lt;br /&gt;
*When tracing on a STID it&#039;s possible to display trace information for messages that aren&#039;t captured (i.e. the message&#039;s SMID is not known to STRIDE). A problem could occur when STRIDE attempted to interpret the payload of these messages. This has now been fixed; hex values only are now shown in the trace view for in this situation. &lt;br /&gt;
*Autosense was not working properly in the editor for message payloads. This has been fixed.&lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
=== TestUnits Collection  ===&lt;br /&gt;
&lt;br /&gt;
A new TestUnits collection has been implemented. All test interfaces (specified with [[SCL_Pragmas#Test_Units | Test Unit pragmas]]) will be listed there.&lt;br /&gt;
&lt;br /&gt;
=== Functions Collection  ===&lt;br /&gt;
&lt;br /&gt;
Interfaces specified with either the [[scl_test_class]] or [[scl_test_flist]] pragmas are not listed in the Functions collection anymore. &lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
=== Memory Management  ===&lt;br /&gt;
&lt;br /&gt;
To support multi-process target, memory management support for dynamic, configurable, and internal static memory has been implemented in Runtime. Runtime makes PAL calls to acquire memory segments and manages the memory according to runtime configurations set by user. In case of multi-process target is enabled, these memory will be shared among multiple applications, and PAL should implement shared memory. &lt;br /&gt;
&lt;br /&gt;
=== Protection using Mutex  ===&lt;br /&gt;
&lt;br /&gt;
Runtime now uses named mutex objects to protect critical data from multiple and simultaneous accesses by multiple threads and, in case of multi-process target is enabled, by multiple applications. Runtime makes PAL calls to obtain and control mutex objects. &lt;br /&gt;
&lt;br /&gt;
=== New Routines  ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Memory Management&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In case of multi-process target, recommended approach is to use &amp;lt;u&amp;gt;Memory-Mapped Files&amp;lt;/u&amp;gt; to implement memory segments. &lt;br /&gt;
&lt;br /&gt;
 palMemSegmentOpen() - Open/create memory segment &lt;br /&gt;
 palMemSegmentClose() - Close memory segment&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Named Mutexes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palMutexInit() - Initialize a mutex object&lt;br /&gt;
 palMutexDestroy() - Destroy a mutex object&lt;br /&gt;
 palMutexLock() - Lock a mutex object&lt;br /&gt;
 palMutexUnlock() - Unlock a mutex object&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Task Synchronization&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palGetThreadId() - Get current thread Id&lt;br /&gt;
 palGetProcessId() - Get current process Id&lt;br /&gt;
 palSleep() - Suspend the execution of the current thread&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Logging&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is optional. &lt;br /&gt;
&lt;br /&gt;
 palLog() - Logging utility&lt;br /&gt;
&lt;br /&gt;
=== Updated Routines  ===&lt;br /&gt;
&lt;br /&gt;
*Function signatures and functionalities of palWait() &amp;amp;amp; palNotify() have been updated.&lt;br /&gt;
&lt;br /&gt;
 palWait() - now takes in an in/out pointer for events notification&lt;br /&gt;
 palNotify() - mail box Id has been updated to notify any event including mail box Ids.&lt;br /&gt;
&lt;br /&gt;
*Function signatures of palMemAlloc() &amp;amp;amp; palMemFree() have been updated.&lt;br /&gt;
&lt;br /&gt;
=== Removed Routines  ===&lt;br /&gt;
&lt;br /&gt;
 palProtect&lt;br /&gt;
 palUnprotect&lt;br /&gt;
 palCriticalErr&lt;br /&gt;
&lt;br /&gt;
=== Removed Modules  ===&lt;br /&gt;
&lt;br /&gt;
 S2Mem - The memory module provided as part of PAL has been removed. If a native &lt;br /&gt;
         operating system does not support dynamic memory, the Runtime&#039;s memory &lt;br /&gt;
         management module &#039;&#039;srMem&#039;&#039; can be used instead of &#039;&#039;S2Mem&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
&lt;br /&gt;
*STRIDE Host Release &#039;&#039;&#039;3.0.01xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;. &lt;br /&gt;
*In order to eliminate redundancy and promote an object-oriented design, &amp;quot;Member Methods&amp;quot; have been removed from srTest; only &amp;quot;Member Objects&amp;quot; exist now in srTest. In addition, accessing the functionality of Member Objects in this way is similar to accessing scripting objects through the STRIDE Reporter object model. For a detailed explanation, refer to [[Test_Units#C.2B.2B_Test_Classes|this article]] on the STRIDE Support Wiki. &lt;br /&gt;
*A new routine, &#039;&#039;&#039;srInit()&#039;&#039;&#039;, replaces deprecated &#039;&#039;&#039;srInitialize()&#039;&#039;&#039;. Now the target will not be able to set an auto-connect with timeout. &lt;br /&gt;
*The &#039;&#039;&#039;scl_tp&#039;&#039;&#039; and &#039;&#039;&#039;scl_tp_format&#039;&#039;&#039; pragmas have been deprecated. The new pragmas are &#039;&#039;&#039;scl_tracepoint&#039;&#039;&#039; and &#039;&#039;&#039;scl_tracepoint_format&#039;&#039;&#039;. &lt;br /&gt;
*The default runtime configuration in srcfg.h now has fragmentation turned on. The srCFG_MAX_TRANSPORT_UNIT is set to 2048. &lt;br /&gt;
*Fixed warnings for parameter name differences in function declarations and definitions for srSubscribe(), srTracePoint(), and srQuerySMID(). &lt;br /&gt;
*Removed unnecessary/extra response to srCONNECT_CLOSE_T_SMID message. &lt;br /&gt;
*The Runtime now checks for the connection before responding with a &amp;quot;Pong&amp;quot; upon receiving a &amp;quot;Ping.&amp;quot; &lt;br /&gt;
*Introduced 40 additional system trace points to better describe internal errors. &lt;br /&gt;
*Reporting of the error srERR_SUB_NONE has been suppressed so that it no longer generates a target trace error. &lt;br /&gt;
*Trace views now always display srTraceStr() with reserved STID (srSTID_RESERVED) regardless of trace filter settings. &lt;br /&gt;
*srPtrSetupChild() now accepts NULL for handle (out pointer - pwHandle). &lt;br /&gt;
*Added a new Runtime Test Services (RTS) API &#039;&#039;&#039;srTestCaseSetStatusEx()&#039;&#039;&#039;, which enables the providing of the actual return value of a numeric test method in the case of failure. &lt;br /&gt;
*Added two new public APIs - &amp;quot;Printing&amp;quot; APIs to display messages on Trace Views without having to specify a STID or a trace level and to set any trace filters on Trace Views. These routines support formatted strings with variable arguments. The &#039;&#039;&#039;srPrintInfo()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and Level=3. The &#039;&#039;&#039;srPrintError()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and the Level=1. &#039;&#039;&#039;Warning:&#039;&#039;&#039; These new APIs use vsnprintf() routine to process variable arguments. The vsnprintf() became a standard in C99 and is supported in C90. &lt;br /&gt;
*To support multi-process target, significant changes have been made to runtime. &lt;br /&gt;
*A new public routine, srUninit(), has been added to sr.h &amp;amp;amp; srapi.c. &lt;br /&gt;
* A new public routine for Runtime Thread exit point, srThreadUninit(), has been added to sr.h &amp;amp;amp; srthread.c. &lt;br /&gt;
*A new module, srMem, for Memory Management has been added. Its new routines, _srMem_Allocate() &amp;amp;amp; _srMem_Free(), will be used in PAL&#039;s palMemAlloc() &amp;amp;amp; palMemFree() in case of multi-process target is enabled. &lt;br /&gt;
*Calls to palProtect() &amp;amp;amp; palUnprotect() have been replaced by new routines _srProtect() &amp;amp;amp; _srUnprotect(), in which the implementation uses its own mutex object that calls PAL&#039;s mutex routines. &lt;br /&gt;
*In target Test Classes and Test Functions, added capability to specify the comment label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
* Fixed a potential data abort issue when executing delegate code in the IM prior to Runtime being initialized.&lt;br /&gt;
* Runtime Test Services APIs are now thread safe. &lt;br /&gt;
* Fixed cancelation of remote boadcast subcribtion goes in an infinite loop.&lt;br /&gt;
* Fixed Runtime resource abuse when sending lots of broadcast messages. &lt;br /&gt;
* Added partial check for message payload corectness.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapi.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srconn.h&lt;br /&gt;
 srerr.c&lt;br /&gt;
 srib.c&lt;br /&gt;
 srib.h&lt;br /&gt;
 sribctrl.c&lt;br /&gt;
 sribtr.c&lt;br /&gt;
 sribtr.h&lt;br /&gt;
 srmsgmar.c&lt;br /&gt;
 srmsgptr.c&lt;br /&gt;
 srmsgptr.h&lt;br /&gt;
 srmsgque.c&lt;br /&gt;
 srmsgque.h&lt;br /&gt;
 srmsgrt.c&lt;br /&gt;
 srmsgrt.h&lt;br /&gt;
 srmsgsub.c&lt;br /&gt;
 srmsgsub.h&lt;br /&gt;
 srstid.c&lt;br /&gt;
 srstid.h&lt;br /&gt;
 srsuid.c&lt;br /&gt;
 srsuid.h&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
 srtestutil.c&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srthread.c&lt;br /&gt;
 srthread.h&lt;br /&gt;
 srtime.c&lt;br /&gt;
 srtime.h&lt;br /&gt;
 srtp.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been added:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srmem.c&lt;br /&gt;
 srmem.h&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.01xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
Any use of test classes through the Functions collection, like: &lt;br /&gt;
&lt;br /&gt;
$main::ascript-&amp;amp;gt;Functions-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;User-&amp;amp;gt;Call(); &lt;br /&gt;
&lt;br /&gt;
should be converted to use the new TestUnits collection: &lt;br /&gt;
&lt;br /&gt;
$main::ascript-&amp;amp;gt;TestUnits-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;Run(); &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== API Changes  ===&lt;br /&gt;
&lt;br /&gt;
*The Support Wiki pages now contain reference help for AutoScript. The content has been updated to reflect the API changes, for details see the &#039;&#039;AutoScript API Reference&#039;&#039;. &lt;br /&gt;
*All synchronous method calls now throw exceptions in order to indicate error conditions rather than have error conditions encoded in return values. &lt;br /&gt;
*Asychronous method calls never throw exceptions to indicate error conditions. Instead, error conditions are delivered as a new Error object that is returned to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039;. (Asynchronous methods are &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;) &lt;br /&gt;
*If &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; times out, an Error object is returned. Previously NULL was returned in this case. &lt;br /&gt;
*All objects returned by &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; have &#039;&#039;&#039;Type&#039;&#039;&#039; and &#039;&#039;&#039;Name&#039;&#039;&#039; properties. When the &#039;&#039;&#039;Type&#039;&#039;&#039; is “Error”, the Error object has additional properties that contain further details about the error. &lt;br /&gt;
*All existing script syntax for designation of message payloads has been deprecated. A new syntax that allows for greater expression has been adopted. Details can be found [[Updated Message Payload Syntax|here]]. There are no syntax changes to function payloads. &lt;br /&gt;
*The signature for &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; has been changed. Successful calls to &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; now fully initialize the object.&lt;br /&gt;
&lt;br /&gt;
=== End-Of-Lifed Methods and Properties  ===&lt;br /&gt;
&lt;br /&gt;
The following have been End-Of-Lifed (EOL&#039;d). A call to any of these methods or an access to any of these properties will now result in a not-implemented exception in the script making the call or access. &lt;br /&gt;
&lt;br /&gt;
*ascript.Quit() &lt;br /&gt;
*ascript.Interfaces &lt;br /&gt;
*ascript.NamedEvents &lt;br /&gt;
*ascript.WaitForEventWithTimeout &lt;br /&gt;
*ascript.RspTimeoutNotifyEnabled &lt;br /&gt;
*ascript.CreateTimer() &lt;br /&gt;
*ascript.DestroyTimer() &lt;br /&gt;
*ascript.WaitTimeoutNotifyEnabled &lt;br /&gt;
*ascript.Compare_As_C_Values() &lt;br /&gt;
*ascript.AsyncErrorNotifyEnabled &lt;br /&gt;
*ascript.Function.Item().User/Owner.SMID&lt;br /&gt;
&lt;br /&gt;
=== Recommended Steps for Migration From a Previous Version  ===&lt;br /&gt;
&lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; in all scripts. Previous logic to test for null indicating timeouts must be modified. &#039;&#039;&#039;WaitForEvent()&#039;&#039;&#039; now always returns an object, in the case of a timeout (or other error) an Error object is returned. &lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.Quit&#039;&#039;&#039; in all scripts. Modify the logic as necessary to exit the script by other means in place of the original &#039;&#039;&#039;Quit()&#039;&#039;&#039; call. &lt;br /&gt;
*Search for all asynchronous method calls (Asynchronous calls are limited to &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;). Modify the logic as necessary to call &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; if errors (including timeout error) should be detected. &lt;br /&gt;
*If you have scripts that explicitly instantiate an &#039;&#039;&#039;ascript&#039;&#039;&#039; object (i.e. they create an object using the &#039;&#039;&#039;&amp;quot;STRIDE.ascript&amp;quot;&#039;&#039;&#039; PROGID), search for all occurrences and modify the subsequent call to &#039;&#039;&#039;ascript.Initialize()&#039;&#039;&#039; to pass the new parameter set. &lt;br /&gt;
*Search for all EOL&#039;d methods and properties. Each can be replaced by setting the appropriate timeout property and handling the timeout error object delivered by WaitForEvent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;Section1&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%; border-collapse: collapse;&amp;quot; class=&amp;quot;MsoTableGrid&amp;quot;&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1pt solid windowtext; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;EOL’d&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Method or Property&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&#039;&#039;&#039;Recommended Replacement&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Quit&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Refactor&amp;lt;/span&amp;gt; script logic to exit the script by other means. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Interfaces&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Functions&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Messages&amp;lt;/span&amp;gt; as appropriate. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.NamedEvents&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitForEventWithTimeout&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() after setting desired timeout using &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitTimeoutPeriod&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.RspTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.CreateTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Add&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.DestroyTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Remove&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Compare_As_C_Values&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.AsyncErrorNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Error notification from asynchronous calls is performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Function.Item&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SMID&amp;lt;/span&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Function.Item&amp;lt;/span&amp;gt;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SUID&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
Please refer to &#039;&#039;&#039;&#039;&#039;Platform Abstraction Layer (PAL) Specification&#039;&#039;&#039;&#039;&#039; for detailed information on new APIs. You may also refer to Linux implementation of PAL, which has been updated with new routines. &lt;br /&gt;
&lt;br /&gt;
*Implement new shared memory routines, palMemSegmentOpen() &amp;amp;amp; palMemSegmentClose(). In case of multi-process target, these routines should implement shared memory using memory-mapped files.&lt;br /&gt;
&lt;br /&gt;
*Runtime now can manage dynamic, configurable, and internal static memory. In case of multi-process target, update palMemAlloc() to simply call _srMem_Allocate() and palMemFree() to simply call _srMem_Free(). In case of single-process target, you can simply allocate dynamic memory according to your Operating System. If you are upgrading, you can simply leave the current implementation as it is.&lt;br /&gt;
&lt;br /&gt;
*Implement new mutex routines, palMutexInit(), palMutexDestroy(), palMutexLock() &amp;amp;amp; palMutexUnlock, to handle any named mutex objects. It is recommended to implement a separate code for shared memory case if it is necessary.&lt;br /&gt;
&lt;br /&gt;
*Remove old routines palProtect(), palUnprotect() and palCriticalErr().&lt;br /&gt;
&lt;br /&gt;
*Implement new routines palGetThreadId() and palGetProcessId().&lt;br /&gt;
&lt;br /&gt;
*Implement new routine palSleep().&lt;br /&gt;
&lt;br /&gt;
*Update synchronization routines, palCreateNID(), palDeleteNID(), palWait() &amp;amp;amp; palNotify(), to support event notifications and in case of multi-process target is enabled, sharing of the synchronization objects among multiple processors.&lt;br /&gt;
&lt;br /&gt;
*If your PAL uses &#039;&#039;S2Mem&#039;&#039; routines for dynamic memory, you should use new Runtime module &#039;&#039;srMem&#039;&#039;. Update palMemAlloc() to call _srMem_Allocate() and palMemFree() to call _srMem_Free().&lt;br /&gt;
&lt;br /&gt;
*Optionally, implement new routine palLog() as a logging utility for PAL and Runtime.&lt;br /&gt;
&lt;br /&gt;
== Runtime  ==&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new memory management (srCFG_MEMORY_MANAGEMENT) and multi-process target (srCFG_MULTI_PROC_TARGET) settings. By default, memory management and multi-process target are disabled. If you enable multi-process target you also need to enable memory management and configure the sizes and the maximum number of memory blocks. New Runtime module &#039;&#039;srMem&#039;&#039; uses these configurations to allocate and manage memory segments.&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new target connection timeout setting (srCFG_CONNECTION_TIMEOUT).&lt;br /&gt;
&lt;br /&gt;
*If target Test Classes and Test Functions are used, change the signature to include test label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
&lt;br /&gt;
== Windows Applications using Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
*The new &#039;&#039;&#039;s2srwin.lib&#039;&#039;&#039; has public API, published in a header srwin.h, containing the following set of routines:&lt;br /&gt;
&lt;br /&gt;
 srWin_SetMaster() - Sets the application as the master and initializes the Stride Runtime thread. In a multi-process environment only one application should make this call.&lt;br /&gt;
 srWin_AddThread() - Adds additional message processing threads to the application.&lt;br /&gt;
 srWin_Run() - Starts the processing and will not return until it has been signaled via keyboard key or CTRL-C.&lt;br /&gt;
 srWin_SetPortTCP() - Overrides the TCP port number (default: 8000) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
 srWin_SetPortSerial() - Overrides the COM port number (default: 1) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
&lt;br /&gt;
*Existing Host Apps developed against the old hostapphrt and hostapptrt libraries should be updated to as follows: &lt;br /&gt;
**replace the include of hostapp.h with include of srwin.h &lt;br /&gt;
**replace all calls to HostAppXXX() with srWin_XXX() &lt;br /&gt;
**call srWin_SetMaster() to start the runtime thread, srThread, before calling srWin_Run(). Within a multi-process target, only one process (the master) calls this routine.&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;a&amp;quot; ==&lt;br /&gt;
* Linux version of the STRIDE [[Build Tools]] is officially introduced.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;b&amp;quot; ==&lt;br /&gt;
* Relaxed [[scl_cast]]() pragma to allow cast from any integral ptr to union of ptrs&lt;br /&gt;
* Fixed compile warnings in Linux PAL.&lt;br /&gt;
* Fixed issue in instrumentation of [[Test Units]].&lt;br /&gt;
* Fixed issue with UNC paths.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0102 ==&lt;br /&gt;
* Implemented new licensing scheme. Existing licenses will not work anymore and need to be reissued. Old and new licenses could co-exist at the same location.&lt;br /&gt;
* The syntax of [[scl_ptr]] and [[scl_ptr_sized]] pragmas has changed. Now it is required to quote the direction and usage attributes. See this [[Handling_of_pointer_attribute_tokens|page]] for details.&lt;br /&gt;
* [[Test_Units#Runtime_Test_Services|Runtime Test Services]] now support adding annotations per test suite.&lt;br /&gt;
* A complete set of [[Samples]] has been implemented.&lt;br /&gt;
* Fixed several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Fixed several minor issues in [[AutoScript]]. &lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0102&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039; and &#039;&#039;&#039;3.01&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8110</id>
		<title>STRIDE 3.0.01xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8110"/>
		<updated>2008-10-15T23:39:17Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* Removed Modules */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Release Notes&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
This page documents the changes in STRIDE version 3.0.01xx (code name &#039;&#039;StoneSteps&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note that if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= What&#039;s New  =&lt;br /&gt;
&lt;br /&gt;
Based on customer feedback, in this release we have made significant performance improvements as well as many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Performance Improvements ==&lt;br /&gt;
&lt;br /&gt;
Specific improvements have been made in the following areas: &lt;br /&gt;
&lt;br /&gt;
*Database loading time has been improved &lt;br /&gt;
*Compile times are now shorter &lt;br /&gt;
*Scripting operations involving function and message payloads now perform better, especially when arrays are involved &lt;br /&gt;
*Runtime performance has been improved by optimizing payload serialization and deserialization operations&lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
&lt;br /&gt;
=== SCL Wizard ===&lt;br /&gt;
&lt;br /&gt;
The SCL Wizard functionality in [[STRIDE Studio]] has been extended so that you can now use the tool to qualify message payloads as well as function payloads. &lt;br /&gt;
&lt;br /&gt;
In addition, the following types of qualifications can now be made: &lt;br /&gt;
&lt;br /&gt;
*For payloads that include function pointers, the SCL Wizard now supports qualifying the pointers as such and identifying candidate function values &lt;br /&gt;
*Type casts can now be specified on payload members&lt;br /&gt;
&lt;br /&gt;
=== Connection Management ===&lt;br /&gt;
&lt;br /&gt;
Connection management has been greatly simplified; software managing connection to the target system has been integrated into [[STRIDE Studio]] so that connections can be managed directly from there. (It is still possible to access connection management functionality without using Studio.) &lt;br /&gt;
&lt;br /&gt;
The Panel program is no longer used, and there is no longer a requirement to load the database to communicate with a remote target. &lt;br /&gt;
&lt;br /&gt;
==== Transport Properties ====&lt;br /&gt;
&lt;br /&gt;
All transport properties can now be accessed via scripts. A new transport scripting model makes this possible.&lt;br /&gt;
&lt;br /&gt;
=== STRIDE Studio Test Runner Improvements ===&lt;br /&gt;
&lt;br /&gt;
The test runner in [[STRIDE Studio]] has incorporated several functional and usability improvements. &lt;br /&gt;
&lt;br /&gt;
*Each runnable script and folder (Suite) in a workspace now has additional properties that allow you to optionally specify a handler script that will be executed in the case of an unhandled error (property OnError) or a timeout (property OnTimeout). A timeout value can be set for each folder.&lt;br /&gt;
&lt;br /&gt;
*Each runnable folder (Suite) in a workspace now has a property (OnRunConnect) that can instruct STRIDE Studio to automatically connect to a target system before the folder is executed.&lt;br /&gt;
&lt;br /&gt;
*The workspace now has a dynamic property (ExecutionState) that allows you to alter the order of script execution at runtime.&lt;br /&gt;
&lt;br /&gt;
=== New Frameworks Feature ===&lt;br /&gt;
&lt;br /&gt;
This version introduces [[Using Frameworks|Target Frameworks]], which provide customizable templates for workspace creation. The use of frameworks simplifies the use of STRIDE and ensures consistency across a development team. &lt;br /&gt;
&lt;br /&gt;
Several [[Provided Frameworks|reference frameworks]] are included in this release, supporting the following target environments: &lt;br /&gt;
&lt;br /&gt;
*[[Provided Frameworks#Windows|Windows]] &lt;br /&gt;
*[[Provided Frameworks#Linux|Linux]] &lt;br /&gt;
*[[Provided Frameworks#WinMobile|WinMobile]] &lt;br /&gt;
*[[Provided Frameworks#Generic|Generic]]&lt;br /&gt;
&lt;br /&gt;
[[Using Packages|Packages]] are also introduced. These provide a convenient way to encapsulate SCL-annotated source code and corresponding tests for a set of interfaces. &lt;br /&gt;
&lt;br /&gt;
=== Uploading Results to STRIDE Portal ===&lt;br /&gt;
&lt;br /&gt;
Uploading test results from STRIDE Reporter to STRIDE Portal has been integrated into STRIDE Studio. Portal&#039;s server information can be configured from Studio&#039;s workspace properties while uploading results to Portal can be enabled or disabled via workspace context menu. If enabled, after running the workspace, a script folder or a script file, results in Report file will automatically be uploaded to the configured server. &lt;br /&gt;
&lt;br /&gt;
== Build Tools  ==&lt;br /&gt;
&lt;br /&gt;
A set of new command line [[Build Tools]] has been implemented: &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Stride compiler&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride database binder&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride instrumentation generator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
These utilities has been ported for Windows and Linux. Using them would allow seamless integration with a &amp;quot;make&amp;quot; build environment.&lt;br /&gt;
&lt;br /&gt;
== Target-Based Testing  ==&lt;br /&gt;
&lt;br /&gt;
Target-based (xUnit-style) testing has been simplified. The new set of SCL pragmas [[Test Units]] can now be included in a source file to tell the compiler and IM generator to automatically create test harnessing code.&lt;br /&gt;
&lt;br /&gt;
The automation components STRIDE.testclass, STRIDE.testunit and STRIDE.testfunction are removed.&lt;br /&gt;
&lt;br /&gt;
== Runtime/PAL  ==&lt;br /&gt;
&lt;br /&gt;
Based on customer requirements, in this release we have made significant changes to [[Target_Integration#The STRIDE Runtime|STRIDE Runtime]] and [[Target_Integration#The Platform Abstraction Layer (PAL)|PAL]]. &lt;br /&gt;
&lt;br /&gt;
=== Multi-Process Targets  ===&lt;br /&gt;
&lt;br /&gt;
New routines and support have been added to Runtime and PAL to support multi-process targets. Changes include: implementation of memory management and shared memory, protecting using named Mutex objects, synchronization of multiple processors and multiple threads, and usage of current process and thread IDs.&lt;br /&gt;
&lt;br /&gt;
=== Logging (Optional)  ===&lt;br /&gt;
&lt;br /&gt;
Runtime and PAL use a logging routine that can optionally be implemented in PAL. &lt;br /&gt;
&lt;br /&gt;
== Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
A new [[Windows_Off-Target_SDK|SDK]] for implemention of Off-Target applications on Windows has been packaged. It contains a library (s2srWin.dll/lib) in which the Windows PAL, Runtime, and GRS and a set of utility scripts are prebuilt. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;s2shostapphrt&#039;&#039;&#039; library, a prebuilt verion of the Host Runtime, has been removed. Building Windows applications using the Host Runtime is not supported anymore. The &#039;&#039;&#039;s2shostapptrt&#039;&#039;&#039; library, a prebuilt version of the Target Runtime, has also been removed. &lt;br /&gt;
&lt;br /&gt;
If an upgrade is performed it is strongly recommended that the above mentioned &#039;&#039;&#039;s2shostapp*&#039;&#039;&#039; libraries and their public API header (hostapp.h) be manually removed.&lt;br /&gt;
&lt;br /&gt;
= Support Wiki =&lt;br /&gt;
&lt;br /&gt;
This support wiki http://support.s2technologies.com is introduced with this version. You can navigate here from your web browser, or directly from STRIDE Studio; a link is provided in the Help menu. &lt;br /&gt;
&lt;br /&gt;
== STRIDE Samples  ==&lt;br /&gt;
&lt;br /&gt;
We have created a set of [[Samples_Overview|sample workspaces]] to aid in the evaluation of STRIDE, or as a tool for learning how to apply STRIDE to different testing scenarios. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to STRIDE, or want to learn more about using the product, this is a great place to start.&lt;br /&gt;
&lt;br /&gt;
= Acquiring the Software =&lt;br /&gt;
&lt;br /&gt;
You can download the latest release from the S2 Technologies ftp site: ftp://ftp.s2technologies.com &lt;br /&gt;
&lt;br /&gt;
To run STRIDE you will need a license. If you are not yet a customer of S2 and would like to obtain an evaluation license, email [mailto:sales@s2technologies.com S2 Sales] or call our offices at &#039;&#039;&#039;760-635-2345&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
= Installing the Software  =&lt;br /&gt;
&lt;br /&gt;
To install STRIDE for the first time, or as an upgrade to an existing installation, please refer to [[Host Installation]]. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note: if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you are new to STRIDE, we recommend that you investigate the [[Samples_Overview|New STRIDE Samples]].&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;ascript&#039;&#039;&#039; API has been changed to be more robust: &lt;br /&gt;
**Certain deprecated methods have been eliminated. &lt;br /&gt;
**Some existing API methods have been modifed. &lt;br /&gt;
**The event model has been improved to allow greater script control.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Some scripts must be modified from previous versions of STRIDE to work successfully with 3.0.01xx. The necessary changes are detailed in the [[#Migration_to_3.0.01xx|Migration to 3.0.01xx]] section below. &lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;Panel&#039;&#039;&#039; object is no longer available to scripts; its functionality has been moved under the &#039;&#039;&#039;studio&#039;&#039;&#039; object model. You can access this new functionality as &#039;&#039;&#039;studio.Connection&#039;&#039;&#039;, however if you were formerly scripting the &#039;&#039;&#039;Panel&#039;&#039;&#039; object, you may find it is no longer necessary since: &lt;br /&gt;
**You can now configure your connection properties from within STRIDE Studio (from the menu select &#039;&#039;Tools/Target Connectivity&#039;&#039;) &lt;br /&gt;
**You can now set a workspace folder property to autoconnect upon execution&lt;br /&gt;
&lt;br /&gt;
*Zero is now allowed as the maximum size under certain circumstances in &#039;&#039;&#039;scl_string&#039;&#039;&#039; and &#039;&#039;&#039;scl_ptr_sized&#039;&#039;&#039;. Details of these circumstances are contained in the &#039;&#039;&#039;[[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]]&#039;&#039;&#039; document.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compiler.MicrosoftCompatibility&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Compiler.Compatibility&#039;&#039;&#039;. Valid values are &amp;quot;Generic&amp;quot; (generic mode), &amp;quot;Microsoft&amp;quot; (Microsoft compatibility), or &amp;quot;Gnu&amp;quot; (Gnu or Gcc compatibility).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compile()&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Build()&#039;&#039;&#039;. Also new methods, &#039;&#039;&#039;studio.Workspace.CleanBuild()&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.ReloadDatabase()&#039;&#039;&#039;, have been added.&lt;br /&gt;
&lt;br /&gt;
*A new property, &#039;&#039;&#039;Output&#039;&#039;&#039;, has been added off the studio object. This property outputs text to the Studio message tab, similar to how &#039;&#039;&#039;ascript.MessageBox()&#039;&#039;&#039; works for certain scripts. This property contains one method, &#039;&#039;&#039;PrintMessage(String msg)&#039;&#039;&#039;. You can see an example of its use [[Debugging Helps|here]].&lt;br /&gt;
&lt;br /&gt;
*A new settings group has been introduced - &#039;&#039;&#039;studio.Workspace.Settings.Build&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Intercept.Path&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Intercept.SourcePath&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.Intercept.HeaderPath&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Fixes  ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This section describes defects which have been corrected in STRIDE and the customer tracking number associated with them, if any, in brackets [].&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*[1055] Not able to specifiy uppercase include directory &lt;br /&gt;
*[1163] Certain cases of array of pointers to discriminated unions that were not handled correctly in the ascript object have been fixed. &lt;br /&gt;
*[1357] The ascript &#039;&#039;&#039;Call()&#039;&#039;&#039; method, when used with RspTimeoutPeriod, only returns True if a timeout has occurred. &lt;br /&gt;
*[1469] Global casting using &#039;&#039;&#039;scl_cast&#039;&#039;&#039; no longer causes an intercept module compile error. &lt;br /&gt;
*[1539] &#039;&#039;&#039;ascript&#039;&#039;&#039; no longer returns &amp;quot;undefined&amp;quot; when calling &#039;&#039;&#039;function.ReturnValue&#039;&#039;&#039; when the captured function returns an unqualified function pointer. &lt;br /&gt;
*[1543] IM source file locations added to studio UI and automation &lt;br /&gt;
*[1564] The Studio Add files dialog has been increased from 2K bytes to 100K bytes, to allow for more files to be selected at a time. &lt;br /&gt;
*[1586] Support for Variadic Macros &lt;br /&gt;
*[1597] EDGFront crash for scl_ptr_opaque &lt;br /&gt;
*[1600] Pre-processor treats constant 1 always as 8-bit &lt;br /&gt;
*[1605] Generated Perl script generates error when run in debugger &lt;br /&gt;
*The following statement in Runtime files &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; has been changed:&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args = 0;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;is now&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt; with no initializer. This makes it portable and able to compile under Linux. &lt;br /&gt;
*A macro that determines the existence of &#039;&#039;&#039;vsnprintf()&#039;&#039;&#039; has been updated in &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; in order to make it able to compile with GCC and other non-Microsoft compilers.&amp;lt;br&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; If you are using test functions and C++ test classes, you must be using compilers that support &#039;&#039;&#039;vsnprintf&#039;&#039;&#039; (variable argument lists), which is a standard in C99 and supported in C90. &lt;br /&gt;
*When tracing on a STID it&#039;s possible to display trace information for messages that aren&#039;t captured (i.e. the message&#039;s SMID is not known to STRIDE). A problem could occur when STRIDE attempted to interpret the payload of these messages. This has now been fixed; hex values only are now shown in the trace view for in this situation. &lt;br /&gt;
*Autosense was not working properly in the editor for message payloads. This has been fixed.&lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
=== TestUnits Collection  ===&lt;br /&gt;
&lt;br /&gt;
A new TestUnits collection has been implemented. All test interfaces (specified with [[SCL_Pragmas#Test_Units | Test Unit pragmas]]) will be listed there.&lt;br /&gt;
&lt;br /&gt;
=== Functions Collection  ===&lt;br /&gt;
&lt;br /&gt;
Interfaces specified with either the [[scl_test_class]] or [[scl_test_flist]] pragmas are not listed in the Functions collection anymore. &lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
=== Memory Management  ===&lt;br /&gt;
&lt;br /&gt;
To support multi-process target, memory management support for dynamic, configurable, and internal static memory has been implemented in Runtime. Runtime makes PAL calls to acquire memory segments and manages the memory according to runtime configurations set by user. In case of multi-process target is enabled, these memory will be shared among multiple applications, and PAL should implement shared memory. &lt;br /&gt;
&lt;br /&gt;
=== Protection using Mutex  ===&lt;br /&gt;
&lt;br /&gt;
Runtime now uses named mutex objects to protect critical data from multiple and simultaneous accesses by multiple threads and, in case of multi-process target is enabled, by multiple applications. Runtime makes PAL calls to obtain and control mutex objects. &lt;br /&gt;
&lt;br /&gt;
=== New Routines  ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Memory Management&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In case of multi-process target, recommended approach is to use &amp;lt;u&amp;gt;Memory-Mapped Files&amp;lt;/u&amp;gt; to implement memory segments. &lt;br /&gt;
&lt;br /&gt;
 palMemSegmentOpen() - Open/create memory segment &lt;br /&gt;
 palMemSegmentClose() - Close memory segment&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Named Mutexes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palMutexInit() - Initialize a mutex object&lt;br /&gt;
 palMutexDestroy() - Destroy a mutex object&lt;br /&gt;
 palMutexLock() - Lock a mutex object&lt;br /&gt;
 palMutexUnlock() - Unlock a mutex object&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Task Synchronization&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palGetThreadId() - Get current thread Id&lt;br /&gt;
 palGetProcessId() - Get current process Id&lt;br /&gt;
 palSleep() - Suspend the execution of the current thread&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Logging&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is optional. &lt;br /&gt;
&lt;br /&gt;
 palLog() - Logging utility&lt;br /&gt;
&lt;br /&gt;
=== Updated Routines  ===&lt;br /&gt;
&lt;br /&gt;
*Function signatures and functionalities of palWait() &amp;amp;amp; palNotify() have been updated.&lt;br /&gt;
&lt;br /&gt;
 palWait() - now takes in an in/out pointer for events notification&lt;br /&gt;
 palNotify() - mail box Id has been updated to notify any event including mail box Ids.&lt;br /&gt;
&lt;br /&gt;
*Function signatures of palMemAlloc() &amp;amp;amp; palMemFree() have been updated.&lt;br /&gt;
&lt;br /&gt;
=== Removed Routines  ===&lt;br /&gt;
&lt;br /&gt;
 palProtect&lt;br /&gt;
 palUnprotect&lt;br /&gt;
 palCriticalErr&lt;br /&gt;
&lt;br /&gt;
=== Removed Modules  ===&lt;br /&gt;
&lt;br /&gt;
 S2Mem - The memory module provided as part of PAL has been removed. &lt;br /&gt;
         If native OS does not support dynamic memory, &lt;br /&gt;
         Runtime&#039;s memory management module &#039;&#039;srMem&#039;&#039; can be used instead of &#039;&#039;S2Mem&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
&lt;br /&gt;
*STRIDE Host Release &#039;&#039;&#039;3.0.01xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;. &lt;br /&gt;
*In order to eliminate redundancy and promote an object-oriented design, &amp;quot;Member Methods&amp;quot; have been removed from srTest; only &amp;quot;Member Objects&amp;quot; exist now in srTest. In addition, accessing the functionality of Member Objects in this way is similar to accessing scripting objects through the STRIDE Reporter object model. For a detailed explanation, refer to [[Test_Units#C.2B.2B_Test_Classes|this article]] on the STRIDE Support Wiki. &lt;br /&gt;
*A new routine, &#039;&#039;&#039;srInit()&#039;&#039;&#039;, replaces deprecated &#039;&#039;&#039;srInitialize()&#039;&#039;&#039;. Now the target will not be able to set an auto-connect with timeout. &lt;br /&gt;
*The &#039;&#039;&#039;scl_tp&#039;&#039;&#039; and &#039;&#039;&#039;scl_tp_format&#039;&#039;&#039; pragmas have been deprecated. The new pragmas are &#039;&#039;&#039;scl_tracepoint&#039;&#039;&#039; and &#039;&#039;&#039;scl_tracepoint_format&#039;&#039;&#039;. &lt;br /&gt;
*The default runtime configuration in srcfg.h now has fragmentation turned on. The srCFG_MAX_TRANSPORT_UNIT is set to 2048. &lt;br /&gt;
*Fixed warnings for parameter name differences in function declarations and definitions for srSubscribe(), srTracePoint(), and srQuerySMID(). &lt;br /&gt;
*Removed unnecessary/extra response to srCONNECT_CLOSE_T_SMID message. &lt;br /&gt;
*The Runtime now checks for the connection before responding with a &amp;quot;Pong&amp;quot; upon receiving a &amp;quot;Ping.&amp;quot; &lt;br /&gt;
*Introduced 40 additional system trace points to better describe internal errors. &lt;br /&gt;
*Reporting of the error srERR_SUB_NONE has been suppressed so that it no longer generates a target trace error. &lt;br /&gt;
*Trace views now always display srTraceStr() with reserved STID (srSTID_RESERVED) regardless of trace filter settings. &lt;br /&gt;
*srPtrSetupChild() now accepts NULL for handle (out pointer - pwHandle). &lt;br /&gt;
*Added a new Runtime Test Services (RTS) API &#039;&#039;&#039;srTestCaseSetStatusEx()&#039;&#039;&#039;, which enables the providing of the actual return value of a numeric test method in the case of failure. &lt;br /&gt;
*Added two new public APIs - &amp;quot;Printing&amp;quot; APIs to display messages on Trace Views without having to specify a STID or a trace level and to set any trace filters on Trace Views. These routines support formatted strings with variable arguments. The &#039;&#039;&#039;srPrintInfo()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and Level=3. The &#039;&#039;&#039;srPrintError()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and the Level=1. &#039;&#039;&#039;Warning:&#039;&#039;&#039; These new APIs use vsnprintf() routine to process variable arguments. The vsnprintf() became a standard in C99 and is supported in C90. &lt;br /&gt;
*To support multi-process target, significant changes have been made to runtime. &lt;br /&gt;
*A new public routine, srUninit(), has been added to sr.h &amp;amp;amp; srapi.c. &lt;br /&gt;
* A new public routine for Runtime Thread exit point, srThreadUninit(), has been added to sr.h &amp;amp;amp; srthread.c. &lt;br /&gt;
*A new module, srMem, for Memory Management has been added. Its new routines, _srMem_Allocate() &amp;amp;amp; _srMem_Free(), will be used in PAL&#039;s palMemAlloc() &amp;amp;amp; palMemFree() in case of multi-process target is enabled. &lt;br /&gt;
*Calls to palProtect() &amp;amp;amp; palUnprotect() have been replaced by new routines _srProtect() &amp;amp;amp; _srUnprotect(), in which the implementation uses its own mutex object that calls PAL&#039;s mutex routines. &lt;br /&gt;
*In target Test Classes and Test Functions, added capability to specify the comment label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
* Fixed a potential data abort issue when executing delegate code in the IM prior to Runtime being initialized.&lt;br /&gt;
* Runtime Test Services APIs are now thread safe. &lt;br /&gt;
* Fixed cancelation of remote boadcast subcribtion goes in an infinite loop.&lt;br /&gt;
* Fixed Runtime resource abuse when sending lots of broadcast messages. &lt;br /&gt;
* Added partial check for message payload corectness.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapi.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srconn.h&lt;br /&gt;
 srerr.c&lt;br /&gt;
 srib.c&lt;br /&gt;
 srib.h&lt;br /&gt;
 sribctrl.c&lt;br /&gt;
 sribtr.c&lt;br /&gt;
 sribtr.h&lt;br /&gt;
 srmsgmar.c&lt;br /&gt;
 srmsgptr.c&lt;br /&gt;
 srmsgptr.h&lt;br /&gt;
 srmsgque.c&lt;br /&gt;
 srmsgque.h&lt;br /&gt;
 srmsgrt.c&lt;br /&gt;
 srmsgrt.h&lt;br /&gt;
 srmsgsub.c&lt;br /&gt;
 srmsgsub.h&lt;br /&gt;
 srstid.c&lt;br /&gt;
 srstid.h&lt;br /&gt;
 srsuid.c&lt;br /&gt;
 srsuid.h&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
 srtestutil.c&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srthread.c&lt;br /&gt;
 srthread.h&lt;br /&gt;
 srtime.c&lt;br /&gt;
 srtime.h&lt;br /&gt;
 srtp.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been added:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srmem.c&lt;br /&gt;
 srmem.h&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.01xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
Any use of test classes through the Functions collection, like: &lt;br /&gt;
&lt;br /&gt;
$main::ascript-&amp;amp;gt;Functions-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;User-&amp;amp;gt;Call(); &lt;br /&gt;
&lt;br /&gt;
should be converted to use the new TestUnits collection: &lt;br /&gt;
&lt;br /&gt;
$main::ascript-&amp;amp;gt;TestUnits-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;Run(); &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== API Changes  ===&lt;br /&gt;
&lt;br /&gt;
*The Support Wiki pages now contain reference help for AutoScript. The content has been updated to reflect the API changes, for details see the &#039;&#039;AutoScript API Reference&#039;&#039;. &lt;br /&gt;
*All synchronous method calls now throw exceptions in order to indicate error conditions rather than have error conditions encoded in return values. &lt;br /&gt;
*Asychronous method calls never throw exceptions to indicate error conditions. Instead, error conditions are delivered as a new Error object that is returned to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039;. (Asynchronous methods are &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;) &lt;br /&gt;
*If &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; times out, an Error object is returned. Previously NULL was returned in this case. &lt;br /&gt;
*All objects returned by &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; have &#039;&#039;&#039;Type&#039;&#039;&#039; and &#039;&#039;&#039;Name&#039;&#039;&#039; properties. When the &#039;&#039;&#039;Type&#039;&#039;&#039; is “Error”, the Error object has additional properties that contain further details about the error. &lt;br /&gt;
*All existing script syntax for designation of message payloads has been deprecated. A new syntax that allows for greater expression has been adopted. Details can be found [[Updated Message Payload Syntax|here]]. There are no syntax changes to function payloads. &lt;br /&gt;
*The signature for &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; has been changed. Successful calls to &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; now fully initialize the object.&lt;br /&gt;
&lt;br /&gt;
=== End-Of-Lifed Methods and Properties  ===&lt;br /&gt;
&lt;br /&gt;
The following have been End-Of-Lifed (EOL&#039;d). A call to any of these methods or an access to any of these properties will now result in a not-implemented exception in the script making the call or access. &lt;br /&gt;
&lt;br /&gt;
*ascript.Quit() &lt;br /&gt;
*ascript.Interfaces &lt;br /&gt;
*ascript.NamedEvents &lt;br /&gt;
*ascript.WaitForEventWithTimeout &lt;br /&gt;
*ascript.RspTimeoutNotifyEnabled &lt;br /&gt;
*ascript.CreateTimer() &lt;br /&gt;
*ascript.DestroyTimer() &lt;br /&gt;
*ascript.WaitTimeoutNotifyEnabled &lt;br /&gt;
*ascript.Compare_As_C_Values() &lt;br /&gt;
*ascript.AsyncErrorNotifyEnabled &lt;br /&gt;
*ascript.Function.Item().User/Owner.SMID&lt;br /&gt;
&lt;br /&gt;
=== Recommended Steps for Migration From a Previous Version  ===&lt;br /&gt;
&lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; in all scripts. Previous logic to test for null indicating timeouts must be modified. &#039;&#039;&#039;WaitForEvent()&#039;&#039;&#039; now always returns an object, in the case of a timeout (or other error) an Error object is returned. &lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.Quit&#039;&#039;&#039; in all scripts. Modify the logic as necessary to exit the script by other means in place of the original &#039;&#039;&#039;Quit()&#039;&#039;&#039; call. &lt;br /&gt;
*Search for all asynchronous method calls (Asynchronous calls are limited to &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;). Modify the logic as necessary to call &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; if errors (including timeout error) should be detected. &lt;br /&gt;
*If you have scripts that explicitly instantiate an &#039;&#039;&#039;ascript&#039;&#039;&#039; object (i.e. they create an object using the &#039;&#039;&#039;&amp;quot;STRIDE.ascript&amp;quot;&#039;&#039;&#039; PROGID), search for all occurrences and modify the subsequent call to &#039;&#039;&#039;ascript.Initialize()&#039;&#039;&#039; to pass the new parameter set. &lt;br /&gt;
*Search for all EOL&#039;d methods and properties. Each can be replaced by setting the appropriate timeout property and handling the timeout error object delivered by WaitForEvent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;Section1&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%; border-collapse: collapse;&amp;quot; class=&amp;quot;MsoTableGrid&amp;quot;&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1pt solid windowtext; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;EOL’d&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Method or Property&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&#039;&#039;&#039;Recommended Replacement&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Quit&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Refactor&amp;lt;/span&amp;gt; script logic to exit the script by other means. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Interfaces&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Functions&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Messages&amp;lt;/span&amp;gt; as appropriate. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.NamedEvents&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitForEventWithTimeout&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() after setting desired timeout using &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitTimeoutPeriod&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.RspTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.CreateTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Add&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.DestroyTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Remove&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Compare_As_C_Values&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.AsyncErrorNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Error notification from asynchronous calls is performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Function.Item&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SMID&amp;lt;/span&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Function.Item&amp;lt;/span&amp;gt;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SUID&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
Please refer to &#039;&#039;&#039;&#039;&#039;Platform Abstraction Layer (PAL) Specification&#039;&#039;&#039;&#039;&#039; for detailed information on new APIs. You may also refer to Linux implementation of PAL, which has been updated with new routines. &lt;br /&gt;
&lt;br /&gt;
*Implement new shared memory routines, palMemSegmentOpen() &amp;amp;amp; palMemSegmentClose(). In case of multi-process target, these routines should implement shared memory using memory-mapped files.&lt;br /&gt;
&lt;br /&gt;
*Runtime now can manage dynamic, configurable, and internal static memory. In case of multi-process target, update palMemAlloc() to simply call _srMem_Allocate() and palMemFree() to simply call _srMem_Free(). In case of single-process target, you can simply allocate dynamic memory according to your Operating System. If you are upgrading, you can simply leave the current implementation as it is.&lt;br /&gt;
&lt;br /&gt;
*Implement new mutex routines, palMutexInit(), palMutexDestroy(), palMutexLock() &amp;amp;amp; palMutexUnlock, to handle any named mutex objects. It is recommended to implement a separate code for shared memory case if it is necessary.&lt;br /&gt;
&lt;br /&gt;
*Remove old routines palProtect(), palUnprotect() and palCriticalErr().&lt;br /&gt;
&lt;br /&gt;
*Implement new routines palGetThreadId() and palGetProcessId().&lt;br /&gt;
&lt;br /&gt;
*Implement new routine palSleep().&lt;br /&gt;
&lt;br /&gt;
*Update synchronization routines, palCreateNID(), palDeleteNID(), palWait() &amp;amp;amp; palNotify(), to support event notifications and in case of multi-process target is enabled, sharing of the synchronization objects among multiple processors.&lt;br /&gt;
&lt;br /&gt;
*If your PAL uses &#039;&#039;S2Mem&#039;&#039; routines for dynamic memory, you should use new Runtime module &#039;&#039;srMem&#039;&#039;. Update palMemAlloc() to call _srMem_Allocate() and palMemFree() to call _srMem_Free().&lt;br /&gt;
&lt;br /&gt;
*Optionally, implement new routine palLog() as a logging utility for PAL and Runtime.&lt;br /&gt;
&lt;br /&gt;
== Runtime  ==&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new memory management (srCFG_MEMORY_MANAGEMENT) and multi-process target (srCFG_MULTI_PROC_TARGET) settings. By default, memory management and multi-process target are disabled. If you enable multi-process target you also need to enable memory management and configure the sizes and the maximum number of memory blocks. New Runtime module &#039;&#039;srMem&#039;&#039; uses these configurations to allocate and manage memory segments.&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new target connection timeout setting (srCFG_CONNECTION_TIMEOUT).&lt;br /&gt;
&lt;br /&gt;
*If target Test Classes and Test Functions are used, change the signature to include test label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
&lt;br /&gt;
== Windows Applications using Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
*The new &#039;&#039;&#039;s2srwin.lib&#039;&#039;&#039; has public API, published in a header srwin.h, containing the following set of routines:&lt;br /&gt;
&lt;br /&gt;
 srWin_SetMaster() - Sets the application as the master and initializes the Stride Runtime thread. In a multi-process environment only one application should make this call.&lt;br /&gt;
 srWin_AddThread() - Adds additional message processing threads to the application.&lt;br /&gt;
 srWin_Run() - Starts the processing and will not return until it has been signaled via keyboard key or CTRL-C.&lt;br /&gt;
 srWin_SetPortTCP() - Overrides the TCP port number (default: 8000) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
 srWin_SetPortSerial() - Overrides the COM port number (default: 1) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
&lt;br /&gt;
*Existing Host Apps developed against the old hostapphrt and hostapptrt libraries should be updated to as follows: &lt;br /&gt;
**replace the include of hostapp.h with include of srwin.h &lt;br /&gt;
**replace all calls to HostAppXXX() with srWin_XXX() &lt;br /&gt;
**call srWin_SetMaster() to start the runtime thread, srThread, before calling srWin_Run(). Within a multi-process target, only one process (the master) calls this routine.&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;a&amp;quot; ==&lt;br /&gt;
* Linux version of the STRIDE [[Build Tools]] is officially introduced.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;b&amp;quot; ==&lt;br /&gt;
* Relaxed [[scl_cast]]() pragma to allow cast from any integral ptr to union of ptrs&lt;br /&gt;
* Fixed compile warnings in Linux PAL.&lt;br /&gt;
* Fixed issue in instrumentation of [[Test Units]].&lt;br /&gt;
* Fixed issue with UNC paths.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0102 ==&lt;br /&gt;
* Implemented new licensing scheme. Existing licenses will not work anymore and need to be reissued. Old and new licenses could co-exist at the same location.&lt;br /&gt;
* The syntax of [[scl_ptr]] and [[scl_ptr_sized]] pragmas has changed. Now it is required to quote the direction and usage attributes. See this [[Handling_of_pointer_attribute_tokens|page]] for details.&lt;br /&gt;
* [[Test_Units#Runtime_Test_Services|Runtime Test Services]] now support adding annotations per test suite.&lt;br /&gt;
* A complete set of [[Samples]] has been implemented.&lt;br /&gt;
* Fixed several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Fixed several minor issues in [[AutoScript]]. &lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0102&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039; and &#039;&#039;&#039;3.01&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8109</id>
		<title>STRIDE 3.0.01xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8109"/>
		<updated>2008-10-15T23:35:20Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* Change Details */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Release Notes&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
This page documents the changes in STRIDE version 3.0.01xx (code name &#039;&#039;StoneSteps&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note that if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= What&#039;s New  =&lt;br /&gt;
&lt;br /&gt;
Based on customer feedback, in this release we have made significant performance improvements as well as many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Performance Improvements ==&lt;br /&gt;
&lt;br /&gt;
Specific improvements have been made in the following areas: &lt;br /&gt;
&lt;br /&gt;
*Database loading time has been improved &lt;br /&gt;
*Compile times are now shorter &lt;br /&gt;
*Scripting operations involving function and message payloads now perform better, especially when arrays are involved &lt;br /&gt;
*Runtime performance has been improved by optimizing payload serialization and deserialization operations&lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
&lt;br /&gt;
=== SCL Wizard ===&lt;br /&gt;
&lt;br /&gt;
The SCL Wizard functionality in [[STRIDE Studio]] has been extended so that you can now use the tool to qualify message payloads as well as function payloads. &lt;br /&gt;
&lt;br /&gt;
In addition, the following types of qualifications can now be made: &lt;br /&gt;
&lt;br /&gt;
*For payloads that include function pointers, the SCL Wizard now supports qualifying the pointers as such and identifying candidate function values &lt;br /&gt;
*Type casts can now be specified on payload members&lt;br /&gt;
&lt;br /&gt;
=== Connection Management ===&lt;br /&gt;
&lt;br /&gt;
Connection management has been greatly simplified; software managing connection to the target system has been integrated into [[STRIDE Studio]] so that connections can be managed directly from there. (It is still possible to access connection management functionality without using Studio.) &lt;br /&gt;
&lt;br /&gt;
The Panel program is no longer used, and there is no longer a requirement to load the database to communicate with a remote target. &lt;br /&gt;
&lt;br /&gt;
==== Transport Properties ====&lt;br /&gt;
&lt;br /&gt;
All transport properties can now be accessed via scripts. A new transport scripting model makes this possible.&lt;br /&gt;
&lt;br /&gt;
=== STRIDE Studio Test Runner Improvements ===&lt;br /&gt;
&lt;br /&gt;
The test runner in [[STRIDE Studio]] has incorporated several functional and usability improvements. &lt;br /&gt;
&lt;br /&gt;
*Each runnable script and folder (Suite) in a workspace now has additional properties that allow you to optionally specify a handler script that will be executed in the case of an unhandled error (property OnError) or a timeout (property OnTimeout). A timeout value can be set for each folder.&lt;br /&gt;
&lt;br /&gt;
*Each runnable folder (Suite) in a workspace now has a property (OnRunConnect) that can instruct STRIDE Studio to automatically connect to a target system before the folder is executed.&lt;br /&gt;
&lt;br /&gt;
*The workspace now has a dynamic property (ExecutionState) that allows you to alter the order of script execution at runtime.&lt;br /&gt;
&lt;br /&gt;
=== New Frameworks Feature ===&lt;br /&gt;
&lt;br /&gt;
This version introduces [[Using Frameworks|Target Frameworks]], which provide customizable templates for workspace creation. The use of frameworks simplifies the use of STRIDE and ensures consistency across a development team. &lt;br /&gt;
&lt;br /&gt;
Several [[Provided Frameworks|reference frameworks]] are included in this release, supporting the following target environments: &lt;br /&gt;
&lt;br /&gt;
*[[Provided Frameworks#Windows|Windows]] &lt;br /&gt;
*[[Provided Frameworks#Linux|Linux]] &lt;br /&gt;
*[[Provided Frameworks#WinMobile|WinMobile]] &lt;br /&gt;
*[[Provided Frameworks#Generic|Generic]]&lt;br /&gt;
&lt;br /&gt;
[[Using Packages|Packages]] are also introduced. These provide a convenient way to encapsulate SCL-annotated source code and corresponding tests for a set of interfaces. &lt;br /&gt;
&lt;br /&gt;
=== Uploading Results to STRIDE Portal ===&lt;br /&gt;
&lt;br /&gt;
Uploading test results from STRIDE Reporter to STRIDE Portal has been integrated into STRIDE Studio. Portal&#039;s server information can be configured from Studio&#039;s workspace properties while uploading results to Portal can be enabled or disabled via workspace context menu. If enabled, after running the workspace, a script folder or a script file, results in Report file will automatically be uploaded to the configured server. &lt;br /&gt;
&lt;br /&gt;
== Build Tools  ==&lt;br /&gt;
&lt;br /&gt;
A set of new command line [[Build Tools]] has been implemented: &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Stride compiler&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride database binder&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride instrumentation generator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
These utilities has been ported for Windows and Linux. Using them would allow seamless integration with a &amp;quot;make&amp;quot; build environment.&lt;br /&gt;
&lt;br /&gt;
== Target-Based Testing  ==&lt;br /&gt;
&lt;br /&gt;
Target-based (xUnit-style) testing has been simplified. The new set of SCL pragmas [[Test Units]] can now be included in a source file to tell the compiler and IM generator to automatically create test harnessing code.&lt;br /&gt;
&lt;br /&gt;
The automation components STRIDE.testclass, STRIDE.testunit and STRIDE.testfunction are removed.&lt;br /&gt;
&lt;br /&gt;
== Runtime/PAL  ==&lt;br /&gt;
&lt;br /&gt;
Based on customer requirements, in this release we have made significant changes to [[Target_Integration#The STRIDE Runtime|STRIDE Runtime]] and [[Target_Integration#The Platform Abstraction Layer (PAL)|PAL]]. &lt;br /&gt;
&lt;br /&gt;
=== Multi-Process Targets  ===&lt;br /&gt;
&lt;br /&gt;
New routines and support have been added to Runtime and PAL to support multi-process targets. Changes include: implementation of memory management and shared memory, protecting using named Mutex objects, synchronization of multiple processors and multiple threads, and usage of current process and thread IDs.&lt;br /&gt;
&lt;br /&gt;
=== Logging (Optional)  ===&lt;br /&gt;
&lt;br /&gt;
Runtime and PAL use a logging routine that can optionally be implemented in PAL. &lt;br /&gt;
&lt;br /&gt;
== Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
A new [[Windows_Off-Target_SDK|SDK]] for implemention of Off-Target applications on Windows has been packaged. It contains a library (s2srWin.dll/lib) in which the Windows PAL, Runtime, and GRS and a set of utility scripts are prebuilt. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;s2shostapphrt&#039;&#039;&#039; library, a prebuilt verion of the Host Runtime, has been removed. Building Windows applications using the Host Runtime is not supported anymore. The &#039;&#039;&#039;s2shostapptrt&#039;&#039;&#039; library, a prebuilt version of the Target Runtime, has also been removed. &lt;br /&gt;
&lt;br /&gt;
If an upgrade is performed it is strongly recommended that the above mentioned &#039;&#039;&#039;s2shostapp*&#039;&#039;&#039; libraries and their public API header (hostapp.h) be manually removed.&lt;br /&gt;
&lt;br /&gt;
= Support Wiki =&lt;br /&gt;
&lt;br /&gt;
This support wiki http://support.s2technologies.com is introduced with this version. You can navigate here from your web browser, or directly from STRIDE Studio; a link is provided in the Help menu. &lt;br /&gt;
&lt;br /&gt;
== STRIDE Samples  ==&lt;br /&gt;
&lt;br /&gt;
We have created a set of [[Samples_Overview|sample workspaces]] to aid in the evaluation of STRIDE, or as a tool for learning how to apply STRIDE to different testing scenarios. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to STRIDE, or want to learn more about using the product, this is a great place to start.&lt;br /&gt;
&lt;br /&gt;
= Acquiring the Software =&lt;br /&gt;
&lt;br /&gt;
You can download the latest release from the S2 Technologies ftp site: ftp://ftp.s2technologies.com &lt;br /&gt;
&lt;br /&gt;
To run STRIDE you will need a license. If you are not yet a customer of S2 and would like to obtain an evaluation license, email [mailto:sales@s2technologies.com S2 Sales] or call our offices at &#039;&#039;&#039;760-635-2345&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
= Installing the Software  =&lt;br /&gt;
&lt;br /&gt;
To install STRIDE for the first time, or as an upgrade to an existing installation, please refer to [[Host Installation]]. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note: if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you are new to STRIDE, we recommend that you investigate the [[Samples_Overview|New STRIDE Samples]].&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;ascript&#039;&#039;&#039; API has been changed to be more robust: &lt;br /&gt;
**Certain deprecated methods have been eliminated. &lt;br /&gt;
**Some existing API methods have been modifed. &lt;br /&gt;
**The event model has been improved to allow greater script control.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Some scripts must be modified from previous versions of STRIDE to work successfully with 3.0.01xx. The necessary changes are detailed in the [[#Migration_to_3.0.01xx|Migration to 3.0.01xx]] section below. &lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;Panel&#039;&#039;&#039; object is no longer available to scripts; its functionality has been moved under the &#039;&#039;&#039;studio&#039;&#039;&#039; object model. You can access this new functionality as &#039;&#039;&#039;studio.Connection&#039;&#039;&#039;, however if you were formerly scripting the &#039;&#039;&#039;Panel&#039;&#039;&#039; object, you may find it is no longer necessary since: &lt;br /&gt;
**You can now configure your connection properties from within STRIDE Studio (from the menu select &#039;&#039;Tools/Target Connectivity&#039;&#039;) &lt;br /&gt;
**You can now set a workspace folder property to autoconnect upon execution&lt;br /&gt;
&lt;br /&gt;
*Zero is now allowed as the maximum size under certain circumstances in &#039;&#039;&#039;scl_string&#039;&#039;&#039; and &#039;&#039;&#039;scl_ptr_sized&#039;&#039;&#039;. Details of these circumstances are contained in the &#039;&#039;&#039;[[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]]&#039;&#039;&#039; document.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compiler.MicrosoftCompatibility&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Compiler.Compatibility&#039;&#039;&#039;. Valid values are &amp;quot;Generic&amp;quot; (generic mode), &amp;quot;Microsoft&amp;quot; (Microsoft compatibility), or &amp;quot;Gnu&amp;quot; (Gnu or Gcc compatibility).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compile()&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Build()&#039;&#039;&#039;. Also new methods, &#039;&#039;&#039;studio.Workspace.CleanBuild()&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.ReloadDatabase()&#039;&#039;&#039;, have been added.&lt;br /&gt;
&lt;br /&gt;
*A new property, &#039;&#039;&#039;Output&#039;&#039;&#039;, has been added off the studio object. This property outputs text to the Studio message tab, similar to how &#039;&#039;&#039;ascript.MessageBox()&#039;&#039;&#039; works for certain scripts. This property contains one method, &#039;&#039;&#039;PrintMessage(String msg)&#039;&#039;&#039;. You can see an example of its use [[Debugging Helps|here]].&lt;br /&gt;
&lt;br /&gt;
*A new settings group has been introduced - &#039;&#039;&#039;studio.Workspace.Settings.Build&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Intercept.Path&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Intercept.SourcePath&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.Intercept.HeaderPath&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Fixes  ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This section describes defects which have been corrected in STRIDE and the customer tracking number associated with them, if any, in brackets [].&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*[1055] Not able to specifiy uppercase include directory &lt;br /&gt;
*[1163] Certain cases of array of pointers to discriminated unions that were not handled correctly in the ascript object have been fixed. &lt;br /&gt;
*[1357] The ascript &#039;&#039;&#039;Call()&#039;&#039;&#039; method, when used with RspTimeoutPeriod, only returns True if a timeout has occurred. &lt;br /&gt;
*[1469] Global casting using &#039;&#039;&#039;scl_cast&#039;&#039;&#039; no longer causes an intercept module compile error. &lt;br /&gt;
*[1539] &#039;&#039;&#039;ascript&#039;&#039;&#039; no longer returns &amp;quot;undefined&amp;quot; when calling &#039;&#039;&#039;function.ReturnValue&#039;&#039;&#039; when the captured function returns an unqualified function pointer. &lt;br /&gt;
*[1543] IM source file locations added to studio UI and automation &lt;br /&gt;
*[1564] The Studio Add files dialog has been increased from 2K bytes to 100K bytes, to allow for more files to be selected at a time. &lt;br /&gt;
*[1586] Support for Variadic Macros &lt;br /&gt;
*[1597] EDGFront crash for scl_ptr_opaque &lt;br /&gt;
*[1600] Pre-processor treats constant 1 always as 8-bit &lt;br /&gt;
*[1605] Generated Perl script generates error when run in debugger &lt;br /&gt;
*The following statement in Runtime files &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; has been changed:&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args = 0;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;is now&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt; with no initializer. This makes it portable and able to compile under Linux. &lt;br /&gt;
*A macro that determines the existence of &#039;&#039;&#039;vsnprintf()&#039;&#039;&#039; has been updated in &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; in order to make it able to compile with GCC and other non-Microsoft compilers.&amp;lt;br&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; If you are using test functions and C++ test classes, you must be using compilers that support &#039;&#039;&#039;vsnprintf&#039;&#039;&#039; (variable argument lists), which is a standard in C99 and supported in C90. &lt;br /&gt;
*When tracing on a STID it&#039;s possible to display trace information for messages that aren&#039;t captured (i.e. the message&#039;s SMID is not known to STRIDE). A problem could occur when STRIDE attempted to interpret the payload of these messages. This has now been fixed; hex values only are now shown in the trace view for in this situation. &lt;br /&gt;
*Autosense was not working properly in the editor for message payloads. This has been fixed.&lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
=== TestUnits Collection  ===&lt;br /&gt;
&lt;br /&gt;
A new TestUnits collection has been implemented. All test interfaces (specified with [[SCL_Pragmas#Test_Units | Test Unit pragmas]]) will be listed there.&lt;br /&gt;
&lt;br /&gt;
=== Functions Collection  ===&lt;br /&gt;
&lt;br /&gt;
Interfaces specified with either the [[scl_test_class]] or [[scl_test_flist]] pragmas are not listed in the Functions collection anymore. &lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
=== Memory Management  ===&lt;br /&gt;
&lt;br /&gt;
To support multi-process target, memory management support for dynamic, configurable, and internal static memory has been implemented in Runtime. Runtime makes PAL calls to acquire memory segments and manages the memory according to runtime configurations set by user. In case of multi-process target is enabled, these memory will be shared among multiple applications, and PAL should implement shared memory. &lt;br /&gt;
&lt;br /&gt;
=== Protection using Mutex  ===&lt;br /&gt;
&lt;br /&gt;
Runtime now uses named mutex objects to protect critical data from multiple and simultaneous accesses by multiple threads and, in case of multi-process target is enabled, by multiple applications. Runtime makes PAL calls to obtain and control mutex objects. &lt;br /&gt;
&lt;br /&gt;
=== New Routines  ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Memory Management&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In case of multi-process target, recommended approach is to use &amp;lt;u&amp;gt;Memory-Mapped Files&amp;lt;/u&amp;gt; to implement memory segments. &lt;br /&gt;
&lt;br /&gt;
 palMemSegmentOpen() - Open/create memory segment &lt;br /&gt;
 palMemSegmentClose() - Close memory segment&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Named Mutexes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palMutexInit() - Initialize a mutex object&lt;br /&gt;
 palMutexDestroy() - Destroy a mutex object&lt;br /&gt;
 palMutexLock() - Lock a mutex object&lt;br /&gt;
 palMutexUnlock() - Unlock a mutex object&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Task Synchronization&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palGetThreadId() - Get current thread Id&lt;br /&gt;
 palGetProcessId() - Get current process Id&lt;br /&gt;
 palSleep() - Suspend the execution of the current thread&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Logging&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is optional. &lt;br /&gt;
&lt;br /&gt;
 palLog() - Logging utility&lt;br /&gt;
&lt;br /&gt;
=== Updated Routines  ===&lt;br /&gt;
&lt;br /&gt;
*Function signatures and functionalities of palWait() &amp;amp;amp; palNotify() have been updated.&lt;br /&gt;
&lt;br /&gt;
 palWait() - now takes in an in/out pointer for events notification&lt;br /&gt;
 palNotify() - mail box Id has been updated to notify any event including mail box Ids.&lt;br /&gt;
&lt;br /&gt;
*Function signatures of palMemAlloc() &amp;amp;amp; palMemFree() have been updated.&lt;br /&gt;
&lt;br /&gt;
=== Removed Routines  ===&lt;br /&gt;
&lt;br /&gt;
 palProtect&lt;br /&gt;
 palUnprotect&lt;br /&gt;
 palCriticalErr&lt;br /&gt;
&lt;br /&gt;
=== Removed Modules  ===&lt;br /&gt;
&lt;br /&gt;
 S2Mem - Memory module provided as part of PAL has been removed. If native OS does not support dynamic memory, Runtime&#039;s memory management module &#039;&#039;srMem&#039;&#039; can be used instead of &#039;&#039;S2Mem&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
&lt;br /&gt;
*STRIDE Host Release &#039;&#039;&#039;3.0.01xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;. &lt;br /&gt;
*In order to eliminate redundancy and promote an object-oriented design, &amp;quot;Member Methods&amp;quot; have been removed from srTest; only &amp;quot;Member Objects&amp;quot; exist now in srTest. In addition, accessing the functionality of Member Objects in this way is similar to accessing scripting objects through the STRIDE Reporter object model. For a detailed explanation, refer to [[Test_Units#C.2B.2B_Test_Classes|this article]] on the STRIDE Support Wiki. &lt;br /&gt;
*A new routine, &#039;&#039;&#039;srInit()&#039;&#039;&#039;, replaces deprecated &#039;&#039;&#039;srInitialize()&#039;&#039;&#039;. Now the target will not be able to set an auto-connect with timeout. &lt;br /&gt;
*The &#039;&#039;&#039;scl_tp&#039;&#039;&#039; and &#039;&#039;&#039;scl_tp_format&#039;&#039;&#039; pragmas have been deprecated. The new pragmas are &#039;&#039;&#039;scl_tracepoint&#039;&#039;&#039; and &#039;&#039;&#039;scl_tracepoint_format&#039;&#039;&#039;. &lt;br /&gt;
*The default runtime configuration in srcfg.h now has fragmentation turned on. The srCFG_MAX_TRANSPORT_UNIT is set to 2048. &lt;br /&gt;
*Fixed warnings for parameter name differences in function declarations and definitions for srSubscribe(), srTracePoint(), and srQuerySMID(). &lt;br /&gt;
*Removed unnecessary/extra response to srCONNECT_CLOSE_T_SMID message. &lt;br /&gt;
*The Runtime now checks for the connection before responding with a &amp;quot;Pong&amp;quot; upon receiving a &amp;quot;Ping.&amp;quot; &lt;br /&gt;
*Introduced 40 additional system trace points to better describe internal errors. &lt;br /&gt;
*Reporting of the error srERR_SUB_NONE has been suppressed so that it no longer generates a target trace error. &lt;br /&gt;
*Trace views now always display srTraceStr() with reserved STID (srSTID_RESERVED) regardless of trace filter settings. &lt;br /&gt;
*srPtrSetupChild() now accepts NULL for handle (out pointer - pwHandle). &lt;br /&gt;
*Added a new Runtime Test Services (RTS) API &#039;&#039;&#039;srTestCaseSetStatusEx()&#039;&#039;&#039;, which enables the providing of the actual return value of a numeric test method in the case of failure. &lt;br /&gt;
*Added two new public APIs - &amp;quot;Printing&amp;quot; APIs to display messages on Trace Views without having to specify a STID or a trace level and to set any trace filters on Trace Views. These routines support formatted strings with variable arguments. The &#039;&#039;&#039;srPrintInfo()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and Level=3. The &#039;&#039;&#039;srPrintError()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and the Level=1. &#039;&#039;&#039;Warning:&#039;&#039;&#039; These new APIs use vsnprintf() routine to process variable arguments. The vsnprintf() became a standard in C99 and is supported in C90. &lt;br /&gt;
*To support multi-process target, significant changes have been made to runtime. &lt;br /&gt;
*A new public routine, srUninit(), has been added to sr.h &amp;amp;amp; srapi.c. &lt;br /&gt;
* A new public routine for Runtime Thread exit point, srThreadUninit(), has been added to sr.h &amp;amp;amp; srthread.c. &lt;br /&gt;
*A new module, srMem, for Memory Management has been added. Its new routines, _srMem_Allocate() &amp;amp;amp; _srMem_Free(), will be used in PAL&#039;s palMemAlloc() &amp;amp;amp; palMemFree() in case of multi-process target is enabled. &lt;br /&gt;
*Calls to palProtect() &amp;amp;amp; palUnprotect() have been replaced by new routines _srProtect() &amp;amp;amp; _srUnprotect(), in which the implementation uses its own mutex object that calls PAL&#039;s mutex routines. &lt;br /&gt;
*In target Test Classes and Test Functions, added capability to specify the comment label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
* Fixed a potential data abort issue when executing delegate code in the IM prior to Runtime being initialized.&lt;br /&gt;
* Runtime Test Services APIs are now thread safe. &lt;br /&gt;
* Fixed cancelation of remote boadcast subcribtion goes in an infinite loop.&lt;br /&gt;
* Fixed Runtime resource abuse when sending lots of broadcast messages. &lt;br /&gt;
* Added partial check for message payload corectness.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapi.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srconn.h&lt;br /&gt;
 srerr.c&lt;br /&gt;
 srib.c&lt;br /&gt;
 srib.h&lt;br /&gt;
 sribctrl.c&lt;br /&gt;
 sribtr.c&lt;br /&gt;
 sribtr.h&lt;br /&gt;
 srmsgmar.c&lt;br /&gt;
 srmsgptr.c&lt;br /&gt;
 srmsgptr.h&lt;br /&gt;
 srmsgque.c&lt;br /&gt;
 srmsgque.h&lt;br /&gt;
 srmsgrt.c&lt;br /&gt;
 srmsgrt.h&lt;br /&gt;
 srmsgsub.c&lt;br /&gt;
 srmsgsub.h&lt;br /&gt;
 srstid.c&lt;br /&gt;
 srstid.h&lt;br /&gt;
 srsuid.c&lt;br /&gt;
 srsuid.h&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
 srtestutil.c&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srthread.c&lt;br /&gt;
 srthread.h&lt;br /&gt;
 srtime.c&lt;br /&gt;
 srtime.h&lt;br /&gt;
 srtp.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been added:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srmem.c&lt;br /&gt;
 srmem.h&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.01xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
Any use of test classes through the Functions collection, like: &lt;br /&gt;
&lt;br /&gt;
$main::ascript-&amp;amp;gt;Functions-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;User-&amp;amp;gt;Call(); &lt;br /&gt;
&lt;br /&gt;
should be converted to use the new TestUnits collection: &lt;br /&gt;
&lt;br /&gt;
$main::ascript-&amp;amp;gt;TestUnits-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;Run(); &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== API Changes  ===&lt;br /&gt;
&lt;br /&gt;
*The Support Wiki pages now contain reference help for AutoScript. The content has been updated to reflect the API changes, for details see the &#039;&#039;AutoScript API Reference&#039;&#039;. &lt;br /&gt;
*All synchronous method calls now throw exceptions in order to indicate error conditions rather than have error conditions encoded in return values. &lt;br /&gt;
*Asychronous method calls never throw exceptions to indicate error conditions. Instead, error conditions are delivered as a new Error object that is returned to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039;. (Asynchronous methods are &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;) &lt;br /&gt;
*If &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; times out, an Error object is returned. Previously NULL was returned in this case. &lt;br /&gt;
*All objects returned by &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; have &#039;&#039;&#039;Type&#039;&#039;&#039; and &#039;&#039;&#039;Name&#039;&#039;&#039; properties. When the &#039;&#039;&#039;Type&#039;&#039;&#039; is “Error”, the Error object has additional properties that contain further details about the error. &lt;br /&gt;
*All existing script syntax for designation of message payloads has been deprecated. A new syntax that allows for greater expression has been adopted. Details can be found [[Updated Message Payload Syntax|here]]. There are no syntax changes to function payloads. &lt;br /&gt;
*The signature for &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; has been changed. Successful calls to &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; now fully initialize the object.&lt;br /&gt;
&lt;br /&gt;
=== End-Of-Lifed Methods and Properties  ===&lt;br /&gt;
&lt;br /&gt;
The following have been End-Of-Lifed (EOL&#039;d). A call to any of these methods or an access to any of these properties will now result in a not-implemented exception in the script making the call or access. &lt;br /&gt;
&lt;br /&gt;
*ascript.Quit() &lt;br /&gt;
*ascript.Interfaces &lt;br /&gt;
*ascript.NamedEvents &lt;br /&gt;
*ascript.WaitForEventWithTimeout &lt;br /&gt;
*ascript.RspTimeoutNotifyEnabled &lt;br /&gt;
*ascript.CreateTimer() &lt;br /&gt;
*ascript.DestroyTimer() &lt;br /&gt;
*ascript.WaitTimeoutNotifyEnabled &lt;br /&gt;
*ascript.Compare_As_C_Values() &lt;br /&gt;
*ascript.AsyncErrorNotifyEnabled &lt;br /&gt;
*ascript.Function.Item().User/Owner.SMID&lt;br /&gt;
&lt;br /&gt;
=== Recommended Steps for Migration From a Previous Version  ===&lt;br /&gt;
&lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; in all scripts. Previous logic to test for null indicating timeouts must be modified. &#039;&#039;&#039;WaitForEvent()&#039;&#039;&#039; now always returns an object, in the case of a timeout (or other error) an Error object is returned. &lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.Quit&#039;&#039;&#039; in all scripts. Modify the logic as necessary to exit the script by other means in place of the original &#039;&#039;&#039;Quit()&#039;&#039;&#039; call. &lt;br /&gt;
*Search for all asynchronous method calls (Asynchronous calls are limited to &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;). Modify the logic as necessary to call &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; if errors (including timeout error) should be detected. &lt;br /&gt;
*If you have scripts that explicitly instantiate an &#039;&#039;&#039;ascript&#039;&#039;&#039; object (i.e. they create an object using the &#039;&#039;&#039;&amp;quot;STRIDE.ascript&amp;quot;&#039;&#039;&#039; PROGID), search for all occurrences and modify the subsequent call to &#039;&#039;&#039;ascript.Initialize()&#039;&#039;&#039; to pass the new parameter set. &lt;br /&gt;
*Search for all EOL&#039;d methods and properties. Each can be replaced by setting the appropriate timeout property and handling the timeout error object delivered by WaitForEvent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;Section1&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%; border-collapse: collapse;&amp;quot; class=&amp;quot;MsoTableGrid&amp;quot;&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1pt solid windowtext; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;EOL’d&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Method or Property&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&#039;&#039;&#039;Recommended Replacement&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Quit&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Refactor&amp;lt;/span&amp;gt; script logic to exit the script by other means. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Interfaces&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Functions&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Messages&amp;lt;/span&amp;gt; as appropriate. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.NamedEvents&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitForEventWithTimeout&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() after setting desired timeout using &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitTimeoutPeriod&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.RspTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.CreateTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Add&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.DestroyTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Remove&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Compare_As_C_Values&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.AsyncErrorNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Error notification from asynchronous calls is performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Function.Item&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SMID&amp;lt;/span&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Function.Item&amp;lt;/span&amp;gt;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SUID&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
Please refer to &#039;&#039;&#039;&#039;&#039;Platform Abstraction Layer (PAL) Specification&#039;&#039;&#039;&#039;&#039; for detailed information on new APIs. You may also refer to Linux implementation of PAL, which has been updated with new routines. &lt;br /&gt;
&lt;br /&gt;
*Implement new shared memory routines, palMemSegmentOpen() &amp;amp;amp; palMemSegmentClose(). In case of multi-process target, these routines should implement shared memory using memory-mapped files.&lt;br /&gt;
&lt;br /&gt;
*Runtime now can manage dynamic, configurable, and internal static memory. In case of multi-process target, update palMemAlloc() to simply call _srMem_Allocate() and palMemFree() to simply call _srMem_Free(). In case of single-process target, you can simply allocate dynamic memory according to your Operating System. If you are upgrading, you can simply leave the current implementation as it is.&lt;br /&gt;
&lt;br /&gt;
*Implement new mutex routines, palMutexInit(), palMutexDestroy(), palMutexLock() &amp;amp;amp; palMutexUnlock, to handle any named mutex objects. It is recommended to implement a separate code for shared memory case if it is necessary.&lt;br /&gt;
&lt;br /&gt;
*Remove old routines palProtect(), palUnprotect() and palCriticalErr().&lt;br /&gt;
&lt;br /&gt;
*Implement new routines palGetThreadId() and palGetProcessId().&lt;br /&gt;
&lt;br /&gt;
*Implement new routine palSleep().&lt;br /&gt;
&lt;br /&gt;
*Update synchronization routines, palCreateNID(), palDeleteNID(), palWait() &amp;amp;amp; palNotify(), to support event notifications and in case of multi-process target is enabled, sharing of the synchronization objects among multiple processors.&lt;br /&gt;
&lt;br /&gt;
*If your PAL uses &#039;&#039;S2Mem&#039;&#039; routines for dynamic memory, you should use new Runtime module &#039;&#039;srMem&#039;&#039;. Update palMemAlloc() to call _srMem_Allocate() and palMemFree() to call _srMem_Free().&lt;br /&gt;
&lt;br /&gt;
*Optionally, implement new routine palLog() as a logging utility for PAL and Runtime.&lt;br /&gt;
&lt;br /&gt;
== Runtime  ==&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new memory management (srCFG_MEMORY_MANAGEMENT) and multi-process target (srCFG_MULTI_PROC_TARGET) settings. By default, memory management and multi-process target are disabled. If you enable multi-process target you also need to enable memory management and configure the sizes and the maximum number of memory blocks. New Runtime module &#039;&#039;srMem&#039;&#039; uses these configurations to allocate and manage memory segments.&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new target connection timeout setting (srCFG_CONNECTION_TIMEOUT).&lt;br /&gt;
&lt;br /&gt;
*If target Test Classes and Test Functions are used, change the signature to include test label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
&lt;br /&gt;
== Windows Applications using Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
*The new &#039;&#039;&#039;s2srwin.lib&#039;&#039;&#039; has public API, published in a header srwin.h, containing the following set of routines:&lt;br /&gt;
&lt;br /&gt;
 srWin_SetMaster() - Sets the application as the master and initializes the Stride Runtime thread. In a multi-process environment only one application should make this call.&lt;br /&gt;
 srWin_AddThread() - Adds additional message processing threads to the application.&lt;br /&gt;
 srWin_Run() - Starts the processing and will not return until it has been signaled via keyboard key or CTRL-C.&lt;br /&gt;
 srWin_SetPortTCP() - Overrides the TCP port number (default: 8000) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
 srWin_SetPortSerial() - Overrides the COM port number (default: 1) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
&lt;br /&gt;
*Existing Host Apps developed against the old hostapphrt and hostapptrt libraries should be updated to as follows: &lt;br /&gt;
**replace the include of hostapp.h with include of srwin.h &lt;br /&gt;
**replace all calls to HostAppXXX() with srWin_XXX() &lt;br /&gt;
**call srWin_SetMaster() to start the runtime thread, srThread, before calling srWin_Run(). Within a multi-process target, only one process (the master) calls this routine.&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;a&amp;quot; ==&lt;br /&gt;
* Linux version of the STRIDE [[Build Tools]] is officially introduced.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;b&amp;quot; ==&lt;br /&gt;
* Relaxed [[scl_cast]]() pragma to allow cast from any integral ptr to union of ptrs&lt;br /&gt;
* Fixed compile warnings in Linux PAL.&lt;br /&gt;
* Fixed issue in instrumentation of [[Test Units]].&lt;br /&gt;
* Fixed issue with UNC paths.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0102 ==&lt;br /&gt;
* Implemented new licensing scheme. Existing licenses will not work anymore and need to be reissued. Old and new licenses could co-exist at the same location.&lt;br /&gt;
* The syntax of [[scl_ptr]] and [[scl_ptr_sized]] pragmas has changed. Now it is required to quote the direction and usage attributes. See this [[Handling_of_pointer_attribute_tokens|page]] for details.&lt;br /&gt;
* [[Test_Units#Runtime_Test_Services|Runtime Test Services]] now support adding annotations per test suite.&lt;br /&gt;
* A complete set of [[Samples]] has been implemented.&lt;br /&gt;
* Fixed several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Fixed several minor issues in [[AutoScript]]. &lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0102&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039; and &#039;&#039;&#039;3.01&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8108</id>
		<title>STRIDE 3.0.01xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8108"/>
		<updated>2008-10-15T23:33:58Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* Installing the Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Release Notes&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
This page documents the changes in STRIDE version 3.0.01xx (code name &#039;&#039;StoneSteps&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note that if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= What&#039;s New  =&lt;br /&gt;
&lt;br /&gt;
Based on customer feedback, in this release we have made significant performance improvements as well as many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Performance Improvements ==&lt;br /&gt;
&lt;br /&gt;
Specific improvements have been made in the following areas: &lt;br /&gt;
&lt;br /&gt;
*Database loading time has been improved &lt;br /&gt;
*Compile times are now shorter &lt;br /&gt;
*Scripting operations involving function and message payloads now perform better, especially when arrays are involved &lt;br /&gt;
*Runtime performance has been improved by optimizing payload serialization and deserialization operations&lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
&lt;br /&gt;
=== SCL Wizard ===&lt;br /&gt;
&lt;br /&gt;
The SCL Wizard functionality in [[STRIDE Studio]] has been extended so that you can now use the tool to qualify message payloads as well as function payloads. &lt;br /&gt;
&lt;br /&gt;
In addition, the following types of qualifications can now be made: &lt;br /&gt;
&lt;br /&gt;
*For payloads that include function pointers, the SCL Wizard now supports qualifying the pointers as such and identifying candidate function values &lt;br /&gt;
*Type casts can now be specified on payload members&lt;br /&gt;
&lt;br /&gt;
=== Connection Management ===&lt;br /&gt;
&lt;br /&gt;
Connection management has been greatly simplified; software managing connection to the target system has been integrated into [[STRIDE Studio]] so that connections can be managed directly from there. (It is still possible to access connection management functionality without using Studio.) &lt;br /&gt;
&lt;br /&gt;
The Panel program is no longer used, and there is no longer a requirement to load the database to communicate with a remote target. &lt;br /&gt;
&lt;br /&gt;
==== Transport Properties ====&lt;br /&gt;
&lt;br /&gt;
All transport properties can now be accessed via scripts. A new transport scripting model makes this possible.&lt;br /&gt;
&lt;br /&gt;
=== STRIDE Studio Test Runner Improvements ===&lt;br /&gt;
&lt;br /&gt;
The test runner in [[STRIDE Studio]] has incorporated several functional and usability improvements. &lt;br /&gt;
&lt;br /&gt;
*Each runnable script and folder (Suite) in a workspace now has additional properties that allow you to optionally specify a handler script that will be executed in the case of an unhandled error (property OnError) or a timeout (property OnTimeout). A timeout value can be set for each folder.&lt;br /&gt;
&lt;br /&gt;
*Each runnable folder (Suite) in a workspace now has a property (OnRunConnect) that can instruct STRIDE Studio to automatically connect to a target system before the folder is executed.&lt;br /&gt;
&lt;br /&gt;
*The workspace now has a dynamic property (ExecutionState) that allows you to alter the order of script execution at runtime.&lt;br /&gt;
&lt;br /&gt;
=== New Frameworks Feature ===&lt;br /&gt;
&lt;br /&gt;
This version introduces [[Using Frameworks|Target Frameworks]], which provide customizable templates for workspace creation. The use of frameworks simplifies the use of STRIDE and ensures consistency across a development team. &lt;br /&gt;
&lt;br /&gt;
Several [[Provided Frameworks|reference frameworks]] are included in this release, supporting the following target environments: &lt;br /&gt;
&lt;br /&gt;
*[[Provided Frameworks#Windows|Windows]] &lt;br /&gt;
*[[Provided Frameworks#Linux|Linux]] &lt;br /&gt;
*[[Provided Frameworks#WinMobile|WinMobile]] &lt;br /&gt;
*[[Provided Frameworks#Generic|Generic]]&lt;br /&gt;
&lt;br /&gt;
[[Using Packages|Packages]] are also introduced. These provide a convenient way to encapsulate SCL-annotated source code and corresponding tests for a set of interfaces. &lt;br /&gt;
&lt;br /&gt;
=== Uploading Results to STRIDE Portal ===&lt;br /&gt;
&lt;br /&gt;
Uploading test results from STRIDE Reporter to STRIDE Portal has been integrated into STRIDE Studio. Portal&#039;s server information can be configured from Studio&#039;s workspace properties while uploading results to Portal can be enabled or disabled via workspace context menu. If enabled, after running the workspace, a script folder or a script file, results in Report file will automatically be uploaded to the configured server. &lt;br /&gt;
&lt;br /&gt;
== Build Tools  ==&lt;br /&gt;
&lt;br /&gt;
A set of new command line [[Build Tools]] has been implemented: &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Stride compiler&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride database binder&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride instrumentation generator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
These utilities has been ported for Windows and Linux. Using them would allow seamless integration with a &amp;quot;make&amp;quot; build environment.&lt;br /&gt;
&lt;br /&gt;
== Target-Based Testing  ==&lt;br /&gt;
&lt;br /&gt;
Target-based (xUnit-style) testing has been simplified. The new set of SCL pragmas [[Test Units]] can now be included in a source file to tell the compiler and IM generator to automatically create test harnessing code.&lt;br /&gt;
&lt;br /&gt;
The automation components STRIDE.testclass, STRIDE.testunit and STRIDE.testfunction are removed.&lt;br /&gt;
&lt;br /&gt;
== Runtime/PAL  ==&lt;br /&gt;
&lt;br /&gt;
Based on customer requirements, in this release we have made significant changes to [[Target_Integration#The STRIDE Runtime|STRIDE Runtime]] and [[Target_Integration#The Platform Abstraction Layer (PAL)|PAL]]. &lt;br /&gt;
&lt;br /&gt;
=== Multi-Process Targets  ===&lt;br /&gt;
&lt;br /&gt;
New routines and support have been added to Runtime and PAL to support multi-process targets. Changes include: implementation of memory management and shared memory, protecting using named Mutex objects, synchronization of multiple processors and multiple threads, and usage of current process and thread IDs.&lt;br /&gt;
&lt;br /&gt;
=== Logging (Optional)  ===&lt;br /&gt;
&lt;br /&gt;
Runtime and PAL use a logging routine that can optionally be implemented in PAL. &lt;br /&gt;
&lt;br /&gt;
== Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
A new [[Windows_Off-Target_SDK|SDK]] for implemention of Off-Target applications on Windows has been packaged. It contains a library (s2srWin.dll/lib) in which the Windows PAL, Runtime, and GRS and a set of utility scripts are prebuilt. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;s2shostapphrt&#039;&#039;&#039; library, a prebuilt verion of the Host Runtime, has been removed. Building Windows applications using the Host Runtime is not supported anymore. The &#039;&#039;&#039;s2shostapptrt&#039;&#039;&#039; library, a prebuilt version of the Target Runtime, has also been removed. &lt;br /&gt;
&lt;br /&gt;
If an upgrade is performed it is strongly recommended that the above mentioned &#039;&#039;&#039;s2shostapp*&#039;&#039;&#039; libraries and their public API header (hostapp.h) be manually removed.&lt;br /&gt;
&lt;br /&gt;
= Support Wiki =&lt;br /&gt;
&lt;br /&gt;
This support wiki http://support.s2technologies.com is introduced with this version. You can navigate here from your web browser, or directly from STRIDE Studio; a link is provided in the Help menu. &lt;br /&gt;
&lt;br /&gt;
== STRIDE Samples  ==&lt;br /&gt;
&lt;br /&gt;
We have created a set of [[Samples_Overview|sample workspaces]] to aid in the evaluation of STRIDE, or as a tool for learning how to apply STRIDE to different testing scenarios. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to STRIDE, or want to learn more about using the product, this is a great place to start.&lt;br /&gt;
&lt;br /&gt;
= Acquiring the Software =&lt;br /&gt;
&lt;br /&gt;
You can download the latest release from the S2 Technologies ftp site: ftp://ftp.s2technologies.com &lt;br /&gt;
&lt;br /&gt;
To run STRIDE you will need a license. If you are not yet a customer of S2 and would like to obtain an evaluation license, email [mailto:sales@s2technologies.com S2 Sales] or call our offices at &#039;&#039;&#039;760-635-2345&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
= Installing the Software  =&lt;br /&gt;
&lt;br /&gt;
To install STRIDE for the first time, or as an upgrade to an existing installation, please refer to [[Host Installation]]. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note: if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you are new to STRIDE, we recommend that you investigate the [[Samples_Overview|New STRIDE Samples]].&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;ascript&#039;&#039;&#039; API has been changed to be more robust: &lt;br /&gt;
**Certain deprecated methods have been eliminated. &lt;br /&gt;
**Some existing methods have had their APIs modifed. &lt;br /&gt;
**The event model has been improved to allow greater script control.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Some scripts must be modified from previous versions of STRIDE to work successfully with 3.0.01xx. The necessary changes are detailed in the [[#Migration_to_3.0.01xx|Migration to 3.0.01xx]] section below. &lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;Panel&#039;&#039;&#039; object is no longer available to scripts; its functionality has been moved under the &#039;&#039;&#039;studio&#039;&#039;&#039; object model. You can access this new functionality as &#039;&#039;&#039;studio.Connection&#039;&#039;&#039;, however if you were formerly scripting the &#039;&#039;&#039;Panel&#039;&#039;&#039; object, you may find it is no longer necessary since: &lt;br /&gt;
**You can now configure your connection properties from within STRIDE Studio (from the menu select &#039;&#039;Tools/Target Connectivity&#039;&#039;) &lt;br /&gt;
**You can now set a workspace folder property to autoconnect upon execution&lt;br /&gt;
&lt;br /&gt;
*Zero is now allowed as the maximum size under certain circumstances in &#039;&#039;&#039;scl_string&#039;&#039;&#039; and &#039;&#039;&#039;scl_ptr_sized&#039;&#039;&#039;. Details of these circumstances are contained in the &#039;&#039;&#039;[[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]]&#039;&#039;&#039; document.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compiler.MicrosoftCompatibility&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Compiler.Compatibility&#039;&#039;&#039;. Valid values are &amp;quot;Generic&amp;quot; (generic mode), &amp;quot;Microsoft&amp;quot; (Microsoft compatibility), or &amp;quot;Gnu&amp;quot; (Gnu or Gcc compatibility).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compile()&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Build()&#039;&#039;&#039;. Also new methods, &#039;&#039;&#039;studio.Workspace.CleanBuild()&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.ReloadDatabase()&#039;&#039;&#039;, have been added.&lt;br /&gt;
&lt;br /&gt;
*A new property, &#039;&#039;&#039;Output&#039;&#039;&#039;, has been added off the studio object. This property outputs text to the Studio message tab, similar to how &#039;&#039;&#039;ascript.MessageBox()&#039;&#039;&#039; works for certain scripts. This property contains one method, &#039;&#039;&#039;PrintMessage(String msg)&#039;&#039;&#039;. You can see an example of its use [[Debugging Helps|here]].&lt;br /&gt;
&lt;br /&gt;
*A new settings group has been introduced - &#039;&#039;&#039;studio.Workspace.Settings.Build&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Intercept.Path&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Intercept.SourcePath&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.Intercept.HeaderPath&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Fixes  ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This section describes defects which have been corrected in STRIDE and the customer tracking number associated with them, if any, in brackets [].&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*[1055] Not able to specifiy uppercase include directory &lt;br /&gt;
*[1163] Certain cases of array of pointers to discriminated unions that were not handled correctly in the ascript object have been fixed. &lt;br /&gt;
*[1357] The ascript &#039;&#039;&#039;Call()&#039;&#039;&#039; method, when used with RspTimeoutPeriod, only returns True if a timeout has occurred. &lt;br /&gt;
*[1469] Global casting using &#039;&#039;&#039;scl_cast&#039;&#039;&#039; no longer causes an intercept module compile error. &lt;br /&gt;
*[1539] &#039;&#039;&#039;ascript&#039;&#039;&#039; no longer returns &amp;quot;undefined&amp;quot; when calling &#039;&#039;&#039;function.ReturnValue&#039;&#039;&#039; when the captured function returns an unqualified function pointer. &lt;br /&gt;
*[1543] IM source file locations added to studio UI and automation &lt;br /&gt;
*[1564] The Studio Add files dialog has been increased from 2K bytes to 100K bytes, to allow for more files to be selected at a time. &lt;br /&gt;
*[1586] Support for Variadic Macros &lt;br /&gt;
*[1597] EDGFront crash for scl_ptr_opaque &lt;br /&gt;
*[1600] Pre-processor treats constant 1 always as 8-bit &lt;br /&gt;
*[1605] Generated Perl script generates error when run in debugger &lt;br /&gt;
*The following statement in Runtime files &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; has been changed:&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args = 0;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;is now&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt; with no initializer. This makes it portable and able to compile under Linux. &lt;br /&gt;
*A macro that determines the existence of &#039;&#039;&#039;vsnprintf()&#039;&#039;&#039; has been updated in &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; in order to make it able to compile with GCC and other non-Microsoft compilers.&amp;lt;br&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; If you are using test functions and C++ test classes, you must be using compilers that support &#039;&#039;&#039;vsnprintf&#039;&#039;&#039; (variable argument lists), which is a standard in C99 and supported in C90. &lt;br /&gt;
*When tracing on a STID it&#039;s possible to display trace information for messages that aren&#039;t captured (i.e. the message&#039;s SMID is not known to STRIDE). A problem could occur when STRIDE attempted to interpret the payload of these messages. This has now been fixed; hex values only are now shown in the trace view for in this situation. &lt;br /&gt;
*Autosense was not working properly in the editor for message payloads. This has been fixed.&lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
=== TestUnits Collection  ===&lt;br /&gt;
&lt;br /&gt;
A new TestUnits collection has been implemented. All test interfaces (specified with [[SCL_Pragmas#Test_Units | Test Unit pragmas]]) will be listed there.&lt;br /&gt;
&lt;br /&gt;
=== Functions Collection  ===&lt;br /&gt;
&lt;br /&gt;
Interfaces specified with either the [[scl_test_class]] or [[scl_test_flist]] pragmas are not listed in the Functions collection anymore. &lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
=== Memory Management  ===&lt;br /&gt;
&lt;br /&gt;
To support multi-process target, memory management support for dynamic, configurable, and internal static memory has been implemented in Runtime. Runtime makes PAL calls to acquire memory segments and manages the memory according to runtime configurations set by user. In case of multi-process target is enabled, these memory will be shared among multiple applications, and PAL should implement shared memory. &lt;br /&gt;
&lt;br /&gt;
=== Protection using Mutex  ===&lt;br /&gt;
&lt;br /&gt;
Runtime now uses named mutex objects to protect critical data from multiple and simultaneous accesses by multiple threads and, in case of multi-process target is enabled, by multiple applications. Runtime makes PAL calls to obtain and control mutex objects. &lt;br /&gt;
&lt;br /&gt;
=== New Routines  ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Memory Management&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In case of multi-process target, recommended approach is to use &amp;lt;u&amp;gt;Memory-Mapped Files&amp;lt;/u&amp;gt; to implement memory segments. &lt;br /&gt;
&lt;br /&gt;
 palMemSegmentOpen() - Open/create memory segment &lt;br /&gt;
 palMemSegmentClose() - Close memory segment&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Named Mutexes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palMutexInit() - Initialize a mutex object&lt;br /&gt;
 palMutexDestroy() - Destroy a mutex object&lt;br /&gt;
 palMutexLock() - Lock a mutex object&lt;br /&gt;
 palMutexUnlock() - Unlock a mutex object&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Task Synchronization&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palGetThreadId() - Get current thread Id&lt;br /&gt;
 palGetProcessId() - Get current process Id&lt;br /&gt;
 palSleep() - Suspend the execution of the current thread&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Logging&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is optional. &lt;br /&gt;
&lt;br /&gt;
 palLog() - Logging utility&lt;br /&gt;
&lt;br /&gt;
=== Updated Routines  ===&lt;br /&gt;
&lt;br /&gt;
*Function signatures and functionalities of palWait() &amp;amp;amp; palNotify() have been updated.&lt;br /&gt;
&lt;br /&gt;
 palWait() - now takes in an in/out pointer for events notification&lt;br /&gt;
 palNotify() - mail box Id has been updated to notify any event including mail box Ids.&lt;br /&gt;
&lt;br /&gt;
*Function signatures of palMemAlloc() &amp;amp;amp; palMemFree() have been updated.&lt;br /&gt;
&lt;br /&gt;
=== Removed Routines  ===&lt;br /&gt;
&lt;br /&gt;
 palProtect&lt;br /&gt;
 palUnprotect&lt;br /&gt;
 palCriticalErr&lt;br /&gt;
&lt;br /&gt;
=== Removed Modules  ===&lt;br /&gt;
&lt;br /&gt;
 S2Mem - Memory module provided as part of PAL has been removed. If native OS does not support dynamic memory, Runtime&#039;s memory management module &#039;&#039;srMem&#039;&#039; can be used instead of &#039;&#039;S2Mem&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
&lt;br /&gt;
*STRIDE Host Release &#039;&#039;&#039;3.0.01xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;. &lt;br /&gt;
*In order to eliminate redundancy and promote an object-oriented design, &amp;quot;Member Methods&amp;quot; have been removed from srTest; only &amp;quot;Member Objects&amp;quot; exist now in srTest. In addition, accessing the functionality of Member Objects in this way is similar to accessing scripting objects through the STRIDE Reporter object model. For a detailed explanation, refer to [[Test_Units#C.2B.2B_Test_Classes|this article]] on the STRIDE Support Wiki. &lt;br /&gt;
*A new routine, &#039;&#039;&#039;srInit()&#039;&#039;&#039;, replaces deprecated &#039;&#039;&#039;srInitialize()&#039;&#039;&#039;. Now the target will not be able to set an auto-connect with timeout. &lt;br /&gt;
*The &#039;&#039;&#039;scl_tp&#039;&#039;&#039; and &#039;&#039;&#039;scl_tp_format&#039;&#039;&#039; pragmas have been deprecated. The new pragmas are &#039;&#039;&#039;scl_tracepoint&#039;&#039;&#039; and &#039;&#039;&#039;scl_tracepoint_format&#039;&#039;&#039;. &lt;br /&gt;
*The default runtime configuration in srcfg.h now has fragmentation turned on. The srCFG_MAX_TRANSPORT_UNIT is set to 2048. &lt;br /&gt;
*Fixed warnings for parameter name differences in function declarations and definitions for srSubscribe(), srTracePoint(), and srQuerySMID(). &lt;br /&gt;
*Removed unnecessary/extra response to srCONNECT_CLOSE_T_SMID message. &lt;br /&gt;
*The Runtime now checks for the connection before responding with a &amp;quot;Pong&amp;quot; upon receiving a &amp;quot;Ping.&amp;quot; &lt;br /&gt;
*Introduced 40 additional system trace points to better describe internal errors. &lt;br /&gt;
*Reporting of the error srERR_SUB_NONE has been suppressed so that it no longer generates a target trace error. &lt;br /&gt;
*Trace views now always display srTraceStr() with reserved STID (srSTID_RESERVED) regardless of trace filter settings. &lt;br /&gt;
*srPtrSetupChild() now accepts NULL for handle (out pointer - pwHandle). &lt;br /&gt;
*Added a new Runtime Test Services (RTS) API &#039;&#039;&#039;srTestCaseSetStatusEx()&#039;&#039;&#039;, which enables the providing of the actual return value of a numeric test method in the case of failure. &lt;br /&gt;
*Added two new public APIs - &amp;quot;Printing&amp;quot; APIs to display messages on Trace Views without having to specify a STID or a trace level and to set any trace filters on Trace Views. These routines support formatted strings with variable arguments. The &#039;&#039;&#039;srPrintInfo()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and Level=3. The &#039;&#039;&#039;srPrintError()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and the Level=1. &#039;&#039;&#039;Warning:&#039;&#039;&#039; These new APIs use vsnprintf() routine to process variable arguments. The vsnprintf() became a standard in C99 and is supported in C90. &lt;br /&gt;
*To support multi-process target, significant changes have been made to runtime. &lt;br /&gt;
*A new public routine, srUninit(), has been added to sr.h &amp;amp;amp; srapi.c. &lt;br /&gt;
* A new public routine for Runtime Thread exit point, srThreadUninit(), has been added to sr.h &amp;amp;amp; srthread.c. &lt;br /&gt;
*A new module, srMem, for Memory Management has been added. Its new routines, _srMem_Allocate() &amp;amp;amp; _srMem_Free(), will be used in PAL&#039;s palMemAlloc() &amp;amp;amp; palMemFree() in case of multi-process target is enabled. &lt;br /&gt;
*Calls to palProtect() &amp;amp;amp; palUnprotect() have been replaced by new routines _srProtect() &amp;amp;amp; _srUnprotect(), in which the implementation uses its own mutex object that calls PAL&#039;s mutex routines. &lt;br /&gt;
*In target Test Classes and Test Functions, added capability to specify the comment label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
* Fixed a potential data abort issue when executing delegate code in the IM prior to Runtime being initialized.&lt;br /&gt;
* Runtime Test Services APIs are now thread safe. &lt;br /&gt;
* Fixed cancelation of remote boadcast subcribtion goes in an infinite loop.&lt;br /&gt;
* Fixed Runtime resource abuse when sending lots of broadcast messages. &lt;br /&gt;
* Added partial check for message payload corectness.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapi.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srconn.h&lt;br /&gt;
 srerr.c&lt;br /&gt;
 srib.c&lt;br /&gt;
 srib.h&lt;br /&gt;
 sribctrl.c&lt;br /&gt;
 sribtr.c&lt;br /&gt;
 sribtr.h&lt;br /&gt;
 srmsgmar.c&lt;br /&gt;
 srmsgptr.c&lt;br /&gt;
 srmsgptr.h&lt;br /&gt;
 srmsgque.c&lt;br /&gt;
 srmsgque.h&lt;br /&gt;
 srmsgrt.c&lt;br /&gt;
 srmsgrt.h&lt;br /&gt;
 srmsgsub.c&lt;br /&gt;
 srmsgsub.h&lt;br /&gt;
 srstid.c&lt;br /&gt;
 srstid.h&lt;br /&gt;
 srsuid.c&lt;br /&gt;
 srsuid.h&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
 srtestutil.c&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srthread.c&lt;br /&gt;
 srthread.h&lt;br /&gt;
 srtime.c&lt;br /&gt;
 srtime.h&lt;br /&gt;
 srtp.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been added:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srmem.c&lt;br /&gt;
 srmem.h&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.01xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
Any use of test classes through the Functions collection, like: &lt;br /&gt;
&lt;br /&gt;
$main::ascript-&amp;amp;gt;Functions-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;User-&amp;amp;gt;Call(); &lt;br /&gt;
&lt;br /&gt;
should be converted to use the new TestUnits collection: &lt;br /&gt;
&lt;br /&gt;
$main::ascript-&amp;amp;gt;TestUnits-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;Run(); &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== API Changes  ===&lt;br /&gt;
&lt;br /&gt;
*The Support Wiki pages now contain reference help for AutoScript. The content has been updated to reflect the API changes, for details see the &#039;&#039;AutoScript API Reference&#039;&#039;. &lt;br /&gt;
*All synchronous method calls now throw exceptions in order to indicate error conditions rather than have error conditions encoded in return values. &lt;br /&gt;
*Asychronous method calls never throw exceptions to indicate error conditions. Instead, error conditions are delivered as a new Error object that is returned to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039;. (Asynchronous methods are &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;) &lt;br /&gt;
*If &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; times out, an Error object is returned. Previously NULL was returned in this case. &lt;br /&gt;
*All objects returned by &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; have &#039;&#039;&#039;Type&#039;&#039;&#039; and &#039;&#039;&#039;Name&#039;&#039;&#039; properties. When the &#039;&#039;&#039;Type&#039;&#039;&#039; is “Error”, the Error object has additional properties that contain further details about the error. &lt;br /&gt;
*All existing script syntax for designation of message payloads has been deprecated. A new syntax that allows for greater expression has been adopted. Details can be found [[Updated Message Payload Syntax|here]]. There are no syntax changes to function payloads. &lt;br /&gt;
*The signature for &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; has been changed. Successful calls to &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; now fully initialize the object.&lt;br /&gt;
&lt;br /&gt;
=== End-Of-Lifed Methods and Properties  ===&lt;br /&gt;
&lt;br /&gt;
The following have been End-Of-Lifed (EOL&#039;d). A call to any of these methods or an access to any of these properties will now result in a not-implemented exception in the script making the call or access. &lt;br /&gt;
&lt;br /&gt;
*ascript.Quit() &lt;br /&gt;
*ascript.Interfaces &lt;br /&gt;
*ascript.NamedEvents &lt;br /&gt;
*ascript.WaitForEventWithTimeout &lt;br /&gt;
*ascript.RspTimeoutNotifyEnabled &lt;br /&gt;
*ascript.CreateTimer() &lt;br /&gt;
*ascript.DestroyTimer() &lt;br /&gt;
*ascript.WaitTimeoutNotifyEnabled &lt;br /&gt;
*ascript.Compare_As_C_Values() &lt;br /&gt;
*ascript.AsyncErrorNotifyEnabled &lt;br /&gt;
*ascript.Function.Item().User/Owner.SMID&lt;br /&gt;
&lt;br /&gt;
=== Recommended Steps for Migration From a Previous Version  ===&lt;br /&gt;
&lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; in all scripts. Previous logic to test for null indicating timeouts must be modified. &#039;&#039;&#039;WaitForEvent()&#039;&#039;&#039; now always returns an object, in the case of a timeout (or other error) an Error object is returned. &lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.Quit&#039;&#039;&#039; in all scripts. Modify the logic as necessary to exit the script by other means in place of the original &#039;&#039;&#039;Quit()&#039;&#039;&#039; call. &lt;br /&gt;
*Search for all asynchronous method calls (Asynchronous calls are limited to &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;). Modify the logic as necessary to call &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; if errors (including timeout error) should be detected. &lt;br /&gt;
*If you have scripts that explicitly instantiate an &#039;&#039;&#039;ascript&#039;&#039;&#039; object (i.e. they create an object using the &#039;&#039;&#039;&amp;quot;STRIDE.ascript&amp;quot;&#039;&#039;&#039; PROGID), search for all occurrences and modify the subsequent call to &#039;&#039;&#039;ascript.Initialize()&#039;&#039;&#039; to pass the new parameter set. &lt;br /&gt;
*Search for all EOL&#039;d methods and properties. Each can be replaced by setting the appropriate timeout property and handling the timeout error object delivered by WaitForEvent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;Section1&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%; border-collapse: collapse;&amp;quot; class=&amp;quot;MsoTableGrid&amp;quot;&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1pt solid windowtext; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;EOL’d&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Method or Property&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&#039;&#039;&#039;Recommended Replacement&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Quit&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Refactor&amp;lt;/span&amp;gt; script logic to exit the script by other means. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Interfaces&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Functions&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Messages&amp;lt;/span&amp;gt; as appropriate. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.NamedEvents&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitForEventWithTimeout&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() after setting desired timeout using &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitTimeoutPeriod&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.RspTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.CreateTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Add&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.DestroyTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Remove&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Compare_As_C_Values&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.AsyncErrorNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Error notification from asynchronous calls is performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Function.Item&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SMID&amp;lt;/span&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Function.Item&amp;lt;/span&amp;gt;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SUID&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
Please refer to &#039;&#039;&#039;&#039;&#039;Platform Abstraction Layer (PAL) Specification&#039;&#039;&#039;&#039;&#039; for detailed information on new APIs. You may also refer to Linux implementation of PAL, which has been updated with new routines. &lt;br /&gt;
&lt;br /&gt;
*Implement new shared memory routines, palMemSegmentOpen() &amp;amp;amp; palMemSegmentClose(). In case of multi-process target, these routines should implement shared memory using memory-mapped files.&lt;br /&gt;
&lt;br /&gt;
*Runtime now can manage dynamic, configurable, and internal static memory. In case of multi-process target, update palMemAlloc() to simply call _srMem_Allocate() and palMemFree() to simply call _srMem_Free(). In case of single-process target, you can simply allocate dynamic memory according to your Operating System. If you are upgrading, you can simply leave the current implementation as it is.&lt;br /&gt;
&lt;br /&gt;
*Implement new mutex routines, palMutexInit(), palMutexDestroy(), palMutexLock() &amp;amp;amp; palMutexUnlock, to handle any named mutex objects. It is recommended to implement a separate code for shared memory case if it is necessary.&lt;br /&gt;
&lt;br /&gt;
*Remove old routines palProtect(), palUnprotect() and palCriticalErr().&lt;br /&gt;
&lt;br /&gt;
*Implement new routines palGetThreadId() and palGetProcessId().&lt;br /&gt;
&lt;br /&gt;
*Implement new routine palSleep().&lt;br /&gt;
&lt;br /&gt;
*Update synchronization routines, palCreateNID(), palDeleteNID(), palWait() &amp;amp;amp; palNotify(), to support event notifications and in case of multi-process target is enabled, sharing of the synchronization objects among multiple processors.&lt;br /&gt;
&lt;br /&gt;
*If your PAL uses &#039;&#039;S2Mem&#039;&#039; routines for dynamic memory, you should use new Runtime module &#039;&#039;srMem&#039;&#039;. Update palMemAlloc() to call _srMem_Allocate() and palMemFree() to call _srMem_Free().&lt;br /&gt;
&lt;br /&gt;
*Optionally, implement new routine palLog() as a logging utility for PAL and Runtime.&lt;br /&gt;
&lt;br /&gt;
== Runtime  ==&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new memory management (srCFG_MEMORY_MANAGEMENT) and multi-process target (srCFG_MULTI_PROC_TARGET) settings. By default, memory management and multi-process target are disabled. If you enable multi-process target you also need to enable memory management and configure the sizes and the maximum number of memory blocks. New Runtime module &#039;&#039;srMem&#039;&#039; uses these configurations to allocate and manage memory segments.&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new target connection timeout setting (srCFG_CONNECTION_TIMEOUT).&lt;br /&gt;
&lt;br /&gt;
*If target Test Classes and Test Functions are used, change the signature to include test label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
&lt;br /&gt;
== Windows Applications using Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
*The new &#039;&#039;&#039;s2srwin.lib&#039;&#039;&#039; has public API, published in a header srwin.h, containing the following set of routines:&lt;br /&gt;
&lt;br /&gt;
 srWin_SetMaster() - Sets the application as the master and initializes the Stride Runtime thread. In a multi-process environment only one application should make this call.&lt;br /&gt;
 srWin_AddThread() - Adds additional message processing threads to the application.&lt;br /&gt;
 srWin_Run() - Starts the processing and will not return until it has been signaled via keyboard key or CTRL-C.&lt;br /&gt;
 srWin_SetPortTCP() - Overrides the TCP port number (default: 8000) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
 srWin_SetPortSerial() - Overrides the COM port number (default: 1) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
&lt;br /&gt;
*Existing Host Apps developed against the old hostapphrt and hostapptrt libraries should be updated to as follows: &lt;br /&gt;
**replace the include of hostapp.h with include of srwin.h &lt;br /&gt;
**replace all calls to HostAppXXX() with srWin_XXX() &lt;br /&gt;
**call srWin_SetMaster() to start the runtime thread, srThread, before calling srWin_Run(). Within a multi-process target, only one process (the master) calls this routine.&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;a&amp;quot; ==&lt;br /&gt;
* Linux version of the STRIDE [[Build Tools]] is officially introduced.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;b&amp;quot; ==&lt;br /&gt;
* Relaxed [[scl_cast]]() pragma to allow cast from any integral ptr to union of ptrs&lt;br /&gt;
* Fixed compile warnings in Linux PAL.&lt;br /&gt;
* Fixed issue in instrumentation of [[Test Units]].&lt;br /&gt;
* Fixed issue with UNC paths.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0102 ==&lt;br /&gt;
* Implemented new licensing scheme. Existing licenses will not work anymore and need to be reissued. Old and new licenses could co-exist at the same location.&lt;br /&gt;
* The syntax of [[scl_ptr]] and [[scl_ptr_sized]] pragmas has changed. Now it is required to quote the direction and usage attributes. See this [[Handling_of_pointer_attribute_tokens|page]] for details.&lt;br /&gt;
* [[Test_Units#Runtime_Test_Services|Runtime Test Services]] now support adding annotations per test suite.&lt;br /&gt;
* A complete set of [[Samples]] has been implemented.&lt;br /&gt;
* Fixed several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Fixed several minor issues in [[AutoScript]]. &lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0102&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039; and &#039;&#039;&#039;3.01&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8107</id>
		<title>STRIDE 3.0.01xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8107"/>
		<updated>2008-10-15T23:31:17Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* Multi-Process Targets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Release Notes&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
This page documents the changes in STRIDE version 3.0.01xx (code name &#039;&#039;StoneSteps&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note that if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= What&#039;s New  =&lt;br /&gt;
&lt;br /&gt;
Based on customer feedback, in this release we have made significant performance improvements as well as many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Performance Improvements ==&lt;br /&gt;
&lt;br /&gt;
Specific improvements have been made in the following areas: &lt;br /&gt;
&lt;br /&gt;
*Database loading time has been improved &lt;br /&gt;
*Compile times are now shorter &lt;br /&gt;
*Scripting operations involving function and message payloads now perform better, especially when arrays are involved &lt;br /&gt;
*Runtime performance has been improved by optimizing payload serialization and deserialization operations&lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
&lt;br /&gt;
=== SCL Wizard ===&lt;br /&gt;
&lt;br /&gt;
The SCL Wizard functionality in [[STRIDE Studio]] has been extended so that you can now use the tool to qualify message payloads as well as function payloads. &lt;br /&gt;
&lt;br /&gt;
In addition, the following types of qualifications can now be made: &lt;br /&gt;
&lt;br /&gt;
*For payloads that include function pointers, the SCL Wizard now supports qualifying the pointers as such and identifying candidate function values &lt;br /&gt;
*Type casts can now be specified on payload members&lt;br /&gt;
&lt;br /&gt;
=== Connection Management ===&lt;br /&gt;
&lt;br /&gt;
Connection management has been greatly simplified; software managing connection to the target system has been integrated into [[STRIDE Studio]] so that connections can be managed directly from there. (It is still possible to access connection management functionality without using Studio.) &lt;br /&gt;
&lt;br /&gt;
The Panel program is no longer used, and there is no longer a requirement to load the database to communicate with a remote target. &lt;br /&gt;
&lt;br /&gt;
==== Transport Properties ====&lt;br /&gt;
&lt;br /&gt;
All transport properties can now be accessed via scripts. A new transport scripting model makes this possible.&lt;br /&gt;
&lt;br /&gt;
=== STRIDE Studio Test Runner Improvements ===&lt;br /&gt;
&lt;br /&gt;
The test runner in [[STRIDE Studio]] has incorporated several functional and usability improvements. &lt;br /&gt;
&lt;br /&gt;
*Each runnable script and folder (Suite) in a workspace now has additional properties that allow you to optionally specify a handler script that will be executed in the case of an unhandled error (property OnError) or a timeout (property OnTimeout). A timeout value can be set for each folder.&lt;br /&gt;
&lt;br /&gt;
*Each runnable folder (Suite) in a workspace now has a property (OnRunConnect) that can instruct STRIDE Studio to automatically connect to a target system before the folder is executed.&lt;br /&gt;
&lt;br /&gt;
*The workspace now has a dynamic property (ExecutionState) that allows you to alter the order of script execution at runtime.&lt;br /&gt;
&lt;br /&gt;
=== New Frameworks Feature ===&lt;br /&gt;
&lt;br /&gt;
This version introduces [[Using Frameworks|Target Frameworks]], which provide customizable templates for workspace creation. The use of frameworks simplifies the use of STRIDE and ensures consistency across a development team. &lt;br /&gt;
&lt;br /&gt;
Several [[Provided Frameworks|reference frameworks]] are included in this release, supporting the following target environments: &lt;br /&gt;
&lt;br /&gt;
*[[Provided Frameworks#Windows|Windows]] &lt;br /&gt;
*[[Provided Frameworks#Linux|Linux]] &lt;br /&gt;
*[[Provided Frameworks#WinMobile|WinMobile]] &lt;br /&gt;
*[[Provided Frameworks#Generic|Generic]]&lt;br /&gt;
&lt;br /&gt;
[[Using Packages|Packages]] are also introduced. These provide a convenient way to encapsulate SCL-annotated source code and corresponding tests for a set of interfaces. &lt;br /&gt;
&lt;br /&gt;
=== Uploading Results to STRIDE Portal ===&lt;br /&gt;
&lt;br /&gt;
Uploading test results from STRIDE Reporter to STRIDE Portal has been integrated into STRIDE Studio. Portal&#039;s server information can be configured from Studio&#039;s workspace properties while uploading results to Portal can be enabled or disabled via workspace context menu. If enabled, after running the workspace, a script folder or a script file, results in Report file will automatically be uploaded to the configured server. &lt;br /&gt;
&lt;br /&gt;
== Build Tools  ==&lt;br /&gt;
&lt;br /&gt;
A set of new command line [[Build Tools]] has been implemented: &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Stride compiler&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride database binder&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride instrumentation generator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
These utilities has been ported for Windows and Linux. Using them would allow seamless integration with a &amp;quot;make&amp;quot; build environment.&lt;br /&gt;
&lt;br /&gt;
== Target-Based Testing  ==&lt;br /&gt;
&lt;br /&gt;
Target-based (xUnit-style) testing has been simplified. The new set of SCL pragmas [[Test Units]] can now be included in a source file to tell the compiler and IM generator to automatically create test harnessing code.&lt;br /&gt;
&lt;br /&gt;
The automation components STRIDE.testclass, STRIDE.testunit and STRIDE.testfunction are removed.&lt;br /&gt;
&lt;br /&gt;
== Runtime/PAL  ==&lt;br /&gt;
&lt;br /&gt;
Based on customer requirements, in this release we have made significant changes to [[Target_Integration#The STRIDE Runtime|STRIDE Runtime]] and [[Target_Integration#The Platform Abstraction Layer (PAL)|PAL]]. &lt;br /&gt;
&lt;br /&gt;
=== Multi-Process Targets  ===&lt;br /&gt;
&lt;br /&gt;
New routines and support have been added to Runtime and PAL to support multi-process targets. Changes include: implementation of memory management and shared memory, protecting using named Mutex objects, synchronization of multiple processors and multiple threads, and usage of current process and thread IDs.&lt;br /&gt;
&lt;br /&gt;
=== Logging (Optional)  ===&lt;br /&gt;
&lt;br /&gt;
Runtime and PAL use a logging routine that can optionally be implemented in PAL. &lt;br /&gt;
&lt;br /&gt;
== Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
A new [[Windows_Off-Target_SDK|SDK]] for implemention of Off-Target applications on Windows has been packaged. It contains a library (s2srWin.dll/lib) in which the Windows PAL, Runtime, and GRS and a set of utility scripts are prebuilt. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;s2shostapphrt&#039;&#039;&#039; library, a prebuilt verion of the Host Runtime, has been removed. Building Windows applications using the Host Runtime is not supported anymore. The &#039;&#039;&#039;s2shostapptrt&#039;&#039;&#039; library, a prebuilt version of the Target Runtime, has also been removed. &lt;br /&gt;
&lt;br /&gt;
If an upgrade is performed it is strongly recommended that the above mentioned &#039;&#039;&#039;s2shostapp*&#039;&#039;&#039; libraries and their public API header (hostapp.h) be manually removed.&lt;br /&gt;
&lt;br /&gt;
= Support Wiki =&lt;br /&gt;
&lt;br /&gt;
This support wiki http://support.s2technologies.com is introduced with this version. You can navigate here from your web browser, or directly from STRIDE Studio; a link is provided in the Help menu. &lt;br /&gt;
&lt;br /&gt;
== STRIDE Samples  ==&lt;br /&gt;
&lt;br /&gt;
We have created a set of [[Samples_Overview|sample workspaces]] to aid in the evaluation of STRIDE, or as a tool for learning how to apply STRIDE to different testing scenarios. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to STRIDE, or want to learn more about using the product, this is a great place to start.&lt;br /&gt;
&lt;br /&gt;
= Acquiring the Software =&lt;br /&gt;
&lt;br /&gt;
You can download the latest release from the S2 Technologies ftp site: ftp://ftp.s2technologies.com &lt;br /&gt;
&lt;br /&gt;
To run STRIDE you will need a license. If you are not yet a customer of S2 and would like to obtain an evaluation license, email [mailto:sales@s2technologies.com S2 Sales] or call our offices at &#039;&#039;&#039;760-635-2345&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
= Installing the Software  =&lt;br /&gt;
&lt;br /&gt;
To install STRIDE for the first time, or as an upgrade to an existing installation, please refer to [[Host Installation]]. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note that if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you are new to STRIDE, we recommend that you investigate the [[Samples_Overview|New STRIDE Samples]].&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;ascript&#039;&#039;&#039; API has been changed to be more robust: &lt;br /&gt;
**Certain deprecated methods have been eliminated. &lt;br /&gt;
**Some existing methods have had their APIs modifed. &lt;br /&gt;
**The event model has been improved to allow greater script control.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Some scripts must be modified from previous versions of STRIDE to work successfully with 3.0.01xx. The necessary changes are detailed in the [[#Migration_to_3.0.01xx|Migration to 3.0.01xx]] section below. &lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;Panel&#039;&#039;&#039; object is no longer available to scripts; its functionality has been moved under the &#039;&#039;&#039;studio&#039;&#039;&#039; object model. You can access this new functionality as &#039;&#039;&#039;studio.Connection&#039;&#039;&#039;, however if you were formerly scripting the &#039;&#039;&#039;Panel&#039;&#039;&#039; object, you may find it is no longer necessary since: &lt;br /&gt;
**You can now configure your connection properties from within STRIDE Studio (from the menu select &#039;&#039;Tools/Target Connectivity&#039;&#039;) &lt;br /&gt;
**You can now set a workspace folder property to autoconnect upon execution&lt;br /&gt;
&lt;br /&gt;
*Zero is now allowed as the maximum size under certain circumstances in &#039;&#039;&#039;scl_string&#039;&#039;&#039; and &#039;&#039;&#039;scl_ptr_sized&#039;&#039;&#039;. Details of these circumstances are contained in the &#039;&#039;&#039;[[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]]&#039;&#039;&#039; document.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compiler.MicrosoftCompatibility&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Compiler.Compatibility&#039;&#039;&#039;. Valid values are &amp;quot;Generic&amp;quot; (generic mode), &amp;quot;Microsoft&amp;quot; (Microsoft compatibility), or &amp;quot;Gnu&amp;quot; (Gnu or Gcc compatibility).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compile()&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Build()&#039;&#039;&#039;. Also new methods, &#039;&#039;&#039;studio.Workspace.CleanBuild()&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.ReloadDatabase()&#039;&#039;&#039;, have been added.&lt;br /&gt;
&lt;br /&gt;
*A new property, &#039;&#039;&#039;Output&#039;&#039;&#039;, has been added off the studio object. This property outputs text to the Studio message tab, similar to how &#039;&#039;&#039;ascript.MessageBox()&#039;&#039;&#039; works for certain scripts. This property contains one method, &#039;&#039;&#039;PrintMessage(String msg)&#039;&#039;&#039;. You can see an example of its use [[Debugging Helps|here]].&lt;br /&gt;
&lt;br /&gt;
*A new settings group has been introduced - &#039;&#039;&#039;studio.Workspace.Settings.Build&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Intercept.Path&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Intercept.SourcePath&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.Intercept.HeaderPath&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Fixes  ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This section describes defects which have been corrected in STRIDE and the customer tracking number associated with them, if any, in brackets [].&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*[1055] Not able to specifiy uppercase include directory &lt;br /&gt;
*[1163] Certain cases of array of pointers to discriminated unions that were not handled correctly in the ascript object have been fixed. &lt;br /&gt;
*[1357] The ascript &#039;&#039;&#039;Call()&#039;&#039;&#039; method, when used with RspTimeoutPeriod, only returns True if a timeout has occurred. &lt;br /&gt;
*[1469] Global casting using &#039;&#039;&#039;scl_cast&#039;&#039;&#039; no longer causes an intercept module compile error. &lt;br /&gt;
*[1539] &#039;&#039;&#039;ascript&#039;&#039;&#039; no longer returns &amp;quot;undefined&amp;quot; when calling &#039;&#039;&#039;function.ReturnValue&#039;&#039;&#039; when the captured function returns an unqualified function pointer. &lt;br /&gt;
*[1543] IM source file locations added to studio UI and automation &lt;br /&gt;
*[1564] The Studio Add files dialog has been increased from 2K bytes to 100K bytes, to allow for more files to be selected at a time. &lt;br /&gt;
*[1586] Support for Variadic Macros &lt;br /&gt;
*[1597] EDGFront crash for scl_ptr_opaque &lt;br /&gt;
*[1600] Pre-processor treats constant 1 always as 8-bit &lt;br /&gt;
*[1605] Generated Perl script generates error when run in debugger &lt;br /&gt;
*The following statement in Runtime files &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; has been changed:&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args = 0;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;is now&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt; with no initializer. This makes it portable and able to compile under Linux. &lt;br /&gt;
*A macro that determines the existence of &#039;&#039;&#039;vsnprintf()&#039;&#039;&#039; has been updated in &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; in order to make it able to compile with GCC and other non-Microsoft compilers.&amp;lt;br&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; If you are using test functions and C++ test classes, you must be using compilers that support &#039;&#039;&#039;vsnprintf&#039;&#039;&#039; (variable argument lists), which is a standard in C99 and supported in C90. &lt;br /&gt;
*When tracing on a STID it&#039;s possible to display trace information for messages that aren&#039;t captured (i.e. the message&#039;s SMID is not known to STRIDE). A problem could occur when STRIDE attempted to interpret the payload of these messages. This has now been fixed; hex values only are now shown in the trace view for in this situation. &lt;br /&gt;
*Autosense was not working properly in the editor for message payloads. This has been fixed.&lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
=== TestUnits Collection  ===&lt;br /&gt;
&lt;br /&gt;
A new TestUnits collection has been implemented. All test interfaces (specified with [[SCL_Pragmas#Test_Units | Test Unit pragmas]]) will be listed there.&lt;br /&gt;
&lt;br /&gt;
=== Functions Collection  ===&lt;br /&gt;
&lt;br /&gt;
Interfaces specified with either the [[scl_test_class]] or [[scl_test_flist]] pragmas are not listed in the Functions collection anymore. &lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
=== Memory Management  ===&lt;br /&gt;
&lt;br /&gt;
To support multi-process target, memory management support for dynamic, configurable, and internal static memory has been implemented in Runtime. Runtime makes PAL calls to acquire memory segments and manages the memory according to runtime configurations set by user. In case of multi-process target is enabled, these memory will be shared among multiple applications, and PAL should implement shared memory. &lt;br /&gt;
&lt;br /&gt;
=== Protection using Mutex  ===&lt;br /&gt;
&lt;br /&gt;
Runtime now uses named mutex objects to protect critical data from multiple and simultaneous accesses by multiple threads and, in case of multi-process target is enabled, by multiple applications. Runtime makes PAL calls to obtain and control mutex objects. &lt;br /&gt;
&lt;br /&gt;
=== New Routines  ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Memory Management&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In case of multi-process target, recommended approach is to use &amp;lt;u&amp;gt;Memory-Mapped Files&amp;lt;/u&amp;gt; to implement memory segments. &lt;br /&gt;
&lt;br /&gt;
 palMemSegmentOpen() - Open/create memory segment &lt;br /&gt;
 palMemSegmentClose() - Close memory segment&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Named Mutexes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palMutexInit() - Initialize a mutex object&lt;br /&gt;
 palMutexDestroy() - Destroy a mutex object&lt;br /&gt;
 palMutexLock() - Lock a mutex object&lt;br /&gt;
 palMutexUnlock() - Unlock a mutex object&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Task Synchronization&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palGetThreadId() - Get current thread Id&lt;br /&gt;
 palGetProcessId() - Get current process Id&lt;br /&gt;
 palSleep() - Suspend the execution of the current thread&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Logging&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is optional. &lt;br /&gt;
&lt;br /&gt;
 palLog() - Logging utility&lt;br /&gt;
&lt;br /&gt;
=== Updated Routines  ===&lt;br /&gt;
&lt;br /&gt;
*Function signatures and functionalities of palWait() &amp;amp;amp; palNotify() have been updated.&lt;br /&gt;
&lt;br /&gt;
 palWait() - now takes in an in/out pointer for events notification&lt;br /&gt;
 palNotify() - mail box Id has been updated to notify any event including mail box Ids.&lt;br /&gt;
&lt;br /&gt;
*Function signatures of palMemAlloc() &amp;amp;amp; palMemFree() have been updated.&lt;br /&gt;
&lt;br /&gt;
=== Removed Routines  ===&lt;br /&gt;
&lt;br /&gt;
 palProtect&lt;br /&gt;
 palUnprotect&lt;br /&gt;
 palCriticalErr&lt;br /&gt;
&lt;br /&gt;
=== Removed Modules  ===&lt;br /&gt;
&lt;br /&gt;
 S2Mem - Memory module provided as part of PAL has been removed. If native OS does not support dynamic memory, Runtime&#039;s memory management module &#039;&#039;srMem&#039;&#039; can be used instead of &#039;&#039;S2Mem&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
&lt;br /&gt;
*STRIDE Host Release &#039;&#039;&#039;3.0.01xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;. &lt;br /&gt;
*In order to eliminate redundancy and promote an object-oriented design, &amp;quot;Member Methods&amp;quot; have been removed from srTest; only &amp;quot;Member Objects&amp;quot; exist now in srTest. In addition, accessing the functionality of Member Objects in this way is similar to accessing scripting objects through the STRIDE Reporter object model. For a detailed explanation, refer to [[Test_Units#C.2B.2B_Test_Classes|this article]] on the STRIDE Support Wiki. &lt;br /&gt;
*A new routine, &#039;&#039;&#039;srInit()&#039;&#039;&#039;, replaces deprecated &#039;&#039;&#039;srInitialize()&#039;&#039;&#039;. Now the target will not be able to set an auto-connect with timeout. &lt;br /&gt;
*The &#039;&#039;&#039;scl_tp&#039;&#039;&#039; and &#039;&#039;&#039;scl_tp_format&#039;&#039;&#039; pragmas have been deprecated. The new pragmas are &#039;&#039;&#039;scl_tracepoint&#039;&#039;&#039; and &#039;&#039;&#039;scl_tracepoint_format&#039;&#039;&#039;. &lt;br /&gt;
*The default runtime configuration in srcfg.h now has fragmentation turned on. The srCFG_MAX_TRANSPORT_UNIT is set to 2048. &lt;br /&gt;
*Fixed warnings for parameter name differences in function declarations and definitions for srSubscribe(), srTracePoint(), and srQuerySMID(). &lt;br /&gt;
*Removed unnecessary/extra response to srCONNECT_CLOSE_T_SMID message. &lt;br /&gt;
*The Runtime now checks for the connection before responding with a &amp;quot;Pong&amp;quot; upon receiving a &amp;quot;Ping.&amp;quot; &lt;br /&gt;
*Introduced 40 additional system trace points to better describe internal errors. &lt;br /&gt;
*Reporting of the error srERR_SUB_NONE has been suppressed so that it no longer generates a target trace error. &lt;br /&gt;
*Trace views now always display srTraceStr() with reserved STID (srSTID_RESERVED) regardless of trace filter settings. &lt;br /&gt;
*srPtrSetupChild() now accepts NULL for handle (out pointer - pwHandle). &lt;br /&gt;
*Added a new Runtime Test Services (RTS) API &#039;&#039;&#039;srTestCaseSetStatusEx()&#039;&#039;&#039;, which enables the providing of the actual return value of a numeric test method in the case of failure. &lt;br /&gt;
*Added two new public APIs - &amp;quot;Printing&amp;quot; APIs to display messages on Trace Views without having to specify a STID or a trace level and to set any trace filters on Trace Views. These routines support formatted strings with variable arguments. The &#039;&#039;&#039;srPrintInfo()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and Level=3. The &#039;&#039;&#039;srPrintError()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and the Level=1. &#039;&#039;&#039;Warning:&#039;&#039;&#039; These new APIs use vsnprintf() routine to process variable arguments. The vsnprintf() became a standard in C99 and is supported in C90. &lt;br /&gt;
*To support multi-process target, significant changes have been made to runtime. &lt;br /&gt;
*A new public routine, srUninit(), has been added to sr.h &amp;amp;amp; srapi.c. &lt;br /&gt;
* A new public routine for Runtime Thread exit point, srThreadUninit(), has been added to sr.h &amp;amp;amp; srthread.c. &lt;br /&gt;
*A new module, srMem, for Memory Management has been added. Its new routines, _srMem_Allocate() &amp;amp;amp; _srMem_Free(), will be used in PAL&#039;s palMemAlloc() &amp;amp;amp; palMemFree() in case of multi-process target is enabled. &lt;br /&gt;
*Calls to palProtect() &amp;amp;amp; palUnprotect() have been replaced by new routines _srProtect() &amp;amp;amp; _srUnprotect(), in which the implementation uses its own mutex object that calls PAL&#039;s mutex routines. &lt;br /&gt;
*In target Test Classes and Test Functions, added capability to specify the comment label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
* Fixed a potential data abort issue when executing delegate code in the IM prior to Runtime being initialized.&lt;br /&gt;
* Runtime Test Services APIs are now thread safe. &lt;br /&gt;
* Fixed cancelation of remote boadcast subcribtion goes in an infinite loop.&lt;br /&gt;
* Fixed Runtime resource abuse when sending lots of broadcast messages. &lt;br /&gt;
* Added partial check for message payload corectness.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapi.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srconn.h&lt;br /&gt;
 srerr.c&lt;br /&gt;
 srib.c&lt;br /&gt;
 srib.h&lt;br /&gt;
 sribctrl.c&lt;br /&gt;
 sribtr.c&lt;br /&gt;
 sribtr.h&lt;br /&gt;
 srmsgmar.c&lt;br /&gt;
 srmsgptr.c&lt;br /&gt;
 srmsgptr.h&lt;br /&gt;
 srmsgque.c&lt;br /&gt;
 srmsgque.h&lt;br /&gt;
 srmsgrt.c&lt;br /&gt;
 srmsgrt.h&lt;br /&gt;
 srmsgsub.c&lt;br /&gt;
 srmsgsub.h&lt;br /&gt;
 srstid.c&lt;br /&gt;
 srstid.h&lt;br /&gt;
 srsuid.c&lt;br /&gt;
 srsuid.h&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
 srtestutil.c&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srthread.c&lt;br /&gt;
 srthread.h&lt;br /&gt;
 srtime.c&lt;br /&gt;
 srtime.h&lt;br /&gt;
 srtp.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been added:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srmem.c&lt;br /&gt;
 srmem.h&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.01xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
Any use of test classes through the Functions collection, like: &lt;br /&gt;
&lt;br /&gt;
$main::ascript-&amp;amp;gt;Functions-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;User-&amp;amp;gt;Call(); &lt;br /&gt;
&lt;br /&gt;
should be converted to use the new TestUnits collection: &lt;br /&gt;
&lt;br /&gt;
$main::ascript-&amp;amp;gt;TestUnits-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;Run(); &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== API Changes  ===&lt;br /&gt;
&lt;br /&gt;
*The Support Wiki pages now contain reference help for AutoScript. The content has been updated to reflect the API changes, for details see the &#039;&#039;AutoScript API Reference&#039;&#039;. &lt;br /&gt;
*All synchronous method calls now throw exceptions in order to indicate error conditions rather than have error conditions encoded in return values. &lt;br /&gt;
*Asychronous method calls never throw exceptions to indicate error conditions. Instead, error conditions are delivered as a new Error object that is returned to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039;. (Asynchronous methods are &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;) &lt;br /&gt;
*If &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; times out, an Error object is returned. Previously NULL was returned in this case. &lt;br /&gt;
*All objects returned by &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; have &#039;&#039;&#039;Type&#039;&#039;&#039; and &#039;&#039;&#039;Name&#039;&#039;&#039; properties. When the &#039;&#039;&#039;Type&#039;&#039;&#039; is “Error”, the Error object has additional properties that contain further details about the error. &lt;br /&gt;
*All existing script syntax for designation of message payloads has been deprecated. A new syntax that allows for greater expression has been adopted. Details can be found [[Updated Message Payload Syntax|here]]. There are no syntax changes to function payloads. &lt;br /&gt;
*The signature for &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; has been changed. Successful calls to &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; now fully initialize the object.&lt;br /&gt;
&lt;br /&gt;
=== End-Of-Lifed Methods and Properties  ===&lt;br /&gt;
&lt;br /&gt;
The following have been End-Of-Lifed (EOL&#039;d). A call to any of these methods or an access to any of these properties will now result in a not-implemented exception in the script making the call or access. &lt;br /&gt;
&lt;br /&gt;
*ascript.Quit() &lt;br /&gt;
*ascript.Interfaces &lt;br /&gt;
*ascript.NamedEvents &lt;br /&gt;
*ascript.WaitForEventWithTimeout &lt;br /&gt;
*ascript.RspTimeoutNotifyEnabled &lt;br /&gt;
*ascript.CreateTimer() &lt;br /&gt;
*ascript.DestroyTimer() &lt;br /&gt;
*ascript.WaitTimeoutNotifyEnabled &lt;br /&gt;
*ascript.Compare_As_C_Values() &lt;br /&gt;
*ascript.AsyncErrorNotifyEnabled &lt;br /&gt;
*ascript.Function.Item().User/Owner.SMID&lt;br /&gt;
&lt;br /&gt;
=== Recommended Steps for Migration From a Previous Version  ===&lt;br /&gt;
&lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; in all scripts. Previous logic to test for null indicating timeouts must be modified. &#039;&#039;&#039;WaitForEvent()&#039;&#039;&#039; now always returns an object, in the case of a timeout (or other error) an Error object is returned. &lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.Quit&#039;&#039;&#039; in all scripts. Modify the logic as necessary to exit the script by other means in place of the original &#039;&#039;&#039;Quit()&#039;&#039;&#039; call. &lt;br /&gt;
*Search for all asynchronous method calls (Asynchronous calls are limited to &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;). Modify the logic as necessary to call &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; if errors (including timeout error) should be detected. &lt;br /&gt;
*If you have scripts that explicitly instantiate an &#039;&#039;&#039;ascript&#039;&#039;&#039; object (i.e. they create an object using the &#039;&#039;&#039;&amp;quot;STRIDE.ascript&amp;quot;&#039;&#039;&#039; PROGID), search for all occurrences and modify the subsequent call to &#039;&#039;&#039;ascript.Initialize()&#039;&#039;&#039; to pass the new parameter set. &lt;br /&gt;
*Search for all EOL&#039;d methods and properties. Each can be replaced by setting the appropriate timeout property and handling the timeout error object delivered by WaitForEvent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;Section1&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%; border-collapse: collapse;&amp;quot; class=&amp;quot;MsoTableGrid&amp;quot;&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1pt solid windowtext; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;EOL’d&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Method or Property&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&#039;&#039;&#039;Recommended Replacement&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Quit&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Refactor&amp;lt;/span&amp;gt; script logic to exit the script by other means. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Interfaces&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Functions&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Messages&amp;lt;/span&amp;gt; as appropriate. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.NamedEvents&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitForEventWithTimeout&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() after setting desired timeout using &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitTimeoutPeriod&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.RspTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.CreateTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Add&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.DestroyTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Remove&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Compare_As_C_Values&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.AsyncErrorNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Error notification from asynchronous calls is performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Function.Item&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SMID&amp;lt;/span&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Function.Item&amp;lt;/span&amp;gt;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SUID&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
Please refer to &#039;&#039;&#039;&#039;&#039;Platform Abstraction Layer (PAL) Specification&#039;&#039;&#039;&#039;&#039; for detailed information on new APIs. You may also refer to Linux implementation of PAL, which has been updated with new routines. &lt;br /&gt;
&lt;br /&gt;
*Implement new shared memory routines, palMemSegmentOpen() &amp;amp;amp; palMemSegmentClose(). In case of multi-process target, these routines should implement shared memory using memory-mapped files.&lt;br /&gt;
&lt;br /&gt;
*Runtime now can manage dynamic, configurable, and internal static memory. In case of multi-process target, update palMemAlloc() to simply call _srMem_Allocate() and palMemFree() to simply call _srMem_Free(). In case of single-process target, you can simply allocate dynamic memory according to your Operating System. If you are upgrading, you can simply leave the current implementation as it is.&lt;br /&gt;
&lt;br /&gt;
*Implement new mutex routines, palMutexInit(), palMutexDestroy(), palMutexLock() &amp;amp;amp; palMutexUnlock, to handle any named mutex objects. It is recommended to implement a separate code for shared memory case if it is necessary.&lt;br /&gt;
&lt;br /&gt;
*Remove old routines palProtect(), palUnprotect() and palCriticalErr().&lt;br /&gt;
&lt;br /&gt;
*Implement new routines palGetThreadId() and palGetProcessId().&lt;br /&gt;
&lt;br /&gt;
*Implement new routine palSleep().&lt;br /&gt;
&lt;br /&gt;
*Update synchronization routines, palCreateNID(), palDeleteNID(), palWait() &amp;amp;amp; palNotify(), to support event notifications and in case of multi-process target is enabled, sharing of the synchronization objects among multiple processors.&lt;br /&gt;
&lt;br /&gt;
*If your PAL uses &#039;&#039;S2Mem&#039;&#039; routines for dynamic memory, you should use new Runtime module &#039;&#039;srMem&#039;&#039;. Update palMemAlloc() to call _srMem_Allocate() and palMemFree() to call _srMem_Free().&lt;br /&gt;
&lt;br /&gt;
*Optionally, implement new routine palLog() as a logging utility for PAL and Runtime.&lt;br /&gt;
&lt;br /&gt;
== Runtime  ==&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new memory management (srCFG_MEMORY_MANAGEMENT) and multi-process target (srCFG_MULTI_PROC_TARGET) settings. By default, memory management and multi-process target are disabled. If you enable multi-process target you also need to enable memory management and configure the sizes and the maximum number of memory blocks. New Runtime module &#039;&#039;srMem&#039;&#039; uses these configurations to allocate and manage memory segments.&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new target connection timeout setting (srCFG_CONNECTION_TIMEOUT).&lt;br /&gt;
&lt;br /&gt;
*If target Test Classes and Test Functions are used, change the signature to include test label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
&lt;br /&gt;
== Windows Applications using Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
*The new &#039;&#039;&#039;s2srwin.lib&#039;&#039;&#039; has public API, published in a header srwin.h, containing the following set of routines:&lt;br /&gt;
&lt;br /&gt;
 srWin_SetMaster() - Sets the application as the master and initializes the Stride Runtime thread. In a multi-process environment only one application should make this call.&lt;br /&gt;
 srWin_AddThread() - Adds additional message processing threads to the application.&lt;br /&gt;
 srWin_Run() - Starts the processing and will not return until it has been signaled via keyboard key or CTRL-C.&lt;br /&gt;
 srWin_SetPortTCP() - Overrides the TCP port number (default: 8000) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
 srWin_SetPortSerial() - Overrides the COM port number (default: 1) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
&lt;br /&gt;
*Existing Host Apps developed against the old hostapphrt and hostapptrt libraries should be updated to as follows: &lt;br /&gt;
**replace the include of hostapp.h with include of srwin.h &lt;br /&gt;
**replace all calls to HostAppXXX() with srWin_XXX() &lt;br /&gt;
**call srWin_SetMaster() to start the runtime thread, srThread, before calling srWin_Run(). Within a multi-process target, only one process (the master) calls this routine.&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;a&amp;quot; ==&lt;br /&gt;
* Linux version of the STRIDE [[Build Tools]] is officially introduced.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;b&amp;quot; ==&lt;br /&gt;
* Relaxed [[scl_cast]]() pragma to allow cast from any integral ptr to union of ptrs&lt;br /&gt;
* Fixed compile warnings in Linux PAL.&lt;br /&gt;
* Fixed issue in instrumentation of [[Test Units]].&lt;br /&gt;
* Fixed issue with UNC paths.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0102 ==&lt;br /&gt;
* Implemented new licensing scheme. Existing licenses will not work anymore and need to be reissued. Old and new licenses could co-exist at the same location.&lt;br /&gt;
* The syntax of [[scl_ptr]] and [[scl_ptr_sized]] pragmas has changed. Now it is required to quote the direction and usage attributes. See this [[Handling_of_pointer_attribute_tokens|page]] for details.&lt;br /&gt;
* [[Test_Units#Runtime_Test_Services|Runtime Test Services]] now support adding annotations per test suite.&lt;br /&gt;
* A complete set of [[Samples]] has been implemented.&lt;br /&gt;
* Fixed several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Fixed several minor issues in [[AutoScript]]. &lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0102&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039; and &#039;&#039;&#039;3.01&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8106</id>
		<title>STRIDE 3.0.01xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8106"/>
		<updated>2008-10-15T23:30:25Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* Multi-Process Targets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Release Notes&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
This page documents the changes in STRIDE version 3.0.01xx (code name &#039;&#039;StoneSteps&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note that if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= What&#039;s New  =&lt;br /&gt;
&lt;br /&gt;
Based on customer feedback, in this release we have made significant performance improvements as well as many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Performance Improvements ==&lt;br /&gt;
&lt;br /&gt;
Specific improvements have been made in the following areas: &lt;br /&gt;
&lt;br /&gt;
*Database loading time has been improved &lt;br /&gt;
*Compile times are now shorter &lt;br /&gt;
*Scripting operations involving function and message payloads now perform better, especially when arrays are involved &lt;br /&gt;
*Runtime performance has been improved by optimizing payload serialization and deserialization operations&lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
&lt;br /&gt;
=== SCL Wizard ===&lt;br /&gt;
&lt;br /&gt;
The SCL Wizard functionality in [[STRIDE Studio]] has been extended so that you can now use the tool to qualify message payloads as well as function payloads. &lt;br /&gt;
&lt;br /&gt;
In addition, the following types of qualifications can now be made: &lt;br /&gt;
&lt;br /&gt;
*For payloads that include function pointers, the SCL Wizard now supports qualifying the pointers as such and identifying candidate function values &lt;br /&gt;
*Type casts can now be specified on payload members&lt;br /&gt;
&lt;br /&gt;
=== Connection Management ===&lt;br /&gt;
&lt;br /&gt;
Connection management has been greatly simplified; software managing connection to the target system has been integrated into [[STRIDE Studio]] so that connections can be managed directly from there. (It is still possible to access connection management functionality without using Studio.) &lt;br /&gt;
&lt;br /&gt;
The Panel program is no longer used, and there is no longer a requirement to load the database to communicate with a remote target. &lt;br /&gt;
&lt;br /&gt;
==== Transport Properties ====&lt;br /&gt;
&lt;br /&gt;
All transport properties can now be accessed via scripts. A new transport scripting model makes this possible.&lt;br /&gt;
&lt;br /&gt;
=== STRIDE Studio Test Runner Improvements ===&lt;br /&gt;
&lt;br /&gt;
The test runner in [[STRIDE Studio]] has incorporated several functional and usability improvements. &lt;br /&gt;
&lt;br /&gt;
*Each runnable script and folder (Suite) in a workspace now has additional properties that allow you to optionally specify a handler script that will be executed in the case of an unhandled error (property OnError) or a timeout (property OnTimeout). A timeout value can be set for each folder.&lt;br /&gt;
&lt;br /&gt;
*Each runnable folder (Suite) in a workspace now has a property (OnRunConnect) that can instruct STRIDE Studio to automatically connect to a target system before the folder is executed.&lt;br /&gt;
&lt;br /&gt;
*The workspace now has a dynamic property (ExecutionState) that allows you to alter the order of script execution at runtime.&lt;br /&gt;
&lt;br /&gt;
=== New Frameworks Feature ===&lt;br /&gt;
&lt;br /&gt;
This version introduces [[Using Frameworks|Target Frameworks]], which provide customizable templates for workspace creation. The use of frameworks simplifies the use of STRIDE and ensures consistency across a development team. &lt;br /&gt;
&lt;br /&gt;
Several [[Provided Frameworks|reference frameworks]] are included in this release, supporting the following target environments: &lt;br /&gt;
&lt;br /&gt;
*[[Provided Frameworks#Windows|Windows]] &lt;br /&gt;
*[[Provided Frameworks#Linux|Linux]] &lt;br /&gt;
*[[Provided Frameworks#WinMobile|WinMobile]] &lt;br /&gt;
*[[Provided Frameworks#Generic|Generic]]&lt;br /&gt;
&lt;br /&gt;
[[Using Packages|Packages]] are also introduced. These provide a convenient way to encapsulate SCL-annotated source code and corresponding tests for a set of interfaces. &lt;br /&gt;
&lt;br /&gt;
=== Uploading Results to STRIDE Portal ===&lt;br /&gt;
&lt;br /&gt;
Uploading test results from STRIDE Reporter to STRIDE Portal has been integrated into STRIDE Studio. Portal&#039;s server information can be configured from Studio&#039;s workspace properties while uploading results to Portal can be enabled or disabled via workspace context menu. If enabled, after running the workspace, a script folder or a script file, results in Report file will automatically be uploaded to the configured server. &lt;br /&gt;
&lt;br /&gt;
== Build Tools  ==&lt;br /&gt;
&lt;br /&gt;
A set of new command line [[Build Tools]] has been implemented: &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Stride compiler&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride database binder&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride instrumentation generator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
These utilities has been ported for Windows and Linux. Using them would allow seamless integration with a &amp;quot;make&amp;quot; build environment.&lt;br /&gt;
&lt;br /&gt;
== Target-Based Testing  ==&lt;br /&gt;
&lt;br /&gt;
Target-based (xUnit-style) testing has been simplified. The new set of SCL pragmas [[Test Units]] can now be included in a source file to tell the compiler and IM generator to automatically create test harnessing code.&lt;br /&gt;
&lt;br /&gt;
The automation components STRIDE.testclass, STRIDE.testunit and STRIDE.testfunction are removed.&lt;br /&gt;
&lt;br /&gt;
== Runtime/PAL  ==&lt;br /&gt;
&lt;br /&gt;
Based on customer requirements, in this release we have made significant changes to [[Target_Integration#The STRIDE Runtime|STRIDE Runtime]] and [[Target_Integration#The Platform Abstraction Layer (PAL)|PAL]]. &lt;br /&gt;
&lt;br /&gt;
=== Multi-Process Targets  ===&lt;br /&gt;
&lt;br /&gt;
New routines and support have been added to Runtime and PAL to support multi-process targets. Changes include implementation of memory management and shared memory, protecting using named Mutex objects, synchronization of multiple processors and multiple threads, and usage of current process and thread IDs.&lt;br /&gt;
&lt;br /&gt;
=== Logging (Optional)  ===&lt;br /&gt;
&lt;br /&gt;
Runtime and PAL use a logging routine that can optionally be implemented in PAL. &lt;br /&gt;
&lt;br /&gt;
== Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
A new [[Windows_Off-Target_SDK|SDK]] for implemention of Off-Target applications on Windows has been packaged. It contains a library (s2srWin.dll/lib) in which the Windows PAL, Runtime, and GRS and a set of utility scripts are prebuilt. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;s2shostapphrt&#039;&#039;&#039; library, a prebuilt verion of the Host Runtime, has been removed. Building Windows applications using the Host Runtime is not supported anymore. The &#039;&#039;&#039;s2shostapptrt&#039;&#039;&#039; library, a prebuilt version of the Target Runtime, has also been removed. &lt;br /&gt;
&lt;br /&gt;
If an upgrade is performed it is strongly recommended that the above mentioned &#039;&#039;&#039;s2shostapp*&#039;&#039;&#039; libraries and their public API header (hostapp.h) be manually removed.&lt;br /&gt;
&lt;br /&gt;
= Support Wiki =&lt;br /&gt;
&lt;br /&gt;
This support wiki http://support.s2technologies.com is introduced with this version. You can navigate here from your web browser, or directly from STRIDE Studio; a link is provided in the Help menu. &lt;br /&gt;
&lt;br /&gt;
== STRIDE Samples  ==&lt;br /&gt;
&lt;br /&gt;
We have created a set of [[Samples_Overview|sample workspaces]] to aid in the evaluation of STRIDE, or as a tool for learning how to apply STRIDE to different testing scenarios. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to STRIDE, or want to learn more about using the product, this is a great place to start.&lt;br /&gt;
&lt;br /&gt;
= Acquiring the Software =&lt;br /&gt;
&lt;br /&gt;
You can download the latest release from the S2 Technologies ftp site: ftp://ftp.s2technologies.com &lt;br /&gt;
&lt;br /&gt;
To run STRIDE you will need a license. If you are not yet a customer of S2 and would like to obtain an evaluation license, email [mailto:sales@s2technologies.com S2 Sales] or call our offices at &#039;&#039;&#039;760-635-2345&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
= Installing the Software  =&lt;br /&gt;
&lt;br /&gt;
To install STRIDE for the first time, or as an upgrade to an existing installation, please refer to [[Host Installation]]. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note that if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you are new to STRIDE, we recommend that you investigate the [[Samples_Overview|New STRIDE Samples]].&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;ascript&#039;&#039;&#039; API has been changed to be more robust: &lt;br /&gt;
**Certain deprecated methods have been eliminated. &lt;br /&gt;
**Some existing methods have had their APIs modifed. &lt;br /&gt;
**The event model has been improved to allow greater script control.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Some scripts must be modified from previous versions of STRIDE to work successfully with 3.0.01xx. The necessary changes are detailed in the [[#Migration_to_3.0.01xx|Migration to 3.0.01xx]] section below. &lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;Panel&#039;&#039;&#039; object is no longer available to scripts; its functionality has been moved under the &#039;&#039;&#039;studio&#039;&#039;&#039; object model. You can access this new functionality as &#039;&#039;&#039;studio.Connection&#039;&#039;&#039;, however if you were formerly scripting the &#039;&#039;&#039;Panel&#039;&#039;&#039; object, you may find it is no longer necessary since: &lt;br /&gt;
**You can now configure your connection properties from within STRIDE Studio (from the menu select &#039;&#039;Tools/Target Connectivity&#039;&#039;) &lt;br /&gt;
**You can now set a workspace folder property to autoconnect upon execution&lt;br /&gt;
&lt;br /&gt;
*Zero is now allowed as the maximum size under certain circumstances in &#039;&#039;&#039;scl_string&#039;&#039;&#039; and &#039;&#039;&#039;scl_ptr_sized&#039;&#039;&#039;. Details of these circumstances are contained in the &#039;&#039;&#039;[[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]]&#039;&#039;&#039; document.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compiler.MicrosoftCompatibility&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Compiler.Compatibility&#039;&#039;&#039;. Valid values are &amp;quot;Generic&amp;quot; (generic mode), &amp;quot;Microsoft&amp;quot; (Microsoft compatibility), or &amp;quot;Gnu&amp;quot; (Gnu or Gcc compatibility).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compile()&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Build()&#039;&#039;&#039;. Also new methods, &#039;&#039;&#039;studio.Workspace.CleanBuild()&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.ReloadDatabase()&#039;&#039;&#039;, have been added.&lt;br /&gt;
&lt;br /&gt;
*A new property, &#039;&#039;&#039;Output&#039;&#039;&#039;, has been added off the studio object. This property outputs text to the Studio message tab, similar to how &#039;&#039;&#039;ascript.MessageBox()&#039;&#039;&#039; works for certain scripts. This property contains one method, &#039;&#039;&#039;PrintMessage(String msg)&#039;&#039;&#039;. You can see an example of its use [[Debugging Helps|here]].&lt;br /&gt;
&lt;br /&gt;
*A new settings group has been introduced - &#039;&#039;&#039;studio.Workspace.Settings.Build&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Intercept.Path&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Intercept.SourcePath&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.Intercept.HeaderPath&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Fixes  ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This section describes defects which have been corrected in STRIDE and the customer tracking number associated with them, if any, in brackets [].&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*[1055] Not able to specifiy uppercase include directory &lt;br /&gt;
*[1163] Certain cases of array of pointers to discriminated unions that were not handled correctly in the ascript object have been fixed. &lt;br /&gt;
*[1357] The ascript &#039;&#039;&#039;Call()&#039;&#039;&#039; method, when used with RspTimeoutPeriod, only returns True if a timeout has occurred. &lt;br /&gt;
*[1469] Global casting using &#039;&#039;&#039;scl_cast&#039;&#039;&#039; no longer causes an intercept module compile error. &lt;br /&gt;
*[1539] &#039;&#039;&#039;ascript&#039;&#039;&#039; no longer returns &amp;quot;undefined&amp;quot; when calling &#039;&#039;&#039;function.ReturnValue&#039;&#039;&#039; when the captured function returns an unqualified function pointer. &lt;br /&gt;
*[1543] IM source file locations added to studio UI and automation &lt;br /&gt;
*[1564] The Studio Add files dialog has been increased from 2K bytes to 100K bytes, to allow for more files to be selected at a time. &lt;br /&gt;
*[1586] Support for Variadic Macros &lt;br /&gt;
*[1597] EDGFront crash for scl_ptr_opaque &lt;br /&gt;
*[1600] Pre-processor treats constant 1 always as 8-bit &lt;br /&gt;
*[1605] Generated Perl script generates error when run in debugger &lt;br /&gt;
*The following statement in Runtime files &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; has been changed:&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args = 0;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;is now&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt; with no initializer. This makes it portable and able to compile under Linux. &lt;br /&gt;
*A macro that determines the existence of &#039;&#039;&#039;vsnprintf()&#039;&#039;&#039; has been updated in &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; in order to make it able to compile with GCC and other non-Microsoft compilers.&amp;lt;br&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; If you are using test functions and C++ test classes, you must be using compilers that support &#039;&#039;&#039;vsnprintf&#039;&#039;&#039; (variable argument lists), which is a standard in C99 and supported in C90. &lt;br /&gt;
*When tracing on a STID it&#039;s possible to display trace information for messages that aren&#039;t captured (i.e. the message&#039;s SMID is not known to STRIDE). A problem could occur when STRIDE attempted to interpret the payload of these messages. This has now been fixed; hex values only are now shown in the trace view for in this situation. &lt;br /&gt;
*Autosense was not working properly in the editor for message payloads. This has been fixed.&lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
=== TestUnits Collection  ===&lt;br /&gt;
&lt;br /&gt;
A new TestUnits collection has been implemented. All test interfaces (specified with [[SCL_Pragmas#Test_Units | Test Unit pragmas]]) will be listed there.&lt;br /&gt;
&lt;br /&gt;
=== Functions Collection  ===&lt;br /&gt;
&lt;br /&gt;
Interfaces specified with either the [[scl_test_class]] or [[scl_test_flist]] pragmas are not listed in the Functions collection anymore. &lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
=== Memory Management  ===&lt;br /&gt;
&lt;br /&gt;
To support multi-process target, memory management support for dynamic, configurable, and internal static memory has been implemented in Runtime. Runtime makes PAL calls to acquire memory segments and manages the memory according to runtime configurations set by user. In case of multi-process target is enabled, these memory will be shared among multiple applications, and PAL should implement shared memory. &lt;br /&gt;
&lt;br /&gt;
=== Protection using Mutex  ===&lt;br /&gt;
&lt;br /&gt;
Runtime now uses named mutex objects to protect critical data from multiple and simultaneous accesses by multiple threads and, in case of multi-process target is enabled, by multiple applications. Runtime makes PAL calls to obtain and control mutex objects. &lt;br /&gt;
&lt;br /&gt;
=== New Routines  ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Memory Management&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In case of multi-process target, recommended approach is to use &amp;lt;u&amp;gt;Memory-Mapped Files&amp;lt;/u&amp;gt; to implement memory segments. &lt;br /&gt;
&lt;br /&gt;
 palMemSegmentOpen() - Open/create memory segment &lt;br /&gt;
 palMemSegmentClose() - Close memory segment&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Named Mutexes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palMutexInit() - Initialize a mutex object&lt;br /&gt;
 palMutexDestroy() - Destroy a mutex object&lt;br /&gt;
 palMutexLock() - Lock a mutex object&lt;br /&gt;
 palMutexUnlock() - Unlock a mutex object&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Task Synchronization&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palGetThreadId() - Get current thread Id&lt;br /&gt;
 palGetProcessId() - Get current process Id&lt;br /&gt;
 palSleep() - Suspend the execution of the current thread&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Logging&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is optional. &lt;br /&gt;
&lt;br /&gt;
 palLog() - Logging utility&lt;br /&gt;
&lt;br /&gt;
=== Updated Routines  ===&lt;br /&gt;
&lt;br /&gt;
*Function signatures and functionalities of palWait() &amp;amp;amp; palNotify() have been updated.&lt;br /&gt;
&lt;br /&gt;
 palWait() - now takes in an in/out pointer for events notification&lt;br /&gt;
 palNotify() - mail box Id has been updated to notify any event including mail box Ids.&lt;br /&gt;
&lt;br /&gt;
*Function signatures of palMemAlloc() &amp;amp;amp; palMemFree() have been updated.&lt;br /&gt;
&lt;br /&gt;
=== Removed Routines  ===&lt;br /&gt;
&lt;br /&gt;
 palProtect&lt;br /&gt;
 palUnprotect&lt;br /&gt;
 palCriticalErr&lt;br /&gt;
&lt;br /&gt;
=== Removed Modules  ===&lt;br /&gt;
&lt;br /&gt;
 S2Mem - Memory module provided as part of PAL has been removed. If native OS does not support dynamic memory, Runtime&#039;s memory management module &#039;&#039;srMem&#039;&#039; can be used instead of &#039;&#039;S2Mem&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
&lt;br /&gt;
*STRIDE Host Release &#039;&#039;&#039;3.0.01xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;. &lt;br /&gt;
*In order to eliminate redundancy and promote an object-oriented design, &amp;quot;Member Methods&amp;quot; have been removed from srTest; only &amp;quot;Member Objects&amp;quot; exist now in srTest. In addition, accessing the functionality of Member Objects in this way is similar to accessing scripting objects through the STRIDE Reporter object model. For a detailed explanation, refer to [[Test_Units#C.2B.2B_Test_Classes|this article]] on the STRIDE Support Wiki. &lt;br /&gt;
*A new routine, &#039;&#039;&#039;srInit()&#039;&#039;&#039;, replaces deprecated &#039;&#039;&#039;srInitialize()&#039;&#039;&#039;. Now the target will not be able to set an auto-connect with timeout. &lt;br /&gt;
*The &#039;&#039;&#039;scl_tp&#039;&#039;&#039; and &#039;&#039;&#039;scl_tp_format&#039;&#039;&#039; pragmas have been deprecated. The new pragmas are &#039;&#039;&#039;scl_tracepoint&#039;&#039;&#039; and &#039;&#039;&#039;scl_tracepoint_format&#039;&#039;&#039;. &lt;br /&gt;
*The default runtime configuration in srcfg.h now has fragmentation turned on. The srCFG_MAX_TRANSPORT_UNIT is set to 2048. &lt;br /&gt;
*Fixed warnings for parameter name differences in function declarations and definitions for srSubscribe(), srTracePoint(), and srQuerySMID(). &lt;br /&gt;
*Removed unnecessary/extra response to srCONNECT_CLOSE_T_SMID message. &lt;br /&gt;
*The Runtime now checks for the connection before responding with a &amp;quot;Pong&amp;quot; upon receiving a &amp;quot;Ping.&amp;quot; &lt;br /&gt;
*Introduced 40 additional system trace points to better describe internal errors. &lt;br /&gt;
*Reporting of the error srERR_SUB_NONE has been suppressed so that it no longer generates a target trace error. &lt;br /&gt;
*Trace views now always display srTraceStr() with reserved STID (srSTID_RESERVED) regardless of trace filter settings. &lt;br /&gt;
*srPtrSetupChild() now accepts NULL for handle (out pointer - pwHandle). &lt;br /&gt;
*Added a new Runtime Test Services (RTS) API &#039;&#039;&#039;srTestCaseSetStatusEx()&#039;&#039;&#039;, which enables the providing of the actual return value of a numeric test method in the case of failure. &lt;br /&gt;
*Added two new public APIs - &amp;quot;Printing&amp;quot; APIs to display messages on Trace Views without having to specify a STID or a trace level and to set any trace filters on Trace Views. These routines support formatted strings with variable arguments. The &#039;&#039;&#039;srPrintInfo()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and Level=3. The &#039;&#039;&#039;srPrintError()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and the Level=1. &#039;&#039;&#039;Warning:&#039;&#039;&#039; These new APIs use vsnprintf() routine to process variable arguments. The vsnprintf() became a standard in C99 and is supported in C90. &lt;br /&gt;
*To support multi-process target, significant changes have been made to runtime. &lt;br /&gt;
*A new public routine, srUninit(), has been added to sr.h &amp;amp;amp; srapi.c. &lt;br /&gt;
* A new public routine for Runtime Thread exit point, srThreadUninit(), has been added to sr.h &amp;amp;amp; srthread.c. &lt;br /&gt;
*A new module, srMem, for Memory Management has been added. Its new routines, _srMem_Allocate() &amp;amp;amp; _srMem_Free(), will be used in PAL&#039;s palMemAlloc() &amp;amp;amp; palMemFree() in case of multi-process target is enabled. &lt;br /&gt;
*Calls to palProtect() &amp;amp;amp; palUnprotect() have been replaced by new routines _srProtect() &amp;amp;amp; _srUnprotect(), in which the implementation uses its own mutex object that calls PAL&#039;s mutex routines. &lt;br /&gt;
*In target Test Classes and Test Functions, added capability to specify the comment label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
* Fixed a potential data abort issue when executing delegate code in the IM prior to Runtime being initialized.&lt;br /&gt;
* Runtime Test Services APIs are now thread safe. &lt;br /&gt;
* Fixed cancelation of remote boadcast subcribtion goes in an infinite loop.&lt;br /&gt;
* Fixed Runtime resource abuse when sending lots of broadcast messages. &lt;br /&gt;
* Added partial check for message payload corectness.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapi.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srconn.h&lt;br /&gt;
 srerr.c&lt;br /&gt;
 srib.c&lt;br /&gt;
 srib.h&lt;br /&gt;
 sribctrl.c&lt;br /&gt;
 sribtr.c&lt;br /&gt;
 sribtr.h&lt;br /&gt;
 srmsgmar.c&lt;br /&gt;
 srmsgptr.c&lt;br /&gt;
 srmsgptr.h&lt;br /&gt;
 srmsgque.c&lt;br /&gt;
 srmsgque.h&lt;br /&gt;
 srmsgrt.c&lt;br /&gt;
 srmsgrt.h&lt;br /&gt;
 srmsgsub.c&lt;br /&gt;
 srmsgsub.h&lt;br /&gt;
 srstid.c&lt;br /&gt;
 srstid.h&lt;br /&gt;
 srsuid.c&lt;br /&gt;
 srsuid.h&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
 srtestutil.c&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srthread.c&lt;br /&gt;
 srthread.h&lt;br /&gt;
 srtime.c&lt;br /&gt;
 srtime.h&lt;br /&gt;
 srtp.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been added:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srmem.c&lt;br /&gt;
 srmem.h&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.01xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
Any use of test classes through the Functions collection, like: &lt;br /&gt;
&lt;br /&gt;
$main::ascript-&amp;amp;gt;Functions-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;User-&amp;amp;gt;Call(); &lt;br /&gt;
&lt;br /&gt;
should be converted to use the new TestUnits collection: &lt;br /&gt;
&lt;br /&gt;
$main::ascript-&amp;amp;gt;TestUnits-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;Run(); &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== API Changes  ===&lt;br /&gt;
&lt;br /&gt;
*The Support Wiki pages now contain reference help for AutoScript. The content has been updated to reflect the API changes, for details see the &#039;&#039;AutoScript API Reference&#039;&#039;. &lt;br /&gt;
*All synchronous method calls now throw exceptions in order to indicate error conditions rather than have error conditions encoded in return values. &lt;br /&gt;
*Asychronous method calls never throw exceptions to indicate error conditions. Instead, error conditions are delivered as a new Error object that is returned to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039;. (Asynchronous methods are &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;) &lt;br /&gt;
*If &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; times out, an Error object is returned. Previously NULL was returned in this case. &lt;br /&gt;
*All objects returned by &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; have &#039;&#039;&#039;Type&#039;&#039;&#039; and &#039;&#039;&#039;Name&#039;&#039;&#039; properties. When the &#039;&#039;&#039;Type&#039;&#039;&#039; is “Error”, the Error object has additional properties that contain further details about the error. &lt;br /&gt;
*All existing script syntax for designation of message payloads has been deprecated. A new syntax that allows for greater expression has been adopted. Details can be found [[Updated Message Payload Syntax|here]]. There are no syntax changes to function payloads. &lt;br /&gt;
*The signature for &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; has been changed. Successful calls to &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; now fully initialize the object.&lt;br /&gt;
&lt;br /&gt;
=== End-Of-Lifed Methods and Properties  ===&lt;br /&gt;
&lt;br /&gt;
The following have been End-Of-Lifed (EOL&#039;d). A call to any of these methods or an access to any of these properties will now result in a not-implemented exception in the script making the call or access. &lt;br /&gt;
&lt;br /&gt;
*ascript.Quit() &lt;br /&gt;
*ascript.Interfaces &lt;br /&gt;
*ascript.NamedEvents &lt;br /&gt;
*ascript.WaitForEventWithTimeout &lt;br /&gt;
*ascript.RspTimeoutNotifyEnabled &lt;br /&gt;
*ascript.CreateTimer() &lt;br /&gt;
*ascript.DestroyTimer() &lt;br /&gt;
*ascript.WaitTimeoutNotifyEnabled &lt;br /&gt;
*ascript.Compare_As_C_Values() &lt;br /&gt;
*ascript.AsyncErrorNotifyEnabled &lt;br /&gt;
*ascript.Function.Item().User/Owner.SMID&lt;br /&gt;
&lt;br /&gt;
=== Recommended Steps for Migration From a Previous Version  ===&lt;br /&gt;
&lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; in all scripts. Previous logic to test for null indicating timeouts must be modified. &#039;&#039;&#039;WaitForEvent()&#039;&#039;&#039; now always returns an object, in the case of a timeout (or other error) an Error object is returned. &lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.Quit&#039;&#039;&#039; in all scripts. Modify the logic as necessary to exit the script by other means in place of the original &#039;&#039;&#039;Quit()&#039;&#039;&#039; call. &lt;br /&gt;
*Search for all asynchronous method calls (Asynchronous calls are limited to &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;). Modify the logic as necessary to call &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; if errors (including timeout error) should be detected. &lt;br /&gt;
*If you have scripts that explicitly instantiate an &#039;&#039;&#039;ascript&#039;&#039;&#039; object (i.e. they create an object using the &#039;&#039;&#039;&amp;quot;STRIDE.ascript&amp;quot;&#039;&#039;&#039; PROGID), search for all occurrences and modify the subsequent call to &#039;&#039;&#039;ascript.Initialize()&#039;&#039;&#039; to pass the new parameter set. &lt;br /&gt;
*Search for all EOL&#039;d methods and properties. Each can be replaced by setting the appropriate timeout property and handling the timeout error object delivered by WaitForEvent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;Section1&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%; border-collapse: collapse;&amp;quot; class=&amp;quot;MsoTableGrid&amp;quot;&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1pt solid windowtext; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;EOL’d&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Method or Property&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&#039;&#039;&#039;Recommended Replacement&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Quit&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Refactor&amp;lt;/span&amp;gt; script logic to exit the script by other means. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Interfaces&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Functions&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Messages&amp;lt;/span&amp;gt; as appropriate. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.NamedEvents&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitForEventWithTimeout&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() after setting desired timeout using &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitTimeoutPeriod&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.RspTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.CreateTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Add&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.DestroyTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Remove&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Compare_As_C_Values&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.AsyncErrorNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Error notification from asynchronous calls is performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Function.Item&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SMID&amp;lt;/span&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Function.Item&amp;lt;/span&amp;gt;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SUID&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
Please refer to &#039;&#039;&#039;&#039;&#039;Platform Abstraction Layer (PAL) Specification&#039;&#039;&#039;&#039;&#039; for detailed information on new APIs. You may also refer to Linux implementation of PAL, which has been updated with new routines. &lt;br /&gt;
&lt;br /&gt;
*Implement new shared memory routines, palMemSegmentOpen() &amp;amp;amp; palMemSegmentClose(). In case of multi-process target, these routines should implement shared memory using memory-mapped files.&lt;br /&gt;
&lt;br /&gt;
*Runtime now can manage dynamic, configurable, and internal static memory. In case of multi-process target, update palMemAlloc() to simply call _srMem_Allocate() and palMemFree() to simply call _srMem_Free(). In case of single-process target, you can simply allocate dynamic memory according to your Operating System. If you are upgrading, you can simply leave the current implementation as it is.&lt;br /&gt;
&lt;br /&gt;
*Implement new mutex routines, palMutexInit(), palMutexDestroy(), palMutexLock() &amp;amp;amp; palMutexUnlock, to handle any named mutex objects. It is recommended to implement a separate code for shared memory case if it is necessary.&lt;br /&gt;
&lt;br /&gt;
*Remove old routines palProtect(), palUnprotect() and palCriticalErr().&lt;br /&gt;
&lt;br /&gt;
*Implement new routines palGetThreadId() and palGetProcessId().&lt;br /&gt;
&lt;br /&gt;
*Implement new routine palSleep().&lt;br /&gt;
&lt;br /&gt;
*Update synchronization routines, palCreateNID(), palDeleteNID(), palWait() &amp;amp;amp; palNotify(), to support event notifications and in case of multi-process target is enabled, sharing of the synchronization objects among multiple processors.&lt;br /&gt;
&lt;br /&gt;
*If your PAL uses &#039;&#039;S2Mem&#039;&#039; routines for dynamic memory, you should use new Runtime module &#039;&#039;srMem&#039;&#039;. Update palMemAlloc() to call _srMem_Allocate() and palMemFree() to call _srMem_Free().&lt;br /&gt;
&lt;br /&gt;
*Optionally, implement new routine palLog() as a logging utility for PAL and Runtime.&lt;br /&gt;
&lt;br /&gt;
== Runtime  ==&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new memory management (srCFG_MEMORY_MANAGEMENT) and multi-process target (srCFG_MULTI_PROC_TARGET) settings. By default, memory management and multi-process target are disabled. If you enable multi-process target you also need to enable memory management and configure the sizes and the maximum number of memory blocks. New Runtime module &#039;&#039;srMem&#039;&#039; uses these configurations to allocate and manage memory segments.&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new target connection timeout setting (srCFG_CONNECTION_TIMEOUT).&lt;br /&gt;
&lt;br /&gt;
*If target Test Classes and Test Functions are used, change the signature to include test label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
&lt;br /&gt;
== Windows Applications using Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
*The new &#039;&#039;&#039;s2srwin.lib&#039;&#039;&#039; has public API, published in a header srwin.h, containing the following set of routines:&lt;br /&gt;
&lt;br /&gt;
 srWin_SetMaster() - Sets the application as the master and initializes the Stride Runtime thread. In a multi-process environment only one application should make this call.&lt;br /&gt;
 srWin_AddThread() - Adds additional message processing threads to the application.&lt;br /&gt;
 srWin_Run() - Starts the processing and will not return until it has been signaled via keyboard key or CTRL-C.&lt;br /&gt;
 srWin_SetPortTCP() - Overrides the TCP port number (default: 8000) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
 srWin_SetPortSerial() - Overrides the COM port number (default: 1) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
&lt;br /&gt;
*Existing Host Apps developed against the old hostapphrt and hostapptrt libraries should be updated to as follows: &lt;br /&gt;
**replace the include of hostapp.h with include of srwin.h &lt;br /&gt;
**replace all calls to HostAppXXX() with srWin_XXX() &lt;br /&gt;
**call srWin_SetMaster() to start the runtime thread, srThread, before calling srWin_Run(). Within a multi-process target, only one process (the master) calls this routine.&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;a&amp;quot; ==&lt;br /&gt;
* Linux version of the STRIDE [[Build Tools]] is officially introduced.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;b&amp;quot; ==&lt;br /&gt;
* Relaxed [[scl_cast]]() pragma to allow cast from any integral ptr to union of ptrs&lt;br /&gt;
* Fixed compile warnings in Linux PAL.&lt;br /&gt;
* Fixed issue in instrumentation of [[Test Units]].&lt;br /&gt;
* Fixed issue with UNC paths.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0102 ==&lt;br /&gt;
* Implemented new licensing scheme. Existing licenses will not work anymore and need to be reissued. Old and new licenses could co-exist at the same location.&lt;br /&gt;
* The syntax of [[scl_ptr]] and [[scl_ptr_sized]] pragmas has changed. Now it is required to quote the direction and usage attributes. See this [[Handling_of_pointer_attribute_tokens|page]] for details.&lt;br /&gt;
* [[Test_Units#Runtime_Test_Services|Runtime Test Services]] now support adding annotations per test suite.&lt;br /&gt;
* A complete set of [[Samples]] has been implemented.&lt;br /&gt;
* Fixed several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Fixed several minor issues in [[AutoScript]]. &lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0102&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039; and &#039;&#039;&#039;3.01&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8105</id>
		<title>STRIDE 3.0.01xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8105"/>
		<updated>2008-10-15T23:29:05Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* Build Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Release Notes&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
This page documents the changes in STRIDE version 3.0.01xx (code name &#039;&#039;StoneSteps&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note that if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= What&#039;s New  =&lt;br /&gt;
&lt;br /&gt;
Based on customer feedback, in this release we have made significant performance improvements as well as many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Performance Improvements ==&lt;br /&gt;
&lt;br /&gt;
Specific improvements have been made in the following areas: &lt;br /&gt;
&lt;br /&gt;
*Database loading time has been improved &lt;br /&gt;
*Compile times are now shorter &lt;br /&gt;
*Scripting operations involving function and message payloads now perform better, especially when arrays are involved &lt;br /&gt;
*Runtime performance has been improved by optimizing payload serialization and deserialization operations&lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
&lt;br /&gt;
=== SCL Wizard ===&lt;br /&gt;
&lt;br /&gt;
The SCL Wizard functionality in [[STRIDE Studio]] has been extended so that you can now use the tool to qualify message payloads as well as function payloads. &lt;br /&gt;
&lt;br /&gt;
In addition, the following types of qualifications can now be made: &lt;br /&gt;
&lt;br /&gt;
*For payloads that include function pointers, the SCL Wizard now supports qualifying the pointers as such and identifying candidate function values &lt;br /&gt;
*Type casts can now be specified on payload members&lt;br /&gt;
&lt;br /&gt;
=== Connection Management ===&lt;br /&gt;
&lt;br /&gt;
Connection management has been greatly simplified; software managing connection to the target system has been integrated into [[STRIDE Studio]] so that connections can be managed directly from there. (It is still possible to access connection management functionality without using Studio.) &lt;br /&gt;
&lt;br /&gt;
The Panel program is no longer used, and there is no longer a requirement to load the database to communicate with a remote target. &lt;br /&gt;
&lt;br /&gt;
==== Transport Properties ====&lt;br /&gt;
&lt;br /&gt;
All transport properties can now be accessed via scripts. A new transport scripting model makes this possible.&lt;br /&gt;
&lt;br /&gt;
=== STRIDE Studio Test Runner Improvements ===&lt;br /&gt;
&lt;br /&gt;
The test runner in [[STRIDE Studio]] has incorporated several functional and usability improvements. &lt;br /&gt;
&lt;br /&gt;
*Each runnable script and folder (Suite) in a workspace now has additional properties that allow you to optionally specify a handler script that will be executed in the case of an unhandled error (property OnError) or a timeout (property OnTimeout). A timeout value can be set for each folder.&lt;br /&gt;
&lt;br /&gt;
*Each runnable folder (Suite) in a workspace now has a property (OnRunConnect) that can instruct STRIDE Studio to automatically connect to a target system before the folder is executed.&lt;br /&gt;
&lt;br /&gt;
*The workspace now has a dynamic property (ExecutionState) that allows you to alter the order of script execution at runtime.&lt;br /&gt;
&lt;br /&gt;
=== New Frameworks Feature ===&lt;br /&gt;
&lt;br /&gt;
This version introduces [[Using Frameworks|Target Frameworks]], which provide customizable templates for workspace creation. The use of frameworks simplifies the use of STRIDE and ensures consistency across a development team. &lt;br /&gt;
&lt;br /&gt;
Several [[Provided Frameworks|reference frameworks]] are included in this release, supporting the following target environments: &lt;br /&gt;
&lt;br /&gt;
*[[Provided Frameworks#Windows|Windows]] &lt;br /&gt;
*[[Provided Frameworks#Linux|Linux]] &lt;br /&gt;
*[[Provided Frameworks#WinMobile|WinMobile]] &lt;br /&gt;
*[[Provided Frameworks#Generic|Generic]]&lt;br /&gt;
&lt;br /&gt;
[[Using Packages|Packages]] are also introduced. These provide a convenient way to encapsulate SCL-annotated source code and corresponding tests for a set of interfaces. &lt;br /&gt;
&lt;br /&gt;
=== Uploading Results to STRIDE Portal ===&lt;br /&gt;
&lt;br /&gt;
Uploading test results from STRIDE Reporter to STRIDE Portal has been integrated into STRIDE Studio. Portal&#039;s server information can be configured from Studio&#039;s workspace properties while uploading results to Portal can be enabled or disabled via workspace context menu. If enabled, after running the workspace, a script folder or a script file, results in Report file will automatically be uploaded to the configured server. &lt;br /&gt;
&lt;br /&gt;
== Build Tools  ==&lt;br /&gt;
&lt;br /&gt;
A set of new command line [[Build Tools]] has been implemented: &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Stride compiler&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride database binder&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride instrumentation generator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
These utilities has been ported for Windows and Linux. Using them would allow seamless integration with a &amp;quot;make&amp;quot; build environment.&lt;br /&gt;
&lt;br /&gt;
== Target-Based Testing  ==&lt;br /&gt;
&lt;br /&gt;
Target-based (xUnit-style) testing has been simplified. The new set of SCL pragmas [[Test Units]] can now be included in a source file to tell the compiler and IM generator to automatically create test harnessing code.&lt;br /&gt;
&lt;br /&gt;
The automation components STRIDE.testclass, STRIDE.testunit and STRIDE.testfunction are removed.&lt;br /&gt;
&lt;br /&gt;
== Runtime/PAL  ==&lt;br /&gt;
&lt;br /&gt;
Based on customer requirements, in this release we have made significant changes to [[Target_Integration#The STRIDE Runtime|STRIDE Runtime]] and [[Target_Integration#The Platform Abstraction Layer (PAL)|PAL]]. &lt;br /&gt;
&lt;br /&gt;
=== Multi-Process Targets  ===&lt;br /&gt;
&lt;br /&gt;
New routines and support have been added to Runtime and PAL to support multi-process target. Changes include implementation of memory management and shared memory, protecting using named Mutex objects, synchronization of multiple processors and multiple threads, and usage of current process and thread IDs. &lt;br /&gt;
&lt;br /&gt;
=== Logging (Optional)  ===&lt;br /&gt;
&lt;br /&gt;
Runtime and PAL use a logging routine that can optionally be implemented in PAL. &lt;br /&gt;
&lt;br /&gt;
== Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
A new [[Windows_Off-Target_SDK|SDK]] for implemention of Off-Target applications on Windows has been packaged. It contains a library (s2srWin.dll/lib) in which the Windows PAL, Runtime, and GRS and a set of utility scripts are prebuilt. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;s2shostapphrt&#039;&#039;&#039; library, a prebuilt verion of the Host Runtime, has been removed. Building Windows applications using the Host Runtime is not supported anymore. The &#039;&#039;&#039;s2shostapptrt&#039;&#039;&#039; library, a prebuilt version of the Target Runtime, has also been removed. &lt;br /&gt;
&lt;br /&gt;
If an upgrade is performed it is strongly recommended that the above mentioned &#039;&#039;&#039;s2shostapp*&#039;&#039;&#039; libraries and their public API header (hostapp.h) be manually removed.&lt;br /&gt;
&lt;br /&gt;
= Support Wiki =&lt;br /&gt;
&lt;br /&gt;
This support wiki http://support.s2technologies.com is introduced with this version. You can navigate here from your web browser, or directly from STRIDE Studio; a link is provided in the Help menu. &lt;br /&gt;
&lt;br /&gt;
== STRIDE Samples  ==&lt;br /&gt;
&lt;br /&gt;
We have created a set of [[Samples_Overview|sample workspaces]] to aid in the evaluation of STRIDE, or as a tool for learning how to apply STRIDE to different testing scenarios. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to STRIDE, or want to learn more about using the product, this is a great place to start.&lt;br /&gt;
&lt;br /&gt;
= Acquiring the Software =&lt;br /&gt;
&lt;br /&gt;
You can download the latest release from the S2 Technologies ftp site: ftp://ftp.s2technologies.com &lt;br /&gt;
&lt;br /&gt;
To run STRIDE you will need a license. If you are not yet a customer of S2 and would like to obtain an evaluation license, email [mailto:sales@s2technologies.com S2 Sales] or call our offices at &#039;&#039;&#039;760-635-2345&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
= Installing the Software  =&lt;br /&gt;
&lt;br /&gt;
To install STRIDE for the first time, or as an upgrade to an existing installation, please refer to [[Host Installation]]. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note that if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you are new to STRIDE, we recommend that you investigate the [[Samples_Overview|New STRIDE Samples]].&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;ascript&#039;&#039;&#039; API has been changed to be more robust: &lt;br /&gt;
**Certain deprecated methods have been eliminated. &lt;br /&gt;
**Some existing methods have had their APIs modifed. &lt;br /&gt;
**The event model has been improved to allow greater script control.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Some scripts must be modified from previous versions of STRIDE to work successfully with 3.0.01xx. The necessary changes are detailed in the [[#Migration_to_3.0.01xx|Migration to 3.0.01xx]] section below. &lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;Panel&#039;&#039;&#039; object is no longer available to scripts; its functionality has been moved under the &#039;&#039;&#039;studio&#039;&#039;&#039; object model. You can access this new functionality as &#039;&#039;&#039;studio.Connection&#039;&#039;&#039;, however if you were formerly scripting the &#039;&#039;&#039;Panel&#039;&#039;&#039; object, you may find it is no longer necessary since: &lt;br /&gt;
**You can now configure your connection properties from within STRIDE Studio (from the menu select &#039;&#039;Tools/Target Connectivity&#039;&#039;) &lt;br /&gt;
**You can now set a workspace folder property to autoconnect upon execution&lt;br /&gt;
&lt;br /&gt;
*Zero is now allowed as the maximum size under certain circumstances in &#039;&#039;&#039;scl_string&#039;&#039;&#039; and &#039;&#039;&#039;scl_ptr_sized&#039;&#039;&#039;. Details of these circumstances are contained in the &#039;&#039;&#039;[[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]]&#039;&#039;&#039; document.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compiler.MicrosoftCompatibility&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Compiler.Compatibility&#039;&#039;&#039;. Valid values are &amp;quot;Generic&amp;quot; (generic mode), &amp;quot;Microsoft&amp;quot; (Microsoft compatibility), or &amp;quot;Gnu&amp;quot; (Gnu or Gcc compatibility).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compile()&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Build()&#039;&#039;&#039;. Also new methods, &#039;&#039;&#039;studio.Workspace.CleanBuild()&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.ReloadDatabase()&#039;&#039;&#039;, have been added.&lt;br /&gt;
&lt;br /&gt;
*A new property, &#039;&#039;&#039;Output&#039;&#039;&#039;, has been added off the studio object. This property outputs text to the Studio message tab, similar to how &#039;&#039;&#039;ascript.MessageBox()&#039;&#039;&#039; works for certain scripts. This property contains one method, &#039;&#039;&#039;PrintMessage(String msg)&#039;&#039;&#039;. You can see an example of its use [[Debugging Helps|here]].&lt;br /&gt;
&lt;br /&gt;
*A new settings group has been introduced - &#039;&#039;&#039;studio.Workspace.Settings.Build&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Intercept.Path&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Intercept.SourcePath&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.Intercept.HeaderPath&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Fixes  ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This section describes defects which have been corrected in STRIDE and the customer tracking number associated with them, if any, in brackets [].&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*[1055] Not able to specifiy uppercase include directory &lt;br /&gt;
*[1163] Certain cases of array of pointers to discriminated unions that were not handled correctly in the ascript object have been fixed. &lt;br /&gt;
*[1357] The ascript &#039;&#039;&#039;Call()&#039;&#039;&#039; method, when used with RspTimeoutPeriod, only returns True if a timeout has occurred. &lt;br /&gt;
*[1469] Global casting using &#039;&#039;&#039;scl_cast&#039;&#039;&#039; no longer causes an intercept module compile error. &lt;br /&gt;
*[1539] &#039;&#039;&#039;ascript&#039;&#039;&#039; no longer returns &amp;quot;undefined&amp;quot; when calling &#039;&#039;&#039;function.ReturnValue&#039;&#039;&#039; when the captured function returns an unqualified function pointer. &lt;br /&gt;
*[1543] IM source file locations added to studio UI and automation &lt;br /&gt;
*[1564] The Studio Add files dialog has been increased from 2K bytes to 100K bytes, to allow for more files to be selected at a time. &lt;br /&gt;
*[1586] Support for Variadic Macros &lt;br /&gt;
*[1597] EDGFront crash for scl_ptr_opaque &lt;br /&gt;
*[1600] Pre-processor treats constant 1 always as 8-bit &lt;br /&gt;
*[1605] Generated Perl script generates error when run in debugger &lt;br /&gt;
*The following statement in Runtime files &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; has been changed:&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args = 0;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;is now&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt; with no initializer. This makes it portable and able to compile under Linux. &lt;br /&gt;
*A macro that determines the existence of &#039;&#039;&#039;vsnprintf()&#039;&#039;&#039; has been updated in &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; in order to make it able to compile with GCC and other non-Microsoft compilers.&amp;lt;br&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; If you are using test functions and C++ test classes, you must be using compilers that support &#039;&#039;&#039;vsnprintf&#039;&#039;&#039; (variable argument lists), which is a standard in C99 and supported in C90. &lt;br /&gt;
*When tracing on a STID it&#039;s possible to display trace information for messages that aren&#039;t captured (i.e. the message&#039;s SMID is not known to STRIDE). A problem could occur when STRIDE attempted to interpret the payload of these messages. This has now been fixed; hex values only are now shown in the trace view for in this situation. &lt;br /&gt;
*Autosense was not working properly in the editor for message payloads. This has been fixed.&lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
=== TestUnits Collection  ===&lt;br /&gt;
&lt;br /&gt;
A new TestUnits collection has been implemented. All test interfaces (specified with [[SCL_Pragmas#Test_Units | Test Unit pragmas]]) will be listed there.&lt;br /&gt;
&lt;br /&gt;
=== Functions Collection  ===&lt;br /&gt;
&lt;br /&gt;
Interfaces specified with either the [[scl_test_class]] or [[scl_test_flist]] pragmas are not listed in the Functions collection anymore. &lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
=== Memory Management  ===&lt;br /&gt;
&lt;br /&gt;
To support multi-process target, memory management support for dynamic, configurable, and internal static memory has been implemented in Runtime. Runtime makes PAL calls to acquire memory segments and manages the memory according to runtime configurations set by user. In case of multi-process target is enabled, these memory will be shared among multiple applications, and PAL should implement shared memory. &lt;br /&gt;
&lt;br /&gt;
=== Protection using Mutex  ===&lt;br /&gt;
&lt;br /&gt;
Runtime now uses named mutex objects to protect critical data from multiple and simultaneous accesses by multiple threads and, in case of multi-process target is enabled, by multiple applications. Runtime makes PAL calls to obtain and control mutex objects. &lt;br /&gt;
&lt;br /&gt;
=== New Routines  ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Memory Management&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In case of multi-process target, recommended approach is to use &amp;lt;u&amp;gt;Memory-Mapped Files&amp;lt;/u&amp;gt; to implement memory segments. &lt;br /&gt;
&lt;br /&gt;
 palMemSegmentOpen() - Open/create memory segment &lt;br /&gt;
 palMemSegmentClose() - Close memory segment&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Named Mutexes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palMutexInit() - Initialize a mutex object&lt;br /&gt;
 palMutexDestroy() - Destroy a mutex object&lt;br /&gt;
 palMutexLock() - Lock a mutex object&lt;br /&gt;
 palMutexUnlock() - Unlock a mutex object&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Task Synchronization&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palGetThreadId() - Get current thread Id&lt;br /&gt;
 palGetProcessId() - Get current process Id&lt;br /&gt;
 palSleep() - Suspend the execution of the current thread&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Logging&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is optional. &lt;br /&gt;
&lt;br /&gt;
 palLog() - Logging utility&lt;br /&gt;
&lt;br /&gt;
=== Updated Routines  ===&lt;br /&gt;
&lt;br /&gt;
*Function signatures and functionalities of palWait() &amp;amp;amp; palNotify() have been updated.&lt;br /&gt;
&lt;br /&gt;
 palWait() - now takes in an in/out pointer for events notification&lt;br /&gt;
 palNotify() - mail box Id has been updated to notify any event including mail box Ids.&lt;br /&gt;
&lt;br /&gt;
*Function signatures of palMemAlloc() &amp;amp;amp; palMemFree() have been updated.&lt;br /&gt;
&lt;br /&gt;
=== Removed Routines  ===&lt;br /&gt;
&lt;br /&gt;
 palProtect&lt;br /&gt;
 palUnprotect&lt;br /&gt;
 palCriticalErr&lt;br /&gt;
&lt;br /&gt;
=== Removed Modules  ===&lt;br /&gt;
&lt;br /&gt;
 S2Mem - Memory module provided as part of PAL has been removed. If native OS does not support dynamic memory, Runtime&#039;s memory management module &#039;&#039;srMem&#039;&#039; can be used instead of &#039;&#039;S2Mem&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
&lt;br /&gt;
*STRIDE Host Release &#039;&#039;&#039;3.0.01xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;. &lt;br /&gt;
*In order to eliminate redundancy and promote an object-oriented design, &amp;quot;Member Methods&amp;quot; have been removed from srTest; only &amp;quot;Member Objects&amp;quot; exist now in srTest. In addition, accessing the functionality of Member Objects in this way is similar to accessing scripting objects through the STRIDE Reporter object model. For a detailed explanation, refer to [[Test_Units#C.2B.2B_Test_Classes|this article]] on the STRIDE Support Wiki. &lt;br /&gt;
*A new routine, &#039;&#039;&#039;srInit()&#039;&#039;&#039;, replaces deprecated &#039;&#039;&#039;srInitialize()&#039;&#039;&#039;. Now the target will not be able to set an auto-connect with timeout. &lt;br /&gt;
*The &#039;&#039;&#039;scl_tp&#039;&#039;&#039; and &#039;&#039;&#039;scl_tp_format&#039;&#039;&#039; pragmas have been deprecated. The new pragmas are &#039;&#039;&#039;scl_tracepoint&#039;&#039;&#039; and &#039;&#039;&#039;scl_tracepoint_format&#039;&#039;&#039;. &lt;br /&gt;
*The default runtime configuration in srcfg.h now has fragmentation turned on. The srCFG_MAX_TRANSPORT_UNIT is set to 2048. &lt;br /&gt;
*Fixed warnings for parameter name differences in function declarations and definitions for srSubscribe(), srTracePoint(), and srQuerySMID(). &lt;br /&gt;
*Removed unnecessary/extra response to srCONNECT_CLOSE_T_SMID message. &lt;br /&gt;
*The Runtime now checks for the connection before responding with a &amp;quot;Pong&amp;quot; upon receiving a &amp;quot;Ping.&amp;quot; &lt;br /&gt;
*Introduced 40 additional system trace points to better describe internal errors. &lt;br /&gt;
*Reporting of the error srERR_SUB_NONE has been suppressed so that it no longer generates a target trace error. &lt;br /&gt;
*Trace views now always display srTraceStr() with reserved STID (srSTID_RESERVED) regardless of trace filter settings. &lt;br /&gt;
*srPtrSetupChild() now accepts NULL for handle (out pointer - pwHandle). &lt;br /&gt;
*Added a new Runtime Test Services (RTS) API &#039;&#039;&#039;srTestCaseSetStatusEx()&#039;&#039;&#039;, which enables the providing of the actual return value of a numeric test method in the case of failure. &lt;br /&gt;
*Added two new public APIs - &amp;quot;Printing&amp;quot; APIs to display messages on Trace Views without having to specify a STID or a trace level and to set any trace filters on Trace Views. These routines support formatted strings with variable arguments. The &#039;&#039;&#039;srPrintInfo()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and Level=3. The &#039;&#039;&#039;srPrintError()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and the Level=1. &#039;&#039;&#039;Warning:&#039;&#039;&#039; These new APIs use vsnprintf() routine to process variable arguments. The vsnprintf() became a standard in C99 and is supported in C90. &lt;br /&gt;
*To support multi-process target, significant changes have been made to runtime. &lt;br /&gt;
*A new public routine, srUninit(), has been added to sr.h &amp;amp;amp; srapi.c. &lt;br /&gt;
* A new public routine for Runtime Thread exit point, srThreadUninit(), has been added to sr.h &amp;amp;amp; srthread.c. &lt;br /&gt;
*A new module, srMem, for Memory Management has been added. Its new routines, _srMem_Allocate() &amp;amp;amp; _srMem_Free(), will be used in PAL&#039;s palMemAlloc() &amp;amp;amp; palMemFree() in case of multi-process target is enabled. &lt;br /&gt;
*Calls to palProtect() &amp;amp;amp; palUnprotect() have been replaced by new routines _srProtect() &amp;amp;amp; _srUnprotect(), in which the implementation uses its own mutex object that calls PAL&#039;s mutex routines. &lt;br /&gt;
*In target Test Classes and Test Functions, added capability to specify the comment label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
* Fixed a potential data abort issue when executing delegate code in the IM prior to Runtime being initialized.&lt;br /&gt;
* Runtime Test Services APIs are now thread safe. &lt;br /&gt;
* Fixed cancelation of remote boadcast subcribtion goes in an infinite loop.&lt;br /&gt;
* Fixed Runtime resource abuse when sending lots of broadcast messages. &lt;br /&gt;
* Added partial check for message payload corectness.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapi.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srconn.h&lt;br /&gt;
 srerr.c&lt;br /&gt;
 srib.c&lt;br /&gt;
 srib.h&lt;br /&gt;
 sribctrl.c&lt;br /&gt;
 sribtr.c&lt;br /&gt;
 sribtr.h&lt;br /&gt;
 srmsgmar.c&lt;br /&gt;
 srmsgptr.c&lt;br /&gt;
 srmsgptr.h&lt;br /&gt;
 srmsgque.c&lt;br /&gt;
 srmsgque.h&lt;br /&gt;
 srmsgrt.c&lt;br /&gt;
 srmsgrt.h&lt;br /&gt;
 srmsgsub.c&lt;br /&gt;
 srmsgsub.h&lt;br /&gt;
 srstid.c&lt;br /&gt;
 srstid.h&lt;br /&gt;
 srsuid.c&lt;br /&gt;
 srsuid.h&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
 srtestutil.c&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srthread.c&lt;br /&gt;
 srthread.h&lt;br /&gt;
 srtime.c&lt;br /&gt;
 srtime.h&lt;br /&gt;
 srtp.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been added:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srmem.c&lt;br /&gt;
 srmem.h&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.01xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
Any use of test classes through the Functions collection, like: &lt;br /&gt;
&lt;br /&gt;
$main::ascript-&amp;amp;gt;Functions-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;User-&amp;amp;gt;Call(); &lt;br /&gt;
&lt;br /&gt;
should be converted to use the new TestUnits collection: &lt;br /&gt;
&lt;br /&gt;
$main::ascript-&amp;amp;gt;TestUnits-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;Run(); &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== API Changes  ===&lt;br /&gt;
&lt;br /&gt;
*The Support Wiki pages now contain reference help for AutoScript. The content has been updated to reflect the API changes, for details see the &#039;&#039;AutoScript API Reference&#039;&#039;. &lt;br /&gt;
*All synchronous method calls now throw exceptions in order to indicate error conditions rather than have error conditions encoded in return values. &lt;br /&gt;
*Asychronous method calls never throw exceptions to indicate error conditions. Instead, error conditions are delivered as a new Error object that is returned to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039;. (Asynchronous methods are &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;) &lt;br /&gt;
*If &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; times out, an Error object is returned. Previously NULL was returned in this case. &lt;br /&gt;
*All objects returned by &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; have &#039;&#039;&#039;Type&#039;&#039;&#039; and &#039;&#039;&#039;Name&#039;&#039;&#039; properties. When the &#039;&#039;&#039;Type&#039;&#039;&#039; is “Error”, the Error object has additional properties that contain further details about the error. &lt;br /&gt;
*All existing script syntax for designation of message payloads has been deprecated. A new syntax that allows for greater expression has been adopted. Details can be found [[Updated Message Payload Syntax|here]]. There are no syntax changes to function payloads. &lt;br /&gt;
*The signature for &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; has been changed. Successful calls to &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; now fully initialize the object.&lt;br /&gt;
&lt;br /&gt;
=== End-Of-Lifed Methods and Properties  ===&lt;br /&gt;
&lt;br /&gt;
The following have been End-Of-Lifed (EOL&#039;d). A call to any of these methods or an access to any of these properties will now result in a not-implemented exception in the script making the call or access. &lt;br /&gt;
&lt;br /&gt;
*ascript.Quit() &lt;br /&gt;
*ascript.Interfaces &lt;br /&gt;
*ascript.NamedEvents &lt;br /&gt;
*ascript.WaitForEventWithTimeout &lt;br /&gt;
*ascript.RspTimeoutNotifyEnabled &lt;br /&gt;
*ascript.CreateTimer() &lt;br /&gt;
*ascript.DestroyTimer() &lt;br /&gt;
*ascript.WaitTimeoutNotifyEnabled &lt;br /&gt;
*ascript.Compare_As_C_Values() &lt;br /&gt;
*ascript.AsyncErrorNotifyEnabled &lt;br /&gt;
*ascript.Function.Item().User/Owner.SMID&lt;br /&gt;
&lt;br /&gt;
=== Recommended Steps for Migration From a Previous Version  ===&lt;br /&gt;
&lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; in all scripts. Previous logic to test for null indicating timeouts must be modified. &#039;&#039;&#039;WaitForEvent()&#039;&#039;&#039; now always returns an object, in the case of a timeout (or other error) an Error object is returned. &lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.Quit&#039;&#039;&#039; in all scripts. Modify the logic as necessary to exit the script by other means in place of the original &#039;&#039;&#039;Quit()&#039;&#039;&#039; call. &lt;br /&gt;
*Search for all asynchronous method calls (Asynchronous calls are limited to &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;). Modify the logic as necessary to call &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; if errors (including timeout error) should be detected. &lt;br /&gt;
*If you have scripts that explicitly instantiate an &#039;&#039;&#039;ascript&#039;&#039;&#039; object (i.e. they create an object using the &#039;&#039;&#039;&amp;quot;STRIDE.ascript&amp;quot;&#039;&#039;&#039; PROGID), search for all occurrences and modify the subsequent call to &#039;&#039;&#039;ascript.Initialize()&#039;&#039;&#039; to pass the new parameter set. &lt;br /&gt;
*Search for all EOL&#039;d methods and properties. Each can be replaced by setting the appropriate timeout property and handling the timeout error object delivered by WaitForEvent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;Section1&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%; border-collapse: collapse;&amp;quot; class=&amp;quot;MsoTableGrid&amp;quot;&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1pt solid windowtext; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;EOL’d&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Method or Property&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&#039;&#039;&#039;Recommended Replacement&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Quit&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Refactor&amp;lt;/span&amp;gt; script logic to exit the script by other means. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Interfaces&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Functions&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Messages&amp;lt;/span&amp;gt; as appropriate. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.NamedEvents&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitForEventWithTimeout&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() after setting desired timeout using &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitTimeoutPeriod&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.RspTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.CreateTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Add&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.DestroyTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Remove&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Compare_As_C_Values&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.AsyncErrorNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Error notification from asynchronous calls is performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Function.Item&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SMID&amp;lt;/span&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Function.Item&amp;lt;/span&amp;gt;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SUID&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
Please refer to &#039;&#039;&#039;&#039;&#039;Platform Abstraction Layer (PAL) Specification&#039;&#039;&#039;&#039;&#039; for detailed information on new APIs. You may also refer to Linux implementation of PAL, which has been updated with new routines. &lt;br /&gt;
&lt;br /&gt;
*Implement new shared memory routines, palMemSegmentOpen() &amp;amp;amp; palMemSegmentClose(). In case of multi-process target, these routines should implement shared memory using memory-mapped files.&lt;br /&gt;
&lt;br /&gt;
*Runtime now can manage dynamic, configurable, and internal static memory. In case of multi-process target, update palMemAlloc() to simply call _srMem_Allocate() and palMemFree() to simply call _srMem_Free(). In case of single-process target, you can simply allocate dynamic memory according to your Operating System. If you are upgrading, you can simply leave the current implementation as it is.&lt;br /&gt;
&lt;br /&gt;
*Implement new mutex routines, palMutexInit(), palMutexDestroy(), palMutexLock() &amp;amp;amp; palMutexUnlock, to handle any named mutex objects. It is recommended to implement a separate code for shared memory case if it is necessary.&lt;br /&gt;
&lt;br /&gt;
*Remove old routines palProtect(), palUnprotect() and palCriticalErr().&lt;br /&gt;
&lt;br /&gt;
*Implement new routines palGetThreadId() and palGetProcessId().&lt;br /&gt;
&lt;br /&gt;
*Implement new routine palSleep().&lt;br /&gt;
&lt;br /&gt;
*Update synchronization routines, palCreateNID(), palDeleteNID(), palWait() &amp;amp;amp; palNotify(), to support event notifications and in case of multi-process target is enabled, sharing of the synchronization objects among multiple processors.&lt;br /&gt;
&lt;br /&gt;
*If your PAL uses &#039;&#039;S2Mem&#039;&#039; routines for dynamic memory, you should use new Runtime module &#039;&#039;srMem&#039;&#039;. Update palMemAlloc() to call _srMem_Allocate() and palMemFree() to call _srMem_Free().&lt;br /&gt;
&lt;br /&gt;
*Optionally, implement new routine palLog() as a logging utility for PAL and Runtime.&lt;br /&gt;
&lt;br /&gt;
== Runtime  ==&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new memory management (srCFG_MEMORY_MANAGEMENT) and multi-process target (srCFG_MULTI_PROC_TARGET) settings. By default, memory management and multi-process target are disabled. If you enable multi-process target you also need to enable memory management and configure the sizes and the maximum number of memory blocks. New Runtime module &#039;&#039;srMem&#039;&#039; uses these configurations to allocate and manage memory segments.&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new target connection timeout setting (srCFG_CONNECTION_TIMEOUT).&lt;br /&gt;
&lt;br /&gt;
*If target Test Classes and Test Functions are used, change the signature to include test label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
&lt;br /&gt;
== Windows Applications using Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
*The new &#039;&#039;&#039;s2srwin.lib&#039;&#039;&#039; has public API, published in a header srwin.h, containing the following set of routines:&lt;br /&gt;
&lt;br /&gt;
 srWin_SetMaster() - Sets the application as the master and initializes the Stride Runtime thread. In a multi-process environment only one application should make this call.&lt;br /&gt;
 srWin_AddThread() - Adds additional message processing threads to the application.&lt;br /&gt;
 srWin_Run() - Starts the processing and will not return until it has been signaled via keyboard key or CTRL-C.&lt;br /&gt;
 srWin_SetPortTCP() - Overrides the TCP port number (default: 8000) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
 srWin_SetPortSerial() - Overrides the COM port number (default: 1) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
&lt;br /&gt;
*Existing Host Apps developed against the old hostapphrt and hostapptrt libraries should be updated to as follows: &lt;br /&gt;
**replace the include of hostapp.h with include of srwin.h &lt;br /&gt;
**replace all calls to HostAppXXX() with srWin_XXX() &lt;br /&gt;
**call srWin_SetMaster() to start the runtime thread, srThread, before calling srWin_Run(). Within a multi-process target, only one process (the master) calls this routine.&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;a&amp;quot; ==&lt;br /&gt;
* Linux version of the STRIDE [[Build Tools]] is officially introduced.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;b&amp;quot; ==&lt;br /&gt;
* Relaxed [[scl_cast]]() pragma to allow cast from any integral ptr to union of ptrs&lt;br /&gt;
* Fixed compile warnings in Linux PAL.&lt;br /&gt;
* Fixed issue in instrumentation of [[Test Units]].&lt;br /&gt;
* Fixed issue with UNC paths.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0102 ==&lt;br /&gt;
* Implemented new licensing scheme. Existing licenses will not work anymore and need to be reissued. Old and new licenses could co-exist at the same location.&lt;br /&gt;
* The syntax of [[scl_ptr]] and [[scl_ptr_sized]] pragmas has changed. Now it is required to quote the direction and usage attributes. See this [[Handling_of_pointer_attribute_tokens|page]] for details.&lt;br /&gt;
* [[Test_Units#Runtime_Test_Services|Runtime Test Services]] now support adding annotations per test suite.&lt;br /&gt;
* A complete set of [[Samples]] has been implemented.&lt;br /&gt;
* Fixed several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Fixed several minor issues in [[AutoScript]]. &lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0102&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039; and &#039;&#039;&#039;3.01&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8104</id>
		<title>STRIDE 3.0.01xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8104"/>
		<updated>2008-10-15T23:28:28Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* Build Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Release Notes&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
This page documents the changes in STRIDE version 3.0.01xx (code name &#039;&#039;StoneSteps&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note that if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= What&#039;s New  =&lt;br /&gt;
&lt;br /&gt;
Based on customer feedback, in this release we have made significant performance improvements as well as many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Performance Improvements ==&lt;br /&gt;
&lt;br /&gt;
Specific improvements have been made in the following areas: &lt;br /&gt;
&lt;br /&gt;
*Database loading time has been improved &lt;br /&gt;
*Compile times are now shorter &lt;br /&gt;
*Scripting operations involving function and message payloads now perform better, especially when arrays are involved &lt;br /&gt;
*Runtime performance has been improved by optimizing payload serialization and deserialization operations&lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
&lt;br /&gt;
=== SCL Wizard ===&lt;br /&gt;
&lt;br /&gt;
The SCL Wizard functionality in [[STRIDE Studio]] has been extended so that you can now use the tool to qualify message payloads as well as function payloads. &lt;br /&gt;
&lt;br /&gt;
In addition, the following types of qualifications can now be made: &lt;br /&gt;
&lt;br /&gt;
*For payloads that include function pointers, the SCL Wizard now supports qualifying the pointers as such and identifying candidate function values &lt;br /&gt;
*Type casts can now be specified on payload members&lt;br /&gt;
&lt;br /&gt;
=== Connection Management ===&lt;br /&gt;
&lt;br /&gt;
Connection management has been greatly simplified; software managing connection to the target system has been integrated into [[STRIDE Studio]] so that connections can be managed directly from there. (It is still possible to access connection management functionality without using Studio.) &lt;br /&gt;
&lt;br /&gt;
The Panel program is no longer used, and there is no longer a requirement to load the database to communicate with a remote target. &lt;br /&gt;
&lt;br /&gt;
==== Transport Properties ====&lt;br /&gt;
&lt;br /&gt;
All transport properties can now be accessed via scripts. A new transport scripting model makes this possible.&lt;br /&gt;
&lt;br /&gt;
=== STRIDE Studio Test Runner Improvements ===&lt;br /&gt;
&lt;br /&gt;
The test runner in [[STRIDE Studio]] has incorporated several functional and usability improvements. &lt;br /&gt;
&lt;br /&gt;
*Each runnable script and folder (Suite) in a workspace now has additional properties that allow you to optionally specify a handler script that will be executed in the case of an unhandled error (property OnError) or a timeout (property OnTimeout). A timeout value can be set for each folder.&lt;br /&gt;
&lt;br /&gt;
*Each runnable folder (Suite) in a workspace now has a property (OnRunConnect) that can instruct STRIDE Studio to automatically connect to a target system before the folder is executed.&lt;br /&gt;
&lt;br /&gt;
*The workspace now has a dynamic property (ExecutionState) that allows you to alter the order of script execution at runtime.&lt;br /&gt;
&lt;br /&gt;
=== New Frameworks Feature ===&lt;br /&gt;
&lt;br /&gt;
This version introduces [[Using Frameworks|Target Frameworks]], which provide customizable templates for workspace creation. The use of frameworks simplifies the use of STRIDE and ensures consistency across a development team. &lt;br /&gt;
&lt;br /&gt;
Several [[Provided Frameworks|reference frameworks]] are included in this release, supporting the following target environments: &lt;br /&gt;
&lt;br /&gt;
*[[Provided Frameworks#Windows|Windows]] &lt;br /&gt;
*[[Provided Frameworks#Linux|Linux]] &lt;br /&gt;
*[[Provided Frameworks#WinMobile|WinMobile]] &lt;br /&gt;
*[[Provided Frameworks#Generic|Generic]]&lt;br /&gt;
&lt;br /&gt;
[[Using Packages|Packages]] are also introduced. These provide a convenient way to encapsulate SCL-annotated source code and corresponding tests for a set of interfaces. &lt;br /&gt;
&lt;br /&gt;
=== Uploading Results to STRIDE Portal ===&lt;br /&gt;
&lt;br /&gt;
Uploading test results from STRIDE Reporter to STRIDE Portal has been integrated into STRIDE Studio. Portal&#039;s server information can be configured from Studio&#039;s workspace properties while uploading results to Portal can be enabled or disabled via workspace context menu. If enabled, after running the workspace, a script folder or a script file, results in Report file will automatically be uploaded to the configured server. &lt;br /&gt;
&lt;br /&gt;
== Build Tools  ==&lt;br /&gt;
&lt;br /&gt;
A set of new command line [[Build Tools]] has been implemented: &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Stride compiler&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride database binder&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride instrumentation generator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
These utilities has been ported for Windows and Linux. Using them would allow seamless integration with &amp;quot;make&amp;quot;-like build environment.&lt;br /&gt;
&lt;br /&gt;
== Target-Based Testing  ==&lt;br /&gt;
&lt;br /&gt;
Target-based (xUnit-style) testing has been simplified. The new set of SCL pragmas [[Test Units]] can now be included in a source file to tell the compiler and IM generator to automatically create test harnessing code.&lt;br /&gt;
&lt;br /&gt;
The automation components STRIDE.testclass, STRIDE.testunit and STRIDE.testfunction are removed.&lt;br /&gt;
&lt;br /&gt;
== Runtime/PAL  ==&lt;br /&gt;
&lt;br /&gt;
Based on customer requirements, in this release we have made significant changes to [[Target_Integration#The STRIDE Runtime|STRIDE Runtime]] and [[Target_Integration#The Platform Abstraction Layer (PAL)|PAL]]. &lt;br /&gt;
&lt;br /&gt;
=== Multi-Process Targets  ===&lt;br /&gt;
&lt;br /&gt;
New routines and support have been added to Runtime and PAL to support multi-process target. Changes include implementation of memory management and shared memory, protecting using named Mutex objects, synchronization of multiple processors and multiple threads, and usage of current process and thread IDs. &lt;br /&gt;
&lt;br /&gt;
=== Logging (Optional)  ===&lt;br /&gt;
&lt;br /&gt;
Runtime and PAL use a logging routine that can optionally be implemented in PAL. &lt;br /&gt;
&lt;br /&gt;
== Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
A new [[Windows_Off-Target_SDK|SDK]] for implemention of Off-Target applications on Windows has been packaged. It contains a library (s2srWin.dll/lib) in which the Windows PAL, Runtime, and GRS and a set of utility scripts are prebuilt. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;s2shostapphrt&#039;&#039;&#039; library, a prebuilt verion of the Host Runtime, has been removed. Building Windows applications using the Host Runtime is not supported anymore. The &#039;&#039;&#039;s2shostapptrt&#039;&#039;&#039; library, a prebuilt version of the Target Runtime, has also been removed. &lt;br /&gt;
&lt;br /&gt;
If an upgrade is performed it is strongly recommended that the above mentioned &#039;&#039;&#039;s2shostapp*&#039;&#039;&#039; libraries and their public API header (hostapp.h) be manually removed.&lt;br /&gt;
&lt;br /&gt;
= Support Wiki =&lt;br /&gt;
&lt;br /&gt;
This support wiki http://support.s2technologies.com is introduced with this version. You can navigate here from your web browser, or directly from STRIDE Studio; a link is provided in the Help menu. &lt;br /&gt;
&lt;br /&gt;
== STRIDE Samples  ==&lt;br /&gt;
&lt;br /&gt;
We have created a set of [[Samples_Overview|sample workspaces]] to aid in the evaluation of STRIDE, or as a tool for learning how to apply STRIDE to different testing scenarios. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to STRIDE, or want to learn more about using the product, this is a great place to start.&lt;br /&gt;
&lt;br /&gt;
= Acquiring the Software =&lt;br /&gt;
&lt;br /&gt;
You can download the latest release from the S2 Technologies ftp site: ftp://ftp.s2technologies.com &lt;br /&gt;
&lt;br /&gt;
To run STRIDE you will need a license. If you are not yet a customer of S2 and would like to obtain an evaluation license, email [mailto:sales@s2technologies.com S2 Sales] or call our offices at &#039;&#039;&#039;760-635-2345&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
= Installing the Software  =&lt;br /&gt;
&lt;br /&gt;
To install STRIDE for the first time, or as an upgrade to an existing installation, please refer to [[Host Installation]]. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note that if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you are new to STRIDE, we recommend that you investigate the [[Samples_Overview|New STRIDE Samples]].&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;ascript&#039;&#039;&#039; API has been changed to be more robust: &lt;br /&gt;
**Certain deprecated methods have been eliminated. &lt;br /&gt;
**Some existing methods have had their APIs modifed. &lt;br /&gt;
**The event model has been improved to allow greater script control.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Some scripts must be modified from previous versions of STRIDE to work successfully with 3.0.01xx. The necessary changes are detailed in the [[#Migration_to_3.0.01xx|Migration to 3.0.01xx]] section below. &lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;Panel&#039;&#039;&#039; object is no longer available to scripts; its functionality has been moved under the &#039;&#039;&#039;studio&#039;&#039;&#039; object model. You can access this new functionality as &#039;&#039;&#039;studio.Connection&#039;&#039;&#039;, however if you were formerly scripting the &#039;&#039;&#039;Panel&#039;&#039;&#039; object, you may find it is no longer necessary since: &lt;br /&gt;
**You can now configure your connection properties from within STRIDE Studio (from the menu select &#039;&#039;Tools/Target Connectivity&#039;&#039;) &lt;br /&gt;
**You can now set a workspace folder property to autoconnect upon execution&lt;br /&gt;
&lt;br /&gt;
*Zero is now allowed as the maximum size under certain circumstances in &#039;&#039;&#039;scl_string&#039;&#039;&#039; and &#039;&#039;&#039;scl_ptr_sized&#039;&#039;&#039;. Details of these circumstances are contained in the &#039;&#039;&#039;[[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]]&#039;&#039;&#039; document.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compiler.MicrosoftCompatibility&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Compiler.Compatibility&#039;&#039;&#039;. Valid values are &amp;quot;Generic&amp;quot; (generic mode), &amp;quot;Microsoft&amp;quot; (Microsoft compatibility), or &amp;quot;Gnu&amp;quot; (Gnu or Gcc compatibility).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compile()&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Build()&#039;&#039;&#039;. Also new methods, &#039;&#039;&#039;studio.Workspace.CleanBuild()&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.ReloadDatabase()&#039;&#039;&#039;, have been added.&lt;br /&gt;
&lt;br /&gt;
*A new property, &#039;&#039;&#039;Output&#039;&#039;&#039;, has been added off the studio object. This property outputs text to the Studio message tab, similar to how &#039;&#039;&#039;ascript.MessageBox()&#039;&#039;&#039; works for certain scripts. This property contains one method, &#039;&#039;&#039;PrintMessage(String msg)&#039;&#039;&#039;. You can see an example of its use [[Debugging Helps|here]].&lt;br /&gt;
&lt;br /&gt;
*A new settings group has been introduced - &#039;&#039;&#039;studio.Workspace.Settings.Build&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Intercept.Path&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Intercept.SourcePath&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.Intercept.HeaderPath&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Fixes  ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This section describes defects which have been corrected in STRIDE and the customer tracking number associated with them, if any, in brackets [].&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*[1055] Not able to specifiy uppercase include directory &lt;br /&gt;
*[1163] Certain cases of array of pointers to discriminated unions that were not handled correctly in the ascript object have been fixed. &lt;br /&gt;
*[1357] The ascript &#039;&#039;&#039;Call()&#039;&#039;&#039; method, when used with RspTimeoutPeriod, only returns True if a timeout has occurred. &lt;br /&gt;
*[1469] Global casting using &#039;&#039;&#039;scl_cast&#039;&#039;&#039; no longer causes an intercept module compile error. &lt;br /&gt;
*[1539] &#039;&#039;&#039;ascript&#039;&#039;&#039; no longer returns &amp;quot;undefined&amp;quot; when calling &#039;&#039;&#039;function.ReturnValue&#039;&#039;&#039; when the captured function returns an unqualified function pointer. &lt;br /&gt;
*[1543] IM source file locations added to studio UI and automation &lt;br /&gt;
*[1564] The Studio Add files dialog has been increased from 2K bytes to 100K bytes, to allow for more files to be selected at a time. &lt;br /&gt;
*[1586] Support for Variadic Macros &lt;br /&gt;
*[1597] EDGFront crash for scl_ptr_opaque &lt;br /&gt;
*[1600] Pre-processor treats constant 1 always as 8-bit &lt;br /&gt;
*[1605] Generated Perl script generates error when run in debugger &lt;br /&gt;
*The following statement in Runtime files &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; has been changed:&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args = 0;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;is now&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt; with no initializer. This makes it portable and able to compile under Linux. &lt;br /&gt;
*A macro that determines the existence of &#039;&#039;&#039;vsnprintf()&#039;&#039;&#039; has been updated in &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; in order to make it able to compile with GCC and other non-Microsoft compilers.&amp;lt;br&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; If you are using test functions and C++ test classes, you must be using compilers that support &#039;&#039;&#039;vsnprintf&#039;&#039;&#039; (variable argument lists), which is a standard in C99 and supported in C90. &lt;br /&gt;
*When tracing on a STID it&#039;s possible to display trace information for messages that aren&#039;t captured (i.e. the message&#039;s SMID is not known to STRIDE). A problem could occur when STRIDE attempted to interpret the payload of these messages. This has now been fixed; hex values only are now shown in the trace view for in this situation. &lt;br /&gt;
*Autosense was not working properly in the editor for message payloads. This has been fixed.&lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
=== TestUnits Collection  ===&lt;br /&gt;
&lt;br /&gt;
A new TestUnits collection has been implemented. All test interfaces (specified with [[SCL_Pragmas#Test_Units | Test Unit pragmas]]) will be listed there.&lt;br /&gt;
&lt;br /&gt;
=== Functions Collection  ===&lt;br /&gt;
&lt;br /&gt;
Interfaces specified with either the [[scl_test_class]] or [[scl_test_flist]] pragmas are not listed in the Functions collection anymore. &lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
=== Memory Management  ===&lt;br /&gt;
&lt;br /&gt;
To support multi-process target, memory management support for dynamic, configurable, and internal static memory has been implemented in Runtime. Runtime makes PAL calls to acquire memory segments and manages the memory according to runtime configurations set by user. In case of multi-process target is enabled, these memory will be shared among multiple applications, and PAL should implement shared memory. &lt;br /&gt;
&lt;br /&gt;
=== Protection using Mutex  ===&lt;br /&gt;
&lt;br /&gt;
Runtime now uses named mutex objects to protect critical data from multiple and simultaneous accesses by multiple threads and, in case of multi-process target is enabled, by multiple applications. Runtime makes PAL calls to obtain and control mutex objects. &lt;br /&gt;
&lt;br /&gt;
=== New Routines  ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Memory Management&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In case of multi-process target, recommended approach is to use &amp;lt;u&amp;gt;Memory-Mapped Files&amp;lt;/u&amp;gt; to implement memory segments. &lt;br /&gt;
&lt;br /&gt;
 palMemSegmentOpen() - Open/create memory segment &lt;br /&gt;
 palMemSegmentClose() - Close memory segment&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Named Mutexes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palMutexInit() - Initialize a mutex object&lt;br /&gt;
 palMutexDestroy() - Destroy a mutex object&lt;br /&gt;
 palMutexLock() - Lock a mutex object&lt;br /&gt;
 palMutexUnlock() - Unlock a mutex object&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Task Synchronization&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palGetThreadId() - Get current thread Id&lt;br /&gt;
 palGetProcessId() - Get current process Id&lt;br /&gt;
 palSleep() - Suspend the execution of the current thread&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Logging&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is optional. &lt;br /&gt;
&lt;br /&gt;
 palLog() - Logging utility&lt;br /&gt;
&lt;br /&gt;
=== Updated Routines  ===&lt;br /&gt;
&lt;br /&gt;
*Function signatures and functionalities of palWait() &amp;amp;amp; palNotify() have been updated.&lt;br /&gt;
&lt;br /&gt;
 palWait() - now takes in an in/out pointer for events notification&lt;br /&gt;
 palNotify() - mail box Id has been updated to notify any event including mail box Ids.&lt;br /&gt;
&lt;br /&gt;
*Function signatures of palMemAlloc() &amp;amp;amp; palMemFree() have been updated.&lt;br /&gt;
&lt;br /&gt;
=== Removed Routines  ===&lt;br /&gt;
&lt;br /&gt;
 palProtect&lt;br /&gt;
 palUnprotect&lt;br /&gt;
 palCriticalErr&lt;br /&gt;
&lt;br /&gt;
=== Removed Modules  ===&lt;br /&gt;
&lt;br /&gt;
 S2Mem - Memory module provided as part of PAL has been removed. If native OS does not support dynamic memory, Runtime&#039;s memory management module &#039;&#039;srMem&#039;&#039; can be used instead of &#039;&#039;S2Mem&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
&lt;br /&gt;
*STRIDE Host Release &#039;&#039;&#039;3.0.01xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;. &lt;br /&gt;
*In order to eliminate redundancy and promote an object-oriented design, &amp;quot;Member Methods&amp;quot; have been removed from srTest; only &amp;quot;Member Objects&amp;quot; exist now in srTest. In addition, accessing the functionality of Member Objects in this way is similar to accessing scripting objects through the STRIDE Reporter object model. For a detailed explanation, refer to [[Test_Units#C.2B.2B_Test_Classes|this article]] on the STRIDE Support Wiki. &lt;br /&gt;
*A new routine, &#039;&#039;&#039;srInit()&#039;&#039;&#039;, replaces deprecated &#039;&#039;&#039;srInitialize()&#039;&#039;&#039;. Now the target will not be able to set an auto-connect with timeout. &lt;br /&gt;
*The &#039;&#039;&#039;scl_tp&#039;&#039;&#039; and &#039;&#039;&#039;scl_tp_format&#039;&#039;&#039; pragmas have been deprecated. The new pragmas are &#039;&#039;&#039;scl_tracepoint&#039;&#039;&#039; and &#039;&#039;&#039;scl_tracepoint_format&#039;&#039;&#039;. &lt;br /&gt;
*The default runtime configuration in srcfg.h now has fragmentation turned on. The srCFG_MAX_TRANSPORT_UNIT is set to 2048. &lt;br /&gt;
*Fixed warnings for parameter name differences in function declarations and definitions for srSubscribe(), srTracePoint(), and srQuerySMID(). &lt;br /&gt;
*Removed unnecessary/extra response to srCONNECT_CLOSE_T_SMID message. &lt;br /&gt;
*The Runtime now checks for the connection before responding with a &amp;quot;Pong&amp;quot; upon receiving a &amp;quot;Ping.&amp;quot; &lt;br /&gt;
*Introduced 40 additional system trace points to better describe internal errors. &lt;br /&gt;
*Reporting of the error srERR_SUB_NONE has been suppressed so that it no longer generates a target trace error. &lt;br /&gt;
*Trace views now always display srTraceStr() with reserved STID (srSTID_RESERVED) regardless of trace filter settings. &lt;br /&gt;
*srPtrSetupChild() now accepts NULL for handle (out pointer - pwHandle). &lt;br /&gt;
*Added a new Runtime Test Services (RTS) API &#039;&#039;&#039;srTestCaseSetStatusEx()&#039;&#039;&#039;, which enables the providing of the actual return value of a numeric test method in the case of failure. &lt;br /&gt;
*Added two new public APIs - &amp;quot;Printing&amp;quot; APIs to display messages on Trace Views without having to specify a STID or a trace level and to set any trace filters on Trace Views. These routines support formatted strings with variable arguments. The &#039;&#039;&#039;srPrintInfo()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and Level=3. The &#039;&#039;&#039;srPrintError()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and the Level=1. &#039;&#039;&#039;Warning:&#039;&#039;&#039; These new APIs use vsnprintf() routine to process variable arguments. The vsnprintf() became a standard in C99 and is supported in C90. &lt;br /&gt;
*To support multi-process target, significant changes have been made to runtime. &lt;br /&gt;
*A new public routine, srUninit(), has been added to sr.h &amp;amp;amp; srapi.c. &lt;br /&gt;
* A new public routine for Runtime Thread exit point, srThreadUninit(), has been added to sr.h &amp;amp;amp; srthread.c. &lt;br /&gt;
*A new module, srMem, for Memory Management has been added. Its new routines, _srMem_Allocate() &amp;amp;amp; _srMem_Free(), will be used in PAL&#039;s palMemAlloc() &amp;amp;amp; palMemFree() in case of multi-process target is enabled. &lt;br /&gt;
*Calls to palProtect() &amp;amp;amp; palUnprotect() have been replaced by new routines _srProtect() &amp;amp;amp; _srUnprotect(), in which the implementation uses its own mutex object that calls PAL&#039;s mutex routines. &lt;br /&gt;
*In target Test Classes and Test Functions, added capability to specify the comment label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
* Fixed a potential data abort issue when executing delegate code in the IM prior to Runtime being initialized.&lt;br /&gt;
* Runtime Test Services APIs are now thread safe. &lt;br /&gt;
* Fixed cancelation of remote boadcast subcribtion goes in an infinite loop.&lt;br /&gt;
* Fixed Runtime resource abuse when sending lots of broadcast messages. &lt;br /&gt;
* Added partial check for message payload corectness.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapi.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srconn.h&lt;br /&gt;
 srerr.c&lt;br /&gt;
 srib.c&lt;br /&gt;
 srib.h&lt;br /&gt;
 sribctrl.c&lt;br /&gt;
 sribtr.c&lt;br /&gt;
 sribtr.h&lt;br /&gt;
 srmsgmar.c&lt;br /&gt;
 srmsgptr.c&lt;br /&gt;
 srmsgptr.h&lt;br /&gt;
 srmsgque.c&lt;br /&gt;
 srmsgque.h&lt;br /&gt;
 srmsgrt.c&lt;br /&gt;
 srmsgrt.h&lt;br /&gt;
 srmsgsub.c&lt;br /&gt;
 srmsgsub.h&lt;br /&gt;
 srstid.c&lt;br /&gt;
 srstid.h&lt;br /&gt;
 srsuid.c&lt;br /&gt;
 srsuid.h&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
 srtestutil.c&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srthread.c&lt;br /&gt;
 srthread.h&lt;br /&gt;
 srtime.c&lt;br /&gt;
 srtime.h&lt;br /&gt;
 srtp.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been added:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srmem.c&lt;br /&gt;
 srmem.h&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.01xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
Any use of test classes through the Functions collection, like: &lt;br /&gt;
&lt;br /&gt;
$main::ascript-&amp;amp;gt;Functions-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;User-&amp;amp;gt;Call(); &lt;br /&gt;
&lt;br /&gt;
should be converted to use the new TestUnits collection: &lt;br /&gt;
&lt;br /&gt;
$main::ascript-&amp;amp;gt;TestUnits-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;Run(); &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== API Changes  ===&lt;br /&gt;
&lt;br /&gt;
*The Support Wiki pages now contain reference help for AutoScript. The content has been updated to reflect the API changes, for details see the &#039;&#039;AutoScript API Reference&#039;&#039;. &lt;br /&gt;
*All synchronous method calls now throw exceptions in order to indicate error conditions rather than have error conditions encoded in return values. &lt;br /&gt;
*Asychronous method calls never throw exceptions to indicate error conditions. Instead, error conditions are delivered as a new Error object that is returned to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039;. (Asynchronous methods are &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;) &lt;br /&gt;
*If &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; times out, an Error object is returned. Previously NULL was returned in this case. &lt;br /&gt;
*All objects returned by &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; have &#039;&#039;&#039;Type&#039;&#039;&#039; and &#039;&#039;&#039;Name&#039;&#039;&#039; properties. When the &#039;&#039;&#039;Type&#039;&#039;&#039; is “Error”, the Error object has additional properties that contain further details about the error. &lt;br /&gt;
*All existing script syntax for designation of message payloads has been deprecated. A new syntax that allows for greater expression has been adopted. Details can be found [[Updated Message Payload Syntax|here]]. There are no syntax changes to function payloads. &lt;br /&gt;
*The signature for &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; has been changed. Successful calls to &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; now fully initialize the object.&lt;br /&gt;
&lt;br /&gt;
=== End-Of-Lifed Methods and Properties  ===&lt;br /&gt;
&lt;br /&gt;
The following have been End-Of-Lifed (EOL&#039;d). A call to any of these methods or an access to any of these properties will now result in a not-implemented exception in the script making the call or access. &lt;br /&gt;
&lt;br /&gt;
*ascript.Quit() &lt;br /&gt;
*ascript.Interfaces &lt;br /&gt;
*ascript.NamedEvents &lt;br /&gt;
*ascript.WaitForEventWithTimeout &lt;br /&gt;
*ascript.RspTimeoutNotifyEnabled &lt;br /&gt;
*ascript.CreateTimer() &lt;br /&gt;
*ascript.DestroyTimer() &lt;br /&gt;
*ascript.WaitTimeoutNotifyEnabled &lt;br /&gt;
*ascript.Compare_As_C_Values() &lt;br /&gt;
*ascript.AsyncErrorNotifyEnabled &lt;br /&gt;
*ascript.Function.Item().User/Owner.SMID&lt;br /&gt;
&lt;br /&gt;
=== Recommended Steps for Migration From a Previous Version  ===&lt;br /&gt;
&lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; in all scripts. Previous logic to test for null indicating timeouts must be modified. &#039;&#039;&#039;WaitForEvent()&#039;&#039;&#039; now always returns an object, in the case of a timeout (or other error) an Error object is returned. &lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.Quit&#039;&#039;&#039; in all scripts. Modify the logic as necessary to exit the script by other means in place of the original &#039;&#039;&#039;Quit()&#039;&#039;&#039; call. &lt;br /&gt;
*Search for all asynchronous method calls (Asynchronous calls are limited to &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;). Modify the logic as necessary to call &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; if errors (including timeout error) should be detected. &lt;br /&gt;
*If you have scripts that explicitly instantiate an &#039;&#039;&#039;ascript&#039;&#039;&#039; object (i.e. they create an object using the &#039;&#039;&#039;&amp;quot;STRIDE.ascript&amp;quot;&#039;&#039;&#039; PROGID), search for all occurrences and modify the subsequent call to &#039;&#039;&#039;ascript.Initialize()&#039;&#039;&#039; to pass the new parameter set. &lt;br /&gt;
*Search for all EOL&#039;d methods and properties. Each can be replaced by setting the appropriate timeout property and handling the timeout error object delivered by WaitForEvent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;Section1&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%; border-collapse: collapse;&amp;quot; class=&amp;quot;MsoTableGrid&amp;quot;&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1pt solid windowtext; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;EOL’d&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Method or Property&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&#039;&#039;&#039;Recommended Replacement&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Quit&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Refactor&amp;lt;/span&amp;gt; script logic to exit the script by other means. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Interfaces&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Functions&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Messages&amp;lt;/span&amp;gt; as appropriate. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.NamedEvents&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitForEventWithTimeout&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() after setting desired timeout using &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitTimeoutPeriod&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.RspTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.CreateTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Add&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.DestroyTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Remove&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Compare_As_C_Values&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.AsyncErrorNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Error notification from asynchronous calls is performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Function.Item&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SMID&amp;lt;/span&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Function.Item&amp;lt;/span&amp;gt;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SUID&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
Please refer to &#039;&#039;&#039;&#039;&#039;Platform Abstraction Layer (PAL) Specification&#039;&#039;&#039;&#039;&#039; for detailed information on new APIs. You may also refer to Linux implementation of PAL, which has been updated with new routines. &lt;br /&gt;
&lt;br /&gt;
*Implement new shared memory routines, palMemSegmentOpen() &amp;amp;amp; palMemSegmentClose(). In case of multi-process target, these routines should implement shared memory using memory-mapped files.&lt;br /&gt;
&lt;br /&gt;
*Runtime now can manage dynamic, configurable, and internal static memory. In case of multi-process target, update palMemAlloc() to simply call _srMem_Allocate() and palMemFree() to simply call _srMem_Free(). In case of single-process target, you can simply allocate dynamic memory according to your Operating System. If you are upgrading, you can simply leave the current implementation as it is.&lt;br /&gt;
&lt;br /&gt;
*Implement new mutex routines, palMutexInit(), palMutexDestroy(), palMutexLock() &amp;amp;amp; palMutexUnlock, to handle any named mutex objects. It is recommended to implement a separate code for shared memory case if it is necessary.&lt;br /&gt;
&lt;br /&gt;
*Remove old routines palProtect(), palUnprotect() and palCriticalErr().&lt;br /&gt;
&lt;br /&gt;
*Implement new routines palGetThreadId() and palGetProcessId().&lt;br /&gt;
&lt;br /&gt;
*Implement new routine palSleep().&lt;br /&gt;
&lt;br /&gt;
*Update synchronization routines, palCreateNID(), palDeleteNID(), palWait() &amp;amp;amp; palNotify(), to support event notifications and in case of multi-process target is enabled, sharing of the synchronization objects among multiple processors.&lt;br /&gt;
&lt;br /&gt;
*If your PAL uses &#039;&#039;S2Mem&#039;&#039; routines for dynamic memory, you should use new Runtime module &#039;&#039;srMem&#039;&#039;. Update palMemAlloc() to call _srMem_Allocate() and palMemFree() to call _srMem_Free().&lt;br /&gt;
&lt;br /&gt;
*Optionally, implement new routine palLog() as a logging utility for PAL and Runtime.&lt;br /&gt;
&lt;br /&gt;
== Runtime  ==&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new memory management (srCFG_MEMORY_MANAGEMENT) and multi-process target (srCFG_MULTI_PROC_TARGET) settings. By default, memory management and multi-process target are disabled. If you enable multi-process target you also need to enable memory management and configure the sizes and the maximum number of memory blocks. New Runtime module &#039;&#039;srMem&#039;&#039; uses these configurations to allocate and manage memory segments.&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new target connection timeout setting (srCFG_CONNECTION_TIMEOUT).&lt;br /&gt;
&lt;br /&gt;
*If target Test Classes and Test Functions are used, change the signature to include test label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
&lt;br /&gt;
== Windows Applications using Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
*The new &#039;&#039;&#039;s2srwin.lib&#039;&#039;&#039; has public API, published in a header srwin.h, containing the following set of routines:&lt;br /&gt;
&lt;br /&gt;
 srWin_SetMaster() - Sets the application as the master and initializes the Stride Runtime thread. In a multi-process environment only one application should make this call.&lt;br /&gt;
 srWin_AddThread() - Adds additional message processing threads to the application.&lt;br /&gt;
 srWin_Run() - Starts the processing and will not return until it has been signaled via keyboard key or CTRL-C.&lt;br /&gt;
 srWin_SetPortTCP() - Overrides the TCP port number (default: 8000) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
 srWin_SetPortSerial() - Overrides the COM port number (default: 1) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
&lt;br /&gt;
*Existing Host Apps developed against the old hostapphrt and hostapptrt libraries should be updated to as follows: &lt;br /&gt;
**replace the include of hostapp.h with include of srwin.h &lt;br /&gt;
**replace all calls to HostAppXXX() with srWin_XXX() &lt;br /&gt;
**call srWin_SetMaster() to start the runtime thread, srThread, before calling srWin_Run(). Within a multi-process target, only one process (the master) calls this routine.&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;a&amp;quot; ==&lt;br /&gt;
* Linux version of the STRIDE [[Build Tools]] is officially introduced.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;b&amp;quot; ==&lt;br /&gt;
* Relaxed [[scl_cast]]() pragma to allow cast from any integral ptr to union of ptrs&lt;br /&gt;
* Fixed compile warnings in Linux PAL.&lt;br /&gt;
* Fixed issue in instrumentation of [[Test Units]].&lt;br /&gt;
* Fixed issue with UNC paths.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0102 ==&lt;br /&gt;
* Implemented new licensing scheme. Existing licenses will not work anymore and need to be reissued. Old and new licenses could co-exist at the same location.&lt;br /&gt;
* The syntax of [[scl_ptr]] and [[scl_ptr_sized]] pragmas has changed. Now it is required to quote the direction and usage attributes. See this [[Handling_of_pointer_attribute_tokens|page]] for details.&lt;br /&gt;
* [[Test_Units#Runtime_Test_Services|Runtime Test Services]] now support adding annotations per test suite.&lt;br /&gt;
* A complete set of [[Samples]] has been implemented.&lt;br /&gt;
* Fixed several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Fixed several minor issues in [[AutoScript]]. &lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0102&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039; and &#039;&#039;&#039;3.01&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8103</id>
		<title>STRIDE 3.0.01xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=8103"/>
		<updated>2008-10-15T23:27:53Z</updated>

		<summary type="html">&lt;p&gt;Chrisj: /* Build Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Release Notes&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
This page documents the changes in STRIDE version 3.0.01xx (code name &#039;&#039;StoneSteps&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note that if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= What&#039;s New  =&lt;br /&gt;
&lt;br /&gt;
Based on customer feedback, in this release we have made significant performance improvements as well as many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Performance Improvements ==&lt;br /&gt;
&lt;br /&gt;
Specific improvements have been made in the following areas: &lt;br /&gt;
&lt;br /&gt;
*Database loading time has been improved &lt;br /&gt;
*Compile times are now shorter &lt;br /&gt;
*Scripting operations involving function and message payloads now perform better, especially when arrays are involved &lt;br /&gt;
*Runtime performance has been improved by optimizing payload serialization and deserialization operations&lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
&lt;br /&gt;
=== SCL Wizard ===&lt;br /&gt;
&lt;br /&gt;
The SCL Wizard functionality in [[STRIDE Studio]] has been extended so that you can now use the tool to qualify message payloads as well as function payloads. &lt;br /&gt;
&lt;br /&gt;
In addition, the following types of qualifications can now be made: &lt;br /&gt;
&lt;br /&gt;
*For payloads that include function pointers, the SCL Wizard now supports qualifying the pointers as such and identifying candidate function values &lt;br /&gt;
*Type casts can now be specified on payload members&lt;br /&gt;
&lt;br /&gt;
=== Connection Management ===&lt;br /&gt;
&lt;br /&gt;
Connection management has been greatly simplified; software managing connection to the target system has been integrated into [[STRIDE Studio]] so that connections can be managed directly from there. (It is still possible to access connection management functionality without using Studio.) &lt;br /&gt;
&lt;br /&gt;
The Panel program is no longer used, and there is no longer a requirement to load the database to communicate with a remote target. &lt;br /&gt;
&lt;br /&gt;
==== Transport Properties ====&lt;br /&gt;
&lt;br /&gt;
All transport properties can now be accessed via scripts. A new transport scripting model makes this possible.&lt;br /&gt;
&lt;br /&gt;
=== STRIDE Studio Test Runner Improvements ===&lt;br /&gt;
&lt;br /&gt;
The test runner in [[STRIDE Studio]] has incorporated several functional and usability improvements. &lt;br /&gt;
&lt;br /&gt;
*Each runnable script and folder (Suite) in a workspace now has additional properties that allow you to optionally specify a handler script that will be executed in the case of an unhandled error (property OnError) or a timeout (property OnTimeout). A timeout value can be set for each folder.&lt;br /&gt;
&lt;br /&gt;
*Each runnable folder (Suite) in a workspace now has a property (OnRunConnect) that can instruct STRIDE Studio to automatically connect to a target system before the folder is executed.&lt;br /&gt;
&lt;br /&gt;
*The workspace now has a dynamic property (ExecutionState) that allows you to alter the order of script execution at runtime.&lt;br /&gt;
&lt;br /&gt;
=== New Frameworks Feature ===&lt;br /&gt;
&lt;br /&gt;
This version introduces [[Using Frameworks|Target Frameworks]], which provide customizable templates for workspace creation. The use of frameworks simplifies the use of STRIDE and ensures consistency across a development team. &lt;br /&gt;
&lt;br /&gt;
Several [[Provided Frameworks|reference frameworks]] are included in this release, supporting the following target environments: &lt;br /&gt;
&lt;br /&gt;
*[[Provided Frameworks#Windows|Windows]] &lt;br /&gt;
*[[Provided Frameworks#Linux|Linux]] &lt;br /&gt;
*[[Provided Frameworks#WinMobile|WinMobile]] &lt;br /&gt;
*[[Provided Frameworks#Generic|Generic]]&lt;br /&gt;
&lt;br /&gt;
[[Using Packages|Packages]] are also introduced. These provide a convenient way to encapsulate SCL-annotated source code and corresponding tests for a set of interfaces. &lt;br /&gt;
&lt;br /&gt;
=== Uploading Results to STRIDE Portal ===&lt;br /&gt;
&lt;br /&gt;
Uploading test results from STRIDE Reporter to STRIDE Portal has been integrated into STRIDE Studio. Portal&#039;s server information can be configured from Studio&#039;s workspace properties while uploading results to Portal can be enabled or disabled via workspace context menu. If enabled, after running the workspace, a script folder or a script file, results in Report file will automatically be uploaded to the configured server. &lt;br /&gt;
&lt;br /&gt;
== Build Tools  ==&lt;br /&gt;
&lt;br /&gt;
A set of new command line [[Build Tools]] has been implemented: &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Stride compiler&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride database binder&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Stride instrumentation generator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
These utilities has been ported for Windows and Linux. Using them would allow seamless integration with &amp;quot;make&amp;quot; like build environment.&lt;br /&gt;
&lt;br /&gt;
== Target-Based Testing  ==&lt;br /&gt;
&lt;br /&gt;
Target-based (xUnit-style) testing has been simplified. The new set of SCL pragmas [[Test Units]] can now be included in a source file to tell the compiler and IM generator to automatically create test harnessing code.&lt;br /&gt;
&lt;br /&gt;
The automation components STRIDE.testclass, STRIDE.testunit and STRIDE.testfunction are removed.&lt;br /&gt;
&lt;br /&gt;
== Runtime/PAL  ==&lt;br /&gt;
&lt;br /&gt;
Based on customer requirements, in this release we have made significant changes to [[Target_Integration#The STRIDE Runtime|STRIDE Runtime]] and [[Target_Integration#The Platform Abstraction Layer (PAL)|PAL]]. &lt;br /&gt;
&lt;br /&gt;
=== Multi-Process Targets  ===&lt;br /&gt;
&lt;br /&gt;
New routines and support have been added to Runtime and PAL to support multi-process target. Changes include implementation of memory management and shared memory, protecting using named Mutex objects, synchronization of multiple processors and multiple threads, and usage of current process and thread IDs. &lt;br /&gt;
&lt;br /&gt;
=== Logging (Optional)  ===&lt;br /&gt;
&lt;br /&gt;
Runtime and PAL use a logging routine that can optionally be implemented in PAL. &lt;br /&gt;
&lt;br /&gt;
== Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
A new [[Windows_Off-Target_SDK|SDK]] for implemention of Off-Target applications on Windows has been packaged. It contains a library (s2srWin.dll/lib) in which the Windows PAL, Runtime, and GRS and a set of utility scripts are prebuilt. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;s2shostapphrt&#039;&#039;&#039; library, a prebuilt verion of the Host Runtime, has been removed. Building Windows applications using the Host Runtime is not supported anymore. The &#039;&#039;&#039;s2shostapptrt&#039;&#039;&#039; library, a prebuilt version of the Target Runtime, has also been removed. &lt;br /&gt;
&lt;br /&gt;
If an upgrade is performed it is strongly recommended that the above mentioned &#039;&#039;&#039;s2shostapp*&#039;&#039;&#039; libraries and their public API header (hostapp.h) be manually removed.&lt;br /&gt;
&lt;br /&gt;
= Support Wiki =&lt;br /&gt;
&lt;br /&gt;
This support wiki http://support.s2technologies.com is introduced with this version. You can navigate here from your web browser, or directly from STRIDE Studio; a link is provided in the Help menu. &lt;br /&gt;
&lt;br /&gt;
== STRIDE Samples  ==&lt;br /&gt;
&lt;br /&gt;
We have created a set of [[Samples_Overview|sample workspaces]] to aid in the evaluation of STRIDE, or as a tool for learning how to apply STRIDE to different testing scenarios. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to STRIDE, or want to learn more about using the product, this is a great place to start.&lt;br /&gt;
&lt;br /&gt;
= Acquiring the Software =&lt;br /&gt;
&lt;br /&gt;
You can download the latest release from the S2 Technologies ftp site: ftp://ftp.s2technologies.com &lt;br /&gt;
&lt;br /&gt;
To run STRIDE you will need a license. If you are not yet a customer of S2 and would like to obtain an evaluation license, email [mailto:sales@s2technologies.com S2 Sales] or call our offices at &#039;&#039;&#039;760-635-2345&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
= Installing the Software  =&lt;br /&gt;
&lt;br /&gt;
To install STRIDE for the first time, or as an upgrade to an existing installation, please refer to [[Host Installation]]. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
Note that if you are upgrading from a previous installation &#039;&#039;&#039;you must uninstall your existing STRIDE&#039;&#039;&#039; before installing version 3.0.01xx. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you are new to STRIDE, we recommend that you investigate the [[Samples_Overview|New STRIDE Samples]].&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;ascript&#039;&#039;&#039; API has been changed to be more robust: &lt;br /&gt;
**Certain deprecated methods have been eliminated. &lt;br /&gt;
**Some existing methods have had their APIs modifed. &lt;br /&gt;
**The event model has been improved to allow greater script control.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Some scripts must be modified from previous versions of STRIDE to work successfully with 3.0.01xx. The necessary changes are detailed in the [[#Migration_to_3.0.01xx|Migration to 3.0.01xx]] section below. &lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;Panel&#039;&#039;&#039; object is no longer available to scripts; its functionality has been moved under the &#039;&#039;&#039;studio&#039;&#039;&#039; object model. You can access this new functionality as &#039;&#039;&#039;studio.Connection&#039;&#039;&#039;, however if you were formerly scripting the &#039;&#039;&#039;Panel&#039;&#039;&#039; object, you may find it is no longer necessary since: &lt;br /&gt;
**You can now configure your connection properties from within STRIDE Studio (from the menu select &#039;&#039;Tools/Target Connectivity&#039;&#039;) &lt;br /&gt;
**You can now set a workspace folder property to autoconnect upon execution&lt;br /&gt;
&lt;br /&gt;
*Zero is now allowed as the maximum size under certain circumstances in &#039;&#039;&#039;scl_string&#039;&#039;&#039; and &#039;&#039;&#039;scl_ptr_sized&#039;&#039;&#039;. Details of these circumstances are contained in the &#039;&#039;&#039;[[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]]&#039;&#039;&#039; document.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compiler.MicrosoftCompatibility&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Compiler.Compatibility&#039;&#039;&#039;. Valid values are &amp;quot;Generic&amp;quot; (generic mode), &amp;quot;Microsoft&amp;quot; (Microsoft compatibility), or &amp;quot;Gnu&amp;quot; (Gnu or Gcc compatibility).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Compile()&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Build()&#039;&#039;&#039;. Also new methods, &#039;&#039;&#039;studio.Workspace.CleanBuild()&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.ReloadDatabase()&#039;&#039;&#039;, have been added.&lt;br /&gt;
&lt;br /&gt;
*A new property, &#039;&#039;&#039;Output&#039;&#039;&#039;, has been added off the studio object. This property outputs text to the Studio message tab, similar to how &#039;&#039;&#039;ascript.MessageBox()&#039;&#039;&#039; works for certain scripts. This property contains one method, &#039;&#039;&#039;PrintMessage(String msg)&#039;&#039;&#039;. You can see an example of its use [[Debugging Helps|here]].&lt;br /&gt;
&lt;br /&gt;
*A new settings group has been introduced - &#039;&#039;&#039;studio.Workspace.Settings.Build&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;studio.Workspace.Intercept.Path&#039;&#039;&#039; has been replaced with &#039;&#039;&#039;studio.Workspace.Intercept.SourcePath&#039;&#039;&#039; and &#039;&#039;&#039;studio.Workspace.Intercept.HeaderPath&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Fixes  ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This section describes defects which have been corrected in STRIDE and the customer tracking number associated with them, if any, in brackets [].&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*[1055] Not able to specifiy uppercase include directory &lt;br /&gt;
*[1163] Certain cases of array of pointers to discriminated unions that were not handled correctly in the ascript object have been fixed. &lt;br /&gt;
*[1357] The ascript &#039;&#039;&#039;Call()&#039;&#039;&#039; method, when used with RspTimeoutPeriod, only returns True if a timeout has occurred. &lt;br /&gt;
*[1469] Global casting using &#039;&#039;&#039;scl_cast&#039;&#039;&#039; no longer causes an intercept module compile error. &lt;br /&gt;
*[1539] &#039;&#039;&#039;ascript&#039;&#039;&#039; no longer returns &amp;quot;undefined&amp;quot; when calling &#039;&#039;&#039;function.ReturnValue&#039;&#039;&#039; when the captured function returns an unqualified function pointer. &lt;br /&gt;
*[1543] IM source file locations added to studio UI and automation &lt;br /&gt;
*[1564] The Studio Add files dialog has been increased from 2K bytes to 100K bytes, to allow for more files to be selected at a time. &lt;br /&gt;
*[1586] Support for Variadic Macros &lt;br /&gt;
*[1597] EDGFront crash for scl_ptr_opaque &lt;br /&gt;
*[1600] Pre-processor treats constant 1 always as 8-bit &lt;br /&gt;
*[1605] Generated Perl script generates error when run in debugger &lt;br /&gt;
*The following statement in Runtime files &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; has been changed:&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args = 0;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;is now&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;va_list args;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt; with no initializer. This makes it portable and able to compile under Linux. &lt;br /&gt;
*A macro that determines the existence of &#039;&#039;&#039;vsnprintf()&#039;&#039;&#039; has been updated in &#039;&#039;&#039;srtest.c&#039;&#039;&#039; and &#039;&#039;&#039;srtest.cpp&#039;&#039;&#039; in order to make it able to compile with GCC and other non-Microsoft compilers.&amp;lt;br&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; If you are using test functions and C++ test classes, you must be using compilers that support &#039;&#039;&#039;vsnprintf&#039;&#039;&#039; (variable argument lists), which is a standard in C99 and supported in C90. &lt;br /&gt;
*When tracing on a STID it&#039;s possible to display trace information for messages that aren&#039;t captured (i.e. the message&#039;s SMID is not known to STRIDE). A problem could occur when STRIDE attempted to interpret the payload of these messages. This has now been fixed; hex values only are now shown in the trace view for in this situation. &lt;br /&gt;
*Autosense was not working properly in the editor for message payloads. This has been fixed.&lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
=== TestUnits Collection  ===&lt;br /&gt;
&lt;br /&gt;
A new TestUnits collection has been implemented. All test interfaces (specified with [[SCL_Pragmas#Test_Units | Test Unit pragmas]]) will be listed there.&lt;br /&gt;
&lt;br /&gt;
=== Functions Collection  ===&lt;br /&gt;
&lt;br /&gt;
Interfaces specified with either the [[scl_test_class]] or [[scl_test_flist]] pragmas are not listed in the Functions collection anymore. &lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
=== Memory Management  ===&lt;br /&gt;
&lt;br /&gt;
To support multi-process target, memory management support for dynamic, configurable, and internal static memory has been implemented in Runtime. Runtime makes PAL calls to acquire memory segments and manages the memory according to runtime configurations set by user. In case of multi-process target is enabled, these memory will be shared among multiple applications, and PAL should implement shared memory. &lt;br /&gt;
&lt;br /&gt;
=== Protection using Mutex  ===&lt;br /&gt;
&lt;br /&gt;
Runtime now uses named mutex objects to protect critical data from multiple and simultaneous accesses by multiple threads and, in case of multi-process target is enabled, by multiple applications. Runtime makes PAL calls to obtain and control mutex objects. &lt;br /&gt;
&lt;br /&gt;
=== New Routines  ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Memory Management&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In case of multi-process target, recommended approach is to use &amp;lt;u&amp;gt;Memory-Mapped Files&amp;lt;/u&amp;gt; to implement memory segments. &lt;br /&gt;
&lt;br /&gt;
 palMemSegmentOpen() - Open/create memory segment &lt;br /&gt;
 palMemSegmentClose() - Close memory segment&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Named Mutexes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palMutexInit() - Initialize a mutex object&lt;br /&gt;
 palMutexDestroy() - Destroy a mutex object&lt;br /&gt;
 palMutexLock() - Lock a mutex object&lt;br /&gt;
 palMutexUnlock() - Unlock a mutex object&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Task Synchronization&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palGetThreadId() - Get current thread Id&lt;br /&gt;
 palGetProcessId() - Get current process Id&lt;br /&gt;
 palSleep() - Suspend the execution of the current thread&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Logging&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is optional. &lt;br /&gt;
&lt;br /&gt;
 palLog() - Logging utility&lt;br /&gt;
&lt;br /&gt;
=== Updated Routines  ===&lt;br /&gt;
&lt;br /&gt;
*Function signatures and functionalities of palWait() &amp;amp;amp; palNotify() have been updated.&lt;br /&gt;
&lt;br /&gt;
 palWait() - now takes in an in/out pointer for events notification&lt;br /&gt;
 palNotify() - mail box Id has been updated to notify any event including mail box Ids.&lt;br /&gt;
&lt;br /&gt;
*Function signatures of palMemAlloc() &amp;amp;amp; palMemFree() have been updated.&lt;br /&gt;
&lt;br /&gt;
=== Removed Routines  ===&lt;br /&gt;
&lt;br /&gt;
 palProtect&lt;br /&gt;
 palUnprotect&lt;br /&gt;
 palCriticalErr&lt;br /&gt;
&lt;br /&gt;
=== Removed Modules  ===&lt;br /&gt;
&lt;br /&gt;
 S2Mem - Memory module provided as part of PAL has been removed. If native OS does not support dynamic memory, Runtime&#039;s memory management module &#039;&#039;srMem&#039;&#039; can be used instead of &#039;&#039;S2Mem&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
&lt;br /&gt;
*STRIDE Host Release &#039;&#039;&#039;3.0.01xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;. &lt;br /&gt;
*In order to eliminate redundancy and promote an object-oriented design, &amp;quot;Member Methods&amp;quot; have been removed from srTest; only &amp;quot;Member Objects&amp;quot; exist now in srTest. In addition, accessing the functionality of Member Objects in this way is similar to accessing scripting objects through the STRIDE Reporter object model. For a detailed explanation, refer to [[Test_Units#C.2B.2B_Test_Classes|this article]] on the STRIDE Support Wiki. &lt;br /&gt;
*A new routine, &#039;&#039;&#039;srInit()&#039;&#039;&#039;, replaces deprecated &#039;&#039;&#039;srInitialize()&#039;&#039;&#039;. Now the target will not be able to set an auto-connect with timeout. &lt;br /&gt;
*The &#039;&#039;&#039;scl_tp&#039;&#039;&#039; and &#039;&#039;&#039;scl_tp_format&#039;&#039;&#039; pragmas have been deprecated. The new pragmas are &#039;&#039;&#039;scl_tracepoint&#039;&#039;&#039; and &#039;&#039;&#039;scl_tracepoint_format&#039;&#039;&#039;. &lt;br /&gt;
*The default runtime configuration in srcfg.h now has fragmentation turned on. The srCFG_MAX_TRANSPORT_UNIT is set to 2048. &lt;br /&gt;
*Fixed warnings for parameter name differences in function declarations and definitions for srSubscribe(), srTracePoint(), and srQuerySMID(). &lt;br /&gt;
*Removed unnecessary/extra response to srCONNECT_CLOSE_T_SMID message. &lt;br /&gt;
*The Runtime now checks for the connection before responding with a &amp;quot;Pong&amp;quot; upon receiving a &amp;quot;Ping.&amp;quot; &lt;br /&gt;
*Introduced 40 additional system trace points to better describe internal errors. &lt;br /&gt;
*Reporting of the error srERR_SUB_NONE has been suppressed so that it no longer generates a target trace error. &lt;br /&gt;
*Trace views now always display srTraceStr() with reserved STID (srSTID_RESERVED) regardless of trace filter settings. &lt;br /&gt;
*srPtrSetupChild() now accepts NULL for handle (out pointer - pwHandle). &lt;br /&gt;
*Added a new Runtime Test Services (RTS) API &#039;&#039;&#039;srTestCaseSetStatusEx()&#039;&#039;&#039;, which enables the providing of the actual return value of a numeric test method in the case of failure. &lt;br /&gt;
*Added two new public APIs - &amp;quot;Printing&amp;quot; APIs to display messages on Trace Views without having to specify a STID or a trace level and to set any trace filters on Trace Views. These routines support formatted strings with variable arguments. The &#039;&#039;&#039;srPrintInfo()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and Level=3. The &#039;&#039;&#039;srPrintError()&#039;&#039;&#039; will show as srTraceStr() with STID=0 and the Level=1. &#039;&#039;&#039;Warning:&#039;&#039;&#039; These new APIs use vsnprintf() routine to process variable arguments. The vsnprintf() became a standard in C99 and is supported in C90. &lt;br /&gt;
*To support multi-process target, significant changes have been made to runtime. &lt;br /&gt;
*A new public routine, srUninit(), has been added to sr.h &amp;amp;amp; srapi.c. &lt;br /&gt;
* A new public routine for Runtime Thread exit point, srThreadUninit(), has been added to sr.h &amp;amp;amp; srthread.c. &lt;br /&gt;
*A new module, srMem, for Memory Management has been added. Its new routines, _srMem_Allocate() &amp;amp;amp; _srMem_Free(), will be used in PAL&#039;s palMemAlloc() &amp;amp;amp; palMemFree() in case of multi-process target is enabled. &lt;br /&gt;
*Calls to palProtect() &amp;amp;amp; palUnprotect() have been replaced by new routines _srProtect() &amp;amp;amp; _srUnprotect(), in which the implementation uses its own mutex object that calls PAL&#039;s mutex routines. &lt;br /&gt;
*In target Test Classes and Test Functions, added capability to specify the comment label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
* Fixed a potential data abort issue when executing delegate code in the IM prior to Runtime being initialized.&lt;br /&gt;
* Runtime Test Services APIs are now thread safe. &lt;br /&gt;
* Fixed cancelation of remote boadcast subcribtion goes in an infinite loop.&lt;br /&gt;
* Fixed Runtime resource abuse when sending lots of broadcast messages. &lt;br /&gt;
* Added partial check for message payload corectness.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapi.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srconn.h&lt;br /&gt;
 srerr.c&lt;br /&gt;
 srib.c&lt;br /&gt;
 srib.h&lt;br /&gt;
 sribctrl.c&lt;br /&gt;
 sribtr.c&lt;br /&gt;
 sribtr.h&lt;br /&gt;
 srmsgmar.c&lt;br /&gt;
 srmsgptr.c&lt;br /&gt;
 srmsgptr.h&lt;br /&gt;
 srmsgque.c&lt;br /&gt;
 srmsgque.h&lt;br /&gt;
 srmsgrt.c&lt;br /&gt;
 srmsgrt.h&lt;br /&gt;
 srmsgsub.c&lt;br /&gt;
 srmsgsub.h&lt;br /&gt;
 srstid.c&lt;br /&gt;
 srstid.h&lt;br /&gt;
 srsuid.c&lt;br /&gt;
 srsuid.h&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
 srtestutil.c&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srthread.c&lt;br /&gt;
 srthread.h&lt;br /&gt;
 srtime.c&lt;br /&gt;
 srtime.h&lt;br /&gt;
 srtp.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The following Runtime files have been added:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srmem.c&lt;br /&gt;
 srmem.h&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.01xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== AutoScript  ==&lt;br /&gt;
&lt;br /&gt;
Any use of test classes through the Functions collection, like: &lt;br /&gt;
&lt;br /&gt;
$main::ascript-&amp;amp;gt;Functions-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;User-&amp;amp;gt;Call(); &lt;br /&gt;
&lt;br /&gt;
should be converted to use the new TestUnits collection: &lt;br /&gt;
&lt;br /&gt;
$main::ascript-&amp;amp;gt;TestUnits-&amp;amp;gt;Item(&amp;quot;my_test_class&amp;quot;)-&amp;amp;gt;Run(); &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== API Changes  ===&lt;br /&gt;
&lt;br /&gt;
*The Support Wiki pages now contain reference help for AutoScript. The content has been updated to reflect the API changes, for details see the &#039;&#039;AutoScript API Reference&#039;&#039;. &lt;br /&gt;
*All synchronous method calls now throw exceptions in order to indicate error conditions rather than have error conditions encoded in return values. &lt;br /&gt;
*Asychronous method calls never throw exceptions to indicate error conditions. Instead, error conditions are delivered as a new Error object that is returned to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039;. (Asynchronous methods are &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;) &lt;br /&gt;
*If &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; times out, an Error object is returned. Previously NULL was returned in this case. &lt;br /&gt;
*All objects returned by &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; have &#039;&#039;&#039;Type&#039;&#039;&#039; and &#039;&#039;&#039;Name&#039;&#039;&#039; properties. When the &#039;&#039;&#039;Type&#039;&#039;&#039; is “Error”, the Error object has additional properties that contain further details about the error. &lt;br /&gt;
*All existing script syntax for designation of message payloads has been deprecated. A new syntax that allows for greater expression has been adopted. Details can be found [[Updated Message Payload Syntax|here]]. There are no syntax changes to function payloads. &lt;br /&gt;
*The signature for &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; has been changed. Successful calls to &#039;&#039;&#039;ascript.Initialize&#039;&#039;&#039; now fully initialize the object.&lt;br /&gt;
&lt;br /&gt;
=== End-Of-Lifed Methods and Properties  ===&lt;br /&gt;
&lt;br /&gt;
The following have been End-Of-Lifed (EOL&#039;d). A call to any of these methods or an access to any of these properties will now result in a not-implemented exception in the script making the call or access. &lt;br /&gt;
&lt;br /&gt;
*ascript.Quit() &lt;br /&gt;
*ascript.Interfaces &lt;br /&gt;
*ascript.NamedEvents &lt;br /&gt;
*ascript.WaitForEventWithTimeout &lt;br /&gt;
*ascript.RspTimeoutNotifyEnabled &lt;br /&gt;
*ascript.CreateTimer() &lt;br /&gt;
*ascript.DestroyTimer() &lt;br /&gt;
*ascript.WaitTimeoutNotifyEnabled &lt;br /&gt;
*ascript.Compare_As_C_Values() &lt;br /&gt;
*ascript.AsyncErrorNotifyEnabled &lt;br /&gt;
*ascript.Function.Item().User/Owner.SMID&lt;br /&gt;
&lt;br /&gt;
=== Recommended Steps for Migration From a Previous Version  ===&lt;br /&gt;
&lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; in all scripts. Previous logic to test for null indicating timeouts must be modified. &#039;&#039;&#039;WaitForEvent()&#039;&#039;&#039; now always returns an object, in the case of a timeout (or other error) an Error object is returned. &lt;br /&gt;
*Search for calls to &#039;&#039;&#039;ascript.Quit&#039;&#039;&#039; in all scripts. Modify the logic as necessary to exit the script by other means in place of the original &#039;&#039;&#039;Quit()&#039;&#039;&#039; call. &lt;br /&gt;
*Search for all asynchronous method calls (Asynchronous calls are limited to &#039;&#039;&#039;function.Owner.Return()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;function.User.CallBypassOverrideNonBlocking()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.Broadcast()&#039;&#039;&#039;, &#039;&#039;&#039;message.Owner.SendRsp()&#039;&#039;&#039;, &#039;&#039;&#039;message.User.SendCmd()&#039;&#039;&#039;, and &#039;&#039;&#039;message.User.SendCmdBypassOverride()&#039;&#039;&#039;). Modify the logic as necessary to call &#039;&#039;&#039;ascript.WaitForEvent()&#039;&#039;&#039; if errors (including timeout error) should be detected. &lt;br /&gt;
*If you have scripts that explicitly instantiate an &#039;&#039;&#039;ascript&#039;&#039;&#039; object (i.e. they create an object using the &#039;&#039;&#039;&amp;quot;STRIDE.ascript&amp;quot;&#039;&#039;&#039; PROGID), search for all occurrences and modify the subsequent call to &#039;&#039;&#039;ascript.Initialize()&#039;&#039;&#039; to pass the new parameter set. &lt;br /&gt;
*Search for all EOL&#039;d methods and properties. Each can be replaced by setting the appropriate timeout property and handling the timeout error object delivered by WaitForEvent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;Section1&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%; border-collapse: collapse;&amp;quot; class=&amp;quot;MsoTableGrid&amp;quot;&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1pt solid windowtext; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;EOL’d&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Method or Property&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;&amp;quot; | &lt;br /&gt;
&#039;&#039;&#039;Recommended Replacement&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Quit&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Refactor&amp;lt;/span&amp;gt; script logic to exit the script by other means. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Interfaces&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Functions&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Messages&amp;lt;/span&amp;gt; as appropriate. &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.NamedEvents&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitForEventWithTimeout&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() after setting desired timeout using &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitTimeoutPeriod&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.RspTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.CreateTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Add&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.DestroyTimer&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Timers.Remove&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.WaitTimeoutNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Timeout notifications are performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Compare_As_C_Values&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;()&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Contact S2 Technologies &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.AsyncErrorNotifyEnabled&#039;&#039;&#039;&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
No longer needed. Error notification from asynchronous calls is performed by returning an Error object from &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.WaitForEvent&amp;lt;/span&amp;gt;() &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;&#039;&#039;&#039;ascript.Function.Item&#039;&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SMID&amp;lt;/span&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;&amp;quot; | &lt;br /&gt;
Use &amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;ascript.Function.Item&amp;lt;/span&amp;gt;().User/&amp;lt;span class=&amp;quot;SpellE&amp;quot;&amp;gt;Owner.SUID&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PAL  ==&lt;br /&gt;
&lt;br /&gt;
Please refer to &#039;&#039;&#039;&#039;&#039;Platform Abstraction Layer (PAL) Specification&#039;&#039;&#039;&#039;&#039; for detailed information on new APIs. You may also refer to Linux implementation of PAL, which has been updated with new routines. &lt;br /&gt;
&lt;br /&gt;
*Implement new shared memory routines, palMemSegmentOpen() &amp;amp;amp; palMemSegmentClose(). In case of multi-process target, these routines should implement shared memory using memory-mapped files.&lt;br /&gt;
&lt;br /&gt;
*Runtime now can manage dynamic, configurable, and internal static memory. In case of multi-process target, update palMemAlloc() to simply call _srMem_Allocate() and palMemFree() to simply call _srMem_Free(). In case of single-process target, you can simply allocate dynamic memory according to your Operating System. If you are upgrading, you can simply leave the current implementation as it is.&lt;br /&gt;
&lt;br /&gt;
*Implement new mutex routines, palMutexInit(), palMutexDestroy(), palMutexLock() &amp;amp;amp; palMutexUnlock, to handle any named mutex objects. It is recommended to implement a separate code for shared memory case if it is necessary.&lt;br /&gt;
&lt;br /&gt;
*Remove old routines palProtect(), palUnprotect() and palCriticalErr().&lt;br /&gt;
&lt;br /&gt;
*Implement new routines palGetThreadId() and palGetProcessId().&lt;br /&gt;
&lt;br /&gt;
*Implement new routine palSleep().&lt;br /&gt;
&lt;br /&gt;
*Update synchronization routines, palCreateNID(), palDeleteNID(), palWait() &amp;amp;amp; palNotify(), to support event notifications and in case of multi-process target is enabled, sharing of the synchronization objects among multiple processors.&lt;br /&gt;
&lt;br /&gt;
*If your PAL uses &#039;&#039;S2Mem&#039;&#039; routines for dynamic memory, you should use new Runtime module &#039;&#039;srMem&#039;&#039;. Update palMemAlloc() to call _srMem_Allocate() and palMemFree() to call _srMem_Free().&lt;br /&gt;
&lt;br /&gt;
*Optionally, implement new routine palLog() as a logging utility for PAL and Runtime.&lt;br /&gt;
&lt;br /&gt;
== Runtime  ==&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new memory management (srCFG_MEMORY_MANAGEMENT) and multi-process target (srCFG_MULTI_PROC_TARGET) settings. By default, memory management and multi-process target are disabled. If you enable multi-process target you also need to enable memory management and configure the sizes and the maximum number of memory blocks. New Runtime module &#039;&#039;srMem&#039;&#039; uses these configurations to allocate and manage memory segments.&lt;br /&gt;
&lt;br /&gt;
*Edit &#039;&#039;&#039;srcfg.h&#039;&#039;&#039; file to configure the new target connection timeout setting (srCFG_CONNECTION_TIMEOUT).&lt;br /&gt;
&lt;br /&gt;
*If target Test Classes and Test Functions are used, change the signature to include test label in srTestCaseAddComment() and AddComment() APIs.&lt;br /&gt;
&lt;br /&gt;
== Windows Applications using Windows Off-Target SDK  ==&lt;br /&gt;
&lt;br /&gt;
*The new &#039;&#039;&#039;s2srwin.lib&#039;&#039;&#039; has public API, published in a header srwin.h, containing the following set of routines:&lt;br /&gt;
&lt;br /&gt;
 srWin_SetMaster() - Sets the application as the master and initializes the Stride Runtime thread. In a multi-process environment only one application should make this call.&lt;br /&gt;
 srWin_AddThread() - Adds additional message processing threads to the application.&lt;br /&gt;
 srWin_Run() - Starts the processing and will not return until it has been signaled via keyboard key or CTRL-C.&lt;br /&gt;
 srWin_SetPortTCP() - Overrides the TCP port number (default: 8000) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
 srWin_SetPortSerial() - Overrides the COM port number (default: 1) to which the application will bind for the purpose of accepting connections.&lt;br /&gt;
&lt;br /&gt;
*Existing Host Apps developed against the old hostapphrt and hostapptrt libraries should be updated to as follows: &lt;br /&gt;
**replace the include of hostapp.h with include of srwin.h &lt;br /&gt;
**replace all calls to HostAppXXX() with srWin_XXX() &lt;br /&gt;
**call srWin_SetMaster() to start the runtime thread, srThread, before calling srWin_Run(). Within a multi-process target, only one process (the master) calls this routine.&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;a&amp;quot; ==&lt;br /&gt;
* Linux version of the STRIDE [[Build Tools]] is officially introduced.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0101 Patch &amp;quot;b&amp;quot; ==&lt;br /&gt;
* Relaxed [[scl_cast]]() pragma to allow cast from any integral ptr to union of ptrs&lt;br /&gt;
* Fixed compile warnings in Linux PAL.&lt;br /&gt;
* Fixed issue in instrumentation of [[Test Units]].&lt;br /&gt;
* Fixed issue with UNC paths.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]].&lt;br /&gt;
&lt;br /&gt;
== 3.0.0102 ==&lt;br /&gt;
* Implemented new licensing scheme. Existing licenses will not work anymore and need to be reissued. Old and new licenses could co-exist at the same location.&lt;br /&gt;
* The syntax of [[scl_ptr]] and [[scl_ptr_sized]] pragmas has changed. Now it is required to quote the direction and usage attributes. See this [[Handling_of_pointer_attribute_tokens|page]] for details.&lt;br /&gt;
* [[Test_Units#Runtime_Test_Services|Runtime Test Services]] now support adding annotations per test suite.&lt;br /&gt;
* A complete set of [[Samples]] has been implemented.&lt;br /&gt;
* Fixed several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* Fixed several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Fixed several minor issues in [[AutoScript]]. &lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0102&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039; and &#039;&#039;&#039;3.01&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Chrisj</name></author>
	</entry>
</feed>